diff --git a/pms_api_rest/datamodels/pms_availability_plan_rule.py b/pms_api_rest/datamodels/pms_availability_plan_rule.py index 449693858..6e600a4c3 100644 --- a/pms_api_rest/datamodels/pms_availability_plan_rule.py +++ b/pms_api_rest/datamodels/pms_availability_plan_rule.py @@ -23,3 +23,4 @@ class PmsAvailabilityPlanRuleInfo(Datamodel): roomTypeId = fields.Integer(required=False, allow_none=True) date = fields.String(required=False, allow_none=True) quota = fields.Integer(required=False, allow_none=True) + pmsPropertyId = fields.Integer(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_pricelist_item.py b/pms_api_rest/datamodels/pms_pricelist_item.py index 83fb08357..988ad691d 100644 --- a/pms_api_rest/datamodels/pms_pricelist_item.py +++ b/pms_api_rest/datamodels/pms_pricelist_item.py @@ -16,3 +16,4 @@ 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) + pmsPropertyId = fields.Integer(required=False, allow_none=True) diff --git a/pms_api_rest/services/pms_availability_plan_service.py b/pms_api_rest/services/pms_availability_plan_service.py index 20d867939..6c95184ef 100644 --- a/pms_api_rest/services/pms_availability_plan_service.py +++ b/pms_api_rest/services/pms_availability_plan_service.py @@ -149,3 +149,94 @@ class PmsAvailabilityPlanService(Component): result.append(availability_plan_rule_info) return result + + @restapi.method( + [ + ( + [ + "//availability-plan-rule", + ], + "POST", + ) + ], + input_param=Datamodel("pms.availability.plan.rule.info", is_list=False), + auth="jwt_api_pms", + ) + def create_availability_plan_rule( + self, availability_plan_id, pms_avail_plan_rule_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}) + avail_plan_rule = self.env["pms.availability.plan.rule"].create(vals) + return avail_plan_rule.id + + @restapi.method( + [ + ( + [ + "//availability-plan-rule/", + ], + "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, pms_avail_plan_rule_info + ): + vals = dict() + avail_rule = self.env["pms.availability.plan.rule"].search( + [ + ("id", "=", pms_avail_plan_rule_info.availabilityRuleId), + ("availability_plan_id", "=", availability_plan_id), + ] + ) + if avail_rule: + 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}) + avail_rule.write(vals) diff --git a/pms_api_rest/services/pms_pricelist_service.py b/pms_api_rest/services/pms_pricelist_service.py index e924963fb..4c400adf9 100644 --- a/pms_api_rest/services/pms_pricelist_service.py +++ b/pms_api_rest/services/pms_pricelist_service.py @@ -136,3 +136,64 @@ class PmsPricelistService(Component): result.append(pricelist_info) return result + + @restapi.method( + [ + ( + [ + "//pricelist-item", + ], + "POST", + ) + ], + input_param=Datamodel("pms.pricelist.item.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( + [ + ( + [ + "//pricelist-item", + ], + "PATCH", + ) + ], + input_param=Datamodel("pms.pricelist.item.info", is_list=False), + auth="jwt_api_pms", + ) + def write_pricelist_item(self, pricelist_id, pms_pricelist_item_info): + product_pricelist_item = self.env["product.pricelist.item"].search( + [ + ("id", "=", pms_pricelist_item_info.pricelistItemId), + ("pricelist_id", "=", pricelist_id), + ] + ) + if product_pricelist_item and pms_pricelist_item_info.price: + product_pricelist_item.write( + { + "fixed_price": pms_pricelist_item_info.price, + } + )