From 865d6cff4b6fe8d25ec5df779c1d2691845a5d27 Mon Sep 17 00:00:00 2001 From: houssine Date: Mon, 16 Dec 2019 14:54:32 +0100 Subject: [PATCH 01/13] [MIG] migrate module. comply with new portal. WIP --- easy_my_coop_website_portal/__manifest__.py | 8 +- .../controllers/main.py | 89 ++++++---- .../easy_my_coop_website_portal_templates.xml | 162 ++++++++++-------- 3 files changed, 142 insertions(+), 117 deletions(-) diff --git a/easy_my_coop_website_portal/__manifest__.py b/easy_my_coop_website_portal/__manifest__.py index 0063c6f..fe64fd9 100644 --- a/easy_my_coop_website_portal/__manifest__.py +++ b/easy_my_coop_website_portal/__manifest__.py @@ -5,10 +5,9 @@ 'name': 'Easy My Coop Website Portal', "version": "12.0.1.0.0", 'depends': [ - 'website', - 'website_portal_v10', 'easy_my_coop', - 'report', + 'website', + 'portal', ], 'description': """ Show cooperator information in the website portal. @@ -20,6 +19,5 @@ 'data': [ 'views/easy_my_coop_website_portal_templates.xml', ], - 'installable': False, - 'application': False, + 'installable': True, } diff --git a/easy_my_coop_website_portal/controllers/main.py b/easy_my_coop_website_portal/controllers/main.py index 1f154f9..aa52caa 100644 --- a/easy_my_coop_website_portal/controllers/main.py +++ b/easy_my_coop_website_portal/controllers/main.py @@ -8,39 +8,28 @@ from werkzeug.exceptions import Forbidden, NotFound -from openerp import http -from openerp.exceptions import AccessError, MissingError -from openerp.fields import Date -from openerp.http import request +from odoo import http +from odoo.exceptions import AccessError, MissingError +from odoo.fields import Date +from odoo.http import request -from openerp.addons.website_portal_v10.controllers.main import WebsiteAccount +from odoo.addons.portal.controllers.portal import CustomerPortal -class CooperatorWebsiteAccount(WebsiteAccount): +class CooperatorPortalAccount(CustomerPortal): def _prepare_portal_layout_values(self): - values = super(CooperatorWebsiteAccount, + values = super(CooperatorPortalAccount, self)._prepare_portal_layout_values() # We assume that commercial_partner_id always point to the # partner itself or to the linked partner. So there is no # need to check if the partner is a "contact" or not. - coop = request.env.user.partner_id.commercial_partner_id + partner = request.env.user.partner_id + coop = partner.commercial_partner_id coop_bank = request.env['res.partner.bank'].sudo().search( [('partner_id', 'in', [coop.id])], limit=1 ) - values.update({ - 'coop': coop, - 'coop_bank': coop_bank, - }) - return values - - @http.route() - def account(self): - """ Add Release Capital Request to main account page """ - response = super(CooperatorWebsiteAccount, self).account() - partner = request.env.user.partner_id - invoice_mgr = request.env['account.invoice'] capital_request_count = invoice_mgr.sudo().search_count([ ('partner_id', 'in', @@ -49,11 +38,12 @@ class CooperatorWebsiteAccount(WebsiteAccount): # Get only the release capital request ('release_capital_request', '=', True), ]) - - response.qcontext.update({ - 'capital_request_count': capital_request_count, + values.update({ + 'coop': coop, + 'coop_bank': coop_bank, + 'capital_request_count': capital_request_count }) - return response + return values @http.route( ['/my/release_capital_request', @@ -103,7 +93,7 @@ class CooperatorWebsiteAccount(WebsiteAccount): 'archive_groups': archive_groups, 'default_url': '/my/release_capital_request', }) - return request.website.render( + return request.render( "easy_my_coop_website_portal.portal_my_capital_releases", values ) @@ -125,7 +115,7 @@ class CooperatorWebsiteAccount(WebsiteAccount): except MissingError: raise NotFound() # Get the pdf - report_mgr = request.env['report'] + report_mgr = request.env.ref pdf = report_mgr.sudo().get_pdf( capital_request, 'easy_my_coop.theme_invoice_G002' @@ -133,18 +123,41 @@ class CooperatorWebsiteAccount(WebsiteAccount): filename = "Release Capital Request - %d" % capital_request.id return self._render_pdf(pdf, filename) - @http.route(['/my/cooperator_certificate/pdf'], - type='http', auth="user", website=True) - def get_cooperator_certificat(self, **kw): - """Render the cooperator certificate pdf of the current user""" - partner = request.env.user.partner_id - report_mgr = request.env['report'] - pdf = report_mgr.sudo().get_pdf( - partner, - 'easy_my_coop.cooperator_certificat_G001' - ) - filename = "Cooperator Certificate - %s" % partner.name - return self._render_pdf(pdf, filename) + @http.route(['/my/release_capital_request/'], + type='http', + auth="public", + website=True) + def get_release_capital_request(self, oid=-1, + access_token=None, + report_type=None, + download=False, + **kw): + try: + invoice_sudo = self._document_check_access('account.invoice', + oid, + access_token) + except (AccessError, MissingError): + return request.redirect('/my') + + if report_type in ('html', 'pdf', 'text'): + return self._show_report( + model=invoice_sudo, + report_type=report_type, + report_ref='easy_my_coop.theme_invoice_G002', + download=download) + +# @http.route(['/my/cooperator_certificate/pdf'], +# type='http', auth="user", website=True) +# def get_cooperator_certificat(self, **kw): +# """Render the cooperator certificate pdf of the current user""" +# partner = request.env.user.partner_id +# report_mgr = request.env['report'] +# pdf = report_mgr.sudo().get_pdf( +# partner, +# 'easy_my_coop.cooperator_certificat_G001' +# ) +# filename = "Cooperator Certificate - %s" % partner.name +# return self._render_pdf(pdf, filename) def _render_pdf(self, pdf, filename): """Render a http response for a pdf""" diff --git a/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml b/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml index 02fd5bf..54b8ff3 100644 --- a/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml +++ b/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml @@ -5,14 +5,14 @@ Copyright 2018 Rémy Taymans License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> - + - + + --> - + --> + + - - + From d652412e42fd748b30dfbb73df6318caee209120 Mon Sep 17 00:00:00 2001 From: houssine Date: Sat, 21 Dec 2019 18:52:59 +0100 Subject: [PATCH 02/13] [MIG] finalize migration. fix last glitches --- easy_my_coop_website_portal/__manifest__.py | 4 +- .../controllers/main.py | 133 +++++++++--------- .../easy_my_coop_website_portal_templates.xml | 73 ++-------- 3 files changed, 83 insertions(+), 127 deletions(-) diff --git a/easy_my_coop_website_portal/__manifest__.py b/easy_my_coop_website_portal/__manifest__.py index fe64fd9..95345cf 100644 --- a/easy_my_coop_website_portal/__manifest__.py +++ b/easy_my_coop_website_portal/__manifest__.py @@ -1,5 +1,6 @@ -# Copyright 2018-Coop IT Easy SCRLfs () +# Copyright 2018 Coop IT Easy SCRLfs () # - Rémy Taymans +# - Houssine Bakkali # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'Easy My Coop Website Portal', @@ -7,6 +8,7 @@ 'depends': [ 'easy_my_coop', 'website', + 'account', 'portal', ], 'description': """ diff --git a/easy_my_coop_website_portal/controllers/main.py b/easy_my_coop_website_portal/controllers/main.py index aa52caa..70f86d1 100644 --- a/easy_my_coop_website_portal/controllers/main.py +++ b/easy_my_coop_website_portal/controllers/main.py @@ -1,19 +1,17 @@ -# -*- coding: utf-8 -*- - -# Copyright 2015-2016 Odoo S.A. # Copyright 2016 Jairo Llopis -# Copyright 2017-2018 Rémy Taymans +# Copyright 2017-2018 Rémy Taymans +# Copyright 2019 Houssine Bakkali # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from werkzeug.exceptions import Forbidden, NotFound - from odoo import http from odoo.exceptions import AccessError, MissingError from odoo.fields import Date from odoo.http import request from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.addons.portal.controllers.portal import pager as portal_pager +from odoo.addons.payment.controllers.portal import PaymentProcessing class CooperatorPortalAccount(CustomerPortal): @@ -31,26 +29,47 @@ class CooperatorPortalAccount(CustomerPortal): limit=1 ) invoice_mgr = request.env['account.invoice'] - capital_request_count = invoice_mgr.sudo().search_count([ - ('partner_id', 'in', - [partner.commercial_partner_id.id]), + capital_request_count = invoice_mgr.search_count([ + # ('partner_id', 'in', [partner.commercial_partner_id.id]), ('state', 'in', ['open', 'paid', 'cancelled']), # Get only the release capital request ('release_capital_request', '=', True), ]) + + invoice_count = invoice_mgr.search_count([ + # ('partner_id', 'in', [partner.commercial_partner_id.id]), + ('release_capital_request', '=', False) + ]) + values.update({ 'coop': coop, 'coop_bank': coop_bank, - 'capital_request_count': capital_request_count + 'capital_request_count': capital_request_count, + 'invoice_count': invoice_count }) return values + @http.route(['/my/invoices', '/my/invoices/page/'], type='http', + auth="user", website=True) + def portal_my_invoices(self, page=1, date_begin=None, date_end=None, + sortby=None, **kw): + res = super(CooperatorPortalAccount, self).portal_my_invoices( + page, date_begin, date_end, sortby, **kw) + invoice_obj = request.env['account.invoice'] + qcontext = res.qcontext + if qcontext: + invoices = invoice_obj.search([('release_capital_request', '=', False)]) + invoice_count = len(invoices) + qcontext['invoices'] = invoices + qcontext['pager']['invoice_count'] = invoice_count + return res + @http.route( ['/my/release_capital_request', '/my/release_capital_request/page/'], type='http', auth="user", website=True) def portal_my_release_capital_request(self, page=1, date_begin=None, - date_end=None, **kw): + date_end=None, sortby=None, **kw): """Render a page with the list of release capital request. A release capital request is an invoice with a flag that tell if it's a capital request or not. @@ -75,9 +94,10 @@ class CooperatorPortalAccount(CustomerPortal): # count for pager capital_request_count = invoice_mgr.sudo().search_count(domain) # pager - pager = request.website.pager( + pager = portal_pager( url="/my/release_capital_request", - url_args={'date_begin': date_begin, 'date_end': date_end}, + url_args={'date_begin': date_begin, 'date_end': date_end, + 'sortby': sortby}, total=capital_request_count, page=page, step=self._items_per_page @@ -88,7 +108,7 @@ class CooperatorPortalAccount(CustomerPortal): values.update({ 'date': date_begin, 'capital_requests': invoices, - 'page_name': 'invoice', + 'page_name': 'Release request', 'pager': pager, 'archive_groups': archive_groups, 'default_url': '/my/release_capital_request', @@ -98,66 +118,43 @@ class CooperatorPortalAccount(CustomerPortal): values ) - @http.route(['/my/release_capital_request/pdf/'], - type='http', auth="user", website=True) - def get_release_capital_request(self, oid=-1, **kw): - """Render the pdf of the given release capital request""" - # Get the release capital request and raise an error if the user - # is not allowed to access to it or if the object is not found. - partner = request.env.user.partner_id - invoice_mgr = request.env['account.invoice'] - capital_request = invoice_mgr.sudo().browse(oid) - try: - if capital_request.partner_id != partner: - raise Forbidden() - except AccessError: - raise Forbidden() - except MissingError: - raise NotFound() - # Get the pdf - report_mgr = request.env.ref - pdf = report_mgr.sudo().get_pdf( - capital_request, - 'easy_my_coop.theme_invoice_G002' - ) - filename = "Release Capital Request - %d" % capital_request.id - return self._render_pdf(pdf, filename) - - @http.route(['/my/release_capital_request/'], - type='http', - auth="public", - website=True) - def get_release_capital_request(self, oid=-1, - access_token=None, - report_type=None, - download=False, - **kw): + @http.route(['/my/invoices/'], + type='http', auth="public", website=True) + def portal_my_invoice_detail(self, invoice_id, access_token=None, + report_type=None, download=False, **kw): try: invoice_sudo = self._document_check_access('account.invoice', - oid, + invoice_id, access_token) except (AccessError, MissingError): return request.redirect('/my') - + if invoice_sudo.release_capital_request: + report_ref = 'easy_my_coop.action_cooperator_invoices' + else: + report_ref = 'account.account_invoices' if report_type in ('html', 'pdf', 'text'): - return self._show_report( - model=invoice_sudo, - report_type=report_type, - report_ref='easy_my_coop.theme_invoice_G002', - download=download) - -# @http.route(['/my/cooperator_certificate/pdf'], -# type='http', auth="user", website=True) -# def get_cooperator_certificat(self, **kw): -# """Render the cooperator certificate pdf of the current user""" -# partner = request.env.user.partner_id -# report_mgr = request.env['report'] -# pdf = report_mgr.sudo().get_pdf( -# partner, -# 'easy_my_coop.cooperator_certificat_G001' -# ) -# filename = "Cooperator Certificate - %s" % partner.name -# return self._render_pdf(pdf, filename) + return self._show_report(model=invoice_sudo, + report_type=report_type, + report_ref=report_ref, + download=download) + + values = self._invoice_get_page_view_values(invoice_sudo, access_token, + **kw) + PaymentProcessing.remove_payment_transaction(invoice_sudo.transaction_ids) + return request.render("account.portal_invoice_page", values) + + @http.route(['/my/cooperator_certificate/pdf'], + type='http', auth="user", website=True) + def get_cooperator_certificat(self, **kw): + """Render the cooperator certificate pdf of the current user""" + partner = request.env.user.partner_id + report_mgr = request.env['report'] + pdf = report_mgr.sudo().get_pdf( + partner, + 'easy_my_coop.cooperator_certificat_G001' + ) + filename = "Cooperator Certificate - %s" % partner.name + return self._render_pdf(pdf, filename) def _render_pdf(self, pdf, filename): """Render a http response for a pdf""" diff --git a/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml b/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml index 54b8ff3..a3c2856 100644 --- a/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml +++ b/easy_my_coop_website_portal/views/easy_my_coop_website_portal_templates.xml @@ -1,8 +1,8 @@ @@ -90,61 +90,21 @@ - - + +
  • + Capital Request + Capital Request +
  • + +
    + - - - -