[IMP] website_portal*, website_project*, website_quote, website_blog: add record pager in portal

+ fix re-use websitue_url in get_access_action
This commit is contained in:
Jeremy Kersten
2017-02-24 08:51:26 +01:00
parent d89210e1fd
commit 83bfdb0d21
15 changed files with 92 additions and 19 deletions
+1 -1
View File
@@ -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,
}
+10
View File
@@ -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"]
@@ -245,4 +245,13 @@
</xpath>
</template>
<template id="record_pager" name="Portal Record Pager">
<t t-if='prev_record or next_record'>
<div class="ml8 record_pager btn-group btn-group-xs pull-right" role="group">
<a t-att-class="'btn btn-default %s' % ('disabled' if not prev_record else '')" t-att-href="prev_record or '#'" ><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
<a t-att-class="'btn btn-default %s' % ('disabled' if not next_record else '')" t-att-href="next_record or '#'" ><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
</div>
</t>
</template>
</odoo>
@@ -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
@@ -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
@@ -248,6 +248,7 @@
<div class="row">
<div class="col-md-12">
<h4>
<t t-call='website_portal.record_pager'/>
<t t-if="order.state == 'sent'">
Quotation
</t>
@@ -358,26 +359,26 @@
</div>
<div class="col-md-6">
<div class="row">
<div class="col-md-10 col-xs-8 text-right">
<div class="col-md-9 col-xs-8 text-right">
Untaxed Amount:
</div>
<div class="col-md-2 col-xs-4 text-right">
<div class="col-md-3 col-xs-4 text-right">
<span t-field="order.amount_untaxed" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</div>
</div>
<div class="row">
<div class="col-md-10 col-xs-8 text-right">
<div class="col-md-9 col-xs-8 text-right">
Taxes:
</div>
<div class="col-md-2 col-xs-4 text-right">
<div class="col-md-3 col-xs-4 text-right">
<span t-field="order.amount_tax" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</div>
</div>
<div class="row">
<div class="col-md-10 col-xs-8 text-right">
<div class="col-md-9 col-xs-8 text-right">
<strong>Total:</strong>
</div>
<div class="col-md-2 col-xs-4 text-right">
<div class="col-md-3 col-xs-4 text-right">
<strong><span t-field="order.amount_total" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/></strong>
</div>
</div>
+11 -3
View File
@@ -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/<model("project.project"):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/<int: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/<model("project.task"):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)
+10 -2
View File
@@ -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,
}
@@ -103,6 +103,7 @@
<div class="row">
<div class="col-md-12">
<h4>
<t t-call='website_portal.record_pager'/>
Project - <span t-field="project.name"/>
</h4>
</div>
@@ -213,6 +214,7 @@
<div class="row">
<div class="col-md-12">
<h4>
<t t-call='website_portal.record_pager'/>
Task - <span t-field="task.name"/>
<span t-field="task.stage_id.name" class="pull-right label label-info" title="Current stage of this task"/>
<a class="btn btn-info" t-att-href="'/web#return_label=Website&amp;model=project.task&amp;id=%s&amp;view_type=form' % (task.id)" groups="project.group_project_user">Edit Task</a>
@@ -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/<int:issue_id>'], 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)
@@ -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,
}
@@ -86,6 +86,7 @@
<div class="row">
<div class="col-md-12">
<h4>
<t t-call='website_portal.record_pager'/>
Issue <span t-field="issue.id"/> - <span t-field="issue.name"/>
<a class="btn btn-info" t-att-href="'/web#return_label=Website&amp;model=project.issue&amp;id=%s&amp;view_type=form' % (issue.id)" groups="project.group_project_user">Edit Issue</a>
<span t-field="issue.stage_id.name" class="pull-right label label-info" title="Current stage of this issue"/>
+3
View File
@@ -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)
@@ -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)
@@ -478,6 +478,9 @@
<li>
<a class="btn btn-info" target="_blank" t-att-href="'/quote/%s/%s' % (quotation.id,quotation.access_token)+'?pdf=True'">Print</a>
</li>
<li>
<t t-call='website_portal.record_pager'/>
</li>
</ul>
</div>
</h1>