summaryrefslogtreecommitdiff
path: root/addons/purchase/controllers
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/purchase/controllers
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/purchase/controllers')
-rw-r--r--addons/purchase/controllers/__init__.py4
-rw-r--r--addons/purchase/controllers/portal.py156
2 files changed, 160 insertions, 0 deletions
diff --git a/addons/purchase/controllers/__init__.py b/addons/purchase/controllers/__init__.py
new file mode 100644
index 00000000..903b755e
--- /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 00000000..82de7c58
--- /dev/null
+++ b/addons/purchase/controllers/portal.py
@@ -0,0 +1,156 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import base64
+from collections import OrderedDict
+from datetime import datetime
+
+from odoo import http
+from odoo.exceptions import AccessError, MissingError
+from odoo.http import request, Response
+from odoo.tools import image_process
+from odoo.tools.translate import _
+from odoo.addons.portal.controllers.portal import pager as portal_pager, CustomerPortal
+from odoo.addons.web.controllers.main import Binary
+
+
+class CustomerPortal(CustomerPortal):
+
+ def _prepare_home_portal_values(self, counters):
+ values = super()._prepare_home_portal_values(counters)
+ if 'purchase_count' in counters:
+ values['purchase_count'] = request.env['purchase.order'].search_count([
+ ('state', 'in', ['purchase', 'done', 'cancel'])
+ ]) if request.env['purchase.order'].check_access_rights('read', raise_exception=False) else 0
+ return values
+
+ def _purchase_order_get_page_view_values(self, order, access_token, **kwargs):
+ #
+ def resize_to_48(b64source):
+ if not b64source:
+ b64source = base64.b64encode(Binary.placeholder())
+ return image_process(b64source, size=(48, 48))
+
+ values = {
+ 'order': order,
+ 'resize_to_48': resize_to_48,
+ }
+ return self._get_page_view_values(order, access_token, values, 'my_purchases_history', False, **kwargs)
+
+ @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()
+ PurchaseOrder = request.env['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, 'sortby': sortby, 'filterby': filterby},
+ 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,
+ 'searchbar_sortings': searchbar_sortings,
+ 'sortby': sortby,
+ 'searchbar_filters': OrderedDict(sorted(searchbar_filters.items())),
+ '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="public", website=True)
+ def portal_my_purchase_order(self, order_id=None, access_token=None, **kw):
+ try:
+ order_sudo = self._document_check_access('purchase.order', order_id, access_token=access_token)
+ except (AccessError, MissingError):
+ return request.redirect('/my')
+
+ report_type = kw.get('report_type')
+ if report_type in ('html', 'pdf', 'text'):
+ return self._show_report(model=order_sudo, report_type=report_type, report_ref='purchase.action_report_purchase_order', download=kw.get('download'))
+
+ confirm_type = kw.get('confirm')
+ if confirm_type == 'reminder':
+ order_sudo.confirm_reminder_mail(kw.get('confirmed_date'))
+ if confirm_type == 'reception':
+ order_sudo._confirm_reception_mail()
+
+ values = self._purchase_order_get_page_view_values(order_sudo, access_token, **kw)
+ update_date = kw.get('update')
+ if order_sudo.company_id:
+ values['res_company'] = order_sudo.company_id
+ if update_date == 'True':
+ return request.render("purchase.portal_my_purchase_order_update_date", values)
+ return request.render("purchase.portal_my_purchase_order", values)
+
+ @http.route(['/my/purchase/<int:order_id>/update'], type='http', methods=['POST'], auth="public", website=True)
+ def portal_my_purchase_order_update_dates(self, order_id=None, access_token=None, **kw):
+ """User update scheduled date on purchase order line.
+ """
+ try:
+ order_sudo = self._document_check_access('purchase.order', order_id, access_token=access_token)
+ except (AccessError, MissingError):
+ return request.redirect('/my')
+
+ updated_dates = []
+ for id_str, date_str in kw.items():
+ try:
+ line_id = int(id_str)
+ except ValueError:
+ return request.redirect(order_sudo.get_portal_url())
+ line = order_sudo.order_line.filtered(lambda l: l.id == line_id)
+ if not line:
+ return request.redirect(order_sudo.get_portal_url())
+
+ try:
+ updated_date = line._convert_to_middle_of_day(datetime.strptime(date_str, '%Y-%m-%d'))
+ except ValueError:
+ continue
+
+ updated_dates.append((line, updated_date))
+
+ if updated_dates:
+ order_sudo._update_date_planned_for_lines(updated_dates)
+ return Response(status=204)