odoo-addon-pms 16.0.2.2.0__py3-none-any.whl → 16.0.2.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,7 +11,7 @@ PMS (Property Management System)
11
11
  !! This file is generated by oca-gen-addon-readme !!
12
12
  !! changes will be overwritten. !!
13
13
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14
- !! source digest: sha256:13457eac29b7f289ec719dd1f191176a898c0cb11dcf3258a1126742956a5745
14
+ !! source digest: sha256:f6f53028523305cde7e1d9b86ce9b974bf8905fdf1f66a252b9c095762e7cc77
15
15
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
16
 
17
17
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "name": "PMS (Property Management System)",
6
6
  "summary": "A property management system",
7
- "version": "16.0.2.2.0",
7
+ "version": "16.0.2.4.0",
8
8
  "development_status": "Beta",
9
9
  "category": "Generic Modules/Property Management System",
10
10
  "website": "https://github.com/OCA/pms",
@@ -101,14 +101,15 @@ class AccountMoveLine(models.Model):
101
101
  "statement_line_id.folio_ids",
102
102
  )
103
103
  def _compute_folio_ids(self):
104
- if self.folio_line_ids:
105
- self.folio_ids = self.folio_line_ids.mapped("folio_id")
106
- elif self.payment_id:
107
- self.folio_ids = self.payment_id.folio_ids
108
- elif self.statement_line_id:
109
- self.folio_ids = self.statement_line_id.folio_ids
110
- else:
111
- self.folio_ids = False
104
+ for line in self:
105
+ if line.folio_line_ids:
106
+ line.folio_ids = line.folio_line_ids.mapped("folio_id")
107
+ elif line.payment_id:
108
+ line.folio_ids = line.payment_id.folio_ids
109
+ elif line.statement_line_id:
110
+ line.folio_ids = line.statement_line_id.folio_ids
111
+ else:
112
+ line.folio_ids = False
112
113
 
113
114
  @api.depends("folio_line_ids")
114
115
  def _compute_origin_agency_id(self):
@@ -498,25 +498,43 @@ class PmsCheckinPartner(models.Model):
498
498
  _("State and country of residence do not match")
499
499
  )
500
500
 
501
- def set_partner_address(self):
501
+ def set_partner_address(self, residence_vals=None):
502
502
  """
503
503
  Only sets the checkin.partner address in the associated partner if
504
- the partner don't have any address field filled.
504
+ the partner has no address yet or the changes do not conflict with
505
+ the partner's address.
505
506
  """
506
- for record in self:
507
- if record.partner_id:
508
- residence_vals = {
509
- "street": record.street,
510
- "street2": record.street2,
511
- "zip": record.zip,
512
- "city": record.city,
513
- "country_id": record.country_id.id,
514
- "state_id": record.state_id.id,
515
- }
516
- if any(residence_vals.values()):
517
- address_fields = residence_vals.keys()
518
- if not any(record.partner_id[field] for field in address_fields):
519
- record.partner_id.write(residence_vals)
507
+ self.ensure_one()
508
+ if not self.partner_id:
509
+ return
510
+ address_fields = {"street", "street2", "zip", "city", "country_id", "state_id"}
511
+ # If it comes form create, we take the values from the checkin.partner
512
+ if residence_vals is None:
513
+ residence_vals = {
514
+ field: self[field].id if hasattr(self[field], "id") else self[field]
515
+ for field in address_fields
516
+ }
517
+
518
+ if any(residence_vals.values()):
519
+ address_fields = residence_vals.keys()
520
+ if any(
521
+ (
522
+ self.partner_id[field].id
523
+ if hasattr(self.partner_id[field], "id")
524
+ else self.partner_id[field]
525
+ )
526
+ != residence_vals.get(field)
527
+ for field in address_fields
528
+ if self.partner_id[field]
529
+ ):
530
+ return
531
+ vals_to_write = {
532
+ field: residence_vals[field]
533
+ for field in address_fields
534
+ if residence_vals.get(field) and not self.partner_id[field]
535
+ }
536
+ if vals_to_write:
537
+ self.partner_id.write(vals_to_write)
520
538
 
521
539
  def set_partner_id(self):
522
540
  for record in self:
@@ -563,7 +581,8 @@ class PmsCheckinPartner(models.Model):
563
581
  records_without_partner = records.filtered(lambda r: not r.partner_id)
564
582
  if records_without_partner:
565
583
  records_without_partner.set_partner_id()
566
- records.set_partner_address()
584
+ for record in records:
585
+ record.set_partner_address()
567
586
  return records
568
587
 
569
588
  def write(self, vals):
@@ -573,11 +592,14 @@ class PmsCheckinPartner(models.Model):
573
592
  tourist_tax_services_cmds = reservation._compute_tourist_tax_lines()
574
593
  if tourist_tax_services_cmds:
575
594
  reservation.write({"service_ids": tourist_tax_services_cmds})
576
- records_without_partner = self.filtered(lambda r: not r.partner_id)
577
- if records_without_partner:
578
- records_without_partner.set_partner_id()
579
-
580
- self.set_partner_address()
595
+ if not self._context.get("skip_set_partner_data"):
596
+ records_without_partner = self.filtered(lambda r: not r.partner_id)
597
+ if records_without_partner:
598
+ records_without_partner.with_context(
599
+ skip_set_partner_data=True
600
+ ).set_partner_id()
601
+ for record in self:
602
+ record.set_partner_address()
581
603
  return res
582
604
 
583
605
  def unlink(self):
@@ -372,7 +372,7 @@ ul.auto-toc {
372
372
  !! This file is generated by oca-gen-addon-readme !!
373
373
  !! changes will be overwritten. !!
374
374
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375
- !! source digest: sha256:13457eac29b7f289ec719dd1f191176a898c0cb11dcf3258a1126742956a5745
375
+ !! source digest: sha256:f6f53028523305cde7e1d9b86ce9b974bf8905fdf1f66a252b9c095762e7cc77
376
376
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
377
377
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/pms/tree/16.0/pms"><img alt="OCA/pms" src="https://img.shields.io/badge/github-OCA%2Fpms-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/pms-16-0/pms-16-0-pms"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/pms&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
378
378
  <p>This module is an all-in-one property management system (PMS) focused on medium-sized properties
@@ -1204,3 +1204,141 @@ class TestPmsCheckinPartner(TestPms):
1204
1204
  self.partner_id[key],
1205
1205
  "The value of " + key + " is not correctly established",
1206
1206
  )
1207
+
1208
+ def test_partner_without_address_gets_checkin_address(self):
1209
+ """Test that a partner without an address gets the address from the
1210
+ checkin partner"""
1211
+ partner = self.env["res.partner"].create(
1212
+ {
1213
+ "firstname": "Test",
1214
+ "lastname": "Partner",
1215
+ }
1216
+ )
1217
+ checkin_partner = self.env["pms.checkin.partner"].create(
1218
+ {
1219
+ "partner_id": partner.id,
1220
+ "reservation_id": self.reservation_1.id,
1221
+ }
1222
+ )
1223
+ checkin_partner.write(
1224
+ {
1225
+ "street": "test",
1226
+ "city": "Madrid",
1227
+ "country_id": self.env.ref("base.es").id,
1228
+ }
1229
+ )
1230
+ self.assertEqual(partner.street, "test")
1231
+ self.assertEqual(partner.city, "Madrid")
1232
+ self.assertEqual(partner.country_id, self.env.ref("base.es"))
1233
+
1234
+ def test_partner_with_partial_address_gets_checkin_address(self):
1235
+ """Test that a partner with a partial address gets the missing fields
1236
+ from the checkin partner"""
1237
+ partner = self.env["res.partner"].create(
1238
+ {
1239
+ "firstname": "Test",
1240
+ "lastname": "Partner",
1241
+ "street": "existing street",
1242
+ }
1243
+ )
1244
+ checkin_partner = self.env["pms.checkin.partner"].create(
1245
+ {
1246
+ "partner_id": partner.id,
1247
+ "reservation_id": self.reservation_1.id,
1248
+ }
1249
+ )
1250
+ checkin_partner.write(
1251
+ {
1252
+ "city": "Madrid",
1253
+ "country_id": self.env.ref("base.es").id,
1254
+ }
1255
+ )
1256
+ self.assertEqual(partner.street, "existing street")
1257
+ self.assertEqual(partner.city, "Madrid")
1258
+ self.assertEqual(partner.country_id, self.env.ref("base.es"))
1259
+
1260
+ def test_partner_with_same_address_allows_new_fields(self):
1261
+ """Test that a partner with the same address allows updating address
1262
+ fields who are empty from the checkin partner"""
1263
+ partner = self.env["res.partner"].create(
1264
+ {
1265
+ "firstname": "Test",
1266
+ "lastname": "Partner",
1267
+ "street": "existing street",
1268
+ }
1269
+ )
1270
+ checkin_partner = self.env["pms.checkin.partner"].create(
1271
+ {
1272
+ "partner_id": partner.id,
1273
+ "reservation_id": self.reservation_1.id,
1274
+ }
1275
+ )
1276
+ checkin_partner.write(
1277
+ {
1278
+ "street": "existing street",
1279
+ "city": "Madrid",
1280
+ "country_id": self.env.ref("base.es").id,
1281
+ }
1282
+ )
1283
+ self.assertEqual(partner.street, "existing street")
1284
+ self.assertEqual(partner.city, "Madrid")
1285
+ self.assertEqual(partner.country_id, self.env.ref("base.es"))
1286
+
1287
+ def test_partner_address_used_over_checkin_address(self):
1288
+ """Test that a partner with a full address blocks updating the
1289
+ address from the checkin partner"""
1290
+ partner = self.env["res.partner"].create(
1291
+ {
1292
+ "firstname": "Test",
1293
+ "lastname": "Partner",
1294
+ "street": "existing street",
1295
+ "city": "Existing city",
1296
+ "country_id": self.env.ref("base.us").id,
1297
+ }
1298
+ )
1299
+ checkin_partner = self.env["pms.checkin.partner"].create(
1300
+ {
1301
+ "partner_id": partner.id,
1302
+ "reservation_id": self.reservation_1.id,
1303
+ }
1304
+ )
1305
+ checkin_partner.write(
1306
+ {
1307
+ "street": "test",
1308
+ "city": "Madrid",
1309
+ "country_id": self.env.ref("base.es").id,
1310
+ }
1311
+ )
1312
+ self.assertEqual(partner.street, "existing street")
1313
+ self.assertEqual(partner.city, "Existing city")
1314
+ self.assertEqual(partner.country_id, self.env.ref("base.us"))
1315
+
1316
+ def test_partner_with_different_many2one_address_field_blocks_update(self):
1317
+ """
1318
+ Test that a partner with a different country blocks updating
1319
+ the address from the checkin partner.
1320
+
1321
+ """
1322
+ partner = self.env["res.partner"].create(
1323
+ {
1324
+ "firstname": "Test",
1325
+ "lastname": "Partner",
1326
+ "country_id": self.env.ref("base.us").id,
1327
+ }
1328
+ )
1329
+ checkin_partner = self.env["pms.checkin.partner"].create(
1330
+ {
1331
+ "partner_id": partner.id,
1332
+ "reservation_id": self.reservation_1.id,
1333
+ }
1334
+ )
1335
+ checkin_partner.write(
1336
+ {
1337
+ "street": "test",
1338
+ "city": "Madrid",
1339
+ "country_id": self.env.ref("base.es").id,
1340
+ }
1341
+ )
1342
+ self.assertEqual(partner.country_id, self.env.ref("base.us"))
1343
+ self.assertFalse(partner.street)
1344
+ self.assertFalse(partner.city)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-pms
3
- Version: 16.0.2.2.0
3
+ Version: 16.0.2.4.0
4
4
  Summary: A property management system
5
5
  Home-page: https://github.com/OCA/pms
6
6
  Author: Commit [Sun], Odoo Community Association (OCA)
@@ -35,7 +35,7 @@ PMS (Property Management System)
35
35
  !! This file is generated by oca-gen-addon-readme !!
36
36
  !! changes will be overwritten. !!
37
37
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
38
- !! source digest: sha256:13457eac29b7f289ec719dd1f191176a898c0cb11dcf3258a1126742956a5745
38
+ !! source digest: sha256:f6f53028523305cde7e1d9b86ce9b974bf8905fdf1f66a252b9c095762e7cc77
39
39
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
40
40
 
41
41
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -1,6 +1,6 @@
1
- odoo/addons/pms/README.rst,sha256=owdI9pABr08ZfJVrSxn8pAuHkpVAeR3s5QSfO9or9L0,3898
1
+ odoo/addons/pms/README.rst,sha256=4cG1dtlxF2LA38SRMH-NhcxQypNoch-CIfb_Rzlsx1U,3898
2
2
  odoo/addons/pms/__init__.py,sha256=uCUbRxtCubFHrz65XPTEmSu2XU6tpojVZ8MYot9bPMg,171
3
- odoo/addons/pms/__manifest__.py,sha256=qfV29WCThKPFnrpeQcyHVbCSQCIfxfXxF_3CxhWhxUc,4723
3
+ odoo/addons/pms/__manifest__.py,sha256=MbtZpSZVcpvOHixZrr3hc-Z434NN_NJybpr20VVrqz4,4723
4
4
  odoo/addons/pms/init_hook.py,sha256=2QMZH2wbC7SJxHUM1SQMqjdQqLITbt3w8vK5noEjIjw,518
5
5
  odoo/addons/pms/controllers/__init__.py,sha256=ac3kwg8QNSm7JicAACF5d8vPmqDydqO8gEiPh7SIeks,25
6
6
  odoo/addons/pms/controllers/pms_portal.py,sha256=Xkxi-vY16mSNQRhXokbLFaehb8Ni5qew_J7pDKEg-Gc,18528
@@ -35,7 +35,7 @@ odoo/addons/pms/models/account_bank_statement.py,sha256=x3twvY5dlGhGoaGd5KacH4-2
35
35
  odoo/addons/pms/models/account_bank_statement_line.py,sha256=LCdgwgPKB7zcqvdveZOw0IU3KlXGlV_7_4X17o-xEr0,2196
36
36
  odoo/addons/pms/models/account_journal.py,sha256=rKRrGg-mF8zikzoamEUpu1fA53d-GIQmXeTUmIRG5rU,3856
37
37
  odoo/addons/pms/models/account_move.py,sha256=C98kPfkjSdYb3CHGCwc619f7Vq-XGkpShNV9rAAuKkc,16727
38
- odoo/addons/pms/models/account_move_line.py,sha256=spN3q7_C1qCazAUwzJ7a0qECV0vbUzXAq-UdxaZ5sq4,7371
38
+ odoo/addons/pms/models/account_move_line.py,sha256=SGjWLG9sbe-mo1eiqA1KMGK6GUHCayLGYUBF_nt3xRg,7429
39
39
  odoo/addons/pms/models/account_payment.py,sha256=qEla5djD1qU5PaKKgaqQxDl9z8jBcdWl9HeyL34qQqk,8680
40
40
  odoo/addons/pms/models/folio_sale_line.py,sha256=0F5K_1OrcBDM97gcpFB9sx8gm1naiY77-1aXIa-jA04,46045
41
41
  odoo/addons/pms/models/ir_config_parameter.py,sha256=vPqpdoYuQen-PbWwubXhwRnvIBA73UKO7YL3nyZg2Lg,732
@@ -55,7 +55,7 @@ odoo/addons/pms/models/pms_board_service_line.py,sha256=_E4SckqTskSuVlxAtYNnNCE8
55
55
  odoo/addons/pms/models/pms_board_service_room_type.py,sha256=PbDrVf50bwN49yKQDi8Sf92kxg0X3IHRLgfUzylSvt4,5783
56
56
  odoo/addons/pms/models/pms_board_service_room_type_line.py,sha256=Xt78_qJPn4wIxiQaloPBKpIAIncBY0bjIQ6FdsxMQqk,2028
57
57
  odoo/addons/pms/models/pms_cancelation_rule.py,sha256=G6IoM_h4XYJUqx8SlgFB7lPmwy7LBefJ4Gzreg0QUCA,3038
58
- odoo/addons/pms/models/pms_checkin_partner.py,sha256=-5IKBWzxpdqGtC3XHCata0XWd9wqWJchcfYYjJyHR9k,27996
58
+ odoo/addons/pms/models/pms_checkin_partner.py,sha256=tc0g4yksqArmK9-OiIWiR4rIT0WxapmirsS5eMsDF-g,28856
59
59
  odoo/addons/pms/models/pms_folio.py,sha256=zgvXy8b5VzW3xol4B9tLsBedq1xzNMLt6EaRv8-4ciQ,107816
60
60
  odoo/addons/pms/models/pms_property.py,sha256=v42QM9A9xULsSd770pRRUrLgPBwg46U4mtlO6kyBQeI,45832
61
61
  odoo/addons/pms/models/pms_reservation.py,sha256=8D0SNxiULBVzzbA8syc6aSsXpXE7GNIZIgRXY6bUsGo,107774
@@ -93,7 +93,7 @@ odoo/addons/pms/security/ir.model.access.csv,sha256=yLqMoKZR8eAuUWOm9Fys0JCeCZlo
93
93
  odoo/addons/pms/security/pms_security.xml,sha256=ojrBeQtkn1D7EPnaVLRf4hT60JB4K2ma00hr9vv-LTo,13646
94
94
  odoo/addons/pms/static/description/avatar.png,sha256=CWIs64cZDPrrZVmRCyV_cD_h03lWUoQikvCllgrsELY,4370
95
95
  odoo/addons/pms/static/description/icon.png,sha256=_y1zF9kLND2nIpLMurvkkyiMfUq53JN26oN7_h-PfH0,24626
96
- odoo/addons/pms/static/description/index.html,sha256=_Ge-TqWCX1l0aRVE-5PcKwdv6StQekGQvFWB_D_WSak,14070
96
+ odoo/addons/pms/static/description/index.html,sha256=XUc7MyB7CaAXFPr6v4Ehl4ozNao9_L6-UDb0tLRhmS4,14070
97
97
  odoo/addons/pms/static/img/icon-door.svg,sha256=Vt62k1RKXIt7zha9_uZJKPrlgdEUto9d2q_IEbxRigI,1514
98
98
  odoo/addons/pms/static/img/icon-mail.svg,sha256=H0NQ5fACCKoJ7KLfPQvaHMwhD2qNk6-T7FEkoW9r0Vo,950
99
99
  odoo/addons/pms/static/img/icon-phone.svg,sha256=T03z7if6caEBtf_F_3HnRi6AgNeZxbgCGWeGzMMjZlw,1340
@@ -106,7 +106,7 @@ odoo/addons/pms/tests/test_automated_mails.py,sha256=kHGbqNRLtTif-2wZzep3ATMa-f8
106
106
  odoo/addons/pms/tests/test_pms_availability_plan_rules.py,sha256=yukdmwgYJuDy1G3GuqHgkMOtUtfyzBoR2RrP1wzH_0s,23516
107
107
  odoo/addons/pms/tests/test_pms_board_service.py,sha256=GEXYxLAEj4QG8rZjg-PPZMEwEE2Xe17JibjodCILclA,15364
108
108
  odoo/addons/pms/tests/test_pms_booking_engine.py,sha256=2Rxxl6NWI6w3ZBBu8BNEGKyQlDrvipO_JCVtyW8q3A0,32268
109
- odoo/addons/pms/tests/test_pms_checkin_partner.py,sha256=YWV7P-t0t9JhcuwjtSUqHFbr_WpR0LbjJIV9Gvu99yc,41538
109
+ odoo/addons/pms/tests/test_pms_checkin_partner.py,sha256=9iv5Jre8PYsCNYupIY07AFowty3xage4jPd1YksXQxg,46431
110
110
  odoo/addons/pms/tests/test_pms_folio.py,sha256=cld85Hfi3h7TJ5TP1ZmWjoKnKRJc3YWvlBBuN7CkOVQ,55345
111
111
  odoo/addons/pms/tests/test_pms_folio_invoice.py,sha256=BcrPyBWfjCWy5YTdh4RUEaKLS2UHQv1WJTMbq2vhyeg,35219
112
112
  odoo/addons/pms/tests/test_pms_folio_prices.py,sha256=tBqz6AyowOMStRM3-trLbkLpO3RoFvq3_U6zO3pxJQM,288
@@ -193,7 +193,7 @@ odoo/addons/pms/wizards/wizard_several_partners.py,sha256=nOYHInUyT7bV4opyk03_i-
193
193
  odoo/addons/pms/wizards/wizard_several_partners.xml,sha256=tuSIYJiqN_EprlwI7cBrteMPblHoybcHBDrHO1di0DY,1382
194
194
  odoo/addons/pms/wizards/wizard_split_join_swap_reservation.py,sha256=D0AFrimn4lViWSnQ0sgM1msVniUudbgqvS0hRIBkXfQ,13751
195
195
  odoo/addons/pms/wizards/wizard_split_join_swap_reservation.xml,sha256=MDyXIdQfumI7WnXqO5E4fCqM4BW32CIwS97tF66gBy8,5940
196
- odoo_addon_pms-16.0.2.2.0.dist-info/METADATA,sha256=m9jpVOSM5B1uUSwjfoK1PUeG15w3KpD66-fEyuS6uT8,4917
197
- odoo_addon_pms-16.0.2.2.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
198
- odoo_addon_pms-16.0.2.2.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
199
- odoo_addon_pms-16.0.2.2.0.dist-info/RECORD,,
196
+ odoo_addon_pms-16.0.2.4.0.dist-info/METADATA,sha256=NiBmIcEH0C5Q0DeOPIJAbWeDPrFoJp9LE8BSGKR8P-Q,4917
197
+ odoo_addon_pms-16.0.2.4.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
198
+ odoo_addon_pms-16.0.2.4.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
199
+ odoo_addon_pms-16.0.2.4.0.dist-info/RECORD,,