diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 981d688d6..0e29edbcc 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -46,3 +46,5 @@ from . import pms_agency from . import pms_service from . import pms_service_line from . import res_users +from . import res_lang +from . import pms_account_payment_term diff --git a/pms_api_rest/datamodels/pms_account_payment_term.py b/pms_api_rest/datamodels/pms_account_payment_term.py new file mode 100644 index 000000000..2bfd8d53d --- /dev/null +++ b/pms_api_rest/datamodels/pms_account_payment_term.py @@ -0,0 +1,9 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsAccountPaymentTermInfo(Datamodel): + _name = "pms.account.payment.term.info" + id = fields.Integer(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_partner.py b/pms_api_rest/datamodels/pms_partner.py index 6aee0968f..6db6d6e74 100644 --- a/pms_api_rest/datamodels/pms_partner.py +++ b/pms_api_rest/datamodels/pms_partner.py @@ -6,13 +6,9 @@ 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 PmsPartnerSearchParam(Datamodel): - _name = "pms.partner.search.param" - id = fields.Integer(required=False, allow_none=True) - vat = fields.String(required=False, allow_none=True) - name = fields.String(required=False, allow_none=True) + vatNumber = fields.String(required=False, allow_none=True) + documentType = fields.Integer(required=False, allow_none=True) + documentNumber = fields.String(required=False, allow_none=True) class PmsPartnerInfo(Datamodel): @@ -25,23 +21,39 @@ class PmsPartnerInfo(Datamodel): 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) + age = fields.Integer(required=False, allow_none=True) residenceStreet = fields.String(required=False, allow_none=True) - zip = fields.String(required=False, allow_none=True) + residenceStreet2 = fields.String(required=False, allow_none=True) + residenceZip = 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) + residenceStateId = fields.Integer(required=False, allow_none=True) isAgency = fields.Boolean(required=False, allow_none=True) - countryChar = fields.String(required=False, allow_none=True) + isCompany = fields.Boolean(required=False, allow_none=True) + street = fields.String(required=False, allow_none=True) + street2 = fields.String(required=False, allow_none=True) + zip = fields.String(required=False, allow_none=True) + city = fields.String(required=False, allow_none=True) + stateId = fields.Integer(required=False, allow_none=True) countryId = fields.Integer(required=False, allow_none=True) - countryName = fields.String(required=False, allow_none=True) + residenceCountryId = fields.Integer(required=False, allow_none=True) tagIds = 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) - + vatNumber = fields.String(required=False, allow_none=True) + vatDocumentType = fields.String(required=False, allow_none=True) + comment = fields.String(required=False, allow_none=True) + language = fields.String(required=False, allow_none=True) + userId = fields.Integer(required=False, allow_none=True) + paymentTerms = fields.Integer(required=False, allow_none=True) + pricelistId = fields.Integer(required=False, allow_none=True) + salesReference = fields.String(required=False, allow_none=True) + saleChannelId = fields.Integer(required=False, allow_none=True) + commission = fields.Integer(required=False, allow_none=True) + invoicingPolicy = fields.String(required=False, allow_none=True) + daysAutoInvoice = fields.Integer(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/res_lang.py b/pms_api_rest/datamodels/res_lang.py new file mode 100644 index 000000000..1a0c25023 --- /dev/null +++ b/pms_api_rest/datamodels/res_lang.py @@ -0,0 +1,9 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsResLangInfo(Datamodel): + _name = "res.lang.info" + code = fields.String(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index b2312c6b7..7a0fe8067 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -32,3 +32,5 @@ from . import pms_cancelation_rule_service from . import pms_agency_service from . import pms_service_service from . import pms_service_line_service +from . import res_lang_service +from . import pms_account_payment_terms_service diff --git a/pms_api_rest/services/pms_account_payment_terms_service.py b/pms_api_rest/services/pms_account_payment_terms_service.py new file mode 100644 index 000000000..14e428108 --- /dev/null +++ b/pms_api_rest/services/pms_account_payment_terms_service.py @@ -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 PmsAccountPaymentTermService(Component): + _inherit = "base.rest.service" + _name = "pms.account.payment.term.service" + _usage = "payment-terms" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("pms.account.payment.term.info", is_list=True), + auth="jwt_api_pms", + ) + def get_account_payment_terms(self): + + PmsAccountPaymenttermInfo = self.env.datamodels["pms.account.payment.term.info"] + res = [] + for payment_term in self.env["account.payment.term"].search([]): + res.append( + PmsAccountPaymenttermInfo( + id=payment_term.id, + name=payment_term.name, + ) + ) + return res diff --git a/pms_api_rest/services/pms_partner_service.py b/pms_api_rest/services/pms_partner_service.py index 8e8f70133..3ee6d173e 100644 --- a/pms_api_rest/services/pms_partner_service.py +++ b/pms_api_rest/services/pms_partner_service.py @@ -27,10 +27,6 @@ class PmsPartnerService(Component): def get_partners(self, pms_partner_search_params): result_partners = [] domain = [] - if pms_partner_search_params.vat: - domain.append(("vat", "=", pms_partner_search_params.vat)) - if pms_partner_search_params.name: - domain.append(("name", "ilike", pms_partner_search_params.name)) PmsPartnerInfo = self.env.datamodels["pms.partner.info"] for partner in self.env["res.partner"].search(domain): result_partners.append( @@ -49,37 +45,68 @@ class PmsPartnerService(Component): ).isoformat() if partner.birthdate_date else None, + age=partner.age if partner.age else None, residenceStreet=partner.residence_street if partner.residence_street else None, - zip=partner.residence_zip if partner.residence_zip else None, + residenceStreet2=partner.residence_street2 + if partner.residence_street2 + else None, + residenceZip=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 + residenceStateId=partner.residence_state_id.id if partner.residence_state_id else None, + street=partner.street if partner.street else None, + street2=partner.street2 if partner.street2 else None, + zip=partner.zip if partner.zip else None, + countryId=partner.country_id.id if partner.country_id else None, + stateId=partner.state_id.id if partner.state_id else None, + city=partner.city if partner.city 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 + isCompany=partner.is_company, + residenceCountryId=partner.residence_country_id.id if partner.residence_country_id else None, tagIds=partner.category_id.ids if partner.category_id else [], - vat=partner.vat if partner.vat else None, + vatNumber=partner.vat if partner.vat else None, + vatDocumentType=partner.vat_document_type + if partner.vat_document_type + else None, website=partner.website if partner.website else None, + comment=partner.comment if partner.comment else None, + language=partner.lang if partner.lang else None, + userId=partner.user_id if partner.user_id else None, + paymentTerms=partner.property_payment_term_id + if partner.property_payment_term_id + else None, + pricelistId=partner.property_product_pricelist + if partner.property_product_pricelist + else None, + salesReference=partner.ref if partner.ref else None, + saleChannelId=partner.sale_channel_id + if partner.sale_channel_id + else None, + commission=partner.default_commission + if partner.default_commission + else None, + invoicingPolicy=partner.invoicing_policy + if partner.invoicing_policy + else None, + daysAutoInvoice=partner.margin_days_autoinvoice + if partner.margin_days_autoinvoice + else None, ) ) return result_partners - # REVIEW: analyze in which service file this method should be @restapi.method( [ ( @@ -148,106 +175,181 @@ class PmsPartnerService(Component): } ) - # REVIEW: analyze in which service file this method should be @restapi.method( [ ( [ - "//", + "//deactivate", + ], + "PATCH", + ) + ], + auth="jwt_api_pms", + ) + def deactivate_partner(self, partner_id): + self.env["res.partner"].browse(partner_id).active = False + + @restapi.method( + [ + ( + [ + "//activate", + ], + "PATCH", + ) + ], + auth="jwt_api_pms", + ) + def activate_partner(self, partner_id): + self.env["res.partner"].browse(partner_id).active = True + + @restapi.method( + [ + ( + [ + "/partner", ], "GET", ) ], - output_param=Datamodel("pms.checkin.partner.info", is_list=True), + input_param=Datamodel("pms.partner.search.param", is_list=False), + output_param=Datamodel("pms.checkin.partner.info", is_list=False), auth="jwt_api_pms", ) - def get_partner_by_doc_number(self, document_type, document_number): - doc_number = self.env["res.partner.id_number"].search( - [("name", "=", document_number), ("category_id", "=", int(document_type))] - ) - 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 None, - firstname=doc_number.partner_id.firstname - if doc_number.partner_id.firstname - else None, - lastname=doc_number.partner_id.lastname - if doc_number.partner_id.lastname - else None, - lastname2=doc_number.partner_id.lastname2 - if doc_number.partner_id.lastname2 - else None, - email=doc_number.partner_id.email - if doc_number.partner_id.email - else None, - mobile=doc_number.partner_id.mobile - if doc_number.partner_id.mobile - else None, - documentType=int(document_type), - documentNumber=doc_number.name, - documentExpeditionDate=document_expedition_date - if doc_number.valid_from - else None, - documentSupportNumber=doc_number.support_number - if doc_number.support_number - else None, - gender=doc_number.partner_id.gender - if doc_number.partner_id.gender - else None, - birthdate=birthdate_date - if doc_number.partner_id.birthdate_date - else None, - residenceStreet=doc_number.partner_id.residence_street - if doc_number.partner_id.residence_street - else None, - zip=doc_number.partner_id.residence_zip - if doc_number.partner_id.residence_zip - else None, - residenceCity=doc_number.partner_id.residence_city - if doc_number.partner_id.residence_city - else None, - nationality=doc_number.partner_id.nationality_id.id - if doc_number.partner_id.nationality_id - else None, - countryState=doc_number.partner_id.residence_state_id.id - if doc_number.partner_id.residence_state_id - else None, - ) + def get_partner(self, pms_partner_search_params): + domain = [] + # if pms_partner_search_params.documentType + # and pms_partner_search_params.documentNumber: + # doc_number = self.env["res.partner.id_number"].search( + # [ + # ("name", "=", pms_partner_search_params.documentNumber), + # ("category_id", "=", pms_partner_search_params.documentType) + # ] + # ) + # if doc_number.valid_from: + # document_expedition_date = doc_number.valid_from.strftime("%d/%m/%Y") + # document_type = pms_partner_search_params.documentType + # document_number = pms_partner_search_params.documentNumber + # domain.append(('id_numbers', 'in', doc_number)) + PmsPartnerInfo = self.env.datamodels["pms.partner.info"] + if pms_partner_search_params.vatNumber: + domain.append(("vat", "=", pms_partner_search_params.vatNumber)) + partner = self.env["res.partner"].search(domain) + if len(partner) > 1: + partner = partner.filtered("is_company") + if partner: + return 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, + gender=partner.gender if partner.gender else None, + birthdate=datetime.combine( + partner.birthdate_date, datetime.min.time() + ).isoformat() + if partner.birthdate_date + else None, + age=partner.age if partner.age else None, + residenceStreet=partner.residence_street + if partner.residence_street + else None, + residenceStreet2=partner.residence_street2 + if partner.residence_street2 + else None, + residenceZip=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, + residenceStateId=partner.residence_state_id.id + if partner.residence_state_id + else None, + street=partner.street if partner.street else None, + street2=partner.street2 if partner.street2 else None, + zip=partner.zip if partner.zip else None, + countryId=partner.country_id.id if partner.country_id else None, + stateId=partner.state_id.id if partner.state_id else None, + city=partner.city if partner.city else None, + isAgency=partner.is_agency, + isCompany=partner.is_company, + residenceCountryId=partner.residence_country_id.id + if partner.residence_country_id + else None, + tagIds=partner.category_id.ids if partner.category_id else [], + vatNumber=partner.vat if partner.vat else None, + vatDocumentType=partner.vat_document_type + if partner.vat_document_type + else None, + website=partner.website if partner.website else None, + comment=partner.comment if partner.comment else None, + language=partner.lang if partner.lang else None, + userId=partner.user_id if partner.user_id else None, + paymentTerms=partner.property_payment_term_id + if partner.property_payment_term_id + else None, + pricelistId=partner.property_product_pricelist + if partner.property_product_pricelist + else None, + salesReference=partner.ref if partner.ref else None, + saleChannelId=partner.sale_channel_id + if partner.sale_channel_id + else None, + commission=partner.default_commission + if partner.default_commission + else None, + invoicingPolicy=partner.invoicing_policy + if partner.invoicing_policy + else None, + daysAutoInvoice=partner.margin_days_autoinvoice + if partner.margin_days_autoinvoice + else None, ) - return partners + else: + return [] def mapping_partner_values(self, pms_partner_info): vals = dict() partner_fields = { + "name": pms_partner_info.name, "firstname": pms_partner_info.firstname, "lastname": pms_partner_info.lastname, + "lastname2": pms_partner_info.lastname2, "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, + "residence_street2": pms_partner_info.residenceStreet2, "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, + "residence_state_id": pms_partner_info.residenceStateId, + "residence_country_id": pms_partner_info.residenceCountryId, "is_agency": pms_partner_info.isAgency, - "vat": pms_partner_info.vat, - "website": pms_partner_info.website, + "is_company": pms_partner_info.isCompany, + "vat": pms_partner_info.vatNumber, + "street": pms_partner_info.street, + "street2": pms_partner_info.street2, + "zip": pms_partner_info.zip, + "city": pms_partner_info.city, + "state_id": pms_partner_info.stateId, + "country_id": pms_partner_info.countryId, + "user_id": pms_partner_info.userId, + "lang": pms_partner_info.language, + "comment": pms_partner_info.comment, + "property_payment_term_id": pms_partner_info.paymentTerms, + "property_product_pricelist": pms_partner_info.pricelistId, + "ref": pms_partner_info.salesReference, + "sale_channel_id": pms_partner_info.saleChannelId, + "default_commission": pms_partner_info.commission, + "invoicing_policy": pms_partner_info.invoicingPolicy, + "margin_days_autoinvoice": pms_partner_info.daysAutoInvoice, } if pms_partner_info.birthdate: birthdate = datetime.strptime(pms_partner_info.birthdate, "%d/%m/%Y") diff --git a/pms_api_rest/services/res_lang_service.py b/pms_api_rest/services/res_lang_service.py new file mode 100644 index 000000000..c038974db --- /dev/null +++ b/pms_api_rest/services/res_lang_service.py @@ -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 ReslANGService(Component): + _inherit = "base.rest.service" + _name = "res.lang.service" + _usage = "languages" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("res.lang.info", is_list=True), + auth="jwt_api_pms", + ) + def get_partners(self): + result_langs = [] + ResLangInfo = self.env.datamodels["res.lang.info"] + languages = self.env["res.lang"].get_installed() + for lang in languages: + result_langs.append( + ResLangInfo( + code=lang[0], + name=lang[1], + ) + ) + return result_langs