From 21bb8178bc19b532a1e62dfefc8341fbfc277ef9 Mon Sep 17 00:00:00 2001 From: braisab Date: Sat, 29 Oct 2022 00:11:59 +0200 Subject: [PATCH] [IMP]pms_api_rest: added GET services for sale lines and invoices --- pms_api_rest/datamodels/__init__.py | 2 + pms_api_rest/datamodels/pms_account_move.py | 5 +- .../datamodels/pms_folio_sale_line.py | 17 +++ pms_api_rest/datamodels/pms_invoice_line.py | 12 ++ pms_api_rest/services/pms_folio_service.py | 115 ++++++++++++++++++ 5 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 pms_api_rest/datamodels/pms_folio_sale_line.py create mode 100644 pms_api_rest/datamodels/pms_invoice_line.py diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 4cb78ab87..235fdeb3f 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -52,3 +52,5 @@ from . import pms_account_payment_term from . import pms_room_closure_reason from . import pms_report +from . import pms_folio_sale_line +from . import pms_invoice_line diff --git a/pms_api_rest/datamodels/pms_account_move.py b/pms_api_rest/datamodels/pms_account_move.py index 8b47fe881..a09d8edc8 100644 --- a/pms_api_rest/datamodels/pms_account_move.py +++ b/pms_api_rest/datamodels/pms_account_move.py @@ -1,9 +1,10 @@ from marshmallow import fields from odoo.addons.datamodel.core import Datamodel +from odoo.addons.datamodel.fields import NestedModel -class PmsAccountMove(Datamodel): +class PmsAccountMoveInfo(Datamodel): _name = "pms.account.move.info" id = fields.Integer(required=False, allow_none=True) amount = fields.Float(required=False, allow_none=True) @@ -11,3 +12,5 @@ class PmsAccountMove(Datamodel): date = fields.String(required=False, allow_none=True) paymentState = fields.String(required=False, allow_none=True) state = fields.String(required=False, allow_none=True) + partnerName = fields.String(required=False, allow_none=True) + moveLines = fields.List(NestedModel("pms.invoice.line.info")) diff --git a/pms_api_rest/datamodels/pms_folio_sale_line.py b/pms_api_rest/datamodels/pms_folio_sale_line.py new file mode 100644 index 000000000..89c5837e6 --- /dev/null +++ b/pms_api_rest/datamodels/pms_folio_sale_line.py @@ -0,0 +1,17 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsFolioSaleInfo(Datamodel): + _name = "pms.folio.sale.line.info" + id = fields.Integer(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) + priceUnit = fields.Float(required=False, allow_none=True) + qtyToInvoice = fields.Float(required=False, allow_none=True) + qtyInvoiced = fields.Float(required=False, allow_none=True) + priceTotal = fields.Float(required=False, allow_none=True) + productQty = fields.Float(required=False, allow_none=True) + reservationId = fields.Integer(required=False, allow_none=True) + serviceId = fields.Integer(required=False, allow_none=True) + displayType = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_invoice_line.py b/pms_api_rest/datamodels/pms_invoice_line.py new file mode 100644 index 000000000..e4a44f243 --- /dev/null +++ b/pms_api_rest/datamodels/pms_invoice_line.py @@ -0,0 +1,12 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsInvoiceLineInfo(Datamodel): + _name = "pms.invoice.line.info" + id = fields.Integer(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) + quantity = fields.Float(required=False, allow_none=True) + total = fields.Float(required=False, allow_none=True) + displayType = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index 5fb0128d3..a46e4c85b 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -421,3 +421,118 @@ class PmsFolioService(Component): self.env["pms.service"].create(vals) return folio.id + + @restapi.method( + [ + ( + [ + "//sale-lines", + ], + "GET", + ) + ], + output_param=Datamodel("pms.folio.sale.line.info", is_list=True), + auth="jwt_api_pms", + ) + def get_folio_sale_lines(self, folio_id): + folio = self.env["pms.folio"].browse(folio_id) + sale_lines = [] + if not folio: + pass + else: + PmsFolioSaleLineInfo = self.env.datamodels["pms.folio.sale.line.info"] + if folio.sale_line_ids: + for sale_line in folio.sale_line_ids: + sale_lines.append( + PmsFolioSaleLineInfo( + id=sale_line.id if sale_line.id else None, + name=sale_line.name if sale_line.name else None, + priceUnit=sale_line.price_unit + if sale_line.price_unit + else None, + qtyToInvoice=sale_line.qty_to_invoice + if sale_line.qty_to_invoice + else None, + qtyInvoiced=sale_line.qty_invoiced + if sale_line.qty_invoiced + else None, + priceTotal=sale_line.price_total + if sale_line.price_total + else None, + productQty=sale_line.product_uom_qty + if sale_line.product_uom_qty + else None, + reservationId=sale_line.reservation_id + if sale_line.reservation_id + else None, + serviceId=sale_line.service_id + if sale_line.service_id + else None, + displayType=sale_line.display_type + if sale_line.display_type + else None, + ) + ) + + return sale_lines + + @restapi.method( + [ + ( + [ + "//invoices", + ], + "GET", + ) + ], + output_param=Datamodel("pms.account.move.info", is_list=True), + auth="jwt_api_pms", + ) + def get_folio_invoices(self, folio_id): + folio = self.env["pms.folio"].browse(folio_id) + invoices = [] + if not folio: + pass + else: + PmsFolioInvoiceInfo = self.env.datamodels["pms.account.move.info"] + PmsInvoiceLineInfo = self.env.datamodels["pms.invoice.line.info"] + if folio.move_ids: + for move_id in folio.move_ids: + move_lines = [] + for move_line in move_id.invoice_line_ids: + move_lines.append( + PmsInvoiceLineInfo( + id=move_line.id, + name=move_line.name if move_line.name else None, + quantity=move_line.quantity + if move_line.quantity + else None, + total=move_line.price_total + if move_line.price_total + else None, + displayType=move_line.display_type + if move_line.display_type + else None, + ) + ) + invoices.append( + PmsFolioInvoiceInfo( + id=move_id.id if move_id.id else None, + name=move_id.name if move_id.name else None, + amount=round(move_id.amount_total, 2) + if move_id.amount_total + else None, + date=move_id.date.strftime("%d/%m/%Y") + if move_id.date + else None, + state=move_id.state if move_id.state else None, + paymentState=move_id.payment_state + if move_id.payment_state + else None, + partnerName=move_id.partner_id.name + if move_id.partner_id.name + else None, + moveLines=move_lines if move_lines else None, + ) + ) + return invoices