tryton 7.0.9__tar.gz → 7.0.28__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tryton-7.0.9 → tryton-7.0.28}/CHANGELOG +95 -0
- {tryton-7.0.9 → tryton-7.0.28}/COPYRIGHT +3 -3
- {tryton-7.0.9 → tryton-7.0.28}/PKG-INFO +17 -2
- {tryton-7.0.9 → tryton-7.0.28}/bin/tryton +2 -1
- {tryton-7.0.9 → tryton-7.0.28}/doc/usage.rst +2 -3
- tryton-7.0.28/make-darwin-installer.sh +25 -0
- {tryton-7.0.9 → tryton-7.0.28}/make-win32-installer.sh +3 -0
- {tryton-7.0.9 → tryton-7.0.28}/setup-freeze.py +1 -2
- {tryton-7.0.9 → tryton-7.0.28}/tryton/__init__.py +1 -1
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/common.py +11 -2
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/datetime_.py +3 -1
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/domain_inversion.py +2 -1
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/domain_parser.py +25 -13
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/bg/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ca/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/cs/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/de/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/es/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/es_419/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/et/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/fa/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/fi/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/fr/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/hu/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/id/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/it/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/lo/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/lt/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/nl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/pl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/pt/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ro/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ru/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/sl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/tr/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/uk/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/about.py +1 -1
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/form.py +16 -10
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/model/field.py +69 -31
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/model/record.py +13 -10
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/screen/screen.py +89 -48
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py +12 -7
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form.py +3 -1
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/binary.py +3 -3
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/char.py +5 -6
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/dictionary.py +11 -8
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/document.py +9 -10
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/list.py +30 -6
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/list_gtk/editabletree.py +2 -1
- tryton-7.0.28/tryton/gui/window/view_form/view/list_gtk/generictreemodel.py +426 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/list_gtk/widget.py +29 -8
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/screen_container.py +3 -5
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/win_form.py +8 -6
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/win_import.py +9 -4
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/wizard.py +2 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/jsonrpc.py +5 -1
- {tryton-7.0.9 → tryton-7.0.28}/tryton/plugins/__init__.py +5 -3
- {tryton-7.0.9 → tryton-7.0.28}/tryton/tests/test_common_domain_parser.py +8 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton.egg-info/PKG-INFO +17 -2
- {tryton-7.0.9 → tryton-7.0.28}/tryton.egg-info/SOURCES.txt +2 -5
- tryton-7.0.9/darwin/gtk-3.0/gdk-pixbuf.loaders +0 -107
- tryton-7.0.9/darwin/gtk-3.0/gtk.immodules +0 -40
- tryton-7.0.9/make-darwin-installer.sh +0 -15
- tryton-7.0.9/win32/gtk-3.0/gdk-pixbuf.loaders +0 -114
- tryton-7.0.9/win32/gtk-3.0/gtk.immodules +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/LICENSE +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/MANIFEST.in +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/README.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/catalan.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/doc/conf.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/doc/glossary.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/doc/index.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/doc/installation.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/doc/releases.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/doc/requirements-doc.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/english.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/farsi.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/french.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/german.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/portuguese.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/setup.cfg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/setup.nsi +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/setup.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/slovenian.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/spanish.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tox.ini +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/action/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/action/main.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/bus.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/client.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/button.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrendererbinary.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrendererbutton.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrendererclickablepixbuf.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrenderercombo.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrendererfloat.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrendererinteger.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrenderertext.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/cellrenderertoggle.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/completion.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/entry_position.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/environment.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/focus.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/htmltextbuffer.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/number_entry.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/popup_menu.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/richtext.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/selection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/timedelta.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/underline.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/common/widget_style.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/config.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/bg/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ca/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/cs/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/de/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/es/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/es_419/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/et/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/fa/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/fi/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/fr/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/hu/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/id/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/it/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/lo/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/lt/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/nl/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/pl/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/pt/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ro/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/ru/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/sl/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/tr/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/tryton.pot +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/uk/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/LICENSE +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-add.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-archive.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-arrow-down.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-arrow-left.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-arrow-right.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-arrow-up.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-attach.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-back.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-barcode-scanner.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-bookmark-border.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-bookmark.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-bookmarks.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-cancel.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-clear.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-close.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-copy.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-create.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-date.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-delete.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-download.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-drag.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-email.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-error.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-exit.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-export.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-filter.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-align-center.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-align-justify.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-align-left.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-align-right.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-bold.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-color-text.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-italic.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-format-underline.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-forward.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-history.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-icon.png +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-icon.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-import.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-info.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-launch.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-link.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-log.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-menu.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-note.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-ok.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-open.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-print.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-public.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-question.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-refresh.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-remove.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-save.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-search.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-send.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-sound-off.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-sound-on.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-star-border.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-star.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-switch.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-translate.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-unarchive.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-undo.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton-warning.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton.icns +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton.ico +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/pixmaps/tryton/tryton.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/sounds/LICENSE +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/sounds/danger.wav +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/data/sounds/success.wav +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/device_cookie.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/exceptions.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/fingerprints.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/main.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/attachment.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/board.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/code_scanner.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/dblogin.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/email_.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/infobar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/limit.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/log.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/nomodal.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/note.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/preference.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/revision.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/tabcontent.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_board/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_board/action.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_board/view_board.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/model/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/model/group.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/screen/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/calendar_.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/calendar_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/calendar_gtk/dates_period.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/calendar_gtk/toolbar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/calendar_.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/checkbox.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/float.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/image.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/integer.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/many2many.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/many2one.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/multiselection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/one2many.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/one2one.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/progressbar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/pyson.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/reference.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/richtextbox.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/selection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/state_widget.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/textbox.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/timedelta.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/url.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/form_gtk/widget.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/graph.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/graph_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/graph_gtk/bar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/graph_gtk/graph.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/graph_gtk/line.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/graph_gtk/pie.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/list_form.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/view_form/view/list_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/win_csv.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/win_export.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/win_search.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/gui/window/window.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/plugins/translation/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/pyson.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/rpc.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/tests/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/tests/test_common.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/tests/test_common_selection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/tests/test_common_timedelta.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton/translate.py +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton.desktop +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton.egg-info/dependency_links.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton.egg-info/not-zip-safe +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton.egg-info/requires.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.28}/tryton.egg-info/top_level.txt +0 -0
|
@@ -1,4 +1,99 @@
|
|
|
1
1
|
|
|
2
|
+
Version 7.0.28 - 2025-11-02
|
|
3
|
+
---------------------------
|
|
4
|
+
* Bug fixes (see mercurial logs for details)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Version 7.0.27 - 2025-06-04
|
|
8
|
+
---------------------------
|
|
9
|
+
* Bug fixes (see mercurial logs for details)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
Version 7.0.26 - 2025-05-15
|
|
13
|
+
---------------------------
|
|
14
|
+
* Bug fixes (see mercurial logs for details)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Version 7.0.25 - 2025-05-02
|
|
18
|
+
---------------------------
|
|
19
|
+
* Bug fixes (see mercurial logs for details)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
Version 7.0.24 - 2025-04-26
|
|
23
|
+
---------------------------
|
|
24
|
+
* Bug fixes (see mercurial logs for details)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Version 7.0.23 - 2025-04-02
|
|
28
|
+
---------------------------
|
|
29
|
+
* Bug fixes (see mercurial logs for details)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
Version 7.0.22 - 2025-03-04
|
|
33
|
+
---------------------------
|
|
34
|
+
* Bug fixes (see mercurial logs for details)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
Version 7.0.21 - 2025-02-16
|
|
38
|
+
---------------------------
|
|
39
|
+
* Bug fixes (see mercurial logs for details)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
Version 7.0.20 - 2025-01-01
|
|
43
|
+
---------------------------
|
|
44
|
+
* Bug fixes (see mercurial logs for details)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
Version 7.0.19 - 2024-12-16
|
|
48
|
+
---------------------------
|
|
49
|
+
* Bug fixes (see mercurial logs for details)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
Version 7.0.18 - 2024-12-01
|
|
53
|
+
---------------------------
|
|
54
|
+
* Bug fixes (see mercurial logs for details)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
Version 7.0.17 - 2024-11-06
|
|
58
|
+
---------------------------
|
|
59
|
+
* Bug fixes (see mercurial logs for details)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
Version 7.0.16 - 2024-10-18
|
|
63
|
+
---------------------------
|
|
64
|
+
* Bug fixes (see mercurial logs for details)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
Version 7.0.15 - 2024-10-05
|
|
68
|
+
---------------------------
|
|
69
|
+
* Bug fixes (see mercurial logs for details)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
Version 7.0.14 - 2024-09-16
|
|
73
|
+
---------------------------
|
|
74
|
+
* Bug fixes (see mercurial logs for details)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
Version 7.0.13 - 2024-09-01
|
|
78
|
+
---------------------------
|
|
79
|
+
* Bug fixes (see mercurial logs for details)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
Version 7.0.12 - 2024-08-01
|
|
83
|
+
---------------------------
|
|
84
|
+
* Bug fixes (see mercurial logs for details)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
Version 7.0.11 - 2024-07-01
|
|
88
|
+
---------------------------
|
|
89
|
+
* Bug fixes (see mercurial logs for details)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
Version 7.0.10 - 2024-05-01
|
|
93
|
+
---------------------------
|
|
94
|
+
* Bug fixes (see mercurial logs for details)
|
|
95
|
+
|
|
96
|
+
|
|
2
97
|
Version 7.0.9 - 2024-04-17
|
|
3
98
|
--------------------------
|
|
4
99
|
* Bug fixes (see mercurial logs for details)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Copyright (C) 2004-2008 Tiny SPRL.
|
|
2
2
|
Copyright (C) 2007-2009 Lorenzo Gil Sanchez.
|
|
3
3
|
Copyright (C) 2007-2013 Bertrand Chenal.
|
|
4
|
-
Copyright (C) 2007-
|
|
4
|
+
Copyright (C) 2007-2025 Cédric Krier.
|
|
5
5
|
Copyright (C) 2008-2011 Udo Spallek.
|
|
6
6
|
Copyright (C) 2008-2011 virtual things - Preisler & Spallek GbR.
|
|
7
|
-
Copyright (C) 2008-
|
|
8
|
-
Copyright (C) 2010-
|
|
7
|
+
Copyright (C) 2008-2025 B2CK SPRL.
|
|
8
|
+
Copyright (C) 2010-2025 Nicolas Évrard.
|
|
9
9
|
Copyright (C) 2011-2012 Rodrigo Hübner.
|
|
10
10
|
Copyright (C) 2012-2013 Antoine Smolders.
|
|
11
11
|
Copyright (C) 2020-2021 Maxime Richez
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: tryton
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.28
|
|
4
4
|
Summary: Tryton desktop client
|
|
5
5
|
Home-page: http://www.tryton.org/
|
|
6
6
|
Download-URL: http://downloads.tryton.org/7.0/
|
|
@@ -57,6 +57,21 @@ Provides-Extra: calendar
|
|
|
57
57
|
Requires-Dist: GooCalendar>=0.7; extra == "calendar"
|
|
58
58
|
Provides-Extra: sound
|
|
59
59
|
Requires-Dist: playsound; extra == "sound"
|
|
60
|
+
Dynamic: author
|
|
61
|
+
Dynamic: author-email
|
|
62
|
+
Dynamic: classifier
|
|
63
|
+
Dynamic: description
|
|
64
|
+
Dynamic: download-url
|
|
65
|
+
Dynamic: home-page
|
|
66
|
+
Dynamic: keywords
|
|
67
|
+
Dynamic: license
|
|
68
|
+
Dynamic: license-file
|
|
69
|
+
Dynamic: platform
|
|
70
|
+
Dynamic: project-url
|
|
71
|
+
Dynamic: provides-extra
|
|
72
|
+
Dynamic: requires-dist
|
|
73
|
+
Dynamic: requires-python
|
|
74
|
+
Dynamic: summary
|
|
60
75
|
|
|
61
76
|
tryton
|
|
62
77
|
======
|
|
@@ -15,7 +15,8 @@ if hasattr(sys, 'frozen'):
|
|
|
15
15
|
share = os.path.join(prefix, 'share')
|
|
16
16
|
os.environ['GTK_EXE_PREFIX'] = prefix
|
|
17
17
|
os.environ['GTK_DATA_PREFIX'] = prefix
|
|
18
|
-
os.environ['EV_BACKENDS_DIR'] =
|
|
18
|
+
os.environ['EV_BACKENDS_DIR'] = os.path.join(
|
|
19
|
+
prefix, 'lib', 'evince', '4', 'backends')
|
|
19
20
|
os.environ['XDG_DATA_DIRS'] = share
|
|
20
21
|
os.environ['GDK_PIXBUF_MODULE_FILE'] = os.path.join(
|
|
21
22
|
share, 'gtk-3.0', 'gdk-pixbuf.loaders')
|
|
@@ -491,8 +491,7 @@ A list of values can be set using ``;`` as separator.
|
|
|
491
491
|
|
|
492
492
|
For example: ``Name: Michael; Pam``
|
|
493
493
|
|
|
494
|
-
It will find all records
|
|
495
|
-
``Pam``.
|
|
494
|
+
It will find all records with ``Name`` equal to ``Michael`` or ``Pam``.
|
|
496
495
|
|
|
497
496
|
A range of number values can be set using ``..``.
|
|
498
497
|
|
|
@@ -627,7 +626,7 @@ Local user plugins directory
|
|
|
627
626
|
:file:`~/.config/tryton/x.y/plugins`
|
|
628
627
|
|
|
629
628
|
Custom CSS theme
|
|
630
|
-
:file:`~/.config
|
|
629
|
+
:file:`~/.config/tryton/x.y/theme.css`
|
|
631
630
|
|
|
632
631
|
.. note::
|
|
633
632
|
``~`` means the home directory of the user.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -e
|
|
3
|
+
version=`./setup.py --version`
|
|
4
|
+
rm -rf build dist
|
|
5
|
+
mkdir -p darwin/gtk-3.0
|
|
6
|
+
GDK_PIXBUF_MODULEDIR="$(dirname $(which gdk-pixbuf-query-loaders))/../lib/gdk-pixbuf-2.0/2.10.0/loaders" \
|
|
7
|
+
gdk-pixbuf-query-loaders \
|
|
8
|
+
| sed -e '/^#/d' \
|
|
9
|
+
| sed -e 's@/.*/lib/gdk-pixbuf-2.0@\@executable_path/lib/gdk-pixbuf-2.0@' \
|
|
10
|
+
> darwin/gtk-3.0/gdk-pixbuf.loaders
|
|
11
|
+
gtk-query-immodules-3.0 \
|
|
12
|
+
| sed -e '/^#/d' \
|
|
13
|
+
| sed -e 's@/.*/lib/gtk-3.0@\@executable_path/lib/gtk-3.0@' \
|
|
14
|
+
> darwin/gtk-3.0/gtk.immodules
|
|
15
|
+
./setup.py compile_catalog
|
|
16
|
+
./setup-freeze.py bdist_mac
|
|
17
|
+
mkdir dist
|
|
18
|
+
mv build/Tryton.app dist/
|
|
19
|
+
for f in CHANGELOG COPYRIGHT LICENSE; do
|
|
20
|
+
cp ${f} dist/${f}.txt
|
|
21
|
+
done
|
|
22
|
+
cp -r doc dist/
|
|
23
|
+
rm -f "tryton-${version}.dmg"
|
|
24
|
+
hdiutil create "tryton-${version}.dmg" -volname "Tryton Client ${version}" \
|
|
25
|
+
-fs HFS+ -srcfolder dist
|
|
@@ -4,6 +4,9 @@ version=`./setup.py --version`
|
|
|
4
4
|
series=${version%.*}
|
|
5
5
|
bits=`python -c "import platform; print(platform.architecture()[0])"`
|
|
6
6
|
rm -rf build dist
|
|
7
|
+
mkdir -p win32/gtk-3.0
|
|
8
|
+
gdk-pixbuf-query-loaders | sed -e '/^#/d' > win32/gtk-3.0/gdk-pixbuf.loaders
|
|
9
|
+
gtk-query-immodules-3.0 | sed -e '/^#/d' > win32/gtk-3.0/gtk.immodules
|
|
7
10
|
./setup.py compile_catalog
|
|
8
11
|
./setup-freeze.py install_exe -d dist
|
|
9
12
|
cp `which gdbus.exe` dist/
|
|
@@ -124,14 +124,13 @@ version = version.strip()
|
|
|
124
124
|
|
|
125
125
|
setup(name='tryton',
|
|
126
126
|
version=version,
|
|
127
|
-
packages=find_packages(),
|
|
128
127
|
options={
|
|
129
128
|
'build_exe': {
|
|
130
129
|
'no_compress': True,
|
|
131
130
|
'include_files': include_files,
|
|
132
131
|
'excludes': ['tkinter'],
|
|
133
132
|
'silent': True,
|
|
134
|
-
'packages': ['gi'],
|
|
133
|
+
'packages': find_packages() + ['gi'],
|
|
135
134
|
'include_msvcr': True,
|
|
136
135
|
},
|
|
137
136
|
'bdist_mac': {
|
|
@@ -229,7 +229,7 @@ class ModelAccess(object):
|
|
|
229
229
|
self._models = rpc.execute('model', 'ir.model', 'list_models',
|
|
230
230
|
rpc.CONTEXT)
|
|
231
231
|
except TrytonServerError:
|
|
232
|
-
|
|
232
|
+
logger.error("Unable to get model list.")
|
|
233
233
|
|
|
234
234
|
def __getitem__(self, model):
|
|
235
235
|
if model in self._access:
|
|
@@ -243,7 +243,14 @@ class ModelAccess(object):
|
|
|
243
243
|
access = rpc.execute('model', 'ir.model.access', 'get_access',
|
|
244
244
|
self._models[to_load], rpc.CONTEXT)
|
|
245
245
|
except TrytonServerError:
|
|
246
|
-
access
|
|
246
|
+
logger.error("Unable to get access for %s.", model)
|
|
247
|
+
access = {
|
|
248
|
+
model: {
|
|
249
|
+
'read': True,
|
|
250
|
+
'write': False,
|
|
251
|
+
'create': False,
|
|
252
|
+
'delete': False},
|
|
253
|
+
}
|
|
247
254
|
self._access.update(access)
|
|
248
255
|
return self._access[model]
|
|
249
256
|
|
|
@@ -1254,6 +1261,8 @@ class RPCProgress(object):
|
|
|
1254
1261
|
|
|
1255
1262
|
def return_():
|
|
1256
1263
|
if self.exception:
|
|
1264
|
+
if not isinstance(self.exception, RPCException):
|
|
1265
|
+
raise RPCException(self.exception)
|
|
1257
1266
|
raise self.exception
|
|
1258
1267
|
else:
|
|
1259
1268
|
return self.res
|
|
@@ -9,7 +9,9 @@ from gi.repository import Gdk, GObject, Gtk
|
|
|
9
9
|
|
|
10
10
|
from .common import IconFactory
|
|
11
11
|
|
|
12
|
-
__all__ = [
|
|
12
|
+
__all__ = [
|
|
13
|
+
'Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime',
|
|
14
|
+
'date_parse']
|
|
13
15
|
|
|
14
16
|
_ = gettext.gettext
|
|
15
17
|
|
|
@@ -433,7 +433,8 @@ def unique_value(domain, single_value=True):
|
|
|
433
433
|
and operator == 'in' and len(value) == 1))
|
|
434
434
|
and (not count
|
|
435
435
|
or (count == 1 and model and name.endswith('.id')))):
|
|
436
|
-
|
|
436
|
+
if operator == 'in' and single_value:
|
|
437
|
+
value = value[0]
|
|
437
438
|
if model and name.endswith('.id'):
|
|
438
439
|
model = model[0]
|
|
439
440
|
value = [model, value]
|
|
@@ -5,6 +5,7 @@ import decimal
|
|
|
5
5
|
import gettext
|
|
6
6
|
import io
|
|
7
7
|
import locale
|
|
8
|
+
import math
|
|
8
9
|
from collections import OrderedDict
|
|
9
10
|
from decimal import Decimal
|
|
10
11
|
from shlex import shlex
|
|
@@ -128,10 +129,12 @@ def unescape(value, escape='\\'):
|
|
|
128
129
|
return value.replace(escape + '%', '%').replace(escape + '_', '_')
|
|
129
130
|
|
|
130
131
|
|
|
131
|
-
def quote(value):
|
|
132
|
+
def quote(value, empty=False):
|
|
132
133
|
"Quote string if needed"
|
|
133
134
|
if not isinstance(value, str):
|
|
134
135
|
return value
|
|
136
|
+
if empty and value == '':
|
|
137
|
+
return '""'
|
|
135
138
|
if '\\' in value:
|
|
136
139
|
value = value.replace('\\', '\\\\')
|
|
137
140
|
if '"' in value:
|
|
@@ -307,7 +310,7 @@ def convert_value(field, value, context=None):
|
|
|
307
310
|
return converts.get(field['type'], lambda: value)()
|
|
308
311
|
|
|
309
312
|
|
|
310
|
-
def format_value(field, value, target=None, context=None):
|
|
313
|
+
def format_value(field, value, target=None, context=None, _quote_empty=False):
|
|
311
314
|
"Format value for field"
|
|
312
315
|
if context is None:
|
|
313
316
|
context = {}
|
|
@@ -334,17 +337,18 @@ def format_value(field, value, target=None, context=None):
|
|
|
334
337
|
or isinstance(value, bool))):
|
|
335
338
|
return ''
|
|
336
339
|
digit = 0
|
|
337
|
-
|
|
338
|
-
cast = Decimal
|
|
339
|
-
else:
|
|
340
|
-
cast = float
|
|
341
|
-
factor = cast(field.get('factor', 1))
|
|
342
|
-
string_ = str(value * factor)
|
|
340
|
+
string_ = str(value)
|
|
343
341
|
if 'e' in string_:
|
|
344
342
|
string_, exp = string_.split('e')
|
|
345
343
|
digit -= int(exp)
|
|
346
344
|
if '.' in string_:
|
|
347
345
|
digit += len(string_.rstrip('0').split('.')[1])
|
|
346
|
+
if isinstance(value, Decimal):
|
|
347
|
+
cast = Decimal
|
|
348
|
+
else:
|
|
349
|
+
cast = float
|
|
350
|
+
factor = cast(field.get('factor', 1))
|
|
351
|
+
digit -= round(math.log10(factor))
|
|
348
352
|
return locale.localize(
|
|
349
353
|
'{0:.{1}f}'.format(value * factor or 0, digit), True)
|
|
350
354
|
|
|
@@ -410,9 +414,11 @@ def format_value(field, value, target=None, context=None):
|
|
|
410
414
|
'many2one': format_many2one,
|
|
411
415
|
}
|
|
412
416
|
if isinstance(value, (list, tuple)):
|
|
413
|
-
return ';'.join(
|
|
417
|
+
return ';'.join(
|
|
418
|
+
format_value(field, x, context=context, _quote_empty=True)
|
|
419
|
+
for x in value)
|
|
414
420
|
return quote(converts.get(field['type'],
|
|
415
|
-
lambda: value if value is not None else '')())
|
|
421
|
+
lambda: value if value is not None else '')(), empty=_quote_empty)
|
|
416
422
|
|
|
417
423
|
|
|
418
424
|
def complete_value(field, value):
|
|
@@ -647,10 +653,16 @@ class DomainParser(object):
|
|
|
647
653
|
operator = operator.rstrip(def_operator
|
|
648
654
|
).replace('not', '!').strip()
|
|
649
655
|
if operator.endswith('in'):
|
|
650
|
-
if
|
|
651
|
-
operator
|
|
656
|
+
if isinstance(value, (list, tuple)) and len(value) == 1:
|
|
657
|
+
if operator == 'not in':
|
|
658
|
+
operator = '!='
|
|
659
|
+
else:
|
|
660
|
+
operator = '='
|
|
652
661
|
else:
|
|
653
|
-
operator
|
|
662
|
+
if operator == 'not in':
|
|
663
|
+
operator = '!'
|
|
664
|
+
else:
|
|
665
|
+
operator = ''
|
|
654
666
|
formatted_value = format_value(field, value, target, self.context)
|
|
655
667
|
if (operator in OPERATORS
|
|
656
668
|
and field['type'] in ('char', 'text', 'selection')
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -429,7 +429,7 @@ class Form(TabContent):
|
|
|
429
429
|
delimiter = ';'
|
|
430
430
|
fileno, fname = tempfile.mkstemp(
|
|
431
431
|
'.csv', common.slugify(export['name']) + '_')
|
|
432
|
-
with open(fname, 'w') as fp:
|
|
432
|
+
with open(fname, 'w', newline='') as fp:
|
|
433
433
|
writer = csv.writer(fp, delimiter=delimiter)
|
|
434
434
|
for row, path in zip_longest(data, paths or []):
|
|
435
435
|
indent = len(path) - 1 if path else 0
|
|
@@ -463,9 +463,9 @@ class Form(TabContent):
|
|
|
463
463
|
if widget:
|
|
464
464
|
# Called from button so we must save the tree state
|
|
465
465
|
self.screen.save_tree_state()
|
|
466
|
-
if
|
|
467
|
-
or common.MODELACCESS[self.model]['
|
|
468
|
-
|
|
466
|
+
if (self.screen.readonly
|
|
467
|
+
or not (common.MODELACCESS[self.model]['write']
|
|
468
|
+
or common.MODELACCESS[self.model]['create'])):
|
|
469
469
|
return
|
|
470
470
|
if self.screen.save_current():
|
|
471
471
|
self.info_bar_add(_('Record saved.'), Gtk.MessageType.INFO)
|
|
@@ -578,6 +578,7 @@ class Form(TabContent):
|
|
|
578
578
|
name = str(position) if position else '_'
|
|
579
579
|
selected = len(self.screen.selected_records)
|
|
580
580
|
view_type = self.screen.current_view.view_type
|
|
581
|
+
next_view_type = self.screen.next_view_type
|
|
581
582
|
has_views = self.screen.number_of_views > 1
|
|
582
583
|
if selected > 1:
|
|
583
584
|
name += '#%i' % selected
|
|
@@ -593,7 +594,9 @@ class Form(TabContent):
|
|
|
593
594
|
for b in self.screen.get_buttons())
|
|
594
595
|
set_sensitive(button_id, bool(position) and can_be_sensitive)
|
|
595
596
|
set_sensitive(
|
|
596
|
-
'switch',
|
|
597
|
+
'switch',
|
|
598
|
+
(position or view_type == 'form' or next_view_type != 'form')
|
|
599
|
+
and has_views)
|
|
597
600
|
set_sensitive('remove', self.screen.deletable)
|
|
598
601
|
set_sensitive('previous', self.screen.has_prev())
|
|
599
602
|
set_sensitive('next', self.screen.has_next())
|
|
@@ -633,12 +636,15 @@ class Form(TabContent):
|
|
|
633
636
|
if value == 'ok':
|
|
634
637
|
return self.sig_save(None)
|
|
635
638
|
if value == 'ko':
|
|
636
|
-
record_id =
|
|
639
|
+
record_id = None
|
|
640
|
+
if self.screen.current_record:
|
|
641
|
+
record_id = self.screen.current_record.id
|
|
637
642
|
if self.sig_reload(test_modified=False):
|
|
638
|
-
if record_id
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
643
|
+
if record_id is not None:
|
|
644
|
+
if record_id < 0:
|
|
645
|
+
return None
|
|
646
|
+
elif self.screen.current_record:
|
|
647
|
+
return record_id == self.screen.current_record.id
|
|
642
648
|
return False
|
|
643
649
|
return True
|
|
644
650
|
|