odoo-addon-pms 16.0.2.3.0__py3-none-any.whl → 16.0.2.5.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.
- odoo/addons/pms/README.rst +1 -1
- odoo/addons/pms/__manifest__.py +1 -1
- odoo/addons/pms/models/folio_sale_line.py +7 -2
- odoo/addons/pms/models/pms_checkin_partner.py +44 -22
- odoo/addons/pms/models/pms_folio.py +19 -3
- odoo/addons/pms/models/pms_property.py +2 -0
- odoo/addons/pms/static/description/index.html +1 -1
- odoo/addons/pms/tests/test_pms_checkin_partner.py +138 -0
- odoo/addons/pms/wizards/folio_make_invoice_advance.py +20 -11
- {odoo_addon_pms-16.0.2.3.0.dist-info → odoo_addon_pms-16.0.2.5.0.dist-info}/METADATA +2 -2
- {odoo_addon_pms-16.0.2.3.0.dist-info → odoo_addon_pms-16.0.2.5.0.dist-info}/RECORD +13 -13
- {odoo_addon_pms-16.0.2.3.0.dist-info → odoo_addon_pms-16.0.2.5.0.dist-info}/WHEEL +0 -0
- {odoo_addon_pms-16.0.2.3.0.dist-info → odoo_addon_pms-16.0.2.5.0.dist-info}/top_level.txt +0 -0
odoo/addons/pms/README.rst
CHANGED
|
@@ -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:
|
|
14
|
+
!! source digest: sha256:91774a4d1ecfe9c726ac0f4341c1f39b78535f68ad335321ef941f95c455eeb1
|
|
15
15
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
16
16
|
|
|
17
17
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
odoo/addons/pms/__manifest__.py
CHANGED
|
@@ -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.
|
|
7
|
+
"version": "16.0.2.5.0",
|
|
8
8
|
"development_status": "Beta",
|
|
9
9
|
"category": "Generic Modules/Property Management System",
|
|
10
10
|
"website": "https://github.com/OCA/pms",
|
|
@@ -1039,7 +1039,7 @@ class FolioSaleLine(models.Model):
|
|
|
1039
1039
|
result = super().write(values)
|
|
1040
1040
|
return result
|
|
1041
1041
|
|
|
1042
|
-
def _prepare_invoice_line(self, qty=False, **optional_values):
|
|
1042
|
+
def _prepare_invoice_line(self, qty=False, invoice_fpos=None, **optional_values):
|
|
1043
1043
|
"""
|
|
1044
1044
|
Prepare the dict of values to create the new invoice line for a folio sale line.
|
|
1045
1045
|
|
|
@@ -1048,6 +1048,11 @@ class FolioSaleLine(models.Model):
|
|
|
1048
1048
|
should be added to the returned invoice line
|
|
1049
1049
|
"""
|
|
1050
1050
|
self.ensure_one()
|
|
1051
|
+
taxes = invoice_fpos.map_tax(
|
|
1052
|
+
self.product_id.taxes_id.filtered(
|
|
1053
|
+
lambda t, r=self.folio_id: t.company_id == r.env.company
|
|
1054
|
+
)
|
|
1055
|
+
)
|
|
1051
1056
|
if self.is_downpayment:
|
|
1052
1057
|
downpayment_invoice = self.folio_id.move_ids.filtered(
|
|
1053
1058
|
lambda x: x.payment_state != "reversed"
|
|
@@ -1067,7 +1072,7 @@ class FolioSaleLine(models.Model):
|
|
|
1067
1072
|
"quantity": qty if qty else self.qty_to_invoice,
|
|
1068
1073
|
"discount": self.discount,
|
|
1069
1074
|
"price_unit": self.price_unit,
|
|
1070
|
-
"tax_ids": [(6, 0,
|
|
1075
|
+
"tax_ids": [(6, 0, taxes.ids)],
|
|
1071
1076
|
# "analytic_account_id": self.folio_id.analytic_account_id.id,
|
|
1072
1077
|
# "analytic_tag_ids": [(6, 0, self.analytic_tag_ids.ids)],
|
|
1073
1078
|
"folio_line_ids": [(6, 0, [self.id])],
|
|
@@ -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
|
|
504
|
+
the partner has no address yet or the changes do not conflict with
|
|
505
|
+
the partner's address.
|
|
505
506
|
"""
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
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
|
|
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
|
-
|
|
577
|
-
|
|
578
|
-
records_without_partner
|
|
579
|
-
|
|
580
|
-
|
|
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):
|
|
@@ -647,6 +647,10 @@ class PmsFolio(models.Model):
|
|
|
647
647
|
invoice_vals = folio._prepare_invoice(
|
|
648
648
|
partner_invoice_id=group["partner_id"]
|
|
649
649
|
)
|
|
650
|
+
invoice_fpos_id = invoice_vals.get("fiscal_position_id")
|
|
651
|
+
invoice_fpos = self.env["account.fiscal.position"].browse(
|
|
652
|
+
invoice_fpos_id
|
|
653
|
+
)
|
|
650
654
|
# Invoice line values (keep only necessary sections).
|
|
651
655
|
current_section_vals = None
|
|
652
656
|
invoice_lines_vals = []
|
|
@@ -654,7 +658,8 @@ class PmsFolio(models.Model):
|
|
|
654
658
|
if line.display_type == "line_section":
|
|
655
659
|
current_section_vals = line._prepare_invoice_line(
|
|
656
660
|
sequence=invoice_item_sequence
|
|
657
|
-
+ folio.sale_line_ids.ids.index(line.id)
|
|
661
|
+
+ folio.sale_line_ids.ids.index(line.id),
|
|
662
|
+
invoice_fpos=invoice_fpos,
|
|
658
663
|
)
|
|
659
664
|
continue
|
|
660
665
|
if line.display_type != "line_note" and float_is_zero(
|
|
@@ -676,6 +681,7 @@ class PmsFolio(models.Model):
|
|
|
676
681
|
sequence=invoice_item_sequence
|
|
677
682
|
+ folio.sale_line_ids.ids.index(line.id),
|
|
678
683
|
qty=lines_to_invoice[line.id],
|
|
684
|
+
invoice_fpos=invoice_fpos,
|
|
679
685
|
)
|
|
680
686
|
invoice_lines_vals.append(prepared_line)
|
|
681
687
|
|
|
@@ -693,7 +699,8 @@ class PmsFolio(models.Model):
|
|
|
693
699
|
invoice_item_sequence += 1
|
|
694
700
|
invoice_down_payment_vals = down_payment._prepare_invoice_line(
|
|
695
701
|
sequence=invoice_item_sequence
|
|
696
|
-
+ folio.sale_line_ids.ids.index(down_payment.id)
|
|
702
|
+
+ folio.sale_line_ids.ids.index(down_payment.id),
|
|
703
|
+
invoice_fpos=invoice_fpos,
|
|
697
704
|
)
|
|
698
705
|
invoice_lines_vals.append(invoice_down_payment_vals)
|
|
699
706
|
|
|
@@ -2101,6 +2108,15 @@ class PmsFolio(models.Model):
|
|
|
2101
2108
|
(making sure to call super() to establish a clean extension chain).
|
|
2102
2109
|
"""
|
|
2103
2110
|
self.ensure_one()
|
|
2111
|
+
if partner_invoice_id and partner_invoice_id != self.partner_id.id:
|
|
2112
|
+
partner = self.env["res.partner"].browse(partner_invoice_id)
|
|
2113
|
+
fiscal_position = (
|
|
2114
|
+
self.env["account.fiscal.position"]
|
|
2115
|
+
.with_company(self.company_id)
|
|
2116
|
+
._get_fiscal_position(partner)
|
|
2117
|
+
)
|
|
2118
|
+
else:
|
|
2119
|
+
fiscal_position = self.fiscal_position_id
|
|
2104
2120
|
journal = self.pms_property_id._get_folio_default_journal(
|
|
2105
2121
|
partner_invoice_id=partner_invoice_id,
|
|
2106
2122
|
room_ids=self.reservation_ids.mapped("reservation_line_ids.room_id.id"),
|
|
@@ -2148,7 +2164,7 @@ class PmsFolio(models.Model):
|
|
|
2148
2164
|
"invoice_line_ids": [],
|
|
2149
2165
|
"company_id": self.company_id.id,
|
|
2150
2166
|
"payment_reference": self.name,
|
|
2151
|
-
"fiscal_position_id":
|
|
2167
|
+
"fiscal_position_id": fiscal_position.id,
|
|
2152
2168
|
}
|
|
2153
2169
|
return invoice_vals
|
|
2154
2170
|
|
|
@@ -924,6 +924,7 @@ class PmsProperty(models.Model):
|
|
|
924
924
|
)
|
|
925
925
|
folio.sudo().message_post(body=mens)
|
|
926
926
|
raise ValidationError(mens)
|
|
927
|
+
invoice_fpos = invoice.fiscal_position_id
|
|
927
928
|
for downpayment in downpayments.filtered(
|
|
928
929
|
lambda d, i=invoice: d.default_invoice_to == i.partner_id
|
|
929
930
|
):
|
|
@@ -933,6 +934,7 @@ class PmsProperty(models.Model):
|
|
|
933
934
|
invoice_down_payment_vals = downpayment._prepare_invoice_line(
|
|
934
935
|
sequence=max(invoice.invoice_line_ids.mapped("sequence"))
|
|
935
936
|
+ 1,
|
|
937
|
+
invoice_fpos=invoice_fpos,
|
|
936
938
|
)
|
|
937
939
|
invoice.write(
|
|
938
940
|
{"invoice_line_ids": [(0, 0, invoice_down_payment_vals)]}
|
|
@@ -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:
|
|
375
|
+
!! source digest: sha256:91774a4d1ecfe9c726ac0f4341c1f39b78535f68ad335321ef941f95c455eeb1
|
|
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&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)
|
|
@@ -156,15 +156,28 @@ class FolioAdvancePaymentInv(models.TransientModel):
|
|
|
156
156
|
|
|
157
157
|
def _prepare_invoice_values(self, order, name, amount, line):
|
|
158
158
|
partner_id = (
|
|
159
|
-
self.partner_invoice_id.
|
|
160
|
-
if self.partner_invoice_id
|
|
161
|
-
else order.partner_invoice_id.id
|
|
159
|
+
self.partner_invoice_id if self.partner_invoice_id else order.partner_id
|
|
162
160
|
)
|
|
161
|
+
taxes = line.tax_ids
|
|
162
|
+
if partner_id == order.partner_id:
|
|
163
|
+
fiscal_position = order.fiscal_position_id
|
|
164
|
+
else:
|
|
165
|
+
fiscal_position = (
|
|
166
|
+
self.env["account.fiscal.position"]
|
|
167
|
+
.with_company(order.company_id)
|
|
168
|
+
._get_fiscal_position(partner_id)
|
|
169
|
+
)
|
|
170
|
+
product = line.product_id
|
|
171
|
+
taxes = fiscal_position.map_tax(
|
|
172
|
+
product.taxes_id.filtered(
|
|
173
|
+
lambda t, r=order: t.company_id == r.env.company
|
|
174
|
+
)
|
|
175
|
+
)
|
|
163
176
|
invoice_vals = {
|
|
164
177
|
"ref": order.name,
|
|
165
178
|
"move_type": "out_invoice",
|
|
166
179
|
"journal_id": order.pms_property_id._get_folio_default_journal(
|
|
167
|
-
partner_invoice_id=partner_id,
|
|
180
|
+
partner_invoice_id=partner_id.id,
|
|
168
181
|
room_ids=order.mapped(
|
|
169
182
|
"reservation_ids.reservation_line_ids.room_id.id"
|
|
170
183
|
),
|
|
@@ -172,14 +185,12 @@ class FolioAdvancePaymentInv(models.TransientModel):
|
|
|
172
185
|
"invoice_origin": order.name,
|
|
173
186
|
"invoice_user_id": order.user_id.id,
|
|
174
187
|
"narration": order.note,
|
|
175
|
-
"partner_id": partner_id,
|
|
188
|
+
"partner_id": partner_id.id,
|
|
176
189
|
"currency_id": order.pricelist_id.currency_id.id,
|
|
177
190
|
"folio_ids": [(6, 0, order.ids)],
|
|
178
191
|
"payment_reference": order.reference,
|
|
179
192
|
"invoice_payment_term_id": order.payment_term_id.id,
|
|
180
|
-
"fiscal_position_id":
|
|
181
|
-
.browse(partner_id)
|
|
182
|
-
.property_account_position_id.id,
|
|
193
|
+
"fiscal_position_id": fiscal_position.id,
|
|
183
194
|
# 'campaign_id': order.campaign_id.id,
|
|
184
195
|
# 'medium_id': order.medium_id.id,
|
|
185
196
|
# 'source_id': order.source_id.id,
|
|
@@ -193,7 +204,7 @@ class FolioAdvancePaymentInv(models.TransientModel):
|
|
|
193
204
|
"quantity": 1.0,
|
|
194
205
|
"product_id": self.product_id.id,
|
|
195
206
|
"product_uom_id": line.product_uom.id,
|
|
196
|
-
"tax_ids": [(6, 0,
|
|
207
|
+
"tax_ids": [(6, 0, taxes.ids)],
|
|
197
208
|
"folio_line_ids": [(6, 0, [line.id])],
|
|
198
209
|
# "analytic_tag_ids": [(6, 0, line.analytic_tag_ids.ids)],
|
|
199
210
|
# "analytic_account_id": order.analytic_account_id.id or False,
|
|
@@ -213,8 +224,6 @@ class FolioAdvancePaymentInv(models.TransientModel):
|
|
|
213
224
|
amount, name = self._get_advance_details(order)
|
|
214
225
|
|
|
215
226
|
invoice_vals = self._prepare_invoice_values(order, name, amount, line)
|
|
216
|
-
if order.fiscal_position_id:
|
|
217
|
-
invoice_vals["fiscal_position_id"] = order.fiscal_position_id.id
|
|
218
227
|
invoice = (
|
|
219
228
|
self.env["account.move"].sudo().create(invoice_vals).with_user(self.env.uid)
|
|
220
229
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: odoo-addon-pms
|
|
3
|
-
Version: 16.0.2.
|
|
3
|
+
Version: 16.0.2.5.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:
|
|
38
|
+
!! source digest: sha256:91774a4d1ecfe9c726ac0f4341c1f39b78535f68ad335321ef941f95c455eeb1
|
|
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=
|
|
1
|
+
odoo/addons/pms/README.rst,sha256=rEvoJoBJabfozNWVSIwRuKyQUPZRVK4vryjIjfcijuM,3898
|
|
2
2
|
odoo/addons/pms/__init__.py,sha256=uCUbRxtCubFHrz65XPTEmSu2XU6tpojVZ8MYot9bPMg,171
|
|
3
|
-
odoo/addons/pms/__manifest__.py,sha256=
|
|
3
|
+
odoo/addons/pms/__manifest__.py,sha256=b2_6FAM2I62dR6rKZym3WrJy_B2YvK4v5saf8W3xLWE,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
|
|
@@ -37,7 +37,7 @@ odoo/addons/pms/models/account_journal.py,sha256=rKRrGg-mF8zikzoamEUpu1fA53d-GIQ
|
|
|
37
37
|
odoo/addons/pms/models/account_move.py,sha256=C98kPfkjSdYb3CHGCwc619f7Vq-XGkpShNV9rAAuKkc,16727
|
|
38
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
|
-
odoo/addons/pms/models/folio_sale_line.py,sha256=
|
|
40
|
+
odoo/addons/pms/models/folio_sale_line.py,sha256=bQfhWlGy3poyatGy8QJuQgYe_iFbxafJ1X6qUbUJR4E,46239
|
|
41
41
|
odoo/addons/pms/models/ir_config_parameter.py,sha256=vPqpdoYuQen-PbWwubXhwRnvIBA73UKO7YL3nyZg2Lg,732
|
|
42
42
|
odoo/addons/pms/models/ir_http.py,sha256=kTKKOGv4equREzHofRVNColahV71VD2rurJJacSAsAI,1877
|
|
43
43
|
odoo/addons/pms/models/ir_pms_property.py,sha256=OliJaVyh0OVY_2T491aooo6sctQhtkFd17QwP8YsEIs,5013
|
|
@@ -55,9 +55,9 @@ 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
|
|
59
|
-
odoo/addons/pms/models/pms_folio.py,sha256=
|
|
60
|
-
odoo/addons/pms/models/pms_property.py,sha256
|
|
58
|
+
odoo/addons/pms/models/pms_checkin_partner.py,sha256=tc0g4yksqArmK9-OiIWiR4rIT0WxapmirsS5eMsDF-g,28856
|
|
59
|
+
odoo/addons/pms/models/pms_folio.py,sha256=wcy6yA49_2pj3s-ccHjSSuHwRePLaVFFkJXPVg8RxlE,108586
|
|
60
|
+
odoo/addons/pms/models/pms_property.py,sha256=-9dk7BHKUNaN_ms1fSzktPcHP0ofzGhRbNk3uZdjBsI,45949
|
|
61
61
|
odoo/addons/pms/models/pms_reservation.py,sha256=8D0SNxiULBVzzbA8syc6aSsXpXE7GNIZIgRXY6bUsGo,107774
|
|
62
62
|
odoo/addons/pms/models/pms_reservation_line.py,sha256=HIVtAHiDT4GU9c1A9r2xuuCViqDZen1qJAIQBSR0ukE,27669
|
|
63
63
|
odoo/addons/pms/models/pms_room.py,sha256=CzeqXDrsDnYaGqRaw_LtWUIxJCdv4qYDpyBzaUpwbv4,12092
|
|
@@ -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=
|
|
96
|
+
odoo/addons/pms/static/description/index.html,sha256=09-gIOYHo7pdT9JfUdYOs1YUbkz5oiP2bXHAELM3ugY,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=
|
|
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
|
|
@@ -173,7 +173,7 @@ odoo/addons/pms/views/res_users_views.xml,sha256=bkNhDj75dnK93YnCfl1ELNvobE-Xhg3
|
|
|
173
173
|
odoo/addons/pms/views/reservation_portal_templates.xml,sha256=i6Bz8mrMHbzy1vx9AbqG4uwr91OtX6cX37TZVLzS3eE,13530
|
|
174
174
|
odoo/addons/pms/views/traveller_report_template.xml,sha256=3lq8ozeWAd03IFurWsGbOMAxoPfTXgsOOIDSnWOTm80,15334
|
|
175
175
|
odoo/addons/pms/wizards/__init__.py,sha256=GW9sc4cVPs-3swCnUa8pOdcmdQbGzKDrhpSxALLaZ9A,375
|
|
176
|
-
odoo/addons/pms/wizards/folio_make_invoice_advance.py,sha256=
|
|
176
|
+
odoo/addons/pms/wizards/folio_make_invoice_advance.py,sha256=VvZ5vH1pc5O4hKksdWDeFSRHCSTTQGlEafoDRJAx6Cs,13683
|
|
177
177
|
odoo/addons/pms/wizards/folio_make_invoice_advance_views.xml,sha256=5lWRyW7C_h2y6lkNG2gled_l40eUP2hnjqjA-tQfp_A,6308
|
|
178
178
|
odoo/addons/pms/wizards/folio_payment_link.py,sha256=Z_2JqwneS4fnobiq70ftyX0sq4S3OF5YyAVYttwimZs,1816
|
|
179
179
|
odoo/addons/pms/wizards/folio_payment_link_views.xml,sha256=i7bHNWlz73IbA6LKPzb7DGsomOZXAg43ZRWehPtdL5E,546
|
|
@@ -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.
|
|
197
|
-
odoo_addon_pms-16.0.2.
|
|
198
|
-
odoo_addon_pms-16.0.2.
|
|
199
|
-
odoo_addon_pms-16.0.2.
|
|
196
|
+
odoo_addon_pms-16.0.2.5.0.dist-info/METADATA,sha256=YTH_dajCCPwUUReZDmkVmy4AGDmbzuq3CVg8Zrd2GWE,4917
|
|
197
|
+
odoo_addon_pms-16.0.2.5.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
198
|
+
odoo_addon_pms-16.0.2.5.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
|
|
199
|
+
odoo_addon_pms-16.0.2.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|