From 185f6f0a39f16eb7011ec3a61d530a16d9c64800 Mon Sep 17 00:00:00 2001 From: Dario Lodeiros Date: Sun, 18 Jul 2021 22:16:40 +0200 Subject: [PATCH] [IMP] pms: out service and staff reservation improvementes --- pms/demo/pms_master_data.xml | 2 +- pms/models/pms_folio.py | 10 +++-- pms/models/pms_reservation.py | 6 ++- pms/wizards/pms_booking_engine.py | 15 ++++++- pms/wizards/pms_booking_engine_views.xml | 54 ++++++++++++++++++++---- 5 files changed, 71 insertions(+), 16 deletions(-) diff --git a/pms/demo/pms_master_data.xml b/pms/demo/pms_master_data.xml index 009a87cf5..026af4f80 100644 --- a/pms/demo/pms_master_data.xml +++ b/pms/demo/pms_master_data.xml @@ -53,7 +53,7 @@ - Agalia + Algalia diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py index 29a4d28ea..e01ace03e 100644 --- a/pms/models/pms_folio.py +++ b/pms/models/pms_folio.py @@ -625,7 +625,9 @@ class PmsFolio(models.Model): ) def _compute_pricelist_id(self): for folio in self: - if len(folio.reservation_ids.pricelist_id) == 1: + if folio.reservation_type in ("out", "staff"): + folio.pricelist_id = False + elif len(folio.reservation_ids.pricelist_id) == 1: folio.pricelist_id = folio.reservation_ids.pricelist_id elif folio.agency_id and folio.agency_id.apply_pricelist: folio.pricelist_id = folio.agency_id.property_product_pricelist @@ -634,10 +636,12 @@ class PmsFolio(models.Model): elif not folio.pricelist_id: folio.pricelist_id = folio.pms_property_id.default_pricelist_id - @api.depends("agency_id") + @api.depends("agency_id", "reservation_type") def _compute_partner_id(self): for folio in self: - if folio.agency_id and folio.agency_id.invoice_to_agency: + if folio.reservation_type == "out": + folio.partner_id = False + elif folio.agency_id and folio.agency_id.invoice_to_agency: folio.partner_id = folio.agency_id.id elif not folio.partner_id: folio.partner_id = False diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 4df0b83cc..3f2336df9 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -766,7 +766,9 @@ class PmsReservation(models.Model): def _compute_partner_id(self): for reservation in self: if not reservation.partner_id: - if reservation.folio_id and reservation.folio_id.partner_id: + if reservation.reservation_type == "out": + reservation.partner_id = False + elif reservation.folio_id and reservation.folio_id.partner_id: reservation.partner_id = reservation.folio_id.partner_id elif reservation.agency_id and reservation.agency_id.invoice_to_agency: reservation.partner_id = reservation.agency_id @@ -843,6 +845,8 @@ class PmsReservation(models.Model): @api.depends("partner_id", "agency_id") def _compute_pricelist_id(self): for reservation in self: + if reservation.reservation_type in ("out", "staff"): + reservation.pricelist_id = False if reservation.agency_id and reservation.agency_id.apply_pricelist: reservation.pricelist_id = ( reservation.agency_id.property_product_pricelist diff --git a/pms/wizards/pms_booking_engine.py b/pms/wizards/pms_booking_engine.py index d3f444d29..b39002ce6 100644 --- a/pms/wizards/pms_booking_engine.py +++ b/pms/wizards/pms_booking_engine.py @@ -51,6 +51,9 @@ class BookingEngine(models.TransientModel): string="Partner", help="Partner who made the reservation", comodel_name="res.partner", + compute="_compute_partner_id", + readonly=False, + store=True, check_pms_properties=True, ) folio_id = fields.Many2one( @@ -69,6 +72,13 @@ class BookingEngine(models.TransientModel): compute="_compute_availability_results", check_pms_properties=True, ) + reservation_type = fields.Selection( + string="Type", + help="The type of the reservation. " + "Can be 'Normal', 'Staff' or 'Out of Service'", + default=lambda *a: "normal", + selection=[("normal", "Normal"), ("staff", "Staff"), ("out", "Out of Service")], + ) agency_id = fields.Many2one( string="Agency", help="Agency that made the reservation", @@ -141,7 +151,7 @@ class BookingEngine(models.TransientModel): elif not record.partner_id: record.partner_id = False - @api.depends("partner_id") + @api.depends("partner_id", "agency_id") def _compute_partner_name(self): for record in self: if record.partner_id: @@ -164,7 +174,7 @@ class BookingEngine(models.TransientModel): for record in self: record.availability_results = False - if record.start_date and record.end_date and record.pricelist_id: + if record.start_date and record.end_date: if record.end_date == record.start_date: record.end_date = record.end_date + datetime.timedelta(days=1) @@ -215,6 +225,7 @@ class BookingEngine(models.TransientModel): if not record.folio_id: folio = self.env["pms.folio"].create( { + "reservation_type": record.reservation_type, "pricelist_id": record.pricelist_id.id, "partner_id": record.partner_id.id if record.partner_id diff --git a/pms/wizards/pms_booking_engine_views.xml b/pms/wizards/pms_booking_engine_views.xml index b6ad75e63..fbd2db0ce 100644 --- a/pms/wizards/pms_booking_engine_views.xml +++ b/pms/wizards/pms_booking_engine_views.xml @@ -8,6 +8,7 @@
+ - - + +
@@ -28,22 +36,37 @@ + + + -
@@ -83,16 +106,21 @@ attrs="{'readonly':[('num_rooms_available','<',1)]}" force_save="1" /> - + @@ -103,11 +131,19 @@
- +
- +