Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package tryton for openSUSE:Factory checked 
in at 2026-06-12 19:27:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tryton (Old)
 and      /work/SRC/openSUSE:Factory/.tryton.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "tryton"

Fri Jun 12 19:27:55 2026 rev:35 rq:1358803 version:7.0.39

Changes:
--------
--- /work/SRC/openSUSE:Factory/tryton/tryton.changes    2026-03-08 
17:27:07.847412054 +0100
+++ /work/SRC/openSUSE:Factory/.tryton.new.1981/tryton.changes  2026-06-12 
19:29:00.893932603 +0200
@@ -1,0 +2,5 @@
+Fri Jun 12 00:27:39 UTC 2026 - Axel Braun <[email protected]>
+
+- Version 7.0.39 - Bugfix Release
+
+-------------------------------------------------------------------

Old:
----
  tryton-7.0.34.tar.gz

New:
----
  tryton-7.0.39.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ tryton.spec ++++++
--- /var/tmp/diff_new_pack.EDIa4m/_old  2026-06-12 19:29:03.138026500 +0200
+++ /var/tmp/diff_new_pack.EDIa4m/_new  2026-06-12 19:29:03.154027170 +0200
@@ -30,7 +30,7 @@
 
 
 Name:           tryton
-Version:        %{majorver}.34
+Version:        %{majorver}.39
 Release:        0
 Summary:        The client of the Tryton application platform
 License:        GPL-3.0-or-later

++++++ tryton-7.0.34.tar.gz -> tryton-7.0.39.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/CHANGELOG new/tryton-7.0.39/CHANGELOG
--- old/tryton-7.0.34/CHANGELOG 2026-03-02 21:56:27.000000000 +0100
+++ new/tryton-7.0.39/CHANGELOG 2026-06-02 18:51:48.000000000 +0200
@@ -1,4 +1,29 @@
 
+Version 7.0.39 - 2026-06-02
+---------------------------
+* Bug fixes (see mercurial logs for details)
+
+
+Version 7.0.38 - 2026-05-20
+---------------------------
+* Bug fixes (see mercurial logs for details)
+
+
+Version 7.0.37 - 2026-05-02
+---------------------------
+* Bug fixes (see mercurial logs for details)
+
+
+Version 7.0.36 - 2026-04-16
+---------------------------
+* Bug fixes (see mercurial logs for details)
+
+
+Version 7.0.35 - 2026-03-18
+---------------------------
+* Bug fixes (see mercurial logs for details)
+
+
 Version 7.0.34 - 2026-03-02
 ---------------------------
 * Bug fixes (see mercurial logs for details)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/COPYRIGHT new/tryton-7.0.39/COPYRIGHT
--- old/tryton-7.0.34/COPYRIGHT 2026-03-02 21:56:26.000000000 +0100
+++ new/tryton-7.0.39/COPYRIGHT 2026-06-02 18:51:47.000000000 +0200
@@ -5,7 +5,7 @@
 Copyright (C) 2008-2011 Udo Spallek.
 Copyright (C) 2008-2011 virtual things - Preisler & Spallek GbR.
 Copyright (C) 2008-2026 B2CK SPRL.
-Copyright (C) 2010-2025 Nicolas Évrard.
+Copyright (C) 2010-2026 Nicolas Évrard.
 Copyright (C) 2011-2012 Rodrigo Hübner.
 Copyright (C) 2012-2013 Antoine Smolders.
 Copyright (C) 2020-2021 Maxime Richez
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/PKG-INFO new/tryton-7.0.39/PKG-INFO
--- old/tryton-7.0.34/PKG-INFO  2026-03-02 21:56:30.085743400 +0100
+++ new/tryton-7.0.39/PKG-INFO  2026-06-02 18:51:51.388456300 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: tryton
-Version: 7.0.34
+Version: 7.0.39
 Summary: Tryton desktop client
 Home-page: http://www.tryton.org/
 Download-URL: http://downloads.tryton.org/7.0/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/tryton/__init__.py 
new/tryton-7.0.39/tryton/__init__.py
--- old/tryton-7.0.34/tryton/__init__.py        2026-02-18 18:42:17.000000000 
+0100
+++ new/tryton-7.0.39/tryton/__init__.py        2026-05-20 23:24:46.000000000 
+0200
@@ -1,6 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-__version__ = "7.0.34"
+__version__ = "7.0.39"
 import locale
 
 import gi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/tryton/common/common.py 
new/tryton-7.0.39/tryton/common/common.py
--- old/tryton-7.0.34/tryton/common/common.py   2025-12-14 17:54:15.000000000 
+0100
+++ new/tryton-7.0.39/tryton/common/common.py   2026-05-16 14:45:45.000000000 
+0200
@@ -512,7 +512,10 @@
         name, ext = filename
     else:
         name, ext = os.path.splitext(filename)
-    return ''.join([slugify(name), os.extsep, slugify(ext)])
+    parts = [slugify(name)]
+    if ext:
+        parts.extend([os.extsep, slugify(ext)])
+    return ''.join(parts)
 
 
 def file_write(filename, data):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/tryton/common/domain_parser.py 
new/tryton-7.0.39/tryton/common/domain_parser.py
--- old/tryton-7.0.34/tryton/common/domain_parser.py    2025-12-14 
21:30:28.000000000 +0100
+++ new/tryton-7.0.39/tryton/common/domain_parser.py    2026-05-31 
18:23:20.000000000 +0200
@@ -231,21 +231,21 @@
     def convert_float():
         factor = float(field.get('factor', 1))
         try:
-            return locale.atof(value) / factor
+            return locale.atof(value.replace(' ', '')) / factor
         except (ValueError, AttributeError):
             return
 
     def convert_integer():
         factor = float(field.get('factor', 1))
         try:
-            return int(locale.atof(value) / factor)
+            return int(locale.atof(value.replace(' ', '')) / factor)
         except (ValueError, AttributeError):
             return
 
     def convert_numeric():
         factor = Decimal(field.get('factor', 1))
         try:
-            return Decimal(locale.delocalize(value)) / factor
+            return Decimal(locale.delocalize(value.replace(' ', ''))) / factor
         except (decimal.InvalidOperation, AttributeError):
             return
 
@@ -349,8 +349,8 @@
             cast = float
         factor = cast(field.get('factor', 1))
         digit -= round(math.log10(factor))
-        return locale.localize(
-            '{0:.{1}f}'.format(value * factor or 0, digit), True)
+        digit = max(digit, 0)
+        return locale.localize('{0:.{1}f}'.format(value * factor, digit), True)
 
     def format_selection():
         if isinstance(field['selection'], (tuple, list)):
@@ -880,6 +880,26 @@
                                     (field_name, '<=', rvalue),
                                     ])
                             continue
+                        if (isinstance(value, str)
+                                and field['type'] in {'datetime', 'timestamp'}
+                                and operator == '='):
+                            ctx = self.context if self.context else {}
+                            format_ = date_format(ctx.get('date_format'))
+                            try:
+                                dt = datetime.datetime.strptime(
+                                    value, format_).date()
+                            except (ValueError, TypeError):
+                                dt = None
+                            if dt:
+                                date = untimezoned_date(
+                                    datetime.datetime.combine(
+                                        dt, datetime.time()))
+                                next_date = date + datetime.timedelta(days=1)
+                                yield iter([
+                                        (field_name, '>=', date),
+                                        (field_name, '<', next_date),
+                                        ])
+                                continue
                     if isinstance(value, list):
                         value = [convert_value(field, v, self.context)
                             for v in value]
Binary files old/tryton-7.0.34/tryton/data/locale/bg/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/bg/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/ca/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/ca/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/cs/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/cs/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/de/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/de/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/es/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/es/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/es_419/LC_MESSAGES/tryton.mo 
and new/tryton-7.0.39/tryton/data/locale/es_419/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/et/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/et/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/fa/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/fa/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/fi/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/fi/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/fr/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/fr/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/hu/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/hu/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/id/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/id/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/it/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/it/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo 
and new/tryton-7.0.39/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/lo/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/lo/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/lt/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/lt/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/nl/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/nl/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/pl/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/pl/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/pt/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/pt/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/ro/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/ro/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/ru/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/ru/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/sl/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/sl/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/tr/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/tr/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/uk/LC_MESSAGES/tryton.mo and 
new/tryton-7.0.39/tryton/data/locale/uk/LC_MESSAGES/tryton.mo differ
Binary files old/tryton-7.0.34/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo 
and new/tryton-7.0.39/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/tryton/gui/window/form.py 
new/tryton-7.0.39/tryton/gui/window/form.py
--- old/tryton-7.0.34/tryton/gui/window/form.py 2026-02-27 18:02:46.000000000 
+0100
+++ new/tryton-7.0.39/tryton/gui/window/form.py 2026-04-14 20:36:57.000000000 
+0200
@@ -508,6 +508,8 @@
                     self.screen.current_record = record
                     set_cursor = True
                     break
+        else:
+            self.refresh_resources(True)
         self.screen.display(set_cursor=set_cursor)
         self.info_bar_clear()
         self.set_buttons_sensitive()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tryton-7.0.34/tryton/gui/window/view_form/model/group.py 
new/tryton-7.0.39/tryton/gui/window/view_form/model/group.py
--- old/tryton-7.0.34/tryton/gui/window/view_form/model/group.py        
2026-01-31 14:21:36.000000000 +0100
+++ new/tryton-7.0.39/tryton/gui/window/view_form/model/group.py        
2026-04-14 18:59:32.000000000 +0200
@@ -342,7 +342,7 @@
             cmp = operator.gt
         else:
             cmp = operator.lt
-        max_id = max(0, *(r.id for r in self))
+        max_id = max(0, 0, *(r.id for r in self))
         for record in self:
             # Assume not loaded records are correctly ordered
             # as far as we do not change any previous records.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tryton-7.0.34/tryton/gui/window/view_form/screen/screen.py 
new/tryton-7.0.39/tryton/gui/window/view_form/screen/screen.py
--- old/tryton-7.0.34/tryton/gui/window/view_form/screen/screen.py      
2025-09-22 21:34:39.000000000 +0200
+++ new/tryton-7.0.39/tryton/gui/window/view_form/screen/screen.py      
2026-04-14 20:36:56.000000000 +0200
@@ -1318,7 +1318,7 @@
                     and self.current_view.view_type in [
                         'tree', 'graph', 'calendar']
                     and not self.parent):
-                self.search_filter()
+                self.search_filter(self.screen_container.get_text())
         elif action == 'reload menu':
             from tryton.gui import Main
             RPCContextReload(Main().sig_win_menu)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tryton-7.0.34/tryton/gui/window/view_form/view/form_gtk/one2many.py 
new/tryton-7.0.39/tryton/gui/window/view_form/view/form_gtk/one2many.py
--- old/tryton-7.0.34/tryton/gui/window/view_form/view/form_gtk/one2many.py     
2026-02-14 00:33:02.000000000 +0100
+++ new/tryton-7.0.39/tryton/gui/window/view_form/view/form_gtk/one2many.py     
2026-04-30 18:51:59.000000000 +0200
@@ -558,8 +558,6 @@
 
     def set_value(self):
         self.screen.current_view.set_value()
-        if self.screen.modified():  # TODO check if required
-            self.view.screen.record_modified(display=False)
         return True
 
     def _completion_match_selected(self, completion, model, iter_):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tryton-7.0.34/tryton/gui/window/view_form/view/screen_container.py 
new/tryton-7.0.39/tryton/gui/window/view_form/view/screen_container.py
--- old/tryton-7.0.34/tryton/gui/window/view_form/view/screen_container.py      
2025-09-22 21:34:39.000000000 +0200
+++ new/tryton-7.0.39/tryton/gui/window/view_form/view/screen_container.py      
2026-05-20 18:54:25.000000000 +0200
@@ -2,6 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 import datetime
 import gettext
+import operator
 
 from gi.repository import Gdk, GLib, GObject, Gtk
 
@@ -614,8 +615,10 @@
                     for selection in selections:
                         entry.append_text(selection)
                 elif field['type'] in ['selection', 'multiselection']:
-                    selections = tuple(x[1] for x in field['selection'])
-                    entry = Selection(selections)
+                    selections = [x[1] for x in field['selection']]
+                    if field.get('sort', True):
+                        selections.sort(key=operator.itemgetter(1))
+                    entry = Selection(tuple(selections))
                     entry.set_vexpand(True)
                 elif field['type'] in ('date', 'datetime', 'time'):
                     date_format = common.date_format(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tryton-7.0.34/tryton/tests/test_common_domain_parser.py 
new/tryton-7.0.39/tryton/tests/test_common_domain_parser.py
--- old/tryton-7.0.34/tryton/tests/test_common_domain_parser.py 2025-12-14 
18:09:17.000000000 +0100
+++ new/tryton-7.0.39/tryton/tests/test_common_domain_parser.py 2026-05-31 
17:44:40.000000000 +0200
@@ -930,6 +930,12 @@
                     'name': 'integer',
                     'type': 'integer',
                     },
+                'timestamp': {
+                    'name': 'timestamp',
+                    'string': 'Timestamp',
+                    'type': 'timestamp',
+                    'format': '"%H:%M:%S"',
+                    },
                 'selection': {
                     'string': 'Selection',
                     'name': 'selection',
@@ -1119,6 +1125,33 @@
         self.assertEqual(
             rlist(dom.parse_clause(iter([['AND']]))),
             [('rec_name', 'ilike', "%AND%")])
+        for search_text, domain in [
+                ([('Timestamp', None, None)], [('timestamp', '=', None)]),
+                (
+                    [('Timestamp', '=', dt.date(2002, 12, 4).strftime('%x'))],
+                    [[
+                            ('timestamp', '>=',
+                                untimezoned_date(dt.datetime(2002, 12, 4))),
+                            ('timestamp', '<',
+                                untimezoned_date(dt.datetime(2002, 12, 5)))]]),
+                (
+                    [('Timestamp', '=',
+                        dt.datetime(2002, 12, 4, 12, 30).strftime('%x %X'))
+                        ],
+                    [('timestamp', '=', untimezoned_date(
+                                dt.datetime(2002, 12, 4, 12, 30)))]),
+                (
+                    [('Timestamp', None, [
+                                f"{dt.date(2002, 12, 4).strftime('%x')}",
+                                f"{dt.date(2002, 12, 5).strftime('%x')}",
+                                ])],
+                    [('timestamp', 'in', [
+                                untimezoned_date(dt.datetime(2002, 12, 4)),
+                                untimezoned_date(dt.datetime(2002, 12, 5)),
+                                ])]),
+                ]:
+            with self.subTest(f'parse_clause({search_text})'):
+                self.assertEqual(rlist(dom.parse_clause(search_text)), domain)
 
     def test_completion_char(self):
         "Test completion char"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tryton-7.0.34/tryton.egg-info/PKG-INFO 
new/tryton-7.0.39/tryton.egg-info/PKG-INFO
--- old/tryton-7.0.34/tryton.egg-info/PKG-INFO  2026-03-02 21:56:29.000000000 
+0100
+++ new/tryton-7.0.39/tryton.egg-info/PKG-INFO  2026-06-02 18:51:50.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: tryton
-Version: 7.0.34
+Version: 7.0.39
 Summary: Tryton desktop client
 Home-page: http://www.tryton.org/
 Download-URL: http://downloads.tryton.org/7.0/

Reply via email to