diff --git a/hotel/models/hotel_amenity.py b/hotel/models/hotel_amenity.py index 045acecad..da5a11c0b 100644 --- a/hotel/models/hotel_amenity.py +++ b/hotel/models/hotel_amenity.py @@ -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 diff --git a/hotel/models/hotel_amenity_type.py b/hotel/models/hotel_amenity_type.py index 89acae297..8ad160eeb 100644 --- a/hotel/models/hotel_amenity_type.py +++ b/hotel/models/hotel_amenity_type.py @@ -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 diff --git a/hotel/models/hotel_board_service.py b/hotel/models/hotel_board_service.py index da398e205..32f8313fe 100644 --- a/hotel/models/hotel_board_service.py +++ b/hotel/models/hotel_board_service.py @@ -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): diff --git a/hotel/models/hotel_board_service_line.py b/hotel/models/hotel_board_service_line.py index 0199bd5aa..8b9f4e8b9 100644 --- a/hotel/models/hotel_board_service_line.py +++ b/hotel/models/hotel_board_service_line.py @@ -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): diff --git a/hotel/models/hotel_board_service_room_type.py b/hotel/models/hotel_board_service_room_type.py index 884571665..69e74e9dd 100644 --- a/hotel/models/hotel_board_service_room_type.py +++ b/hotel/models/hotel_board_service_room_type.py @@ -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): diff --git a/hotel/models/hotel_board_service_room_type_line.py b/hotel/models/hotel_board_service_room_type_line.py index 8fcbb6afd..ba7757094 100644 --- a/hotel/models/hotel_board_service_room_type_line.py +++ b/hotel/models/hotel_board_service_room_type_line.py @@ -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( diff --git a/hotel/models/hotel_cancelation_rule.py b/hotel/models/hotel_cancelation_rule.py index 0415d3b56..4280b766e 100644 --- a/hotel/models/hotel_cancelation_rule.py +++ b/hotel/models/hotel_cancelation_rule.py @@ -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 diff --git a/hotel/models/hotel_checkin_partner.py b/hotel/models/hotel_checkin_partner.py index 18797da05..6456bc514 100644 --- a/hotel/models/hotel_checkin_partner.py +++ b/hotel/models/hotel_checkin_partner.py @@ -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): diff --git a/hotel/models/hotel_floor.py b/hotel/models/hotel_floor.py index f65f2dbe6..0dacdec10 100644 --- a/hotel/models/hotel_floor.py +++ b/hotel/models/hotel_floor.py @@ -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') diff --git a/hotel/models/hotel_folio.py b/hotel/models/hotel_folio.py index bd7a68a2c..32123c823 100644 --- a/hotel/models/hotel_folio.py +++ b/hotel/models/hotel_folio.py @@ -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',) diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py index efe4c7044..7431f444d 100644 --- a/hotel/models/hotel_reservation.py +++ b/hotel/models/hotel_reservation.py @@ -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) diff --git a/hotel/models/hotel_reservation_line.py b/hotel/models/hotel_reservation_line.py index a1b80c29b..ac1625482 100644 --- a/hotel/models/hotel_reservation_line.py +++ b/hotel/models/hotel_reservation_line.py @@ -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): diff --git a/hotel/models/hotel_room.py b/hotel/models/hotel_room.py index 4191c9b65..01dad3d52 100644 --- a/hotel/models/hotel_room.py +++ b/hotel/models/hotel_room.py @@ -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') diff --git a/hotel/models/hotel_room_closure_reason.py b/hotel/models/hotel_room_closure_reason.py index b80b9ad46..c497c2149 100644 --- a/hotel/models/hotel_room_closure_reason.py +++ b/hotel/models/hotel_room_closure_reason.py @@ -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') diff --git a/hotel/models/hotel_room_type_class.py b/hotel/models/hotel_room_type_class.py index a5b1a6f53..09b1550bf 100644 --- a/hotel/models/hotel_room_type_class.py +++ b/hotel/models/hotel_room_type_class.py @@ -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!')] diff --git a/hotel/models/hotel_room_type_restriction.py b/hotel/models/hotel_room_type_restriction.py index cdeb3985f..f07fabd78 100644 --- a/hotel/models/hotel_room_type_restriction.py +++ b/hotel/models/hotel_room_type_restriction.py @@ -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') diff --git a/hotel/models/hotel_room_type_restriction_item.py b/hotel/models/hotel_room_type_restriction_item.py index 8414b9947..7783d0cfd 100644 --- a/hotel/models/hotel_room_type_restriction_item.py +++ b/hotel/models/hotel_room_type_restriction_item.py @@ -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)', diff --git a/hotel/models/hotel_service.py b/hotel/models/hotel_service.py index 23db11ef5..0ec65aa26 100644 --- a/hotel/models/hotel_service.py +++ b/hotel/models/hotel_service.py @@ -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'), diff --git a/hotel/models/hotel_service_line.py b/hotel/models/hotel_service_line.py index e909b72b2..ee4daf578 100644 --- a/hotel/models/hotel_service_line.py +++ b/hotel/models/hotel_service_line.py @@ -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: diff --git a/hotel/models/hotel_shared_room.py b/hotel/models/hotel_shared_room.py index 976484aff..ee58a4ee6 100644 --- a/hotel/models/hotel_shared_room.py +++ b/hotel/models/hotel_shared_room.py @@ -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',) diff --git a/hotel/models/inherited_account_invoice.py b/hotel/models/inherited_account_invoice.py index a8d99aba3..a002505b4 100644 --- a/hotel/models/inherited_account_invoice.py +++ b/hotel/models/inherited_account_invoice.py @@ -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') diff --git a/hotel/models/inherited_payment_return.py b/hotel/models/inherited_payment_return.py index b137d5034..d8382e317 100644 --- a/hotel/models/inherited_payment_return.py +++ b/hotel/models/inherited_payment_return.py @@ -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): diff --git a/hotel/models/inherited_product_pricelist.py b/hotel/models/inherited_product_pricelist.py index 2296f9855..ac2e7d6a6 100644 --- a/hotel/models/inherited_product_pricelist.py +++ b/hotel/models/inherited_product_pricelist.py @@ -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') diff --git a/hotel/models/inherited_product_template.py b/hotel/models/inherited_product_template.py index a47c546e6..bcd0e7079 100644 --- a/hotel/models/inherited_product_template.py +++ b/hotel/models/inherited_product_template.py @@ -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') diff --git a/hotel/views/hotel_board_service_views.xml b/hotel/views/hotel_board_service_views.xml index c8dd7dba2..99083ab0f 100644 --- a/hotel/views/hotel_board_service_views.xml +++ b/hotel/views/hotel_board_service_views.xml @@ -10,6 +10,8 @@
+ diff --git a/hotel/views/hotel_cancelation_rule_views.xml b/hotel/views/hotel_cancelation_rule_views.xml index d765373bc..8c19b69b1 100644 --- a/hotel/views/hotel_cancelation_rule_views.xml +++ b/hotel/views/hotel_cancelation_rule_views.xml @@ -11,6 +11,8 @@

+