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
+
+
+