diff --git a/pms_api_rest/datamodels/pms_service.py b/pms_api_rest/datamodels/pms_service.py index 74c73b6cf..4c900b2f4 100644 --- a/pms_api_rest/datamodels/pms_service.py +++ b/pms_api_rest/datamodels/pms_service.py @@ -15,4 +15,4 @@ class PmsServiceInfo(Datamodel): priceTaxes = fields.Float(required=False, allow_none=True) discount = fields.Float(required=False, allow_none=True) isBoardService = fields.Boolean(required=False, allow_none=True) - serviceLines = NestedModel("pms.service.line.info", many=True) + serviceLines = fields.List(NestedModel("pms.service.line.info")) diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index d23f7d890..b2312c6b7 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -31,3 +31,4 @@ from . import pms_cancelation_rule_service from . import pms_agency_service from . import pms_service_service +from . import pms_service_line_service diff --git a/pms_api_rest/services/pms_reservation_service.py b/pms_api_rest/services/pms_reservation_service.py index 11e2eb32c..c54875e67 100644 --- a/pms_api_rest/services/pms_reservation_service.py +++ b/pms_api_rest/services/pms_reservation_service.py @@ -357,9 +357,23 @@ class PmsReservationService(Component): reservation = self.env["pms.reservation"].search([("id", "=", reservation_id)]) if not reservation: raise MissingError(_("Reservation not found")) + result_services = [] PmsServiceInfo = self.env.datamodels["pms.service.info"] for service in reservation.service_ids: + PmsServiceLineInfo = self.env.datamodels["pms.service.line.info"] + service_lines = [] + for line in service.service_line_ids: + service_lines.append(PmsServiceLineInfo( + id=line.id, + date=datetime.combine( + line.date, datetime.min.time() + ).isoformat(), + priceUnit=line.price_unit, + discount=line.discount, + quantity=line.day_qty, + )) + result_services.append( PmsServiceInfo( id=service.id, @@ -371,6 +385,7 @@ class PmsReservationService(Component): priceTaxes=round(service.price_tax, 2), discount=round(service.discount, 2), isBoardService=service.is_board_service, + serviceLines=service_lines, ) ) return result_services diff --git a/pms_api_rest/services/pms_service_line_service.py b/pms_api_rest/services/pms_service_line_service.py new file mode 100644 index 000000000..6d5f4ec96 --- /dev/null +++ b/pms_api_rest/services/pms_service_line_service.py @@ -0,0 +1,93 @@ +from datetime import datetime + +from odoo import _ +from odoo.exceptions import MissingError + +from odoo.addons.base_rest import restapi +from odoo.addons.base_rest_datamodel.restapi import Datamodel +from odoo.addons.component.core import Component + + +class PmsServiceLineService(Component): + _inherit = "base.rest.service" + _name = "pms.service.line.service" + _usage = "service-lines" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("pms.service.line.info", is_list=False), + auth="jwt_api_pms", + ) + def get_service_line(self, service_line_id): + service_line = self.env["pms.service.line"].search([("id", "=", service_line_id)]) + if not service_line: + raise MissingError(_("Service line not found")) + PmsServiceLineInfo = self.env.datamodels["pms.service.line.info"] + + return PmsServiceLineInfo( + id=service_line.id, + date=datetime.combine( + service_line.date, datetime.min.time() + ).isoformat(), + priceUnit=round(service_line.price_unit, 2), + discount=round(service_line.discount, 2), + quantity=service_line.day_qty, + ) + + @restapi.method( + [ + ( + [ + "/", + ], + "PATCH", + ) + ], + input_param=Datamodel("pms.service.line.info"), + auth="jwt_api_pms", + ) + def update_service_line(self, service_line_id, pms_service_line_info_data): + service_line = self.env["pms.service.line"].search([("id", "=", service_line_id)]) + vals = {} + if service_line: + if pms_service_line_info_data.date: + vals["date"] = datetime.strptime( + pms_service_line_info_data.date, "%Y-%m-%d" + ).date() + if pms_service_line_info_data.discount: + vals["discount"] = pms_service_line_info_data.discount + if pms_service_line_info_data.quantity: + vals["day_qty"] = pms_service_line_info_data.quantity + if pms_service_line_info_data.priceUnit: + vals["price_unit"] = pms_service_line_info_data.priceUnit + service_line.write(vals) + else: + raise MissingError(_("Service line not found")) + + @restapi.method( + [ + ( + [ + "/", + ], + "DELETE", + ) + ], + auth="jwt_api_pms", + ) + def delete_service_line(self, service_line_id): + # esto tb podría ser con un browse + service_line = self.env["pms.service.line"].search([("id", "=", service_line_id)]) + if service_line: + service_line.unlink() + else: + raise MissingError(_("Service line not found")) + diff --git a/pms_api_rest/services/pms_service_service.py b/pms_api_rest/services/pms_service_service.py index 73730d73d..97cc58eb4 100644 --- a/pms_api_rest/services/pms_service_service.py +++ b/pms_api_rest/services/pms_service_service.py @@ -31,7 +31,17 @@ class PmsServiceService(Component): if not service: raise MissingError(_("Service not found")) PmsServiceInfo = self.env.datamodels["pms.service.info"] - + lines = [ + self.env.datamodels["pms.service.line.info"]( + id=line.id, + date=datetime.combine( + line.date, datetime.min.time() + ).isoformat(), + priceUnit=line.price_unit, + discount=line.discount, + quantity=line.day_qty, + ) for line in service.service_line_ids + ] return PmsServiceInfo( id=service.id, name=service.name, @@ -42,16 +52,28 @@ class PmsServiceService(Component): priceTaxes=round(service.price_tax, 2), discount=round(service.discount, 2), isBoardService=service.is_board_service, - serviceLines=[self.env.datamodels["pms.service.line.info"]( - id=line.id, - date=datetime.combine( - line.date, datetime.min.time() - ).isoformat(), - priceUnit=line.price_unit, - discount=line.discount, - ) for line in service.service_line_ids], + serviceLines=lines, ) + @restapi.method( + [ + ( + [ + "/", + ], + "DELETE", + ) + ], + auth="jwt_api_pms", + ) + def delete_service(self, service_id): + # esto tb podría ser con un browse + service = self.env["pms.service"].search([("id", "=", service_id)]) + if service: + service.unlink() + else: + raise MissingError(_("Service not found")) + @restapi.method( [ (