diff --git a/hotel/__manifest__.py b/hotel/__manifest__.py
index d9475dd00..f1e827455 100644
--- a/hotel/__manifest__.py
+++ b/hotel/__manifest__.py
@@ -9,7 +9,7 @@
Darío Lodeiros,\
Jose Luis Algara,\
Alexandre Díaz,\
- Q. Barriuso,',
+ Pablo Quesada,',
'category': 'Generic Modules/Hotel Management',
'website': 'https://github.com/hootel/hootel',
'depends': [
@@ -22,6 +22,7 @@
'license': "AGPL-3",
'demo': ['data/hotel_demo.xml'],
'data': [
+ 'data/hotel_data.xml',
'security/hotel_security.xml',
'security/ir.model.access.csv',
'wizard/massive_changes.xml',
@@ -34,6 +35,9 @@
'wizard/massive_price_reservation_days.xml',
'wizard/folio_make_invoice_advance_views.xml',
'data/hotel_sequence.xml',
+ 'views/inherited_res_company_views.xml',
+ 'views/inherited_res_users_views.xml',
+ 'views/hotel_property_views.xml',
'views/hotel_floor_views.xml',
'views/hotel_folio_views.xml',
'views/inherited_res_partner_views.xml',
@@ -56,6 +60,7 @@
'views/hotel_checkin_partner_views.xml',
'views/hotel_board_service_room_type_views.xml',
'views/hotel_cancelation_rule_views.xml',
+ 'views/inherited_webclient_templates.xml',
'data/cron_jobs.xml',
'data/records.xml',
'data/email_template_cancel.xml',
@@ -65,5 +70,8 @@
'report/hotel_folio_templates.xml',
'report/hotel_folio.xml'
],
+ 'qweb': [
+ 'static/src/xml/*.xml',
+ ],
'installable': True
}
diff --git a/hotel/data/hotel_data.xml b/hotel/data/hotel_data.xml
new file mode 100644
index 000000000..a6d0c1df9
--- /dev/null
+++ b/hotel/data/hotel_data.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ My Hotel
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hotel/models/__init__.py b/hotel/models/__init__.py
index b56e8af46..d0664b9a5 100644
--- a/hotel/models/__init__.py
+++ b/hotel/models/__init__.py
@@ -2,8 +2,11 @@
# Copyright 2018 Dario Lodeiros
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from . import inherited_ir_http
from . import inherited_payment_return
from . import hotel_board_service_room_type
+from . import hotel_property
+from . import inherited_res_users
from . import hotel_floor
from . import hotel_folio
from . import hotel_reservation
diff --git a/hotel/models/hotel_property.py b/hotel/models/hotel_property.py
new file mode 100644
index 000000000..0128d50e4
--- /dev/null
+++ b/hotel/models/hotel_property.py
@@ -0,0 +1,17 @@
+# Copyright 2019 Pablo Quesada
+# Copyright 2019 Dario Lodeiros
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models, api, fields
+
+
+class HotelProperty(models.Model):
+ _name = 'hotel.property'
+ _description = 'Hotel'
+ _inherits = {'res.partner': 'partner_id'}
+
+ partner_id = fields.Many2one('res.partner', 'Hotel Property',
+ required=True, delegate=True, ondelete='cascade')
+ 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')
diff --git a/hotel/models/inherited_ir_http.py b/hotel/models/inherited_ir_http.py
new file mode 100644
index 000000000..f15ca02a4
--- /dev/null
+++ b/hotel/models/inherited_ir_http.py
@@ -0,0 +1,20 @@
+# Copyright 2019 Pablo Quesada
+# Copyright 2019 Dario Lodeiros
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models
+from odoo.http import request
+
+
+class IrHttp(models.AbstractModel):
+ _inherit = 'ir.http'
+
+ def session_info(self):
+ res = super().session_info()
+ user = request.env.user
+ display_switch_hotel_menu = len(user.hotel_ids) > 1
+ 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
+ return res
diff --git a/hotel/models/inherited_res_company.py b/hotel/models/inherited_res_company.py
index 7173b6635..0eb942f7a 100644
--- a/hotel/models/inherited_res_company.py
+++ b/hotel/models/inherited_res_company.py
@@ -7,6 +7,8 @@ from odoo import models, fields
class ResCompany(models.Model):
_inherit = 'res.company'
+ hotel_ids = fields.One2many('hotel.property', 'company_id', 'Hotels')
+
additional_hours = fields.Integer('Additional Hours',
help="Provide the min hours value for \
check in, checkout days, whatever \
diff --git a/hotel/models/inherited_res_users.py b/hotel/models/inherited_res_users.py
new file mode 100644
index 000000000..0adb77138
--- /dev/null
+++ b/hotel/models/inherited_res_users.py
@@ -0,0 +1,17 @@
+# Copyright 2019 Pablo Quesada
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo import models, api, fields
+
+
+class ResUsers(models.Model):
+ _inherit = 'res.users'
+
+ @api.model
+ def _get_default_hotel(self):
+ return self.env.user.hotel_id
+
+ hotel_id = fields.Many2one('hotel.property', string='Hotel', default=_get_default_hotel,
+ help='The hotel this user is currently working for.',
+ context={'user_preference': True})
+ hotel_ids = fields.Many2many('hotel.property', 'hotel_property_users_rel', 'user_id', 'hotel_id',
+ string='Hotels', default=_get_default_hotel)
diff --git a/hotel/static/src/js/widgets/switch_hotel_menu.js b/hotel/static/src/js/widgets/switch_hotel_menu.js
new file mode 100644
index 000000000..fdc5562ef
--- /dev/null
+++ b/hotel/static/src/js/widgets/switch_hotel_menu.js
@@ -0,0 +1,61 @@
+odoo.define('hotel.SwitchHotelMenu', function(require) {
+"use strict";
+
+var config = require('web.config');
+var core = require('web.core');
+var session = require('web.session');
+var SystrayMenu = require('web.SystrayMenu');
+var Widget = require('web.Widget');
+
+var _t = core._t;
+
+var SwitchHotelMenu = Widget.extend({
+ template: 'hotel.SwitchHotelMenu',
+ willStart: function() {
+ this.isMobile = config.device.isMobile;
+ if (!session.user_hotels) {
+ return $.Deferred().reject();
+ }
+ return this._super();
+ },
+ start: function() {
+ var self = this;
+ this.$el.on('click', '.dropdown-menu li a[data-menu]', _.debounce(function(ev) {
+ ev.preventDefault();
+ var hotel_id = $(ev.currentTarget).data('hotel-id');
+ self._rpc({
+ model: 'res.users',
+ method: 'write',
+ args: [[session.uid], {'hotel_id': hotel_id}],
+ })
+ .then(function() {
+ location.reload();
+ });
+ }, 1500, true));
+
+ var hotels_list = '';
+ if (this.isMobile) {
+ hotels_list = '
' + _t('Tap on the list to change hotel') + '';
+ }
+ else {
+ self.$('.oe_topbar_name').text(session.user_hotels.current_hotel[1]);
+ }
+ _.each(session.user_hotels.allowed_hotels, function(hotel) {
+ var a = '';
+ if (hotel[0] === session.user_hotels.current_hotel[0]) {
+ a = '';
+ } else {
+ a = '';
+ }
+ hotels_list += '' + a + hotel[1] + '';
+ });
+ self.$('.dropdown-menu').html(hotels_list);
+ return this._super();
+ },
+});
+
+SystrayMenu.Items.push(SwitchHotelMenu);
+
+return SwitchHotelMenu;
+
+});
diff --git a/hotel/static/src/xml/hotel_base_templates.xml b/hotel/static/src/xml/hotel_base_templates.xml
new file mode 100644
index 000000000..0a9895114
--- /dev/null
+++ b/hotel/static/src/xml/hotel_base_templates.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/hotel/views/hotel_property_views.xml b/hotel/views/hotel_property_views.xml
new file mode 100644
index 000000000..de6761bf4
--- /dev/null
+++ b/hotel/views/hotel_property_views.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ hotel_property_views_form
+ hotel.property
+
+
+
+
+
+
+ hotel_property_views_tree
+ hotel.property
+
+
+
+
+
+
+
+
+
+
+
+ Hotel Property
+ hotel.property
+ form
+ tree,form
+
+
+
diff --git a/hotel/views/inherited_res_company_views.xml b/hotel/views/inherited_res_company_views.xml
new file mode 100644
index 000000000..aea69d8b9
--- /dev/null
+++ b/hotel/views/inherited_res_company_views.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ view.company.form
+ res.company
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hotel/views/inherited_res_users_views.xml b/hotel/views/inherited_res_users_views.xml
new file mode 100644
index 000000000..45b3cbcc9
--- /dev/null
+++ b/hotel/views/inherited_res_users_views.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ res.users
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hotel/views/inherited_webclient_templates.xml b/hotel/views/inherited_webclient_templates.xml
new file mode 100644
index 000000000..10f1dea10
--- /dev/null
+++ b/hotel/views/inherited_webclient_templates.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+