[IMP]pms: improvement default invoice folio sale lines workflow

This commit is contained in:
Darío Lodeiros
2022-11-12 09:25:29 +01:00
parent 4040b60fa7
commit d6a9dcd395
2 changed files with 26 additions and 40 deletions

View File

@@ -996,7 +996,7 @@ class FolioSaleLine(models.Model):
should be added to the returned invoice line should be added to the returned invoice line
""" """
self.ensure_one() self.ensure_one()
if (qty > self.qty_to_invoice) and not self.display_type: if (qty > self.qty_to_invoice or qty <= 0) and not self.display_type:
raise ValueError( raise ValueError(
_( _(
"The qty (%s) is wrong." % qty "The qty (%s) is wrong." % qty

View File

@@ -622,11 +622,9 @@ class PmsFolio(models.Model):
folio_lines_to_invoice = folio.sale_line_ids.filtered( folio_lines_to_invoice = folio.sale_line_ids.filtered(
lambda l: l.id in list(lines_to_invoice.keys()) lambda l: l.id in list(lines_to_invoice.keys())
) )
folio._set_default_partner_invoice_id(
folio_lines_to_invoice, partner_invoice_id
)
groups_invoice_lines = folio._get_groups_invoice_lines( groups_invoice_lines = folio._get_groups_invoice_lines(
lines_to_invoice=folio_lines_to_invoice, lines_to_invoice=folio_lines_to_invoice,
partner_invoice_id=partner_invoice_id,
) )
for group in groups_invoice_lines: for group in groups_invoice_lines:
folio = folio.with_company(folio.company_id) folio = folio.with_company(folio.company_id)
@@ -693,50 +691,38 @@ class PmsFolio(models.Model):
invoice_vals_list.append(invoice_vals) invoice_vals_list.append(invoice_vals)
return invoice_vals_list return invoice_vals_list
def _get_groups_invoice_lines(self, lines_to_invoice): def _get_groups_invoice_lines(self, lines_to_invoice, partner_invoice_id=False):
self.ensure_one() self.ensure_one()
groups_invoice_lines = [] groups_invoice_lines = []
partners = lines_to_invoice.mapped("default_invoice_to") if partner_invoice_id:
for partner in partners:
groups_invoice_lines.append( groups_invoice_lines.append(
{ {
"partner_id": partner.id, "partner_id": partner_invoice_id,
"lines": lines_to_invoice.filtered( "lines": lines_to_invoice,
lambda l: l.default_invoice_to == partner
),
} }
) )
else:
partners = lines_to_invoice.mapped("default_invoice_to")
for partner in partners:
groups_invoice_lines.append(
{
"partner_id": partner.id,
"lines": lines_to_invoice.filtered(
lambda l: l.default_invoice_to == partner
),
}
)
if any(not line.default_invoice_to for line in lines_to_invoice):
groups_invoice_lines.append(
{
"partner_id": self.env.ref("pms.various_pms_partner").id,
"lines": lines_to_invoice.filtered(
lambda l: not l.default_invoice_to
),
}
)
return groups_invoice_lines return groups_invoice_lines
def _set_default_partner_invoice_id(
self, lines_to_invoice, folio_partner_invoice_id=False
):
# By priotiy:
# 1º- Partner set in parameter,
# 2º- Partner in default_invoice_to in line
# 3º- Partner in folio,
# 4º- Partner in checkins,
# 5º- Generic various partner
self.ensure_one()
for line in lines_to_invoice:
if not folio_partner_invoice_id and line.default_invoice_to:
folio_partner_invoice_id = line.default_invoice_to
if (
not folio_partner_invoice_id
and self.partner_id
and self.partner_id._check_enought_invoice_data()
and not self.partner_id.is_agency
):
folio_partner_invoice_id = self.partner_id.id
checkin_invoice_partner = self.checkin_partner_ids.filtered(
lambda c: c.partner_id and c.partner_id._check_enought_invoice_data()
)
if not folio_partner_invoice_id and checkin_invoice_partner:
folio_partner_invoice_id = checkin_invoice_partner[0].partner_id
if not folio_partner_invoice_id:
folio_partner_invoice_id = self.env.ref("pms.various_pms_partner").id
line.default_invoice_to = folio_partner_invoice_id
def _get_tax_amount_by_group(self): def _get_tax_amount_by_group(self):
self.ensure_one() self.ensure_one()
res = {} res = {}