diff --git a/pms_api_rest/datamodels/pms_availability_plan_rule.py b/pms_api_rest/datamodels/pms_availability_plan_rule.py index be534ecd4..183e213a5 100644 --- a/pms_api_rest/datamodels/pms_availability_plan_rule.py +++ b/pms_api_rest/datamodels/pms_availability_plan_rule.py @@ -1,12 +1,13 @@ from marshmallow import fields from odoo.addons.datamodel.core import Datamodel +from odoo.addons.datamodel.fields import NestedModel class PmsAvailabilityPlanRuleSearchParam(Datamodel): _name = "pms.availability.plan.rule.search.param" - dateFrom = fields.String(required=True, allow_none=False) - dateTo = fields.String(required=True, allow_none=False) + dateFrom = fields.String(required=False, allow_none=False) + dateTo = fields.String(required=False, allow_none=False) pmsPropertyId = fields.Integer(required=True, allow_none=False) @@ -25,3 +26,8 @@ class PmsAvailabilityPlanRuleInfo(Datamodel): quota = fields.Integer(required=False, allow_none=True) maxAvailability = fields.Integer(required=False, allow_none=True) pmsPropertyId = fields.Integer(required=False, allow_none=True) + + +class PmsAvailabilityPlanRulesInfo(Datamodel): + _name = "pms.availability.plan.rules.info" + availabilityPlanRules = fields.List(NestedModel("pms.availability.plan.rule.info")) diff --git a/pms_api_rest/datamodels/pms_pricelist_item.py b/pms_api_rest/datamodels/pms_pricelist_item.py index 59df5b886..3f4944e86 100644 --- a/pms_api_rest/datamodels/pms_pricelist_item.py +++ b/pms_api_rest/datamodels/pms_pricelist_item.py @@ -1,6 +1,7 @@ from marshmallow import fields from odoo.addons.datamodel.core import Datamodel +from odoo.addons.datamodel.fields import NestedModel class PmsPricelistItemSearchParam(Datamodel): @@ -16,4 +17,9 @@ class PmsPricelistItemInfo(Datamodel): price = fields.Float(required=False, allow_none=True) roomTypeId = fields.Integer(required=False, allow_none=True) date = fields.String(required=False, allow_none=True) + pricelistId = fields.Integer(required=False, allow_none=True) pmsPropertyId = fields.Integer(required=False, allow_none=True) + +class PmsPricelistItemsInfo(Datamodel): + _name = "pms.pricelist.items.info" + pricelistItems = fields.List(NestedModel("pms.pricelist.item.info")) diff --git a/pms_api_rest/services/pms_availability_plan_service.py b/pms_api_rest/services/pms_availability_plan_service.py index 59d0f83a1..be4f506b1 100644 --- a/pms_api_rest/services/pms_availability_plan_service.py +++ b/pms_api_rest/services/pms_availability_plan_service.py @@ -150,89 +150,56 @@ class PmsAvailabilityPlanService(Component): "POST", ) ], - input_param=Datamodel("pms.availability.plan.rule.info", is_list=False), + input_param=Datamodel("pms.availability.plan.rules.info", is_list=False), auth="jwt_api_pms", ) def create_availability_plan_rule( - self, availability_plan_id, pms_avail_plan_rule_info + self, availability_plan_id, pms_avail_plan_rules_info ): - day = datetime.strptime( - pms_avail_plan_rule_info.date[:10], "%Y-%m-%d" - ) + timedelta(days=1) - vals = { - "room_type_id": pms_avail_plan_rule_info.roomTypeId, - "date": day, - "pms_property_id": pms_avail_plan_rule_info.pmsPropertyId, - "availability_plan_id": availability_plan_id, - } - - if pms_avail_plan_rule_info.minStay: - vals.update({"min_stay": pms_avail_plan_rule_info.minStay}) - if pms_avail_plan_rule_info.minStayArrival: - vals.update({"min_stay_arrival": pms_avail_plan_rule_info.minStayArrival}) - if pms_avail_plan_rule_info.maxStay: - vals.update({"max_stay": pms_avail_plan_rule_info.maxStay}) - if pms_avail_plan_rule_info.maxStayArrival: - vals.update({"max_stay_arrival": pms_avail_plan_rule_info.maxStayArrival}) - if pms_avail_plan_rule_info.closed: - vals.update({"closed": pms_avail_plan_rule_info.closed}) - if pms_avail_plan_rule_info.closedDeparture: - vals.update({"closed_departure": pms_avail_plan_rule_info.closedDeparture}) - if pms_avail_plan_rule_info.closedArrival: - vals.update({"closed_arrival": pms_avail_plan_rule_info.closedArrival}) - if pms_avail_plan_rule_info.quota: - vals.update({"quota": pms_avail_plan_rule_info.quota}) - if pms_avail_plan_rule_info.maxAvailability: - vals.update({"max_avail": pms_avail_plan_rule_info.maxAvailability}) - avail_plan_rule = self.env["pms.availability.plan.rule"].create(vals) - return avail_plan_rule.id - - @restapi.method( - [ - ( - [ - "//" - "availability-plan-rules/", - ], - "PATCH", - ) - ], - input_param=Datamodel("pms.availability.plan.rule.info", is_list=False), - auth="jwt_api_pms", - ) - def write_availability_plan_rule( - self, availability_plan_id, availability_plan_rule_id, pms_avail_plan_rule_info - ): - avail_rule = self.env["pms.availability.plan.rule"].search( - [ - ("availability_plan_id", "=", availability_plan_id), - ("id", "=", availability_plan_rule_id), - ] - ) - if avail_rule: + for avail_plan_rule in pms_avail_plan_rules_info.availabilityPlanRules: vals = dict() - if pms_avail_plan_rule_info.minStay: - vals.update({"min_stay": pms_avail_plan_rule_info.minStay}) - if pms_avail_plan_rule_info.minStayArrival: + date = datetime.strptime( + avail_plan_rule.date[:10], "%Y-%m-%d" + ) + timedelta(days=1) + if avail_plan_rule.minStay: + vals.update({"min_stay": avail_plan_rule.minStay}) + if avail_plan_rule.minStayArrival: vals.update( - {"min_stay_arrival": pms_avail_plan_rule_info.minStayArrival} + {"min_stay_arrival": avail_plan_rule.minStayArrival} ) - if pms_avail_plan_rule_info.maxStay: - vals.update({"max_stay": pms_avail_plan_rule_info.maxStay}) - if pms_avail_plan_rule_info.maxStayArrival: + if avail_plan_rule.maxStay: + vals.update({"max_stay": avail_plan_rule.maxStay}) + if avail_plan_rule.maxStayArrival: vals.update( - {"max_stay_arrival": pms_avail_plan_rule_info.maxStayArrival} + {"max_stay_arrival": avail_plan_rule.maxStayArrival} ) - if pms_avail_plan_rule_info.closed: - vals.update({"closed": pms_avail_plan_rule_info.closed}) - if pms_avail_plan_rule_info.closedDeparture: + if avail_plan_rule.closed: + vals.update({"closed": avail_plan_rule.closed}) + if avail_plan_rule.closedDeparture: vals.update( - {"closed_departure": pms_avail_plan_rule_info.closedDeparture} + {"closed_departure": avail_plan_rule.closedDeparture} ) - if pms_avail_plan_rule_info.closedArrival: - vals.update({"closed_arrival": pms_avail_plan_rule_info.closedArrival}) - if pms_avail_plan_rule_info.quota: - vals.update({"quota": pms_avail_plan_rule_info.quota}) - if pms_avail_plan_rule_info.maxAvailability: - vals.update({"max_avail": pms_avail_plan_rule_info.maxAvailability}) - avail_rule.write(vals) + if avail_plan_rule.closedArrival: + vals.update({"closed_arrival": avail_plan_rule.closedArrival}) + if avail_plan_rule.quota: + vals.update({"quota": avail_plan_rule.quota}) + avail_rule = self.env["pms.availability.plan.rule"].search( + [ + ("availability_plan_id", "=", availability_plan_id), + ("pms_property_id", "=", avail_plan_rule.pmsPropertyId), + ("room_type_id", "=", avail_plan_rule.roomTypeId), + ("date", "=", date), + ] + ) + if avail_rule: + avail_rule.write(vals) + else: + vals.update( + { + "room_type_id": avail_plan_rule.roomTypeId, + "date": date, + "pms_property_id": avail_plan_rule.pmsPropertyId, + "availability_plan_id": availability_plan_id, + } + ) + self.env["pms.availability.plan.rule"].create(vals) diff --git a/pms_api_rest/services/pms_pricelist_service.py b/pms_api_rest/services/pms_pricelist_service.py index 4a5efa9fc..efbfcd993 100644 --- a/pms_api_rest/services/pms_pricelist_service.py +++ b/pms_api_rest/services/pms_pricelist_service.py @@ -151,57 +151,44 @@ class PmsPricelistService(Component): "POST", ) ], - input_param=Datamodel("pms.pricelist.item.info", is_list=False), + input_param=Datamodel("pms.pricelist.items.info", is_list=False), auth="jwt_api_pms", ) def create_pricelist_item(self, pricelist_id, pms_pricelist_item_info): - day = datetime.strptime( - pms_pricelist_item_info.date[:10], "%Y-%m-%d" - ) + timedelta(days=1) - product_id = ( - self.env["pms.room.type"] - .browse(pms_pricelist_item_info.roomTypeId) - .product_id - ) - pricelist_item = self.env["product.pricelist.item"].create( - { - "applied_on": "0_product_variant", - "product_id": product_id.id, - "pms_property_ids": [pms_pricelist_item_info.pmsPropertyId], - "date_start_consumption": day, - "date_end_consumption": day, - "compute_price": "fixed", - "fixed_price": pms_pricelist_item_info.price, - "pricelist_id": pricelist_id, - } - ) - return pricelist_item.id - - @restapi.method( - [ - ( + for pms_pricelist_item in pms_pricelist_item_info.pricelistItems: + date = datetime.strptime( + pms_pricelist_item.date[:10], "%Y-%m-%d" + ) + timedelta(days=1) + product_id = ( + self.env["pms.room.type"] + .browse(pms_pricelist_item.roomTypeId) + .product_id + ) + product_pricelist_item = self.env["product.pricelist.item"].search( [ - "//pricelist-items/", - ], - "PATCH", - ) - ], - input_param=Datamodel("pms.pricelist.item.info", is_list=False), - auth="jwt_api_pms", - ) - def write_pricelist_item( - self, pricelist_id, pricelist_item_id, pms_pricelist_item_info - ): - - product_pricelist_item = self.env["product.pricelist.item"].search( - [ - ("pricelist_id", "=", pricelist_id), - ("id", "=", pricelist_item_id), - ] - ) - if product_pricelist_item and pms_pricelist_item_info.price: - product_pricelist_item.write( - { - "fixed_price": pms_pricelist_item_info.price, - } + ("pricelist_id", "=", pricelist_id), + ("product_id", "=", product_id.id), + ("pms_property_ids", "in", pms_pricelist_item.pmsPropertyId), + ("date_start_consumption", "=", date), + ("date_end_consumption", "=", date), + ] ) + if product_pricelist_item: + product_pricelist_item.write( + { + "fixed_price": pms_pricelist_item.price, + } + ) + else: + self.env["product.pricelist.item"].create( + { + "applied_on": "0_product_variant", + "product_id": product_id.id, + "pms_property_ids": [pms_pricelist_item.pmsPropertyId], + "date_start_consumption": date, + "date_end_consumption": date, + "compute_price": "fixed", + "fixed_price": pms_pricelist_item.price, + "pricelist_id": pricelist_id, + } + )