[WIP] Manage multihotel and multicompany

This commit is contained in:
Pablo
2019-07-19 11:47:51 +02:00
committed by Dario Lodeiros
parent 9d182cf38b
commit 5f8d663ffa
6 changed files with 31 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -66,6 +66,7 @@
<field name="arch" type="xml">
<tree string=" Hotel Room Type">
<field name="sequence" widget="handle"/>
<field name="hotel_id" />
<field name="name" />
<field name="code_type"/>
<field name="list_price"/>

View File

@@ -126,6 +126,7 @@
<field name="arch" type="xml">
<tree string="Hotel Room">
<field name="sequence" widget="handle"/>
<field name="hotel_id"/>
<field name="name" />
<field name="room_type_id" />
<field name="capacity" />