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 @@
-
-
-
+
+