Merge branch 'multihotel' of https://github.com/hootel/hootel into multihotel

This commit is contained in:
Pablo
2019-09-24 12:31:44 +02:00
9 changed files with 164 additions and 102 deletions

View File

@@ -10,10 +10,15 @@ class HotelRoomAmenity(models.Model):
# Fields declaration
name = fields.Char('Amenity Name', translate=True, required=True)
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False, ondelete='restrict')
hotel_ids = fields.Many2many(
'hotel.property',
string='Hotels',
required=False,
ondelete='restrict')
room_amenity_type_id = fields.Many2one(
'hotel.amenity.type',
'Amenity Category')
default_code = fields.Char('Internal Reference')
room_amenity_type_id = fields.Many2one('hotel.amenity.type',
'Amenity Category')
active = fields.Boolean('Active', default=True)
# TODO: Constrain coherence hotel_ids with amenity types hotel_ids

View File

@@ -1,7 +1,7 @@
# Copyright 2017 Alexandre Díaz
# Copyright 2017 Dario Lodeiros
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields, api
from odoo import models, fields
class HotelRoomAmenityType(models.Model):

View File

@@ -8,20 +8,37 @@ class HotelBoardService(models.Model):
_name = "hotel.board.service"
_description = "Board Services"
name = fields.Char('Board Name', translate=True, size=64, required=True, index=True)
board_service_line_ids = fields.One2many('hotel.board.service.line',
'hotel_board_service_id')
price_type = fields.Selection([
('fixed','Fixed'),
('percent','Percent')], string='Type', default='fixed', required=True)
# Fields declaration
name = fields.Char(
'Board Name',
translate=True,
size=64,
required=True,
index=True)
board_service_line_ids = fields.One2many(
'hotel.board.service.line',
'hotel_board_service_id')
hotel_ids = fields.Many2many(
'hotel.property',
string='Hotels',
required=False,
ondelete='restrict')
hotel_board_service_room_type_ids = fields.One2many(
'hotel.board.service.room.type', 'hotel_board_service_id')
amount = fields.Float('Amount',
digits=dp.get_precision('Product Price'),
compute='_compute_board_amount',
store=True)
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False, ondelete='restrict')
'hotel.board.service.room.type',
'hotel_board_service_id')
price_type = fields.Selection([
('fixed', 'Fixed'),
('percent', 'Percent')],
string='Type',
default='fixed',
required=True)
amount = fields.Float(
'Amount',
digits=dp.get_precision('Product Price'),
compute='_compute_board_amount',
store=True)
# Compute and Search methods
@api.depends('board_service_line_ids.amount')
def _compute_board_amount(self):
for record in self:

View File

@@ -1,32 +1,37 @@
# Copyright 2017 Dario Lodeiros
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models, _
from odoo import api, fields, models
from odoo.addons import decimal_precision as dp
from odoo.exceptions import UserError
class HotelBoardServiceLine(models.Model):
_name = 'hotel.board.service.line'
_description = 'Services on Board Service included'
# Default methods
def _get_default_price(self):
if self.product_id:
return self.product_id.list_price
# Fields declaration
hotel_board_service_id = fields.Many2one(
'hotel.board.service',
'Board Service',
ondelete='cascade',
required=True)
product_id = fields.Many2one(
'product.product', 'Product', required=True)
'product.product',
string='Product',
required=True)
hotel_ids = fields.Many2many(
'hotel.property',
related='hotel_board_service_id.hotel_ids')
amount = fields.Float(
'Amount',
digits=dp.get_precision('Product Price'),
default=_get_default_price)
hotel_ids = fields.Many2many('hotel.property',
related='hotel_board_service_id.hotel_ids')
# Constraints and onchanges
@api.onchange('product_id')
def onchange_product_id(self):
if self.product_id:

View File

@@ -12,64 +12,57 @@ class HotelBoardServiceRoomType(models.Model):
_log_access = False
_description = 'Board Service included in Room'
# Default Methods ang Gets
@api.multi
def name_get(self):
result = []
for res in self:
if res.pricelist_id:
name = u'%s (%s)' % (res.hotel_board_service_id.name, res.pricelist_id.name)
name = u'%s (%s)' % (
res.hotel_board_service_id.name,
res.pricelist_id.name)
else:
name = u'%s (%s)' % (res.hotel_board_service_id.name, _('Generic'))
name = u'%s (%s)' % (res.hotel_board_service_id.name,
_('Generic'))
result.append((res.id, name))
return result
# Fields declaration
hotel_board_service_id = fields.Many2one(
'hotel.board.service', 'Board Service', index=True, ondelete='cascade', required=True)
'hotel.board.service',
string='Board Service',
index=True,
ondelete='cascade',
required=True)
hotel_room_type_id = fields.Many2one(
'hotel.room.type', 'Room Type', index=True, ondelete='cascade', required=True)
'hotel.room.type',
string='Room Type',
index=True,
ondelete='cascade',
required=True)
pricelist_id = fields.Many2one(
'product.pricelist', 'Pricelist', required=False)
'product.pricelist',
string='Pricelist',
required=False)
board_service_line_ids = fields.One2many(
'hotel.board.service.room.type.line',
'hotel_board_service_room_type_id')
hotel_id = fields.Many2one(
'hotel.property',
related='hotel_room_type_id.hotel_id')
price_type = fields.Selection([
('fixed', 'Fixed'),
('percent', 'Percent')], string='Type', default='fixed', required=True)
amount = fields.Float('Amount',
digits=dp.get_precision('Product Price'),
compute='_compute_board_amount',
store=True)
board_service_line_ids = fields.One2many('hotel.board.service.room.type.line', 'hotel_board_service_room_type_id')
hotel_id = fields.Many2one('hotel.property',
related='hotel_room_type_id.hotel_id')
@api.model_cr
def init(self):
self._cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('hotel_board_service_id_hotel_room_type_id_pricelist_id',))
if not self._cr.fetchone():
self._cr.execute('CREATE INDEX hotel_board_service_id_hotel_room_type_id_pricelist_id ON hotel_board_service_room_type_rel (hotel_board_service_id, hotel_room_type_id, pricelist_id)')
@api.model
def create(self, vals):
if 'hotel_board_service_id' in vals:
vals.update(
self.prepare_board_service_room_lines(vals['hotel_board_service_id'])
)
return super(HotelBoardServiceRoomType, self).create(vals)
@api.multi
def write(self, vals):
if 'hotel_board_service_id' in vals:
vals.update(
self.prepare_board_service_room_lines(vals['hotel_board_service_id'])
)
return super(HotelBoardServiceRoomType, self).write(vals)
@api.multi
def open_board_lines_form(self):
action = self.env.ref('hotel.action_hotel_board_service_room_type_view').read()[0]
action['views'] = [(self.env.ref('hotel.hotel_board_service_room_type_form').id, 'form')]
action['res_id'] = self.id
action['target'] = 'new'
return action
('percent', 'Percent')],
string='Type',
default='fixed',
required=True)
amount = fields.Float(
'Amount',
digits=dp.get_precision('Product Price'),
compute='_compute_board_amount',
store=True)
# Compute and Search methods
@api.depends('board_service_line_ids.amount')
def _compute_board_amount(self):
for record in self:
@@ -78,40 +71,85 @@ class HotelBoardServiceRoomType(models.Model):
total += service.amount
record.update({'amount': total})
@api.model
def prepare_board_service_room_lines(self, board_service_id):
"""
Prepare line to price products config
"""
cmds=[(5,0,0)]
board_service = self.env['hotel.board.service'].browse(board_service_id)
for line in board_service.board_service_line_ids:
cmds.append((0, False, {
'product_id': line.product_id.id,
'amount': line.amount
}))
return {'board_service_line_ids': cmds}
# Constraints and onchanges
@api.constrains('pricelist_id')
def constrains_pricelist_id(self):
for record in self:
if self.pricelist_id:
board_pricelist = self.env['hotel.board.service.room.type'].search([
('pricelist_id','=', record.pricelist_id.id),
('hotel_room_type_id','=', record.hotel_room_type_id.id),
('hotel_board_service_id','=',record.hotel_board_service_id.id),
('id','!=',record.id)
('pricelist_id', '=', record.pricelist_id.id),
('hotel_room_type_id', '=', record.hotel_room_type_id.id),
('hotel_board_service_id', '=', record.hotel_board_service_id.id),
('id', '!=', record.id)
])
if board_pricelist:
raise UserError(
_("This Board Service in this Room can't repeat pricelist"))
else:
board_pricelist = self.env['hotel.board.service.room.type'].search([
('pricelist_id','=', False),
('hotel_room_type_id','=', record.hotel_room_type_id.id),
('hotel_board_service_id','=',record.hotel_board_service_id.id),
('id','!=',record.id)
('pricelist_id', '=', False),
('hotel_room_type_id', '=', record.hotel_room_type_id.id),
('hotel_board_service_id', '=', record.hotel_board_service_id.id),
('id', '!=', record.id)
])
if board_pricelist:
raise UserError(
_("This Board Service in this Room can't repeat without pricelist"))
_("This Board Service in this Room \
can't repeat without pricelist"))
# Action methods
@api.multi
def open_board_lines_form(self):
action = self.env.ref(
'hotel.action_hotel_board_service_room_type_view').read()[0]
action['views'] = [(self.env.ref(
'hotel.hotel_board_service_room_type_form').id, 'form')]
action['res_id'] = self.id
action['target'] = 'new'
return action
# ORM Overrides
@api.model_cr
def init(self):
self._cr.execute(
'SELECT indexname FROM pg_indexes WHERE indexname = %s',
('hotel_board_service_id_hotel_room_type_id_pricelist_id',))
if not self._cr.fetchone():
self._cr.execute(
'CREATE INDEX hotel_board_service_id_hotel_room_type_id_pricelist_id \
ON hotel_board_service_room_type_rel \
(hotel_board_service_id, hotel_room_type_id, pricelist_id)')
@api.model
def create(self, vals):
if 'hotel_board_service_id' in vals:
vals.update(
self.prepare_board_service_room_lines(
vals['hotel_board_service_id'])
)
return super(HotelBoardServiceRoomType, self).create(vals)
@api.multi
def write(self, vals):
if 'hotel_board_service_id' in vals:
vals.update(
self.prepare_board_service_room_lines(
vals['hotel_board_service_id'])
)
return super(HotelBoardServiceRoomType, self).write(vals)
# Business methods
@api.model
def prepare_board_service_room_lines(self, board_service_id):
"""
Prepare line to price products config
"""
cmds = [(5, 0, 0)]
board_service = self.env['hotel.board.service'].browse(
board_service_id)
for line in board_service.board_service_line_ids:
cmds.append((0, False, {
'product_id': line.product_id.id,
'amount': line.amount
}))
return {'board_service_line_ids': cmds}

View File

@@ -1,20 +1,22 @@
# Copyright 2017 Dario Lodeiros
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models, _
from odoo import fields, models
from odoo.addons import decimal_precision as dp
from odoo.exceptions import UserError
class HotelBoardServiceRoomTypeLine(models.Model):
_name = 'hotel.board.service.room.type.line'
_description = 'Services on Board Service included in Room'
#TODO def default_amount "amount of service"
# Fields declaration
hotel_board_service_room_type_id = fields.Many2one(
'hotel.board.service.room.type', 'Board Service Room', ondelete='cascade', required=True)
'hotel.board.service.room.type',
'Board Service Room',
ondelete='cascade',
required=True)
product_id = fields.Many2one(
'product.product', 'Product', required=True, readonly=True)
'product.product',
'Product',
required=True,
readonly=True)
#TODO def default_amount "amount of service"
amount = fields.Float('Amount', digits=dp.get_precision('Product Price'), default=0.0)

View File

@@ -25,9 +25,6 @@ class HotelRoom(models.Model):
default=False)
floor_id = fields.Many2one('hotel.floor', 'Ubication',
help='At which floor the room is located.')
max_adult = fields.Integer('Max Adult')
max_child = fields.Integer('Max Child')
capacity = fields.Integer('Capacity')
to_be_cleaned = fields.Boolean('To be Cleaned', default=False)
extra_beds_allowed = fields.Integer('Extra beds allowed',

View File

@@ -53,7 +53,7 @@ class HotelRoomType(models.Model):
for record in self:
record.total_rooms_count = len(record.room_ids)
# CRUD methods
# ORM Overrides
@api.model
def create(self, vals):
""" Add room types as not purchase services. """

View File

@@ -58,8 +58,6 @@ class HotelSharedRoom(models.Model):
name = u'%s (%s)' % (self.name, i + 1)
bed_vals = {
'name': name,
'max_adult': 1,
'max_child': 0,
'capacity': 1,
'room_type_id': self.room_type_id.id,
'sequence': self.sequence,