mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms_api_rest: added user services and datamodel fields
This commit is contained in:
@@ -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
|
||||
)
|
||||
|
||||
@@ -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(
|
||||
[
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
100
pms_api_rest/services/pms_user_service.py
Normal file
100
pms_api_rest/services/pms_user_service.py
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user