summaryrefslogtreecommitdiff
path: root/addons/sale_timesheet/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/sale_timesheet/controllers
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/sale_timesheet/controllers')
-rw-r--r--addons/sale_timesheet/controllers/__init__.py4
-rw-r--r--addons/sale_timesheet/controllers/portal.py83
2 files changed, 87 insertions, 0 deletions
diff --git a/addons/sale_timesheet/controllers/__init__.py b/addons/sale_timesheet/controllers/__init__.py
new file mode 100644
index 00000000..903b755e
--- /dev/null
+++ b/addons/sale_timesheet/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/sale_timesheet/controllers/portal.py b/addons/sale_timesheet/controllers/portal.py
new file mode 100644
index 00000000..7d13914d
--- /dev/null
+++ b/addons/sale_timesheet/controllers/portal.py
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import http, _
+from odoo.http import request
+from odoo.osv import expression
+
+from odoo.addons.account.controllers import portal
+from odoo.addons.hr_timesheet.controllers.portal import TimesheetCustomerPortal
+
+
+class PortalAccount(portal.PortalAccount):
+
+ def _invoice_get_page_view_values(self, invoice, access_token, **kwargs):
+ values = super(PortalAccount, self)._invoice_get_page_view_values(invoice, access_token, **kwargs)
+ domain = request.env['account.analytic.line']._timesheet_get_portal_domain()
+ domain = expression.AND([
+ domain,
+ request.env['account.analytic.line']._timesheet_get_sale_domain(
+ invoice.mapped('line_ids.sale_line_ids'),
+ request.env['account.move'].browse([invoice.id])
+ )
+ ])
+ values['timesheets'] = request.env['account.analytic.line'].sudo().search(domain)
+ values['is_uom_day'] = request.env['account.analytic.line'].sudo()._is_timesheet_encode_uom_day()
+ return values
+
+
+class CustomerPortal(portal.CustomerPortal):
+ def _order_get_page_view_values(self, order, access_token, **kwargs):
+ values = super(CustomerPortal, self)._order_get_page_view_values(order, access_token, **kwargs)
+ domain = request.env['account.analytic.line']._timesheet_get_portal_domain()
+ domain = expression.AND([
+ domain,
+ request.env['account.analytic.line']._timesheet_get_sale_domain(
+ order.mapped('order_line'),
+ order.invoice_ids
+ )
+ ])
+ values['timesheets'] = request.env['account.analytic.line'].sudo().search(domain)
+ values['is_uom_day'] = request.env['account.analytic.line'].sudo()._is_timesheet_encode_uom_day()
+ return values
+
+
+class SaleTimesheetCustomerPortal(TimesheetCustomerPortal):
+
+ def _get_searchbar_inputs(self):
+ searchbar_inputs = super()._get_searchbar_inputs()
+ searchbar_inputs.update(
+ sol={'input': 'sol', 'label': _('Search in Sales Order Item')},
+ sol_id={'input': 'sol_id', 'label': _('Search in Sales Order Item ID')},
+ invoice={'input': 'invoice_id', 'label': _('Search in Invoice ID')})
+ return searchbar_inputs
+
+ def _get_searchbar_groupby(self):
+ searchbar_groupby = super()._get_searchbar_groupby()
+ searchbar_groupby.update(sol={'input': 'sol', 'label': _('Sales Order Item')})
+ return searchbar_groupby
+
+ def _get_search_domain(self, search_in, search):
+ search_domain = super()._get_search_domain(search_in, search)
+ if search_in in ('sol', 'all'):
+ search_domain = expression.OR([search_domain, [('so_line', 'ilike', search)]])
+ if search_in in ('sol_id', 'invoice_id'):
+ search = int(search) if search.isdigit() else 0
+ if search_in == 'sol_id':
+ search_domain = expression.OR([search_domain, [('so_line.id', '=', search)]])
+ if search_in == 'invoice_id':
+ invoice = request.env['account.move'].browse(search)
+ domain = request.env['account.analytic.line']._timesheet_get_sale_domain(invoice.mapped('invoice_line_ids.sale_line_ids'), invoice)
+ search_domain = expression.OR([search_domain, domain])
+ return search_domain
+
+ def _get_groupby_mapping(self):
+ groupby_mapping = super()._get_groupby_mapping()
+ groupby_mapping.update(sol='so_line')
+ return groupby_mapping
+
+ @http.route(['/my/timesheets', '/my/timesheets/page/<int:page>'], type='http', auth="user", website=True)
+ def portal_my_timesheets(self, page=1, sortby=None, filterby=None, search=None, search_in='all', groupby='sol', **kw):
+ if search and search_in and search_in in ('sol_id', 'invoice_id') and not search.isdigit():
+ search = '0'
+ return super().portal_my_timesheets(page, sortby, filterby, search, search_in, groupby, **kw)