diff --git a/pms/models/account_move.py b/pms/models/account_move.py
index 638fccdff..fde9717cf 100644
--- a/pms/models/account_move.py
+++ b/pms/models/account_move.py
@@ -4,7 +4,7 @@ import itertools as it
import json
from odoo import _, api, fields, models
-from odoo.exceptions import UserError
+from odoo.exceptions import UserError, ValidationError
class AccountMove(models.Model):
@@ -265,6 +265,8 @@ class AccountMove(models.Model):
"""
Overwrite the original method to add the folio_ids to the invoice
"""
+ for record in self:
+ record._check_pms_valid_invoice(record)
res = super(AccountMove, self)._post(soft)
self._autoreconcile_folio_payments()
return res
@@ -282,3 +284,35 @@ class AccountMove(models.Model):
lambda p: p.id in [item.id for item in combi]
)
return []
+
+ def _check_pms_valid_invoice(self, move):
+ """
+ Check invoice and receipts legal status
+ """
+ self.ensure_one()
+ if self.move_type == "out_invoice" and (
+ not self.partner_id or not self.partner_id._check_enought_invoice_data()
+ ):
+ raise UserError(
+ _(
+ "You cannot validate this invoice. Please check the "
+ " partner has the complete information required."
+ )
+ )
+ if self.move_type == "out_receipt":
+ self._check_receipt_restrictions()
+ return True
+
+ def _check_receipt_restrictions(self):
+ self.ensure_one()
+ if (
+ self.pms_property_id
+ and self.total_amount > self.pms_property_id.max_amount_simplified_invoice
+ ):
+ mens = _(
+ "The total amount of the receipt is higher than the "
+ "maximum amount allowed for simplified invoices."
+ )
+ self.folio_ids.message_post(body=mens)
+ raise ValidationError(mens)
+ return True
diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py
index f0fb4d99c..31498b17a 100644
--- a/pms/models/pms_folio.py
+++ b/pms/models/pms_folio.py
@@ -1797,14 +1797,18 @@ class PmsFolio(models.Model):
self.ensure_one()
pms_property = self.pms_property_id
partner = self.env["res.partner"].browse(partner_invoice_id)
- if not partner._enought_invoice_data() and self._context.get("autoinvoice"):
+ if not partner._check_enought_invoice_data() and self._context.get(
+ "autoinvoice"
+ ):
return pms_property.journal_simplified_invoice_id
return pms_property.journal_normal_invoice_id
def _get_default_move_type(self, partner_invoice_id):
self.ensure_one()
partner = self.env["res.partner"].browse(partner_invoice_id)
- if not partner._enought_invoice_data() and self._context.get("autoinvoice"):
+ if not partner._check_enought_invoice_data() and self._context.get(
+ "autoinvoice"
+ ):
return "out_receipt"
return "out_invoice"
diff --git a/pms/models/pms_property.py b/pms/models/pms_property.py
index 6aa918749..75cca3cf0 100644
--- a/pms/models/pms_property.py
+++ b/pms/models/pms_property.py
@@ -182,6 +182,12 @@ class PmsProperty(models.Model):
check_pms_properties=True,
)
+ max_amount_simplified_invoice = fields.Float(
+ string="Max Amount Simplified Invoice",
+ help="Maximum amount to create the simplified invoice",
+ default=400.0,
+ )
+
@api.depends_context(
"checkin",
"checkout",
diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py
index b02a89e71..5e599fd9c 100644
--- a/pms/models/res_partner.py
+++ b/pms/models/res_partner.py
@@ -555,15 +555,13 @@ class ResPartner(models.Model):
key_fields.extend(["document_number"])
return key_fields
- def _enought_invoice_data(self):
+ def _check_enought_invoice_data(self):
self.ensure_one()
if (
self.document_number_to_invoice
- and not self.country_id
- and not self.state_id
- and not self.city
- and not self.zip
- and not self.street
+ and self.country_id
+ and self.city
+ and self.street
):
return True
return False
diff --git a/pms/views/pms_property_views.xml b/pms/views/pms_property_views.xml
index 094ae4fa5..61e9ddcb9 100644
--- a/pms/views/pms_property_views.xml
+++ b/pms/views/pms_property_views.xml
@@ -92,14 +92,6 @@
name="margin_days_autoinvoice"
attrs="{'invisible': [('default_invoicing_policy', '=', 'manual')]}"
/>
-
+
+
diff --git a/pms_l10n_es/models/res_partner.py b/pms_l10n_es/models/res_partner.py
index 66d6a35b8..adb04070a 100644
--- a/pms_l10n_es/models/res_partner.py
+++ b/pms_l10n_es/models/res_partner.py
@@ -27,3 +27,13 @@ class ResPartner(models.Model):
if not record.state_id:
record.ine_code = False
record.ine_code = record.state_id.ine_code
+
+ def _check_enought_invoice_data(self):
+ self.ensure_one()
+ res = super(ResPartner, self)._check_enought_invoice_data()
+ if not res:
+ return res
+ if self.country_id.code == "ES":
+ if not self.state_id and not self.zip:
+ return False
+ return True