[IMP]pms_api_rest: added services and datamodels for get and patch checkin_partners

This commit is contained in:
braisab
2022-06-23 21:39:28 +02:00
committed by Darío Lodeiros
parent 18428a46cf
commit b30e2b6e5e
15 changed files with 502 additions and 18 deletions

View File

@@ -12,6 +12,7 @@
"web",
"auth_signup",
"auth_jwt_login",
"base_location",
],
"external_dependencies": {
"python": ["jwt", "simplejson", "marshmallow", "jose"],

View File

@@ -21,5 +21,11 @@ from . import pms_pricelist
from . import pms_pricelist_item
from . import pms_availability_plan
from . import pms_availability_plan_rule
from . import pms_id_categories
from . import res_country
from . import res_partner_category
from . import res_city_zip
from . import pms_search_param
from . import pms_ubication

View File

@@ -6,13 +6,21 @@ from odoo.addons.datamodel.core import Datamodel
class PmsCheckinPartnerInfo(Datamodel):
_name = "pms.checkin.partner.info"
id = fields.Integer(required=False, allow_none=True)
# partner = fields.String(required=False, allow_none=True)
reservationId = fields.Integer(required=False, allow_none=True)
name = fields.String(required=False, allow_none=True)
firstname = fields.String(required=False, allow_none=True)
lastname = fields.String(required=False, allow_none=True)
lastname2 = fields.String(required=False, allow_none=True)
email = fields.String(required=False, allow_none=True)
mobile = fields.String(required=False, allow_none=True)
nationality = fields.String(required=False, allow_none=True)
documentType = fields.String(required=False, allow_none=True)
documentNumber = fields.String(required=False, allow_none=True)
documentExpeditionDate = fields.String(required=False, allow_none=True)
documentSupportNumber = fields.String(required=False, allow_none=True)
gender = fields.String(required=False, allow_none=True)
state = fields.String(required=False, allow_none=True)
birthdate = fields.String(required=False, allow_none=True)
residenceStreet = fields.String(required=False, allow_none=True)
zip = fields.String(required=False, allow_none=True)
residenceCity = fields.String(required=False, allow_none=True)
nationality = fields.String(required=False, allow_none=True)
countryState = fields.String(required=False, allow_none=True)

View File

@@ -0,0 +1,9 @@
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
class PmsIdCategoriesInfo(Datamodel):
_name = "pms.id.categories.info"
id = fields.Integer(required=False, allow_none=True)
documentType = fields.String(required=False, allow_none=True)

View File

@@ -0,0 +1,10 @@
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
class ResCityZipInfo(Datamodel):
_name = "res.city.zip.info"
cityId = fields.String(required=False, allow_none=True)
stateId = fields.String(required=False, allow_none=True)
countryId = fields.String(required=False, allow_none=True)

View File

@@ -0,0 +1,15 @@
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
class PmsResCountriesInfo(Datamodel):
_name = "res.country.info"
id = fields.Integer(required=False, allow_none=True)
name = fields.String(required=False, allow_none=True)
class PmsResCountryStatesInfo(Datamodel):
_name = "res.country_state.info"
id = fields.Integer(required=False, allow_none=True)
name = fields.String(required=False, allow_none=True)

View File

@@ -0,0 +1,10 @@
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
class ResPartnerCategoryInfo(Datamodel):
_name = "res.partner.category.info"
id = fields.Integer(required=False, allow_none=True)
name = fields.String(required=False, allow_none=True)
parentId = fields.Integer(required=False, allow_none=True)

View File

@@ -9,5 +9,9 @@ from . import pms_property_service
from . import pms_login_service
from . import pms_pricelist_service
from . import pms_availability_plan_service
from . import pms_id_categories_service
from . import res_country_services
from . import res_partner_category_services
from . import res_city_zip_service
from . import pms_room_type_class_service
from . import pms_ubication_service

View File

@@ -106,7 +106,13 @@ class PmsFolioService(Component):
"preferredRoomId": reservation.preferred_room_id.name
if reservation.preferred_room_id
else "",
"roomTypeId": reservation.room_type_id.name
"preferredRoomCapacity": reservation.preferred_room_id.capacity
if reservation.preferred_room_id
else "",
"roomTypeName": reservation.room_type_id.name
if reservation.room_type_id
else "",
"roomTypeId": reservation.room_type_id.id
if reservation.room_type_id
else "",
"priceTotal": reservation.price_total,
@@ -156,7 +162,9 @@ class PmsFolioService(Component):
"departureHour": reservation.departure_hour,
"pendingCheckinData": reservation.pending_checkin_data,
"createDate": reservation.create_date,
"segmentations": segmentation_ids,
"segmentations": segmentation_ids[0]
if segmentation_ids
else "",
"cancellationPolicy": reservation.pricelist_id.cancelation_rule_id.name
if reservation.pricelist_id.cancelation_rule_id.name
else "",

View File

@@ -0,0 +1,34 @@
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component
class PmsIdCategoriesService(Component):
_inherit = "base.rest.service"
_name = "pms.id.categories.services"
_usage = "id_categories"
_collection = "pms.services"
@restapi.method(
[
(
[
"/",
],
"GET",
)
],
output_param=Datamodel("pms.id.categories.info", is_list=True),
auth="jwt_api_pms",
)
def get_id_categories(self):
result_id_categories = []
PmsIdCategoriesInfo = self.env.datamodels["pms.id.categories.info"]
for id_category in self.env["res.partner.id_category"].search([]):
result_id_categories.append(
PmsIdCategoriesInfo(
id=id_category.id,
documentType=id_category.name,
)
)
return result_id_categories

View File

@@ -36,3 +36,87 @@ class PmsPartnerService(Component):
)
)
return result_partners
@restapi.method(
[
(
[
"/<string:documentType>/<string:documentNumber>",
],
"GET",
)
],
output_param=Datamodel("pms.partner.info", is_list=True),
auth="jwt_api_pms",
)
def get_partner_by_doc_number(self, document_type, document_number):
doc_type = self.env["res.partner.id_category"].search(
[("name", "=", document_type)]
)
doc_number = self.env["res.partner.id_number"].search(
[("name", "=", document_number), ("category_id", "=", doc_type.id)]
)
partners = []
PmsCheckinPartnerInfo = self.env.datamodels["pms.checkin.partner.info"]
if not doc_number:
pass
else:
if doc_number.valid_from:
document_expedition_date = doc_number.valid_from.strftime("%d/%m/%Y")
if doc_number.partner_id.birthdate_date:
birthdate_date = doc_number.partner_id.birthdate_date.strftime(
"%d/%m/%Y"
)
partners.append(
PmsCheckinPartnerInfo(
# id=doc_number.partner_id.id,
name=doc_number.partner_id.name
if doc_number.partner_id.name
else "",
firstname=doc_number.partner_id.firstname
if doc_number.partner_id.firstname
else "",
lastname=doc_number.partner_id.lastname
if doc_number.partner_id.lastname
else "",
lastname2=doc_number.partner_id.lastname2
if doc_number.partner_id.lastname2
else "",
email=doc_number.partner_id.email
if doc_number.partner_id.email
else "",
mobile=doc_number.partner_id.mobile
if doc_number.partner_id.mobile
else "",
documentType=doc_type.name,
documentNumber=doc_number.name,
documentExpeditionDate=document_expedition_date
if doc_number.valid_from
else "",
documentSupportNumber=doc_number.support_number
if doc_number.support_number
else "",
gender=doc_number.partner_id.gender
if doc_number.partner_id.gender
else "",
birthdate=birthdate_date
if doc_number.partner_id.birthdate_date
else "",
residenceStreet=doc_number.partner_id.residence_street
if doc_number.partner_id.residence_street
else "",
zip=doc_number.partner_id.residence_zip
if doc_number.partner_id.residence_zip
else "",
residenceCity=doc_number.partner_id.residence_city
if doc_number.partner_id.residence_city
else "",
nationality=doc_number.partner_id.nationality_id.name
if doc_number.partner_id.nationality_id
else "",
countryState=doc_number.partner_id.residence_state_id.name
if doc_number.partner_id.residence_state_id
else "",
)
)
return partners

View File

@@ -204,41 +204,204 @@ class PmsReservationService(Component):
"GET",
)
],
input_param=Datamodel("pms.search.param"),
output_param=Datamodel("pms.checkin.partner.info", is_list=True),
auth="jwt_api_pms",
)
def get_checkin_partners(self, reservation_id, pms_search_param):
domain = list()
domain.append(("id", "=", reservation_id))
domain.append(("pms_property_id", "=", pms_search_param.pms_property_id))
reservation = self.env["pms.reservation"].search(domain)
def get_checkin_partners(self, reservation_id):
reservation = self.env["pms.reservation"].browse(reservation_id)
checkin_partners = []
PmsCheckinPartnerInfo = self.env.datamodels["pms.checkin.partner.info"]
if not reservation:
pass
else:
for checkin_partner in reservation.checkin_partner_ids:
if checkin_partner.document_expedition_date:
document_expedition_date = (
checkin_partner.document_expedition_date.strftime("%d/%m/%Y")
)
if checkin_partner.birthdate_date:
birthdate_date = checkin_partner.birthdate_date.strftime("%d/%m/%Y")
checkin_partners.append(
PmsCheckinPartnerInfo(
id=checkin_partner.id,
reservationId=checkin_partner.reservation_id.id,
name=checkin_partner.name if checkin_partner.name else "",
firstname=checkin_partner.firstname
if checkin_partner.firstname
else "",
lastname=checkin_partner.lastname
if checkin_partner.lastname
else "",
lastname2=checkin_partner.lastname2
if checkin_partner.lastname2
else "",
email=checkin_partner.email if checkin_partner.email else "",
mobile=checkin_partner.mobile if checkin_partner.mobile else "",
nationality=checkin_partner.nationality_id.name
if checkin_partner.nationality_id
else "",
documentType=checkin_partner.document_type.name
if checkin_partner.document_type
if checkin_partner.document_type.name
else "",
documentNumber=checkin_partner.document_number
if checkin_partner.document_number
else "",
documentExpeditionDate=document_expedition_date
if checkin_partner.document_expedition_date
else "",
documentSupportNumber=checkin_partner.support_number
if checkin_partner.support_number
else "",
gender=checkin_partner.gender if checkin_partner.gender else "",
state=dict(
checkin_partner.fields_get(["state"])["state"]["selection"]
)[checkin_partner.state],
birthdate=birthdate_date
if checkin_partner.birthdate_date
else "",
residenceStreet=checkin_partner.residence_street
if checkin_partner.residence_street
else "",
zip=checkin_partner.residence_zip
if checkin_partner.residence_zip
else "",
residenceCity=checkin_partner.residence_city
if checkin_partner.residence_city
else "",
nationality=checkin_partner.residence_country_id.name
if checkin_partner.residence_country_id
else "",
countryState=checkin_partner.residence_state_id.name
if checkin_partner.residence_state_id
else "",
)
)
return checkin_partners
@restapi.method(
[
(
[
"/<int:reservation_id>/adults/<int:adults>",
],
"PATCH",
)
],
auth="jwt_api_pms",
)
def update_reservation_adults(self, reservation_id, adults):
reservation_id = self.env["pms.reservation"].browse(reservation_id)
reservation_id.write(
{
"adults": adults,
}
)
@restapi.method(
[
(
[
"/<int:reservation_id>/children/<int:children>",
],
"PATCH",
)
],
auth="jwt_api_pms",
)
def update_reservation_children(self, reservation_id, children):
reservation_id = self.env["pms.reservation"].browse(reservation_id)
reservation_id.write(
{
"children": children,
}
)
@restapi.method(
[
(
[
"/<int:reservation_id>/segmentation/<int:segmentation_id>",
],
"PATCH",
)
],
auth="jwt_api_pms",
)
def update_segmentation_id(self, reservation_id, segmentation_id):
reservation_id = self.env["pms.reservation"].browse(reservation_id)
reservation_id.write(
{
"segmentation_ids": [segmentation_id],
}
)
@restapi.method(
[
(
[
"/<int:reservation_id>/checkin_partner/<int:checkin_partner_id>",
],
"PATCH",
)
],
input_param=Datamodel("pms.checkin.partner.info", is_list=False),
auth="jwt_api_pms",
)
def write_reservation_checkin_partner(
self, reservation_id, checkin_partner_id, pms_checkin_partner_info
):
checkin_partner = self.env["pms.checkin.partner"].search(
[("id", "=", checkin_partner_id), ("reservation_id", "=", reservation_id)]
)
if checkin_partner:
vals = dict()
if pms_checkin_partner_info.firstname:
vals.update({"firstname": pms_checkin_partner_info.firstname})
if pms_checkin_partner_info.lastname:
vals.update({"lastname": pms_checkin_partner_info.lastname})
if pms_checkin_partner_info.lastname2:
vals.update({"lastname2": pms_checkin_partner_info.lastname2})
if pms_checkin_partner_info.email:
vals.update({"email": pms_checkin_partner_info.email})
if pms_checkin_partner_info.mobile:
vals.update({"mobile": pms_checkin_partner_info.mobile})
if pms_checkin_partner_info.documentType:
document_type = self.env["res.partner.id_category"].search(
[("name", "=", pms_checkin_partner_info.documentType)]
)
vals.update({"document_type": document_type})
if pms_checkin_partner_info.documentNumber:
vals.update(
{"document_number": pms_checkin_partner_info.documentNumber}
)
if pms_checkin_partner_info.documentExpeditionDate:
document_expedition_date = datetime.strptime(
pms_checkin_partner_info.documentExpeditionDate, "%d/%m/%Y"
)
document_expedition_date = document_expedition_date.strftime("%Y-%m-%d")
vals.update({"document_expedition_date": document_expedition_date})
if pms_checkin_partner_info.documentSupportNumber:
vals.update(
{"support_number": pms_checkin_partner_info.documentSupportNumber}
)
if pms_checkin_partner_info.gender:
vals.update({"gender": pms_checkin_partner_info.gender})
if pms_checkin_partner_info.birthdate:
birthdate = datetime.strptime(
pms_checkin_partner_info.birthdate, "%d/%m/%Y"
)
birthdate = birthdate.strftime("%Y-%m-%d")
vals.update({"birthdate_date": birthdate})
if pms_checkin_partner_info.residenceStreet:
vals.update(
{"residence_street": pms_checkin_partner_info.residenceStreet}
)
if pms_checkin_partner_info.zip:
vals.update({"residence_zip": pms_checkin_partner_info.zip})
if pms_checkin_partner_info.residenceCity:
vals.update({"residence_city": pms_checkin_partner_info.residenceCity})
if pms_checkin_partner_info.nationality:
country_id = self.env["res.country"].search(
[("name", "=", pms_checkin_partner_info.nationality)]
)
vals.update({"residence_country_id": country_id})
if pms_checkin_partner_info.countryState:
country_state = self.env["res.country.state"].search(
[("name", "=", pms_checkin_partner_info.countryState)]
)
vals.update({"residence_state_id": country_state})
checkin_partner.write(vals)

View File

@@ -0,0 +1,35 @@
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component
class PmsIdCategoriesService(Component):
_inherit = "base.rest.service"
_name = "res.city.zip.services"
_usage = "zip"
_collection = "pms.services"
@restapi.method(
[
(
[
"/<string:res_city_zip>",
],
"GET",
)
],
output_param=Datamodel("res.city.zip.info", is_list=True),
auth="jwt_api_pms",
)
def get_address_data_by_zip(self, res_city_zip):
result_zip_data = []
ResCityZipInfo = self.env.datamodels["res.city.zip.info"]
for zip_code in self.env["res.city.zip"].search([("name", "=", res_city_zip)]):
result_zip_data.append(
ResCityZipInfo(
cityId=zip_code.city_id.name,
stateId=zip_code.state_id.name,
countryId=zip_code.country_id.name,
)
)
return result_zip_data

View File

@@ -0,0 +1,60 @@
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component
class ResCountryService(Component):
_inherit = "base.rest.service"
_name = "res.country.services"
_usage = "countries"
_collection = "pms.services"
@restapi.method(
[
(
[
"/",
],
"GET",
)
],
output_param=Datamodel("res.country.info", is_list=True),
auth="jwt_api_pms",
)
def get_countries(self):
result_countries = []
ResCountriesInfo = self.env.datamodels["res.country.info"]
for country in self.env["res.country"].search([]):
result_countries.append(
ResCountriesInfo(
id=country.id,
name=country.name,
)
)
return result_countries
@restapi.method(
[
(
[
"/<int:country_id>/country_states",
],
"GET",
)
],
output_param=Datamodel("res.country_state.info", is_list=True),
auth="jwt_api_pms",
)
def get_states(self, country_id):
result_country_states = []
ResCountryStatesInfo = self.env.datamodels["res.country_state.info"]
for country_states in self.env["res.country.state"].search(
[("country_id", "=", country_id)]
):
result_country_states.append(
ResCountryStatesInfo(
id=country_states.id,
name=country_states.name,
)
)
return result_country_states

View File

@@ -0,0 +1,37 @@
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component
class PmsIdCategoriesService(Component):
_inherit = "base.rest.service"
_name = "res.partner.category.services"
_usage = "segmentations"
_collection = "pms.services"
@restapi.method(
[
(
[
"/",
],
"GET",
)
],
output_param=Datamodel("res.partner.category.info", is_list=True),
auth="jwt_api_pms",
)
def get_parent_segmentation_ids(self):
result_segmentation_ids = []
ResPartnerCategoryInfo = self.env.datamodels["res.partner.category.info"]
for segmentation_id in self.env["res.partner.category"].search([]):
result_segmentation_ids.append(
ResPartnerCategoryInfo(
id=segmentation_id.id,
name=segmentation_id.name,
parentId=segmentation_id.parent_id.id
if segmentation_id.parent_id.id
else 0,
)
)
return result_segmentation_ids