[IMP]: changes in avail rules and pricelist items services and datamodels for create/write

This commit is contained in:
braisab
2022-08-10 19:52:56 +02:00
committed by Darío Lodeiros
parent 43d74ed48d
commit b2d04afe60
4 changed files with 92 additions and 126 deletions

View File

@@ -1,12 +1,13 @@
from marshmallow import fields from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel from odoo.addons.datamodel.core import Datamodel
from odoo.addons.datamodel.fields import NestedModel
class PmsAvailabilityPlanRuleSearchParam(Datamodel): class PmsAvailabilityPlanRuleSearchParam(Datamodel):
_name = "pms.availability.plan.rule.search.param" _name = "pms.availability.plan.rule.search.param"
dateFrom = fields.String(required=True, allow_none=False) dateFrom = fields.String(required=False, allow_none=False)
dateTo = fields.String(required=True, allow_none=False) dateTo = fields.String(required=False, allow_none=False)
pmsPropertyId = fields.Integer(required=True, 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) quota = fields.Integer(required=False, allow_none=True)
maxAvailability = fields.Integer(required=False, allow_none=True) maxAvailability = fields.Integer(required=False, allow_none=True)
pmsPropertyId = 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"))

View File

@@ -1,6 +1,7 @@
from marshmallow import fields from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel from odoo.addons.datamodel.core import Datamodel
from odoo.addons.datamodel.fields import NestedModel
class PmsPricelistItemSearchParam(Datamodel): class PmsPricelistItemSearchParam(Datamodel):
@@ -16,4 +17,9 @@ class PmsPricelistItemInfo(Datamodel):
price = fields.Float(required=False, allow_none=True) price = fields.Float(required=False, allow_none=True)
roomTypeId = fields.Integer(required=False, allow_none=True) roomTypeId = fields.Integer(required=False, allow_none=True)
date = fields.String(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) pmsPropertyId = fields.Integer(required=False, allow_none=True)
class PmsPricelistItemsInfo(Datamodel):
_name = "pms.pricelist.items.info"
pricelistItems = fields.List(NestedModel("pms.pricelist.item.info"))

View File

@@ -150,89 +150,56 @@ class PmsAvailabilityPlanService(Component):
"POST", "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", auth="jwt_api_pms",
) )
def create_availability_plan_rule( 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( for avail_plan_rule in pms_avail_plan_rules_info.availabilityPlanRules:
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(
[
(
[
"/<int:availability_plan_id>/"
"availability-plan-rules/<int:availability_plan_rule_id>",
],
"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:
vals = dict() vals = dict()
if pms_avail_plan_rule_info.minStay: date = datetime.strptime(
vals.update({"min_stay": pms_avail_plan_rule_info.minStay}) avail_plan_rule.date[:10], "%Y-%m-%d"
if pms_avail_plan_rule_info.minStayArrival: ) + timedelta(days=1)
if avail_plan_rule.minStay:
vals.update({"min_stay": avail_plan_rule.minStay})
if avail_plan_rule.minStayArrival:
vals.update( 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: if avail_plan_rule.maxStay:
vals.update({"max_stay": pms_avail_plan_rule_info.maxStay}) vals.update({"max_stay": avail_plan_rule.maxStay})
if pms_avail_plan_rule_info.maxStayArrival: if avail_plan_rule.maxStayArrival:
vals.update( 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: if avail_plan_rule.closed:
vals.update({"closed": pms_avail_plan_rule_info.closed}) vals.update({"closed": avail_plan_rule.closed})
if pms_avail_plan_rule_info.closedDeparture: if avail_plan_rule.closedDeparture:
vals.update( vals.update(
{"closed_departure": pms_avail_plan_rule_info.closedDeparture} {"closed_departure": avail_plan_rule.closedDeparture}
) )
if pms_avail_plan_rule_info.closedArrival: if avail_plan_rule.closedArrival:
vals.update({"closed_arrival": pms_avail_plan_rule_info.closedArrival}) vals.update({"closed_arrival": avail_plan_rule.closedArrival})
if pms_avail_plan_rule_info.quota: if avail_plan_rule.quota:
vals.update({"quota": pms_avail_plan_rule_info.quota}) vals.update({"quota": avail_plan_rule.quota})
if pms_avail_plan_rule_info.maxAvailability: avail_rule = self.env["pms.availability.plan.rule"].search(
vals.update({"max_avail": pms_avail_plan_rule_info.maxAvailability}) [
avail_rule.write(vals) ("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)

View File

@@ -151,57 +151,44 @@ class PmsPricelistService(Component):
"POST", "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", auth="jwt_api_pms",
) )
def create_pricelist_item(self, pricelist_id, pms_pricelist_item_info): def create_pricelist_item(self, pricelist_id, pms_pricelist_item_info):
day = datetime.strptime( for pms_pricelist_item in pms_pricelist_item_info.pricelistItems:
pms_pricelist_item_info.date[:10], "%Y-%m-%d" date = datetime.strptime(
) + timedelta(days=1) pms_pricelist_item.date[:10], "%Y-%m-%d"
product_id = ( ) + timedelta(days=1)
self.env["pms.room.type"] product_id = (
.browse(pms_pricelist_item_info.roomTypeId) self.env["pms.room.type"]
.product_id .browse(pms_pricelist_item.roomTypeId)
) .product_id
pricelist_item = self.env["product.pricelist.item"].create( )
{ product_pricelist_item = self.env["product.pricelist.item"].search(
"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(
[
(
[ [
"/<int:pricelist_id>/pricelist-items/<int:pricelist_item_id>", ("pricelist_id", "=", pricelist_id),
], ("product_id", "=", product_id.id),
"PATCH", ("pms_property_ids", "in", pms_pricelist_item.pmsPropertyId),
) ("date_start_consumption", "=", date),
], ("date_end_consumption", "=", date),
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,
}
) )
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,
}
)