mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
102 lines
3.6 KiB
Python
102 lines
3.6 KiB
Python
# Copyright 2017 Alexandre Díaz
|
|
# Copyright 2017 Dario Lodeiros
|
|
# Copyright 2018 Pablo Quesada
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
from odoo import models, fields, api, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class HotelSharedRoom(models.Model):
|
|
_name = 'hotel.shared.room'
|
|
_description = 'Hotel Shared Room'
|
|
_order = "room_type_id, name"
|
|
|
|
name = fields.Char('Room Name', required=True)
|
|
active = fields.Boolean('Active', default=True)
|
|
room_type_id = fields.Many2one(
|
|
'hotel.room.type', 'Hotel Room Type',
|
|
required=True, ondelete='restrict',
|
|
domain=[('shared_room', '=', True)]
|
|
)
|
|
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
|
|
related='room_type_id.hotel_id')
|
|
floor_id = fields.Many2one('hotel.floor', 'Ubication',
|
|
help='At which floor the room is located.',
|
|
ondelete='restrict',)
|
|
sequence = fields.Integer('Sequence', required=True)
|
|
beds = fields.Integer('Beds')
|
|
bed_ids = fields.One2many('hotel.room',
|
|
'shared_room_id',
|
|
readonly=True,
|
|
ondelete='restrict',)
|
|
description_sale = fields.Text(
|
|
'Sale Description', translate=True,
|
|
help="A description of the Product that you want to communicate to "
|
|
" your customers. This description will be copied to every Sales "
|
|
" Order, Delivery Order and Customer Invoice/Credit Note")
|
|
|
|
@api.constrains('beds')
|
|
def _constrain_beds(self):
|
|
self.ensure_one()
|
|
if self.beds < 1:
|
|
raise ValidationError(_("Room beds can't be less than one"))
|
|
if len(self.bed_ids) > self.beds:
|
|
raise ValidationError(_(
|
|
"If you want to eliminate beds in the \
|
|
room you must deactivate the beds from your form"))
|
|
beds = []
|
|
inactive_beds = self.env['hotel.room'].search([
|
|
('active', '=', False),
|
|
('shared_room_id', '=', self.id)
|
|
])
|
|
for i in range(len(self.bed_ids), self.beds):
|
|
if inactive_beds:
|
|
bed = inactive_beds[0]
|
|
bed.update({'active': True})
|
|
inactive_beds -= bed
|
|
continue
|
|
name = u'%s (%s)' % (self.name, i + 1)
|
|
bed_vals = {
|
|
'name': name,
|
|
'capacity': 1,
|
|
'room_type_id': self.room_type_id.id,
|
|
'sequence': self.sequence,
|
|
'floor_id': self.floor_id.id if self.floor_id else False,
|
|
'shared_room_id': self.id,
|
|
}
|
|
beds.append((0, False, bed_vals))
|
|
if beds:
|
|
self.update({
|
|
'bed_ids': beds
|
|
})
|
|
|
|
@api.constrains('active')
|
|
def _constrain_active(self):
|
|
self.bed_ids.write({
|
|
'active': self.active,
|
|
})
|
|
|
|
@api.constrains('room_type_id')
|
|
def _constrain_room_type_id(self):
|
|
self.bed_ids.write({
|
|
'room_type_id': self.room_type_id.id,
|
|
})
|
|
|
|
@api.constrains('floor_id')
|
|
def _constrain_floor_id(self):
|
|
self.bed_ids.write({
|
|
'floor_id': self.floor_id.id,
|
|
})
|
|
|
|
@api.constrains('sequence')
|
|
def _constrain_sequence(self):
|
|
self.bed_ids.write({
|
|
'sequence': self.sequence,
|
|
})
|
|
|
|
@api.constrains('descrition_sale')
|
|
def _constrain_descrition_sale(self):
|
|
self.bed_ids.write({
|
|
'description_sale': self.descrition_sale,
|
|
})
|