diff --git a/pms_api_rest/datamodels/pms_mail.py b/pms_api_rest/datamodels/pms_mail.py index 211335834..d91094f16 100644 --- a/pms_api_rest/datamodels/pms_mail.py +++ b/pms_api_rest/datamodels/pms_mail.py @@ -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) diff --git a/pms_api_rest/services/pms_invoice_service.py b/pms_api_rest/services/pms_invoice_service.py index 4412f313d..9494659fe 100644 --- a/pms_api_rest/services/pms_invoice_service.py +++ b/pms_api_rest/services/pms_invoice_service.py @@ -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 diff --git a/pms_api_rest/services/pms_room_closure_reason_service.py b/pms_api_rest/services/pms_room_closure_reason_service.py index bbe3aa10c..0245acb69 100644 --- a/pms_api_rest/services/pms_room_closure_reason_service.py +++ b/pms_api_rest/services/pms_room_closure_reason_service.py @@ -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