From bc7cb4478e5f9872016d5140e59ea1501b99ed16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 23 Sep 2009 09:54:20 +0200 Subject: [PATCH] Use Char instead of Integer for year for issue1185 --- line.py | 61 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/line.py b/line.py index 75b3b7c459..7862f3a358 100644 --- a/line.py +++ b/line.py @@ -3,6 +3,7 @@ "Timesheet Line" from trytond.model import ModelView, ModelSQL, fields from trytond.wizard import Wizard +from trytond.backend import FIELDS class Line(ModelSQL, ModelView): @@ -232,7 +233,7 @@ class HoursEmployeeWeekly(ModelSQL, ModelView): _name = 'timesheet.hours_employee_weekly' _description = __doc__ - year = fields.Integer('Year', select=1) + year = fields.Char('Year', select=1) week = fields.Integer('Week', select=1) employee = fields.Many2One('company.employee', 'Employee', select=1) hours = fields.Float('Hours', digits=(16, 2), select=1) @@ -244,18 +245,22 @@ class HoursEmployeeWeekly(ModelSQL, ModelView): self._order.insert(2, ('employee', 'ASC')) def table_query(self, context=None): - return ('SELECT EXTRACT(WEEK FROM date) + ' \ - 'EXTRACT(YEAR FROM date) * 100 + ' \ - 'employee * 1000000 AS id, ' \ - 'MAX(create_uid) AS create_uid, ' \ - 'MAX(create_date) AS create_date, ' \ - 'MAX(write_uid) AS write_uid, ' \ - 'MAX(write_date) AS write_date, ' \ - 'EXTRACT(YEAR FROM date) AS year, ' \ - 'EXTRACT(WEEK FROM date) AS week, employee, ' \ - 'SUM(COALESCE(hours, 0)) AS hours ' \ - 'FROM timesheet_line ' \ - 'GROUP BY year, week, employee', []) + type_name = FIELDS[self.year._type].sql_type(self.year)[0] + return ('SELECT id, create_uid, create_date, write_uid, write_date, ' \ + 'CAST(year AS ' + type_name + '), week, employee, hours ' \ + 'FROM (' + 'SELECT EXTRACT(WEEK FROM date) + ' \ + 'EXTRACT(YEAR FROM date) * 100 + ' \ + 'employee * 1000000 AS id, ' \ + 'MAX(create_uid) AS create_uid, ' \ + 'MAX(create_date) AS create_date, ' \ + 'MAX(write_uid) AS write_uid, ' \ + 'MAX(write_date) AS write_date, ' \ + 'EXTRACT(YEAR FROM date) AS year, ' \ + 'EXTRACT(WEEK FROM date) AS week, employee, ' \ + 'SUM(COALESCE(hours, 0)) AS hours ' \ + 'FROM timesheet_line ' \ + 'GROUP BY year, week, employee) AS ' + self._table, []) HoursEmployeeWeekly() @@ -265,7 +270,7 @@ class HoursEmployeeMonthly(ModelSQL, ModelView): _name = 'timesheet.hours_employee_monthly' _description = __doc__ - year = fields.Integer('Year', select=1) + year = fields.Char('Year', select=1) month = fields.Integer('Month', select=1) employee = fields.Many2One('company.employee', 'Employee', select=1) hours = fields.Float('Hours', digits=(16, 2), select=1) @@ -277,17 +282,21 @@ class HoursEmployeeMonthly(ModelSQL, ModelView): self._order.insert(2, ('employee', 'ASC')) def table_query(self, context=None): - return ('SELECT EXTRACT(MONTH FROM date) + ' \ - 'EXTRACT(YEAR FROM date) * 100 + ' \ - 'employee * 1000000 AS id, ' \ - 'MAX(create_uid) AS create_uid, ' \ - 'MAX(create_date) AS create_date, ' \ - 'MAX(write_uid) AS write_uid, ' \ - 'MAX(write_date) AS write_date, ' \ - 'EXTRACT(YEAR FROM date) AS year, ' \ - 'EXTRACT(MONTH FROM date) AS month, employee, ' \ - 'SUM(COALESCE(hours, 0)) AS hours ' \ - 'FROM timesheet_line ' \ - 'GROUP BY year, month, employee', []) + type_name = FIELDS[self.year._type].sql_type(self.year)[0] + return ('SELECT id, create_uid, create_date, write_uid, write_date, ' \ + 'CAST(year AS ' + type_name + '), month, employee, hours ' \ + 'FROM (' + 'SELECT EXTRACT(MONTH FROM date) + ' \ + 'EXTRACT(YEAR FROM date) * 100 + ' \ + 'employee * 1000000 AS id, ' \ + 'MAX(create_uid) AS create_uid, ' \ + 'MAX(create_date) AS create_date, ' \ + 'MAX(write_uid) AS write_uid, ' \ + 'MAX(write_date) AS write_date, ' \ + 'EXTRACT(YEAR FROM date) AS year, ' \ + 'EXTRACT(MONTH FROM date) AS month, employee, ' \ + 'SUM(COALESCE(hours, 0)) AS hours ' \ + 'FROM timesheet_line ' \ + 'GROUP BY year, month, employee) AS ' + self._table, []) HoursEmployeeMonthly()