mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms: improvement invoice data and tests
This commit is contained in:
@@ -314,16 +314,16 @@ class AccountMove(models.Model):
|
||||
)
|
||||
return []
|
||||
|
||||
@api.model
|
||||
def _check_pms_valid_invoice(self, move):
|
||||
"""
|
||||
Check invoice and receipts legal status
|
||||
"""
|
||||
self.ensure_one()
|
||||
if (
|
||||
move.is_invoice(include_receipts=True)
|
||||
and not self.journal_id.is_simplified_invoice
|
||||
and not move.journal_id.is_simplified_invoice
|
||||
and (
|
||||
not self.partner_id or not self.partner_id._check_enought_invoice_data()
|
||||
not move.partner_id or not move.partner_id._check_enought_invoice_data()
|
||||
)
|
||||
):
|
||||
raise UserError(
|
||||
@@ -332,8 +332,8 @@ class AccountMove(models.Model):
|
||||
" partner has the complete information required."
|
||||
)
|
||||
)
|
||||
if self.journal_id.is_simplified_invoice:
|
||||
self._check_simplified_restrictions()
|
||||
if move.journal_id.is_simplified_invoice:
|
||||
move._check_simplified_restrictions()
|
||||
return True
|
||||
|
||||
def _check_simplified_restrictions(self):
|
||||
|
||||
@@ -656,13 +656,14 @@ class PmsFolio(models.Model):
|
||||
and self.autoinvoice_date <= fields.Date.today()
|
||||
and len(target_lines) < len(lines_to_invoice)
|
||||
):
|
||||
second_partner_to_invoice = self.partner_invoice_ids.filtered(
|
||||
other_partner_to_invoice = self.partner_invoice_ids.filtered(
|
||||
lambda p: p.id != partner_invoice_id
|
||||
)
|
||||
if not other_partner_to_invoice:
|
||||
other_partner_to_invoice = self.env.ref("pms.various_pms_partner")
|
||||
groups_invoice_lines.append(
|
||||
{
|
||||
"partner_id": second_partner_to_invoice
|
||||
and second_partner_to_invoice.id,
|
||||
"partner_id": other_partner_to_invoice.id,
|
||||
"lines": lines_to_invoice - target_lines,
|
||||
}
|
||||
)
|
||||
@@ -670,12 +671,15 @@ class PmsFolio(models.Model):
|
||||
|
||||
def _get_default_partner_invoice_id(self):
|
||||
self.ensure_one()
|
||||
if self.partner_id and self.partner_id.document_number_to_invoice:
|
||||
folio_partner_invoice_id = False
|
||||
if self.partner_id and self.partner_id.vat:
|
||||
folio_partner_invoice_id = self.partner_id.id
|
||||
else:
|
||||
if not folio_partner_invoice_id:
|
||||
folio_partner_invoice_id = (
|
||||
self.partner_invoice_ids[0].id if self.partner_invoice_ids else False
|
||||
)
|
||||
if not folio_partner_invoice_id:
|
||||
folio_partner_invoice_id = self.env.ref("pms.various_pms_partner").id
|
||||
return folio_partner_invoice_id
|
||||
|
||||
def _get_tax_amount_by_group(self):
|
||||
@@ -1794,8 +1798,9 @@ 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._check_enought_invoice_data() and self._context.get(
|
||||
"autoinvoice"
|
||||
if not partner or (
|
||||
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
|
||||
@@ -1820,12 +1825,15 @@ class PmsFolio(models.Model):
|
||||
"""
|
||||
if not pay_type:
|
||||
pay_type = journal.type
|
||||
reference = folio.name
|
||||
if folio.external_reference:
|
||||
reference += " - " + folio.external_reference
|
||||
vals = {
|
||||
"journal_id": journal.id,
|
||||
"partner_id": partner.id,
|
||||
"amount": amount,
|
||||
"date": date or fields.Date.today(),
|
||||
"ref": folio.name + " - " + folio.external_reference,
|
||||
"ref": reference,
|
||||
"folio_ids": [(6, 0, [folio.id])],
|
||||
"payment_type": "inbound",
|
||||
"partner_type": "customer",
|
||||
@@ -1901,13 +1909,15 @@ class PmsFolio(models.Model):
|
||||
"""
|
||||
if not pay_type:
|
||||
pay_type = journal.type
|
||||
|
||||
reference = folio.name
|
||||
if folio.external_reference:
|
||||
reference += " - " + folio.external_reference
|
||||
vals = {
|
||||
"journal_id": journal.id,
|
||||
"partner_id": partner.id,
|
||||
"amount": amount if amount > 0 else -amount,
|
||||
"date": date or fields.Date.today(),
|
||||
"ref": folio.name,
|
||||
"ref": reference,
|
||||
"folio_ids": [(6, 0, [folio.id])],
|
||||
"payment_type": "outbound",
|
||||
"partner_type": "customer",
|
||||
|
||||
@@ -628,3 +628,9 @@ class PmsProperty(models.Model):
|
||||
_("Journal %s is not allowed to be used for normal invoices")
|
||||
% pms_property.journal_normal_invoice_id.name
|
||||
)
|
||||
|
||||
@api.constrains("journal_simplified_invoice_id")
|
||||
def _check_journal_simplified_invoice(self):
|
||||
for pms_property in self.filtered("journal_simplified_invoice_id"):
|
||||
if not pms_property.journal_simplified_invoice_id.is_simplified_invoice:
|
||||
pms_property.journal_simplified_invoice_id.is_simplified_invoice = True
|
||||
|
||||
@@ -175,15 +175,6 @@ class ResPartner(models.Model):
|
||||
],
|
||||
default="all",
|
||||
)
|
||||
document_number_to_invoice = fields.Char(
|
||||
string="Document Number to invoices",
|
||||
help="""Technical field to compute the partner reference to invoice,
|
||||
it can be the VAT, if its set, or the document number, if its set,
|
||||
else it will be False""",
|
||||
compute="_compute_document_number_to_invoice",
|
||||
readonly=False,
|
||||
store=True,
|
||||
)
|
||||
vat_document_type = fields.Selection(
|
||||
string="Document Type",
|
||||
help="""The vat document type of the partner,
|
||||
@@ -207,16 +198,6 @@ class ResPartner(models.Model):
|
||||
vat_document_types.append((doc_type.name, doc_type.name))
|
||||
return vat_document_types
|
||||
|
||||
@api.depends("vat", "id_numbers", "id_numbers.name")
|
||||
def _compute_document_number_to_invoice(self):
|
||||
for partner in self:
|
||||
if partner.vat:
|
||||
partner.document_number_to_invoice = partner.vat
|
||||
elif partner.id_numbers:
|
||||
partner.document_number_to_invoice = partner.id_numbers[0].name
|
||||
else:
|
||||
partner.document_number_to_invoice = False
|
||||
|
||||
@api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.gender")
|
||||
def _compute_gender(self):
|
||||
if hasattr(super(), "_compute_gender"):
|
||||
@@ -617,12 +598,7 @@ class ResPartner(models.Model):
|
||||
|
||||
def _check_enought_invoice_data(self):
|
||||
self.ensure_one()
|
||||
if (
|
||||
self.document_number_to_invoice
|
||||
and self.country_id
|
||||
and self.city
|
||||
and self.street
|
||||
):
|
||||
if self.vat and self.country_id and self.city and self.street:
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -637,3 +613,11 @@ class ResPartner(models.Model):
|
||||
continue
|
||||
else:
|
||||
super(ResPartner, partner).check_vat()
|
||||
|
||||
def unlink(self):
|
||||
dummy, various_partner_id = self.env["ir.model.data"].get_object_reference(
|
||||
"pms", "various_pms_partner"
|
||||
)
|
||||
if various_partner_id in self.ids:
|
||||
raise ValidationError(_("The partner 'Various Clients' cannot be deleted"))
|
||||
return super().unlink()
|
||||
|
||||
Reference in New Issue
Block a user