diff --git a/pms_api_rest/__manifest__.py b/pms_api_rest/__manifest__.py index 9120e04e5..1f338e16c 100644 --- a/pms_api_rest/__manifest__.py +++ b/pms_api_rest/__manifest__.py @@ -25,6 +25,7 @@ "data/pms_app_reset_password_template.xml", "views/pms_property_views.xml", "views/res_users_views.xml", + "views/pms_room_type_class_views.xml", ], "demo": [ "demo/pms_api_rest_master_data.xml", diff --git a/pms_api_rest/datamodels/pms_agency.py b/pms_api_rest/datamodels/pms_agency.py index 72ce4ce58..1c519997d 100644 --- a/pms_api_rest/datamodels/pms_agency.py +++ b/pms_api_rest/datamodels/pms_agency.py @@ -13,4 +13,4 @@ class PmsAgencyInfo(Datamodel): _name = "pms.agency.info" id = fields.Integer(required=True, allow_none=False) name = fields.String(required=True, allow_none=False) - image = fields.String(required=False, allow_none=True) + imageUrl = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_property.py b/pms_api_rest/datamodels/pms_property.py index df574573a..caf3b4902 100644 --- a/pms_api_rest/datamodels/pms_property.py +++ b/pms_api_rest/datamodels/pms_property.py @@ -29,3 +29,4 @@ class PmsPropertyInfo(Datamodel): simpleInColor = fields.String(required=False, allow_none=True) simpleFutureColor = fields.String(required=False, allow_none=True) language = fields.String(required=True, allow_none=False) + hotelImageUrl = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_room_type_class.py b/pms_api_rest/datamodels/pms_room_type_class.py index 4498951d7..b10df266f 100644 --- a/pms_api_rest/datamodels/pms_room_type_class.py +++ b/pms_api_rest/datamodels/pms_room_type_class.py @@ -15,3 +15,4 @@ class PmsRoomTypeClassInfo(Datamodel): name = fields.String(required=False, allow_none=True) defaultCode = fields.String(required=False, allow_none=True) pmsPropertyIds = fields.List(fields.Integer(), required=False) + imageUrl = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_sale_channel.py b/pms_api_rest/datamodels/pms_sale_channel.py index 57d1ecd41..730bb8037 100644 --- a/pms_api_rest/datamodels/pms_sale_channel.py +++ b/pms_api_rest/datamodels/pms_sale_channel.py @@ -13,4 +13,4 @@ class PmsSaleChannelInfo(Datamodel): id = fields.Integer(required=True, allow_none=False) name = fields.String(required=True, allow_none=False) channelType = fields.String(required=True, allow_none=True) - icon = fields.String(required=False, allow_none=True) + iconUrl = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_user.py b/pms_api_rest/datamodels/pms_user.py index 611c71530..63f928992 100644 --- a/pms_api_rest/datamodels/pms_user.py +++ b/pms_api_rest/datamodels/pms_user.py @@ -23,6 +23,7 @@ class PmsApiRestUserOutput(Datamodel): userEmail = fields.String(required=False, allow_none=True) userPhone = fields.String(required=False, allow_none=True) userImageBase64 = fields.String(required=False, allow_none=True) + userImageUrl = fields.String(required=False, allow_none=True) defaultPropertyId = fields.Integer(required=False, allow_none=True) defaultPropertyName = fields.String(required=False, allow_none=True) isNewInterfaceUser = fields.Boolean(required=False, allow_none=True) diff --git a/pms_api_rest/demo/pms_api_rest_master_data.xml b/pms_api_rest/demo/pms_api_rest_master_data.xml index bca00d717..555f68eb8 100644 --- a/pms_api_rest/demo/pms_api_rest_master_data.xml +++ b/pms_api_rest/demo/pms_api_rest_master_data.xml @@ -13,5 +13,20 @@ eval="[(6, 0, [ref('pms.field_pms_availability_plan_rule__min_stay'), ref('pms.field_pms_availability_plan_rule__quota')])]" /> + + + + + + + + + + + + + + + diff --git a/pms_api_rest/demo/pms_property_hotel_image_pms_api_rest_my_property.jpg b/pms_api_rest/demo/pms_property_hotel_image_pms_api_rest_my_property.jpg new file mode 100644 index 000000000..922427206 Binary files /dev/null and b/pms_api_rest/demo/pms_property_hotel_image_pms_api_rest_my_property.jpg differ diff --git a/pms_api_rest/demo/pms_property_hotel_image_pms_api_rest_san_carlos.jpg b/pms_api_rest/demo/pms_property_hotel_image_pms_api_rest_san_carlos.jpg new file mode 100644 index 000000000..652f92a04 Binary files /dev/null and b/pms_api_rest/demo/pms_property_hotel_image_pms_api_rest_san_carlos.jpg differ diff --git a/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_conference.svg b/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_conference.svg new file mode 100644 index 000000000..f61891c68 --- /dev/null +++ b/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_conference.svg @@ -0,0 +1,38 @@ + + + +Created with Fabric.js 5.2.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_parking.svg b/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_parking.svg new file mode 100644 index 000000000..4db7ce0fb --- /dev/null +++ b/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_parking.svg @@ -0,0 +1,26 @@ + + + +Created with Fabric.js 5.2.4 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_room.svg b/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_room.svg new file mode 100644 index 000000000..bf283faf6 --- /dev/null +++ b/pms_api_rest/demo/pms_room_type_class_icon_pms_api_rest_room.svg @@ -0,0 +1,3 @@ + + + diff --git a/pms_api_rest/models/__init__.py b/pms_api_rest/models/__init__.py index 4713a4d6b..96f3e93d1 100644 --- a/pms_api_rest/models/__init__.py +++ b/pms_api_rest/models/__init__.py @@ -2,3 +2,5 @@ from . import pms_property from . import res_users from . import account_payment from . import sql_export +from . import pms_room_type_class + diff --git a/pms_api_rest/models/pms_property.py b/pms_api_rest/models/pms_property.py index cda087937..c15c95dd1 100644 --- a/pms_api_rest/models/pms_property.py +++ b/pms_api_rest/models/pms_property.py @@ -88,3 +88,8 @@ class PmsProperty(models.Model): help="Color for pending payment reservations in the planning.", default="rgba(4, 95, 118)", ) + + hotel_image_pms_api_rest = fields.Image( + string="Hotel image", + store=True, + ) diff --git a/pms_api_rest/models/pms_room_type_class.py b/pms_api_rest/models/pms_room_type_class.py new file mode 100644 index 000000000..ddd4c81a2 --- /dev/null +++ b/pms_api_rest/models/pms_room_type_class.py @@ -0,0 +1,10 @@ +from odoo import fields, models + + +class PmsRoomTypeClass(models.Model): + _inherit = "pms.room.type.class" + + icon_pms_api_rest = fields.Image( + string="Icon room type class image", + store=True, + ) diff --git a/pms_api_rest/services/manage_url_images.py b/pms_api_rest/services/manage_url_images.py new file mode 100644 index 000000000..2032e9b3e --- /dev/null +++ b/pms_api_rest/services/manage_url_images.py @@ -0,0 +1,19 @@ +from odoo import http + + +def url_image(context, model, record_id, field): + rt_image_attach = context.env['ir.attachment'].sudo().search([ + ('res_model', '=', model), + ('res_id', '=', record_id), + ('res_field', '=', field), + ]) + if rt_image_attach and not rt_image_attach.access_token: + rt_image_attach.generate_access_token() + result = ( + http.request.env['ir.config_parameter'] + .sudo().get_param('web.base.url') + + '/web/image/%s?access_token=%s' % ( + rt_image_attach.id, rt_image_attach.access_token + ) if rt_image_attach else False + ) + return result if result else '' diff --git a/pms_api_rest/services/pms_agency_service.py b/pms_api_rest/services/pms_agency_service.py index d6895b565..5866b623d 100644 --- a/pms_api_rest/services/pms_agency_service.py +++ b/pms_api_rest/services/pms_agency_service.py @@ -1,4 +1,5 @@ from odoo import _ +from odoo.addons.pms_api_rest.services.manage_url_images import url_image from odoo.exceptions import MissingError from odoo.addons.base_rest import restapi @@ -41,9 +42,7 @@ class PmsAgencyService(Component): PmsAgencyInfo( id=agency.id, name=agency.name, - image=agency.image_1024.decode("utf-8") - if agency.image_1024 - else None, + imageUrl=url_image(self, 'res.partner', agency.id, 'image_128'), ) ) return result_agencies @@ -72,7 +71,7 @@ class PmsAgencyService(Component): return PmsAgencieInfo( id=agency.id, name=agency.name if agency.name else None, - image=agency.image_1024.decode("utf-8") if agency.image_1024 else None, + imageUrl=url_image(self, 'res.partner', agency.id, 'image_128'), ) else: raise MissingError(_("Agency not found")) diff --git a/pms_api_rest/services/pms_login_service.py b/pms_api_rest/services/pms_login_service.py index 92c601cac..f7cfb518c 100644 --- a/pms_api_rest/services/pms_login_service.py +++ b/pms_api_rest/services/pms_login_service.py @@ -9,6 +9,7 @@ from odoo.exceptions import AccessDenied from odoo.addons.base_rest import restapi from odoo.addons.base_rest_datamodel.restapi import Datamodel from odoo.addons.component.core import Component +from .manage_url_images import url_image class PmsLoginService(Component): @@ -80,6 +81,7 @@ class PmsLoginService(Component): userImageBase64=user_record.partner_id.image_1024 if user_record.partner_id.image_1024 else None, + userImageUrl=url_image(self, 'res.partner', user_record.partner_id.id, 'image_1024'), isNewInterfaceUser=user_record.is_new_interface_app_user, availabilityRuleFields=avail_rule_names, ) diff --git a/pms_api_rest/services/pms_property_service.py b/pms_api_rest/services/pms_property_service.py index c1acafe74..38e7a61ec 100644 --- a/pms_api_rest/services/pms_property_service.py +++ b/pms_api_rest/services/pms_property_service.py @@ -1,6 +1,7 @@ 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.addons.pms_api_rest.services.manage_url_images import url_image class PmsPropertyService(Component): @@ -48,6 +49,7 @@ class PmsPropertyService(Component): simpleInColor=prop.simple_in_color, simpleFutureColor=prop.simple_future_color, language=prop.lang, + hotelImageUrl=url_image(self, 'pms.property', prop.id, 'hotel_image_pms_api_rest'), ) ) return result_properties diff --git a/pms_api_rest/services/pms_room_type_class_service.py b/pms_api_rest/services/pms_room_type_class_service.py index 28dfa3ea0..87f3e3d66 100644 --- a/pms_api_rest/services/pms_room_type_class_service.py +++ b/pms_api_rest/services/pms_room_type_class_service.py @@ -1,6 +1,7 @@ from odoo.addons.base_rest import restapi from odoo.addons.base_rest_datamodel.restapi import Datamodel from odoo.addons.component.core import Component +from .manage_url_images import url_image class PmsRoomTypeClassService(Component): @@ -51,6 +52,7 @@ class PmsRoomTypeClassService(Component): name=room.name, defaultCode=room.default_code if room.default_code else None, pmsPropertyIds=room.pms_property_ids.mapped("id"), + imageUrl=url_image(self, 'pms.room.type.class', room.id, 'icon_pms_api_rest'), ) ) return result_room_type_class diff --git a/pms_api_rest/services/pms_sale_channel_service.py b/pms_api_rest/services/pms_sale_channel_service.py index 7c209912e..1c8468157 100644 --- a/pms_api_rest/services/pms_sale_channel_service.py +++ b/pms_api_rest/services/pms_sale_channel_service.py @@ -1,4 +1,5 @@ from odoo import _ +from odoo.addons.pms_api_rest.services.manage_url_images import url_image from odoo.exceptions import MissingError from odoo.addons.base_rest import restapi @@ -62,9 +63,7 @@ class PmsSaleChannelService(Component): channelType=sale_channel.channel_type if sale_channel.channel_type else None, - icon=sale_channel.icon - if sale_channel.icon - else None, + iconUrl=url_image(self, 'pms.sale.channel', sale_channel.id, 'icon'), ) ) return result_sale_channels diff --git a/pms_api_rest/views/pms_property_views.xml b/pms_api_rest/views/pms_property_views.xml index 5c86deee6..b47007b35 100644 --- a/pms_api_rest/views/pms_property_views.xml +++ b/pms_api_rest/views/pms_property_views.xml @@ -4,6 +4,11 @@ pms.property + + + + + diff --git a/pms_api_rest/views/pms_room_type_class_views.xml b/pms_api_rest/views/pms_room_type_class_views.xml new file mode 100644 index 000000000..343423465 --- /dev/null +++ b/pms_api_rest/views/pms_room_type_class_views.xml @@ -0,0 +1,12 @@ + + + + pms.room.type.class + + + + + + + +