Timezone related issue in report fixed

This commit is contained in:
root 2022-09-05 13:43:47 +05:30
parent 704ac8985d
commit 130f1504d4
2 changed files with 28 additions and 14 deletions

View File

@ -2,7 +2,8 @@
from odoo import api, fields, models, _
from odoo.exceptions import UserError, AccessError, ValidationError
import datetime
from pytz import timezone, UTC
class Project(models.Model):
_inherit = 'project.project'
@ -362,12 +363,17 @@ class InheritProjectProductEmployeeMap(models.Model):
for val in self:
date_clause = ""
query_params = [val.project_id._origin.id, val.employee_id.id]
#tz = self.env.user.tz
if val.start_date:
date_clause += "and start_datetime::date >= %s"
query_params.append(val.start_date)
s_datetime = datetime.datetime.combine(val.start_date, datetime.time(00, 00))
#s_datetime1 = timezone(tz).localize(s_datetime).astimezone(UTC)
date_clause += "and start_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3) >= %s"
query_params.append(s_datetime)
if val.end_date:
date_clause += " and end_datetime::date <= %s"
query_params.append(val.end_date)
e_datetime = datetime.datetime.combine(val.end_date, datetime.time(23, 59, 59))
#e_datetime1 = timezone(tz).localize(e_datetime).astimezone(UTC)
date_clause += " and end_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3) <= %s"
query_params.append(e_datetime)
query = """SELECT project_id, employee_id, SUM(unit_amount) FROM account_analytic_line
where project_id = %s and employee_id = %s {date_clause}
GROUP BY project_id, employee_id""".format(date_clause=date_clause)

View File

@ -11,6 +11,7 @@ class ProjectRevenueCustomReport3(models.Model):
_auto = False
start_date = fields.Date(string='Start Date', readonly=True)
#start_datetime = fields.Datetime(string='Start Datetime111111111', readonly=True)
end_date = fields.Date(string='End Date', readonly=True)
project_id = fields.Many2one('project.project', string='Project', readonly=True)
parent_project = fields.Many2one('project.project', string='Parent Project', readonly=True)
@ -151,7 +152,10 @@ 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::date >= drange_data1.start_date and AAL.end_datetime::date <= drange_data1.end_date
and AAL.start_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3)
>= drange_data1.start_date::date + '00:00:00'::time
and AAL.end_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3)
<= drange_data1.end_date::date + '23:59:59'::time
where pro_data.pricing_type = 'fixed_rate'
group by
drange_data1.start_date,
@ -242,7 +246,10 @@ SELECT
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::date >= drange_data1.start_date and AAL.end_datetime::date <= drange_data1.end_date
and AAL.start_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3)
>= drange_data1.start_date::date + '00:00:00'::time
and AAL.end_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3)
<= drange_data1.end_date::date + '23:59:59'::time
WHERE pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_no_limit'
group by
drange_data1.start_date,
@ -340,7 +347,6 @@ SELECT
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
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'
group by
@ -381,24 +387,26 @@ SELECT
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,
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)) 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 as profit_amt,
--((AAL.unit_amount * COALESCE(cons_data1.cons_hourly_cost, 0))/NULLIF((AAL.unit_amount * COALESCE(cons_data1.cons_hourly_cost, 0)),0)) * 100
--as profit_per,
(((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 drange_data1
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::date >= drange_data1.start_date and AAL.end_datetime::date <= drange_data1.end_date
and AAL.start_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3)
>= drange_data1.start_date::date + '00:00:00'::time
and AAL.end_datetime at time zone 'utc' at time zone (select tz from res_partner where id=3)
<= drange_data1.end_date::date + '23:59:59'::time
left join cons_data1 on cons_data1.project_id=drange_data1.project_id and cons_data1.employee_id=drange_data1.employee_id
and AAL.start_datetime::date >= cons_data1.start_date and AAL.end_datetime::date <= cons_data1.end_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
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
where pro_data.pricing_type='employee_rate' and pro_data.project_type='hours_in_consultant'
group by
drange_data1.start_date,