diff --git a/pms_api_rest/datamodels/pms_user.py b/pms_api_rest/datamodels/pms_user.py index 51e01ab3d..9174f9197 100644 --- a/pms_api_rest/datamodels/pms_user.py +++ b/pms_api_rest/datamodels/pms_user.py @@ -7,17 +7,21 @@ class PmsApiRestUserInput(Datamodel): _name = "pms.api.rest.user.input" username = fields.String(required=False, allow_none=True) password = fields.String(required=False, allow_none=True) + userId = fields.Integer(required=False, allow_none=True) class PmsApiRestUserOutput(Datamodel): _name = "pms.api.rest.user.output" token = fields.String(required=False, allow_none=True) - expirationDate = fields.Integer(required=True, allow_none=False) + expirationDate = fields.Integer(required=False, allow_none=True) userId = fields.Integer(required=True, allow_none=False) userName = fields.String(required=True, allow_none=False) + userEmail = fields.String(required=False, allow_none=True) + userPhone = fields.String(required=False, allow_none=True) userImageBase64 = fields.String(required=False, allow_none=True) - defaultPropertyId = fields.Integer(required=True, allow_none=False) - defaultPropertyName = fields.String(required=True, allow_none=False) + defaultPropertyId = fields.Integer(required=False, allow_none=True) + defaultPropertyName = fields.String(required=False, allow_none=True) + isNewInterfaceUser = fields.Boolean(required=False, allow_none=True) availabilityRuleFields = fields.List( fields.String(), required=False, allow_none=True ) diff --git a/pms_api_rest/models/res_users.py b/pms_api_rest/models/res_users.py index cf821d544..c394fb418 100644 --- a/pms_api_rest/models/res_users.py +++ b/pms_api_rest/models/res_users.py @@ -14,6 +14,14 @@ class ResUsers(models.Model): column2="res_users", ) + is_new_interface_app_user = fields.Boolean( + string="Is New Interface App User", + help="Is New Interface App User", + default=False, + store=True, + readonly=False, + ) + def _get_default_avail_rule_fields(self): default_avail_rule_fields = self.env["ir.model.fields"].search( [ diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index df359049c..cc14bf200 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -41,3 +41,4 @@ from . import pms_account_journal_service from . import pms_invoice_service from . import pms_notification_service from . import pms_avail_service +from . import pms_user_service diff --git a/pms_api_rest/services/pms_login_service.py b/pms_api_rest/services/pms_login_service.py index 3e7ca02df..5e0a04a81 100644 --- a/pms_api_rest/services/pms_login_service.py +++ b/pms_api_rest/services/pms_login_service.py @@ -73,8 +73,13 @@ class PmsLoginService(Component): expirationDate=timestamp_expire_in_a_min, userId=user_record.id, userName=user_record.name, + userEmail=user_record.email, + userPhone=user_record.phone if user_record.phone else None, defaultPropertyId=user_record.pms_property_id.id, defaultPropertyName=user_record.pms_property_id.name, - userImageBase64=user_record.partner_id.image_1024 or None, + userImageBase64=user_record.partner_id.image_1024 + if user_record.partner_id.image_1024 + else None, + isNewInterfaceUser=user_record.is_new_interface_app_user, availabilityRuleFields=avail_rule_names, ) diff --git a/pms_api_rest/services/pms_user_service.py b/pms_api_rest/services/pms_user_service.py new file mode 100644 index 000000000..62588c35c --- /dev/null +++ b/pms_api_rest/services/pms_user_service.py @@ -0,0 +1,100 @@ +import base64 +import tempfile +import os +from odoo.addons.base_rest import restapi +from odoo.addons.base_rest_datamodel.restapi import Datamodel +from odoo.addons.component.core import Component + + +from odoo import _ +from odoo.odoo.exceptions import MissingError + + +class PmsRoomTypeClassService(Component): + _inherit = "base.rest.service" + _name = "pms.user.service" + _usage = "users" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("pms.api.rest.user.output", is_list=False), + auth="jwt_api_pms", + ) + + def get_user(self, user_id): + user = self.env["res.users"].sudo().search([("id", "=", user_id)]) + if user: + PmsUserInfo = self.env.datamodels["pms.api.rest.user.output"] + return PmsUserInfo( + userId=user.id, + userName=user.name, + userEmail=user.email if user.email else "", + userPhone=user.phone if user.phone else "", + userImageBase64=user.image_1920 if user.image_1920 else "", + isNewInterfaceUser=user.is_new_interface_app_user, + ) + + else: + raise MissingError(_("Folio not found")) + + @restapi.method( + [ + ( + [ + "/p/", + ], + "PATCH", + ) + ], + input_param=Datamodel("pms.api.rest.user.output", is_list=False), + auth="jwt_api_pms", + ) + def write_user(self, user_id, input_data): + user = self.env["res.users"].sudo().search([("id", "=", user_id)]) + if user: + user.write( + { + "name": input_data.userName, + "email": input_data.userEmail, + "phone": str(input_data.userPhone), + "is_new_interface_app_user": input_data.isNewInterfaceUser, + } + ) + if input_data.userImageBase64: + with tempfile.NamedTemporaryFile(delete=False) as f: + f.write(base64.b64decode(input_data.userImageBase64)) + temp_path = f.name + + with open(temp_path, "rb") as f: + user_image = f.read() + os.unlink(temp_path) + + user.write( + { + "image_1024": base64.b64encode(user_image), + "image_128": base64.b64encode(user_image), + "image_256": base64.b64encode(user_image), + "image_1920": base64.b64encode(user_image), + "image_512": base64.b64encode(user_image), + } + ) + else: + user.write( + { + "image_1024": '', + "image_128": '', + "image_256": '', + "image_1920": '', + "image_512": '', + } + ) + return True +