From 3243407440309b3ef057f01e0b0361d6f68afad4 Mon Sep 17 00:00:00 2001 From: Dario Lodeiros Date: Wed, 12 Dec 2018 18:01:36 +0100 Subject: [PATCH 1/7] [ADD] Onboard service line basic workflow --- hotel/__manifest__.py | 1 + hotel/models/__init__.py | 1 + hotel/models/hotel_board_service_room_type.py | 52 ++++++++++++++++++- .../hotel_board_service_room_type_line.py | 21 ++++++++ hotel/views/hotel_board_service_room_type.xml | 30 +++++++++++ hotel/views/hotel_room_type_views.xml | 3 ++ 6 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 hotel/models/hotel_board_service_room_type_line.py create mode 100644 hotel/views/hotel_board_service_room_type.xml diff --git a/hotel/__manifest__.py b/hotel/__manifest__.py index 98c2551c5..13fb04ca2 100644 --- a/hotel/__manifest__.py +++ b/hotel/__manifest__.py @@ -50,6 +50,7 @@ 'views/hotel_board_service_views.xml', 'views/hotel_checkin_partner_views.xml', 'views/hotel_room_type_availability_views.xml', + 'views/hotel_board_service_room_type.xml', 'data/cron_jobs.xml', 'data/records.xml', 'data/email_template_cancel.xml', diff --git a/hotel/models/__init__.py b/hotel/models/__init__.py index 29689f309..3c9619694 100644 --- a/hotel/models/__init__.py +++ b/hotel/models/__init__.py @@ -29,3 +29,4 @@ from . import hotel_room_type_class from . import hotel_room_closure_reason from . import hotel_service_line from . import hotel_board_service +from . import hotel_board_service_room_type_line diff --git a/hotel/models/hotel_board_service_room_type.py b/hotel/models/hotel_board_service_room_type.py index ec9111d22..9b6ef772e 100644 --- a/hotel/models/hotel_board_service_room_type.py +++ b/hotel/models/hotel_board_service_room_type.py @@ -21,7 +21,11 @@ class HotelBoardServiceRoomType(models.Model): price_type = fields.Selection([ ('fixed','Fixed'), ('percent','Percent')], string='Type', default='fixed', required=True) - amount = fields.Float('Amount', digits=dp.get_precision('Product Price'), default=0.0) + 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') @api.model_cr def init(self): @@ -29,6 +33,52 @@ class HotelBoardServiceRoomType(models.Model): 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 + return action + + @api.depends('board_service_line_ids.amount') + def _compute_board_amount(self): + for record in self: + total = 0 + for service in record.board_service_line_ids: + 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) + today = fields.Date.today() + for product in board_service.service_ids: + cmds.append((0, False, { + 'service_id': product.id, + 'amount': product.list_price #TODO: default amomunt?¿ + })) + return {'board_service_line_ids': cmds} + @api.constrains('pricelist_id') def constrains_pricelist_id(self): for record in self: diff --git a/hotel/models/hotel_board_service_room_type_line.py b/hotel/models/hotel_board_service_room_type_line.py new file mode 100644 index 000000000..62e42ee75 --- /dev/null +++ b/hotel/models/hotel_board_service_room_type_line.py @@ -0,0 +1,21 @@ +# Copyright 2017 Dario Lodeiros +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, 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" + + hotel_board_service_room_type_id = fields.Many2one( + 'hotel.board.service.room.type', 'Board Service Room', ondelete='cascade', required=True) + service_id = fields.Many2one( + 'product.product', 'Product', required=True, readonly=True) + amount = fields.Float('Amount', digits=dp.get_precision('Product Price'), default=0.0) + + + diff --git a/hotel/views/hotel_board_service_room_type.xml b/hotel/views/hotel_board_service_room_type.xml new file mode 100644 index 000000000..d709080ef --- /dev/null +++ b/hotel/views/hotel_board_service_room_type.xml @@ -0,0 +1,30 @@ + + + + + hotel.board.service.room.type.form + hotel.board.service.room.type + +
+ + + + + + + + + + +
+
+
+ + + Hotel Board Service + hotel.board.service.room.type + form + form + + +
diff --git a/hotel/views/hotel_room_type_views.xml b/hotel/views/hotel_room_type_views.xml index 7816a72a8..61294b3b5 100644 --- a/hotel/views/hotel_room_type_views.xml +++ b/hotel/views/hotel_room_type_views.xml @@ -46,6 +46,9 @@ +