[WIP] Basic multihotel modeling

This commit is contained in:
Dario Lodeiros
2019-07-31 14:17:58 +02:00
parent 5f8d663ffa
commit 5a68d76bb0
43 changed files with 106 additions and 65 deletions

View File

@@ -12,3 +12,6 @@ class HotelRoomAmenitie(models.Model):
default_code = fields.Char('Internal Reference')
room_amenity_type_id = fields.Many2one('hotel.amenity.type',
'Amenity Catagory')
hotel_ids = fields.Many2many('hotel.property', 'Hotels', required=False, ondelete='restrict')
#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
from odoo import models, fields, api
class HotelRoomAmenitieType(models.Model):
@@ -11,5 +11,8 @@ class HotelRoomAmenitieType(models.Model):
name = fields.Char('Amenity Name', translate=True, required=True)
active = fields.Boolean('Active', default=True)
room_amenity_ids = fields.One2many('hotel.amenity',
'room_amenity_type_id',
'Amenities in this category')
'room_amenity_type_id',
'Amenities in this category')
hotel_ids = fields.Many2many('hotel.property', 'Hotels', required=False, ondelete='restrict')
#TODO: Constrain coherence hotel_ids with amenities hotel_ids

View File

@@ -20,6 +20,7 @@ class HotelBoardService(models.Model):
digits=dp.get_precision('Product Price'),
compute='_compute_board_amount',
store=True)
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False, ondelete='restrict')
@api.depends('board_service_line_ids.amount')
def _compute_board_amount(self):

View File

@@ -24,6 +24,8 @@ class HotelBoardServiceLine(models.Model):
'Amount',
digits=dp.get_precision('Product Price'),
default=_get_default_price)
hotel_ids = fields.Many2many('hotel.property',
related='hotel_board_service_id.hotel_ids')
@api.onchange('product_id')
def onchange_product_id(self):

View File

@@ -37,6 +37,8 @@ class HotelBoardServiceRoomType(models.Model):
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):

View File

@@ -11,6 +11,8 @@ class HotelBoardServiceRoomTypeLine(models.Model):
#TODO def default_amount "amount of service"
hotel_board_service_room_type_id = fields.Many2one(
'hotel.board.service.room.type', 'Board Service Room', ondelete='cascade', required=True)
product_id = fields.Many2one(

View File

@@ -28,3 +28,7 @@ class HotelCancelationRule(models.Model):
('all', 'All Days'),
('days', 'Specify days')], 'No Show apply on', default='all')
days_noshow = fields.Integer('NoShow first days', default="2")
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False,
ondelete='restrict')
#TODO: Constrain coherence hotel_ids pricelist and cancelation_rules

View File

@@ -68,6 +68,10 @@ class HotelCheckinPartner(models.Model):
return reservation.checkout
return False
@api.model
def _get_default_hotel(self):
return self.env.user.hotel_id
partner_id = fields.Many2one('res.partner', default=_default_partner_id,
required=True)
email = fields.Char('E-mail', related='partner_id.email')
@@ -91,6 +95,8 @@ class HotelCheckinPartner(models.Model):
'State', readonly=True,
default=lambda *a: 'draft',
track_visibility='onchange')
hotel_id = fields.Many2one('hotel.property', default=_get_default_hotel,
required=True)
@api.model
def create(self, vals):

View File

@@ -9,3 +9,4 @@ class HotelFloor(models.Model):
name = fields.Char('Ubication Name', translate=True, size=64, required=True, index=True)
sequence = fields.Integer('Sequence')
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False, ondelete='restrict')

View File

@@ -94,10 +94,16 @@ class HotelFolio(models.Model):
def _get_default_team(self):
return self.env['crm.team']._get_default_team_id()
@api.model
def _get_default_hotel(self):
return self.env.user.hotel_id
#Main Fields--------------------------------------------------------
name = fields.Char('Folio Number', readonly=True, index=True,
default=lambda self: _('New'))
client_order_ref = fields.Char(string='Customer Reference', copy=False)
hotel_id = fields.Many2one('hotel.property', default=_get_default_hotel,
required=True)
partner_id = fields.Many2one('res.partner',
track_visibility='onchange',
ondelete='restrict',)

View File

@@ -240,6 +240,8 @@ class HotelReservation(models.Model):
partner_parent_id = fields.Many2one(related="partner_id.parent_id")
closure_reason_id = fields.Many2one(related='folio_id.closure_reason_id')
company_id = fields.Many2one(related='folio_id.company_id', string='Company', store=True, readonly=True)
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
related='folio_id.hotel_id')
reservation_line_ids = fields.One2many('hotel.reservation.line',
'reservation_id',
required=True)

View File

@@ -37,6 +37,8 @@ class HotelReservationLine(models.Model):
'reservation_line_invoice_rel',
'reservation_line_id', 'invoice_line_id',
string='Invoice Lines', readonly=True, copy=False)
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
related='reservation_id.hotel_id')
@api.constrains('date')
def constrains_duplicated_date(self):

View File

@@ -14,10 +14,6 @@ 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)
@@ -26,8 +22,8 @@ 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,)
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
related='room_type_id.hotel_id')
max_adult = fields.Integer('Max Adult')
max_child = fields.Integer('Max Child')

View File

@@ -8,3 +8,5 @@ class RoomClosureReason(models.Model):
name = fields.Char('Name', translate=True, required=True)
description = fields.Text('Description', translate=True)
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False,
ondelete='restrict')

View File

@@ -20,6 +20,8 @@ class HotelRoomTypeClass(models.Model):
category without removing it.")
sequence = fields.Integer('Sequence', default=0)
code_class = fields.Char('Code')
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False,
ondelete='restrict')
_sql_constraints = [('code_class_unique', 'unique(code_class)',
'code must be unique!')]

View File

@@ -6,6 +6,10 @@ from odoo import models, fields, api
class HotelRoomTypeRestriction(models.Model):
_name = 'hotel.room.type.restriction'
@api.model
def _get_default_hotel(self):
return self.env.user.hotel_id
name = fields.Char('Restriction Plan Name', required=True)
item_ids = fields.One2many('hotel.room.type.restriction.item',
'restriction_id', string='Restriction Items',
@@ -14,6 +18,8 @@ class HotelRoomTypeRestriction(models.Model):
help='If unchecked, it will allow you to hide the \
restriction plan without removing it.',
default=True)
hotel_id = fields.Many2one('hotel.property', default=_get_default_hotel,
required=True, ondelete='cascade')
@api.multi
@api.depends('name')

View File

@@ -21,6 +21,8 @@ class HotelRoomTypeRestrictionItem(models.Model):
closed = fields.Boolean('Closed')
closed_departure = fields.Boolean('Closed Departure')
closed_arrival = fields.Boolean('Closed Arrival')
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
related='restriction_id.hotel_id')
_sql_constraints = [('room_type_registry_unique',
'unique(restriction_id, room_type_id, date)',

View File

@@ -132,6 +132,8 @@ class HotelService(models.Model):
# Non-stored related field to allow portal user to see the image of the product he has ordered
product_image = fields.Binary('Product Image', related="product_id.image", store=False, related_sudo=True)
company_id = fields.Many2one(related='folio_id.company_id', string='Company', store=True, readonly=True)
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
related='folio_id.hotel_id')
invoice_status = fields.Selection([
('invoiced', 'Fully Invoiced'),
('to invoice', 'To Invoice'),

View File

@@ -35,6 +35,8 @@ class HotelServiceLine(models.Model):
string='Taxes',
related="service_id.tax_ids",
readonly="True")
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
related='service_id.hotel_id')
def _cancel_discount(self):
for record in self:

View File

@@ -18,6 +18,8 @@ class HotelSharedRoom(models.Model):
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',)

View File

@@ -38,6 +38,7 @@ class AccountInvoice(models.Model):
from_folio = fields.Boolean(compute='_computed_folio_origin')
folio_ids = fields.Many2many(
comodel_name='hotel.folio', compute='_computed_folio_origin')
hotel_id = fields.Many2one('hotel.property')
outstanding_folios_debits_widget = fields.Text(compute='_get_outstanding_folios_JSON')
has_folios_outstanding = fields.Boolean(compute='_get_outstanding_folios_JSON')

View File

@@ -7,6 +7,8 @@ class PaymentReturn(models.Model):
_inherit = 'payment.return'
folio_id = fields.Many2one('hotel.folio', string='Folio')
hotel_id = fields.Many2one('hotel.property', store=True, readonly=True,
related='folio_id.hotel_id')
@api.multi
def action_confirm(self):

View File

@@ -14,6 +14,8 @@ class ProductPricelist(models.Model):
cancelation_rule_id = fields.Many2one(
'hotel.cancelation.rule',
string="Cancelation Policy")
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False,
ondelete='restrict')
@api.multi
@api.depends('name')

View File

@@ -16,3 +16,5 @@ class ProductTemplate(models.Model):
is_extra_bed = fields.Boolean('Is extra bed', default=False)
show_in_calendar = fields.Boolean('Show in Calendar', default=False,
help='Specifies if the product is shown in the calendar information.')
hotel_ids = fields.Many2many('hotel.property', string='Hotels', required=False,
ondelete='restrict')