diff --git a/pms_api_rest/services/pms_availability_plan_service.py b/pms_api_rest/services/pms_availability_plan_service.py index 7f6370c29..b96606fbc 100644 --- a/pms_api_rest/services/pms_availability_plan_service.py +++ b/pms_api_rest/services/pms_availability_plan_service.py @@ -1,6 +1,6 @@ from datetime import datetime, timedelta -from odoo.exceptions import MissingError +from odoo.exceptions import MissingError, ValidationError from odoo.addons.base_rest import restapi from odoo.addons.base_rest_datamodel.restapi import Datamodel @@ -183,21 +183,7 @@ class PmsAvailabilityPlanService(Component): return result - @restapi.method( - [ - ( - [ - "//availability-plan-rules", - ], - "POST", - ) - ], - 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_rules_info - ): + def _create_or_update_avail_plan_rules(self, pms_avail_plan_rules_info): for avail_plan_rule in pms_avail_plan_rules_info.availabilityPlanRules: vals = dict() date = datetime.strptime(avail_plan_rule.date, "%Y-%m-%d").date() @@ -239,3 +225,41 @@ class PmsAvailabilityPlanService(Component): } ) self.env["pms.availability.plan.rule"].create(vals) + + @restapi.method( + [ + ( + [ + "//availability-plan-rules", + ], + "PATCH", + ) + ], + 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_rules_info): + availability_plan_ids = list( + { + item.availabilityPlanId for item in pms_avail_plan_rules_info.availabilityPlanRules + } + ) + if len(availability_plan_ids) > 1 or availability_plan_ids[0] != availability_plan_id: + raise ValidationError("You cannot create availability plan rules for different availability plans") + else: + self._create_or_update_avail_plan_rules(pms_avail_plan_rules_info) + + @restapi.method( + [ + ( + [ + "/batch-changes", + ], + "POST", + ) + ], + input_param=Datamodel("pms.availability.plan.rules.info", is_list=False), + auth="jwt_api_pms", + ) + def update_availability_plan_rules(self, pms_avail_plan_rules_info): + self._create_or_update_avail_plan_rules(pms_avail_plan_rules_info) diff --git a/pms_api_rest/services/pms_pricelist_service.py b/pms_api_rest/services/pms_pricelist_service.py index 538cac390..40378ff0b 100644 --- a/pms_api_rest/services/pms_pricelist_service.py +++ b/pms_api_rest/services/pms_pricelist_service.py @@ -143,19 +143,7 @@ class PmsPricelistService(Component): result.append(pricelist_info) return result - @restapi.method( - [ - ( - [ - "//pricelist-items", - ], - "POST", - ) - ], - 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): + def _create_or_update_pricelist_items(self, pms_pricelist_item_info): for pms_pricelist_item in pms_pricelist_item_info.pricelistItems: date = datetime.strptime(pms_pricelist_item.date, "%Y-%m-%d").date() product_id = ( @@ -191,3 +179,53 @@ class PmsPricelistService(Component): "pricelist_id": pms_pricelist_item.pricelistId, } ) + + @restapi.method( + [ + ( + [ + "//pricelist-items", + ], + "PATCH", + ) + ], + 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): + self._create_or_update_pricelist_items(pms_pricelist_item_info) + + @restapi.method( + [ + ( + [ + "//pricelist-items", + ], + "PATCH", + ) + ], + 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): + pricelist_ids = list({item.pricelistId for item in pms_pricelist_item_info.pricelistItems}) + print(pricelist_ids) + if len(pricelist_ids) > 1 or pricelist_ids[0] != pricelist_id: + raise ValidationError("You cannot create pricelist items for different pricelists at once.") + else: + self._create_or_update_pricelist_items(pms_pricelist_item_info) + + @restapi.method( + [ + ( + [ + "/batch-changes", + ], + "POST", + ) + ], + input_param=Datamodel("pms.pricelist.items.info", is_list=False), + auth="jwt_api_pms", + ) + def update_availability_plan_rules(self, pms_avail_plan_rules_info): + self._create_or_update_pricelist_items(pms_avail_plan_rules_info)