[IMP]pms_api_rest: added user services and datamodel fields

This commit is contained in:
braisab
2023-05-12 20:50:21 +02:00
committed by Darío Lodeiros
parent efad97b07b
commit 5af8c256ef
5 changed files with 122 additions and 4 deletions

View File

@@ -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
)

View File

@@ -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(
[

View File

@@ -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

View File

@@ -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,
)

View File

@@ -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(
[
(
[
"/<int:user_id>",
],
"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/<int:user_id>",
],
"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