mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]: changes in avail rules and pricelist items services and datamodels for create/write
This commit is contained in:
@@ -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"))
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user