report and pro validation if stat updated
This commit is contained in:
parent
51024ef211
commit
88656c33e8
|
@ -465,7 +465,7 @@ class InheritProjectProductEmployeeMap(models.Model):
|
|||
# self.end_date = self.start_date + relativedelta.relativedelta(months=1) - relativedelta.relativedelta(days=1)
|
||||
if self.start_date and self.end_date and (self.start_date > self.end_date):
|
||||
raise AccessError('End date could not be greater than start date')
|
||||
if self.project_id:
|
||||
if self.project_id and self.project_id.date_start:
|
||||
if self.start_date and not self.project_id.date_start <= self.start_date <= self.project_id.date:
|
||||
raise AccessError(_('Allocation Start date must be between %s to %s') % (
|
||||
self.project_id.date_start.strftime('%d-%b-%Y'), self.project_id.date.strftime('%d-%b-%Y')))
|
||||
|
|
|
@ -168,7 +168,8 @@ data1 as (
|
|||
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 = 'fixed_rate' and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
where pro_data.pricing_type = 'fixed_rate' AND AAL.sub_project is null
|
||||
--and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
group by
|
||||
pro_data.pproject_id,
|
||||
pro_data.project_active,
|
||||
|
@ -182,6 +183,52 @@ data1 as (
|
|||
AAL.id,
|
||||
AAL.start_datetime
|
||||
),
|
||||
sub_data1 as (
|
||||
SELECT
|
||||
TO_CHAR(start_datetime, 'YYYY-MM-01')::date as start_date,
|
||||
(date_trunc('month', end_datetime) + interval '1 month' - interval '1 day')::date as end_date,
|
||||
sub_pro_data.parent_project as project_id,
|
||||
sub_pro_data.project_active,
|
||||
sub_pro_data.project_type,
|
||||
sub_pro_data.pricing_type,
|
||||
sub_pro_data.parent_project,
|
||||
AAL.sub_project,
|
||||
null::char as role,
|
||||
sub_pro_data.tag_name,
|
||||
sub_pro_data.partner_id,
|
||||
AAL.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,
|
||||
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,
|
||||
0.0 AS expenses_amt,
|
||||
(0.0 - (sum(AAL.amount) * -1)) AS profit_amt,
|
||||
0.0 AS profit_per
|
||||
FROM sub_pro_data
|
||||
left join account_analytic_line AAL on AAL.sub_project=sub_pro_data.sub_project
|
||||
where sub_pro_data.pricing_type = 'fixed_rate'
|
||||
AND AAL.sub_project is not null
|
||||
--and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
group by
|
||||
sub_pro_data.parent_project,
|
||||
sub_pro_data.project_active,
|
||||
sub_pro_data.project_type,
|
||||
sub_pro_data.pricing_type,
|
||||
sub_pro_data.parent_project,
|
||||
AAL.sub_project,
|
||||
sub_pro_data.tag_name,
|
||||
sub_pro_data.partner_id,
|
||||
AAL.employee_id,
|
||||
AAL.id,
|
||||
AAL.start_datetime
|
||||
),
|
||||
data2 as (
|
||||
SELECT
|
||||
coalesce(min(pro_data.pro_sdate), min(AAL.start_datetime::date)) as start_date,
|
||||
|
@ -255,7 +302,8 @@ SELECT
|
|||
((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 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_no_limit'
|
||||
WHERE pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_no_limit'
|
||||
AND AAL.sub_project is null
|
||||
--and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
group by
|
||||
pro_data.pro_sdate,
|
||||
|
@ -320,6 +368,58 @@ data2_sub_project as (
|
|||
sub_pro_data.budgeted_revenue,
|
||||
sub_pro_data.budgeted_hours,
|
||||
sub_pro_data.expenses_amt
|
||||
UNION
|
||||
SELECT
|
||||
TO_CHAR(start_datetime, 'YYYY-MM-01')::date as start_date,
|
||||
(date_trunc('month', end_datetime) + interval '1 month' - interval '1 day')::date as end_date,
|
||||
sub_pro_data.pproject_id as project_id,
|
||||
sub_pro_data.project_active,
|
||||
sub_pro_data.project_type,
|
||||
sub_pro_data.pricing_type,
|
||||
sub_pro_data.parent_project,
|
||||
AAL.sub_project,
|
||||
null::char as role,
|
||||
sub_pro_data.tag_name,
|
||||
sub_pro_data.partner_id,
|
||||
AAL.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,
|
||||
AAL.unit_amount as unit_amount,
|
||||
sub_pro_data.pro_hourly_rate as pro_hourly_rate,
|
||||
((AAL.amount * -1)/NULLIF(AAL.unit_amount, 0)) as timesheet_cost,
|
||||
(AAL.unit_amount * sub_pro_data.pro_hourly_rate) AS actual_revenue,
|
||||
(AAL.amount * -1) as actual_cost,
|
||||
0 AS expenses_amt,
|
||||
((AAL.unit_amount * sub_pro_data.pro_hourly_rate) - (AAL.amount * -1)) AS profit_amt,
|
||||
((AAL.unit_amount * sub_pro_data.pro_hourly_rate) - (AAL.amount * -1))/NULLIF((AAL.unit_amount * sub_pro_data.pro_hourly_rate),0) AS profit_per
|
||||
FROM sub_pro_data
|
||||
left join account_analytic_line AAL on AAL.sub_project=sub_pro_data.sub_project
|
||||
WHERE sub_pro_data.pricing_type='employee_rate' and sub_pro_data.project_type='hours_no_limit'
|
||||
AND AAL.sub_project is not null
|
||||
--and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
group by
|
||||
sub_pro_data.pro_sdate,
|
||||
sub_pro_data.pro_edate,
|
||||
sub_pro_data.pproject_id,
|
||||
sub_pro_data.project_active,
|
||||
sub_pro_data.project_type,
|
||||
sub_pro_data.pricing_type,
|
||||
sub_pro_data.parent_project,
|
||||
AAL.sub_project,
|
||||
sub_pro_data.tag_name,
|
||||
sub_pro_data.partner_id,
|
||||
AAL.employee_id,
|
||||
AAL.id,
|
||||
AAL.start_datetime,
|
||||
sub_pro_data.pro_hourly_rate,
|
||||
AAL.unit_amount,
|
||||
AAL.amount,
|
||||
sub_pro_data.budgeted_hours,
|
||||
sub_pro_data.expenses_amt
|
||||
),
|
||||
data3 as (
|
||||
SELECT
|
||||
|
@ -395,7 +495,8 @@ SELECT
|
|||
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 drange_data2.start_date >= cons_data1.start_date and drange_data2.end_date <= cons_data1.end_date
|
||||
where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant' and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant'
|
||||
and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
group by
|
||||
drange_data2.start_date,
|
||||
drange_data2.end_date,
|
||||
|
@ -452,7 +553,8 @@ SELECT
|
|||
and AAL.end_datetime --at time zone 'utc' at time zone (select tz from res_partner where id=3)
|
||||
<= cons_data1.end_date::date + '23:59:59'::time AT TIME ZONE 'UTC'
|
||||
where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant'
|
||||
--and COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
AND AAL.sub_project is null
|
||||
--AND COALESCE(pro_data.is_sub_project, FALSE) = False
|
||||
group by
|
||||
pro_data.pproject_id,
|
||||
AAL.employee_id,
|
||||
|
@ -570,6 +672,67 @@ SELECT
|
|||
sub_pro_data.tag_name,
|
||||
sub_pro_data.pricing_type,
|
||||
sub_pro_data.partner_id
|
||||
UNION
|
||||
SELECT
|
||||
TO_CHAR(start_datetime, 'YYYY-MM-01')::date as start_date,
|
||||
(date_trunc('month', end_datetime) + interval '1 month' - interval '1 day')::date as end_date,
|
||||
sub_pro_data.pproject_id as project_id,
|
||||
sub_pro_data.project_active,
|
||||
sub_pro_data.project_type,
|
||||
sub_pro_data.pricing_type,
|
||||
sub_pro_data.parent_project,
|
||||
sub_pro_data.sub_project,
|
||||
cons_data1.role,
|
||||
sub_pro_data.tag_name,
|
||||
sub_pro_data.partner_id,
|
||||
AAL.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,
|
||||
AAL.unit_amount as unit_amount,
|
||||
COALESCE(cons_data1.cons_hourly_cost, 0) as pro_hourly_rate,
|
||||
case when cons_data1.cons_timesheet_cost is null then ((AAL.amount * -1)/NULLIF(AAL.unit_amount, 0)) else cons_data1.cons_timesheet_cost
|
||||
end as timesheet_cost,
|
||||
--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,
|
||||
case when cons_data1.cons_timesheet_cost is null then (AAL.amount * -1) else (AAL.unit_amount * cons_data1.cons_timesheet_cost)
|
||||
end as actual_cost,
|
||||
0 as expenses_amt,
|
||||
(AAL.unit_amount * COALESCE(cons_data1.cons_hourly_cost, 0)) - case when cons_data1.cons_timesheet_cost is null
|
||||
then (AAL.amount * -1) else (AAL.unit_amount * cons_data1.cons_timesheet_cost) end as profit_amt,
|
||||
(((AAL.unit_amount * COALESCE(cons_data1.cons_hourly_cost, 0)) - case when cons_data1.cons_timesheet_cost is null then (AAL.amount * -1)
|
||||
else (AAL.unit_amount * cons_data1.cons_timesheet_cost) end) / NULLIF((AAL.unit_amount * COALESCE(cons_data1.cons_hourly_cost, 0)), 0)) * 100 as profit_per
|
||||
FROM sub_pro_data
|
||||
left join account_analytic_line AAL on AAL.sub_project=sub_pro_data.sub_project
|
||||
left join cons_data1 on cons_data1.project_id=AAL.sub_project and cons_data1.employee_id=AAL.employee_id
|
||||
--and (AAL.start_datetime, AAL.end_datetime) OVERLAPS (cons_data1.start_date::date, cons_data1.end_date::date)
|
||||
and AAL.start_datetime --at time zone 'utc' at time zone (select tz from res_partner where id=3)
|
||||
>= cons_data1.start_date::date + '00:00:00'::time AT TIME ZONE 'UTC'
|
||||
and AAL.end_datetime --at time zone 'utc' at time zone (select tz from res_partner where id=3)
|
||||
<= cons_data1.end_date::date + '23:59:59'::time AT TIME ZONE 'UTC'
|
||||
where sub_pro_data.pricing_type='employee_rate' and sub_pro_data.project_type='hours_in_consultant'
|
||||
AND AAL.sub_project is not null
|
||||
--AND sub_pro_data.is_sub_project = True
|
||||
group by
|
||||
sub_pro_data.pproject_id,
|
||||
AAL.employee_id,
|
||||
AAL.id,
|
||||
AAL.start_datetime,
|
||||
sub_pro_data.project_active,
|
||||
sub_pro_data.project_type,
|
||||
sub_pro_data.parent_project,
|
||||
sub_pro_data.sub_project,
|
||||
cons_data1.role,
|
||||
sub_pro_data.tag_name,
|
||||
sub_pro_data.pricing_type,
|
||||
sub_pro_data.partner_id,
|
||||
AAL.unit_amount,
|
||||
AAL.amount,
|
||||
cons_data1.cons_timesheet_cost,
|
||||
cons_data1.cons_hourly_cost
|
||||
),
|
||||
invoice_data as (SELECT
|
||||
invoice_date.date as start_date,
|
||||
|
|
Loading…
Reference in New Issue