From cca52a0db2b671b93f9bdd70909f7a9517a6fb21 Mon Sep 17 00:00:00 2001 From: braisab Date: Wed, 3 Mar 2021 18:11:33 +0100 Subject: [PATCH 01/22] [WIP]pms: Folio user portal --- pms/__init__.py | 1 + pms/__manifest__.py | 1 + pms/controllers/__init__.py | 1 + pms/controllers/pms_portal.py | 34 ++++++++++++++++++++ pms/security/ir.model.access.csv | 1 + pms/security/pms_security.xml | 7 +++++ pms/views/folio_portal_templates.xml | 47 ++++++++++++++++++++++++++++ 7 files changed, 92 insertions(+) create mode 100644 pms/controllers/__init__.py create mode 100644 pms/controllers/pms_portal.py create mode 100644 pms/views/folio_portal_templates.xml diff --git a/pms/__init__.py b/pms/__init__.py index 22280bdac..36176c525 100644 --- a/pms/__init__.py +++ b/pms/__init__.py @@ -2,4 +2,5 @@ from . import models from . import wizards +from . import controllers from .init_hook import post_init_hook diff --git a/pms/__manifest__.py b/pms/__manifest__.py index 5147c917d..d5aefcd77 100644 --- a/pms/__manifest__.py +++ b/pms/__manifest__.py @@ -67,6 +67,7 @@ "views/webclient_templates.xml", "views/ir_sequence_views.xml", "views/account_journal_views.xml", + "views/folio_portal_templates.xml", "wizards/wizard_reservation.xml", "wizards/wizard_massive_changes.xml", "wizards/wizard_advanced_filters.xml", diff --git a/pms/controllers/__init__.py b/pms/controllers/__init__.py new file mode 100644 index 000000000..52d463f19 --- /dev/null +++ b/pms/controllers/__init__.py @@ -0,0 +1 @@ +from . import pms_portal diff --git a/pms/controllers/pms_portal.py b/pms/controllers/pms_portal.py new file mode 100644 index 000000000..bf826d591 --- /dev/null +++ b/pms/controllers/pms_portal.py @@ -0,0 +1,34 @@ +from odoo import http +from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.exceptions import AccessError, MissingError +from odoo.http import request, route + + +class PortalFolio(CustomerPortal): + + def _prepare_home_portal_values(self, counters): + partner = request.env.user.partner_id + values = super()._prepare_home_portal_values(counters) + Folio = request.env['pms.folio'] + if 'folio_count' in counters: + values['folio_count'] = Folio.search_count([ + # ('partner_id', '=', partner.id), + ]) if Folio.check_access_rights('read', raise_exception=False) else 0 + return values + + @http.route(['/my/folios'], type='http', auth="user", website=True) + def portal_my_folios(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw): + values = self._prepare_portal_layout_values() + values['folios'] = request.env['pms.folio'].sudo().search([]) + return request.render("pms.portal_my_folio", values) + + @http.route(['/my/folios/'], type='http', auth="user", website=True) + def portal_my_folio_detail(self, folio_id, access_token=None, report_type=None, download=False, **kw): + try: + folio_sudo = self._document_check_access('pms_folio', folio_id, access_token=access_token) + except (AccessError, MissingError): + return request.redirect('/my') + if report_type in ('html', 'pdf', 'text'): + return self._show_report(model=folio_sudo, report_type=report_type, report_ref='pms.report_folio_document', download=download) + values = self._invoice_get_page_view_values(folio_sudo, access_token, **kw) + return request.render("pms.report_folio_document", values) diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index 2587b5b9b..c972810bf 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -60,3 +60,4 @@ user_access_folio_make_invoice_advance,user_access_folio_make_invoice_advance,mo user_access_pms_invoice_filter_days,user_access_pms_invoice_filter_days,model_pms_invoice_filter_days,pms.group_pms_user,1,1,1,1 user_access_pms_invoice_filter_days_items,user_access_pms_invoice_filter_days_items,model_pms_invoice_filter_days_items,pms.group_pms_user,1,1,1,1 user_access_wizard_payment_folio,user_access_wizard_payment_folio,model_wizard_payment_folio,pms.group_pms_user,1,1,1,1 +user_access_pms_folio_portal,user_access_pms_folio_portal,model_pms_folio,base.group_portal,1,0,0,0 \ No newline at end of file diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml index d9af58fb9..a9705ff48 100644 --- a/pms/security/pms_security.xml +++ b/pms/security/pms_security.xml @@ -223,5 +223,12 @@ user.get_active_property_ids())] + + Portal Personal Folios + + [] + + + diff --git a/pms/views/folio_portal_templates.xml b/pms/views/folio_portal_templates.xml new file mode 100644 index 000000000..d34e3ba6f --- /dev/null +++ b/pms/views/folio_portal_templates.xml @@ -0,0 +1,47 @@ + + + + + + From b3ce037840daeaa81af2206445dbfbcd954e1e0e Mon Sep 17 00:00:00 2001 From: Sara Lago Date: Thu, 4 Mar 2021 12:15:37 +0100 Subject: [PATCH 02/22] [WIP] Pms: show folio details in portal --- pms/controllers/pms_portal.py | 72 +++-- pms/security/ir.model.access.csv | 2 +- pms/security/pms_security.xml | 6 +- pms/views/folio_portal_templates.xml | 420 ++++++++++++++++++++++++++- 4 files changed, 469 insertions(+), 31 deletions(-) diff --git a/pms/controllers/pms_portal.py b/pms/controllers/pms_portal.py index bf826d591..eeb15fee3 100644 --- a/pms/controllers/pms_portal.py +++ b/pms/controllers/pms_portal.py @@ -1,34 +1,68 @@ from odoo import http -from odoo.addons.portal.controllers.portal import CustomerPortal from odoo.exceptions import AccessError, MissingError -from odoo.http import request, route +from odoo.http import request + +from odoo.addons.portal.controllers.portal import CustomerPortal class PortalFolio(CustomerPortal): - def _prepare_home_portal_values(self, counters): partner = request.env.user.partner_id values = super()._prepare_home_portal_values(counters) - Folio = request.env['pms.folio'] - if 'folio_count' in counters: - values['folio_count'] = Folio.search_count([ - # ('partner_id', '=', partner.id), - ]) if Folio.check_access_rights('read', raise_exception=False) else 0 + Folio = request.env["pms.folio"] + if "folio_count" in counters: + values["folio_count"] = ( + Folio.search_count( + [ + ("partner_id", "child_of", partner.id), + ] + ) + if Folio.check_access_rights("read", raise_exception=False) + else 0 + ) return values - @http.route(['/my/folios'], type='http', auth="user", website=True) - def portal_my_folios(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw): + def _folio_get_page_view_values(self, folio, access_token, **kwargs): + values = {"folio": folio, "token": access_token} + return self._get_page_view_values( + folio, access_token, values, "my_folios_history", False, **kwargs + ) + + @http.route(["/my/folios"], type="http", auth="user", website=True) + def portal_my_folios( + 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() - values['folios'] = request.env['pms.folio'].sudo().search([]) + values["folios"] = ( + request.env["pms.folio"] + .sudo() + .search( + [ + ("partner_id", "child_of", partner.id), + ] + ) + ) return request.render("pms.portal_my_folio", values) - @http.route(['/my/folios/'], type='http', auth="user", website=True) - def portal_my_folio_detail(self, folio_id, access_token=None, report_type=None, download=False, **kw): + @http.route(["/my/folios/"], type="http", auth="user", website=True) + def portal_my_folio_detail( + self, folio_id, access_token=None, report_type=None, download=False, **kw + ): try: - folio_sudo = self._document_check_access('pms_folio', folio_id, access_token=access_token) + folio_sudo = self._document_check_access( + "pms.folio", + folio_id, + access_token="9a6f4fc8-59f6-4f50-ae45-5af6492e7aba", + ) except (AccessError, MissingError): - return request.redirect('/my') - if report_type in ('html', 'pdf', 'text'): - return self._show_report(model=folio_sudo, report_type=report_type, report_ref='pms.report_folio_document', download=download) - values = self._invoice_get_page_view_values(folio_sudo, access_token, **kw) - return request.render("pms.report_folio_document", values) + return request.redirect("/my") + if report_type in ("html", "pdf", "text"): + return self._show_report( + model=folio_sudo, + report_type=report_type, + report_ref="action_report_folio", + download=download, + ) + values = self._folio_get_page_view_values(folio_sudo, access_token, **kw) + return request.render("pms.folio_portal_template", values) diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index c972810bf..0d1c1107a 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -60,4 +60,4 @@ user_access_folio_make_invoice_advance,user_access_folio_make_invoice_advance,mo user_access_pms_invoice_filter_days,user_access_pms_invoice_filter_days,model_pms_invoice_filter_days,pms.group_pms_user,1,1,1,1 user_access_pms_invoice_filter_days_items,user_access_pms_invoice_filter_days_items,model_pms_invoice_filter_days_items,pms.group_pms_user,1,1,1,1 user_access_wizard_payment_folio,user_access_wizard_payment_folio,model_wizard_payment_folio,pms.group_pms_user,1,1,1,1 -user_access_pms_folio_portal,user_access_pms_folio_portal,model_pms_folio,base.group_portal,1,0,0,0 \ No newline at end of file +user_access_pms_folio_portal,user_access_pms_folio_portal,model_pms_folio,base.group_portal,1,0,0,0 diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml index a9705ff48..b1d35cae1 100644 --- a/pms/security/pms_security.xml +++ b/pms/security/pms_security.xml @@ -225,10 +225,10 @@ Portal Personal Folios - + [] - - + + diff --git a/pms/views/folio_portal_templates.xml b/pms/views/folio_portal_templates.xml index d34e3ba6f..435e4b1b9 100644 --- a/pms/views/folio_portal_templates.xml +++ b/pms/views/folio_portal_templates.xml @@ -1,10 +1,16 @@ - @@ -121,8 +124,18 @@ >Salesperson
- Contact - Contact + Contact + Contact
Date: Fri, 5 Mar 2021 20:05:54 +0100 Subject: [PATCH 08/22] [WIP]pms: added reservations in portal --- pms/__manifest__.py | 1 + pms/controllers/pms_portal.py | 112 ++++++++++++- pms/models/pms_reservation.py | 5 + pms/security/ir.model.access.csv | 1 + pms/security/pms_security.xml | 7 + pms/views/reservation_portal_templates.xml | 180 +++++++++++++++++++++ 6 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 pms/views/reservation_portal_templates.xml diff --git a/pms/__manifest__.py b/pms/__manifest__.py index d5aefcd77..5e91a3bb5 100644 --- a/pms/__manifest__.py +++ b/pms/__manifest__.py @@ -68,6 +68,7 @@ "views/ir_sequence_views.xml", "views/account_journal_views.xml", "views/folio_portal_templates.xml", + "views/reservation_portal_templates.xml", "wizards/wizard_reservation.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 db962effc..927320589 100644 --- a/pms/controllers/pms_portal.py +++ b/pms/controllers/pms_portal.py @@ -40,7 +40,7 @@ class PortalFolio(CustomerPortal): partner = request.env.user.partner_id values = self._prepare_portal_layout_values() PmsFolio = request.env["pms.folio"] - values["folios"] = PmsFolio.sudo().search( + values["folios"] = PmsFolio.search( [ ("partner_id", "child_of", partner.id), ] @@ -108,3 +108,113 @@ class PortalFolio(CustomerPortal): ) values = self._folio_get_page_view_values(folio_sudo, access_token, **kw) return request.render("pms.folio_portal_template", values) + + +class PortalReservation(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"] + if "reservation_count" in counters: + values["reservation_count"] = ( + Reservation.search_count( + [ + ("partner_id", "=", partner.id), + ] + ) + if Reservation.check_access_rights("read", raise_exception=False) + else 0 + ) + return values + + def _reservation_get_page_view_values(self, reservation, access_token, **kwargs): + values = {"reservation": reservation, "token": access_token} + return self._get_page_view_values( + reservation, + access_token, + values, + "my_reservations_history", + False, + **kwargs + ) + + @http.route( + ["/my/reservations", "/my/reservations/page/"], + type="http", + auth="user", + website=True, + ) + def portal_my_reservations( + 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), + ] + searchbar_sortings = { + "date": {"label": _("Order Date"), "reservation": "date_order desc"}, + "name": {"label": _("Reference"), "reservation": "name"}, + "stage": {"label": _("Stage"), "reservation": "state"}, + } + if not sortby: + sortby = "date" + sort_order = searchbar_sortings[sortby]["reservation"] + + if date_begin and date_end: + domain += [ + ("create_date", ">", date_begin), + ("create_date", "<=", date_end), + ] + reservation_count = Reservation.search_count(domain) + pager = portal_pager( + url="/my/reservations", + url_args={"date_begin": date_begin, "date_end": date_end, "sortby": sortby}, + total=reservation_count, + page=page, + step=self._items_per_page, + ) + reservations = Reservation.search( + domain, order=sort_order, limit=self._items_per_page, offset=pager["offset"] + ) + request.session["my_reservations_history"] = reservations.ids[:100] + values.update( + { + "date": date_begin, + "reservations": reservations.sudo(), + "page_name": "reservations", + "pager": pager, + "default_url": "/my/reservations", + "searchbar_sortings": searchbar_sortings, + "sortby": sortby, + } + ) + return request.render("pms.portal_my_reservation", values) + + @http.route( + ["/my/reservations/"], + type="http", + auth="user", + website=True, + ) + def portal_my_reservation_detail(self, reservation_id, access_token=None, **kw): + try: + reservation_sudo = self._document_check_access( + "pms.reservation", + reservation_id, + access_token=access_token, + ) + except (AccessError, MissingError): + return request.redirect("/my") + # for attachment in reservation_sudo.attachment_ids: + # attachment.generate_access_token() + values = self._reservation_get_page_view_values( + reservation_sudo, access_token, **kw + ) + return request.render("pms.portal_my_reservation_detail", values) diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 7af48e7a0..23398640f 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -822,6 +822,11 @@ class PmsReservation(models.Model): else False ) + def _compute_access_url(self): + super(PmsReservation, self)._compute_access_url() + for reservation in self: + reservation.access_url = "/my/reservations/%s" % (reservation.id) + def _search_left_for_checkin(self, operator, value): if operator not in ("=",): raise UserError( diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index 0d1c1107a..3bf23f885 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -61,3 +61,4 @@ user_access_pms_invoice_filter_days,user_access_pms_invoice_filter_days,model_pm user_access_pms_invoice_filter_days_items,user_access_pms_invoice_filter_days_items,model_pms_invoice_filter_days_items,pms.group_pms_user,1,1,1,1 user_access_wizard_payment_folio,user_access_wizard_payment_folio,model_wizard_payment_folio,pms.group_pms_user,1,1,1,1 user_access_pms_folio_portal,user_access_pms_folio_portal,model_pms_folio,base.group_portal,1,0,0,0 +user_access_pms_reservation_portal,user_access_pms_reservation_portal,model_pms_reservation,base.group_portal,1,0,0,0 diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml index b1d35cae1..ff331b48f 100644 --- a/pms/security/pms_security.xml +++ b/pms/security/pms_security.xml @@ -230,5 +230,12 @@ + + Portal Personal Reservation + + [] + + + diff --git a/pms/views/reservation_portal_templates.xml b/pms/views/reservation_portal_templates.xml new file mode 100644 index 000000000..a4da35de5 --- /dev/null +++ b/pms/views/reservation_portal_templates.xml @@ -0,0 +1,180 @@ + + + + + + + + + From 085bf3fee5471ee1b531fbacec16568dd76fe8eb Mon Sep 17 00:00:00 2001 From: braisab Date: Wed, 3 Mar 2021 18:11:33 +0100 Subject: [PATCH 09/22] [WIP]pms: Folio user portal --- pms/__init__.py | 1 + pms/__manifest__.py | 1 + pms/controllers/__init__.py | 1 + pms/controllers/pms_portal.py | 34 ++++++++++++++++++++ pms/security/ir.model.access.csv | 1 + pms/security/pms_security.xml | 7 +++++ pms/views/folio_portal_templates.xml | 47 ++++++++++++++++++++++++++++ 7 files changed, 92 insertions(+) create mode 100644 pms/controllers/__init__.py create mode 100644 pms/controllers/pms_portal.py create mode 100644 pms/views/folio_portal_templates.xml diff --git a/pms/__init__.py b/pms/__init__.py index 22280bdac..36176c525 100644 --- a/pms/__init__.py +++ b/pms/__init__.py @@ -2,4 +2,5 @@ from . import models from . import wizards +from . import controllers from .init_hook import post_init_hook diff --git a/pms/__manifest__.py b/pms/__manifest__.py index 623b9a827..0c628585c 100644 --- a/pms/__manifest__.py +++ b/pms/__manifest__.py @@ -67,6 +67,7 @@ "views/webclient_templates.xml", "views/ir_sequence_views.xml", "views/account_journal_views.xml", + "views/folio_portal_templates.xml", "wizards/wizard_reservation.xml", "wizards/wizard_massive_changes.xml", "wizards/wizard_advanced_filters.xml", diff --git a/pms/controllers/__init__.py b/pms/controllers/__init__.py new file mode 100644 index 000000000..52d463f19 --- /dev/null +++ b/pms/controllers/__init__.py @@ -0,0 +1 @@ +from . import pms_portal diff --git a/pms/controllers/pms_portal.py b/pms/controllers/pms_portal.py new file mode 100644 index 000000000..bf826d591 --- /dev/null +++ b/pms/controllers/pms_portal.py @@ -0,0 +1,34 @@ +from odoo import http +from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.exceptions import AccessError, MissingError +from odoo.http import request, route + + +class PortalFolio(CustomerPortal): + + def _prepare_home_portal_values(self, counters): + partner = request.env.user.partner_id + values = super()._prepare_home_portal_values(counters) + Folio = request.env['pms.folio'] + if 'folio_count' in counters: + values['folio_count'] = Folio.search_count([ + # ('partner_id', '=', partner.id), + ]) if Folio.check_access_rights('read', raise_exception=False) else 0 + return values + + @http.route(['/my/folios'], type='http', auth="user", website=True) + def portal_my_folios(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw): + values = self._prepare_portal_layout_values() + values['folios'] = request.env['pms.folio'].sudo().search([]) + return request.render("pms.portal_my_folio", values) + + @http.route(['/my/folios/'], type='http', auth="user", website=True) + def portal_my_folio_detail(self, folio_id, access_token=None, report_type=None, download=False, **kw): + try: + folio_sudo = self._document_check_access('pms_folio', folio_id, access_token=access_token) + except (AccessError, MissingError): + return request.redirect('/my') + if report_type in ('html', 'pdf', 'text'): + return self._show_report(model=folio_sudo, report_type=report_type, report_ref='pms.report_folio_document', download=download) + values = self._invoice_get_page_view_values(folio_sudo, access_token, **kw) + return request.render("pms.report_folio_document", values) diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index ce18fbbfd..c41b2cae9 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -61,3 +61,4 @@ user_access_pms_invoice_filter_days,user_access_pms_invoice_filter_days,model_pm user_access_pms_invoice_filter_days_items,user_access_pms_invoice_filter_days_items,model_pms_invoice_filter_days_items,pms.group_pms_user,1,1,1,1 user_access_wizard_payment_folio,user_access_wizard_payment_folio,model_wizard_payment_folio,pms.group_pms_user,1,1,1,1 user_access_wizard_folio_changes,user_access_wizard_folio_changes,model_wizard_folio_changes,pms.group_pms_user,1,1,1,1 +user_access_pms_folio_portal,user_access_pms_folio_portal,model_pms_folio,base.group_portal,1,0,0,0 diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml index d9af58fb9..a9705ff48 100644 --- a/pms/security/pms_security.xml +++ b/pms/security/pms_security.xml @@ -223,5 +223,12 @@ user.get_active_property_ids())] + + Portal Personal Folios + + [] + + + diff --git a/pms/views/folio_portal_templates.xml b/pms/views/folio_portal_templates.xml new file mode 100644 index 000000000..d34e3ba6f --- /dev/null +++ b/pms/views/folio_portal_templates.xml @@ -0,0 +1,47 @@ + + + + + + From 51b417e4a29cc0f9dd48b46c16beaaa12a426d0a Mon Sep 17 00:00:00 2001 From: Sara Lago Date: Thu, 4 Mar 2021 12:15:37 +0100 Subject: [PATCH 10/22] [WIP] Pms: show folio details in portal --- pms/controllers/pms_portal.py | 72 +++-- pms/security/pms_security.xml | 6 +- pms/views/folio_portal_templates.xml | 420 ++++++++++++++++++++++++++- 3 files changed, 468 insertions(+), 30 deletions(-) diff --git a/pms/controllers/pms_portal.py b/pms/controllers/pms_portal.py index bf826d591..eeb15fee3 100644 --- a/pms/controllers/pms_portal.py +++ b/pms/controllers/pms_portal.py @@ -1,34 +1,68 @@ from odoo import http -from odoo.addons.portal.controllers.portal import CustomerPortal from odoo.exceptions import AccessError, MissingError -from odoo.http import request, route +from odoo.http import request + +from odoo.addons.portal.controllers.portal import CustomerPortal class PortalFolio(CustomerPortal): - def _prepare_home_portal_values(self, counters): partner = request.env.user.partner_id values = super()._prepare_home_portal_values(counters) - Folio = request.env['pms.folio'] - if 'folio_count' in counters: - values['folio_count'] = Folio.search_count([ - # ('partner_id', '=', partner.id), - ]) if Folio.check_access_rights('read', raise_exception=False) else 0 + Folio = request.env["pms.folio"] + if "folio_count" in counters: + values["folio_count"] = ( + Folio.search_count( + [ + ("partner_id", "child_of", partner.id), + ] + ) + if Folio.check_access_rights("read", raise_exception=False) + else 0 + ) return values - @http.route(['/my/folios'], type='http', auth="user", website=True) - def portal_my_folios(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw): + def _folio_get_page_view_values(self, folio, access_token, **kwargs): + values = {"folio": folio, "token": access_token} + return self._get_page_view_values( + folio, access_token, values, "my_folios_history", False, **kwargs + ) + + @http.route(["/my/folios"], type="http", auth="user", website=True) + def portal_my_folios( + 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() - values['folios'] = request.env['pms.folio'].sudo().search([]) + values["folios"] = ( + request.env["pms.folio"] + .sudo() + .search( + [ + ("partner_id", "child_of", partner.id), + ] + ) + ) return request.render("pms.portal_my_folio", values) - @http.route(['/my/folios/'], type='http', auth="user", website=True) - def portal_my_folio_detail(self, folio_id, access_token=None, report_type=None, download=False, **kw): + @http.route(["/my/folios/"], type="http", auth="user", website=True) + def portal_my_folio_detail( + self, folio_id, access_token=None, report_type=None, download=False, **kw + ): try: - folio_sudo = self._document_check_access('pms_folio', folio_id, access_token=access_token) + folio_sudo = self._document_check_access( + "pms.folio", + folio_id, + access_token="9a6f4fc8-59f6-4f50-ae45-5af6492e7aba", + ) except (AccessError, MissingError): - return request.redirect('/my') - if report_type in ('html', 'pdf', 'text'): - return self._show_report(model=folio_sudo, report_type=report_type, report_ref='pms.report_folio_document', download=download) - values = self._invoice_get_page_view_values(folio_sudo, access_token, **kw) - return request.render("pms.report_folio_document", values) + return request.redirect("/my") + if report_type in ("html", "pdf", "text"): + return self._show_report( + model=folio_sudo, + report_type=report_type, + report_ref="action_report_folio", + download=download, + ) + values = self._folio_get_page_view_values(folio_sudo, access_token, **kw) + return request.render("pms.folio_portal_template", values) diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml index a9705ff48..b1d35cae1 100644 --- a/pms/security/pms_security.xml +++ b/pms/security/pms_security.xml @@ -225,10 +225,10 @@ Portal Personal Folios - + [] - - + + diff --git a/pms/views/folio_portal_templates.xml b/pms/views/folio_portal_templates.xml index d34e3ba6f..435e4b1b9 100644 --- a/pms/views/folio_portal_templates.xml +++ b/pms/views/folio_portal_templates.xml @@ -1,10 +1,16 @@ - @@ -121,8 +124,18 @@ >Salesperson
- Contact - Contact + Contact + Contact
Date: Fri, 5 Mar 2021 20:05:54 +0100 Subject: [PATCH 16/22] [WIP]pms: added reservations in portal --- pms/__manifest__.py | 1 + pms/controllers/pms_portal.py | 112 ++++++++++++- pms/models/pms_reservation.py | 5 + pms/security/ir.model.access.csv | 1 + pms/security/pms_security.xml | 7 + pms/views/reservation_portal_templates.xml | 180 +++++++++++++++++++++ 6 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 pms/views/reservation_portal_templates.xml diff --git a/pms/__manifest__.py b/pms/__manifest__.py index 0c628585c..270cb2384 100644 --- a/pms/__manifest__.py +++ b/pms/__manifest__.py @@ -68,6 +68,7 @@ "views/ir_sequence_views.xml", "views/account_journal_views.xml", "views/folio_portal_templates.xml", + "views/reservation_portal_templates.xml", "wizards/wizard_reservation.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 db962effc..927320589 100644 --- a/pms/controllers/pms_portal.py +++ b/pms/controllers/pms_portal.py @@ -40,7 +40,7 @@ class PortalFolio(CustomerPortal): partner = request.env.user.partner_id values = self._prepare_portal_layout_values() PmsFolio = request.env["pms.folio"] - values["folios"] = PmsFolio.sudo().search( + values["folios"] = PmsFolio.search( [ ("partner_id", "child_of", partner.id), ] @@ -108,3 +108,113 @@ class PortalFolio(CustomerPortal): ) values = self._folio_get_page_view_values(folio_sudo, access_token, **kw) return request.render("pms.folio_portal_template", values) + + +class PortalReservation(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"] + if "reservation_count" in counters: + values["reservation_count"] = ( + Reservation.search_count( + [ + ("partner_id", "=", partner.id), + ] + ) + if Reservation.check_access_rights("read", raise_exception=False) + else 0 + ) + return values + + def _reservation_get_page_view_values(self, reservation, access_token, **kwargs): + values = {"reservation": reservation, "token": access_token} + return self._get_page_view_values( + reservation, + access_token, + values, + "my_reservations_history", + False, + **kwargs + ) + + @http.route( + ["/my/reservations", "/my/reservations/page/"], + type="http", + auth="user", + website=True, + ) + def portal_my_reservations( + 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), + ] + searchbar_sortings = { + "date": {"label": _("Order Date"), "reservation": "date_order desc"}, + "name": {"label": _("Reference"), "reservation": "name"}, + "stage": {"label": _("Stage"), "reservation": "state"}, + } + if not sortby: + sortby = "date" + sort_order = searchbar_sortings[sortby]["reservation"] + + if date_begin and date_end: + domain += [ + ("create_date", ">", date_begin), + ("create_date", "<=", date_end), + ] + reservation_count = Reservation.search_count(domain) + pager = portal_pager( + url="/my/reservations", + url_args={"date_begin": date_begin, "date_end": date_end, "sortby": sortby}, + total=reservation_count, + page=page, + step=self._items_per_page, + ) + reservations = Reservation.search( + domain, order=sort_order, limit=self._items_per_page, offset=pager["offset"] + ) + request.session["my_reservations_history"] = reservations.ids[:100] + values.update( + { + "date": date_begin, + "reservations": reservations.sudo(), + "page_name": "reservations", + "pager": pager, + "default_url": "/my/reservations", + "searchbar_sortings": searchbar_sortings, + "sortby": sortby, + } + ) + return request.render("pms.portal_my_reservation", values) + + @http.route( + ["/my/reservations/"], + type="http", + auth="user", + website=True, + ) + def portal_my_reservation_detail(self, reservation_id, access_token=None, **kw): + try: + reservation_sudo = self._document_check_access( + "pms.reservation", + reservation_id, + access_token=access_token, + ) + except (AccessError, MissingError): + return request.redirect("/my") + # for attachment in reservation_sudo.attachment_ids: + # attachment.generate_access_token() + values = self._reservation_get_page_view_values( + reservation_sudo, access_token, **kw + ) + return request.render("pms.portal_my_reservation_detail", values) diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 04015fc96..48fd3593f 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -840,6 +840,11 @@ class PmsReservation(models.Model): else False ) + def _compute_access_url(self): + super(PmsReservation, self)._compute_access_url() + for reservation in self: + reservation.access_url = "/my/reservations/%s" % (reservation.id) + def _search_left_for_checkin(self, operator, value): if operator not in ("=",): raise UserError( diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index c41b2cae9..23c05a463 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -62,3 +62,4 @@ user_access_pms_invoice_filter_days_items,user_access_pms_invoice_filter_days_it user_access_wizard_payment_folio,user_access_wizard_payment_folio,model_wizard_payment_folio,pms.group_pms_user,1,1,1,1 user_access_wizard_folio_changes,user_access_wizard_folio_changes,model_wizard_folio_changes,pms.group_pms_user,1,1,1,1 user_access_pms_folio_portal,user_access_pms_folio_portal,model_pms_folio,base.group_portal,1,0,0,0 +user_access_pms_reservation_portal,user_access_pms_reservation_portal,model_pms_reservation,base.group_portal,1,0,0,0 diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml index b1d35cae1..ff331b48f 100644 --- a/pms/security/pms_security.xml +++ b/pms/security/pms_security.xml @@ -230,5 +230,12 @@ + + Portal Personal Reservation + + [] + + + diff --git a/pms/views/reservation_portal_templates.xml b/pms/views/reservation_portal_templates.xml new file mode 100644 index 000000000..a4da35de5 --- /dev/null +++ b/pms/views/reservation_portal_templates.xml @@ -0,0 +1,180 @@ + + + + + + + + + From 74ff63e0e4971760f889b14ca69a4a42c2b8d260 Mon Sep 17 00:00:00 2001 From: braisab Date: Tue, 9 Mar 2021 12:35:39 +0100 Subject: [PATCH 17/22] [WIP] Add more information in reservation portal --- pms/views/folio_portal_templates.xml | 4 +- pms/views/reservation_portal_templates.xml | 127 ++++++++++++++++++--- 2 files changed, 111 insertions(+), 20 deletions(-) diff --git a/pms/views/folio_portal_templates.xml b/pms/views/folio_portal_templates.xml index 56f79be9e..5c5f754fc 100644 --- a/pms/views/folio_portal_templates.xml +++ b/pms/views/folio_portal_templates.xml @@ -178,9 +178,9 @@ class="row pb-2 pt-3 #{'card-header bg-white' if report_type == 'html' else ''}" >
- +
diff --git a/pms/views/reservation_portal_templates.xml b/pms/views/reservation_portal_templates.xml index a4da35de5..866ff0497 100644 --- a/pms/views/reservation_portal_templates.xml +++ b/pms/views/reservation_portal_templates.xml @@ -1,4 +1,4 @@ - +