diff --git a/project_report/report/project_revenue_custom_report3.py b/project_report/report/project_revenue_custom_report3.py index c74e078..ec3f1f1 100644 --- a/project_report/report/project_revenue_custom_report3.py +++ b/project_report/report/project_revenue_custom_report3.py @@ -25,7 +25,7 @@ class ProjectRevenueCustomReport3(models.Model): ('hours_no_limit', 'Total hours are budgeted without division to consultant'), ], string="Project Type", readonly=True) employee_id = fields.Many2one('hr.employee', string='Consultant', readonly=True) - #timesheet_sdatetime = fields.Datetime(string='Timesheet Start Time', readonly=True) + timesheet_sdatetime = fields.Datetime(string='Timesheet Start Time', readonly=True) unit_amount = fields.Float('Timesheet Hours', digits=(16, 2)) timesheet_cost = fields.Float('Hourly Cost', digits=(16, 2)) profit_per = fields.Float(string='Profit (%)', digits=(16, 2)) @@ -80,12 +80,12 @@ cons_data1 as ( PRO_EMP.project_id, PRO_EMP.employee_id, PRO_EMP.role, - PRO_EMP.budgeted_qty as budgeted_hours, PRO_EMP.cost as budgeted_revenue, + PRO_EMP.budgeted_qty as budgeted_hours, PRO_EMP.employee_price as cons_timesheet_cost, PRO_EMP.price_unit as cons_hourly_cost FROM project_sale_line_employee_map PRO_EMP - group by start_date, end_date, project_id, employee_id, role, budgeted_hours, budgeted_revenue, cons_timesheet_cost, cons_hourly_cost + group by start_date, end_date, project_id, employee_id, role, budgeted_revenue, budgeted_hours, cons_timesheet_cost, cons_hourly_cost ), tsheet_data1 as ( SELECT @@ -132,14 +132,15 @@ data1 as ( null::char as role, pro_data.tag_name, pro_data.partner_id, - --pro_tsheet.timesheet_id, drange_data1.employee_id, + AAL.id as timesheet_id, + AAL.start_datetime as timesheet_sdatetime, 0 as overall_budgeted_revenue, 0 as budgeted_revenue, 0 as budgeted_hours, 0 as overall_hourly_rate, - 0 AS pro_hourly_rate, sum(AAL.unit_amount) as unit_amount, + 0 AS pro_hourly_rate, ((sum(AAL.amount) * -1)/NULLIF(sum(AAL.unit_amount), 0)) as timesheet_cost, 0.0 AS actual_revenue, (sum(AAL.amount) * -1) as actual_cost, @@ -150,7 +151,7 @@ data1 as ( left join pro_data on pro_data.pproject_id = drange_data1.project_id left join tsheet_data1 on tsheet_data1.project_id=drange_data1.project_id and tsheet_data1.employee_id=drange_data1.employee_id left join account_analytic_line AAL on AAL.project_id=tsheet_data1.project_id and AAL.employee_id=tsheet_data1.employee_id - and AAL.start_datetime >= drange_data1.start_date and AAL.end_datetime <= drange_data1.end_date + and AAL.start_datetime::date >= drange_data1.start_date and AAL.end_datetime::date <= drange_data1.end_date where pro_data.pricing_type = 'fixed_rate' group by drange_data1.start_date, @@ -163,16 +164,15 @@ data1 as ( AAL.sub_project, pro_data.tag_name, pro_data.partner_id, - --pro_tsheet.timesheet_id, - drange_data1.employee_id - --AAL.unit_amount, - --AAL.amount + drange_data1.employee_id, + AAL.id, + AAL.start_datetime ), data2 as ( SELECT coalesce(min(pro_data.pro_sdate), min(AAL.start_datetime::date)) as start_date, coalesce(max(pro_data.pro_edate), max(AAL.end_datetime::date)) as end_date, - pro_data.pproject_id, + pro_data.pproject_id as project_id, pro_data.project_active, pro_data.project_type, pro_data.pricing_type, @@ -181,14 +181,15 @@ data2 as ( null::char as role, pro_data.tag_name, pro_data.partner_id, - --pro_tsheet.timesheet_id, null::int AS employee_id, + null::int As timesheet_id, + null::timestamp as timesheet_sdatetime, 0 as overall_budgeted_revenue, - 0 as budgeted_revenue, - 0 as budgeted_hours, + pro_data.budgeted_revenue, + pro_data.budgeted_hours, 0 as overall_hourly_rate, - pro_data.pro_hourly_rate, 0 as unit_amount, + 0.0 AS pro_hourly_rate, 0 as timesheet_cost, 0.0 AS actual_revenue, 0 as actual_cost, @@ -196,14 +197,9 @@ data2 as ( 0.0 AS profit_amt, 0.0 AS profit_per FROM pro_data - --left join pro_data on pro_data.pproject_id = drange_data1.project_id left join account_analytic_line AAL on AAL.project_id=pro_data.pproject_id WHERE pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_no_limit' group by - --drange_data1.start_date, - --drange_data1.end_date, - --pro_data.pro_sdate, - --pro_data.pro_edate, pro_data.pproject_id, pro_data.project_active, pro_data.project_type, @@ -212,9 +208,8 @@ data2 as ( sub_project, pro_data.tag_name, pro_data.partner_id, - --drange_data1.employee_id, - --pro_data.budgeted_revenue, - pro_data.pro_hourly_rate, + pro_data.budgeted_revenue, + pro_data.budgeted_hours, pro_data.expenses_amt UNION SELECT @@ -229,24 +224,25 @@ SELECT null::char as role, pro_data.tag_name, pro_data.partner_id, - --pro_tsheet.timesheet_id, drange_data1.employee_id, + AAL.id as timesheet_id, + AAL.start_datetime as timesheet_sdatetime, 0 as overall_budgeted_revenue, 0 as budgeted_revenue, 0 as budgeted_hours, 0 as overall_hourly_rate, - pro_data.pro_hourly_rate, AAL.unit_amount, + pro_data.pro_hourly_rate, ((AAL.amount * -1)/NULLIF(AAL.unit_amount, 0)) as timesheet_cost, (AAL.unit_amount * pro_data.pro_hourly_rate) AS actual_revenue, (AAL.amount * -1) as actual_cost, - pro_data.expenses_amt AS expenses_amt, - 0.0 AS profit_amt, - 0.0 AS profit_per + 0 AS expenses_amt, + ((AAL.unit_amount * pro_data.pro_hourly_rate) - (AAL.amount * -1)) AS profit_amt, + ((AAL.unit_amount * pro_data.pro_hourly_rate) - (AAL.amount * -1))/NULLIF((AAL.unit_amount * pro_data.pro_hourly_rate),0) AS profit_per FROM drange_data1 left join pro_data on pro_data.pproject_id = drange_data1.project_id left join account_analytic_line AAL on AAL.project_id=drange_data1.project_id and AAL.employee_id=drange_data1.employee_id - and AAL.start_datetime >= drange_data1.start_date and AAL.end_datetime <= drange_data1.end_date + and AAL.start_datetime::date >= drange_data1.start_date and AAL.end_datetime::date <= drange_data1.end_date WHERE pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_no_limit' group by drange_data1.start_date, @@ -262,55 +258,105 @@ SELECT pro_data.tag_name, pro_data.partner_id, drange_data1.employee_id, + AAL.id, + AAL.start_datetime, pro_data.pro_hourly_rate, aal.unit_amount, aal.amount, - --pro_data.budgeted_revenue, pro_data.budgeted_hours, pro_data.expenses_amt ), data3 as ( -SELECT - coalesce(min(pro_data.pro_sdate), min(AAL.start_datetime::date)) as start_date, - coalesce(max(pro_data.pro_edate), max(AAL.end_datetime::date)) as end_date, - pro_data.pproject_id, - pro_data.project_active, - pro_data.project_type, - pro_data.pricing_type, - pro_data.parent_project, - null::int as sub_project, - null::char as role, - pro_data.tag_name, - pro_data.partner_id, - null::int AS employee_id, - pro_data.budgeted_revenue as overall_budgeted_revenue, - 0 as budgeted_revenue, - 0 as budgeted_hours, - 0 as overall_hourly_rate, - pro_data.pro_hourly_rate, - 0 as unit_amount, - 0 as timesheet_cost, - 0.0 AS actual_revenue, - 0 as actual_cost, - pro_data.expenses_amt, - 0.0 AS profit_amt, - 0.0 AS profit_per - FROM pro_data - left join account_analytic_line AAL on AAL.project_id=pro_data.pproject_id - where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant' - group by - pro_data.pproject_id, - pro_data.project_active, - pro_data.project_type, - pro_data.pricing_type, - pro_data.parent_project, - --sub_project, - pro_data.tag_name, - pro_data.partner_id, - pro_data.budgeted_revenue, - pro_data.pro_hourly_rate, - pro_data.expenses_amt -UNION +SELECT + coalesce(min(pro_data.pro_sdate), min(AAL.start_datetime::date)) as start_date, + coalesce(max(pro_data.pro_edate), max(AAL.end_datetime::date)) as end_date, + pro_data.pproject_id as project_id, + pro_data.project_active, + pro_data.project_type, + pro_data.pricing_type, + pro_data.parent_project, + null::int as sub_project, + null::char as role, + pro_data.tag_name, + pro_data.partner_id, + null::int as employee_id, + null::int As timesheet_id, + null::timestamp as timesheet_sdatetime, + pro_data.budgeted_revenue AS overall_budgeted_revenue, + 0 as budgeted_revenue, + 0 as budgeted_hours, + pro_data.pro_hourly_rate AS overall_hourly_rate, + 0.0 as unit_amount, + 0.0 as pro_hourly_rate, + 0.0 as timesheet_cost, + 0.0 as actual_revenue, + 0.0 as actual_cost, + pro_data.expenses_amt, + 0.0 as profit_amt, + 0.0 as profit_per + FROM pro_data + left join account_analytic_line AAL on AAL.project_id=pro_data.pproject_id + where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant' + group by + pro_data.pproject_id, + pro_data.project_active, + pro_data.project_type, + pro_data.parent_project, + pro_data.budgeted_revenue, + pro_data.tag_name, + pro_data.pricing_type, + pro_data.partner_id, + pro_data.pro_hourly_rate, + pro_data.expenses_amt +UNION +SELECT + drange_data2.start_date, + drange_data2.end_date, + drange_data2.project_id, + pro_data.project_active, + pro_data.project_type, + pro_data.pricing_type, + pro_data.parent_project, + --AAL.sub_project, + null::int as sub_project, + cons_data1.role, + pro_data.tag_name, + pro_data.partner_id, + drange_data2.employee_id, + null::int As timesheet_id, + null::timestamp as timesheet_sdatetime, + 0 as overall_budgeted_revenue, + cons_data1.budgeted_revenue, + cons_data1.budgeted_hours, + 0 as overall_hourly_rate, + 0 as unit_amount, + 0 as pro_hourly_rate, + 0 as timesheet_cost, + 0 as actual_revenue, + 0 as actual_cost, + 0 as expenses_amt, + 0 as profit_amt, + 0 as profit_per + FROM drange_data2 + left join pro_data on pro_data.pproject_id = drange_data2.project_id + left join cons_data1 on cons_data1.project_id=drange_data2.project_id and cons_data1.employee_id=drange_data2.employee_id + and cons_data1.start_date >= drange_data2.start_date and cons_data1.end_date <= drange_data2.end_date + where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant' + group by + drange_data2.start_date, + drange_data2.end_date, + drange_data2.project_id, + drange_data2.employee_id, + pro_data.project_active, + pro_data.project_type, + pro_data.parent_project, + cons_data1.role, + cons_data1.budgeted_revenue, + cons_data1.budgeted_hours, + pro_data.tag_name, + pro_data.pricing_type, + pro_data.partner_id +UNION SELECT drange_data1.start_date, drange_data1.end_date, @@ -324,12 +370,14 @@ SELECT pro_data.tag_name, pro_data.partner_id, drange_data1.employee_id, + AAL.id as timesheet_id, + AAL.start_datetime as timesheet_sdatetime, 0 as overall_budgeted_revenue, 0 as budgeted_revenue, 0 as budgeted_hours, 0 as overall_hourly_rate, - 0 as pro_hourly_rate, AAL.unit_amount as unit_amount, + 0 as pro_hourly_rate, coalesce(((AAL.amount * -1)/NULLIF(AAL.unit_amount, 0)), cons_data1.cons_timesheet_cost) as timesheet_cost, (AAL.unit_amount * COALESCE(cons_data1.cons_hourly_cost, 0)) as actual_revenue, coalesce((AAL.amount * -1), cons_data1.cons_timesheet_cost, 0) as actual_cost, @@ -342,13 +390,15 @@ SELECT left join tsheet_data1 on tsheet_data1.project_id=drange_data1.project_id and tsheet_data1.employee_id=drange_data1.employee_id left join cons_data1 on cons_data1.project_id=drange_data1.project_id and cons_data1.employee_id=drange_data1.employee_id left join account_analytic_line AAL on AAL.project_id=tsheet_data1.project_id and AAL.employee_id=tsheet_data1.employee_id - and AAL.start_datetime >= drange_data1.start_date and AAL.end_datetime <= drange_data1.end_date + and AAL.start_datetime::date >= drange_data1.start_date and AAL.end_datetime::date <= drange_data1.end_date where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant' group by drange_data1.start_date, drange_data1.end_date, drange_data1.project_id, drange_data1.employee_id, + AAL.id, + AAL.start_datetime, pro_data.project_active, pro_data.project_type, pro_data.parent_project, @@ -378,14 +428,15 @@ invoice_data as (SELECT null::char as role, pro_data.tag_name, pro_data.partner_id, - --pro_tsheet.timesheet_id, invoice_date.employee_id, + null::int As timesheet_id, + null::timestamp as timesheet_sdatetime, 0 as overall_budgeted_revenue, 0 as budgeted_revenue, 0 as budgeted_hours, 0 as overall_hourly_rate, - 0 as pro_hourly_rate, 0 as unit_amount, + 0 as pro_hourly_rate, 0 as timesheet_cost, invoice_date.fixed_amount as actual_revenue, 0 as actual_cost, @@ -420,12 +471,14 @@ select tag_name, partner_id, employee_id, + timesheet_id, + timesheet_sdatetime, overall_budgeted_revenue, budgeted_revenue, budgeted_hours, overall_hourly_rate, - pro_hourly_rate, unit_amount, + pro_hourly_rate, timesheet_cost, actual_revenue, actual_cost, @@ -446,12 +499,14 @@ group by tag_name, partner_id, employee_id, + timesheet_id, + timesheet_sdatetime, overall_budgeted_revenue, budgeted_revenue, budgeted_hours, overall_hourly_rate, - pro_hourly_rate, unit_amount, + pro_hourly_rate, timesheet_cost, actual_revenue, actual_cost, diff --git a/project_report/report/project_revenue_custom_report3_views.xml b/project_report/report/project_revenue_custom_report3_views.xml index de236a4..c8dfd2b 100644 --- a/project_report/report/project_revenue_custom_report3_views.xml +++ b/project_report/report/project_revenue_custom_report3_views.xml @@ -8,17 +8,17 @@ - - - - - + + + + +