diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py index 46e90fe4cd7..8bc2c40b9b1 100644 --- a/addons/website_blog/models/website_blog.py +++ b/addons/website_blog/models/website_blog.py @@ -223,7 +223,7 @@ class BlogPost(models.Model): return super(BlogPost, self).get_access_action() return { 'type': 'ir.actions.act_url', - 'url': '/blog/%s/post/%s' % (self.blog_id.id, self.id), + 'url': self.url, 'target': 'self', 'res_id': self.id, } diff --git a/addons/website_portal/controllers/main.py b/addons/website_portal/controllers/main.py index 92876706d0d..1912dae43c7 100644 --- a/addons/website_portal/controllers/main.py +++ b/addons/website_portal/controllers/main.py @@ -9,6 +9,16 @@ from odoo.tools.translate import _ from odoo.fields import Date +def get_records_pager(ids, current): + if current.id in ids: + idx = ids.index(current.id) + return { + 'prev_record': idx != 0 and current.browse(ids[idx - 1]).website_url, + 'next_record': idx < len(ids) - 1 and current.browse(ids[idx + 1]).website_url + } + return {} + + class website_account(http.Controller): MANDATORY_BILLING_FIELDS = ["name", "phone", "email", "street", "city", "country_id"] diff --git a/addons/website_portal/views/website_portal_templates.xml b/addons/website_portal/views/website_portal_templates.xml index cc6005e5640..850d3d2430c 100644 --- a/addons/website_portal/views/website_portal_templates.xml +++ b/addons/website_portal/views/website_portal_templates.xml @@ -245,4 +245,13 @@ + + diff --git a/addons/website_portal_sale/controllers/main.py b/addons/website_portal_sale/controllers/main.py index e421a9ce8b0..8e753625c8c 100644 --- a/addons/website_portal_sale/controllers/main.py +++ b/addons/website_portal_sale/controllers/main.py @@ -5,7 +5,7 @@ from odoo import http, _ from odoo.exceptions import AccessError from odoo.http import request -from odoo.addons.website_portal.controllers.main import website_account +from odoo.addons.website_portal.controllers.main import website_account, get_records_pager class website_account(website_account): @@ -80,6 +80,7 @@ class website_account(website_account): ) # search the count to display, according to the pager data quotations = SaleOrder.search(domain, order=sort_order, limit=self._items_per_page, offset=pager['offset']) + request.session['my_quotes_history'] = quotations.ids[:100] values.update({ 'date': date_begin, @@ -129,6 +130,7 @@ class website_account(website_account): ) # content according to pager and archive selected orders = SaleOrder.search(domain, order=sort_order, limit=self._items_per_page, offset=pager['offset']) + request.session['my_orders_history'] = orders.ids[:100] values.update({ 'date': date_begin, @@ -151,10 +153,14 @@ class website_account(website_account): except AccessError: return request.render("website.403") order_invoice_lines = {il.product_id.id: il.invoice_id for il in order.invoice_ids.mapped('invoice_line_ids')} - return request.render("website_portal_sale.orders_followup", { + history = request.session.get('my_orders_history', []) + + values = { 'order': order.sudo(), 'order_invoice_lines': order_invoice_lines, - }) + } + values.update(get_records_pager(history, order)) + return request.render("website_portal_sale.orders_followup", values) # # Invoices diff --git a/addons/website_portal_sale/models/sale_order.py b/addons/website_portal_sale/models/sale_order.py index c0d59665fa9..8ec2592ab8d 100644 --- a/addons/website_portal_sale/models/sale_order.py +++ b/addons/website_portal_sale/models/sale_order.py @@ -8,6 +8,12 @@ class SaleOrder(models.Model): _inherit = 'sale.order' + website_url = fields.Char('Website URL', compute='_website_url', help='The full URL to access the document through the website.') + + def _website_url(self): + for so in self: + so.website_url = '/my/orders/%s' % (so.id) + @api.multi def get_access_action(self): """ Instead of the classic form view, redirect to the online quote for diff --git a/addons/website_portal_sale/views/website_portal_sale_templates.xml b/addons/website_portal_sale/views/website_portal_sale_templates.xml index b32da6df056..63e3ffef2d7 100644 --- a/addons/website_portal_sale/views/website_portal_sale_templates.xml +++ b/addons/website_portal_sale/views/website_portal_sale_templates.xml @@ -248,6 +248,7 @@

+ Quotation @@ -358,26 +359,26 @@

-
+
Untaxed Amount:
-
+
-
+
Taxes:
-
+
-
+
Total:
-
+
diff --git a/addons/website_project/controllers/main.py b/addons/website_project/controllers/main.py index cc6271ad4a8..ed82ff3d63f 100644 --- a/addons/website_project/controllers/main.py +++ b/addons/website_project/controllers/main.py @@ -6,7 +6,7 @@ from collections import OrderedDict from odoo import http, _ from odoo.http import request -from odoo.addons.website_portal.controllers.main import website_account +from odoo.addons.website_portal.controllers.main import website_account, get_records_pager class WebsiteAccount(website_account): @@ -51,6 +51,7 @@ class WebsiteAccount(website_account): # content according to pager and archive selected projects = Project.search(domain, order=order, limit=self._items_per_page, offset=pager['offset']) + request.session['my_projects_history'] = projects.ids[:100] values.update({ 'date': date_begin, @@ -67,7 +68,10 @@ class WebsiteAccount(website_account): @http.route(['/my/project/'], type='http', auth="user", website=True) def my_project(self, project=None, **kw): - return request.render("website_project.my_project", {'project': project}) + vals = {'project': project, } + history = request.session.get('my_projects_history', []) + vals.update(get_records_pager(history, project)) + return request.render("website_project.my_project", vals) @http.route(['/my/tasks', '/my/tasks/page/'], type='http', auth="user", website=True) def my_tasks(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw): @@ -116,6 +120,7 @@ class WebsiteAccount(website_account): ) # content according to pager and archive selected tasks = request.env['project.task'].search(domain, order=order, limit=self._items_per_page, offset=pager['offset']) + request.session['my_tasks_history'] = tasks.ids[:100] values.update({ 'date': date_begin, @@ -135,4 +140,7 @@ class WebsiteAccount(website_account): @http.route(['/my/task/'], type='http', auth="user", website=True) def my_task(self, task=None, **kw): - return request.render("website_project.my_task", {'task': task, 'user': request.env.user}) + vals = {'task': task, 'user': request.env.user} + history = request.session.get('my_tasks_history', []) + vals.update(get_records_pager(history, task)) + return request.render("website_project.my_task", vals) diff --git a/addons/website_project/models/project.py b/addons/website_project/models/project.py index 450e9de178d..47c03e34540 100644 --- a/addons/website_project/models/project.py +++ b/addons/website_project/models/project.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, exceptions, models +from odoo import api, exceptions, models, fields +from odoo.addons.website.models.website import slug + class Project(models.Model): _inherit = ['project.project'] @@ -38,6 +40,12 @@ class Project(models.Model): class Task(models.Model): _inherit = ['project.task'] + website_url = fields.Char('Website URL', compute='_compute_website_url', help='The full URL to access the document through the website.') + + def _compute_website_url(self): + for task in self: + task.website_url = '/my/task/%s' % task.id + @api.multi def get_access_action(self): """ Instead of the classic form view, redirect to website for portal users @@ -51,7 +59,7 @@ class Task(models.Model): else: return { 'type': 'ir.actions.act_url', - 'url': '/my/task/%s' % self.id, + 'url': self.website_url, 'target': 'self', 'res_id': self.id, } diff --git a/addons/website_project/views/project_templates.xml b/addons/website_project/views/project_templates.xml index 2052c80be50..a7e527d9f5a 100644 --- a/addons/website_project/views/project_templates.xml +++ b/addons/website_project/views/project_templates.xml @@ -103,6 +103,7 @@

+ Project -

@@ -213,6 +214,7 @@

+ Task - Edit Task diff --git a/addons/website_project_issue/controllers/main.py b/addons/website_project_issue/controllers/main.py index 179d8b301c4..715c83e30eb 100644 --- a/addons/website_project_issue/controllers/main.py +++ b/addons/website_project_issue/controllers/main.py @@ -4,7 +4,7 @@ from collections import OrderedDict from odoo import http, _ -from odoo.addons.website_portal.controllers.main import website_account +from odoo.addons.website_portal.controllers.main import website_account, get_records_pager from odoo.http import request @@ -70,6 +70,7 @@ class WebsiteAccount(website_account): ) # content according to pager and archive selected project_issues = request.env['project.issue'].search(domain, order=order, limit=self._items_per_page, offset=pager['offset']) + request.session['my_issues_history'] = project_issues.ids[:100] values.update({ 'date': date_begin, @@ -90,4 +91,7 @@ class WebsiteAccount(website_account): @http.route(['/my/issues/'], type='http', auth="user", website=True) def my_issues_issue(self, issue_id=None, **kw): issue = request.env['project.issue'].browse(issue_id) - return request.render("website_project_issue.my_issues_issue", {'issue': issue}) + vals = {'issue': issue} + history = request.session.get('my_issues_history', []) + vals.update(get_records_pager(history, issue)) + return request.render("website_project_issue.my_issues_issue", vals) diff --git a/addons/website_project_issue/models/project_issue.py b/addons/website_project_issue/models/project_issue.py index d6d8916026a..24eef83c905 100644 --- a/addons/website_project_issue/models/project_issue.py +++ b/addons/website_project_issue/models/project_issue.py @@ -1,13 +1,19 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, exceptions, models, _ +from odoo import api, exceptions, models, fields class Issue(models.Model): _name = "project.issue" _inherit = ['project.issue'] + website_url = fields.Char('Website URL', compute='_compute_website_url', help='The full URL to access the document through the website.') + + def _compute_website_url(self): + for issue in self: + issue.website_url = '/my/issues/%s' % issue.id + @api.multi def get_access_action(self): """ Instead of the classic form view, redirect to website for portal users @@ -21,7 +27,7 @@ class Issue(models.Model): else: return { 'type': 'ir.actions.act_url', - 'url': '/my/issues/%s' % self.id, + 'url': self.website_url, 'target': 'self', 'res_id': self.id, } diff --git a/addons/website_project_issue/views/project_issue_templates.xml b/addons/website_project_issue/views/project_issue_templates.xml index 1205709d967..ff214578126 100644 --- a/addons/website_project_issue/views/project_issue_templates.xml +++ b/addons/website_project_issue/views/project_issue_templates.xml @@ -86,6 +86,7 @@

+ Issue - Edit Issue diff --git a/addons/website_quote/controllers/main.py b/addons/website_quote/controllers/main.py index 1d151ee05a6..6d673b6f2f6 100644 --- a/addons/website_quote/controllers/main.py +++ b/addons/website_quote/controllers/main.py @@ -6,6 +6,7 @@ import werkzeug from odoo import fields, http, _ from odoo.http import request from odoo.addons.website_mail.controllers.main import _message_post_helper +from odoo.addons.website_portal.controllers.main import get_records_pager class sale_quote(http.Controller): @@ -76,6 +77,8 @@ class sale_quote(http.Controller): 'alias_usage': _('If we store your payment information on our server, subscription payments will be made automatically.'), 'partner_id': Order.partner_id.id, }) + history = request.session.get('my_quotes_history', []) + values.update(get_records_pager(history, Order)) return request.render('website_quote.so_quotation', values) @http.route(['/quote/accept'], type='json', auth="public", website=True) diff --git a/addons/website_quote/models/sale_order.py b/addons/website_quote/models/sale_order.py index 005efa6fa66..f575078d695 100644 --- a/addons/website_quote/models/sale_order.py +++ b/addons/website_quote/models/sale_order.py @@ -46,6 +46,12 @@ class SaleOrderLine(models.Model): class SaleOrder(models.Model): _inherit = 'sale.order' + def _website_url(self): + super(SaleOrder, self)._website_url() + for so in self: + if so.state not in ['sale', 'done']: + so.website_url = '/quote/%s' % (so.id) + def _get_default_template_id(self): return self.env.ref('website_quote.website_quote_template_default', raise_if_not_found=False) diff --git a/addons/website_quote/views/website_quote_templates.xml b/addons/website_quote/views/website_quote_templates.xml index a709837d14f..e5e8df5c62c 100644 --- a/addons/website_quote/views/website_quote_templates.xml +++ b/addons/website_quote/views/website_quote_templates.xml @@ -478,6 +478,9 @@
  • Print
  • +
  • + +