mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[ADD]pms_api_rest: invoicing services flow
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user