[ADD]pms_api_rest: invoicing services flow

This commit is contained in:
Darío Lodeiros
2022-11-05 13:18:54 +01:00
parent 2f28920aca
commit 10499b7f1f
3 changed files with 70 additions and 15 deletions

View File

@@ -9,3 +9,4 @@ class PmsMailInfo(Datamodel):
bodyMail = fields.String(required=False, allow_none=True)
partnerIds = fields.List(fields.Integer(), required=False)
emailAddresses = fields.List(fields.String(), required=False)
pmsPropertyCc = fields.Boolean(required=False, allow_none=True)

View File

@@ -59,23 +59,49 @@ class PmsInvoiceService(Component):
line_values["name"] = line_info.name
if line_info.quantity and line_info.quantity != line.quantity:
line_values["quantity"] = line_info.quantity
new_vals["invoice_line_ids"].append((1, line.id, line_values))
if line_values:
new_vals["invoice_line_ids"].append((1, line.id, line_values))
else:
new_vals["invoice_line_ids"].append((2, line.id))
for line_info in pms_invoice_info.moveLines:
if not line_info.id:
new_vals["invoice_line_ids"].append(
(
0,
0,
{
"name": line_info.name,
"quantity": line_info.quantity,
"sale_line_ids": [(6, 0, line_info.saleLineId)],
},
)
# Get the new lines to add in invoice
new_invoice_lines_info = list(
filter(lambda item: not item.id, pms_invoice_info.moveLines)
)
if new_invoice_lines_info:
partner = (
self.env["res.partner"].browse(pms_invoice_info.partnerId)
if pms_invoice_info.partnerId
else invoice.partner_id
)
folios = self.env["pms.folio"].browse(
list(
{
self.env["folio.sale.line"]
.browse(line.saleLineId)
.folio_id.id
for line in list(
filter(
lambda item: item.name,
pms_invoice_info.moveLines,
)
)
}
)
)
new_vals["invoice_line_ids"].extend(
[
item["invoice_line_ids"]
for item in folios.get_invoice_vals_list(
lines_to_invoice={
new_invoice_lines_info[i]
.saleLineId: new_invoice_lines_info[i]
.quantity
for i in range(0, len(new_invoice_lines_info))
},
partner_invoice_id=partner.id,
)
][0]
)
if not new_vals:
return invoice.id
@@ -105,6 +131,13 @@ class PmsInvoiceService(Component):
invoice = reverse_invoice
invoice = self._direct_move_update(invoice, new_vals)
# Update invoice lines name
for item in pms_invoice_info.moveLines:
if item.saleLineId in invoice.invoice_line_ids.mapped("folio_line_ids.id"):
invoice_line = invoice.invoice_line_ids.filtered(
lambda r: item.saleLineId in r.folio_line_ids.ids
)
invoice_line.write({"name": item.name})
return invoice.id
def _direct_move_update(self, invoice, new_vals):
@@ -130,4 +163,25 @@ class PmsInvoiceService(Component):
auth="jwt_api_pms",
)
def send_invoice_mail(self, invoice_id, pms_mail_info):
invoice = self.env["account.move"].browse(invoice_id)
recipients = pms_mail_info.emailAddresses
template = self.env.ref(
"account.email_template_edi_invoice", raise_if_not_found=False
)
email_values = {
"email_to": ",".join(recipients) if recipients else False,
"email_from": invoice.pms_property_id.email
if invoice.pms_property_id.email
else False,
"subject": pms_mail_info.subject,
"body_html": pms_mail_info.bodyMail,
"partner_ids": pms_mail_info.partnerIds
if pms_mail_info.partnerIds
else False,
"recipient_ids": pms_mail_info.partnerIds
if pms_mail_info.partnerIds
else False,
"auto_delete": False,
}
template.send_mail(invoice.id, force_send=True, email_values=email_values)
return True

View File

@@ -27,7 +27,7 @@ class PmsClosureReasonService(Component):
for cl in self.env["room.closure.reason"].search([]):
closure_reasons.append(
PmsRoomClosureReasonInfo(
id=cl.id, name=cl.name, description=cl.description
id=cl.id, name=cl.name, description=cl.description or None
)
)
return closure_reasons