diff --git a/hotel/models/hotel_property.py b/hotel/models/hotel_property.py index 0128d50e4..5172c259a 100644 --- a/hotel/models/hotel_property.py +++ b/hotel/models/hotel_property.py @@ -15,3 +15,6 @@ class HotelProperty(models.Model): company_id = fields.Many2one('res.company', help='The company that owns or operates this hotel.') user_ids = fields.Many2many('res.users', 'hotel_property_users_rel', 'hotel_id', 'user_id', string='Accepted Users') + + room_type_ids = fields.One2many('hotel.room.type', 'hotel_id', 'Room Types') + room_ids = fields.One2many('hotel.room', 'hotel_id', 'Room') diff --git a/hotel/models/hotel_room.py b/hotel/models/hotel_room.py index 114190469..4191c9b65 100644 --- a/hotel/models/hotel_room.py +++ b/hotel/models/hotel_room.py @@ -5,6 +5,7 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError + class HotelRoom(models.Model): """ The rooms for lodging can be for sleeping, usually called rooms, and also for speeches (conference rooms), parking, relax with cafe con leche, spa... @@ -13,6 +14,10 @@ class HotelRoom(models.Model): _description = 'Hotel Room' _order = "sequence, room_type_id, name" + @api.model + def _get_default_hotel(self): + return self.env.user.hotel_id + name = fields.Char('Room Name', required=True) active = fields.Boolean('Active', default=True) sequence = fields.Integer('Sequence', default=0) @@ -21,6 +26,9 @@ class HotelRoom(models.Model): ondelete='restrict') floor_id = fields.Many2one('hotel.floor', 'Ubication', help='At which floor the room is located.') + hotel_id = fields.Many2one('hotel.property', 'Hotel', required=True, ondelete='restrict', + default=_get_default_hotel,) + max_adult = fields.Integer('Max Adult') max_child = fields.Integer('Max Child') capacity = fields.Integer('Capacity') diff --git a/hotel/models/hotel_room_type.py b/hotel/models/hotel_room_type.py index cc85c269f..09ca4ba26 100644 --- a/hotel/models/hotel_room_type.py +++ b/hotel/models/hotel_room_type.py @@ -4,6 +4,7 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError + class HotelRoomType(models.Model): """ Before creating a 'room type', you need to consider the following: With the term 'room type' is meant a sales type of residential accommodation: for @@ -13,6 +14,10 @@ class HotelRoomType(models.Model): _description = "Room Type" _inherits = {'product.product': 'product_id'} + @api.model + def _get_default_hotel(self): + return self.env.user.hotel_id + # Relationship between models product_id = fields.Many2one('product.product', 'Product Room Type', required=True, delegate=True, @@ -26,6 +31,8 @@ class HotelRoomType(models.Model): 'room_type_ids', 'amenity_ids', string='Room Type Amenities', help='List of Amenities.') + hotel_id = fields.Many2one('hotel.property', 'Hotel', required=True, ondelete='restrict', + default=_get_default_hotel,) # TODO Hierarchical relationship for parent-child tree ? # parent_id = fields.Many2one ... diff --git a/hotel/models/inherited_ir_http.py b/hotel/models/inherited_ir_http.py index f15ca02a4..6a7725db8 100644 --- a/hotel/models/inherited_ir_http.py +++ b/hotel/models/inherited_ir_http.py @@ -2,8 +2,9 @@ # Copyright 2019 Dario Lodeiros # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models +from odoo import models, _ from odoo.http import request +from odoo.exceptions import MissingError class IrHttp(models.AbstractModel): @@ -13,8 +14,17 @@ class IrHttp(models.AbstractModel): res = super().session_info() user = request.env.user display_switch_hotel_menu = len(user.hotel_ids) > 1 + # TODO: limit hotels to the current company? or switch company automatically res['hotel_id'] = request.env.user.hotel_id.id if request.session.uid else None res['user_hotels'] = {'current_hotel': (user.hotel_id.id, user.hotel_id.name), 'allowed_hotels': [(hotel.id, hotel.name) for hotel in user.hotel_ids]} if display_switch_hotel_menu else False + if user.hotel_id.company_id in user.company_ids: + user.company_id = user.hotel_id.company_id + res['company_id'] = user.hotel_id.company_id.id + else: + raise MissingError( + _("Wrong hotel and company access settings for this user. " + "Please review hotel and company for user %s") % user.name) + return res diff --git a/hotel/views/hotel_room_type_views.xml b/hotel/views/hotel_room_type_views.xml index 15aa43600..d98360627 100644 --- a/hotel/views/hotel_room_type_views.xml +++ b/hotel/views/hotel_room_type_views.xml @@ -66,6 +66,7 @@ + diff --git a/hotel/views/hotel_room_views.xml b/hotel/views/hotel_room_views.xml index 9f48ceab0..57571bae4 100644 --- a/hotel/views/hotel_room_views.xml +++ b/hotel/views/hotel_room_views.xml @@ -126,6 +126,7 @@ +