diff --git a/hotel/models/hotel_board_service.py b/hotel/models/hotel_board_service.py index c4774e4d7..4fcff0aa4 100644 --- a/hotel/models/hotel_board_service.py +++ b/hotel/models/hotel_board_service.py @@ -8,8 +8,8 @@ class HotelBoardService(models.Model): _description = "Board Services" name = fields.Char('Board Name', size=64, required=True, index=True) - service_ids = fields.Many2many(comodel_name='product.template', - relation='hotel_board_services_room', + service_ids = fields.Many2many(comodel_name='product.product', + relation='hotel_board_services_reservation', column1='board_id', column2='service_id') sequence = fields.Integer('Sequence') diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py index d4769203b..b950af86e 100644 --- a/hotel/models/hotel_reservation.py +++ b/hotel/models/hotel_reservation.py @@ -408,7 +408,7 @@ class HotelReservation(models.Model): def open_folio(self): action = self.env.ref('hotel.open_hotel_folio1_form_tree_all').read()[0] if self.folio_id: - action['views'] = [(self.env.ref('hotel.view_hotel_folio1_form').id, 'form')] + action['views'] = [(self.env.ref('hotel.hotel_folio_view_form').id, 'form')] action['res_id'] = self.folio_id.id else: action = {'type': 'ir.actions.act_window_close'} @@ -417,7 +417,7 @@ class HotelReservation(models.Model): @api.multi def open_reservation_form(self): action = self.env.ref('hotel.open_hotel_reservation_form_tree_all').read()[0] - action['views'] = [(self.env.ref('hotel.view_hotel_reservation_form').id, 'form')] + action['views'] = [(self.env.ref('hotel.hotel_reservation_view_form').id, 'form')] action['res_id'] = self.id return action @@ -564,6 +564,25 @@ class HotelReservation(models.Model): ] return {'domain': {'room_id': domain_rooms}} + @api.onchange('board_service_id') + def onchange_board_service(self): + if self.board_service_id: + self.service_line_ids.filtered(lambda r: r.is_board_service == True).unlink() + board_services = [] + for product in self.board_service_id.service_ids: + board_services.append((0, False, { + 'product_id': product.id, + 'is_board_service': True, + })) + # NEED REVIEW: Why I need add manually the old IDs if board service is (0,0,(-)) ¿?¿?¿ + self.update({'service_line_ids': [(6, 0, self.service_line_ids.ids)] + board_services}) + update_services = self.service_line_ids.filtered( + lambda r: r.is_board_service == True + ) + for service in update_services: + service.onchange_product_calc_qty() + + """ COMPUTE RESERVE COLOR ---------------------------------------------- """ diff --git a/hotel/models/hotel_service.py b/hotel/models/hotel_service.py index 218659dda..52dcc4f7c 100644 --- a/hotel/models/hotel_service.py +++ b/hotel/models/hotel_service.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, api +from odoo import models, fields, api, _ from odoo.tools import DEFAULT_SERVER_DATE_FORMAT from datetime import timedelta from odoo.exceptions import ValidationError @@ -10,6 +10,28 @@ class HotelService(models.Model): _name = 'hotel.service' _description = 'Hotel Services and its charges' + @api.model + def name_search(self, name='', args=None, operator='ilike', limit=100): + if args is None: + args = [] + if not(name == '' and operator == 'ilike'): + args += [ + '|', + ('ser_room_line.name', operator, name), + ('name', operator, name) + ] + return super(HotelService, self).name_search( + name='', args=args, operator='ilike', limit=limit) + + @api.multi + def name_get(self): + result = [] + for res in self: + name = u'%s (%s)' % (res.name, res.ser_room_line.name) + result.append((res.id, name)) + return result + + @api.model def _default_ser_room_line(self): if self.env.context.get('room_lines'): @@ -27,6 +49,7 @@ class HotelService(models.Model): service_line_ids = fields.One2many('hotel.service.line', 'service_id') product_qty = fields.Integer('Quantity') days_qty = fields.Integer(compute="_compute_days_qty", store=True) + is_board_service = fields.Boolean() pricelist_id = fields.Many2one(related='folio_id.pricelist_id') channel_type = fields.Selection([ ('door', 'Door'), @@ -53,7 +76,7 @@ class HotelService(models.Model): @api.model def create(self, vals): if self.compute_lines_out_vals(vals): - reservation = self.env['hotel.reservation'].browse(vals['reservation_id']) + reservation = self.env['hotel.reservation'].browse(vals['ser_room_line']) product = self.env['product.product'].browse(vals['product_id']) params = { 'per_person': product.per_person, @@ -61,7 +84,7 @@ class HotelService(models.Model): } vals.update(self.prepare_service_lines( reservation.checkin, - reservation.days, + reservation.nights, params )) record = super(HotelService, self).create(vals) @@ -80,15 +103,15 @@ class HotelService(models.Model): else: for record in self: reservations = self.env['hotel.reservation'] - reservation = reservations.browse(vals['reservation_id']) \ - if 'reservation_id' in vals else record.reservation_id + reservation = reservations.browse(vals['ser_room_line']) \ + if 'ser_room_line' in vals else record.ser_room_line params = { 'per_person': product.per_person, 'persons': reservation.adults } record.update(record.prepare_service_lines( reservation.checkin, - reservation.days, + reservation.nights, params )) res = super(HotelService, self).write(vals) diff --git a/hotel/views/hotel_reservation_views.xml b/hotel/views/hotel_reservation_views.xml index cb67aa58f..14301499d 100644 --- a/hotel/views/hotel_reservation_views.xml +++ b/hotel/views/hotel_reservation_views.xml @@ -245,6 +245,7 @@ + - + + + + + +