From af0578a8806d44e5340f12be323cd73d5e658715 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 28 Aug 2022 17:31:36 +0530 Subject: [PATCH] Report code and unused menu hidden --- cor_custom/models/analytic.py | 2 + .../report/project_hours_report_view.xml | 8 +- cor_custom/views/project_view.xml | 4 +- .../project_multi_budget_assign_view.xml | 4 +- project_report/__manifest__.py | 3 +- project_report/models/project.py | 11 + project_report/report/__init__.py | 1 + ...project_consultant_custom_report_views.xml | 4 +- .../report/project_revenue_custom_report3.py | 287 +++++++++++++++++- .../project_revenue_custom_report3_views.xml | 9 +- project_report/security/ir.model.access.csv | 2 +- project_report/views/project_view.xml | 9 +- 12 files changed, 311 insertions(+), 33 deletions(-) diff --git a/cor_custom/models/analytic.py b/cor_custom/models/analytic.py index 6c51f03..a1717b0 100755 --- a/cor_custom/models/analytic.py +++ b/cor_custom/models/analytic.py @@ -54,6 +54,8 @@ class AccountAnalyticLine(models.Model): sub_project = fields.Many2one('project.project', domain="[('is_sub_project', '=', True)]", string='Sub Project') active_project = fields.Boolean(related='project_id.active', store=True) + pricing_type = fields.Selection(related='project_id.pricing_type', store=True) + project_type= fields.Selection(related='project_id.project_type', store=True) @api.onchange('project_id') def _onchange_sub_project_id(self): diff --git a/cor_custom/report/project_hours_report_view.xml b/cor_custom/report/project_hours_report_view.xml index 460108f..69e77e0 100755 --- a/cor_custom/report/project_hours_report_view.xml +++ b/cor_custom/report/project_hours_report_view.xml @@ -108,11 +108,11 @@ - + groups="base.group_no_one,project.group_project_user"/>--> - + diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index 440b2d7..d709382 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -163,7 +163,7 @@ - + diff --git a/cor_custom/wizard/project_multi_budget_assign_view.xml b/cor_custom/wizard/project_multi_budget_assign_view.xml index 5211cdd..4a77a7e 100755 --- a/cor_custom/wizard/project_multi_budget_assign_view.xml +++ b/cor_custom/wizard/project_multi_budget_assign_view.xml @@ -36,7 +36,7 @@ - + diff --git a/project_report/__manifest__.py b/project_report/__manifest__.py index 902e0cd..fa53e1e 100755 --- a/project_report/__manifest__.py +++ b/project_report/__manifest__.py @@ -16,13 +16,14 @@ 'security/ir.model.access.csv', 'wizard/project_create_expenses_views.xml', 'views/assets.xml', - #'views/project_view.xml', + 'views/project_view.xml', 'report/project_budget_hrs_analysis_views.xml', 'report/project_budget_amt_analysis_views.xml', 'report/project_timeline_report_views.xml', 'report/project_timesheet_report_views.xml', 'report/project_revenue_custom_report_views.xml', 'report/project_revenue_custom_report2_views.xml', + 'report/project_revenue_custom_report3_views.xml', 'report/project_consultant_custom_report_views.xml', #'report/cor_project_report_views.xml', ], diff --git a/project_report/models/project.py b/project_report/models/project.py index fd3a4d8..4ffe15e 100755 --- a/project_report/models/project.py +++ b/project_report/models/project.py @@ -7,4 +7,15 @@ class Project(models.Model): _inherit = 'project.project' + def action_view_allocation_custom_report3(self): + action = self.env["ir.actions.actions"]._for_xml_id("project_report.project_revenue_custom_report3_action") + action['context'] = {'search_default_project_id': self.id, + 'search_default_project': 1, + 'search_default_group_employee': 1, + 'search_default_group_enddate': 1, + #'default_res_model': 'project.revenue.custom.report3' + } + return action + + diff --git a/project_report/report/__init__.py b/project_report/report/__init__.py index f1d2540..f5aa678 100755 --- a/project_report/report/__init__.py +++ b/project_report/report/__init__.py @@ -7,5 +7,6 @@ from . import project_timeline_report from . import project_timesheet_report from . import project_revenue_custom_report from . import project_revenue_custom_report2 +from . import project_revenue_custom_report3 from . import project_consultant_custom_report #from . import cor_project_report diff --git a/project_report/report/project_consultant_custom_report_views.xml b/project_report/report/project_consultant_custom_report_views.xml index e62272a..e4c8cf5 100755 --- a/project_report/report/project_consultant_custom_report_views.xml +++ b/project_report/report/project_consultant_custom_report_views.xml @@ -73,10 +73,10 @@ {'search_default_group_project': 1,'search_default_group_employee': 1} - + sequence="51"/>--> diff --git a/project_report/report/project_revenue_custom_report3.py b/project_report/report/project_revenue_custom_report3.py index 769d813..7c43ac0 100644 --- a/project_report/report/project_revenue_custom_report3.py +++ b/project_report/report/project_revenue_custom_report3.py @@ -55,44 +55,60 @@ with pro_tsheet as (SELECT date_trunc('month', max(AAL.end_datetime::date)) AS max, AAL.start_datetime::date as t_startdate, AAL.end_datetime::date as t_enddate, + PRO.date_start as pro_sdate, + PRO.date as pro_edate, + PRO.id as pproject_id, AAL.project_id as project_id, PRO.active as project_active, PRO.project_type, PRO.pricing_type, (select PRO.id from project_subproject_rel as PAR where PRO.id=PAR.project_id limit 1) as parent_project, + --CASE WHEN PRO.sub_project is not null then True else False END as is_sub_project, PRO.is_sub_project, AAL.sub_project as sub_project, STRING_AGG(distinct tag_master.name, ', ') as tag_name, PRO.partner_id AS partner_id, AAL.id as timesheet_id, + PRO.budgeted_revenue as budgeted_revenue, + PRO.budgeted_hours2 as budgeted_hours, PRO.expenses_amt, + pro.hourly_rate AS pro_hourly_rate, AAL.employee_id, AAL.unit_amount as unit_amount, - AAL.amount * -1 as actual_cost - FROM project_project PRO + (AAL.unit_amount * pro.hourly_rate) AS actual_revenue, + (AAL.amount * -1) as actual_cost + FROM project_project PRO LEFT JOIN account_analytic_account AA ON PRO.analytic_account_id = AA.id LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id AND AAL.project_id = PRO.id LEFT JOIN custom_project_tags_project_project_rel AS cus_pro_tag ON pro.id = cus_pro_tag.project_project_id LEFT JOIN custom_project_tags as tag_master ON tag_master.id = cus_pro_tag.custom_project_tags_id LEFT JOIN project_subproject_rel as sub_pro ON sub_pro.project_id = PRO.id - GROUP BY PRO.id, PRO.pricing_type, PRO.project_type, AAL.project_id, PRO.pricing_type, PRO.project_type, - PRO.is_sub_project, sub_pro.id, - AAL.id, AAL.employee_id, AAL.start_datetime::date, AAL.end_datetime::date, AAL.unit_amount, AAL.amount + GROUP BY PRO.id, AAL.start_datetime::date, AAL.end_datetime::date, AAL.project_id, PRO.active, + PRO.project_type, PRO.pricing_type, PRO.is_sub_project, AAL.sub_project, AAL.project_id, + PRO.partner_id, --sub_pro.id, + AAL.id, PRO.id, PRO.budgeted_revenue, PRO.budgeted_hours2, PRO.expenses_amt, + pro.hourly_rate, AAL.employee_id, AAL.unit_amount, AAL.amount ), input_data as (SELECT generate_series(min, max,'1 month'):: date AS start_date, (generate_series(min, max, '1 month'):: date + '1 month' :: interval - '1 day' :: interval):: date AS end_date, - project_id, employee_id - from pro_tsheet), + pro_tsheet.project_id, pro_tsheet.employee_id + from pro_tsheet), cons_data as ( -select PRO_EMP.start_date as cons_start_date, PRO_EMP.end_date as cons_end_date, +SELECT PRO_EMP.start_date as cons_start_date, PRO_EMP.end_date as cons_end_date, sum(PRO_EMP.price_unit) as price_unit, PRO_EMP.project_id, PRO_EMP.employee_id, - sum(PRO_EMP.employee_price) as cons_price - from project_sale_line_employee_map PRO_EMP + sum(PRO_EMP.employee_price) as cons_price, sum(PRO_EMP.cost) AS cons_budgeted_revenue, + sum(PRO_EMP.budgeted_qty) AS cons_budgeted_hours + from project_sale_line_employee_map PRO_EMP GROUP BY PRO_EMP.start_date, PRO_EMP.end_date, PRO_EMP.project_id, PRO_EMP.employee_id ), +invoice_date as ( + SELECT + date, + project_id, + (SELECT id FROM hr_employee WHERE LOWER(name)=LOWER('Fixed amount') limit 1) as employee_id, + fixed_amount from project_revenue_lines), fixed_rate as ( - select - ROW_NUMBER() OVER() as id, + SELECT input_data.start_date, input_data.end_date, input_data.project_id, @@ -112,12 +128,12 @@ fixed_rate as ( 0 as budgeted_hours, 0 as overall_hourly_rate, 0 AS pro_hourly_rate, - pro_tsheet.unit_amount, + pro_tsheet.unit_amount, ((pro_tsheet.actual_cost)/NULLIF(pro_tsheet.unit_amount, 0)) as timesheet_cost, 0.0 AS actual_revenue, pro_tsheet.actual_cost, 0.0 AS expenses_amt, - 0.0 - pro_tsheet.actual_cost AS profit_amt, + (0.0 - pro_tsheet.actual_cost) AS profit_amt, 0.0 AS profit_per from input_data left join pro_tsheet on pro_tsheet.project_id = input_data.project_id and pro_tsheet.employee_id = input_data.employee_id @@ -139,8 +155,247 @@ fixed_rate as ( input_data.employee_id, pro_tsheet.unit_amount, pro_tsheet.actual_cost - ) - select * from fixed_rate +), +cons_no_limit1 as (SELECT + coalesce(pro_tsheet.pro_sdate, pro_tsheet.t_startdate) as start_date, + coalesce(pro_tsheet.pro_edate, pro_tsheet.t_enddate) as end_date, + pro_tsheet.pproject_id, + pro_tsheet.project_active, + pro_tsheet.project_type, + pro_tsheet.pricing_type, + pro_tsheet.parent_project, + pro_tsheet.is_sub_project, + pro_tsheet.sub_project, + null::char as role, + pro_tsheet.tag_name, + pro_tsheet.partner_id, + null::int AS timesheet_id, + null::int AS employee_id, + 0 as overall_budgeted_revenue, + pro_tsheet.budgeted_revenue, + pro_tsheet.budgeted_hours, + 0 as overall_hourly_rate, + 0 as pro_hourly_rate, + 0 as unit_amount, + 0 as timesheet_cost, + 0 AS actual_revenue, + 0 AS actual_cost, + pro_tsheet.expenses_amt AS expenses_amt, + 0 AS profit_amt, + 0 AS profit_per + from input_data + left join pro_tsheet on pro_tsheet.project_id = input_data.project_id and pro_tsheet.employee_id = input_data.employee_id + and coalesce(pro_tsheet.pro_sdate, pro_tsheet.min) >= input_data.start_date and pro_tsheet.t_enddate <= coalesce(pro_tsheet.pro_edate, pro_tsheet.max) + WHERE pro_tsheet.pricing_type='employee_rate' and pro_tsheet.project_type='hours_no_limit' + group by + pro_tsheet.pro_sdate, + pro_tsheet.pro_edate, + pro_tsheet.t_startdate, + pro_tsheet.t_enddate, + pro_tsheet.pproject_id, + pro_tsheet.project_active, + pro_tsheet.project_type, + pro_tsheet.pricing_type, + pro_tsheet.parent_project, + pro_tsheet.is_sub_project, + pro_tsheet.sub_project, + pro_tsheet.tag_name, + pro_tsheet.partner_id, + pro_tsheet.budgeted_revenue, + pro_tsheet.budgeted_hours, + pro_tsheet.unit_amount, + pro_tsheet.pro_hourly_rate, + pro_tsheet.expenses_amt + ), +cons_no_limit2 as ( + SELECT + input_data.start_date, + input_data.end_date, + input_data.project_id, + pro_tsheet.project_active, + pro_tsheet.project_type, + pro_tsheet.pricing_type, + pro_tsheet.parent_project, + pro_tsheet.is_sub_project, + pro_tsheet.sub_project, + null::char as role, + pro_tsheet.tag_name, + pro_tsheet.partner_id, + pro_tsheet.timesheet_id, + input_data.employee_id, + 0 as overall_budgeted_revenue, + pro_tsheet.budgeted_revenue, + pro_tsheet.budgeted_hours, + 0 as overall_hourly_rate, + pro_tsheet.pro_hourly_rate, + pro_tsheet.unit_amount, + ((pro_tsheet.actual_cost)/NULLIF(pro_tsheet.unit_amount, 0)) as timesheet_cost, + pro_tsheet.actual_revenue AS actual_revenue, + pro_tsheet.actual_cost, + pro_tsheet.expenses_amt AS expenses_amt, + 0 AS profit_amt, + 0 AS profit_per + from input_data + left join pro_tsheet on pro_tsheet.project_id = input_data.project_id and pro_tsheet.employee_id = input_data.employee_id + and pro_tsheet.t_startdate >= input_data.start_date and pro_tsheet.t_enddate <= input_data.end_date + WHERE pro_tsheet.pricing_type='employee_rate' and pro_tsheet.project_type='hours_no_limit' + group by + input_data.start_date, + input_data.end_date, + input_data.project_id, + pro_tsheet.project_active, + pro_tsheet.project_type, + pro_tsheet.pricing_type, + pro_tsheet.parent_project, + pro_tsheet.is_sub_project, + pro_tsheet.sub_project, + pro_tsheet.tag_name, + pro_tsheet.partner_id, + pro_tsheet.timesheet_id, + input_data.employee_id, + pro_tsheet.budgeted_revenue, + pro_tsheet.budgeted_hours, + input_data.employee_id, + pro_tsheet.unit_amount, + pro_tsheet.pro_hourly_rate, + pro_tsheet.actual_cost, + pro_tsheet.actual_revenue, + pro_tsheet.actual_cost, + pro_tsheet.expenses_amt +), +hrs_in_cons as ( + SELECT + input_data.start_date, + input_data.end_date, + input_data.project_id, + pro_tsheet.project_active, + pro_tsheet.project_type, + pro_tsheet.pricing_type, + pro_tsheet.parent_project, + pro_tsheet.is_sub_project, + pro_tsheet.sub_project, + null::char as role, + pro_tsheet.tag_name, + pro_tsheet.partner_id, + pro_tsheet.timesheet_id, + input_data.employee_id, + 0 as overall_budgeted_revenue, + coalesce(cons_data.cons_budgeted_revenue, 0) as budgeted_revenue, + coalesce(cons_data.cons_budgeted_hours, 0) as budgeted_hours, + 0 as overall_hourly_rate, + pro_tsheet.pro_hourly_rate, + pro_tsheet.unit_amount, + COALESCE(cons_data.cons_price, (pro_tsheet.unit_amount * cons_data.cons_price), 0) as timesheet_cost, + COALESCE((pro_tsheet.unit_amount * cons_data.price_unit), 0) as actual_revenue, + COALESCE(pro_tsheet.actual_cost, cons_data.cons_price, 0) as actual_cost, + 0 AS expenses_amt, + 0 AS profit_amt, + 0 AS profit_per + from input_data + left join pro_tsheet on pro_tsheet.project_id = input_data.project_id and pro_tsheet.employee_id = input_data.employee_id + and pro_tsheet.t_startdate >= input_data.start_date and pro_tsheet.t_enddate <= input_data.end_date + left join cons_data on cons_data.project_id = input_data.project_id and cons_data.employee_id = input_data.employee_id + and cons_data.cons_start_date >= input_data.start_date and cons_data.cons_end_date <= input_data.end_date + WHERE pro_tsheet.pricing_type='employee_rate' and pro_tsheet.project_type='hours_in_consultant' + --and budgeted_hours>0 and pro_tsheet.unit_amount > 0 + group by + input_data.start_date, + input_data.end_date, + input_data.project_id, + pro_tsheet.project_active, + pro_tsheet.project_type, + pro_tsheet.pricing_type, + pro_tsheet.parent_project, + pro_tsheet.is_sub_project, + pro_tsheet.sub_project, + pro_tsheet.tag_name, + pro_tsheet.partner_id, + pro_tsheet.timesheet_id, + input_data.employee_id, + cons_data.cons_budgeted_revenue, + cons_data.cons_budgeted_hours, + input_data.employee_id, + pro_tsheet.unit_amount, + pro_tsheet.pro_hourly_rate, + cons_data.cons_price, + cons_data.price_unit, + pro_tsheet.actual_cost, + pro_tsheet.actual_revenue, + pro_tsheet.actual_cost, + pro_tsheet.expenses_amt +), +invoice_data as (SELECT + invoice_date.date as start_date, + invoice_date.date as end_date, + --null::int as timesheet_id, + invoice_date.project_id, + pro_tsheet.project_active, + pro_tsheet.project_type, + pro_tsheet.pricing_type, + pro_tsheet.parent_project, + pro_tsheet.is_sub_project, + pro_tsheet.sub_project, + null::char as role, + pro_tsheet.tag_name, + pro_tsheet.partner_id, + pro_tsheet.timesheet_id, + invoice_date.employee_id, + 0 as overall_budgeted_revenue, + 0 as budgeted_revenue, + pro_tsheet.budgeted_hours, + 0 as overall_hourly_rate, + 0 as pro_hourly_rate, + 0 as unit_amount, + 0 as timesheet_cost, + invoice_date.fixed_amount as actual_revenue, + 0 as actual_cost, + 0.0 AS expenses_amt, + 0.0 AS profit_amt, + 0.0 AS profit_per + from invoice_date + left join pro_tsheet on pro_tsheet.project_id = invoice_date.project_id and pro_tsheet.employee_id = invoice_date.employee_id + left join input_data on input_data.project_id = invoice_date.project_id and input_data.employee_id = invoice_date.employee_id + and invoice_date.date >= input_data.start_date and invoice_date.date <= input_data.end_date), +final_res as ( + select * from fixed_rate + UNION + select * from cons_no_limit1 + UNION + select * from cons_no_limit2 + UNION + select * from hrs_in_cons + UNION + select * from invoice_data +) + SELECT + ROW_NUMBER() OVER() as id, + start_date, + end_date, + project_id, + project_active, + project_type, + pricing_type, + parent_project, + is_sub_project, + sub_project, + role, + tag_name, + partner_id, + timesheet_id, + employee_id, + overall_budgeted_revenue, + budgeted_revenue, + budgeted_hours, + overall_hourly_rate, + pro_hourly_rate, + unit_amount, + timesheet_cost, + actual_revenue, + actual_cost, + expenses_amt, + profit_amt, + profit_per + from final_res )""" % (self._table,)) @api.model diff --git a/project_report/report/project_revenue_custom_report3_views.xml b/project_report/report/project_revenue_custom_report3_views.xml index f5d7fd1..9f745db 100644 --- a/project_report/report/project_revenue_custom_report3_views.xml +++ b/project_report/report/project_revenue_custom_report3_views.xml @@ -77,17 +77,16 @@ - - - + +