From d04c5c936c209c6ab0bc1ba096d36cb0ebbbb703 Mon Sep 17 00:00:00 2001 From: Oscar Date: Tue, 12 Oct 2021 00:18:02 -0500 Subject: [PATCH] Fix services --- folio.py | 4 +- service.py | 80 ++++++++++++++------------------------ view/service_form.xml | 3 +- view/service_line_form.xml | 10 ++++- view/service_line_tree.xml | 6 +-- 5 files changed, 45 insertions(+), 58 deletions(-) diff --git a/folio.py b/folio.py index 6deb1b3..bfdaa5e 100644 --- a/folio.py +++ b/folio.py @@ -119,7 +119,9 @@ class Folio(ModelSQL, ModelView): 'invisible': ~Bool(Eval('complementary')), 'required': Bool(Eval('complementary')), }) - breakfast_included = fields.Boolean('Breakfast Included') + breakfast_included = fields.Boolean('Breakfast Included', states={ + 'readonly': Eval('registration_state') != 'check_in', + }) room_amount = fields.Function(fields.Numeric('Room Amount', digits=(16, 2)), 'get_room_amount') stock_moves = fields.Many2Many('hotel.folio-stock.move', 'folio', diff --git a/service.py b/service.py index 7f403e0..ec8cbc8 100644 --- a/service.py +++ b/service.py @@ -152,21 +152,12 @@ class ServiceLine(Workflow, ModelSQL, ModelView): quantity = fields.Integer('Quantity', required=True, states=STATES_LINE) description = fields.Char('Description', states=STATES_LINE) order = fields.Char('Order', select=True, states=STATES_LINE) - invoice_line = fields.Many2One('account.invoice.line', 'Invoice Line', + folio_line = fields.Many2One('hotel.folio', 'Folio Line', states={'readonly': True}) - guest = fields.Many2One('hotel.folio.guest', 'Guest', states=STATES_LINE, - domain=[ - ('folio.room', '=', Eval('room')), - # ('operation.start_date', '<=', Eval('')), - ('id', 'in', Eval('current_guests')), - ], depends=['current_guests']) + guest = fields.Char('Guest', states=STATES_LINE) charge = fields.Many2One('hotel.folio.charge', 'Operation Line', states={'readonly': True}) - current_guests = fields.Function(fields.Many2Many( - 'hotel.folio.guest', None, None, 'Current Guests'), - 'on_change_with_current_guests') - folio = fields.Function(fields.Many2One('hotel.folio', - 'Folio'), 'get_folio') + folio = fields.Many2One('hotel.folio', 'Folio') state = fields.Selection([ ('draft', 'Draft'), ('loaded', 'Loaded'), @@ -234,62 +225,37 @@ class ServiceLine(Workflow, ModelSQL, ModelView): def done(cls, records): pass - @fields.depends('room') - def on_change_with_current_guests(self, name=None): - Folio = Pool().get('hotel.folio') - if self.room: - operations = Folio.search([ - ('room', '=', self.room.id), - ('state', '=', 'check_in'), - ]) - guests = [] - for op in operations: - guests.extend([g.id for g in op.guests]) - - return guests - def get_folio(self, name=None): if self.folio_line: return self.folio_line.folio.id def add_product_to_room(self): pool = Pool() - Folio = pool.get('hotel.folio') + # Folio = pool.get('hotel.folio') FolioCharge = pool.get('hotel.folio.charge') - if self.invoice_line: + if self.folio_line: return - dom = [ - ('room', '=', self.room.id), - ('state', '=', 'open'), - ('start_date', '<=', self.service.service_date), - ('end_date', '>=', self.service.service_date), - ] - if self.guest: - dom.append(('guests', '=', self.guest.id)) + # if not folios: + # raise UserError( + # gettext('hotel.msg_room_not_occupied', s=self.room.name) + # ) + # elif len(folios) > 1: + # raise UserError( + # gettext('hotel.msg_multiple_rooms_active', s=self.room.name) + # ) - folios = Folio.search(dom) - if not folios: - raise UserError( - gettext('hotel.msg_room_not_occupied', s=self.room.name) - ) - elif len(folios) > 1: - raise UserError( - gettext('hotel.msg_multiple_rooms_active', s=self.room.name) - ) - - folio = folios[0] + # folio = folios[0] new_line = { - 'operation': folio.id, + 'folio': self.folio.id, 'date_service': self.service.service_date, 'order': self.order, 'description': self.description, 'quantity': int(self.quantity), - 'invoice_to': folio.main_guest.id, + 'invoice_to': self.folio.main_guest.id, 'unit_price': self.product.template.list_price, 'product': self.product.id, } - # FIXME: not use int line, = FolioCharge.create([new_line]) self.write([self], {'charge': line.id}) @@ -338,8 +304,10 @@ class CreateDailyServices(Wizard): folios = Folio.search([ ('arrival_date', '<', self.start.date), + # ('departure_date', '<', self.start.date), ('registration_state', 'in', ['check_in', 'check_out']), ]) + print('folios...', folios) lines_to_create = [] service, = Service.create([{ @@ -350,13 +318,23 @@ class CreateDailyServices(Wizard): Service.open([service]) product = self.start.kind.product for fol in folios: + print('fol.breakfast_included... ', fol.breakfast_included) if not fol.breakfast_included: continue + lines_to_create.append({ + 'service': service.id, + 'folio': fol.id, + 'room': fol.room.id, + 'guest': fol.main_guest.name, + 'product': product.id, + 'quantity': 1, + }) for guest in fol.guests: lines_to_create.append({ + 'folio': fol.id, 'service': service.id, 'room': fol.room.id, - 'guest': guest.id, + 'guest': guest.party.name, 'product': product.id, 'quantity': 1, }) diff --git a/view/service_form.xml b/view/service_form.xml index b4ce4a4..1d7ba3f 100644 --- a/view/service_form.xml +++ b/view/service_form.xml @@ -12,9 +12,10 @@ this repository contains the full copyright notices and license terms. -->