From 10c97945a934aadd416e7ddf3846bf9fd61b6cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Thu, 19 Nov 2020 09:36:40 +0100 Subject: [PATCH] [IMP] Check persons Onboard reservation --- pms/demo/pms_reservation.xml | 2 +- pms/models/pms_checkin_partner.py | 2 +- pms/models/pms_reservation.py | 30 ++++++++++++++++++++------- pms/models/pms_service.py | 2 +- pms/tests/test_pms_checkin_partner.py | 12 +++-------- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/pms/demo/pms_reservation.xml b/pms/demo/pms_reservation.xml index 8f201a7d7..57c858299 100644 --- a/pms/demo/pms_reservation.xml +++ b/pms/demo/pms_reservation.xml @@ -244,7 +244,7 @@ 2 1 - onboard + confirm diff --git a/pms/models/pms_checkin_partner.py b/pms/models/pms_checkin_partner.py index 4e411646b..def65db15 100644 --- a/pms/models/pms_checkin_partner.py +++ b/pms/models/pms_checkin_partner.py @@ -129,7 +129,7 @@ class PmsCheckinPartner(models.Model): if reservation_id: reservation = self.env["pms.reservation"].browse(reservation_id) draft_checkins = reservation.checkin_partner_ids.filtered( - lambda c: c.state in ("draft") + lambda c: c.state == "draft" ) if len(draft_checkins) > 0 and vals.get("partner_id"): draft_checkins[0].sudo().unlink() diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index c5ec14cea..c07fae506 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -572,7 +572,7 @@ class PmsReservation(models.Model): lambda c: c.state in ("precheckin", "onboard", "done") ) unassigned_checkins = reservation.checkin_partner_ids.filtered( - lambda c: c.state in ("draft") + lambda c: c.state == "draft" ) leftover_unassigneds_count = ( len(assigned_checkins) + len(unassigned_checkins) - reservation.adults @@ -626,7 +626,7 @@ class PmsReservation(models.Model): def _compute_pending_checkin_data(self): for reservation in self: reservation.pending_checkin_data = len( - reservation.checkin_partner_ids.filtered(lambda c: c.state in ("draft")) + reservation.checkin_partner_ids.filtered(lambda c: c.state == "draft") ) @api.depends("pending_checkin_data") @@ -718,7 +718,7 @@ class PmsReservation(models.Model): "Product Unit of Measure" ) for line in self: - if line.state in ("draft"): + if line.state == "draft": line.invoice_status = "no" elif not float_is_zero(line.qty_to_invoice, precision_digits=precision): line.invoice_status = "to invoice" @@ -857,7 +857,9 @@ class PmsReservation(models.Model): def _max_checkin_partner_ids(self): for record in self: if len(record.checkin_partner_ids) > record.adults: - raise models.ValidationError(_("The room already is completed")) + raise models.ValidationError( + _("The room already is completed (%s)", record.name) + ) @api.constrains("adults") def _check_adults(self): @@ -870,9 +872,23 @@ class PmsReservation(models.Model): len(extra_bed) ): raise ValidationError( - _("Persons can't be higher than room capacity") + _( + "Persons can't be higher than room capacity (%s)", + record.name, + ) ) + @api.constrains("state") + def _check_onboard_reservation(self): + for record in self: + if ( + not record.checkin_partner_ids.filtered(lambda c: c.state == "onboard") + and record.state == "onboard" + ): + raise ValidationError( + _("No person from reserve %s has arrived", record.name) + ) + # @api.constrains("reservation_type", "partner_id") # def _check_partner_reservation(self): # for reservation in self: @@ -1050,7 +1066,7 @@ class PmsReservation(models.Model): def autocheckout(self): reservations = self.env["pms.reservation"].search( [ - ("state", "not in", ("done", "cancelled")), + ("state", "not in", ["done", "cancelled"]), ("checkout", "<", fields.Date.today()), ] ) @@ -1089,7 +1105,7 @@ class PmsReservation(models.Model): def confirm(self): for record in self: vals = {} - if record.checkin_partner_ids: + if record.checkin_partner_ids.filtered(lambda c: c.state == "onboard"): vals.update({"state": "onboard"}) else: vals.update({"state": "confirm"}) diff --git a/pms/models/pms_service.py b/pms/models/pms_service.py index 5a36ecc30..6ff3facee 100644 --- a/pms/models/pms_service.py +++ b/pms/models/pms_service.py @@ -459,7 +459,7 @@ class PmsService(models.Model): ) for line in self: state = line.folio_id.state or "draft" - if state in ("draft"): + if state == "draft": line.invoice_status = "no" elif not float_is_zero(line.qty_to_invoice, precision_digits=precision): line.invoice_status = "to invoice" diff --git a/pms/tests/test_pms_checkin_partner.py b/pms/tests/test_pms_checkin_partner.py index 7b53f97c2..9485e6dd1 100644 --- a/pms/tests/test_pms_checkin_partner.py +++ b/pms/tests/test_pms_checkin_partner.py @@ -91,15 +91,9 @@ class TestPmsCheckinPartner(TestHotel): # ARRANGE self.arrange_single_checkin() - # ACT - self.checkin1.action_on_board() - - # ASSERT - self.assertEqual( - self.checkin1.state, - "onboard", - "the partner checkin was not successful", - ) + # ACT & ASSERT + with self.assertRaises(ValidationError), self.cr.savepoint(): + self.reservation_1.state = "onboard" def test_onboard_reservation(self):