changeset 6214609e0446 in modules/account_invoice:default
details:
https://hg.tryton.org/modules/account_invoice?cmd=changeset;node=6214609e0446
description:
Add ir.calendar for month and day
This allows to replace time_locale and use the translation
infrastructure
instead. So it can be customized using the translation override or
derivative
languages.
This provides also a standard base to modules that needs calendar month
and
day.
issue7815
review56451002
diffstat:
payment_term.py | 84 +++++++++--------
view/payment_term_line_relativedelta_form.xml | 4 +-
view/payment_term_line_relativedelta_list.xml | 4 +-
view/payment_term_line_relativedelta_list_sequence.xml | 4 +-
4 files changed, 51 insertions(+), 45 deletions(-)
diffs (192 lines):
diff -r 8dae926b0f0b -r 6214609e0446 payment_term.py
--- a/payment_term.py Mon Dec 31 20:19:04 2018 +0100
+++ b/payment_term.py Tue Jan 01 15:47:23 2019 +0100
@@ -3,7 +3,7 @@
from decimal import Decimal
from dateutil.relativedelta import relativedelta
-from sql import Column
+from sql import Column, Null
from trytond.i18n import gettext
from trytond.model import (
@@ -182,16 +182,6 @@
return self.currency.digits
return 2
- def get_delta(self):
- return {
- 'day': self.day,
- 'month': int(self.month) if self.month else None,
- 'days': self.days,
- 'weeks': self.weeks,
- 'months': self.months,
- 'weekday': int(self.weekday) if self.weekday else None,
- }
-
def get_date(self, date):
for relativedelta_ in self.relativedeltas:
date += relativedelta_.get()
@@ -253,31 +243,8 @@
('day', '=', None),
[('day', '>=', 1), ('day', '<=', 31)],
])
- month = fields.Selection([
- (None, ''),
- ('1', 'January'),
- ('2', 'February'),
- ('3', 'March'),
- ('4', 'April'),
- ('5', 'May'),
- ('6', 'June'),
- ('7', 'July'),
- ('8', 'August'),
- ('9', 'September'),
- ('10', 'October'),
- ('11', 'November'),
- ('12', 'December'),
- ], 'Month', sort=False)
- weekday = fields.Selection([
- (None, ''),
- ('0', 'Monday'),
- ('1', 'Tuesday'),
- ('2', 'Wednesday'),
- ('3', 'Thursday'),
- ('4', 'Friday'),
- ('5', 'Saturday'),
- ('6', 'Sunday'),
- ], 'Day of Week', sort=False)
+ month = fields.Many2One('ir.calendar.month', "Month")
+ weekday = fields.Many2One('ir.calendar.day', "Day of Week")
months = fields.Integer('Number of Months', required=True)
weeks = fields.Integer('Number of Weeks', required=True)
days = fields.Integer('Number of Days', required=True)
@@ -285,11 +252,16 @@
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
- cursor = Transaction().connection.cursor()
+ transaction = Transaction()
+ cursor = transaction.connection.cursor()
pool = Pool()
Line = pool.get('account.invoice.payment_term.line')
+ Month = pool.get('ir.calendar.month')
+ Day = pool.get('ir.calendar.day')
sql_table = cls.__table__()
line = Line.__table__()
+ month = Month.__table__()
+ day = Day.__table__()
# Migration from 4.0: rename long table
old_model_name = 'account.invoice.payment_term.line.relativedelta'
@@ -298,8 +270,26 @@
if TableHandler.table_exist(old_table):
TableHandler.table_rename(old_table, cls._table)
+ # Migration from 5.0: use ir.calendar
+ migrate_calendar = False
+ if TableHandler.table_exist(cls._table):
+ cursor.execute(*sql_table.select(
+ sql_table.month, sql_table.weekday,
+ where=(sql_table.month != Null)
+ | (sql_table.weekday != Null),
+ limit=1))
+ try:
+ row, = cursor.fetchall()
+ migrate_calendar = any(isinstance(v, str) for v in row)
+ except ValueError:
+ pass
+ if migrate_calendar:
+ sql_table.column_rename('month', '_temp_month')
+ sql_table.column_rename('weekday', '_temp_weekday')
+
super(PaymentTermLineRelativeDelta, cls).__register__(module_name)
+ table_h = cls.__table_handler__(module_name)
line_table = Line.__table_handler__(module_name)
# Migration from 3.4
@@ -314,6 +304,22 @@
for field in fields:
line_table.drop_column(field)
+ # Migration from 5.0: use ir.calendar
+ if migrate_calendar:
+ update = transaction.connection.cursor()
+ cursor.execute(*month.select([month.id, month.index]))
+ for month_id, index in cursor:
+ update.execute(*sql_table.update(
+ [sql_table.month], [month_id],
+ where=sql_table._temp_month == str(index)))
+ table_h.drop_column('_temp_month')
+ cursor.execute(*day.select([day.id, day.index]))
+ for day_id, index in cursor:
+ update.execute(*sql_table.update(
+ [sql_table.weekday], [day_id],
+ where=sql_table._temp_weekday == str(index)))
+ table_h.drop_column('_temp_weekday')
+
@staticmethod
def default_months():
return 0
@@ -330,11 +336,11 @@
"Return the relativedelta"
return relativedelta(
day=self.day,
- month=int(self.month) if self.month else None,
+ month=int(self.month.index) if self.month else None,
days=self.days,
weeks=self.weeks,
months=self.months,
- weekday=int(self.weekday) if self.weekday else None,
+ weekday=int(self.weekday.index) if self.weekday else None,
)
diff -r 8dae926b0f0b -r 6214609e0446
view/payment_term_line_relativedelta_form.xml
--- a/view/payment_term_line_relativedelta_form.xml Mon Dec 31 20:19:04
2018 +0100
+++ b/view/payment_term_line_relativedelta_form.xml Tue Jan 01 15:47:23
2019 +0100
@@ -9,11 +9,11 @@
<label name="months"/>
<field name="months"/>
<label name="month"/>
- <field name="month"/>
+ <field name="month" widget="selection"/>
<label name="weeks"/>
<field name="weeks"/>
<label name="weekday"/>
- <field name="weekday"/>
+ <field name="weekday" widget="selection"/>
<label name="days"/>
<field name="days"/>
<label name="day"/>
diff -r 8dae926b0f0b -r 6214609e0446
view/payment_term_line_relativedelta_list.xml
--- a/view/payment_term_line_relativedelta_list.xml Mon Dec 31 20:19:04
2018 +0100
+++ b/view/payment_term_line_relativedelta_list.xml Tue Jan 01 15:47:23
2019 +0100
@@ -4,9 +4,9 @@
<tree>
<field name="line"/>
<field name="months"/>
- <field name="month"/>
+ <field name="month" widget="selection"/>
<field name="weeks"/>
- <field name="weekday"/>
+ <field name="weekday" widget="selection"/>
<field name="days"/>
<field name="day"/>
</tree>
diff -r 8dae926b0f0b -r 6214609e0446
view/payment_term_line_relativedelta_list_sequence.xml
--- a/view/payment_term_line_relativedelta_list_sequence.xml Mon Dec 31
20:19:04 2018 +0100
+++ b/view/payment_term_line_relativedelta_list_sequence.xml Tue Jan 01
15:47:23 2019 +0100
@@ -4,9 +4,9 @@
<tree sequence="sequence">
<field name="line"/>
<field name="months"/>
- <field name="month"/>
+ <field name="month" widget="selection"/>
<field name="weeks"/>
- <field name="weekday"/>
+ <field name="weekday" widget="selection"/>
<field name="days"/>
<field name="day"/>
</tree>