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>

Reply via email to