mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms: improvement default invoice folio sale lines workflow
This commit is contained in:
@@ -996,7 +996,7 @@ class FolioSaleLine(models.Model):
|
||||
should be added to the returned invoice line
|
||||
"""
|
||||
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(
|
||||
_(
|
||||
"The qty (%s) is wrong." % qty
|
||||
|
||||
@@ -622,11 +622,9 @@ class PmsFolio(models.Model):
|
||||
folio_lines_to_invoice = folio.sale_line_ids.filtered(
|
||||
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(
|
||||
lines_to_invoice=folio_lines_to_invoice,
|
||||
partner_invoice_id=partner_invoice_id,
|
||||
)
|
||||
for group in groups_invoice_lines:
|
||||
folio = folio.with_company(folio.company_id)
|
||||
@@ -693,50 +691,38 @@ class PmsFolio(models.Model):
|
||||
invoice_vals_list.append(invoice_vals)
|
||||
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()
|
||||
groups_invoice_lines = []
|
||||
partners = lines_to_invoice.mapped("default_invoice_to")
|
||||
for partner in partners:
|
||||
if partner_invoice_id:
|
||||
groups_invoice_lines.append(
|
||||
{
|
||||
"partner_id": partner.id,
|
||||
"lines": lines_to_invoice.filtered(
|
||||
lambda l: l.default_invoice_to == partner
|
||||
),
|
||||
"partner_id": partner_invoice_id,
|
||||
"lines": lines_to_invoice,
|
||||
}
|
||||
)
|
||||
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
|
||||
|
||||
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):
|
||||
self.ensure_one()
|
||||
res = {}
|
||||
|
||||
Reference in New Issue
Block a user