mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms_api_rest: added post and patch in partner service
This commit is contained in:
@@ -3,7 +3,39 @@ from marshmallow import fields
|
||||
from odoo.addons.datamodel.core import Datamodel
|
||||
|
||||
|
||||
class PmsPartnerSearchParam(Datamodel):
|
||||
_name = "pms.partner.search.param"
|
||||
id = fields.Integer(required=False, allow_none=True)
|
||||
vat = fields.String(required=False, allow_none=True)
|
||||
|
||||
|
||||
class PmsPartnerInfo(Datamodel):
|
||||
_name = "pms.partner.info"
|
||||
id = 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)
|
||||
phone = fields.String(required=False, allow_none=True)
|
||||
vat = fields.String(required=False, allow_none=True)
|
||||
documentType = fields.Integer(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)
|
||||
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.Integer(required=False, allow_none=True)
|
||||
countryState = fields.Integer(required=False, allow_none=True)
|
||||
isAgency = fields.Boolean(required=False, allow_none=True)
|
||||
countryChar = fields.String(required=False, allow_none=True)
|
||||
countryId = fields.Integer(required=False, allow_none=True)
|
||||
countryName = fields.String(required=False, allow_none=True)
|
||||
tagIds = fields.List(fields.Integer(required=False, allow_none=True))
|
||||
documentNumbers = fields.List(fields.Integer(required=False, allow_none=True))
|
||||
lastStay = fields.String(required=False, allow_none=True)
|
||||
website = fields.String(required=False, allow_none=True)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from datetime import datetime
|
||||
|
||||
from odoo.addons.base_rest import restapi
|
||||
from odoo.addons.base_rest_datamodel.restapi import Datamodel
|
||||
from odoo.addons.component.core import Component
|
||||
@@ -18,25 +20,150 @@ class PmsPartnerService(Component):
|
||||
"GET",
|
||||
)
|
||||
],
|
||||
input_param=Datamodel("pms.partner.search.param", is_list=False),
|
||||
output_param=Datamodel("pms.partner.info", is_list=True),
|
||||
auth="jwt_api_pms",
|
||||
)
|
||||
def get_partners(self):
|
||||
domain = []
|
||||
def get_partners(self, pms_partner_search_params):
|
||||
result_partners = []
|
||||
domain = []
|
||||
dni = ""
|
||||
if pms_partner_search_params.vat:
|
||||
domain.append(("vat", "=", pms_partner_search_params.vat))
|
||||
PmsPartnerInfo = self.env.datamodels["pms.partner.info"]
|
||||
for partner in self.env["res.partner"].search(
|
||||
domain,
|
||||
):
|
||||
|
||||
for partner in self.env["res.partner"].search(domain):
|
||||
if partner.id_numbers:
|
||||
doc_type_id = (
|
||||
self.env["res.partner.id_category"]
|
||||
.search([("name", "=", "DNI")])
|
||||
.id
|
||||
)
|
||||
dni = (
|
||||
self.env["res.partner.id_number"]
|
||||
.search(
|
||||
[
|
||||
("partner_id", "=", partner.id),
|
||||
("category_id", "=", doc_type_id),
|
||||
]
|
||||
)
|
||||
.name
|
||||
)
|
||||
result_partners.append(
|
||||
PmsPartnerInfo(
|
||||
id=partner.id,
|
||||
name=partner.name if partner.name else None,
|
||||
firstname=partner.firstname if partner.firstname else None,
|
||||
lastname=partner.lastname if partner.lastname else None,
|
||||
lastname2=partner.lastname2 if partner.lastname2 else None,
|
||||
email=partner.email if partner.email else None,
|
||||
mobile=partner.mobile if partner.mobile else None,
|
||||
phone=partner.phone if partner.phone else None,
|
||||
birthdate=datetime.combine(
|
||||
partner.birthdate_date, datetime.min.time()
|
||||
).isoformat()
|
||||
if partner.birthdate_date
|
||||
else None,
|
||||
residenceStreet=partner.residence_street
|
||||
if partner.residence_street
|
||||
else None,
|
||||
zip=partner.residence_zip if partner.residence_zip else None,
|
||||
residenceCity=partner.residence_city
|
||||
if partner.residence_city
|
||||
else None,
|
||||
nationality=partner.nationality_id.id
|
||||
if partner.nationality_id
|
||||
else None,
|
||||
countryState=partner.residence_state_id.id
|
||||
if partner.residence_state_id
|
||||
else None,
|
||||
isAgency=partner.is_agency,
|
||||
countryId=partner.residence_country_id.id
|
||||
if partner.residence_country_id
|
||||
else None,
|
||||
countryChar=partner.residence_country_id.code_alpha3
|
||||
if partner.residence_country_id
|
||||
else None,
|
||||
countryName=partner.residence_country_id.name
|
||||
if partner.residence_country_id
|
||||
else None,
|
||||
tagIds=partner.category_id.ids if partner.category_id else [],
|
||||
documentNumber=dni if dni else None,
|
||||
documentNumbers=partner.id_numbers if partner.id_numbers else [],
|
||||
vat=partner.vat if partner.vat else None,
|
||||
website=partner.website if partner.website else None,
|
||||
)
|
||||
)
|
||||
return result_partners
|
||||
|
||||
@restapi.method(
|
||||
[
|
||||
(
|
||||
[
|
||||
"/",
|
||||
],
|
||||
"POST",
|
||||
)
|
||||
],
|
||||
input_param=Datamodel("pms.partner.info", is_list=False),
|
||||
auth="jwt_api_pms",
|
||||
)
|
||||
def create_partner(self, partner_info):
|
||||
vals = self.mapping_partner_values(partner_info)
|
||||
partner = self.env["res.partner"].create(vals)
|
||||
if partner_info.documentNumber:
|
||||
doc_type_id = (
|
||||
self.env["res.partner.id_category"].search([("name", "=", "DNI")]).id
|
||||
)
|
||||
self.env["res.partner.id_number"].create(
|
||||
{
|
||||
"partner_id": partner.id,
|
||||
"category_id": doc_type_id,
|
||||
"name": partner_info.documentNumber,
|
||||
}
|
||||
)
|
||||
|
||||
@restapi.method(
|
||||
[
|
||||
(
|
||||
[
|
||||
"/<int:partner_id>",
|
||||
],
|
||||
"PATCH",
|
||||
)
|
||||
],
|
||||
input_param=Datamodel("pms.partner.info", is_list=False),
|
||||
auth="jwt_api_pms",
|
||||
)
|
||||
def write_partner(self, partner_id, partner_info):
|
||||
partner = self.env["res.partner"].browse(partner_id)
|
||||
if partner:
|
||||
partner.write(self.mapping_partner_values(partner_info))
|
||||
if partner_info.documentNumber:
|
||||
doc_type_id = (
|
||||
self.env["res.partner.id_category"].search([("name", "=", "DNI")]).id
|
||||
)
|
||||
doc_number = self.env["res.partner.id_number"].search(
|
||||
[
|
||||
("partner_id", "=", partner_id),
|
||||
("name", "=", partner_info.documentNumber),
|
||||
("category_id", "=", doc_type_id),
|
||||
]
|
||||
)
|
||||
if not doc_number:
|
||||
self.env["res.partner.id_number"].create(
|
||||
{
|
||||
"category_id": doc_type_id,
|
||||
"name": partner_info.documentNumber,
|
||||
}
|
||||
)
|
||||
else:
|
||||
doc_number.write(
|
||||
{
|
||||
"name": partner_info.documentNumber,
|
||||
}
|
||||
)
|
||||
|
||||
# REVIEW: analyze in which service file this method should be
|
||||
@restapi.method(
|
||||
[
|
||||
(
|
||||
@@ -50,11 +177,8 @@ class PmsPartnerService(Component):
|
||||
auth="jwt_api_pms",
|
||||
)
|
||||
def get_partner_by_doc_number(self, document_type, document_number):
|
||||
doc_type = self.env["res.partner.id_category"].search(
|
||||
[("id", "=", document_type)]
|
||||
)
|
||||
doc_number = self.env["res.partner.id_number"].search(
|
||||
[("name", "=", document_number), ("category_id", "=", doc_type.id)]
|
||||
[("name", "=", document_number), ("category_id", "=", int(document_type))]
|
||||
)
|
||||
partners = []
|
||||
PmsCheckinPartnerInfo = self.env.datamodels["pms.checkin.partner.info"]
|
||||
@@ -88,7 +212,7 @@ class PmsPartnerService(Component):
|
||||
mobile=doc_number.partner_id.mobile
|
||||
if doc_number.partner_id.mobile
|
||||
else None,
|
||||
documentType=doc_type.id,
|
||||
documentType=int(document_type),
|
||||
documentNumber=doc_number.name,
|
||||
documentExpeditionDate=document_expedition_date
|
||||
if doc_number.valid_from
|
||||
@@ -120,3 +244,31 @@ class PmsPartnerService(Component):
|
||||
)
|
||||
)
|
||||
return partners
|
||||
|
||||
def mapping_partner_values(self, pms_partner_info):
|
||||
vals = dict()
|
||||
partner_fields = {
|
||||
"firstname": pms_partner_info.firstname,
|
||||
"lastname": pms_partner_info.lastname,
|
||||
"email": pms_partner_info.email,
|
||||
"mobile": pms_partner_info.mobile,
|
||||
"phone": pms_partner_info.phone,
|
||||
"gender": pms_partner_info.gender,
|
||||
"residence_street": pms_partner_info.residenceStreet,
|
||||
"nationality_id": pms_partner_info.nationality,
|
||||
"residence_zip": pms_partner_info.zip,
|
||||
"residence_city": pms_partner_info.residenceCity,
|
||||
"residence_state_id": pms_partner_info.countryState,
|
||||
"residence_country_id": pms_partner_info.nationality,
|
||||
"is_agency": pms_partner_info.isAgency,
|
||||
"vat": pms_partner_info.vat,
|
||||
"website": pms_partner_info.website,
|
||||
}
|
||||
if pms_partner_info.birthdate:
|
||||
birthdate = datetime.strptime(pms_partner_info.birthdate, "%d/%m/%Y")
|
||||
birthdate = birthdate.strftime("%Y-%m-%d")
|
||||
vals.update({"birthdate_date": birthdate})
|
||||
for k, v in partner_fields.items():
|
||||
if v:
|
||||
vals.update({k: v})
|
||||
return vals
|
||||
|
||||
Reference in New Issue
Block a user