diff --git a/pms/__manifest__.py b/pms/__manifest__.py index 894b682d3..a3b39364e 100644 --- a/pms/__manifest__.py +++ b/pms/__manifest__.py @@ -83,6 +83,7 @@ "views/traveller_report_template.xml", "wizards/wizard_split_join_swap_reservation.xml", "views/pms_automated_mails_views.xml", + "views/precheckin_portal_templates.xml", "wizards/wizard_massive_changes.xml", "wizards/wizard_advanced_filters.xml", ], diff --git a/pms/controllers/pms_portal.py b/pms/controllers/pms_portal.py index 3eeffcd74..4f854a17e 100644 --- a/pms/controllers/pms_portal.py +++ b/pms/controllers/pms_portal.py @@ -214,3 +214,71 @@ class PortalReservation(CustomerPortal): reservation_sudo, access_token, **kw ) return request.render("pms.portal_my_reservation_detail", values) + + +class PortalPrecheckin(CustomerPortal): + def _prepare_home_portal_values(self, counters): + partner = request.env.user.partner_id + values = super()._prepare_home_portal_values(counters) + Reservation = request.env["pms.reservation"].search([("partner_id", "=", partner.id)]) + if "checkin_count" in counters: + checkin_partner_count = len(Reservation.checkin_partner_ids) + values["checkin_count"] = checkin_partner_count if Reservation.check_access_rights("read", raise_exception=False) else 0 + return values + + def _precheckin_get_page_view_values(self, precheckin, access_token, **kwargs): + values = {"precheckin": precheckin, "token": access_token} + return self._get_page_view_values( + precheckin, + access_token, + values, + "my_precheckins_history", + False, + **kwargs + ) + + @http.route( + ["/my/precheckins", "/my/precheckins/page/"], + type="http", + auth="user", + website=True, + ) + def portal_my_precheckin( + self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw + ): + partner = request.env.user.partner_id + values = self._prepare_portal_layout_values() + Reservation = request.env["pms.reservation"] + values["reservations"] = Reservation.search( + [ + ("partner_id", "child_of", partner.id), + ] + ) + domain = [ + ("partner_id", "child_of", partner.id), + ] + if date_begin and date_end: + domain += [ + ("create_date", ">", date_begin), + ("create_date", "<=", date_end), + ] + + reservations = Reservation.search(domain) + checkin_count = len(reservations.checkin_partner_ids) + pager = portal_pager( + url="/my/precheckins", + url_args={"date_begin": date_begin, "date_end": date_end}, + total=checkin_count, + page=page, + step=self._items_per_page, + ) + request.session["my_precheckins_history"] = reservations.ids[:100] + values.update( + { + "date": date_begin, + "page_name": "precheckins", + "pager": pager, + "default_url": "/my/precheckins", + } + ) + return request.render("pms.portal_my_precheckin", values) diff --git a/pms/models/pms_checkin_partner.py b/pms/models/pms_checkin_partner.py index 1621615ea..a46ed8e7f 100644 --- a/pms/models/pms_checkin_partner.py +++ b/pms/models/pms_checkin_partner.py @@ -459,6 +459,27 @@ class PmsCheckinPartner(models.Model): else: record.partner_incongruences = False + def _compute_access_url(self): + super(PmsCheckinPartner, self)._compute_access_url() + for checkin in self: + checkin.access_url = "/my/precheckin/%s" % (checkin.id) + + @api.model + def _checkin_mandatory_fields(self, depends=False): + # api.depends need "reservation_id.state" in the lambda function + if depends: + return ["reservation_id.state", "name"] + return ["name"] + + @api.model + def _checkin_partner_fields(self): + # api.depends need "reservation_id.state" in the lambda function + checkin_fields = self._checkin_mandatory_fields() + checkin_fields.extend(["mobile", "email"]) + return checkin_fields + + # Constraints and onchanges + @api.constrains("departure", "arrival") def _check_departure(self): for record in self: diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index 4897a7e30..99fe61d03 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -62,3 +62,4 @@ user_access_pms_folio_portal,user_access_pms_folio_portal,model_pms_folio,base.g user_access_pms_reservation_portal,user_access_pms_reservation_portal,model_pms_reservation,base.group_portal,1,0,0,0 user_access_pms_automated_mails,user_access_pms_automated_mails,model_pms_automated_mails,pms.group_pms_user,1,1,1,1 access_pms_several_partners_wizard,access_pms_several_partners_wizard,model_pms_several_partners_wizard,base.group_user,1,1,1,1 +user_access_pms_precheckin_portal,user_access_pms_precheckin_portal,model_pms_checkin_partner,base.group_portal,1,0,0,0 diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml index c16ee839f..d00ac1e23 100644 --- a/pms/security/pms_security.xml +++ b/pms/security/pms_security.xml @@ -237,5 +237,12 @@ + + Portal Personal Pre-checkin + + [] + + + diff --git a/pms/views/precheckin_portal_templates.xml b/pms/views/precheckin_portal_templates.xml new file mode 100644 index 000000000..881ff24dc --- /dev/null +++ b/pms/views/precheckin_portal_templates.xml @@ -0,0 +1,92 @@ + + + + + +