summaryrefslogtreecommitdiff
path: root/addons/purchase/controllers
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2017-08-21 13:16:24 +0200
committerThibault Delavallée <tde@odoo.com>2017-08-21 13:54:08 +0200
commitbcada50bc59dbc23b28f173dbda9677e6a435617 (patch)
treea28747154dd798f35f1d557696fcf71999ab9d3e /addons/purchase/controllers
parentab000006247738b954e8729b823b288046886e8e (diff)
[MOV] (website_portal_)purchase: move customer portal to purchase
Diffstat (limited to 'addons/purchase/controllers')
-rw-r--r--addons/purchase/controllers/__init__.py4
-rw-r--r--addons/purchase/controllers/portal.py110
2 files changed, 114 insertions, 0 deletions
diff --git a/addons/purchase/controllers/__init__.py b/addons/purchase/controllers/__init__.py
new file mode 100644
index 00000000000..903b755e71e
--- /dev/null
+++ b/addons/purchase/controllers/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import portal
diff --git a/addons/purchase/controllers/portal.py b/addons/purchase/controllers/portal.py
new file mode 100644
index 00000000000..2e8c77bbfa3
--- /dev/null
+++ b/addons/purchase/controllers/portal.py
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from collections import OrderedDict
+
+from odoo import http
+from odoo.exceptions import AccessError
+from odoo.http import request
+from odoo.tools import pycompat
+from odoo.tools.translate import _
+from odoo.addons.portal.controllers.portal import get_records_pager, pager as portal_pager, CustomerPortal
+
+
+class CustomerPortal(CustomerPortal):
+
+ def _prepare_portal_layout_values(self):
+ values = super(CustomerPortal, self)._prepare_portal_layout_values()
+ partner = request.env.user.partner_id
+ values['purchase_count'] = request.env['purchase.order'].search_count([
+ '|',
+ ('message_partner_ids', 'child_of', [partner.commercial_partner_id.id]),
+ ('partner_id', 'child_of', [partner.commercial_partner_id.id]),
+ ('state', 'in', ['purchase', 'done', 'cancel'])
+ ])
+ return values
+
+ @http.route(['/my/purchase', '/my/purchase/page/<int:page>'], type='http', auth="user", website=True)
+ def portal_my_purchase_orders(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw):
+ values = self._prepare_portal_layout_values()
+ partner = request.env.user.partner_id
+ PurchaseOrder = request.env['purchase.order']
+
+ domain = [
+ '|',
+ ('message_partner_ids', 'child_of', [partner.commercial_partner_id.id]),
+ ('partner_id', 'child_of', [partner.commercial_partner_id.id]),
+ ]
+
+ archive_groups = self._get_archive_groups('purchase.order', domain)
+ if date_begin and date_end:
+ domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)]
+
+ searchbar_sortings = {
+ 'date': {'label': _('Newest'), 'order': 'create_date desc, id desc'},
+ 'name': {'label': _('Name'), 'order': 'name asc, id asc'},
+ 'amount_total': {'label': _('Total'), 'order': 'amount_total desc, id desc'},
+ }
+ # default sort by value
+ if not sortby:
+ sortby = 'date'
+ order = searchbar_sortings[sortby]['order']
+
+ searchbar_filters = {
+ 'all': {'label': _('All'), 'domain': [('state', 'in', ['purchase', 'done', 'cancel'])]},
+ 'purchase': {'label': _('Purchase Order'), 'domain': [('state', '=', 'purchase')]},
+ 'cancel': {'label': _('Cancelled'), 'domain': [('state', '=', 'cancel')]},
+ 'done': {'label': _('Locked'), 'domain': [('state', '=', 'done')]},
+ }
+ # default filter by value
+ if not filterby:
+ filterby = 'all'
+ domain += searchbar_filters[filterby]['domain']
+
+ # count for pager
+ purchase_count = PurchaseOrder.search_count(domain)
+ # make pager
+ pager = portal_pager(
+ url="/my/purchase",
+ url_args={'date_begin': date_begin, 'date_end': date_end},
+ total=purchase_count,
+ page=page,
+ step=self._items_per_page
+ )
+ # search the purchase orders to display, according to the pager data
+ orders = PurchaseOrder.search(
+ domain,
+ order=order,
+ limit=self._items_per_page,
+ offset=pager['offset']
+ )
+ request.session['my_purchases_history'] = orders.ids[:100]
+
+ values.update({
+ 'date': date_begin,
+ 'orders': orders,
+ 'page_name': 'purchase',
+ 'pager': pager,
+ 'archive_groups': archive_groups,
+ 'searchbar_sortings': searchbar_sortings,
+ 'sortby': sortby,
+ 'searchbar_filters': OrderedDict(sorted(pycompat.items(searchbar_filters))),
+ 'filterby': filterby,
+ 'default_url': '/my/purchase',
+ })
+ return request.render("purchase.portal_my_purchase_orders", values)
+
+ @http.route(['/my/purchase/<int:order_id>'], type='http', auth="user", website=True)
+ def portal_my_purchase_order(self, order_id=None, **kw):
+ order = request.env['purchase.order'].browse(order_id)
+ try:
+ order.check_access_rights('read')
+ order.check_access_rule('read')
+ except AccessError:
+ return request.redirect('/my')
+ history = request.session.get('my_purchases_history', [])
+ values = {
+ 'order': order.sudo(),
+ }
+ values.update(get_records_pager(history, order))
+ return request.render("purchase.portal_my_purchase_order", values)