Author SHA1 Message Date
José Arturo García eeac63be0d feat(i18n): complete Dominican Spanish catalog coverage
Validate Tryton customizations / validate (pull_request) Successful in 3m30s
Validate Tryton customizations / validate (push) Successful in 3m48s
2026-10-13 20:14:46 -04:00
José Arturo García e22c0497bd refactor(i18n): make Dominican Spanish standalone
Validate Tryton customizations / validate (pull_request) Successful in 3m33s
Validate Tryton customizations / validate (push) Successful in 3m39s
Remove the es_419 parent from the es_DO language record and provide the complete core ir catalog so the Dominican locale is independently maintained in core and every module.
2026-10-13 20:09:26 -04:00
José Arturo García 4038053504 feat(i18n): bootstrap Dominican catalogs for Weblate
Validate Tryton customizations / validate (pull_request) Successful in 3m50s
Validate Tryton customizations / validate (push) Successful in 3m48s
Initialize es_DO catalogs from the Latin American Spanish catalogs so every server module is directly editable in Weblate while retaining es_419 as the configured fallback.
2026-10-13 20:02:26 -04:00
José Arturo García 4ca0d58fe4 refactor(i18n): move Dominican Spanish into Tryton core
Validate Tryton customizations / validate (pull_request) Successful in 3m32s
Validate Tryton customizations / validate (push) Successful in 3m37s
2026-10-13 19:55:28 -04:00
José Arturo García 5cca20373e ci: keep package builds independent of artifact storage
Validate Tryton customizations / validate (push) Successful in 4m6s
Validate Tryton customizations / validate (pull_request) Successful in 4m5s
2026-10-13 19:33:23 -04:00
José Arturo García beeabd721a ci: use a shallow checkout for validation
Validate Tryton customizations / validate (push) Failing after 4m28s
2026-10-13 19:27:57 -04:00
José Arturo García 75d36f6a09 ci: clone from the runner-accessible Gitea URL
Validate Tryton customizations / validate (push) Canceled after 3m29s
2026-10-13 19:24:59 -04:00
José Arturo García 80ac099434 docs: document private mirror and recovery operations
Validate Tryton customizations / validate (push) Failing after 42s
2026-10-13 19:07:53 -04:00
José Arturo García 9a16786c2d ci: automate reviewed upstream 8.0 proposals 2026-10-13 19:07:53 -04:00
José Arturo García 00c2302068 ci: validate custom Tryton packages and translations 2026-10-13 19:07:53 -04:00
José Arturo García f18368bc33 feat(localization): add Dominican Spanish translation module 2026-10-13 19:07:53 -04:00
Cédric Krier 1126f5b371 Increase version number
--HG--
branch : 8.0
2026-10-02 01:11:08 +02:00
Cédric Krier ece7ef4584 Add tag account_fr_chorus-8.0.2
--HG--
branch : 8.0
2026-10-02 01:10:59 +02:00
Cédric Krier afce931993 Prepare release account_fr_chorus-8.0.2
--HG--
branch : 8.0
2026-10-02 01:10:58 +02:00
Cédric Krier fff830e6b9 Increase version number
--HG--
branch : 8.0
2026-10-02 01:09:36 +02:00
Cédric Krier 8ee998824c Add tag account_payment-8.0.2
--HG--
branch : 8.0
2026-10-02 01:09:21 +02:00
Cédric Krier c4b55740e2 Prepare release account_payment-8.0.2
--HG--
branch : 8.0
2026-10-02 01:09:19 +02:00
Cédric Krier b65889ed51 Increase version number
--HG--
branch : 8.0
2026-10-02 01:06:08 +02:00
Cédric Krier bf18428bef Add tag account_payment_sepa-8.0.4
--HG--
branch : 8.0
2026-10-02 01:05:58 +02:00
Cédric Krier f7d9567a63 Prepare release account_payment_sepa-8.0.4
--HG--
branch : 8.0
2026-10-02 01:05:57 +02:00
Cédric Krier 1253fa5233 Increase version number
--HG--
branch : 8.0
2026-10-02 01:02:58 +02:00
Cédric Krier 2a9d5da72f Add tag account_payment_stripe-8.0.1
--HG--
branch : 8.0
2026-10-02 01:02:42 +02:00
Cédric Krier 05430b4133 Prepare release account_payment_stripe-8.0.1
--HG--
branch : 8.0
2026-10-02 01:02:40 +02:00
Cédric Krier 81c0db4750 Increase version number
--HG--
branch : 8.0
2026-10-02 01:00:25 +02:00
Cédric Krier 71038e029e Add tag document_incoming_ocr_typless-8.0.1
--HG--
branch : 8.0
2026-10-02 01:00:09 +02:00
Cédric Krier f28b9375d8 Prepare release document_incoming_ocr_typless-8.0.1
--HG--
branch : 8.0
2026-10-02 01:00:07 +02:00
Cédric Krier 3ddd45b9ab Increase version number
--HG--
branch : 8.0
2026-10-02 00:59:01 +02:00
Cédric Krier 5a1c8cbcda Add tag edocument_peppol-8.0.2
--HG--
branch : 8.0
2026-10-02 00:58:45 +02:00
Cédric Krier 99b64bb134 Prepare release edocument_peppol-8.0.2
--HG--
branch : 8.0
2026-10-02 00:58:43 +02:00
Cédric Krier 2cd65993b2 Increase version number
--HG--
branch : 8.0
2026-10-02 00:56:57 +02:00
Cédric Krier 4ddd80da6a Add tag incoterm-8.0.1
--HG--
branch : 8.0
2026-10-02 00:56:48 +02:00
Cédric Krier 03cf98c053 Prepare release incoterm-8.0.1
--HG--
branch : 8.0
2026-10-02 00:56:47 +02:00
Cédric Krier 5f887fb19a Increase version number
--HG--
branch : 8.0
2026-10-02 00:53:46 +02:00
Cédric Krier 85c2d22372 Add tag product_kit-8.0.4
--HG--
branch : 8.0
2026-10-02 00:53:37 +02:00
Cédric Krier c1fb95e096 Prepare release product_kit-8.0.4
--HG--
branch : 8.0
2026-10-02 00:53:36 +02:00
Cédric Krier 5727817585 Increase version number
--HG--
branch : 8.0
2026-10-02 00:50:13 +02:00
Cédric Krier e5c3eacd62 Add tag purchase-8.0.3
--HG--
branch : 8.0
2026-10-02 00:49:58 +02:00
Cédric Krier 1f5a9513ed Prepare release purchase-8.0.3
--HG--
branch : 8.0
2026-10-02 00:49:56 +02:00
Cédric Krier 3328236b4d Increase version number
--HG--
branch : 8.0
2026-10-02 00:46:43 +02:00
Cédric Krier 7af67a2ecd Add tag purchase_amendment-8.0.2
--HG--
branch : 8.0
2026-10-02 00:46:31 +02:00
Cédric Krier 1951b87a64 Prepare release purchase_amendment-8.0.2
--HG--
branch : 8.0
2026-10-02 00:46:30 +02:00
Cédric Krier 317159e8c1 Increase version number
--HG--
branch : 8.0
2026-10-02 00:44:06 +02:00
Cédric Krier 40295972f4 Add tag sale-8.0.5
--HG--
branch : 8.0
2026-10-02 00:43:50 +02:00
Cédric Krier 14f446e338 Prepare release sale-8.0.5
--HG--
branch : 8.0
2026-10-02 00:43:48 +02:00
Cédric Krier e12f1559ab Increase version number
--HG--
branch : 8.0
2026-10-02 00:39:13 +02:00
Cédric Krier c3ce910122 Add tag sale_advance_payment-8.0.1
--HG--
branch : 8.0
2026-10-02 00:38:58 +02:00
Cédric Krier 3392d04973 Prepare release sale_advance_payment-8.0.1
--HG--
branch : 8.0
2026-10-02 00:38:56 +02:00
Cédric Krier e735109fb1 Increase version number
--HG--
branch : 8.0
2026-10-02 00:37:08 +02:00
Cédric Krier 7015fd5c03 Add tag stock-8.0.4
--HG--
branch : 8.0
2026-10-02 00:36:57 +02:00
Cédric Krier 28937a7c00 Prepare release stock-8.0.4
--HG--
branch : 8.0
2026-10-02 00:36:56 +02:00
Cédric Krier 06d2b9e9b8 Increase version number
--HG--
branch : 8.0
2026-10-02 00:36:03 +02:00
Cédric Krier d24bcfc3bc Add tag stock_package_shipping_ups-8.0.2
--HG--
branch : 8.0
2026-10-02 00:35:49 +02:00
Cédric Krier 69bb65ea26 Prepare release stock_package_shipping_ups-8.0.2
--HG--
branch : 8.0
2026-10-02 00:35:47 +02:00
Cédric Krier e7f350ba26 Increase version number
--HG--
branch : 8.0
2026-10-02 00:35:10 +02:00
Cédric Krier c893c4d73a Add tag web_shop_shopify-8.0.7
--HG--
branch : 8.0
2026-10-02 00:34:56 +02:00
Cédric Krier a8a2651fb6 Prepare release web_shop_shopify-8.0.7
--HG--
branch : 8.0
2026-10-02 00:34:54 +02:00
Cédric Krier 05d412c07f Increase version number
--HG--
branch : 8.0
2026-10-02 00:33:23 +02:00
Cédric Krier 3fbf6b9b00 Add tag sao-8.0.12
--HG--
branch : 8.0
2026-10-02 00:33:00 +02:00
Cédric Krier cb8e467ab7 Prepare release sao-8.0.12
--HG--
branch : 8.0
2026-10-02 00:32:58 +02:00
Cédric Krier f2dbd6d623 Increase version number
--HG--
branch : 8.0
2026-10-02 00:30:56 +02:00
Cédric Krier 5fa9ea562a Add tag trytond-8.0.11
--HG--
branch : 8.0
2026-10-02 00:30:42 +02:00
Cédric Krier 9cfa07adcc Prepare release trytond-8.0.11
--HG--
branch : 8.0
2026-10-02 00:30:41 +02:00
Cédric Krier 8c69cfe9b2 Escape arguments of report convert command
Closes #15035
(grafted from 18bd1a03d7459e9ff226c42201d9fdf485ab4bad)

--HG--
branch : 8.0
2026-09-30 09:34:18 +02:00
Cédric Krier 0bd4a6f8a1 Escape title and text when rendering HTML editor
Closes #15032
(grafted from 0c76d2bc755882d3633a9452c585412f7847d797)

--HG--
branch : 8.0
2026-09-30 09:39:21 +02:00
Cédric Krier 425d0cef08 Sort advance payment invoices on Function fields of sale
Closes #15131
(grafted from acfea4fba2c5555d65e96ef277e0ab1150869396)

--HG--
branch : 8.0
2026-09-30 13:00:48 +02:00
Adrià Tarroja Caubet 6853fd0d34 Set Selection value synchronously when available
Restore the displayed value before Window.Form reads the widgets. Otherwise
rebuilding the selection may temporarily select its first option.

Closes #15117
(grafted from 0fdec92fe79648f3044c5bc10c4dd729a74028fd)

--HG--
branch : 8.0
2026-09-29 15:31:30 +02:00
Adrià Tarroja Caubet 7c9ed9957e Prevent form content from pushing chat sidebar outside viewport
Closes #15057
(grafted from 15fcaa9f473357ad63215decf5af4a1e5a0c61e6)

--HG--
branch : 8.0
2026-09-03 15:28:26 +02:00
Cédric Krier 05678b8046 Do not enforce check access when renewing device cookie
Closes #15118
(grafted from cd8a5e16e44c265bcf96c17718c9d9b4ae4e3b09)

--HG--
branch : 8.0
2026-09-23 12:08:23 +02:00
Nicolas Évrard 3e1ec32fd3 Lock the whole manipulation of the instance __dict__ when accessing attributes
Previously the lock was too fine grained and missed some concurrent access that
could result in AttributeError. We implement a slightly changed double-checked
locking technique to ensure a fast path when the initialization already
occured.

Closes #15122
(grafted from 8563e4dbd257939ce08bac5eef3858171006981b)

--HG--
branch : 8.0
2026-09-24 14:55:59 +02:00
Lars Wuerfel 3debac9c7b Update wizard tutorial to use tryton.cfg to register model
Closes #15089
(grafted from b5a764a7c2a909bef03ea9f5e2ed2858d42d147f)

--HG--
branch : 8.0
2026-09-28 18:07:34 +02:00
Cédric Krier 60e6824f69 Register opportunity report as report in tutorial
(grafted from 34804d9673e9e8ed1e369024bbc05325bcd78a56)

--HG--
branch : 8.0
2026-09-28 18:10:16 +02:00
Adrià Tarroja Caubet df5e86e6c4 Use super invoice grouping origins when extending sale for kit
Closes #15127
(grafted from 1ecc41dbcfa58486baa6272537c2f294ba4d6215)

--HG--
branch : 8.0
2026-09-28 17:47:13 +02:00
Cédric Krier b081ab3e89 Make mandate required for SEPA direct debit reception
Closes #15093
(grafted from 5f18f6ba22b8d079b9f349d74ad748e418f6f373)

--HG--
branch : 8.0
2026-09-18 23:41:26 +02:00
Cédric Krier a4625bbffb Fill direct debit payment with Stripe customer
Closes #15110
(grafted from 081497495956428c349bb382f7127bc9a0479d0b)

--HG--
branch : 8.0
2026-09-18 23:35:40 +02:00
Cédric Krier 91af0fb678 Do not set non salable product on sale line when synchronise with Shopify
Closes #15096
(grafted from 61fc72015b9b1b77c437260145170bd4b6a75140)

--HG--
branch : 8.0
2026-09-15 12:04:11 +02:00
Cédric Krier 0ae365085b Replace typing of stock move origin by sale and purchase Function field
The origin may not always be a sale or purchase line like with product kit.
So such test must be extendable by other modules implicitly. This can be
achieved by using the Function fields.

Closes #15084
(grafted from 84761faccad43bc56a11a2e8bb8cf2977ba8e8db)

--HG--
branch : 8.0
2026-09-10 14:22:34 +02:00
Cédric Krier b22a72940e Use BillThirdParty tag when requesting UPS to bill charge to customs agent
It is not allowed to use BillShipper or BillReceiver with different accounts
for different charges.

Closes #15105
(grafted from 693c3aa598a48c64b74d8bfe328c928ac9757564)

--HG--
branch : 8.0
2026-09-17 17:02:06 +02:00
Cédric Krier 2fb5c8f53e Copy the field used for Function field
Closes #15079
(grafted from a47a9a5be6728371561eb5e9dc76858cb052fa6f)

--HG--
branch : 8.0
2026-09-10 08:11:03 +02:00
Cédric Krier d7365902d4 Execute the lock_id when computing the running values of cron
Closes #15078
(grafted from 6166d6ed42c968ad1abbb6f21af7ca2cfc1fef0d)

--HG--
branch : 8.0
2026-09-09 18:55:29 +02:00
Cédric Krier f6858c6530 Include the minimal input/output quantity the same day as input in the average quantity for the turnover
Such quantity should be accounted as staying 1 day in the warehouse otherwise
we may have more quantity leaving than the average stock.

Closes #15014
(grafted from 6267ce266fcf8e9494eb277996e948c9dfe21d1d)

--HG--
branch : 8.0
2026-09-24 09:27:50 +02:00
Nicolas Évrard cbaaa525b6 Use a minimal size of 2 for the select tag of MultiSelection widgets
Browsers based on Chromium renders the select as a "normal" select tag when
size=1. Such that the mousedown event is triggered twice which clear the
selection.

Closes #14529
(grafted from 4d95b908a33d950d24416b53d6264db1b0b3b443)

--HG--
branch : 8.0
2026-09-23 17:59:29 +02:00
Cédric Krier da1cbfd558 Requires at least version 3.2 of psycopg
get_notifications uses the timeout parameter which was added only in version
3.2

Closes #15103
(grafted from e590b70d17cec54d95435c6a71a8aaf3dca5e9fa)

--HG--
branch : 8.0
2026-09-16 14:37:43 +02:00
Cédric Krier f8ff618318 Fix typo in setup documentation of Typless
(grafted from 62c60e2ee578e06d1d11ee8e26f83da4bea4b21a)

--HG--
branch : 8.0
2026-04-28 19:28:46 +02:00
Cédric Krier c71150cab3 Increase maximum sleep in Stripe scenario
Stripe takes more time to process the events.
(grafted from 18df935053155d3fb5c5311a8c0f1a8ce555803c)

--HG--
branch : 8.0
2026-09-21 10:19:36 +02:00
Cédric Krier 78ffbdd65f Use decorator before ModelView.button to set default records for cron task
Closes #15076
(grafted from e92eb501cc50ea906fa839596f2c533b787126d6)

--HG--
branch : 8.0
2026-09-09 12:22:52 +02:00
Cédric Krier 7733443332 Set timeout to 0 when receiving PostgreSQL notifications
There is no need to wait 2 seconds for more notifications as we call
get_notifications only when the selector is triggered.

Closes #15102
(grafted from 02567102eb63f69faedf61ae83c51a5075b57588)

--HG--
branch : 8.0
2026-09-16 14:35:33 +02:00
Cédric Krier bb74334f1f Do not copy payment amount cache when copying account move line
Closes #15111
(grafted from 6f4a8415d5d522e028b06df7b406d63b73bf90d1)

--HG--
branch : 8.0
2026-09-19 10:03:57 +02:00
Cédric Krier 2262e4b252 Do not enforce access rights when performing action on delete
Closes #15050
(grafted from e6d7121c620cec6986ab524f43b97f7adb5f7da9)

--HG--
branch : 8.0
2026-08-31 13:43:41 +02:00
Nicolas Évrard f34a7c3a47 Support getting and setting tree widths without a screen width
Closes #15099
(grafted from bdec2127549993b25a44c2057a3f2b7a824ecdc2)

--HG--
branch : 8.0
2026-09-18 23:52:09 +02:00
Cédric Krier 2584156da2 Override contextual groups when evaluating button states
Closes #15098
(grafted from 1326133b908292ff6e2964aa5a3c0682dd4ecd5c)

--HG--
branch : 8.0
2026-09-30 08:15:23 +02:00
Cédric Krier a8faeb02b5 Pass query as a list of argument to format_args for Shopify query logging
(grafted from 42067e83b4f7b206c40af88b0e1bb41f573f0407)

--HG--
branch : 8.0
2026-08-06 09:46:51 +02:00
Cédric Krier 206bbac206 Add logging info about Shopify request
The shopify_app does not generate any logging except the raw info from httpx.
(grafted from d714021b449cf35300aae970475f19c121c4effb)

--HG--
branch : 8.0
2026-08-06 08:48:19 +02:00
Cédric Krier e87a391ed4 Do not clear incoming moves that has been added to a shipment for amendment
Closes #15070
(grafted from fb713c8a996ea659217e194c87246f1067c7fb99)

--HG--
branch : 8.0
2026-09-07 15:24:40 +02:00
Cédric Krier 60774f0d0a Increase version number
--HG--
branch : 8.0
2026-09-18 18:48:49 +02:00
Cédric Krier be82140194 Add tag sao-8.0.11
--HG--
branch : 8.0
2026-09-18 18:48:23 +02:00
Cédric Krier 9821bdd51e Prepare release sao-8.0.11
--HG--
branch : 8.0
2026-09-18 18:48:22 +02:00
Cédric Krier 6dac9305e5 Store any selection in selection mixin to compute textual value
Since 917de1b3e124 the current selection is no more stored but it is needed to
render textual value of a column synchronously.

Closes #15104
(grafted from 2b97e6681d99b4172aceb3a45557e92e2420795b)

--HG--
branch : 8.0
2026-09-17 16:18:47 +02:00
Cédric Krier 5e010fd860 Increase version number
--HG--
branch : 8.0
2026-09-16 23:56:56 +02:00
Cédric Krier 994d66caa3 Add tag account_fr_chorus-8.0.1
--HG--
branch : 8.0
2026-09-16 23:56:48 +02:00
Cédric Krier cbad3d15bc Prepare release account_fr_chorus-8.0.1
--HG--
branch : 8.0
2026-09-16 23:56:47 +02:00
Cédric Krier ccf0bcd700 Increase version number
--HG--
branch : 8.0
2026-09-16 23:54:13 +02:00
Cédric Krier 33db6454a9 Add tag account_invoice-8.0.2
--HG--
branch : 8.0
2026-09-16 23:54:03 +02:00
Cédric Krier a0a7832d3a Prepare release account_invoice-8.0.2
--HG--
branch : 8.0
2026-09-16 23:54:02 +02:00
Cédric Krier 582533ff42 Increase version number
--HG--
branch : 8.0
2026-09-16 23:50:55 +02:00
Cédric Krier f21b62edbb Add tag account_invoice_defer-8.0.1
--HG--
branch : 8.0
2026-09-16 23:50:46 +02:00
Cédric Krier 7f44f1ab88 Prepare release account_invoice_defer-8.0.1
--HG--
branch : 8.0
2026-09-16 23:50:45 +02:00
Cédric Krier 85e6dbcdde Increase version number
--HG--
branch : 8.0
2026-09-16 23:43:34 +02:00
Cédric Krier a1d4026d6a Add tag account_payment_sepa-8.0.3
--HG--
branch : 8.0
2026-09-16 23:43:24 +02:00
Cédric Krier a517b778c6 Prepare release account_payment_sepa-8.0.3
--HG--
branch : 8.0
2026-09-16 23:43:23 +02:00
Cédric Krier cdce88ff00 Increase version number
--HG--
branch : 8.0
2026-09-16 23:40:01 +02:00
Cédric Krier eda316fff6 Add tag edocument_ubl-8.0.5
--HG--
branch : 8.0
2026-09-16 23:39:51 +02:00
Cédric Krier 89e5d33b10 Prepare release edocument_ubl-8.0.5
--HG--
branch : 8.0
2026-09-16 23:39:50 +02:00
Cédric Krier ce6945142c Increase version number
--HG--
branch : 8.0
2026-09-16 23:37:29 +02:00
Cédric Krier b4d43e279c Add tag edocument_uncefact-8.0.3
--HG--
branch : 8.0
2026-09-16 23:37:18 +02:00
Cédric Krier ae092912f6 Prepare release edocument_uncefact-8.0.3
--HG--
branch : 8.0
2026-09-16 23:37:17 +02:00
Cédric Krier c94e3668b2 Increase version number
--HG--
branch : 8.0
2026-09-16 23:35:50 +02:00
Cédric Krier c29dd20661 Add tag product-8.0.2
--HG--
branch : 8.0
2026-09-16 23:35:39 +02:00
Cédric Krier 8ec0e54fa0 Prepare release product-8.0.2
--HG--
branch : 8.0
2026-09-16 23:35:38 +02:00
Cédric Krier e66eb2f351 Increase version number
--HG--
branch : 8.0
2026-09-16 23:34:18 +02:00
Cédric Krier da2f6ea8fc Add tag product_kit-8.0.3
--HG--
branch : 8.0
2026-09-16 23:34:09 +02:00
Cédric Krier 8b0bfce413 Prepare release product_kit-8.0.3
--HG--
branch : 8.0
2026-09-16 23:34:08 +02:00
Cédric Krier 8d58264ba4 Increase version number
--HG--
branch : 8.0
2026-09-16 23:32:46 +02:00
Cédric Krier e765e68b9d Add tag purchase-8.0.2
--HG--
branch : 8.0
2026-09-16 23:32:34 +02:00
Cédric Krier 2e9a37626b Prepare release purchase-8.0.2
--HG--
branch : 8.0
2026-09-16 23:32:33 +02:00
Cédric Krier d725d601e5 Increase version number
--HG--
branch : 8.0
2026-09-16 23:31:09 +02:00
Cédric Krier 280e86131f Add tag purchase_blanket_agreement-8.0.2
--HG--
branch : 8.0
2026-09-16 23:31:00 +02:00
Cédric Krier 790d39d9ac Prepare release purchase_blanket_agreement-8.0.2
--HG--
branch : 8.0
2026-09-16 23:30:59 +02:00
Cédric Krier 4c562d3101 Increase version number
--HG--
branch : 8.0
2026-09-16 23:29:35 +02:00
Cédric Krier ed394b60d1 Add tag sale-8.0.4
--HG--
branch : 8.0
2026-09-16 23:29:26 +02:00
Cédric Krier 5e31e05a36 Prepare release sale-8.0.4
--HG--
branch : 8.0
2026-09-16 23:29:25 +02:00
Cédric Krier d85bbf1a31 Increase version number
--HG--
branch : 8.0
2026-09-16 23:28:03 +02:00
Cédric Krier e10492625a Add tag sale_supply-8.0.1
--HG--
branch : 8.0
2026-09-16 23:27:55 +02:00
Cédric Krier 37b9893df6 Prepare release sale_supply-8.0.1
--HG--
branch : 8.0
2026-09-16 23:27:53 +02:00
Cédric Krier bce9e311cf Increase version number
--HG--
branch : 8.0
2026-09-16 23:26:26 +02:00
Cédric Krier 4f2b32c1e1 Add tag sale_supply_drop_shipment-8.0.1
--HG--
branch : 8.0
2026-09-16 23:26:17 +02:00
Cédric Krier 037679f073 Prepare release sale_supply_drop_shipment-8.0.1
--HG--
branch : 8.0
2026-09-16 23:26:16 +02:00
Cédric Krier 3e551e31e3 Increase version number
--HG--
branch : 8.0
2026-09-16 23:25:50 +02:00
Cédric Krier b4baf0fb82 Add tag stock_ethanol-8.0.1
--HG--
branch : 8.0
2026-09-16 23:25:39 +02:00
Cédric Krier 02420f000f Prepare release stock_ethanol-8.0.1
--HG--
branch : 8.0
2026-09-16 23:25:37 +02:00
Cédric Krier 5afa0f29b1 Increase version number
--HG--
branch : 8.0
2026-09-16 23:24:44 +02:00
Cédric Krier a4f5c336b1 Add tag stock_package_shipping-8.0.2
--HG--
branch : 8.0
2026-09-16 23:24:36 +02:00
Cédric Krier 0ffb47662e Prepare release stock_package_shipping-8.0.2
--HG--
branch : 8.0
2026-09-16 23:24:34 +02:00
Cédric Krier 7e65d2a5cd Increase version number
--HG--
branch : 8.0
2026-09-16 23:23:05 +02:00
Cédric Krier ee6e06b7d5 Add tag user_role-8.0.2
--HG--
branch : 8.0
2026-09-16 23:22:56 +02:00
Cédric Krier 5266a55c64 Prepare release user_role-8.0.2
--HG--
branch : 8.0
2026-09-16 23:22:55 +02:00
Cédric Krier 5df308e81d Increase version number
--HG--
branch : 8.0
2026-09-16 23:21:30 +02:00
Cédric Krier 74bd11d7e1 Add tag web_shop_shopify-8.0.6
--HG--
branch : 8.0
2026-09-16 23:21:20 +02:00
Cédric Krier df37326c95 Prepare release web_shop_shopify-8.0.6
--HG--
branch : 8.0
2026-09-16 23:21:19 +02:00
Cédric Krier 3773d04991 Increase version number
--HG--
branch : 8.0
2026-09-16 23:15:49 +02:00
Cédric Krier 4dbc92712e Add tag sao-8.0.10
--HG--
branch : 8.0
2026-09-16 23:12:24 +02:00
Cédric Krier c65bf0cb9a Prepare release sao-8.0.10
--HG--
branch : 8.0
2026-09-16 23:12:23 +02:00
Cédric Krier 1f05a2b240 Increase version number
--HG--
branch : 8.0
2026-09-16 23:06:43 +02:00
Cédric Krier 3f84b997ac Add tag tryton-8.0.9
--HG--
branch : 8.0
2026-09-16 23:06:32 +02:00
Cédric Krier 1c47e75e6f Prepare release tryton-8.0.9
--HG--
branch : 8.0
2026-09-16 23:06:31 +02:00
Cédric Krier 1f04d08061 Increase version number
--HG--
branch : 8.0
2026-09-16 23:03:56 +02:00
Cédric Krier 8ea339ab0f Add tag trytond-8.0.10
--HG--
branch : 8.0
2026-09-16 23:03:42 +02:00
Cédric Krier de9dc63c55 Prepare release trytond-8.0.10
--HG--
branch : 8.0
2026-09-16 23:03:41 +02:00
Cédric Krier 3ea61dd88f Require a message file for SEPA message
Closes #15073
(grafted from ccb26ad8dd0efcfc062c8d95fab29a6bfba5b74a)

--HG--
branch : 8.0
2026-09-07 18:12:38 +02:00
Cédric Krier 6ff3f7701f Test if the line's origin is an instance of ModelStorage before accessing the record name
Closes #15072
(grafted from c51729392ebd3af4327e55dd7f1c195163f5b1cf)

--HG--
branch : 8.0
2026-09-07 18:01:00 +02:00
Nicolas Évrard 6d3956ff5f Use the selection from the update_selection call in Selection editable columns
Since 917de1b3e124 the selection is not stored on the selection_mixins we must
thus use the one coming from the callback call

Closes #15087
(grafted from e80a99079b44ce2d1c22865bd919fef6bfc8ce24)

--HG--
branch : 8.0
2026-09-10 22:12:59 +02:00
Cédric Krier 6ccad120d7 Use explicit order for shipments and invoices on sale and purchase
Closes #15090
(grafted from 05dbc76d7b374aebf7aaef7c03617cbec6c67393)

--HG--
branch : 8.0
2026-09-13 13:57:29 +02:00
Cédric Krier 7be6fa1e91 Returns unique and ordered shipments when extending sale and purchase for kit
Since 9385c3660f17 the super method returns instances so only instances must be
added to the set to ensure uniqueness.

Closes #15091
(grafted from 7b9bcbe10ded642353834ba189a888119d7073ae)

--HG--
branch : 8.0
2026-09-13 14:01:21 +02:00
Cédric Krier 55284034da Sort invoices and shipments on Function fields of sale and purchase
Closes #15083
(grafted from 9385c3660f174830a30529078f3e2899a7a8672c)

--HG--
branch : 8.0
2026-09-10 14:14:16 +02:00
Cédric Krier eeb2b75b4c Forbid to set role to admin user
The links between admin user and groups are managed by XML record.
But the sync task may delete such link if a role is assigned to admin because
the task is run as root which skip the XML check.

Closes #15086
(grafted from 0512f49869883b95b74387a292753e9e43375f35)

--HG--
branch : 8.0
2026-09-10 16:07:26 +02:00
Cédric Krier 7f872d1a8c Display the screen after button confirmation has been rejected
Since 0b692f8ac308 the screen must be displayed again in order to remove the
disabled property.

Closes #15061
(grafted from 7df15278c9793c95b2d14038c1f779a4447838d4)

--HG--
branch : 8.0
2026-09-03 17:23:33 +02:00
Cédric Krier 8f5b01564e Store delete rule of column per constraint
If a column is used for different foreign keys with different delete rules, the
foreign key may be recreated if the last rule stored is different.

Closes #15053
(grafted from 636865d7fc72d5e59d9a7bb447de8b87743cc5ad)

--HG--
branch : 8.0
2026-09-02 11:43:46 +02:00
Adrià Tarroja Caubet 3863230030 Check for running deferrals when closing a standard period only
Invoice deferred creates moves only on standard period

Closes #15042
(grafted from f56a0a6d5558009b138069bdad1c3d7ff9c37c87)

--HG--
branch : 8.0
2026-09-10 08:20:15 +02:00
Cédric Krier 7cda9ec0fc Set button decorator for sending and updating invoices on Chorus to a different method than the cron
Closes #15069
(grafted from 59d049637f6755f0678f5acb460525b5be5d72b4)

--HG--
branch : 8.0
2026-09-06 10:21:56 +02:00
Cédric Krier c7352528ab Do not set searcher on ethanol volume of products by locations
The field on product is not searchable.

Closes #15064
(grafted from d28f3d9513b9a23275186cf76efb451e63fe7ae9)

--HG--
branch : 8.0
2026-09-04 08:31:27 +02:00
Cédric Krier ba18ab2e16 Do not add searcher to the template function fields if the template field is not searchable
Closes #15063
(grafted from c7ff87de982a3f9d0e46a62bfebe76751bcbf4e2)

--HG--
branch : 8.0
2026-09-04 08:30:25 +02:00
Cédric Krier 1fb965a74a Generate a valid domain for the origin invoices via the searcher on the invoice
Closes #15062
(grafted from 3fa1c544b703ac7b134992cd62693cd43b633c45)

--HG--
branch : 8.0
2026-09-04 08:28:54 +02:00
Cédric Krier 366327464b Set the company on the invoice before assigning the party
The party of the invoice must have the invoice's company in the context to
correctly set the account when calling on_change_party.

Closes #15049
(grafted from 9b78bdacf182dfa9e5ab3c5206fb8fb5adfb2868)

--HG--
branch : 8.0
2026-08-31 12:06:40 +02:00
Cédric Krier 862ef8d408 Wait until a message is received when testing subscription of bus
Closes #15065
(grafted from 020452568c782b3d20fe64fe58e33088095125a1)

--HG--
branch : 8.0
2026-09-04 11:53:57 +02:00
Cédric Krier 0512626e26 Use a sentinel as default value for setting attribute only if changed
For new instances, we must set also the attribute with value `None` as they may
be tested later.

Closes #15060
(grafted from bfe3756af384f4fce94244761d5f5dd3f62d0ff6)

--HG--
branch : 8.0
2026-09-03 15:49:20 +02:00
Cédric Krier 4e4d7b0729 Test the existence of the request context key before using it for URL
Closes #15046
(grafted from 5eae02e6c094d6741d615d1c4bd2333721eb92b7)

--HG--
branch : 8.0
2026-08-27 15:56:47 +02:00
Nicolas Évrard 04ab9aaedf Check the existence of a getter before adding it to a field depends
Closes #15055
(grafted from 9d5d21d76b461d82c7d43c6221f7e9f1f1d3f5cc)

--HG--
branch : 8.0
2026-09-03 12:24:29 +02:00
Cédric Krier 0b24d35a3d Clear attachment preview when there is no current record
Closes #15044
(grafted from dc0a158ea439898e071602e8dc87fc4767fe76c6)

--HG--
branch : 8.0
2026-08-26 10:26:45 +02:00
Lars Wuerfel e298bf5935 Fix the "prefixes" key name in the cookiecutter template
Closes #15054
(grafted from 273529fe5d566940dbac9fb933dd3fcc6daeb60f)

--HG--
branch : 8.0
2026-09-03 12:38:02 +02:00
Cédric Krier 921562a1dd Ensure it is still the same record when executing the display callback of a widget
When a widget display is asynchronous, we must ensure that it is still the same
record that is being displayed when the callback is finally executed. Otherwise
it may render the data of a different record in the HTML.

Closes #15041
(grafted from dbd215ffb07150c2f476922bd7c66dc896ed2665)

--HG--
branch : 8.0
2026-08-25 13:09:25 +02:00
Eva Luadora de088e6e3e Bind graph using the DOM element instead of id
Billboard must receive the graph element directly because the chart can be
rendered while it is still detached from the document.

Closes #14970
(grafted from 00123388953eb5d0e7cee0ff3b8d005a826db9e9)

--HG--
branch : 8.0
2026-09-02 13:57:21 +02:00
Cédric Krier d2ced133f6 Include first line of unstructured street in AdrLine tag of SEPA message
Since 327f65ad55e6 the StrtNm tag is no more the first line of the street so
this lines must be included in AdrLine.

Closes #15036
(grafted from 3f9bfd6ce8b9dcb718a20272eb37f1cb83f727e8)

--HG--
branch : 8.0
2026-08-24 11:56:05 +02:00
Cédric Krier 6ff68e42b9 Cache the help with the selection per domain in selection mixin
Closes #15031
(grafted from 1439af7bdd4c87f1bb9761f722c4320e572fde80)

--HG--
branch : 8.0
2026-08-21 10:04:05 +02:00
Cédric Krier 2186c3740c Do not set selection after asynchronous call if parameters have changed
And do not store the current selection nor help but only pass them to the
callback.

Closes #15029
(grafted from 917de1b3e12443c919b90ba7cac9497bca047ef9)

--HG--
branch : 8.0
2026-08-21 15:26:56 +02:00
Cédric Krier cb050c3441 Make wizard wait for setting default value before ending processing
Closes #15040
(grafted from 78d8d12401ff32125fa24fdbd600a9e6eb0cc136)

--HG--
branch : 8.0
2026-08-25 12:24:36 +02:00
Cédric Krier 762ee55d45 Manage the sign on LineTotalAmount instead of BilledQuantity in UN/CEFACT 16B-CII
Closes #15006
(grafted from 0697a96aaf6c42aeb8e3d81b2d33167eb85a974c)

--HG--
branch : 8.0
2026-08-11 12:10:58 +02:00
Cédric Krier c6915b38bd Set PostOfficeBox when address has a post box in UN/CEFACT 16B-CII
Closes #15005
(grafted from 702f1b938b21c1bbe0536037c300c9c103a952e2)

--HG--
branch : 8.0
2026-08-11 12:08:26 +02:00
Cédric Krier b5a32b6e65 Set format attribute for DateTimeString in UN/CEFACT 16B-CII
Closes #15004
(grafted from 9b3043220a6da6f9d31dd70f1b1e348b3dc425fe)

--HG--
branch : 8.0
2026-08-11 12:05:48 +02:00
Cédric Krier eb14b26c7c Store only records count greater than 0 in the cache when delete records
The existing cached count may be just an estimation so it is possible that more
records are deleted.

Closes #15038
(grafted from aa4a8bd85207b307b4aa075b105550e4ddae100f)

--HG--
branch : 8.0
2026-08-25 09:45:59 +02:00
Cédric Krier 32197c0397 Ensure to use an estimated count greater than 1 when applying log10
Closes #15038
(grafted from ff2281026e58f4d7a8c9823837ce16a9bb0fa09b)

--HG--
branch : 8.0
2026-08-25 09:46:47 +02:00
Adrià Tarroja Caubet 02c2c2718a Add missing transaction commit to SEPA mandate migration
The console does not commit the transaction automatically, so the updated
addresses are not persisted without an explicit commit.

Closes #15037
(grafted from e56328f60aa45be564b55b93cd0c14ba8b23458c)

--HG--
branch : 8.0
2026-08-06 13:09:48 +02:00
Adrià Tarroja Caubet 4d0ad17551 Call on_change_party without assignment in SEPA mandate migration
The method updates the address in place and returns None. Assigning its
return value to the address raises an AssertionError.

Closes #14996
(grafted from 09ace4ae51505a83d13bd3d034536a022730a2f3)

--HG--
branch : 8.0
2026-08-06 13:08:45 +02:00
Cédric Krier 416122a718 Add record changed callback
Only when the current record has changed that those objects needs to be
refreshed/cleared:

    - the info bar
    - the resources
    - the attachment preview
    - the chat

Closes #15012
(grafted from dc3a3e20006329b742e6f989a0fd01d485ec80b1)

--HG--
branch : 8.0
2026-08-14 12:55:53 +02:00
Cédric Krier a5ac7f8cfa Call on_change_product only if the sale line has been changed
Since f41c9c208d39 the _changed_values is a method instead of a property.

Closes #15013
(grafted from 80f38dd8024d1e471f7c1569ba1b36c87185f7cc)

--HG--
branch : 8.0
2026-08-14 18:11:42 +02:00
Cédric Krier ad81e44df6 Set all attributes of transaction before connecting to the database
The connection to the database may fail and thus stop and rollback may be
called. All the attributes must be set to avoid to raise another AttributeError
exception.

Closes #15022
(grafted from 654923a8085d4804dd217e487c80085c53eb470b)

--HG--
branch : 8.0
2026-08-17 17:32:55 +02:00
Cédric Krier c4d1f2ce4b Allow the creation of shipping label for packages when the shipment state is shipped
Closes #15027
(grafted from 273c2c256c1b4774811be1b15ea12e9d478bdd46)

--HG--
branch : 8.0
2026-08-20 12:02:57 +02:00
Cédric Krier b78276b643 Protect writing configuration of tryton with a thread lock
Closes #6114
(grafted from d09f4b4b8b5a163ae02d9f066922e0999022b4f8)

--HG--
branch : 8.0
2026-07-27 12:10:00 +02:00
Cédric Krier 0d0d626c29 Do not rely on invoices order from sale in sale supply test scenario
Closes #15034
(grafted from 76fa6c0dae6901fcf8eb1df8037dbddb09499b8b)

--HG--
branch : 8.0
2026-08-23 14:49:30 +02:00
Cédric Krier e8adf18a55 Do not rely on shipments order from sale in product kit test scenario
Closes #15016
(grafted from 58d67088854ac415c961f6c265da3b6e28ce1c37)

--HG--
branch : 8.0
2026-08-16 23:51:22 +02:00
Cédric Krier e22d717e8a Do not rely on invoices order from sale and purchase in test scenario
Closes #15033
(grafted from d1364323d4ac8c2f3d823cbee89e5217a53e98da)

--HG--
branch : 8.0
2026-08-23 08:28:53 +02:00
Cédric Krier 87e7fc92f6 Raise last retry exception from JSON-RPC request
Closes #15008
(grafted from 3e2a195d2b333fda531f719c4b6c69a7c5f2e1c0)

--HG--
branch : 8.0
2026-08-15 08:03:57 +02:00
Cédric Krier 605b1d214e Register cache instance after being fully initialized
Otherwise an instance can be accessed by another thread via the registry when
it is still being initialized. And it may crash on missing attribute.

Closes #15007
(grafted from f1840545f4eb5ae5c870a2557a7c3a0314fedb16)

--HG--
branch : 8.0
2026-08-12 17:57:01 +02:00
Cédric Krier d38bb3fea5 Test findtext result as boolean when parsing UBL invoice
Closes #15003
(grafted from ebb739d278526b86ec2f4ac31df63388874c2487)

--HG--
branch : 8.0
2026-08-11 12:02:09 +02:00
Cédric Krier 7844a750a3 Limit the start id of table to 500 for tests
By using the formula `(idx * prime) % range + 1`, tables created consecutively
have start id distant by `prime` and the maximum start id is `range`.
This avoid to overflow int4 when composing unique ID for table query.

Closes #15010
(grafted from f730392a270138148ed62366cf7f35a7cc01a8b6)

--HG--
branch : 8.0
2026-08-17 15:06:09 +02:00
Nicolas Évrard 5a3a52e164 Reset TABLES_CREATED when dropping the database when testing
Closes #15002
(grafted from e9f2b42e96ebb4553ef153f1d778c5d1042b3891)

--HG--
branch : 8.0
2026-08-10 14:51:04 +02:00
Cédric Krier 6992663e99 Increase version number
--HG--
branch : 8.0
2026-08-15 09:07:22 +02:00
Cédric Krier b521cacbf1 Add tag account_invoice_history-8.0.1
--HG--
branch : 8.0
2026-08-15 09:07:12 +02:00
Cédric Krier bc372c52e9 Prepare release account_invoice_history-8.0.1
--HG--
branch : 8.0
2026-08-15 09:07:11 +02:00
Cédric Krier 6ddfab0dc3 Increase version number
--HG--
branch : 8.0
2026-08-15 09:03:46 +02:00
Cédric Krier 0589978d99 Add tag currency_ro-8.0.2
--HG--
branch : 8.0
2026-08-15 09:03:35 +02:00
Cédric Krier 0ba4a09e2e Prepare release currency_ro-8.0.2
--HG--
branch : 8.0
2026-08-15 09:03:32 +02:00
Cédric Krier 1f0292c073 Increase version number
--HG--
branch : 8.0
2026-08-15 09:02:34 +02:00
Cédric Krier 96976c6074 Add tag edocument_peppol_peppyrus-8.0.1
--HG--
branch : 8.0
2026-08-15 09:02:24 +02:00
Cédric Krier 6993fe7ad5 Prepare release edocument_peppol_peppyrus-8.0.1
--HG--
branch : 8.0
2026-08-15 09:02:22 +02:00
Cédric Krier bacd9218f2 Increase version number
--HG--
branch : 8.0
2026-08-15 09:00:18 +02:00
Cédric Krier 5764bbd2a3 Add tag edocument_ubl-8.0.4
--HG--
branch : 8.0
2026-08-15 09:00:07 +02:00
Cédric Krier 40149fe10b Prepare release edocument_ubl-8.0.4
--HG--
branch : 8.0
2026-08-15 09:00:06 +02:00
Cédric Krier db633960ad Increase version number
--HG--
branch : 8.0
2026-08-15 08:57:55 +02:00
Cédric Krier 735fc1ef03 Add tag party-8.0.3
--HG--
branch : 8.0
2026-08-15 08:57:40 +02:00
Cédric Krier a9f1433af4 Prepare release party-8.0.3
--HG--
branch : 8.0
2026-08-15 08:57:38 +02:00
Cédric Krier 7ea80268fe Increase version number
--HG--
branch : 8.0
2026-08-15 08:54:31 +02:00
Cédric Krier 32a8376975 Add tag sale_blanket_agreement-8.0.2
--HG--
branch : 8.0
2026-08-15 08:54:21 +02:00
Cédric Krier 6f44a6d448 Prepare release sale_blanket_agreement-8.0.2
--HG--
branch : 8.0
2026-08-15 08:54:20 +02:00
Cédric Krier fd1c8d9609 Increase version number
--HG--
branch : 8.0
2026-08-15 08:51:30 +02:00
Cédric Krier a946f5a021 Add tag web_shop_shopify-8.0.5
--HG--
branch : 8.0
2026-08-15 08:51:20 +02:00
Cédric Krier 730cf3b2db Prepare release web_shop_shopify-8.0.5
--HG--
branch : 8.0
2026-08-15 08:51:18 +02:00
Cédric Krier fbe9b2c351 Increase version number
--HG--
branch : 8.0
2026-08-15 08:47:00 +02:00
Cédric Krier 1f21c54b77 Add tag sao-8.0.9
--HG--
branch : 8.0
2026-08-15 08:45:48 +02:00
Cédric Krier babab249a5 Prepare release sao-8.0.9
--HG--
branch : 8.0
2026-08-15 08:45:47 +02:00
Cédric Krier 115166a283 Increase version number
--HG--
branch : 8.0
2026-08-15 08:44:03 +02:00
Cédric Krier 34d5fb574f Add tag tryton-8.0.8
--HG--
branch : 8.0
2026-08-15 08:43:50 +02:00
Cédric Krier 7f65852dc4 Prepare release tryton-8.0.8
--HG--
branch : 8.0
2026-08-15 08:43:49 +02:00
Cédric Krier dce539cb3b Increase version number
--HG--
branch : 8.0
2026-08-15 08:41:44 +02:00
Cédric Krier bf2fbcc13e Add tag trytond-8.0.9
--HG--
branch : 8.0
2026-08-15 08:41:30 +02:00
Cédric Krier e51692ba4a Prepare release trytond-8.0.9
--HG--
branch : 8.0
2026-08-15 08:41:29 +02:00
Cédric Krier ed4b02ba77 Do not rely on shipments order from sale in test scenario
Closes #15009
(grafted from 5996cbb65d20057bd93e5ddfdf97cafe8e4c4529)

--HG--
branch : 8.0
2026-08-13 23:44:29 +02:00
Cédric Krier 228e760ab9 Set Shopify warehouse on sale line only if it has changed
Closes #14995
(grafted from 2c1a865682ab07758f4b9319f47cfc2b51df1a83)

--HG--
branch : 8.0
2026-08-06 10:52:54 +02:00
Cédric Krier f5b81e02f7 Validate current record before switching to next/previous record in window form
Closes #14994
(grafted from 9711708ebcd6242e98a4602da530369f176d6654)

--HG--
branch : 8.0
2026-08-05 17:39:38 +02:00
Cédric Krier 5fbf6bbda4 Hide unstructured street of address when building name is filled
Closes #14993
(grafted from 8ac6e6b2185903fc73f73c7cd975c2ce3eeb69be)

--HG--
branch : 8.0
2026-08-05 11:08:08 +02:00
Cédric Krier 0df7c4f64e Get Shopify order ID from the order_edit key for orders/edited topic
Closes #14992
(grafted from 1f42932a73656afed484a06e103874aa01e87d0a)

--HG--
branch : 8.0
2026-08-05 10:39:35 +02:00
Cédric Krier 2039d0061e Use webhook secret to verify Shopify webhook
Closes #14989
(grafted from 44d5d7ae9388dfb58c105fc52d582a5aa2f99cd2)

--HG--
branch : 8.0
2026-08-04 17:32:47 +02:00
Cédric Krier 1f807e9dd5 Convert request headers to dict and body as text to verify Shopify webhook
Closes #14991
(grafted from ce9159ad0fd6e129ddacd0db930a8e4f67279a33)

--HG--
branch : 8.0
2026-08-05 10:07:54 +02:00
Cédric Krier c0b0999cb0 Fill code compact in party identifier history table
Closes #14983
(grafted from 0d8ca8201d1b54f4f34fb27992b31ce15b276ad2)

--HG--
branch : 8.0
2026-08-03 12:26:11 +02:00
Cédric Krier 0565805d5b Raise PeppolServiceError when missing sender or recipient for Peppyrus submission
Closes #14999
(grafted from 53f956b55465ca2c1d0c60445ba2b65c359b1da1)

--HG--
branch : 8.0
2026-08-06 15:59:39 +02:00
Cédric Krier 9ae6333656 Do not try to update status of Peppyrus document without transmission ID
Closes #14998
(grafted from 27108e7beebfb2c68b9caad5add3456310fe9c9f)

--HG--
branch : 8.0
2026-08-06 15:55:46 +02:00
Cédric Krier dfb345dc86 Use boolean operator to test remaining quantity of blanket agreement when closing
The remaining quantity may be None if the line has no quantity set.
But the getter ensure that the remaining quantity is always greater or equal to 0.

Closes #14987
(grafted from 640dfcc6d6d36f3fbbf8d232c760ea1c560c996d)

--HG--
branch : 8.0
2026-08-04 14:43:53 +02:00
Cédric Krier b20163f6b9 Store Peppyrus message using service instance instead of class
Closes #14990
(grafted from 85c2d0b69b01250cd2c7c21eb16a4b86c550edc3)

--HG--
branch : 8.0
2026-08-05 07:08:27 +02:00
Cédric Krier 566cd48cd6 Use request data property to parse form data as json
Closes #14984
(grafted from a9624e36e318273942bb1eed3e0258497d7d9f15)

--HG--
branch : 8.0
2026-08-04 07:49:57 +02:00
Cédric Krier 301a3b3841 Use https for namespaces for currency rate from Romanian National Bank
Closes #14986
(grafted from a7bb08629b6172df9e2b249cf15c84ce875f2d85)

--HG--
branch : 8.0
2026-08-04 14:34:23 +02:00
Cédric Krier 16634b1d01 Update hostname of Romanian National Bank URL
Closes #15001
(grafted from 2c59c7615b52526b627b7416f2e315f96d54a430)

--HG--
branch : 8.0
2026-08-10 09:21:25 +02:00
Nicolas Évrard aaf8203d44 Skip translation refering to unknown XML ID or unactivated source
Closes #12969
(grafted from 563cb007e55c30ed03e3fb4eb74b623bfa8fd6e1)

--HG--
branch : 8.0
2024-01-29 18:47:56 +01:00
Cédric Krier fd71ce229d Do not set width and height to 100% for <img/> of document
Closes #14979
(grafted from 9f966d1051f17bbcf09959daf3fab1e1f28cff36)

--HG--
branch : 8.0
2026-07-30 16:20:47 +02:00
Adrià Tarroja Caubet f7350f8b9d Add rpc suffix when retrying JSONRPC request
Closes #14985
(grafted from 314f4ccf52ed64542796e4cad288ef655d274b0c)

--HG--
branch : 8.0
2026-08-06 14:55:18 +02:00
Cédric Krier f3f7f0c2cb Do not set twice the extension in the attachment name for the UBL documents
Closes #14982
(grafted from a7bc04a0430d1c0ee7503b1148c611c65659a633)

--HG--
branch : 8.0
2026-08-01 10:49:03 +02:00
Cédric Krier fcb95aa409 Do not compare to None PaymentDueDate value from findtext
It is not necessary because findtext returns a string.
(grafted from e1801f15caaa2bb23d2d8ba38483617977658bd8)

--HG--
branch : 8.0
2026-08-01 00:57:28 +02:00
Cédric Krier 6bf439f496 Use DueDate as fallback for payment term date for UBL without payment terms
Closes #14981
(grafted from df7119de4a976b2d12c884c6d3f0a2c5f2a67174)

--HG--
branch : 8.0
2026-08-01 00:56:10 +02:00
Cédric Krier 187fc8a245 Normalize the quantity before calculating the number of digits when parsing UBL
Trailing zero in the quantity should not require a bigger precision for the
unit.

Closes #14973
(grafted from 763adbca3986db5acffd5631821fe9647bb5b2f4)

--HG--
branch : 8.0
2026-07-28 19:27:57 +02:00
Cédric Krier ad7f66c3ca Increase version number
--HG--
branch : 8.0
2026-08-04 12:24:26 +02:00
Cédric Krier 4a7e50ec89 Add tag account_payment_sepa-8.0.2
--HG--
branch : 8.0
2026-08-04 12:24:16 +02:00
Cédric Krier a75a0ef051 Prepare release account_payment_sepa-8.0.2
--HG--
branch : 8.0
2026-08-04 12:24:15 +02:00
Cédric Krier 6ba01738dc Increase version number
--HG--
branch : 8.0
2026-08-04 12:23:31 +02:00
Cédric Krier a3f204707e Add tag account_payment_sepa_cfonb-8.0.1
--HG--
branch : 8.0
2026-08-04 12:23:22 +02:00
Cédric Krier af560a0616 Prepare release account_payment_sepa_cfonb-8.0.1
--HG--
branch : 8.0
2026-08-04 12:23:21 +02:00
Cédric Krier 69eb28b6bd Increase version number
--HG--
branch : 8.0
2026-08-04 12:22:09 +02:00
Cédric Krier b9decb49e0 Add tag account_statement-8.0.1
--HG--
branch : 8.0
2026-08-04 12:21:59 +02:00
Cédric Krier e94f778931 Prepare release account_statement-8.0.1
--HG--
branch : 8.0
2026-08-04 12:21:58 +02:00
Cédric Krier b7bd7e7f2f Increase version number
--HG--
branch : 8.0
2026-08-04 12:20:41 +02:00
Cédric Krier f40fa19a00 Add tag authentication_saml-8.0.1
--HG--
branch : 8.0
2026-08-04 12:20:32 +02:00
Cédric Krier 142c804617 Prepare release authentication_saml-8.0.1
--HG--
branch : 8.0
2026-08-04 12:20:31 +02:00
Cédric Krier d5c3e087c1 Increase version number
--HG--
branch : 8.0
2026-08-04 12:20:07 +02:00
Cédric Krier 1615dde089 Add tag edocument_peppol-8.0.1
--HG--
branch : 8.0
2026-08-04 12:19:58 +02:00
Cédric Krier fde5fd9268 Prepare release edocument_peppol-8.0.1
--HG--
branch : 8.0
2026-08-04 12:19:57 +02:00
Cédric Krier d9462cabab Increase version number
--HG--
branch : 8.0
2026-08-04 12:18:37 +02:00
Cédric Krier e9fac866bc Add tag edocument_ubl-8.0.3
--HG--
branch : 8.0
2026-08-04 12:18:27 +02:00
Cédric Krier a1c934e4bc Prepare release edocument_ubl-8.0.3
--HG--
branch : 8.0
2026-08-04 12:18:26 +02:00
Cédric Krier b2f1db2cb4 Increase version number
--HG--
branch : 8.0
2026-08-04 12:17:36 +02:00
Cédric Krier baf5d2442d Add tag edocument_uncefact-8.0.2
--HG--
branch : 8.0
2026-08-04 12:17:26 +02:00
Cédric Krier 87b8b49ea9 Prepare release edocument_uncefact-8.0.2
--HG--
branch : 8.0
2026-08-04 12:17:24 +02:00
Cédric Krier 11c2e06b33 Increase version number
--HG--
branch : 8.0
2026-08-04 12:15:32 +02:00
Cédric Krier 64cd2072d8 Add tag production_outsourcing-8.0.1
--HG--
branch : 8.0
2026-08-04 12:15:21 +02:00
Cédric Krier 5f4eda7ad4 Prepare release production_outsourcing-8.0.1
--HG--
branch : 8.0
2026-08-04 12:15:19 +02:00
Cédric Krier 0610b5cee0 Increase version number
--HG--
branch : 8.0
2026-08-04 12:12:25 +02:00
Cédric Krier c5713f537d Add tag sale-8.0.3
--HG--
branch : 8.0
2026-08-04 12:12:14 +02:00
Cédric Krier 576c8cedbf Prepare release sale-8.0.3
--HG--
branch : 8.0
2026-08-04 12:12:13 +02:00
Cédric Krier 9c7f34a2f9 Increase version number
--HG--
branch : 8.0
2026-08-04 12:10:59 +02:00
Cédric Krier 3815e21b65 Add tag sale_supply_production-8.0.1
--HG--
branch : 8.0
2026-08-04 12:10:50 +02:00
Cédric Krier 3a46ef6428 Prepare release sale_supply_production-8.0.1
--HG--
branch : 8.0
2026-08-04 12:10:49 +02:00
Cédric Krier 6db695375e Increase version number
--HG--
branch : 8.0
2026-08-04 12:09:57 +02:00
Cédric Krier 6f6d28dd69 Add tag stock_lot-8.0.3
--HG--
branch : 8.0
2026-08-04 12:09:47 +02:00
Cédric Krier e1b1bb7ea6 Prepare release stock_lot-8.0.3
--HG--
branch : 8.0
2026-08-04 12:09:46 +02:00
Cédric Krier e13098476e Increase version number
--HG--
branch : 8.0
2026-08-04 12:08:26 +02:00
Cédric Krier d40b24b2c1 Add tag web_shop_shopify-8.0.4
--HG--
branch : 8.0
2026-08-04 12:08:17 +02:00
Cédric Krier bfa41840f6 Prepare release web_shop_shopify-8.0.4
--HG--
branch : 8.0
2026-08-04 12:08:15 +02:00
Cédric Krier 459bc5c1fc Increase version number
--HG--
branch : 8.0
2026-08-04 12:06:50 +02:00
Cédric Krier d653ada28f Add tag sao-8.0.8
--HG--
branch : 8.0
2026-08-04 12:06:32 +02:00
Cédric Krier e45d0e6641 Prepare release sao-8.0.8
--HG--
branch : 8.0
2026-08-04 12:06:31 +02:00
Cédric Krier 210659bace Increase version number
--HG--
branch : 8.0
2026-08-04 12:04:55 +02:00
Cédric Krier 0c1644aaf3 Add tag trytond-8.0.8
--HG--
branch : 8.0
2026-08-04 12:04:40 +02:00
Cédric Krier 26fe37f297 Prepare release trytond-8.0.8
--HG--
branch : 8.0
2026-08-04 12:04:39 +02:00
Cédric Krier c3af1a9ad6 Restrict protocols allowed for weasyprint to http(s)
Closes #14947
(grafted from 7c72806c98c07bb4ccb1f5f1b84954350541ec3a)

--HG--
branch : 8.0
2026-08-04 10:38:45 +02:00
Cédric Krier 5db52f470f Clear Shopify ID for product template no more found on Shopify
If the Shopify ID of a template can not be found on Shopify, there is no need
to keep it as we could not reactivate the Shopify product it is added back.

Closes #14980
(grafted from eb5fcd8c8ed278f9eba8f65e89f07dd3beafe4c3)

--HG--
branch : 8.0
2026-07-30 16:37:30 +02:00
Cédric Krier f33ae566f3 Do not set a shipment cost method for Shopify order without shipping line
Without a shipping line, there is no carrier selected and thus no shipment cost
method to set.

Closes #14976
(grafted from 313b466eb1c55ac922819a5b66dc49e081e85064)

--HG--
branch : 8.0
2026-07-29 19:30:48 +02:00
Cédric Krier 234ca3f7fd Set button decorator of update Peppol status to a different method than the cron
The `ModelView.button` decorator requires to be called with a list of records
which the cron does not do.

Closes #14972
(grafted from d3bdcee315895e3fc4a636c14dad5ba592912c59)

--HG--
branch : 8.0
2026-07-28 19:23:07 +02:00
Nicolas Évrard 86e58a889e Set the utc flag on Sao.Date
Closes #14510
(grafted from 7f19398f376080795764e089e2a87c3eaa0feda8)

--HG--
branch : 8.0
2026-07-27 10:39:01 +02:00
Cédric Krier 9cc8e5f215 Clear the value of input select once data has been read
The display does not clear the input if the current record is changed so we
must ensure that the input is always empty once file has been selected.

Closes #14482
(grafted from 759ffbf53e83eb67855b929aaf0274826e1b1fb5)

--HG--
branch : 8.0
2026-07-27 10:59:31 +02:00
Cédric Krier 5653c0d164 Use Text field for HTML content of report record
The field must contain strings in order to allow edition with the HTML editor.

Closes #14922
(grafted from 73b5636cf6abe1ea23f05bab04772129a5178e11)

--HG--
branch : 8.0
2026-07-24 16:10:12 +02:00
Cédric Krier e50e358b93 Make statement lines readonly when origins are filled
Closes #14965
(grafted from ad46e99cf76bee15373625a6ea0ec4e57a58ff06)

--HG--
branch : 8.0
2026-07-22 12:28:03 +02:00
Cédric Krier 3557e7845a Remove unused class parameter in the function to find move for stock lot
The function is called only when the state as parameter.

Closes #14963
(grafted from 3cb38ab5ba4a2321cab4bf5f2954e4842a1c733d)

--HG--
branch : 8.0
2026-07-21 19:14:20 +02:00
Cédric Krier b5a51b997d Use external parameter to activate the check for lot modification without move
#14963
(grafted from 2b4cfc5dd62800298f218bf8c850de8d3f1e1295)

--HG--
branch : 8.0
2026-07-21 19:12:14 +02:00
Cédric Krier 526519b6c9 Calculate the number of parameters in INSERT query using the columns list
The column names list does not contain the create_uid nor create_date columns
instead of columns list.

Closes #14800
(grafted from 090325cb8d9f26f30613a890a02c1c339b370082)

--HG--
branch : 8.0
2026-07-23 11:37:36 +02:00
Nicolas Évrard 04e4b187bc Add login_service value when the redirection URL misses it
Closes #14893
(grafted from 71ff74ce33b49ee8639c3bac8ce43bf7ec3a627e)

--HG--
branch : 8.0
2026-06-11 21:30:46 +02:00
Cédric Krier 906f98ebf9 Prevent switching row when double click on Many2One link
Closes #14967
(grafted from e8c236df31219bfe19c1e73e4254863fa3ef2d46)

--HG--
branch : 8.0
2026-07-23 18:27:41 +02:00
Cédric Krier ea67ca4242 Always use the shipment address of the sale as delivery address for the shipment
The warehouse on the sale is not always filled instead it is the the warehouse
of the shipment that must be used for the comparison. But this makes the test
useless as the shipment address is always used ad delivery address.

Closes #14954
(grafted from d414eccc0ad58a86ba4083f5c5f427b4e41edee7)

--HG--
branch : 8.0
2026-07-13 18:26:34 +02:00
Adrià Tarroja Caubet 9bc74a5eea Do not create a production request when quantities are the same
If the available quantity is exactly the same as the quantity sold, there is no
need to create a production request.

Closes #14585
(grafted from 61abfaa01954f661128f014171686a6512ffe630)

--HG--
branch : 8.0
2026-07-24 10:12:57 +02:00
Cédric Krier 14503c1683 Compare tab against view index less or equals to 0
The view index may be -1 is the view is not yet displayed.

Closes #14961
(grafted from 7267bae222e053d7ebfb59981ee13ae941b469dd)

--HG--
branch : 8.0
2026-07-17 12:58:29 +02:00
Cédric Krier 2e206dba7e Allow npm to run puppeteer scripts
Closes #14960
(grafted from bcfbef3830fe4c4f4e2cd6eb8ea855787bf19cd2)

--HG--
branch : 8.0
2026-07-17 11:40:28 +02:00
Cédric Krier f505cd0ade Do not create a purchase line for outsourced production with already one
Closes #14759
(grafted from 0985df4c4cf2226455d082ecfe33636d97cea42d)

--HG--
branch : 8.0
2026-07-16 15:57:11 +02:00
Cédric Krier 9a555676f3 Raise the final exception when all retries of Shopify request has failed
(grafted from b0fef2fdbe01bb7a7fc4f7d6032b9ab6ef61160c)

--HG--
branch : 8.0
2026-07-21 17:33:03 +02:00
Cédric Krier 062b38f1ce Use dict.get instead of getattr to retrieve user errors from Shopify request
The GraphQL library returns dict instead of object.

Closes #14964
(grafted from 4ec0ec9f0ae00251716f1e731c1d936857151fd9)

--HG--
branch : 8.0
2026-07-21 17:32:21 +02:00
Cédric Krier 033e35cd88 Format numeric values in XML templates using fixed-point notation
Closes #14948
(grafted from 6cb75123ee20de6cf90ff1bbd6189b64e4d1f739)

--HG--
branch : 8.0
2026-07-15 18:07:22 +02:00
Cédric Krier ad202c716c Update Shopify product if any variant of the product has been removed
Closes #14955
(grafted from 4b3c250361bcf6ba7289665e2ca6ccf9b19ef939)

--HG--
branch : 8.0
2026-07-14 17:07:07 +02:00
Cédric Krier 57e8b983b7 Use binary version of psycopg for tests
(grafted from 7868852522d26ff069aebcc03ae73d98abe97879)

--HG--
branch : 8.0
2026-07-17 22:11:32 +02:00
Cédric Krier db9d78dbe5 Increase version number
--HG--
branch : 8.0
2026-07-15 19:39:41 +02:00
Cédric Krier 612543376d Add tag account-8.0.3
--HG--
branch : 8.0
2026-07-15 19:39:23 +02:00
Cédric Krier e648ec687b Prepare release account-8.0.3
--HG--
branch : 8.0
2026-07-15 19:39:20 +02:00
Cédric Krier f710769d2a Increase version number
--HG--
branch : 8.0
2026-07-15 19:35:40 +02:00
Cédric Krier 1be1db0c45 Add tag account_invoice-8.0.1
--HG--
branch : 8.0
2026-07-15 19:35:23 +02:00
Cédric Krier b8e928e64f Prepare release account_invoice-8.0.1
--HG--
branch : 8.0
2026-07-15 19:35:21 +02:00
Cédric Krier 3ee22e634c Increase version number
--HG--
branch : 8.0
2026-07-15 19:32:28 +02:00
Cédric Krier 5f0ab67c1c Add tag analytic_account-8.0.1
--HG--
branch : 8.0
2026-07-15 19:32:13 +02:00
Cédric Krier e1e98f2d3e Prepare release analytic_account-8.0.1
--HG--
branch : 8.0
2026-07-15 19:32:10 +02:00
Cédric Krier d530131abc Increase version number
--HG--
branch : 8.0
2026-07-15 19:28:42 +02:00
Cédric Krier 3132f20847 Add tag commission-8.0.1
--HG--
branch : 8.0
2026-07-15 19:28:26 +02:00
Cédric Krier ba929c5fed Prepare release commission-8.0.1
--HG--
branch : 8.0
2026-07-15 19:28:23 +02:00
Cédric Krier be62a5c63b Increase version number
--HG--
branch : 8.0
2026-07-15 19:27:04 +02:00
Cédric Krier 2c3a2c825e Add tag edocument_ubl-8.0.2
--HG--
branch : 8.0
2026-07-15 19:26:47 +02:00
Cédric Krier ae566e50e5 Prepare release edocument_ubl-8.0.2
--HG--
branch : 8.0
2026-07-15 19:26:45 +02:00
Cédric Krier 59abcc5a74 Increase version number
--HG--
branch : 8.0
2026-07-15 19:24:31 +02:00
Cédric Krier b802490385 Add tag party-8.0.2
--HG--
branch : 8.0
2026-07-15 19:24:16 +02:00
Cédric Krier dab9304250 Prepare release party-8.0.2
--HG--
branch : 8.0
2026-07-15 19:24:14 +02:00
Cédric Krier e1a3a2c577 Increase version number
--HG--
branch : 8.0
2026-07-15 19:21:03 +02:00
Cédric Krier 25792381cf Add tag product-8.0.1
--HG--
branch : 8.0
2026-07-15 19:20:42 +02:00
Cédric Krier b4da84fc7d Prepare release product-8.0.1
--HG--
branch : 8.0
2026-07-15 19:20:39 +02:00
Cédric Krier 8618038bc5 Increase version number
--HG--
branch : 8.0
2026-07-15 19:19:52 +02:00
Cédric Krier f9621cf9a4 Add tag project-8.0.4
--HG--
branch : 8.0
2026-07-15 19:19:31 +02:00
Cédric Krier e6f97dfaaa Prepare release project-8.0.4
--HG--
branch : 8.0
2026-07-15 19:19:27 +02:00
Cédric Krier 3769a2295b Increase version number
--HG--
branch : 8.0
2026-07-15 19:17:01 +02:00
Cédric Krier 3b63b628b1 Add tag purchase-8.0.1
--HG--
branch : 8.0
2026-07-15 19:16:39 +02:00
Cédric Krier d3f1c6218a Prepare release purchase-8.0.1
--HG--
branch : 8.0
2026-07-15 19:16:36 +02:00
Cédric Krier 5ab3a7e3b7 Increase version number
--HG--
branch : 8.0
2026-07-15 19:13:47 +02:00
Cédric Krier 387f8c83e6 Add tag purchase_blanket_agreement-8.0.1
--HG--
branch : 8.0
2026-07-15 19:13:22 +02:00
Cédric Krier e7931f44eb Prepare release purchase_blanket_agreement-8.0.1
--HG--
branch : 8.0
2026-07-15 19:13:17 +02:00
Cédric Krier e417e12d1b Increase version number
--HG--
branch : 8.0
2026-07-15 19:10:06 +02:00
Cédric Krier 3125a5c78a Add tag purchase_request-8.0.1
--HG--
branch : 8.0
2026-07-15 19:09:50 +02:00
Cédric Krier b99aa08060 Prepare release purchase_request-8.0.1
--HG--
branch : 8.0
2026-07-15 19:09:48 +02:00
Cédric Krier e0fe7fa3c4 Increase version number
--HG--
branch : 8.0
2026-07-15 19:06:29 +02:00
Cédric Krier c45c799b3a Add tag purchase_request_quotation-8.0.2
--HG--
branch : 8.0
2026-07-15 19:06:14 +02:00
Cédric Krier aae4c86fdc Prepare release purchase_request_quotation-8.0.2
--HG--
branch : 8.0
2026-07-15 19:06:12 +02:00
Cédric Krier 37c7be9f3c Increase version number
--HG--
branch : 8.0
2026-07-15 19:05:01 +02:00
Cédric Krier a5a5a522a0 Add tag quality-8.0.1
--HG--
branch : 8.0
2026-07-15 19:04:46 +02:00
Cédric Krier 803422ec40 Prepare release quality-8.0.1
--HG--
branch : 8.0
2026-07-15 19:04:43 +02:00
Cédric Krier c037590252 Increase version number
--HG--
branch : 8.0
2026-07-15 19:02:26 +02:00
Cédric Krier ee81071e40 Add tag sale-8.0.2
--HG--
branch : 8.0
2026-07-15 19:02:11 +02:00
Cédric Krier 25852c3842 Prepare release sale-8.0.2
--HG--
branch : 8.0
2026-07-15 19:02:08 +02:00
Cédric Krier 4ed5630816 Increase version number
--HG--
branch : 8.0
2026-07-15 19:00:47 +02:00
Cédric Krier bef278413b Add tag sale_blanket_agreement-8.0.1
--HG--
branch : 8.0
2026-07-15 19:00:32 +02:00
Cédric Krier 9f7eea2431 Prepare release sale_blanket_agreement-8.0.1
--HG--
branch : 8.0
2026-07-15 19:00:30 +02:00
Cédric Krier be7a983e3b Increase version number
--HG--
branch : 8.0
2026-07-15 18:57:50 +02:00
Cédric Krier 6bedf56f75 Add tag sale_complaint-8.0.1
--HG--
branch : 8.0
2026-07-15 18:57:34 +02:00
Cédric Krier 3f1e16cc27 Prepare release sale_complaint-8.0.1
--HG--
branch : 8.0
2026-07-15 18:57:32 +02:00
Cédric Krier 08575e2744 Increase version number
--HG--
branch : 8.0
2026-07-15 18:54:57 +02:00
Cédric Krier 88f0e7cc9a Add tag sale_opportunity-8.0.1
--HG--
branch : 8.0
2026-07-15 18:54:43 +02:00
Cédric Krier 265f56c217 Prepare release sale_opportunity-8.0.1
--HG--
branch : 8.0
2026-07-15 18:54:41 +02:00
Cédric Krier 2669475781 Increase version number
--HG--
branch : 8.0
2026-07-15 18:52:18 +02:00
Cédric Krier 1a77a1aa8c Add tag sale_rental-8.0.1
--HG--
branch : 8.0
2026-07-15 18:52:04 +02:00
Cédric Krier 8cbcd1cddc Prepare release sale_rental-8.0.1
--HG--
branch : 8.0
2026-07-15 18:52:01 +02:00
Cédric Krier 659b1b561b Increase version number
--HG--
branch : 8.0
2026-07-15 18:49:39 +02:00
Cédric Krier 005691acf3 Add tag sale_subscription-8.0.1
--HG--
branch : 8.0
2026-07-15 18:49:16 +02:00
Cédric Krier 7e2a711598 Prepare release sale_subscription-8.0.1
--HG--
branch : 8.0
2026-07-15 18:49:13 +02:00
Cédric Krier 1ef1c0b79d Increase version number
--HG--
branch : 8.0
2026-07-15 18:45:37 +02:00
Cédric Krier 777a92ba68 Add tag stock-8.0.3
--HG--
branch : 8.0
2026-07-15 18:45:23 +02:00
Cédric Krier d07d7822ba Prepare release stock-8.0.3
--HG--
branch : 8.0
2026-07-15 18:45:21 +02:00
Cédric Krier 26b4f6759b Increase version number
--HG--
branch : 8.0
2026-07-15 18:42:05 +02:00
Cédric Krier 91398822b8 Add tag stock_lot_sled-8.0.1
--HG--
branch : 8.0
2026-07-15 18:41:53 +02:00
Cédric Krier 8f7b5c7760 Prepare release stock_lot_sled-8.0.1
--HG--
branch : 8.0
2026-07-15 18:41:51 +02:00
Cédric Krier fe86ee5c02 Increase version number
--HG--
branch : 8.0
2026-07-15 18:41:00 +02:00
Cédric Krier 660f3d80dc Add tag stock_package_shipping_ups-8.0.1
--HG--
branch : 8.0
2026-07-15 18:40:48 +02:00
Cédric Krier d1969bb069 Prepare release stock_package_shipping_ups-8.0.1
--HG--
branch : 8.0
2026-07-15 18:40:46 +02:00
Cédric Krier 4e7bc6a67d Increase version number
--HG--
branch : 8.0
2026-07-15 18:37:27 +02:00
Cédric Krier 8614a49e00 Add tag web_shop_shopify-8.0.3
--HG--
branch : 8.0
2026-07-15 18:37:15 +02:00
Cédric Krier 99e94ab2cf Prepare release web_shop_shopify-8.0.3
--HG--
branch : 8.0
2026-07-15 18:37:13 +02:00
Cédric Krier 0685bd8fb8 Increase version number
--HG--
branch : 8.0
2026-07-15 18:35:22 +02:00
Cédric Krier e1eceab8d3 Add tag web_user-8.0.1
--HG--
branch : 8.0
2026-07-15 18:35:10 +02:00
Cédric Krier 6fe9045af4 Prepare release web_user-8.0.1
--HG--
branch : 8.0
2026-07-15 18:35:08 +02:00
Cédric Krier 41ef4d8c8a Increase version number
--HG--
branch : 8.0
2026-07-15 18:31:35 +02:00
Cédric Krier 8d6ea91680 Add tag sao-8.0.7
--HG--
branch : 8.0
2026-07-15 18:30:35 +02:00
Cédric Krier 18a0e3d1c7 Prepare release sao-8.0.7
--HG--
branch : 8.0
2026-07-15 18:30:33 +02:00
Cédric Krier 0f42a996c7 Increase version number
--HG--
branch : 8.0
2026-07-15 18:25:21 +02:00
Cédric Krier 2dacde3147 Add tag tryton-8.0.7
--HG--
branch : 8.0
2026-07-15 18:25:05 +02:00
Cédric Krier 8d5f02af26 Prepare release tryton-8.0.7
--HG--
branch : 8.0
2026-07-15 18:25:04 +02:00
Cédric Krier 2646cbca09 Increase version number
--HG--
branch : 8.0
2026-07-15 18:22:36 +02:00
Cédric Krier 5caae74809 Add tag trytond-8.0.7
--HG--
branch : 8.0
2026-07-15 18:22:22 +02:00
Cédric Krier 5b6cba6453 Prepare release trytond-8.0.7
--HG--
branch : 8.0
2026-07-15 18:22:21 +02:00
Cédric Krier a7021ec8dd Set an UPS account number to the custom agent in test scenario
#14876
(grafted from a7803b7036e7dad73a932d0483a03f51e734a95d)

--HG--
branch : 8.0
2026-07-13 17:25:29 +02:00
Cédric Krier d413651001 Bill duties and charges to the customs agent for UPS shipment charges
Closes #14876
(grafted from e04bd7218a1bd78bc27439c7995ba5decbb48415)

--HG--
branch : 8.0
2026-06-03 16:01:25 +02:00
Cédric Krier 8e82e83f86 Remove only lot expiring in the future
Closes #13901
(grafted from 54977ca200c0448d05cb19ba43c6dbff45742e4a)

--HG--
branch : 8.0
2025-03-04 22:05:19 +01:00
Cédric Krier e28e1ead48 Return Gateway Timeout instead of Request Timeout for database timeout
Closes #14945
(grafted from ae46da1d0ab434dda58b54070e1faa2a72974935)

--HG--
branch : 8.0
2026-07-08 22:12:42 +02:00
Cédric Krier 755b173a77 Add missing duration argument to database timeout warning
Closes #14944
(grafted from 8a86ff7389e0f759ebb07b6738e24c3e7a4ae309)

--HG--
branch : 8.0
2026-07-08 22:23:38 +02:00
Cédric Krier 5c5cc2609d Center checkbox in editable tree
For the auto margin to center the input, it must be displayed as block without
float.

Closes #14942
(grafted from 99d59e3b76a7f11c65adea228345fe24571ed510)

--HG--
branch : 8.0
2026-07-08 14:59:54 +02:00
Cédric Krier 70592e8e91 Add a refund line for Shopify refund that are not linked to items
Closes #14875
(grafted from 158941e2a9d5ad0097e755e6602f7d168333559a)

--HG--
branch : 8.0
2026-06-16 20:40:21 +02:00
Cédric Krier c44fb4dbd3 Process Shopify sale only if the authorized payment amount is greater than the amount to pay
The correction of #14816 was wrong and the amount to pay should be modified if
there is a global refund.
(grafted from dfbbbe26ad8eb25fd6dc1ad0a68cb7cec8307aae)

--HG--
branch : 8.0
2026-06-03 15:06:05 +02:00
Cédric Krier 6c5e1f83d9 Add missing error message when no bank account is found when parsing UBL invoice
Closes #14938
(grafted from f26f207f98cf5a0df67124e5677db5b848d52cf5)

--HG--
branch : 8.0
2026-07-08 08:54:37 +02:00
Cédric Krier 5dfb094459 Select the first supplier when all suppliers have the same maximum supply date
Since all suppliers have the same supply delay, the order must be used for
selection.

Closes #14939
(grafted from c4f986450d75ba8211ea9e3523de8d3b01f908b0)

--HG--
branch : 8.0
2026-07-08 09:19:35 +02:00
Cédric Krier 1d532143b5 Use NullConnectionPool for the default database
The default database is template1 which is usually used to create new database.
Keeping a pool of connection open on it prevents the creation of new database
because exclusive access is needed on the template.

Closes #14935
(grafted from 20781078a519c45a7a1f70b0074c6abcb1a89589)

--HG--
branch : 8.0
2026-07-06 19:34:24 +02:00
Cédric Krier ca0def6021 Put agent field in sale form on a new line
This prevents to break the layout of other modules adding fields to the same
tab.

Closes #14934
(grafted from f9fb03a42e7c55c33072181b0ec48ac5469495f1)

--HG--
branch : 8.0
2026-07-06 19:15:08 +02:00
Cédric Krier 402c9fa20b Permit __url__ and __href__ attribute usage in Genshi evaluation
Closes #14932
(grafted from 936431c951bb4eb9d17c399445c6cacf7dcb8626)

--HG--
branch : 8.0
2026-07-06 09:07:08 +02:00
Cédric Krier 945099dc67 Set danger visual on supplier invoice when amount to pay is greater than 0
The amount to pay is always positive so the test must be "greater than 0".

Closes #14925
(grafted from e4e920cb9e7d2a2f3bfa86fad4e8c3025cb78828)

--HG--
branch : 8.0
2026-07-02 16:38:57 +02:00
Cédric Krier ebd18b5716 Do not dumps/loads context domain in URL
The context domain must be evaluated only by the screen when doing a domain
search.

Closes #14921
(grafted from dbad6143d6d085b448b71e446b546e488d45cf55)

--HG--
branch : 8.0
2026-07-08 15:03:35 +02:00
Cédric Krier 1a1840670d Include context domain in URL and tab comparison
Closes #14921
(grafted from 0a37d816a7162d9aadb63ec68f63acf85c938e50)

--HG--
branch : 8.0
2026-07-01 13:16:19 +02:00
Cédric Krier ebed93c61a Define index using COALESCE for nullable Char fields
Closes #14909
(grafted from 525198c97acdd19820d581411b3af0f5bb6e4237)

--HG--
branch : 8.0
2026-07-14 21:14:05 +02:00
Cédric Krier 856461f693 Do not apply COALESCE on required Char
Closes #14909
(grafted from 776fe202ed6fd03b690948cf4e2dabc2fd28bbc4)

--HG--
branch : 8.0
2026-06-24 22:06:59 +02:00
Adrià Tarroja Caubet 06c8db564e Add a comma between 'set' and 'slice' in the Genshi allowed builtins
Closes #14928
(grafted from 0255fea9294bed43ca3e42186bdb52c7f22277e1)

--HG--
branch : 8.0
2026-07-04 00:17:12 +02:00
Cédric Krier 6c11480447 Replace getattr by hasattr in general journal report
Closes #14929
(grafted from 7e1c7cb2a0f2d3013bb83388b0212fa32a0f6c25)

--HG--
branch : 8.0
2026-07-03 13:37:38 +02:00
Cédric Krier 86f4b3fe5d Use package name as start directory for tox unittest when using prefix
Closes #14926
(grafted from 0aea18c5ecbb6fb59311a1dc4bcb3b52ed0132b7)

--HG--
branch : 8.0
2026-07-02 22:59:30 +02:00
Sergi Almacellas Abellana f0f33749ee Return False when scanning code fails instead of using an invalid empty list
Closes #14923
(grafted from c825df1c785d0cfa15be7c1748716f8dd1a6149d)

--HG--
branch : 8.0
2026-07-03 15:31:25 +02:00
Nicolas Évrard aeac50c908 Find the page in the direct children only
Closes #14918
(grafted from 52faa4f70a4769ec80560b5b9e2b4eec0a94e267)

--HG--
branch : 8.0
2026-06-30 22:03:11 +02:00
Cédric Krier 29ba2841bd Increase version number
--HG--
branch : 8.0
2026-07-01 23:12:37 +02:00
Cédric Krier ef49d7be94 Add tag account-8.0.2
--HG--
branch : 8.0
2026-07-01 23:12:27 +02:00
Cédric Krier f20acc5f91 Prepare release account-8.0.2
--HG--
branch : 8.0
2026-07-01 23:12:26 +02:00
Cédric Krier 8d7aba7191 Increase version number
--HG--
branch : 8.0
2026-07-01 23:11:17 +02:00
Cédric Krier f08153635c Add tag account_payment_braintree-8.0.1
--HG--
branch : 8.0
2026-07-01 23:11:08 +02:00
Cédric Krier 55621de0e4 Prepare release account_payment_braintree-8.0.1
--HG--
branch : 8.0
2026-07-01 23:11:07 +02:00
Cédric Krier 6edf2d363c Increase version number
--HG--
branch : 8.0
2026-07-01 23:09:41 +02:00
Cédric Krier 3da5010210 Add tag account_statement_sepa-8.0.1
--HG--
branch : 8.0
2026-07-01 23:09:33 +02:00
Cédric Krier d92dda2232 Prepare release account_statement_sepa-8.0.1
--HG--
branch : 8.0
2026-07-01 23:09:32 +02:00
Cédric Krier 442657562d Increase version number
--HG--
branch : 8.0
2026-07-01 23:07:34 +02:00
Cédric Krier e099d6051f Add tag company-8.0.1
--HG--
branch : 8.0
2026-07-01 23:07:24 +02:00
Cédric Krier 8fa402bae5 Prepare release company-8.0.1
--HG--
branch : 8.0
2026-07-01 23:07:22 +02:00
Cédric Krier cd3d0a6013 Increase version number
--HG--
branch : 8.0
2026-07-01 23:07:00 +02:00
Cédric Krier 788420f05e Add tag edocument_ubl-8.0.1
--HG--
branch : 8.0
2026-07-01 23:06:50 +02:00
Cédric Krier bbdab26822 Prepare release edocument_ubl-8.0.1
--HG--
branch : 8.0
2026-07-01 23:06:49 +02:00
Cédric Krier 10395a09a6 Increase version number
--HG--
branch : 8.0
2026-07-01 23:06:30 +02:00
Cédric Krier b996b30793 Add tag edocument_uncefact-8.0.1
--HG--
branch : 8.0
2026-07-01 23:06:21 +02:00
Cédric Krier 36ac3ec08e Prepare release edocument_uncefact-8.0.1
--HG--
branch : 8.0
2026-07-01 23:06:20 +02:00
Cédric Krier 611f800de2 Increase version number
--HG--
branch : 8.0
2026-07-01 23:03:49 +02:00
Cédric Krier e2b9b89a71 Add tag marketing_automation-8.0.1
--HG--
branch : 8.0
2026-07-01 23:03:40 +02:00
Cédric Krier 5facd05cce Prepare release marketing_automation-8.0.1
--HG--
branch : 8.0
2026-07-01 23:03:38 +02:00
Cédric Krier 559c21863c Increase version number
--HG--
branch : 8.0
2026-07-01 23:01:43 +02:00
Cédric Krier 0c6f2643b3 Add tag marketing_email-8.0.1
--HG--
branch : 8.0
2026-07-01 23:01:35 +02:00
Cédric Krier efb1df65ea Prepare release marketing_email-8.0.1
--HG--
branch : 8.0
2026-07-01 23:01:34 +02:00
Cédric Krier f738c204f0 Increase version number
--HG--
branch : 8.0
2026-07-01 23:00:43 +02:00
Cédric Krier 334ca0dbef Add tag party-8.0.1
--HG--
branch : 8.0
2026-07-01 23:00:34 +02:00
Cédric Krier d3b31848b0 Prepare release party-8.0.1
--HG--
branch : 8.0
2026-07-01 23:00:33 +02:00
Cédric Krier 9423194660 Increase version number
--HG--
branch : 8.0
2026-07-01 22:56:44 +02:00
Cédric Krier ca49059245 Add tag production-8.0.1
--HG--
branch : 8.0
2026-07-01 22:56:35 +02:00
Cédric Krier e0ae6fa5df Prepare release production-8.0.1
--HG--
branch : 8.0
2026-07-01 22:56:34 +02:00
Cédric Krier 8c305d2035 Increase version number
--HG--
branch : 8.0
2026-07-01 22:54:46 +02:00
Cédric Krier a98c6e8a6e Add tag product_kit-8.0.2
--HG--
branch : 8.0
2026-07-01 22:54:37 +02:00
Cédric Krier a7431cc6ed Prepare release product_kit-8.0.2
--HG--
branch : 8.0
2026-07-01 22:54:36 +02:00
Cédric Krier d7c3520f00 Increase version number
--HG--
branch : 8.0
2026-07-01 22:54:03 +02:00
Cédric Krier fe54caa731 Add tag project-8.0.3
--HG--
branch : 8.0
2026-07-01 22:53:54 +02:00
Cédric Krier d686a55272 Prepare release project-8.0.3
--HG--
branch : 8.0
2026-07-01 22:53:53 +02:00
Cédric Krier ba0cbf582b Increase version number
--HG--
branch : 8.0
2026-07-01 22:48:55 +02:00
Cédric Krier 450a3c9cd1 Add tag stock-8.0.2
--HG--
branch : 8.0
2026-07-01 22:48:45 +02:00
Cédric Krier 43d619edb6 Prepare release stock-8.0.2
--HG--
branch : 8.0
2026-07-01 22:48:44 +02:00
Cédric Krier 2ca8c04c37 Increase version number
--HG--
branch : 8.0
2026-07-01 22:46:57 +02:00
Cédric Krier f593f3af39 Add tag stock_lot-8.0.2
--HG--
branch : 8.0
2026-07-01 22:46:48 +02:00
Cédric Krier 565fd8f1d6 Prepare release stock_lot-8.0.2
--HG--
branch : 8.0
2026-07-01 22:46:47 +02:00
Cédric Krier cb4731c94e Increase version number
--HG--
branch : 8.0
2026-07-01 22:45:54 +02:00
Cédric Krier 1f935cf303 Add tag stock_shipment_customs-8.0.1
--HG--
branch : 8.0
2026-07-01 22:45:45 +02:00
Cédric Krier 5f0ccb2a2a Prepare release stock_shipment_customs-8.0.1
--HG--
branch : 8.0
2026-07-01 22:45:44 +02:00
Cédric Krier 663f3db2ef Increase version number
--HG--
branch : 8.0
2026-07-01 22:44:48 +02:00
Cédric Krier e424b2f23e Add tag web_shop_shopify-8.0.2
--HG--
branch : 8.0
2026-07-01 22:44:39 +02:00
Cédric Krier 99f557ebb2 Prepare release web_shop_shopify-8.0.2
--HG--
branch : 8.0
2026-07-01 22:44:38 +02:00
Cédric Krier c473dd0326 Increase version number
--HG--
branch : 8.0
2026-07-01 22:40:52 +02:00
Cédric Krier e88ac36ae6 Add tag sao-8.0.6
--HG--
branch : 8.0
2026-07-01 22:40:29 +02:00
Cédric Krier b085481a78 Prepare release sao-8.0.6
--HG--
branch : 8.0
2026-07-01 22:40:28 +02:00
Cédric Krier 44742bc085 Increase version number
--HG--
branch : 8.0
2026-07-01 22:39:13 +02:00
Cédric Krier 6224efe25e Add tag tryton-8.0.6
--HG--
branch : 8.0
2026-07-01 22:39:01 +02:00
Cédric Krier db2ac3c360 Prepare release tryton-8.0.6
--HG--
branch : 8.0
2026-07-01 22:39:00 +02:00
Cédric Krier f50c692f40 Increase version number
--HG--
branch : 8.0
2026-07-01 22:37:02 +02:00
Cédric Krier a00cec305b Add tag trytond-8.0.6
--HG--
branch : 8.0
2026-07-01 22:36:49 +02:00
Cédric Krier 46364e04ec Prepare release trytond-8.0.6
--HG--
branch : 8.0
2026-07-01 22:36:48 +02:00
Cédric Krier 51bbd71965 Enforce access rights on the email template record on marketing email
Closes #14907
(grafted from 856dea6dca76bd9cd7fa03a3dbe51f160b912e69)

--HG--
branch : 8.0
2026-06-30 23:08:14 +02:00
Cédric Krier de1a30881f Enforce access right on the email template record
Closes #14907
(grafted from d9aa2de5dabe7e39892c41808d56103ea83bf95f)

--HG--
branch : 8.0
2026-06-30 09:48:33 +02:00
Cédric Krier 24fd5e11de Enforce access rights on the email template record of marketing automation
Closes #14907
(grafted from 5c64e83a573ce01423a4d65a25fe704b39a43306)

--HG--
branch : 8.0
2026-06-30 23:02:59 +02:00
Cédric Krier 35a7e696cf Add ModelAccessProxy
#14907
(grafted from dafef28a1d65032628809acbfa130a2f2e74474f)

--HG--
branch : 8.0
2026-06-25 13:31:30 +02:00
Cédric Krier 35291a25e2 Replace getattr by hasattr in report
(grafted from 1a0574d67704d7acbd7c224d906a4be12aaf3423)

--HG--
branch : 8.0
2026-06-09 13:01:23 +02:00
Cédric Krier a86bc71a32 Restrict Genshi evaluation
Closes #14869 #5160
(grafted from 101aaf12c6bb1a333c9105b1e6677a4a5f49605c)

--HG--
branch : 8.0
2026-06-08 23:44:10 +02:00
Cédric Krier ba38151bbb Retry mutation query for Shopify tests
(grafted from a1cb164af115aa2503c364f437facbcf03c8cba3)

--HG--
branch : 8.0
2026-06-25 19:03:12 +02:00
Cédric Krier 1faa31dcf6 Clausify each clause of the parsed domain on date/time equality
Closes #14917
(grafted from 31fa77ee3dba8b633395d383b2d890333bf9aff3)

--HG--
branch : 8.0
2026-06-29 18:06:10 +02:00
Cédric Krier e2d622c196 Set only one quantity per line items when creating Shopify fulfillment
Closes #14912
(grafted from 58bde097ad514a53f7c492a9408e7a82f66d9cd9)

--HG--
branch : 8.0
2026-06-25 15:26:30 +02:00
Cédric Krier 50cdb4ac1d Use entry amount when amount is missing from details
Closes #14904
(grafted from d7c4e8ae89e4b289fb5cf244946787793454ec3e)

--HG--
branch : 8.0
2026-06-22 11:14:23 +02:00
Cédric Krier f78eb154ee Resolve Tryton modules using entrypoints
The Pool tries to resolve registered string using the path `trytond.modules.`
which can not always be imported if the module is using an entry pointing to
another package.

Closes #14914
(grafted from bb96325e829df570aac1f7624c862a660c0be286)

--HG--
branch : 8.0
2026-06-26 15:17:14 +02:00
Cédric Krier 96eb7071f7 Update module tutorial to match with the cookiecutter output
(grafted from e33b58f3d6a1bd6445853b88c2d26ff5e8a61c9c)

--HG--
branch : 8.0
2026-06-18 19:11:04 +02:00
Alfonso Iglesias f2b592e065 Add a transition from running to cancelled to production
Since c801019931a0 a running production can be cancelled by stock cancellation
group.

Closes #14864
(grafted from 82d85906db012cf6ac8eab74ea40aed2128f2509)

--HG--
branch : 8.0
2026-06-27 08:50:17 +02:00
Cédric Krier e1eb2bb48d Support ModelStorage.search API in ResourceAccessMixin
ResourceAccessMixin inherits from ModelStorage so it should support the
ModelStorage.search API.

Closes #14900
(grafted from 0011c5048a75906493f45a752958733d8cae5f12)

--HG--
branch : 8.0
2026-06-18 11:04:10 +02:00
Sergi Almacellas Abellana 0bcab14bf4 Use the effective date of the stock move to generate sequence when creating lot
Closes #14899
(grafted from e5f7e95553a42dc02ac9ea57002523bc87471353)

--HG--
branch : 8.0
2026-06-26 19:04:26 +02:00
Cédric Krier 7398dcfed7 Restore initial state when the execution of a wizard fails
Since 1aad63cbbba7 there is a check that the button from a wizard are triggered
from the same state as they were created.
But when an exception is raised during the execution, the wizard must be put
back to the initial state such that buttons can still be triggered again.

Closes #14895
(grafted from 0eddec418366403871755be8ba3b750a9c0fcdf4)

--HG--
branch : 8.0
2026-06-16 13:41:49 +02:00
Nicolas Évrard 5834e156f0 Delete only the records marked to be deleted when restoring history
Closes #14913
(grafted from 2335dba4dc447dbcae94d99097911460439ef02a)

--HG--
branch : 8.0
2026-06-26 15:41:27 +02:00
Cédric Krier b020f0f081 Correctly translate "Building Number" in French
Closes #14896
(grafted from 7ed04dd10395130f1ec0a3a0863d6392ea6db8fc)

--HG--
branch : 8.0
2026-06-16 15:36:46 +02:00
Cédric Krier 6c8cb152c6 Aggregate product by locations before applying filter when searching by quantity
Closes #14887
(grafted from d7abce5cd10ccba9852f26c7b1aef465e20b4585)

--HG--
branch : 8.0
2026-06-11 15:30:11 +02:00
Cédric Krier f812dd6da9 Call the same super method for validate_fields of account move line
Closes #14901
(grafted from e8394b1a0c0f3b7b3266a9bbb65d84b90a5f0e7e)

--HG--
branch : 8.0
2026-06-18 14:37:36 +02:00
Cédric Krier 75973a9b27 Use package name as target for module with prefix
The entrypoint is pointing to the package name when using prefix so the target
should also.

Closes #14814
(grafted from f6f8c6aa4316eeb7a73500c9dbc0ccd196aba62d)

--HG--
branch : 8.0
2026-06-18 19:09:35 +02:00
Cédric Krier 8123288003 Use new non-readonly transaction to create journal-period from opening wizard
Since 088e367462ce the execution of the wizard is on a readonly transaction
which prevents to insert in the database.

Closes #14894
(grafted from 2a1ecd1da4a1eca4b01666ff359b7b3424d058bd)

--HG--
branch : 8.0
2026-06-16 13:19:12 +02:00
Cédric Krier c31f99b670 Do not strip wildcard for number clause when searching work per record name
The strip of wildcard is usually applied for code not number.

Closes #14882
(grafted from f8cac4c04b0b59a056775358e18c48a5c5871f53)

--HG--
branch : 8.0
2026-06-11 10:37:29 +02:00
Cédric Krier 16005ba031 Skip second update of chart of account when template is overridden
Closes #14879
(grafted from 95fb6332fd9bc92f81a87d0c07ae814ae69ed059)

--HG--
branch : 8.0
2026-06-09 10:48:51 +02:00
Cédric Krier 3c2ad42587 Do not convert select query value into list when searching on char with in operator
Closes #14898
(grafted from f62e20c70717ed0a40ad86a7dd5672577f73626b)

--HG--
branch : 8.0
2026-06-18 15:49:10 +02:00
Cédric Krier b3f8c9396f Avoid random payment amount of zero in braintree tests
The value 0 is not valid for a payment.
(grafted from a80406308529403755f136b22be03f9f572e2ee9)

--HG--
branch : 8.0
2026-06-18 14:55:21 +02:00
Udo Spallek 5b07c15444 Return the quantity of sale line component for manual shipment method
Closes #14888
(grafted from 4d12bf8e46669dbb33a21dbeb13694986e603a1d)

--HG--
branch : 8.0
2026-06-17 22:50:11 +02:00
Nicolas Évrard f5122cd85b Save the new ir.model.data instances before calling functions on them
Closes #14885
(grafted from 20d79a09c9a6a5b052048c83fd351f789cd63372)

--HG--
branch : 8.0
2026-06-09 18:33:51 +02:00
Cédric Krier ca293f43e2 Increase version number
--HG--
branch : 8.0
2026-06-18 21:50:42 +02:00
Cédric Krier e5ddda1b74 Add tag account-8.0.1
--HG--
branch : 8.0
2026-06-18 21:50:32 +02:00
Cédric Krier 5f877783e5 Prepare release account-8.0.1
--HG--
branch : 8.0
2026-06-18 21:50:31 +02:00
Cédric Krier f13d7ad19f Increase version number
--HG--
branch : 8.0
2026-06-18 21:47:45 +02:00
Cédric Krier b2a6f4b17e Add tag account_payment-8.0.1
--HG--
branch : 8.0
2026-06-18 21:47:33 +02:00
Cédric Krier 89bf6f8978 Prepare release account_payment-8.0.1
--HG--
branch : 8.0
2026-06-18 21:47:31 +02:00
Cédric Krier d4ded505de Increase version number
--HG--
branch : 8.0
2026-06-18 21:45:54 +02:00
Cédric Krier d69f2c042a Add tag account_product-8.0.1
--HG--
branch : 8.0
2026-06-18 21:45:45 +02:00
Cédric Krier 2f90b94356 Prepare release account_product-8.0.1
--HG--
branch : 8.0
2026-06-18 21:45:44 +02:00
Cédric Krier 52882b1549 Increase version number
--HG--
branch : 8.0
2026-06-18 21:41:52 +02:00
Cédric Krier d86639b22d Add tag project-8.0.2
--HG--
branch : 8.0
2026-06-18 21:41:43 +02:00
Cédric Krier e7d1dcc77d Prepare release project-8.0.2
--HG--
branch : 8.0
2026-06-18 21:41:42 +02:00
Cédric Krier 7fc97b1f10 Increase version number
--HG--
branch : 8.0
2026-06-18 21:38:44 +02:00
Cédric Krier 47174686b8 Add tag purchase_amendment-8.0.1
--HG--
branch : 8.0
2026-06-18 21:38:33 +02:00
Cédric Krier a89666b62e Prepare release purchase_amendment-8.0.1
--HG--
branch : 8.0
2026-06-18 21:38:31 +02:00
Cédric Krier 6934fa250d Increase version number
--HG--
branch : 8.0
2026-06-18 21:35:26 +02:00
Cédric Krier 4898e247ed Add tag sale_amendment-8.0.1
--HG--
branch : 8.0
2026-06-18 21:35:17 +02:00
Cédric Krier 84cf3cb777 Prepare release sale_amendment-8.0.1
--HG--
branch : 8.0
2026-06-18 21:35:16 +02:00
Cédric Krier 7d73ec6f5b Increase version number
--HG--
branch : 8.0
2026-06-18 21:34:39 +02:00
Cédric Krier 74b0c70955 Add tag user_role-8.0.1
--HG--
branch : 8.0
2026-06-18 21:34:25 +02:00
Cédric Krier 42fec858e6 Prepare release user_role-8.0.1
--HG--
branch : 8.0
2026-06-18 21:34:23 +02:00
Cédric Krier bae7cd50d1 Increase version number
--HG--
branch : 8.0
2026-06-18 21:32:55 +02:00
Cédric Krier 9e3758abba Add tag sao-8.0.5
--HG--
branch : 8.0
2026-06-18 21:32:46 +02:00
Cédric Krier ad6a59c062 Prepare release sao-8.0.5
--HG--
branch : 8.0
2026-06-18 21:32:43 +02:00
Cédric Krier 26f4f5a452 Increase version number
--HG--
branch : 8.0
2026-06-18 21:31:03 +02:00
Cédric Krier 53f2d8bef6 Add tag tryton-8.0.5
--HG--
branch : 8.0
2026-06-18 21:30:50 +02:00
Cédric Krier 9f2049b5b1 Prepare release tryton-8.0.5
--HG--
branch : 8.0
2026-06-18 21:30:49 +02:00
Cédric Krier 0b00829ba2 Increase version number
--HG--
branch : 8.0
2026-06-18 21:28:09 +02:00
Cédric Krier 5925e85eae Add tag trytond-8.0.5
--HG--
branch : 8.0
2026-06-18 21:27:56 +02:00
Cédric Krier 2fab2f24e6 Prepare release trytond-8.0.5
--HG--
branch : 8.0
2026-06-18 21:27:55 +02:00
Cédric Krier bdeeb572ac Set shipment address only when empty when changing party of sale amendment
Closes #14796
(grafted from 1a003fa7e62b9f5c0cda4494197e6553a585f7b9)

--HG--
branch : 8.0
2026-06-12 23:42:19 +02:00
Adrià Tarroja Caubet fa6efc064a Add missing invoice address when changing party of amendment
Closes #14796
(grafted from e3a3660f987638f51e04c7023c753f2988d938fc)

--HG--
branch : 8.0
2026-06-12 23:44:04 +02:00
Cédric Krier bb38407c55 Support query without where clause when searching on Many2One with where operator
When not using subquery but EXISTS and having a target domain converted into
UNION, the query result does not have a 'where' clause.

Closes #14889
(grafted from 96982406e129d1e063c1a332289376f45e586ecc)

--HG--
branch : 8.0
2026-06-11 14:29:17 +02:00
José Antonio Díaz Miralles 596c9b8153 Sanitize screen.current_record if it is already destroyed
Closes #14827
(grafted from 9cb776c27fda504a91312636371273483f404152)

--HG--
branch : 8.0
2026-05-10 11:44:04 +02:00
Cédric Krier ac029c3f22 Convert toolbar into mutable objects before modification
Since 619fd425e3bb the toolbar may be immutable when it comes from the cache.

Closes #14881
(grafted from 9e8d1bca2c7fd2fc4ce70284e069d4b06f5ec810)

--HG--
branch : 8.0
2026-06-08 09:09:23 +02:00
Cédric Krier ac0e3d842e Sort selection strings without key function
The selection is a list of string so we can sort as-is.

Closes #14883
(grafted from 2d7c2466ae0eda5dc670cc8fd2ee5b386fb704ab)

--HG--
branch : 8.0
2026-06-08 16:19:50 +02:00
Cédric Krier 6f5c3ec71a Remove display on element style when showing element
The `revert` value prevents to inherit from the CSS rules.

Closes #14872
(grafted from 3f16016f4aa9c81572f9c0ef212bffbf9570a8fd)

--HG--
branch : 8.0
2026-06-02 12:24:25 +02:00
Cédric Krier 5ed82e1ea1 Remove unnecessary MANIFEST.in
(grafted from 4c7cba5ea0710ddab7754751764587e4e7e7ed6b)

--HG--
branch : 8.0
2026-06-02 12:02:28 +02:00
Cédric Krier 012398d060 Prevent modifying the company of project work with parent, children or timesheet
Closes #14871
(grafted from 8e66491c57a6e2eee0d4c3e88d52a84b72c0a933)

--HG--
branch : 8.0
2026-06-02 12:00:50 +02:00
Cédric Krier b17a80a045 Use only active journal for reception of direct debit
Closes #14866
(grafted from e579e58686df04322d881b5911acf6b8be3b7c89)

--HG--
branch : 8.0
2026-05-28 16:30:28 +02:00
Cédric Krier 716fc6fd77 Do not copy accounting templates when copying product category for accounting
Closes #14862
(grafted from 6cd898bfdb36da8c69ecaa9ca85eb07b4cc88df3)

--HG--
branch : 8.0
2026-05-27 10:21:50 +02:00
Cédric Krier 0421ed1d0a Reset the selection when cursor is set with reset view
The view is reset when a new record is displayed and on editable list or
list-form, we want to have only the current record selected even if the
selection checkbox is checked for all records.

Closes #14858
(grafted from c4c84d6300fc4e02eeb7b731434cdf988cce45bc)

--HG--
branch : 8.0
2026-05-21 17:54:51 +02:00
Cédric Krier cf19c35b42 Make display synchronous when possible
In order to ensure that after the focus out of a field that triggers
on_change's, the view is fully displayed before the set_value call from the
Window.Form response. Otherwise the set_value restore the previous value.

Closes #14853
(grafted from fd5d15e75c92282fcadee930c6b51cb02397bbb6)

--HG--
branch : 8.0
2026-05-20 18:50:58 +02:00
Adrià Tarroja Caubet f75aa3aea3 Use current record context when rendering email templates
Pass the current record context from the email dialog when fetching
template values and defaults. This keeps context-dependent models,
including table_query records, addressable after the user changes the
context.

Closes #14565
(grafted from 868b0e31fbdecc0e04b2cb1c894829c5eba19fa4)

--HG--
branch : 8.0
2026-06-06 11:47:25 +02:00
Cédric Krier 174257d1fd Always use the body background for notification menu
On small screen the menu inherits of the navbar background which reduces the
contrast with the item of the menu.

Closes #14855
(grafted from d6e959a65a3f1ec3fb65f96808df61b66bedb4cb)

--HG--
branch : 8.0
2026-05-21 11:05:05 +02:00
Sergi Almacellas Abellana c1302e526e Use only 3 cols for plural field on lang form
Closes #14873
(grafted from c9e05204acc03e85ac33a63039c7b739307f80a1)

--HG--
branch : 8.0
2026-06-03 12:48:36 +02:00
Alen Sugimoto bf9531fb55 Fix falsy negative currency formatting selection
Closes #14860
(grafted from 5e06983974daed2cb0e372a1b3a5f2cd107df751)

--HG--
branch : 8.0
2026-05-24 08:31:26 -07:00
Cédric Krier 18501ae6f8 Increase version number
--HG--
branch : 8.0
2026-06-02 19:09:24 +02:00
Cédric Krier 16ab4031ed Add tag account_payment_sepa-8.0.1
--HG--
branch : 8.0
2026-06-02 19:09:15 +02:00
Cédric Krier 74ca90e5f2 Prepare release account_payment_sepa-8.0.1
--HG--
branch : 8.0
2026-06-02 19:09:14 +02:00
Cédric Krier 6cf9e07172 Increase version number
--HG--
branch : 8.0
2026-06-02 19:07:43 +02:00
Cédric Krier ea95196bfe Add tag account_stock_eu-8.0.1
--HG--
branch : 8.0
2026-06-02 19:07:34 +02:00
Cédric Krier 5146c58bc9 Prepare release account_stock_eu-8.0.1
--HG--
branch : 8.0
2026-06-02 19:07:33 +02:00
Cédric Krier 0d13fddad1 Increase version number
--HG--
branch : 8.0
2026-06-02 19:06:06 +02:00
Cédric Krier 9642cbf0fb Add tag product_kit-8.0.1
--HG--
branch : 8.0
2026-06-02 19:05:57 +02:00
Cédric Krier 4e302ec8fc Prepare release product_kit-8.0.1
--HG--
branch : 8.0
2026-06-02 19:05:56 +02:00
Cédric Krier f0d2e745ea Increase version number
--HG--
branch : 8.0
2026-06-02 19:05:34 +02:00
Cédric Krier 902a2a7cd2 Add tag project-8.0.1
--HG--
branch : 8.0
2026-06-02 19:05:26 +02:00
Cédric Krier ef9abdfa17 Prepare release project-8.0.1
--HG--
branch : 8.0
2026-06-02 19:05:25 +02:00
Cédric Krier c04f9435cf Increase version number
--HG--
branch : 8.0
2026-06-02 19:04:34 +02:00
Cédric Krier 4e4897f2f0 Add tag purchase_request_quotation-8.0.1
--HG--
branch : 8.0
2026-06-02 19:04:26 +02:00
Cédric Krier 25ee6c8350 Prepare release purchase_request_quotation-8.0.1
--HG--
branch : 8.0
2026-06-02 19:04:25 +02:00
Cédric Krier 8bd63e1306 Increase version number
--HG--
branch : 8.0
2026-06-02 19:03:59 +02:00
Cédric Krier 9de36da982 Add tag stock-8.0.1
--HG--
branch : 8.0
2026-06-02 19:03:49 +02:00
Cédric Krier 48e30d2399 Prepare release stock-8.0.1
--HG--
branch : 8.0
2026-06-02 19:03:48 +02:00
Cédric Krier fbd682b854 Increase version number
--HG--
branch : 8.0
2026-06-02 19:02:36 +02:00
Cédric Krier 2cc61af009 Add tag stock_package_shipping-8.0.1
--HG--
branch : 8.0
2026-06-02 19:02:28 +02:00
Cédric Krier b22358508f Prepare release stock_package_shipping-8.0.1
--HG--
branch : 8.0
2026-06-02 19:02:27 +02:00
Cédric Krier 91d3a494d1 Increase version number
--HG--
branch : 8.0
2026-06-02 19:00:19 +02:00
Cédric Krier 96479d2b14 Add tag stock_supply_day-8.0.1
--HG--
branch : 8.0
2026-06-02 19:00:10 +02:00
Cédric Krier 2fea3d325c Prepare release stock_supply_day-8.0.1
--HG--
branch : 8.0
2026-06-02 19:00:09 +02:00
Cédric Krier 09fc668ff9 Increase version number
--HG--
branch : 8.0
2026-06-02 18:54:57 +02:00
Cédric Krier da884b08e9 Add tag sao-8.0.4
--HG--
branch : 8.0
2026-06-02 18:53:06 +02:00
Cédric Krier 74ed90d0d2 Prepare release sao-8.0.4
--HG--
branch : 8.0
2026-06-02 18:53:05 +02:00
Cédric Krier b6e33bc5f9 Increase version number
--HG--
branch : 8.0
2026-06-02 18:48:32 +02:00
Cédric Krier c426416a54 Add tag tryton-8.0.4
--HG--
branch : 8.0
2026-06-02 18:48:19 +02:00
Cédric Krier 33bc087e42 Prepare release tryton-8.0.4
--HG--
branch : 8.0
2026-06-02 18:48:18 +02:00
Cédric Krier 7b4d801da9 Increase version number
--HG--
branch : 8.0
2026-06-02 18:44:41 +02:00
Cédric Krier 773d6ab158 Add tag trytond-8.0.4
--HG--
branch : 8.0
2026-06-02 18:44:25 +02:00
Cédric Krier 0824a1afe9 Prepare release trytond-8.0.4
--HG--
branch : 8.0
2026-06-02 18:44:23 +02:00
Cédric Krier 1e64288bda Do not save record in editable tree view with parent when checkbox is toggled
The parent record is responsible to save the records which is part of a field.

Closes #14848
(grafted from a20b069dd1699260f029e93ee2e0c306a15fe155)

--HG--
branch : 8.0
2026-05-19 17:33:44 +02:00
Cédric Krier bf5328229e Process response to wizard button only if the state is still the same
The response is asynchronous so when the event is processed the state may have
changed.

Closes #14847
(grafted from 1aad63cbbba72af487eddba703c136c9b8e83060)

--HG--
branch : 8.0
2026-05-19 17:18:34 +02:00
Cédric Krier 83535813b8 Set __processing when processing wizard state
The protection was copied from tryton but it was missing this activation.

Closes #14846
(grafted from 9950ddea3804cb6129707b07728e40c6ec4d06c0)

--HG--
branch : 8.0
2026-05-19 17:13:41 +02:00
Cédric Krier 4a68bc20f3 Use tree's record name search for the name parts of project work
Closes #14834
(grafted from f43e7106ddee303435d38113d286ffd0b64a93ff)

--HG--
branch : 8.0
2026-05-19 15:22:00 +02:00
Cédric Krier a61a8e013b Return a proper DateTime in UTC for domain parser completion
Closes #14842
(grafted from f394f7c758765361aadc5569d7303ac1a795ca8c)

--HG--
branch : 8.0
2026-05-18 18:28:00 +02:00
Cédric Krier 59c2e7f7b7 Always process 503 and 401 HTTP errors
Closes #14836
(grafted from aa6f099f2b3d4c2b90989240743554dd62500d9b)

--HG--
branch : 8.0
2026-05-18 15:09:24 +02:00
Cédric Krier a0f1e4929c Publish user notification on the bus when notifications are also modified or deleted
Closes #14835
(grafted from d097be5be052ce8af1b1592a569a14e14aecae33)

--HG--
branch : 8.0
2026-05-18 14:11:39 +02:00
Sergi Almacellas Abellana 81eb21867f Clear ShippingMixin shipping_reference's when copying it
Closes #14833
(grafted from 50f6603fb37986540db45f8552cc07fe22175d8f)

--HG--
branch : 8.0
2026-05-28 09:45:46 +02:00
Adrià Tarroja Caubet 73bb266e2f Avoid crash on SEPA mandate report without bank
Closes #14831
(grafted from e0215f17958ae81f62403c4ff552d8551a163393)

--HG--
branch : 8.0
2026-05-13 11:25:48 +02:00
Cédric Krier 5a38f2a853 Close database after initialization of Pool from WSGI application
The psycopg pool starts worker threads that must be stopped.

Closes #14849
(grafted from fb2059f652653820142d67f34fd58953decf48f3)

--HG--
branch : 8.0
2026-05-19 18:19:59 +02:00
Cédric Krier 4fca529235 Support pool process with spawn context for cron and worker
When max_tasks_per_child is set, the ProcessPoolExecutor uses a spawn
multiprocessing context which starts a new process from scratch with a __name__
being __mp_main__ which prevents the configuration to be restored.
So in the ProcessPoolExecutor initializer the configuration is restored using
the initial options.

Closes #14843
(grafted from cb5c6667ac51818d49ca397347419a40b88768fd)

--HG--
branch : 8.0
2026-05-19 12:29:44 +02:00
Cédric Krier 2bbaac9f21 Test origin from sale instead of line to calculate cost for return sale of product kit
Closes #14854
(grafted from 7e5197d5a61cb5090d8a2c00ae4a12a25924aeda)

--HG--
branch : 8.0
2026-05-21 10:26:44 +02:00
Cédric Krier 87b64c2798 Delete stock moves only of deactivated products
Closes #14844
(grafted from fcdf3e07d2b939ffcc76edd92b791dc94ade1b8e)

--HG--
branch : 8.0
2026-05-19 10:53:56 +02:00
Nicolas Évrard 456e3203d0 Fetch limit records of ResourceAccessMixin models when they are available
Closes #14788
(grafted from 5e7086dc7cc483868eca8852f4728557224c6980)

--HG--
branch : 8.0
2026-04-21 13:40:21 +02:00
Nicolas Évrard 6a4c1aa5e3 Parse equality to a date as two clauses when handling datetime fields
Closes #14778
(grafted from 6952308a8b6b65ff583a2b04d9cd558b44c4e4a9)

--HG--
branch : 8.0
2026-04-14 18:29:42 +02:00
José Antonio Díaz Miralles 2ff149fde6 Reject O2M validate promise when record validation fails after screen display
Closes #14775
(grafted from 6978c46c77b9133381e18de964ae3886fc87f1e4)

--HG--
branch : 8.0
2026-04-19 13:11:06 +02:00
Xavi Hermoso b6d098aeab Update purchase request state when it is manually linked to a quotation
Closes #14773
(grafted from a463be917f2576adb8f4333eb2ce19759456be0b)

--HG--
branch : 8.0
2026-05-12 09:33:32 +00:00
Cédric Krier 81f3bb8c89 Calcule stock move weight on done when required for intrastat
The weight may not have been calculated at the creation of the move if the
product did not have a weight set at that time.

Closes #14824
(grafted from 7e33b59a691fab63634fb6857c537b64d0ec191c)

--HG--
branch : 8.0
2026-05-08 12:38:14 +02:00
Nicolas Évrard 8f0fe8de09 Stop the propagation of the click event in buttons from list-form
Closes #14839
(grafted from 29667641dd0685424f2a4bd8a6cd16bf642a7fea)

--HG--
branch : 8.0
2026-05-18 15:57:55 +02:00
Cédric Krier 67cf4d2f33 Do not fail to compute supply and purchase date for product supplier without weekdays
Closes #14841
(grafted from c905132eab0552b2d0adcbdb18e07789433488b6)

--HG--
branch : 8.0
2026-05-18 17:45:32 +02:00
Cédric Krier 476fae13e2 Increase version number
--HG--
branch : 8.0
2026-05-20 23:29:12 +02:00
Cédric Krier b3ee50ba88 Add tag production_work_timesheet-8.0.1
--HG--
branch : 8.0
2026-05-20 23:29:03 +02:00
Cédric Krier b5be60251b Prepare release production_work_timesheet-8.0.1
--HG--
branch : 8.0
2026-05-20 23:29:02 +02:00
Cédric Krier 9f01d1f61a Increase version number
--HG--
branch : 8.0
2026-05-20 23:27:30 +02:00
Cédric Krier ebaa9f637f Add tag web_shop_shopify-8.0.1
--HG--
branch : 8.0
2026-05-20 23:27:20 +02:00
Cédric Krier 2f737a26e4 Prepare release web_shop_shopify-8.0.1
--HG--
branch : 8.0
2026-05-20 23:27:19 +02:00
Cédric Krier cb9fd1c237 Increase version number
--HG--
branch : 8.0
2026-05-20 23:25:52 +02:00
Cédric Krier 2925916468 Add tag sao-8.0.3
--HG--
branch : 8.0
2026-05-20 23:25:43 +02:00
Cédric Krier 6225da573f Prepare release sao-8.0.3
--HG--
branch : 8.0
2026-05-20 23:25:42 +02:00
Cédric Krier f60d574233 Increase version number
--HG--
branch : 8.0
2026-05-20 23:22:49 +02:00
Cédric Krier 450bfefa38 Add tag tryton-8.0.3
--HG--
branch : 8.0
2026-05-20 23:22:37 +02:00
Cédric Krier d83dc7b639 Prepare release tryton-8.0.3
--HG--
branch : 8.0
2026-05-20 23:22:36 +02:00
Cédric Krier 54c5e75d8e Increase version number
--HG--
branch : 8.0
2026-05-20 23:20:39 +02:00
Cédric Krier 1930fc45cb Add tag trytond-8.0.3
--HG--
branch : 8.0
2026-05-20 23:20:24 +02:00
Cédric Krier 854639a981 Prepare release trytond-8.0.3
--HG--
branch : 8.0
2026-05-20 23:20:23 +02:00
Cédric Krier 0c5f1bfe53 Include timesheet cost in production work only if timesheet cost module is activated
f2642fe60c20 extends the cost method using the cost price of the timesheet line
but without ensuring the module is activated.

Closes #14830
(grafted from 4b38a680f4ee2139a8d0179a3a67eb2606faa7e4)

--HG--
branch : 8.0
2026-05-12 09:02:55 +02:00
Cédric Krier eeeec6340d Do not add empty extension when slugify filename
Closes #14823
(grafted from 143883125d7e98b0fcdc300b54886d735c228fe9)

--HG--
branch : 8.0
2026-05-07 13:34:06 +02:00
Cédric Krier bfd8ecdc38 Make search on boolean non equals to True is the same as different of False
Closes #14815
(grafted from 7ac4b470f9e36f846b28d4c12e5e121e204d4aa1)

--HG--
branch : 8.0
2026-05-06 09:23:35 +02:00
Cédric Krier 3ea873f887 Do not reset to quotation Shopify order already processed
After a refund the authorized payment amount may be lower than the amount to
pay but the sale should still stay in processing or done state.

Closes #14816
(grafted from 9df991a256f872f8d9623b675732b1480534e553)

--HG--
branch : 8.0
2026-05-05 00:11:08 +02:00
Cédric Krier dc2aaeec41 Delegate notification handling of worker to the backend
Since bb52a833e823 the backend provides methods to handle notification.

Closes #14821
(grafted from 2763a98a25e401887fb9ac5049ce21d97b622f66)

--HG--
branch : 8.0
2026-05-07 18:12:20 +02:00
Cédric Krier aea78aff43 Add RPC method name as fragment of the URL for session methods
(grafted from 6286497d452bfbb965b9df7341b93c025aab16d7)

--HG--
branch : 8.0
2026-05-06 17:25:44 +02:00
Cédric Krier 9a2a0fc27d Add rpc suffix to reset password procedure
Closes #14820
(grafted from ec8e69a3eb6b1934eb6270351fed3ce2862bca19)

--HG--
branch : 8.0
2026-05-06 17:24:23 +02:00
Nicolas Évrard bb25bf89a6 Synchronize trytond and tryton domain_inversion implementations
The commit d826376d08a5 was not correctly copied.
(grafted from 191f2e9503a1a2598810067689b7a14d67eef138)

--HG--
branch : 8.0
2025-02-12 18:59:33 +01:00
Cédric Krier abaf45e1f6 Flip expander and icons for RTL language
Closes #14810
(grafted from 4fea86cbae6a7d279d3e113177f2711634f5926d)

--HG--
branch : 8.0
2026-04-24 16:16:27 +02:00
Cédric Krier 73d86cf5a0 Increase version number
--HG--
branch : 8.0
2026-05-02 14:13:46 +02:00
Cédric Krier 5002e33a56 Add tag currency_ro-8.0.1
--HG--
branch : 8.0
2026-05-02 14:13:38 +02:00
Cédric Krier fbbef01050 Prepare release currency_ro-8.0.1
--HG--
branch : 8.0
2026-05-02 14:13:37 +02:00
Cédric Krier 5c77d55e88 Increase version number
--HG--
branch : 8.0
2026-05-02 14:11:57 +02:00
Cédric Krier 45a9de450b Add tag sale-8.0.1
--HG--
branch : 8.0
2026-05-02 14:11:48 +02:00
Cédric Krier 5e183d7991 Prepare release sale-8.0.1
--HG--
branch : 8.0
2026-05-02 14:11:47 +02:00
Cédric Krier 4158479286 Increase version number
--HG--
branch : 8.0
2026-05-02 14:07:33 +02:00
Cédric Krier fe8fe44c7e Add tag stock_lot-8.0.1
--HG--
branch : 8.0
2026-05-02 14:07:24 +02:00
Cédric Krier 85f67cd23f Prepare release stock_lot-8.0.1
--HG--
branch : 8.0
2026-05-02 14:07:23 +02:00
Cédric Krier e2aaca6d5c Increase version number
--HG--
branch : 8.0
2026-05-02 14:06:27 +02:00
Cédric Krier 6c4ebb8ee5 Add tag naiad-8.0.1
--HG--
branch : 8.0
2026-05-02 14:06:19 +02:00
Cédric Krier e730931f7e Prepare release naiad-8.0.1
--HG--
branch : 8.0
2026-05-02 14:06:18 +02:00
Cédric Krier f8a7802beb Increase version number
--HG--
branch : 8.0
2026-05-02 13:57:17 +02:00
Cédric Krier dc9202053d Add tag sao-8.0.2
--HG--
branch : 8.0
2026-05-02 13:56:40 +02:00
Cédric Krier 92c1a3dda0 Prepare release sao-8.0.2
--HG--
branch : 8.0
2026-05-02 13:56:39 +02:00
Cédric Krier ef47d3106c Increase version number
--HG--
branch : 8.0
2026-05-02 13:55:01 +02:00
Cédric Krier e820ba32c6 Add tag tryton-8.0.2
--HG--
branch : 8.0
2026-05-02 13:54:48 +02:00
Cédric Krier bbfa2af176 Prepare release tryton-8.0.2
--HG--
branch : 8.0
2026-05-02 13:54:48 +02:00
Cédric Krier 57bde5cffc Increase version number
--HG--
branch : 8.0
2026-05-02 13:52:12 +02:00
Cédric Krier 3c46f67df1 Add tag trytond-8.0.2
--HG--
branch : 8.0
2026-05-02 13:51:59 +02:00
Cédric Krier 9d28375bcd Prepare release trytond-8.0.2
--HG--
branch : 8.0
2026-05-02 13:51:58 +02:00
Cédric Krier 4f817c1b42 Always put form input inside an input-group to position accesskey
And invert left/right position on RTL.

Closes #14809
(grafted from 7543e85afb49d4663800edf1004de4ec34bbb759)

--HG--
branch : 8.0
2026-04-24 16:14:05 +02:00
Sergi Almacellas Abellana e1db6067eb Always use out/return as sale move types
Closes #14807
(grafted from 772c331a3570f8ecfc43965cc133b5d25fe11084)

--HG--
branch : 8.0
2026-04-23 16:51:09 +02:00
Cédric Krier 508870da7b Activate module for TranslationTestCase
(grafted from 968cfd79f10955b767967f99aa970956e09b23c8)

--HG--
branch : 8.0
2026-04-24 16:06:46 +02:00
Sergi Almacellas Abellana 56ec009f0b Manage assigned moves on add lots wizard
Closes #14804
(grafted from 83ef4c017af5df55178fa22f7775d35fd7f28874)

--HG--
branch : 8.0
2026-04-23 13:36:23 +02:00
Nicolas Évrard f912ebc697 Add missing _datamanagers property on Transaction creation
(grafted from 7ab23e6cc9d3925410da5bc7e6f76f3cef162efa)

--HG--
branch : 8.0
2026-04-24 11:45:37 +02:00
Nicolas Évrard e3a862e4c3 User percent encoded name of inexistant database
Closes #14801
(grafted from 5fddfb00cfffa81177c0b5ddda6aaecaccfe19da)

--HG--
branch : 8.0
2026-04-22 18:19:51 +02:00
Nicolas Évrard c4fdf6d9a0 Ensure check_warnings and _datamanagers are valid when using them
(grafted from ee9737c3a9c8618d09c491f5c3401fef0f0f078f)

--HG--
branch : 8.0
2026-04-24 11:47:03 +02:00
Cédric Krier f40a735a0e Prevent setuptools Distribution to parse config files
The pyproject.toml is not compatible with setuptools as it is based on
hatchling backend.

Closes #14789
(grafted from 0b79707bcf19fbee9d243fa2f689e6f18e0869d0)

--HG--
branch : 8.0
2026-04-21 11:40:53 +02:00
Cédric Krier fcab430ea4 Use version from setup-freeze when making tryton installer
This prevents the need to install the build backend dependencies.
(grafted from f120b2c743b1479b2b9d0e72c95f27f59d52d051)

--HG--
branch : 8.0
2026-04-21 11:39:44 +02:00
Cédric Krier 142d2d0724 Use python3 to make tryton installer
(grafted from 75b61640df96960c9431522571ef3bfcac46c280)

--HG--
branch : 8.0
2026-04-21 11:41:23 +02:00
Sergi Almacellas Abellana ab1772a940 Shrink psycopg-pool to (0, 1) when cleaning connections
When min size is zero, max size must be greater than 0.

Closes #14795
(grafted from 357525621ea68bc99d688ddf04f9912905c9f3a0)

--HG--
branch : 8.0
2026-04-23 15:15:16 +02:00
Cédric Krier f539e7f5e5 Prepend www to URL of bnr.ro website
Closes #14784
(grafted from a3b875e9b443c5efffcc84a4fc3b69069e949fe8)

--HG--
branch : 8.0
2026-04-20 10:32:39 +02:00
Cédric Krier 0f88879121 Activate modules that are not activated in demo
0af71ac1106b wrongly tested the module to activate
(grafted from 31f2ed6d2f7814576a6b47aab25b4e2d213754c4)

--HG--
branch : 8.0
2026-04-21 10:06:09 +02:00
Cédric Krier 95e8007bf4 Submit payment before approve it in demo
(grafted from 2265bacb7aff3db5ce17095d5fca98e77f52d3fc)

--HG--
branch : 8.0
2026-04-21 10:06:41 +02:00
Cédric Krier 1ff8d99c0c Increase version number
--HG--
branch : 8.0
2026-04-23 01:04:07 +02:00
Cédric Krier a579d13179 Add tag tryton-8.0.1
--HG--
branch : 8.0
2026-04-23 01:03:44 +02:00
Cédric Krier 7b2142612e Prepare release tryton-8.0.1
--HG--
branch : 8.0
2026-04-23 01:03:43 +02:00
Cédric Krier 914ec18fff Increase version number
--HG--
branch : 8.0
2026-04-23 01:03:20 +02:00
Cédric Krier c779966f96 Add tag sao-8.0.1
--HG--
branch : 8.0
2026-04-23 01:02:37 +02:00
Cédric Krier 37d4fc2194 Prepare release sao-8.0.1
--HG--
branch : 8.0
2026-04-23 01:02:36 +02:00
Cédric Krier 4a40b1656f Increase version number
--HG--
branch : 8.0
2026-04-23 00:59:00 +02:00
Cédric Krier 4770a9cadc Add tag trytond-8.0.1
--HG--
branch : 8.0
2026-04-23 00:58:47 +02:00
Cédric Krier 272e0b1c88 Prepare release trytond-8.0.1
--HG--
branch : 8.0
2026-04-23 00:58:46 +02:00
Cédric Krier 664060c49e Remove fake gap from form containers on XS screen
Since e58b98a512c2 we apply a fake gap but it must be removed on XS screen.

Closes #14799
(grafted from 394e796bbe4e4c15097770dc70a6e2c3b53087ca)

--HG--
branch : 8.0
2026-04-22 16:57:03 +02:00
Cédric Krier d7715aba68 Make overflow visible for dropdown in table header of treeview
7d2e1761cee2 added an overflow invisible on the div of the table header to hide
the sort icon when the column width is too small. But the overflow must be
visible for the dropdown to display the menu.

Closes #14793
(grafted from b243f1930ffe23e9a9078817be0a22d4c468edb3)

--HG--
branch : 8.0
2026-04-21 19:04:13 +02:00
Cédric Krier 321fd8d9ce Do not pass the channel name as parameter to LISTEN call in the queue
psycopg3 can not determine the data type.

Closes #14792
(grafted from 7fc8e6a10574c04a074f55a8a4e56ec4e07efb74)

--HG--
branch : 8.0
2026-04-21 15:30:46 +02:00
Cédric Krier 7cfd5eba46 Process exception of RPC calls for chat
Closes #14790
(grafted from e47e55822e32ef31aee016882fce0cb0a530e6eb)

--HG--
branch : 8.0
2026-04-21 12:28:49 +02:00
Cédric Krier cd1aef8dfc Check access only on entry points of chat channel
Since 317e5ff39097 the read access is restricted to the admin group.
The access right should not be enforced for the transaction but only at the RPC
entry point.

Closes #14791
(grafted from 8c311ddd3da49bdbd61f2ae22074880ea79ae2ec)

--HG--
branch : 8.0
2026-04-21 12:15:36 +02:00
Cédric Krier e73bb1bd79 Fix computation of doc series for odd minor version
(grafted from b51529a6afd0794498d1790e88b4805af582eb81)

--HG--
branch : 8.0
2026-04-20 22:24:47 +02:00
Cédric Krier 35e4dac5d6 Fix computation of documentation series for odd minor version
(grafted from f4d6cf9d57ce7c69bcde185f933f866c0dd40301)

--HG--
branch : 8.0
2026-04-20 21:23:36 +02:00
Cédric Krier 045421c749 Increase version number
--HG--
branch : 8.0
2026-04-20 21:01:58 +02:00
Cédric Krier e62dadfc2f Create branch 8.0
--HG--
branch : 8.0
2026-04-20 20:55:30 +02:00
Cédric Krier acde54d19e Rename naiad package into tryton-naiad 2026-04-20 20:47:48 +02:00
Cédric Krier 042340bb71 Add tag 8.0.0 2026-04-20 20:10:26 +02:00
Cédric Krier 7f0d38f477 Prepare release 8.0.0 2026-04-20 20:10:13 +02:00
José Antonio Díaz Miralles 1993e447ce Return the values from the promise of default_get method
Closes #14783
2026-04-20 18:14:28 +02:00
Cédric Krier 7a29801b68 Remove unrelated changelog entry 2026-04-20 18:10:24 +02:00
Nicolas Évrard 072d0317aa Use a list of selection values to enable sorting in the filter window
Closes #14785
2026-04-20 10:41:45 +02:00
Cédric Krier de1bb5d5d9 Update translations [skip ci] 2026-04-20 10:38:52 +02:00
Cédric Krier c662bea8ad Abstract the iteration for line items and vat taxes feedback for Typless
The generators can be extended for other type of result.

Closes #14781
2026-04-17 10:01:31 +02:00
Cédric Krier a7c57aeef6 Execute only one menu item and button actions at a time per tab
Closes #14769
2026-04-16 23:00:54 +02:00
Cédric Krier f07cf4dceb Wait for the next/previous display promises before clearing info and set button sensitiveness
#14769
2026-04-16 22:50:42 +02:00
Cédric Krier a973cdd9f8 Only set the value on the current view of One2Many when the form set values
If the current view is a form view, we need to ensure that the values are
actually set for all the widgets.
2026-04-16 22:48:34 +02:00
Cédric Krier 886a463adb Support widget returning promise on display
The xxx2Many widgets can not be displayed synchronously so we need to include
there promise in the promise returned by the form view display method.

#14769
2026-04-16 22:45:15 +02:00
Cédric Krier 1c80557101 Sort Shopify products by ID when position is None
Closes #14774
2026-04-15 16:26:20 +02:00
Cédric Krier 4875c428e4 Render prepaid amount in UBL invoice
Closes #14766
2026-04-13 17:30:06 +02:00
Cédric Krier 4e4c294bb0 Move the sortable icon of table column outside of the label
This ensure that the labels have the same height even if they are or not
sortable.

Closes #14762
2026-04-11 08:42:50 +02:00
Cédric Krier 53bf0cefcd Cast to integer reporting ID calculated using SQL Power
Closes #14732
2026-04-09 18:24:39 +02:00
Cédric Krier 4e97df25ba Save the record when checkbox is clicked on editable tree view
Since 53ff6c9d8393 checkbox can be toggled even if the record is not the
currently selected record.
When the changed record is not the currently edited record, it must be saved as
editable tree handler will not save it.

Closes #14642
2026-04-09 17:28:37 +02:00
Cédric Krier bbd062a61a Return promise from save function on Tab
Closes #14604
2026-04-09 15:54:06 +02:00
Cédric Krier 4fbf75b518 Clear consolidation company if the invoice's changed party is incompatible
Closes #14757
2026-04-08 19:21:09 +02:00
Cédric Krier a1a08ef8d9 Remove invalid SEPA mandate when payment is reset to draft
Closes #14756
2026-04-08 18:49:25 +02:00
Cédric Krier cfff8414ff Limit the application of receivable rules to accounts and parties in the statement
Closes #14755
2026-04-08 17:16:26 +02:00
Cédric Krier 7e01e915c5 Use no breaking spaces for language definitions
Closes #14754
2026-04-08 14:42:10 +02:00
Cédric Krier 3ea7d3a207 Call super in channel email methods extended by inbound email module 2026-04-17 07:42:34 +02:00
Korbinian Preisler f2ceae17f3 Use correct message identifier when computing the chat email body
Closes #14780
2026-04-16 18:09:30 +02:00
Korbinian Preisler ee6ec419a7 Add missing rule argument to post inbound email action
Closes #14779
2026-04-16 23:33:34 +02:00
Cédric Krier 0f67babf1f Always remove spaces when converting value to number in domain parser
Closes #14753
2026-04-08 14:31:55 +02:00
Cédric Krier cc1a046c9e Test instances against the Response/Request classes from werkzeug
It should be allowed to use the base classes instead of the custom derived of
Tryton.

Closes #14765
2026-04-13 14:38:48 +02:00
Cédric Krier cf8d245a9a Add note in the documentation about the scheduled task to update Peppol document status 2026-03-26 07:38:42 +01:00
Cédric Krier 24ab3419a3 Update invoice documentation to describe the revised report 2026-03-27 09:18:14 +01:00
Cédric Krier 5c2579a62a Search only for identifier of active party for supplier invoice party
Closes #14752
2026-04-08 12:12:54 +02:00
Nicolas Évrard 033e4326bf Remove the implicit undefined return when computing the fields to update
Closes #14751
2026-04-07 18:54:39 +02:00
Cédric Krier eb0cb933ef Delete related resources when deleting records
Closes #14748
2026-04-07 13:39:54 +02:00
Cédric Krier 371c01984a Use BIGINT for the party code digit and limit its size to 18 digits
Closes #14761
2026-04-09 19:20:38 +02:00
Cédric Krier 3a14737d86 Do not use a Transaction to copy SQLite database for tests restoration
Starting a Transaction can only be done on a already setup database as the
cache synchronisation may query the `ir_cache` table.

Closes #14742
2026-04-02 19:24:07 +02:00
Cédric Krier f2ef34f8fc Remove usage of deprecated grouped slice in ethanol production
Closes #14750
2026-04-07 15:27:48 +02:00
Cédric Krier 3a79a7a2e0 Remove leading space in VATEX codes for French chart of account 2026-04-13 12:37:14 +02:00
Sergi Almacellas Abellana b162fe645b Do not extract relatorio link's text as translation source 2026-04-10 13:52:02 +02:00
Cédric Krier 7bf94f6e79 Follow the guideline style for sections of main documentation 2026-02-27 08:35:57 +01:00
Cédric Krier 418a7bd898 Update documentation about handling exception
Since 57b1872a62fb the wizards display a list to be ignored and another to be
recreated.
2026-01-20 12:38:02 +01:00
Korbinian Preisler dca94f7365 Add missing f-string prefix in search for contact mechanisms for chat
Closes #14760
2026-04-09 17:45:01 +02:00
Nicolas Évrard 1c98320ccc Call on_modification on each Model with a replaced party
Closes #14684
2026-03-16 18:42:56 +01:00
Cédric Krier bcf8181107 Split indexes for history table to have either id or __id
815a0a887c3e added the index but the id and __id are just included to the index
when the pre-filtering could be improved if id was in the index and the window
order could be improved if the __id was in the index.
2026-03-31 13:51:29 +02:00
Cédric Krier a719345f7b Add index for target column of xxx2Many field on history table
Closes #14725
2026-03-31 12:02:51 +02:00
Cédric Krier 686bec27a3 Make the payment term fields readonly for non draft amendment lines
Closes #14746
2026-04-04 00:52:12 +02:00
Cédric Krier 9342315ac3 Remove padding on menu and tabs on small screen
Once the menu has 100% width, the padding must be removed otherwise the tabs
can still be visible.
2026-04-02 23:47:00 +02:00
Cédric Krier 5a599d35f4 Force 100% width to menu on small screen
Once the menu can no more be resized, its CSS width must be forced over the one
in style attribute set by the user resize.

Closes #14696
2026-04-02 23:45:51 +02:00
Cédric Krier 44ead02d4c Do not fail to apply statement rules if account is missing on party
Closes #14741
2026-04-02 17:57:49 +02:00
Cédric Krier 280d432ae4 Use party with origin's company in the context to retrieve accounts when applying statement rule
Closes #14740
2026-04-02 17:57:12 +02:00
Cédric Krier 9b255e2f63 Use mixin to copy of One2Many from product linked by template and product 2026-04-02 17:26:12 +02:00
Cédric Krier f0447cb3d7 Do not simply copy One2Many from product linked by template and product
Closes #14739
2026-04-02 17:25:24 +02:00
Cédric Krier d373790877 Do not match direct debit reception with SEPA mandate that is not validated
Closes #14738
2026-04-02 15:33:36 +02:00
Cédric Krier 7ba03db6eb Refresh resources when reloading record of form view
As the record is only cancelled and not recreated, the cached resources are
kept so they must be refreshed.

Closes #14733
2026-04-02 10:26:27 +02:00
Cédric Krier df765aee83 Do not use relation field from default order when fetching One2Many records
The records are already ordered by the field id to be grouped later so such
order clause has no impact on the result.
But they require joins that may not be needed otherwise.

Closes #14716
2026-03-26 18:00:24 +01:00
Cédric Krier 6a412267b0 Use gettext and normalized email for chat messages 2026-04-07 09:35:21 +02:00
Cédric Krier cd0299cccd Set List-Id and List-Post header to chat emails
Closes #14747
2026-04-07 09:36:13 +02:00
Cédric Krier c3f7b2d655 Remove Auto-Submitted header from chat emails 2026-04-07 09:31:56 +02:00
Cédric Krier fdc79d7144 Use the EXTRACT function to calculate the cost of the timesheet work 2026-04-07 16:58:15 +02:00
Sergi Almacellas Abellana 2fcfc82bcf Add an option to include the timesheet costs in the production costs
Closes #13304
2026-04-07 16:46:21 +02:00
Cédric Krier 063d384a4e Add naiad library 2026-04-07 17:40:41 +02:00
Cédric Krier 0e25c97f45 Add REST API 2026-04-04 23:03:18 +02:00
Cédric Krier dbe5c74cb6 Add rpc suffix to URL for RPC call 2023-11-12 23:43:19 +01:00
Cédric Krier 7e068856e9 Add RPC method name as fragment of the URL
This generates more meaning full URL in the browser network monitor.
2023-11-12 20:43:00 +01:00
Cédric Krier ceb1e9d0df Use relative path for server requests of sao
Closes #9239
2023-11-12 23:43:41 +01:00
Cédric Krier 84c47a0433 Support mounting application under a prefix
Closes #9239
2023-11-12 23:44:43 +01:00
Cédric Krier 05b4e9a6e9 Restrict mandate on direct debit reception to the same company as the journal
Closes #14737
2026-04-02 15:32:01 +02:00
Nicolas Évrard f623812818 Honor the sort parameter of Selection fields in the filter box
Closes #14731
2026-04-01 18:24:35 +02:00
Sergi Almacellas Abellana e5b655fd39 Make product customer readonly for non draft amendment lines
Closes #14727
2026-03-31 15:35:28 +02:00
Cédric Krier 50756bfcf1 Calculate cached quantities for inactive locations when closing a stock period
Closes #14664
2026-03-26 09:09:00 +01:00
Cédric Krier 72a2aa648b Enforce strictly positive rounding value for cash
Closes #14704
2026-03-25 12:53:28 +01:00
Cédric Krier 0f5f326964 Permit only valid lines to be selected for reconciliation
Closes #14703
2026-03-24 16:57:31 +01:00
Cédric Krier 6a10f36d49 Update the version of Stripe used 2026-03-29 12:04:54 +02:00
Cédric Krier 283b4fc0ca Set direct debit based on party configuration if there is no payment mandate define
Closes #14702
2026-03-24 16:36:12 +01:00
Cédric Krier 4ab2b722f5 Preserve the filter text when executing the reload client action
Closes #14699
2026-03-20 19:19:15 +01:00
Cédric Krier e38902b4ed Replace non-ASCII characters in translated strings 2026-04-01 15:22:17 +02:00
Cédric Krier 226c4e63a6 Rename party identifier si_businessid into si_maticna
The identifier was added using the alias before 3dc08a936ef7.
2026-04-01 14:19:20 +02:00
Cédric Krier 0efb097f55 Store Message-Id of email received on the corresponding chat message
Closes #14730
2026-04-01 13:07:51 +02:00
Cédric Krier c7c8810b8e Add ModelView to chat message
It is needed to store the message as result on the inbound email.

Closes #14729
2026-04-01 13:06:11 +02:00
Cédric Krier 5411ad3340 Add record name to chat channel 2026-04-01 13:05:17 +02:00
Cédric Krier 2821e4ddab Make chat channel readable only by the administrators 2026-04-01 13:04:45 +02:00
Cédric Krier 32d3cef4e4 Use session property instead of authorization for bus subscription
Since 375fb083e95a the userid may be defined in a cookie instead of the
authorization header.

Closes #14726
2026-03-31 13:26:00 +02:00
Cédric Krier 0a5b91f689 Fallback to Compact Syntax if RelaxNG files are not present
lxml can load compact syntax if rnc2rng package is installed.
This avoid the need to generate the RelaxNG files in development.
2026-03-30 11:29:57 +02:00
José Antonio Díaz Miralles 86800a9830 Do not use isolation in update_requirements hook unless necessary
Closes #14707
2026-03-26 22:39:31 +01:00
José Antonio Díaz Miralles 7c57fe0d9b Specify missing develop requirements
Closes #14707
2026-03-25 23:52:53 +01:00
Cédric Krier a516314edd Remove unused pending window domain and include submitted to processing window domain
Closes #14728
2026-04-01 08:42:54 +02:00
Cédric Krier e3a098ad11 Remove account_de_skr03 module 2026-04-01 10:59:57 +02:00
Sergi Almacellas Abellana f6f624a70e Remove account_es and account_es_sii modules
Closes #12277
2026-04-01 09:40:50 +02:00
Nicolas Évrard 44642bec77 Add support for emails on the chat channels 2026-03-31 18:59:55 +02:00
Nicolas Évrard 6a38874d57 Call _get_pixbuf_url with the right arguments
Closes #14666
2026-03-10 14:05:19 +01:00
Cédric Krier 833c2b9d72 Fix module name for migration of account value in payment
Closes #14523
2026-01-20 09:28:30 +01:00
Cédric Krier 8948297c23 Add labels to migration documentation 2026-01-20 09:26:56 +01:00
Sergi Almacellas Abellana 7d51113405 Update documentation of production work timesheet module 2026-03-30 22:20:54 +02:00
Sergi Almacellas Abellana 5ca906928c Update documentation of production work module 2026-03-30 22:13:32 +02:00
Sergi Almacellas Abellana e756249674 Update documentation of production routing 2026-03-30 22:13:40 +02:00
Alex Alias Montserrat 044ad2f1c0 Update documentation of sale complaint 2025-12-15 11:58:01 +01:00
Alex Alias Montserrat 626c61b3c1 Update documentation of stock supply 2026-03-29 17:14:46 +02:00
Alex Alias Montserrat 7e1bd14392 Update documentation of timesheet_cost 2026-03-29 13:22:15 +02:00
Alex Alias Montserrat 8894a88a53 Update documentation of timesheet 2025-11-13 12:43:57 +01:00
Cédric Krier ca5608e606 Add ethanol volume to price list formula 2026-03-28 17:54:47 +01:00
Cédric Krier 06a21c6354 Add support for selling with excise number using excise tax to calculate price list 2026-03-28 17:50:12 +01:00
Cédric Krier c71b23f817 Allow EU excise declaration in alcohol volume 2025-04-07 19:13:55 +02:00
Cédric Krier 0b9f808fcd Add account_stock_eu_excise for excise declaration 2026-03-28 17:41:16 +01:00
Cédric Krier 544e5a2b7c Manage ethanol in stock 2026-03-28 13:40:06 +01:00
Cédric Krier ea7a417d4a Add documentation about notification 2025-12-13 17:21:23 +01:00
Cédric Krier 792d8f9d5c Follow standard for product anchor in production documentation 2026-03-30 19:25:51 +02:00
Cédric Krier 62c614a7b7 Add sale_project_task module 2026-03-27 17:37:53 +01:00
Cédric Krier a49aa67d73 Calculate the quantities to ship and to invoice for sale and purchase 2026-03-27 19:32:32 +01:00
Cédric Krier 905a2b20ba Rename invoice method on shipment into on fulfillment 2026-02-25 11:37:37 +01:00
Cédric Krier 67b9c34b25 Do not show empty invoiced progress on project work 2026-02-25 15:24:25 +01:00
Cédric Krier d5b308ffb3 Add origin reference to work 2026-02-25 15:25:02 +01:00
Cédric Krier 801a805ab6 Add account_payment_check module 2026-03-27 18:36:21 +01:00
Cédric Krier 4bbe1e263c Fix documentation label for strict sequence 2026-01-13 15:41:04 +01:00
Cédric Krier b3da16647f Remove google_maps module
Closes #14608
2026-03-30 22:36:05 +02:00
Cédric Krier 741eaf801c Set sortable on table header instead of label
This way the cursor is rendered as pointer over the clickable element.
2026-03-18 19:47:50 +01:00
Cédric Krier 3c8621dc9f Improve style when resizing columns
- use box-shadow to simulate border on the stick header
- show resizer on hover
- render dashed border for columns when resizing

Closes #14693
2026-03-18 19:46:20 +01:00
Cédric Krier 1a70a6e362 Set the processing label when it is shown to be translated
Closes #14692
2026-03-18 17:35:20 +01:00
Nicolas Évrard 7c0d6a295a Allow to specify some XML fields value as relative to the subdirectory path 2026-02-24 22:39:38 +01:00
Nicolas Évrard 652f497110 Include subdirectories tryton.cfg when activating a module
Closes #14625
2026-02-28 00:16:45 +01:00
Nicolas Évrard b403fe8f39 Use a cookie to store the session token
Closes #14412
2026-03-30 16:24:44 +02:00
Cédric Krier 17d7a1ad22 Clear _chat attribute and unregister when closing chat or tab
Closes #14576
2026-03-18 17:18:42 +01:00
José Antonio Díaz Miralles 69afb65171 Include inactive keys from the dict schema when searching
Closes #14694
2026-03-29 22:31:44 +02:00
Nicolas Évrard 28c03e5e81 Consider empty string and None as incompatible with full text searches
Closes #14691
2026-03-18 17:23:14 +01:00
Sergi Almacellas Abellana ed30a4efde Delete the movable locations when the internal shipment is deleted
Closes #14690
2026-03-18 16:46:38 +01:00
Nicolas Évrard d0f6af4881 Reset the session login when cancelling the password challenge
Closes #14687
2026-03-17 17:45:22 +01:00
Nicolas Évrard 8d932ff6ff Set the overpaying statement line related_to type to account.invoice
We can infer that the extra amount will be used to pay another invoice so we
might as well help a little bit the user to select the right one

Closes #14683
2026-03-16 17:26:59 +01:00
Nicolas Évrard 502e2d5ecb Create a hook to compute the reverse tax and amount from the tax type
Closes #14681
2026-03-16 15:54:38 +01:00
Cédric Krier 264e27d88e Replace ShopifyAPI by shopifyapp
Closes #14243
2026-03-29 20:05:46 +02:00
Cédric Krier aba5c5b157 Do not call on_change_party when creating sale from webshop
Only the addresses are set from the party to prevent side effects from other
modules who may extended the method.
2026-03-25 22:11:59 +01:00
Cédric Krier 75ec32b080 Set header for sale from shopify before setting the lines
The lines may depend on the header like the shipping line which depends on the
carrier.

Closes #14706
2026-03-25 23:25:50 +01:00
Cédric Krier 5db4bb63c8 Fill invoice source amounts instead of checking amounts from UBL
Closes #14624
2026-03-14 00:46:13 +01:00
Cédric Krier acfece868a Check the invoice amounts against the source amounts 2026-03-13 23:53:22 +01:00
Cédric Krier df5dc23253 Add support for pick-up delivery method from Shopify
Closes #14581
2026-03-27 13:38:34 +01:00
Cédric Krier 41f63dbb1a Log the update of sales from Shopify
Closes #14711
2026-03-26 10:58:16 +01:00
Cédric Krier 65342e9877 Add contextual `_log` to force logging events
Closes #14712
2026-03-26 10:56:59 +01:00
José Antonio Díaz Miralles 080dc694ec Remove unused table instances in dispatcher
Since 8f2297978263 there are no more used.

Closes #14661
2026-03-29 11:50:11 +02:00
Cédric Krier 84bcad1e83 Close the database connection after memory database has been dropped
When dropped the global connection is set to None but it should be closed when
the transaction put back the connection.

Closes #13859
2026-03-24 10:55:44 +01:00
Cédric Krier 43cf9b7634 Commit after each reconciliation of the automatic reconciliation scheduled task
This avoid having a long running transaction on large database but keep sharing
most of the code with the wizard.

Closes #14674
2026-03-13 11:52:40 +01:00
Cédric Krier 86edccf764 Make retrieval of metadata for main doc via build really quiet 2026-03-29 08:57:01 +02:00
Cédric Krier 9055b68e74 Use current timestamp as last modified at for table query
The ModelSQL with table query may not define write nor create date since
5095928ec38a
2026-03-28 19:07:51 +01:00
Cédric Krier 794b61b163 Filter the MIME type of the additional documents in UBL allowed by the specification
Closes #14708
2026-03-26 08:14:45 +01:00
Cédric Krier 2f12db2751 Add emails to COPYRIGHT names 2026-03-23 16:08:13 +01:00
Cédric Krier 75159112f6 Add number to the project work efforts
Closes #14671
2026-03-12 18:12:50 +01:00
Cédric Krier 3b292c46b7 Forbid the payment of an amount of 0 when the amount is editable
Closes #14670
2026-03-11 19:04:22 +01:00
Cédric Krier 03655a335a Add notify_user to ModelStorage
Closes #14667
2026-03-11 10:01:51 +01:00
Cédric Krier 27dff955f1 Add missing log_records attribute to Transaction documentation 2026-03-11 10:01:22 +01:00
Cédric Krier 6a9565f9d4 Add generic management for label style in form widget 2026-03-10 15:45:24 +01:00
Cédric Krier 8550300972 Set the default locations for stock move when production is set
Closes #14665
2026-03-10 14:54:48 +01:00
Adrià Tarroja Caubet b9ed5e4aee Remove trailing spaces from the user name in the login window
Since e19329d25a6f user login field prevents trailing or leading spaces so the
clients can remove them from the login window.

Closes #13898
2026-03-27 18:15:43 +01:00
Cédric Krier b9b81dbc68 Publish a message when notifications are silenced
#14698
2026-03-20 18:42:55 +01:00
Cédric Krier 72e6f17b81 Limit the size of the notification payload send to the bus
The payload size is limited by the database but also there is no point to
overflow the user with too much notification popup.
So we publish only the first 4 messages and shorten them to 100 chars per line.

Closes #14698
2026-03-20 18:41:23 +01:00
Cédric Krier 25295bde68 Add test to check boolean value for button states
#14700
2026-03-21 09:22:21 +01:00
Cédric Krier ea9df1ca42 Convert to boolean the readonly state of the "Process" button on the inbound email
Closes #14700
2026-03-21 09:21:43 +01:00
Cédric Krier 6e482d8859 Convert to boolean the invisible state of the "Create Purchase" button on the purchase request
Closes #14700
2026-03-21 09:21:04 +01:00
Cédric Krier 54d422f224 Always convert JSON payload to stripe Event and replace dict methods by StripeObject methods
Since Stripe 15.0.0 the StripeObject no longer inherits from dict. This means
that we can no more manage payload as simple JSON but we must convert it to stripe.Event.
And we must replace dict method by their StripeObject equivalent.

Closes #14714
2026-03-26 16:23:55 +01:00
Cédric Krier 7edd09009d Update to Stripe API version 2025-09-30.clover 2026-03-06 12:17:27 +01:00
Cédric Krier c8c49bea09 Add deprecation warning when new API version for Stripe is available
Closes #14659
2026-03-06 12:09:44 +01:00
Cédric Krier 81872dee9b Fix format of CHANGELOG initial entry 2026-03-27 18:12:02 +01:00
Alex Alias Montserrar b8a951b95e Add a reference field to the quality inspections
Closes #12436
2026-03-27 18:10:21 +01:00
Cédric Krier 55da16f6a7 Use party lang Function field to set language for taxes and chat 2026-03-06 10:50:48 +01:00
José Antonio Díaz Miralles 5851c97fd6 Display the missing modules when modules are activated for the tests
Closes #14656
2026-03-27 16:48:18 +01:00
Cédric Krier a81884484a Update documentation of stock_package 2026-02-07 19:31:15 +01:00
Cédric Krier 3e4e9198a3 Add pack wizard on shipments and package
Closes #14586
2026-03-19 15:20:46 +01:00
Nicolas Évrard fe53481953 Wrap class when filling the pool
Closes #14695
2026-03-19 10:38:52 +01:00
Cédric Krier 718628fe0c Do not fail on calculating max ID when setting sequence on empty group
Since 9fdf4dbd66f2 set_sequence calculates the maximum ID but it may be called
with only 0 if the group is empty.

Closes #14689
2026-03-18 13:15:43 +01:00
Cédric Krier 81a4f7118d Add missing classmethod decorator to get_translatable_languages of language
Closes #14685
2026-03-17 15:18:34 +01:00
Cédric Krier 248dbc45f2 Fetch all non cancelled Shopify orders
Orders with only gift cards are directly archived by Shopify but we need to
fetch them.
2026-02-04 16:39:09 +01:00
Cédric Krier f9cfa0c422 Add support for gift card products on Shopify
Closes #14417
2026-01-09 18:31:28 +01:00
Cédric Krier af646f2d25 Add fields that calculate if the invoice is sent via Peppol
Closes #14651
2026-03-05 11:48:32 +01:00
Cédric Krier 1abb31b07d Unpublish the products from the web shops when deactivating them
Closes #14649
2026-03-05 10:46:50 +01:00
Cédric Krier 8251c37ed6 Permit administrator to create incoming Peppol document
Closes #14646
2026-03-03 19:52:55 +01:00
Nicolas Évrard 85825293de Do not set default values for new fields when there is no default
Closes #14631
2026-02-26 17:07:01 +01:00
Nicolas Évrard 667a53be21 Do not call the Function field getter when there's no ids to use it on
Closes #14697
2026-03-19 14:49:33 +01:00
Nicolas Évrard d47ddb9903 Remove direct calls to NOTIFY
In bb52a833e823 we forgot those calls

Closes #14705
2026-03-25 13:10:39 +01:00
Cédric Krier 39a22ae74f Use python3 to launch build 2026-03-26 00:32:49 +01:00
Cédric Krier 94c4f0a9e6 Rewrite coverage paths
Since tox is running tests on the installed package, the coverage paths are no
more relative to the repository root.
2026-03-25 19:39:52 +01:00
Cédric Krier a77f01aff0 Allow cash rounding with opposite method 2026-03-02 15:21:27 +01:00
Cédric Krier e4cb6234a1 Do not add comment on table nor column
Closes #14614
2026-02-19 09:54:48 +01:00
Cédric Krier a51a6249c0 Add attn to address
Closes #14633
2026-02-27 12:55:11 +01:00
José Antonio Díaz Miralles 661920f4db Remove the obsolete JSON dump and load methods from ModelData
Closes #14654
2026-03-25 08:20:17 +01:00
Sergi Almacellas Abellana 0f9feff82b Allow copying resources from sale rental to its invoices
Closes #14632
2026-02-26 17:52:01 +01:00
Cédric Krier 04739b25bb Assign shipment before pick in European stock accounting test scenario 2026-02-12 13:08:44 +01:00
Cédric Krier 41d60e5d03 Do not post twice invoice in Spanish account test scenario 2026-02-11 12:50:17 +01:00
Cédric Krier f34ebe4ffb Do not call twice wait on account export in test scenario 2026-02-11 12:44:02 +01:00
Cédric Krier b540f5bbb8 Cancel before reset to draft and validate before posting statement in test scenario 2026-02-11 11:02:34 +01:00
Cédric Krier c013aed083 Do not try to cancel move in shipment in anglo-saxon test scenario
Instead it is the shipment that must be tried to be cancelled because the
cancel button on move is forbidden if it is in a shipment.
2026-02-11 10:57:23 +01:00
Cédric Krier a61814d46e Assign shipment before pick in Shopify test scenario 2026-02-10 19:22:32 +01:00
Cédric Krier 39e5dc7ffc Do not process parent document incoming after split in test scenario
Only active document can be processed.
2026-02-10 18:06:00 +01:00
Cédric Krier f06ae5f4d8 Reset to draft only non draft sales in stock quantity test scenario 2026-02-10 12:37:51 +01:00
Cédric Krier be609bf3e8 Patch assignation required in test scenario to create move without shipment 2026-02-10 17:42:42 +01:00
Cédric Krier b5a13b5c5e Use customer shipment to create outgoing move for lot trace test scenario 2026-02-10 11:55:23 +01:00
Cédric Krier d4c75a5499 Use internal shipment to create product needs in stock supply test scenario 2026-02-10 17:08:34 +01:00
Cédric Krier 853870a1c9 Set BoM when testing production split 2026-02-09 21:46:16 +01:00
Cédric Krier b3525db241 Do not activate module already activated for the demo 2026-02-09 20:38:45 +01:00
Cédric Krier ea7a2c3aa2 Do not reset to wait supplier return shipment in scenario
The purchase already creates return shipments in waiting state.
2026-02-09 18:15:37 +01:00
Cédric Krier ed924a6c25 Test empty sale and purchase with a comment line
The states of the button prevents to quote without any line.
2026-02-10 18:09:54 +01:00
Cédric Krier 7d040c8cb9 Check button states when testing access
Closes #14591
2026-02-09 18:13:34 +01:00
José Antonio Díaz Miralles cd51fce0b7 Move the logout entry and add a help entry to the notification menu
Closes #14151
2026-03-24 19:28:02 +01:00
Cédric Krier fa9e60bb9c Do not use Literal to count in SQL
Following ce972acc1cf2, this conversion was missing and prevent psycopg 3 to
determine the data type.
2026-03-24 18:25:19 +01:00
Nicolas Évrard 475e68df76 Remove the files of Binary fields from the Filestore
Closes #13861
2026-03-24 09:30:17 +01:00
Nicolas Évrard b44c004825 Add deletion on FileStore
We're identifying each file in the filestore with a UUID4 in order to avoid
collisions. It has the drawback that we will store twice the same file but on
the other hand we can now remove each file from the store as there is no more
collision.

In order to identify files named previously we're using textual representation
of the UUID with the hyphens. Previous IDs do not have hyphens.
2025-01-09 18:53:09 +01:00
Cédric Krier 9cf2412f7e Add visual hint on widget of modified field
All the widget properties used for style are regrouped under a unique styled
widget which simplify the CSS rules.
For xxx2Many widget, there is not style applied.
The style is reset when the widget is not linked to a field.

Closes #14613
2026-02-17 18:10:15 +01:00
Cédric Krier b77d4dbe06 Remove default import of wizard in module template
It is encouraged to use button to launch wizards, so the scenario should not
need it too often.
2026-02-24 12:41:49 +01:00
Cédric Krier a9604157ee Add VATEX code to Belgian taxes 2026-02-04 09:40:55 +01:00
Cédric Krier 1ec82407cf Add Belgian purchase and sale VAT zero rated goods 2026-02-03 15:19:31 +01:00
Cédric Krier 1dec292c0b Add UNECE code to Belgian taxes 2026-01-09 14:33:46 +01:00
Cédric Krier e7294b45c7 Add VAT exemption code on tax
Closes #14573
2026-02-04 10:12:56 +01:00
Cédric Krier a88c575fcc Retry to dump status later after unexpected exception
Closes #14678
2026-03-16 10:30:54 +01:00
Cédric Krier 145ce8f2f8 Make retrieval of metadata via build really quiet 2026-03-22 09:07:23 +01:00
Cédric Krier 855f129ee8 Use https for wikipedia links to BIC and IBAN 2026-03-23 09:03:36 +01:00
Cédric Krier f6cc09c813 Do not check link to help.shopify.com
The website requires JavaScript.
2026-03-23 09:03:05 +01:00
Cédric Krier 5310b00496 Remove grouped_slice per IN_MAX
The usage of ``grouped_slice`` without size is deprecated since `=
ANY(ARRAY[%s])` is used for PostgreSQL and SQLite is used only for tests.

The ``Database.IN_MAX`` is replaced by ``backend.MAX_QUERY_PARAMS`` which is a
more accurate limit of the backend.
The SQLite limits is indeed SQLITE_MAX_EXPR_DEPTH so we use a empirical value.
2026-03-22 21:05:26 +01:00
Cédric Krier 0da67bce21 Deprecate reduce_ids for SQL_OPERATORS['in']
Closes #12989 #13897
2025-12-26 10:57:44 +01:00
Cédric Krier 7b231e74e9 Use array as IN operators 2025-12-26 10:58:30 +01:00
Cédric Krier 6b4218f8dd Use psycopg_pool resize to clear unused database connections 2025-11-25 15:05:02 +01:00
Nicolas Évrard 299dd6b1c9 Update to Psycopg 3
Closes #10901
2026-03-22 19:53:32 +01:00
Cédric Krier 7fb5a4a3de Do not use Literal to count in SQL
The * is not actually a parameter of the aggregate function so it is better to
let python-sql manage it with its default value.
2025-12-25 09:47:23 +01:00
Nicolas Évrard 4ab7069dab Delegate the notifications handling to the backend 2025-11-25 13:27:24 +01:00
Cédric Krier dada23bcb5 Do not install mrml on Python version greater than 3.14
See https://github.com/jdrouet/mrml/issues/597
2026-03-21 12:07:21 +01:00
Cédric Krier d3c8a8e55d Add support for Python 3.14 2026-03-21 09:02:25 +01:00
Cédric Krier 42b0fc7061 Remove support for Python 3.9 2026-03-21 08:48:06 +01:00
Cédric Krier e15c0b7d7a Upgrade to pyproject using hatchling as build-system 2026-03-21 18:46:34 +01:00
Nicolas Évrard d6dc19b523 Skip the reconciliation of already reconciled lines with debit == credit == 0
Closes #14679
2026-03-16 12:28:56 +01:00
Cédric Krier a49ee526d2 Order Account Parties of General Ledger by party before id by default
Closes #14669
2026-03-11 16:03:00 +01:00
Cédric Krier 9821476565 Show account parties in ledgers when they contain lines 2026-03-11 15:20:41 +01:00
Cédric Krier 4c7f871e60 Generate an Account Party entry also for party having a move line in a children account
Closes #14668
2026-03-11 15:59:05 +01:00
Cédric Krier 82e08446fc Define Typless fields per document type
Closes #14648
2026-03-19 16:41:35 +01:00
Cédric Krier df3fd82299 Do not show empty web shop URL for product
Closes #14650
2026-03-05 10:49:11 +01:00
Cédric Krier 199408510a Store column widths per occurrence
Closes #14645
2026-03-03 19:48:24 +01:00
Cédric Krier efaaf3513b Do not use attribute width as computed width and restore computed width on reset
If the attribute width (which is the user width) is used as computed width, on
reset of the widths the custom widths are still in used.
2026-03-03 18:50:22 +01:00
Cédric Krier 4c0eb9d4a9 Clear fields_view_get cache after resetting column widths 2026-03-03 18:37:56 +01:00
Cédric Krier 5b27ff2acd Get custom column width using column attribute name
Closes #14643
2026-03-03 18:33:24 +01:00
Cédric Krier 2eafdd5564 Explicitly close sqlite connection
The context manage on Connection only commit the connection but it should still
be explicitly closed.

Closes #13859
2026-03-05 08:10:46 +01:00
Cédric Krier b9f12197bf Add tests for calculating tax rule pattern for countries 2026-03-18 12:03:50 +01:00
Maxime Richez f7081450f1 Use the first non-invoice line origin to calculate tax pattern for countries
Closes #14388
2026-03-18 12:01:17 +01:00
Cédric Krier b58049e47e Use flat balance for general ledger
Closes #14294
2026-03-11 12:51:12 +01:00
Nicolas Évrard 4eca86d8e7 Use DOMElement methods in set_empty
eb3e557996f0 changed the type of the element passed to set_empty to use
directly the DOMElement. Thus we should use directly the equivalent methods
provided by this interface as it's more efficient anyway.

Closes #14686
2026-03-17 16:25:14 +01:00
Cédric Krier e8c0047fca Sort statement lines per origin before creating moves
Closes #13941
2026-02-28 15:26:23 +01:00
Cédric Krier b7a8ad390f Use compact SIRET code for legal ids in UNCEFACT Invoice
Since 06e183433933 the identifier code is formatted and not the compact code.
2026-03-16 10:22:14 +01:00
Cédric Krier e9c1da7197 Set a default undefined payment mean in UNCEFACT/CII invoice
Chorus-pro requires to have a SpecifiedTradeSettlementPaymentMeans.
2026-03-16 10:20:09 +01:00
Cédric Krier 3594517396 Avoid redirection in documentation links 2026-03-02 10:58:40 +01:00
Cédric Krier af2e06bb32 Set headers and restrict to 1 worker when checking documentation link
This follows the wikipedia robot policy:
https://wikitech.wikimedia.org/wiki/Robot_policy

Closes #14637
2026-03-02 10:58:19 +01:00
Cédric Krier f48a5b156a Use compact identifier code for Spanish identifier code
Since 06e183433933 the identifier code is formatted and not the compact code.
2026-03-15 16:18:06 +01:00
Cédric Krier 33856ac2a1 Add model attribute to table handler 2026-03-14 18:12:02 +01:00
Cédric Krier 2b626f1708 Document history attribute of table handler 2026-03-14 18:11:34 +01:00
Maxime Richez 72efd7a9de Rename also columns in history table when renaming columns
Closes #14561
2026-03-14 18:09:29 +01:00
Adrià Tarroja Caubet f34cbbcbc6 Do not re-number sales from a point of sale once they have been reopened
Closes #14568
2026-03-14 17:35:17 +01:00
Cédric Krier 709832c16b Use currency rounding when currency has no cash rounding set
Closes #14638
2026-03-02 15:23:13 +01:00
Cédric Krier 549f37c82f Test consolidation company selection on invoice numbering 2026-03-09 10:55:14 +01:00
Cédric Krier fb0ff9c7de Do not select the invoice company as consolidation company
Closes #14662
2026-03-09 10:54:45 +01:00
Cédric Krier 22df2b5490 Use integer to set invisible attribute on payment means of invoice
The attribute must be an integer according to the RNG schema and not a string.
2026-03-14 10:36:13 +01:00
Cédric Krier 7dac232ad3 Do not divide LineExtensionAmount by a quantity of zero from UBL invoice
The unit price of such line can be the LineExtensionAmount.

Closes #14673
2026-03-14 09:58:22 +01:00
Cédric Krier cd48d51cce Use python3 in shebang 2026-03-04 12:36:33 +01:00
Nicolas Évrard 8cd44a1130 Replace jQuery's css by accessing directly the element style
jQuery's css method will call window.getComputedStyle() which will force style
recomputation and often force a layout reflow (e.g. when dealing with grid
properties)
2026-02-02 20:18:18 +01:00
Nicolas Évrard 69265a2d3e Replace jQuery's hide and show by our own implementation
jQuery's implementation triggers forced reflows and style recomputation which
hinders performances. Given that we only care about the node on which the call
is done we can use a simpler and more efficient implementation.

Closes #14330
2025-11-21 16:09:28 +01:00
Nicolas Évrard b9368f8c59 Replace d3 by billboard.js
Close #14313
2026-03-13 15:14:09 +01:00
José Antonio Díaz Miralles 6bbf39afb4 Replace bower by nodejs to handle dependencies
Closes #13566
2024-10-04 20:54:56 +02:00
Maxime Richez f5d77c5420 Move purchase lines in a specific tab in production form
Closes #14663
2026-03-13 09:43:36 +01:00
Adrià Tarroja Caubet 96b876a14d Normalize Sao language codes to BCP 47 format
Normalize lang and locale values to use BCP 47 tags.

Closes #14653
2026-03-05 17:26:35 +01:00
Cédric Krier 942c3cdb15 Filter out empty references and numbers when joining them from sales for UBL invoice
Closes #14652
2026-03-06 01:13:25 +01:00
Cédric Krier 8607d60cf8 Always allow manual method on sale
Since 77cbf0a1abbe the manual methods can be triggered with a button so it does
not prevent to trigger other methods.

Closes #14622
2026-02-23 18:24:15 +01:00
Cédric Krier 00c723b0eb Manage payment terms from Shopify
The sale is always confirmed when the Shopify order has payment terms.

Closes #14619
2026-02-20 17:50:02 +01:00
Cédric Krier a3493a3f2f Fill payment means when parsing UBL invoice 2026-02-16 10:49:41 +01:00
Cédric Krier 7cb548f280 Add iban compact property to bank account 2026-02-16 13:18:22 +01:00
Cédric Krier 8c36eefc69 Support getting bank from BIC string 2026-02-16 10:48:14 +01:00
Cédric Krier 15878ffbd5 Render invoice payment means in UBL and UNCEFACT 2026-02-13 18:28:24 +01:00
Cédric Krier c5113b19dc Add UNCL4461 code to invoice payment mean 2026-02-13 18:27:14 +01:00
Cédric Krier 8cb0fb2bbd Check invoice payment means when submitting payment 2026-02-13 14:22:58 +01:00
Cédric Krier cc1f6e424c Add direct debit as instrument for invoice payment means 2026-02-16 12:01:18 +01:00
Cédric Krier 6246ea244a Add payment means to invoices 2026-02-16 12:32:35 +01:00
Cédric Krier 88799ccc0c Add translated type string to bank account number 2026-02-12 11:09:23 +01:00
Cédric Krier 27a6a3e0b3 Allow cancellation stock group to cancel running and done productions
Closes #13899
2026-02-11 09:38:43 +01:00
Cédric Krier 9d871c8244 Add a group that is allowed to cancel done shipments and moves
Closes #13899
2026-02-11 10:41:09 +01:00
Cédric Krier c0396ab1db Define Function field with column_ as searchable and sortable 2026-02-25 09:08:24 +01:00
Cédric Krier e4c5d7c575 Add model and field Many2One on translations 2026-02-24 11:35:00 +01:00
Cédric Krier fa9749fe48 Support fmany2one based on Function fields 2026-02-24 11:34:42 +01:00
Cédric Krier d494939b5f Use label Name for the name of translation 2026-02-24 09:19:37 +01:00
Cédric Krier a81f79a497 Use length of the name field of translation as fallback of substring
Closes #14623
2026-02-24 09:19:16 +01:00
Cédric Krier 126d71063c Do not insert values for Function fields in history table
Since 49748579c23a Function fields can have an SQL type so it is not enough to
distinct the columns that must be inserted as first record in history table.

Closes #14636
2026-03-02 09:55:54 +01:00
Cédric Krier 204c5f826d Limit digit to positive integer when formatting float in domain parser
Closes #14557
2026-02-28 12:57:24 +01:00
Cédric Krier 7c630a29a2 Replace the UN M49 unstats link by Wikipedia link in the country documentation 2026-03-08 11:17:53 +01:00
Cédric Krier b06d0b3c7e Remove internal name from record name of model field 2026-02-18 14:24:35 +01:00
Cédric Krier 4d0070784b Search for unused view XML recursively 2026-02-27 13:30:52 +01:00
José Antonio Díaz Miralles 72c809e6f6 Fix typo in menuitem handler docstring
Closes #14655
2026-03-05 19:13:11 +01:00
Cédric Krier 1367643bd0 Do not copy caches of stock periods
Closes #14639
2026-03-02 14:15:14 +01:00
Cédric Krier 3d41e8c42b Order cron logs by descending ID
User is mostly interested in the last runs.
2026-02-27 21:41:52 +01:00
Cédric Krier eed012c24f Add optional account to the list of payable/receivable lines
Closes #14582
2026-02-05 15:40:29 +01:00
Cédric Krier 0d91111ef4 Select option on double click in selection dialog
The form submit event is triggered when the radio div is double clicked.
The radio elements are put in a form-group to restore margin since
81bc564e03e0.
And the option is required to submit the form.

Closes #14616
2026-02-19 17:06:41 +01:00
Cédric Krier c49d41b181 Set the address name as company name for Sendcloud
When company name is set, the name become the attention name for Sendcloud and
the company name is the recipient name of the address.

Closes #14549
2026-01-23 19:09:31 +01:00
Cédric Krier f579c4e539 Test the processing of received Peppol invoice from Peppyrus 2026-02-25 18:54:40 +01:00
Cédric Krier 6bf0bc1641 Set state to processing for Peppol edocument before actually process them
The actual process method checks that the state of the document is still
processing so it must be written before and not rely on the transition to write
it.

Closes #14626
2026-02-25 18:54:03 +01:00
Cédric Krier b27daaf806 Fix typo in the class name of balance sheet comparison context 2026-02-26 09:35:20 +01:00
Adrià Tarroja Caubet fc02257656 Test model context in type statement report against the right name of context
There is a typo in the model context of 'account.balance_sheet.comparison.context'.

Closes #14628
2026-01-08 17:37:09 +01:00
Cédric Krier 4d2dd71764 Enforce invoice type for origin of invoice line
Closes #14611
2026-02-16 19:19:01 +01:00
Cédric Krier c636664c17 Use only line extension amount to set unit price of UBL invoice line
Closes #14493
2026-02-16 17:22:16 +01:00
Cédric Krier e37a2be600 Use relation name to retrieve the invalid domain of Reference field
Closes #14603
2026-02-12 12:58:09 +01:00
Cédric Krier aa8e767245 Fill blank state of empty notification menu
Closes #14575
2026-02-05 16:12:46 +01:00
Cédric Krier b41dc54d6b Use gui base when building with cx_Freeze
Since cx_Freeze>=7.0, 'Win32GUI' value for base is no more supported.

Closes #14606
2026-02-14 09:49:11 +01:00
Cédric Krier 2b7c3f9f89 Update template to use invoice taxes of lines as invoice tax
Closes #14609
2026-02-16 13:31:03 +01:00
Cédric Krier 071d5e4fef Add timestamp field on ModelStorage for last modified
Closes #14202
2026-02-25 09:04:03 +01:00
Cédric Krier 62bc81360b Filter dictionary mapping of model names by classes
Closes #14601
2026-02-12 11:14:07 +01:00
Cédric Krier c1027e6174 Add empty extras test to modules without needs
Since version 4.36.0 tox is validating extras option.
2026-02-22 12:24:35 +01:00
Cédric Krier f6b1fdd756 Enforce utf-8 encoding for account chart generated by xsltproc
Closes #14617
2026-02-20 09:59:42 +01:00
Cédric Krier 57aabfb14e Support Function field without getter but SQL expression
Closes #4369
2026-01-30 18:06:45 +01:00
Cédric Krier 52326c4b08 Allow customizing SQL expression of field 2026-01-29 15:24:10 +01:00
Cédric Krier dfe58aa125 Use tables and Model as arguments for sql_column of the Field 2026-01-29 12:42:56 +01:00
Cédric Krier 4435474f3e Show approve button on Stripe refund payment when submitted
Closes #14599
2026-02-10 19:30:10 +01:00
Cédric Krier 6f8abf2d5f Show email buttons of marketing record activity when the state is done
The email is sent only when the record activity is in the state done so the
buttons must not be available in any other state.

Closes #14597
2026-02-10 17:53:53 +01:00
Cédric Krier 79087b513f Decorate post method of sale point with the button decorator
Closes #14594
2026-02-10 12:43:51 +01:00
Cédric Krier 2cceab6d19 Show create quotation button for draft, quotation and received purchase request
Closes #14593
2026-02-09 20:47:41 +01:00
Cédric Krier 57b9ccf407 Fix order and z-index of backdrop for stacked modal
Closes #14588
2026-02-06 19:00:24 +01:00
Cédric Krier eee2a18f73 Switch the view when user cancel the new record
Closes #14583
2026-02-05 18:21:05 +01:00
Cédric Krier 9ea8618812 Add padding to actions of completion
The actions are rendered in a separated list and no more as items of the
dropdown so we must replicate the same padding for visual consistency.

Closes #14584
2026-02-05 18:52:00 +01:00
Nicolas Évrard cceb3e81d9 Use always fork method to test process local
We can not rely on the default process method of multiprocessing module.

Closes #14579
2026-02-09 17:33:32 +01:00
Cédric Krier d3bac177ae Make always sensitive reload button for view other than form
Closes #14556
2026-02-05 18:17:06 +01:00
Cédric Krier 236ef98b7a Fill blank state of empty favorite menu
Closes #14574
2026-02-04 12:52:19 +01:00
Ahmed AlBoori 92e85ab498 Add missing key parameter to get_products in web shop
1cf6e5cb9e4f added the parameter but did not update the tax rule extension.

Closes #14620
2026-02-23 11:08:31 +01:00
Cédric Krier 0b58af3b22 Add searcher to the shipments field on invoice line 2026-02-03 10:20:59 +01:00
Cédric Krier 86bc62d126 Display and order by create date/time in error list 2026-01-31 17:22:42 +01:00
Cédric Krier 16ca654159 Allow the UserError and UserWarning exceptions to be raised when testing the buttons
Closes #14539
2026-01-22 23:15:21 +01:00
Cédric Krier 14088e1de3 Replace extension separator by underscore in report name used as temporary file 2026-01-28 10:39:07 +01:00
Cédric Krier d7b80ff2ee Add support for basic authentication for user application
Closes #14528
2026-01-21 14:55:49 +01:00
Cédric Krier aafdc31cea Add an web shop URL to sales
Closes #14538
2026-01-22 18:32:26 +01:00
Cédric Krier e7fa8e4461 Add environment variable to enable development mode
Closes #14530
2026-01-21 19:12:34 +01:00
Cédric Krier bddbc06222 Do not check for missing parent depends when the One2Many is readonly
Closes #14526
2026-01-20 17:31:26 +01:00
Cédric Krier 7573e8fbfd Set BillingReference to Invoice and Credit Note UBL
Closes #14517
2026-01-19 12:17:43 +01:00
Cédric Krier 4e3f4055ce Add an origin invoices field to the invoice 2026-01-19 12:15:30 +01:00
Cédric Krier 4808ff83ab Improve layout of invoice credit form 2026-01-19 09:59:37 +01:00
Cédric Krier 1e32483232 Preserve line number when converting doctest files to python files 2026-01-17 18:01:38 +01:00
Cédric Krier a3af9cdb68 Remove default invoice type using the context
Since 6693e138391b the context keyword is no more used.
2026-01-17 18:12:55 +01:00
Cédric Krier 0231415b49 Add a menu entry for party identifiers
Closes #14507
2026-01-16 10:38:37 +01:00
Adrián Bernardi b7915d38ea Use the same context for the account getter and searcher of general ledger
Closes #14590
2026-02-19 13:07:37 +01:00
Cédric Krier dfa6b018a0 Charge duties and taxes to shipper based on incoterm
Closes #14424
2025-12-15 17:03:51 +01:00
Cédric Krier 49e1e498c9 Add export/import duties on incoterm 2025-12-15 17:03:34 +01:00
Nicolas Évrard a56b42b66c Rename history sequence when the table is renamed
Just like in ff68233bdeb1 we need to also rename the history sequence name as
the migration to identity relies on the sequence name including the table name.

Closes #14598
2026-02-10 18:21:47 +01:00
Cédric Krier f38652ef03 Ensure that the unit price on the invoice line is not negative for Peppol
Closes #14504
2026-01-15 22:34:01 +01:00
Cédric Krier b0ff152120 Format the party's identifier codes
Closes #14485
2026-01-16 16:56:47 +01:00
Cédric Krier 86d2fdfe50 Do not sort party identifier selection 2026-01-16 17:01:25 +01:00
Cédric Krier d5d7eee3b9 Add Senegal Tax Number identifier 2026-01-11 12:12:51 +01:00
Cédric Krier 8b25d8c10e Add Azerbaijan Tax Number identifier 2026-01-11 12:10:00 +01:00
Cédric Krier 5540c9c6b9 Add French Trade Registration Number identifier 2026-01-11 12:08:42 +01:00
Cédric Krier 6f83c5b9b0 Add Mozambique Tax Number identifier 2026-01-11 11:59:43 +01:00
Cédric Krier c6ae81593b Use th_moa as tax identifier instead of th_tin 2026-01-11 11:57:47 +01:00
Cédric Krier 7bf7ba9694 Add Russian Primary State Registration Number identifier 2026-01-11 11:54:19 +01:00
Cédric Krier 3428e53de6 Add Spanish Activity Establishment Code identifier 2026-01-11 11:53:14 +01:00
Cédric Krier f58722b726 Add Belgian Social Security Number identifier 2026-01-11 11:50:56 +01:00
Cédric Krier cb1f927569 Add Slovenian Corporate Registration Number identifier 2026-01-11 11:49:22 +01:00
Cédric Krier bf11acb591 Update required version of python-stdnum to 2.22 for party module 2026-01-11 11:44:09 +01:00
Cédric Krier 1942b6f3a7 Remove custom ogm_vcs to only use python-stdnum implementation 2026-01-11 11:42:04 +01:00
Cédric Krier 592e09d67e Support MJML syntax for marketing email 2025-12-11 15:20:11 +01:00
Cédric Krier 2989e66585 Lazy import html2text and weasyprint 2025-12-11 17:57:01 +01:00
Cédric Krier b034e23e91 Support the conversion of MJML reports to HTML
Closes #12597
2025-12-11 16:31:51 +01:00
José Antonio Díaz Miralles eeef31b221 Fix css style format for button of marketing email
Closes #14451
2026-02-18 11:28:35 +01:00
Cédric Krier 92606c8f32 Remove gap for empty row or column
The container gap is still applied on invisible element if they are defined in
the template.
The solution is to fake gap using margin between consecutive elements and to
not display empty elements.
For column gap the horizontal margin must be compensated with negative margin
on the grid and padding on the elements to avoid to overflow the grid.

Closes #13852
2026-01-30 10:44:25 +01:00
Cédric Krier c260313c23 Use the legal notice of tax as tax exemption reason in UBL invoice
Closes #14572
2026-02-04 10:03:48 +01:00
Cédric Krier 14c2a4435c Add an "Update Status" button to the Peppol document 2026-01-15 10:35:05 +01:00
Cédric Krier f7f8c002b7 Set revision context before clearing the screen
This prevents the clear method (which set the current record to null) to update
the URL with the old revision and thus opens a new tab.

Closes #14577
2026-02-04 15:26:34 +01:00
Cédric Krier ce6c415c69 Search unit of measure with enough digits for the quantity in UBL invoice and credit note
Closes #14541
2026-01-23 23:49:58 +01:00
Cédric Krier 1b83f7c063 Set required on value of party's contact mechanism
Closes #14563
2026-01-30 11:20:26 +01:00
Cédric Krier 01d74bf4ea Do not update UNECE code for unit of measure
Closes #14560
2026-01-26 15:55:53 +01:00
Cédric Krier 24a53758fd Use invoice taxes from line to render tax category in UBL Invoice
Closes #14571
2026-02-04 09:53:06 +01:00
Cédric Krier a4a376e808 Use amount from transaction details when available
A batched transaction may have many details and amounts that are grouped as the
entry amount.

Closes #13823
2026-02-01 19:01:49 +01:00
Cédric Krier c537a8df33 Test if width is set before testing if it ends width '%'
Closes #14578
2026-02-04 15:29:51 +01:00
Cédric Krier 5d8e111890 Save synchronously the tree state of the menu when the page is unloaded
The callback of window.onbeforeunload can only be synchronous in order to be
sure that it is fully executed.

Closes #14543
2026-01-23 12:04:00 +01:00
Cédric Krier e65cf3454b Log RPC error in the console 2026-01-23 12:02:52 +01:00
Maxime Richez 506af1e985 Do not round None value when entering non decimal text in number entry
Closes #14559
2026-02-06 15:32:39 +01:00
Cédric Krier aee7fa10fd Update number next instead of internal when migrate move's sequence to strict
The number next has a default value which override the internal value when the
setter is called.

Closes #14545
2026-01-23 16:05:16 +01:00
Cédric Krier 50bb0e37d7 Copy company when migrating move sequence of fiscal year and period to strict
Closes #14545
2026-01-23 15:48:44 +01:00
Cédric Krier d59d2ce496 Do not include removed records in the search domain of One2Many
Adding an OR-ed clause prevents the domain inversion to set any unique values
when creating a record from the search window.
The removed records can be re-add with the undelete button instead.

Closes #14540
2026-01-23 09:57:31 +01:00
Cédric Krier a7fe75478b Prevent setting a phantom BoM on the BOM input and output with a product already set
Closes #14536
2026-01-22 18:53:34 +01:00
Cédric Krier dd1cdfe656 Prevent using phantom BOM on production
Closes #14535
2026-01-22 17:28:16 +01:00
Cédric Krier faa9c7bf46 Scroll element in to view using center and for all the scrollable ancestors
Closes #14527
2026-01-20 18:43:53 +01:00
Cédric Krier 26e171099d Wait for the DOM to be ready before hiding the notification indicator.
Although the NotificationMenu is constructed on load, the DOM may not yet be
ready, meaning that the observer triggered by the .hide call cannot find any
other indicators to hide. Wait for the DOM to be ready to hide the notification
indicator.

Closes #14513
2026-01-18 13:38:12 +01:00
Cédric Krier 381703a194 Clear any default incoterm for sale created for web shop
The default incoterm may prevent to save the sale.
So we let the quotation transition set the incoterm values.

Closes #14521
2026-01-19 19:05:51 +01:00
Cédric Krier a5bb7d8835 Remove old field names when updating model data
Closes #14511
2026-01-17 00:55:00 +01:00
Cédric Krier 12aebbcba0 Test if origin id is greater or equals to 0 before accessing the target record name
Closes #13498
2026-01-27 12:01:42 +01:00
Cédric Krier 2e973901b4 Inherit color for close button 2026-02-04 11:41:26 +01:00
José Antonio Díaz Miralles 4f1eb55810 Add a button to close the Filters modal
Closes #13306
2026-02-04 11:39:34 +01:00
Cédric Krier ac57101f77 Register product after template extension to add UNECE codes
Closes #14570
2026-02-03 14:39:49 +01:00
Maxime Richez 767ff56b06 Add missing warning key for PackWarning on Internal Shipment
Closes #14569
2026-02-02 13:53:44 +01:00
Cédric Krier dd2738f7b2 Do not try to add parameters to empty URL
Closes #14505
2026-01-19 12:30:41 +01:00
Cédric Krier 2238dee3e1 Use create date to calculate production work duration without write date
Closes #14562
2026-01-29 10:26:59 +01:00
Maxime Richez 24b9ca1575 Set incoterm required on extended intrastat for sale between EU countries
Closes #14531
2026-01-30 17:32:18 +01:00
Cédric Krier f1eea7c11e Correctly render address streets in UBL invoice for Peppol
Closes #14566
2026-01-30 15:24:46 +01:00
Cédric Krier b913230cac Use BIGINT for invoice number digit and limit size to 18 digits
Closes #14534
2026-01-22 17:23:12 +01:00
Cédric Krier 08915bb5ad Unpack table and clause when converting domain for payable/receivable date
Closes #14533
2026-01-22 13:54:58 +01:00
Cédric Krier b57bedf337 Support clause on multiselection field with operator in and value None
Closes #14520
2026-01-19 16:40:01 +01:00
Cédric Krier 16dd9ae446 Set product on invoice line base on allowance/charge reason code from UBL invoice 2026-01-28 15:58:01 +01:00
Cédric Krier 19d4b91df2 Render allowance and charge in UBL invoice 2026-01-26 15:38:06 +01:00
Cédric Krier 8f08fcf6bf Add UNECE allowance, charge and special service code 2026-01-26 15:42:27 +01:00
Cédric Krier 49bcf51aca Import UBL allowance/charge as invoice lines
Closes #14524
2026-01-26 12:08:41 +01:00
Cédric Krier 7620829d61 Search for similar invoice line with the same category of unit for UBL invoice line
Closes #14548
2026-01-23 18:50:42 +01:00
Cédric Krier daad7943e6 Set the invoice type on invoice line from UBL invoice
The invoice type is needed to set the right account from the product.

Closes #14547
2026-01-23 15:29:07 +01:00
Cédric Krier 7c8e7bc23f Group tax lines per tax having the same UNECE codes in UBL invoice 2026-01-23 13:02:19 +01:00
Cédric Krier 0c503833d3 Do not group taxes by tax group in UBL invoice and credit note
The Peppol UBL rules limit to a single TaxTotal.

Closes #14542
2026-01-23 11:05:13 +01:00
Maxime Richez 93d0ea51f5 Do not coalesce quotation validity to generate domain for expired quotations
Closes #14558
2026-01-26 13:37:04 +01:00
Cédric Krier 680344c92b Format float and computed Decimal using fixed-point notation
This avoid the usage of scientific notation.
For float we must convert them to Decimal to get a precision large enough to
show all coefficient digits.
For computed Decimal (which are thus not rounded) we must normalized them first
to avoid trailing 0.

Closes #14522
2026-01-20 09:19:12 +01:00
Cédric Krier 8ae58308ce Use schemeID to search for identifier of the same type
Closes #14516
2026-01-19 11:43:28 +01:00
Cédric Krier 90ef7c822c Use the company IDs from UBL as identifier
Closes #14515
2026-01-19 11:48:55 +01:00
Cédric Krier 451a5b9fc7 Create the party name using the registration name of the legal entity from UBL first
Closes #14514
2026-01-19 11:34:14 +01:00
Cédric Krier b211b58884 Always set a value for invoice line unit from UBL invoice and credit note
The search for similar line needs to test if the unit has a value or not.

Closes #14544
2026-01-23 12:12:27 +01:00
Cédric Krier dd7d8c5459 Use ZZ as default unit code for UBL 2026-01-22 17:41:04 +01:00
Cédric Krier 59e04dbf59 Do not search unit of measure for unit code ZZ and XZZ from UBL
The mutually defined unit should let the system choose a default unit.

Closes #14537
2026-01-22 17:39:35 +01:00
Cédric Krier acb2d60609 Prevent registering unit of measure with the UNECE code ZZ and XZZ
The mutually defined unit is not a real unit.
2026-01-22 17:38:18 +01:00
Cédric Krier 6e6b1f4061 Be more flexible when converting Peppyrus document type into edocument type
Closes #14519
2026-01-19 16:21:30 +01:00
Cédric Krier 146bcb0ab0 Add test for reference field referring unknown target 2026-01-10 18:40:47 +01:00
Cédric Krier 08bb367b7d Use the normalized format for the over shipment of sale 2026-01-09 17:14:17 +01:00
Cédric Krier a3eb5e234e Add optionally gift card boolean to product list 2026-01-09 17:10:58 +01:00
Cédric Krier 6b672742de Add effective date, delay and warehouse to production list 2026-01-08 12:11:00 +01:00
Cédric Krier d44ce136fd Remove duplicate fields from production inherited from ShipmentMixin 2026-01-08 12:06:47 +01:00
Cédric Krier be708ea16c Store original planned date of requested internal shipments and productions
Closes #14477
2026-01-08 12:04:46 +01:00
Cédric Krier 70701c14e4 Add depends on methods of TaxableMixin 2026-01-17 12:54:09 +01:00
Cédric Krier df02ade40e Always return a date for tax date of TaxableMixin
Closes #14486
2026-01-17 12:53:33 +01:00
Cédric Krier 841a7cf815 Load icon field before rendering affix
Closes #14509
2026-01-16 13:16:50 +01:00
Cédric Krier 2219eb0915 Do not compare records order with negative id
Closes #14508
2026-01-16 12:11:35 +01:00
Cédric Krier 947a63c456 Make the user menu favorites unique
Closes #14213
2026-01-16 10:07:03 +01:00
Cédric Krier 0d4ec58be9 Increase the maximum sleep for Peppyrus test scenario
20 seconds is not always enough for Peppyrus to process the message posted.
2026-01-24 19:25:47 +01:00
Cédric Krier ededbdb3c9 Do not convert input when converting between the same unit
Applying the factor/rate twice may loose precision if one of the number is a
rational with recurring decimal.

Closes #14501
2026-01-15 17:20:32 +01:00
Cédric Krier 212d6e5a45 Round quantity instead of truncate for Shopify fulfillment
Closes #14502
2026-01-15 17:28:20 +01:00
Cédric Krier 2e6dc5f27c Lock the sale being processed for Shopify
Closes #14500
2026-01-15 15:22:09 +01:00
Cédric Krier e543e295cf Add company clause to balance domain for direct debit reception
Closes #14499
2026-01-15 14:41:53 +01:00
Cédric Krier 40a3345fb5 Convert index expression to string to instantiate psycopg2 SQL
Closes #14487
2026-01-24 08:51:39 +01:00
Cédric Krier 241437dfad Use dash instead of hyphen in Egyptian street format
Closes #14498
2026-01-14 19:25:17 +01:00
Cédric Krier c0211b8c3d Add invoice data when processing supplier invoice line with purchase from OCR service
010fe207dda7 added an extra invoice_data argument but not to the purchase extension.

Closes #14512
2026-01-17 15:45:13 +01:00
Cédric Krier 89bc2930df Set DESC as index options instead of the expression 2026-01-14 00:35:13 +01:00
Cédric Krier 9535c89f3f Ensure to always surround USING expression with parenthesis in CREATE INDEX
Closes #14487
2026-01-13 16:50:08 +01:00
Cédric Krier a77ff4bc99 Fail when getting view arch on test 2026-01-23 10:47:56 +01:00
Cédric Krier 3cbfdfcf69 Add missing purchase reporting views from 49a612454113
Closes #14497
2026-01-14 19:04:50 +01:00
Cédric Krier 17d953ae7d Fill buyer's item identification in UBL invoice
Closes #14470
2026-01-06 17:42:51 +01:00
Cédric Krier 36ab6d1d17 Add supplier and customer code properties to invoice line 2026-01-06 17:41:05 +01:00
Cédric Krier 74e7690c04 Add cron job to reconcile move lines
Closes #14468
2026-01-06 11:38:37 +01:00
Cédric Krier 1f702e7151 Add support for payment reference for incoming invoice
Closes #14465
2026-01-05 12:15:49 +01:00
Cédric Krier 067386378a Warn against creating an overpayment
Closes #14457
2025-12-31 15:57:40 +01:00
Cédric Krier 9473804208 Fallback to location key from context to compute product quantity
The location key is used for stock reporting so when browsing from such report,
it is good that the selected location is still used for stock calculation.
2025-12-30 17:41:36 +01:00
Cédric Krier 06c2a56e69 Use Many2One field for product and variant on stock reporting
Closes #14456
2025-12-30 17:42:00 +01:00
Adrià Tarroja Caubet e63358d39c Leave the quotation date field empty when copying sales
Closes #14358
2026-01-18 16:51:32 +01:00
Adrià Tarroja Caubet cc3184f226 Remove unused Model in account stock continental scenario 2026-01-18 14:59:49 +01:00
Cédric Krier d8579d4dd9 Allow tabs to be reordered 2026-01-18 13:15:45 +01:00
Cédric Krier ee041a5a7e Update sign of amount line paid according to invoice type and payment kind
Closes #14070
2026-01-10 19:40:21 +01:00
Cédric Krier d098761e3a Call on change type and company when initialize invoice for incoming document
Closes #14174
2026-01-10 18:53:51 +01:00
Sergi Almacellas Abellana bd28b0a552 Set the invoice date to read-only once the invoice has been validated or posted
Closes #14480
2026-01-18 00:18:32 +01:00
Cédric Krier c823ca38a9 Use only production inputs or outputs for lot trace
The production moves can not have any other traces than their sibling moves.

Closes #14385
2026-01-07 08:29:45 +01:00
Cédric Krier 72492c3952 Do not try to fulfill on Shopify cancelled or closed fulfillment order
Closes #14479
2026-01-09 11:34:16 +01:00
Cédric Krier f3f3dc5f96 Copy custom theme from previous version 2026-01-10 19:10:42 +01:00
Cédric Krier d8e6fce279 Copy custom CA certificates from previous version 2026-01-10 19:10:29 +01:00
Cédric Krier 11c80d3c2a Fix tryton config file copied from previous version
Closes #14088
2026-01-10 19:09:58 +01:00
Cédric Krier 353cfbdd5c Always switch to the next account party when lines have been reconciled
Closes #14467
2026-01-05 23:58:44 +01:00
Cédric Krier 93fad8dcf5 Use only a limited set of tags for PEPPOL Address
Closes #14494
2026-01-14 14:47:25 +01:00
Cédric Krier abe709a876 Use document namespace and local name to calculate the document type for Peppyrus
Closes #14503
2026-01-15 18:13:06 +01:00
Cédric Krier 91c5a087fb Use root prefix to retrieve the namespace of UBL document
Closes #14490
2026-01-14 14:39:08 +01:00
Cédric Krier 1623885d46 Add options to trytond.config
Closes #14483
2026-01-13 20:08:43 +01:00
Cédric Krier af815d48e2 Replace UNPROCESSABLE_CONTENT status by UNPROCESSABLE_ENTITY
UNPROCESSABLE_CONTENT is only available since Python 3.13

Closes #14491
2026-01-13 20:05:34 +01:00
Cédric Krier 0237622be0 Update API of ogm_vcs fallback to be the same as the release 2.2 of python-stdnum
Closes #14488
2026-01-13 15:47:25 +01:00
Cédric Krier df6b94b866 Test the record reference of marketing automation record before execution
The reference field is on the record and not on the record activity.

Closes #14281
2026-01-10 18:39:18 +01:00
Cédric Krier 7f0ffc22e6 Update numbered at when refreshing invoice report
Closes #14462
2026-01-03 19:18:24 +01:00
Cédric Krier 9a518c653f Apply types to SQLite query for the getter of history datetime of invoice
Closes #14463
2026-01-03 19:17:20 +01:00
Cédric Krier 40ce993a5b Defer patching requests default agent when it is imported
Importing requests module in `trytond/__init__.py` prevents the gevent monkey
patch to be applied to the requests module as it is imported before.

Closes #14461
2026-01-03 13:45:10 +01:00
Cédric Krier 6ef9085289 Add missing parameter to get_shopify of customer shipment with package shipping
fulfillment_order_fields is a parameter of the extended method.

Closes #14478
2026-01-09 11:29:24 +01:00
Cédric Krier 7f92861a80 Use current date as fallback for empty maturity date when creating direct debit payment
Closes #14473
2026-01-07 11:19:07 +01:00
Cédric Krier c6c8425f43 Add missing warning key for PEPPOL required warning
Closes #14471
2026-01-07 09:16:02 +01:00
Cédric Krier 9fdb983f99 Do not always consider account with party required when reconcile
fe8ae43ad9e7 left a debug clause that skips the test.
2026-01-05 00:41:31 +01:00
Cédric Krier ab1b43f676 Do not return None as party to reconcile
Closes #14438
2026-01-05 00:38:37 +01:00
Cédric Krier 856c50f7d2 Test if identifier is not empty before testing if it is Belgian VAT for PEPPOL
Closes #14464
2026-01-05 11:52:11 +01:00
Cédric Krier 23618c210f Add support for Peppyrus webhooks 2025-12-23 12:07:17 +01:00
Cédric Krier aecb2942fe Compare HTTP status code to HTTPStatus enum 2025-12-18 15:18:53 +01:00
Cédric Krier f1fbd7abb3 Allow filtering users to be notified by cron tasks
Closes #14432
2025-12-16 17:28:32 +01:00
Cédric Krier 7be632030d Dumps action value of cron notify if it is not yet a string
Closes #14431
2025-12-16 17:21:41 +01:00
Cédric Krier f41a2bdef5 Log exception when opening view arch 2025-12-15 17:12:22 +01:00
Cédric Krier 01bfa635fa Defer importing saml2 module only when routes are called 2026-01-03 14:06:42 +01:00
Cédric Krier 278c09ca39 Defer importing the stripe module only if the webhook is called 2026-01-03 14:05:34 +01:00
Cédric Krier 809e805bc1 Defer importing the braintree module only if the webhook is called 2026-01-03 14:05:07 +01:00
Cédric Krier 7b4eb14968 Use defaultdict with float as default value when calculating product quantities 2026-01-02 12:32:43 +01:00
Cédric Krier 7a66740050 Test products_by_location using the proper grouping IDs
When grouping by template, it is the template id that appears in the result
instead of the product id.

Closes #14459
2026-01-02 13:11:49 +01:00
Cédric Krier 2c8dc24f38 Do not set SellersItemIdentification UBL tag if product has no code
PEPPOL-EN16931-R008: Document MUST not contain empty elements.

Closes #14458
2026-01-01 15:50:55 +01:00
Cédric Krier b75a14ea86 Maintain the original reference when splitting shipments and productions
Closes #14190
2025-12-29 15:58:40 +01:00
Cédric Krier aa4d7d2c12 Use the normalized format for the warning key regarding overpayment 2025-12-31 16:07:02 +01:00
Adrià Tarroja Caubet 54b3c3dacc Allow the sale point group to view the main sales menu
Closes #14448
2026-01-06 22:30:59 +01:00
Cédric Krier f612e2f872 Set only one payment term for Peppol UBL and only if the description is not empty
Closes #14454
2025-12-29 17:28:36 +01:00
Cédric Krier 1ed92b8b83 Prevent default event when clicking on Many2One link from a tree view
If the event is not prevented, the URL is cleared if there is already a tab for
the resource because the tab show event update the URL before the execution of
the default event.

Closes #14453
2025-12-29 15:50:58 +01:00
Cédric Krier ce26ef12dc Do not use cached report instance
We must always use a copy of the cached report instance to allow to add
directives to the template before being prepared.

Closes #14460
2026-01-03 12:53:56 +01:00
Cédric Krier b0763c081e Retries when testing fetching message from Peppyrus
The process of the message may be delayed by Peppyrus so we must retry until
the message is fetched.
2025-12-31 11:32:52 +01:00
Cédric Krier ce7e973e85 Log exception when retrieve file ID from the filestore for Binary field 2025-12-15 17:11:51 +01:00
Cédric Krier aefd12642a Use always the immutable value from the cache
This prevents issues like #14433 from being missed.
2025-12-19 09:39:32 +01:00
Cédric Krier d9b73072df Exclude sale lines of gift cards from sale reporting
Closes #14418
2025-12-12 15:31:45 +01:00
Cédric Krier d3eb2c9e87 Enforce gift card to be False when the type of product can not be one 2025-12-12 15:31:11 +01:00
Cédric Krier 0dc04c10a2 Use default month value for the period of sale and purchase reporting 2025-12-12 15:30:28 +01:00
Cédric Krier c60436c82a Split the UBL OrderReference field into sale reference and sale number
Closes #14452
2025-12-29 12:36:26 +01:00
Cédric Krier 402913d4cd Log event using the transaction of the records
Closes #14446
2025-12-23 09:55:34 +01:00
Cédric Krier f8f337bba5 Do not render details button on error message without details
Closes #14426
2025-12-17 23:35:27 +01:00
Cédric Krier 8ef2cc9b70 Do not notify for duplicate identifier from the same party
Closes #14434
2025-12-17 16:13:44 +01:00
Cédric Krier d8981ef84d Remove duplicate tests depend for web_shop_shopify 2025-12-17 16:10:04 +01:00
Cédric Krier 3b6b39de82 Use ID read of note in tests
Closes #14450
2025-12-25 09:54:24 +01:00
Cédric Krier d45e29e6ad Always surround WHERE clause with parentheses in EXCLUDE constraint
Closes #14449
2025-12-24 11:38:45 +01:00
Cédric Krier 5b4efd9fd6 Order product by position instead of sequence for Shopify
0b69c726fc26 order by the non-existing sequence field instead of position.
2025-12-29 20:47:40 +01:00
Cédric Krier 34cb1a4b35 Define request body when there is no signing secret defined
Closes #14447
2025-12-23 12:09:31 +01:00
Cédric Krier 6b9135321c Pass XML-RPC string to GzipStream instead of bytes
Since 0a04dc8fa935 the GzipStream class expect a string or a generator of
strings but not bytes.

Closes #14445
2025-12-22 20:11:10 +01:00
Cédric Krier 2ab19cf6eb Save wizard session states in new transaction for readonly wizard
The transaction is readonly which prevents to save in the database the session
with states.

Closes #14442
2025-12-23 09:52:40 +01:00
Cédric Krier 66dceea550 Use product sequence to sort for Shopify
An inactive product is not in the products list of the template.

Closes #14439
2025-12-19 19:44:31 +01:00
Cédric Krier 15ad8d3e4d Set an order reference to UBL invoice to test Peppyrus
Closes #14455
2025-12-29 17:43:15 +01:00
Maxime Richez 5e71dcc564 Set only one customer identification in UBL Invoice and CreditNote
UBL-SR-16: Buyer identifier shall occur maximum once

Closes #14443
2025-12-22 18:34:35 +01:00
Cédric Krier 7c9a14dc34 Do not set percentage in tax subtotal in Peppol UBL
UBL-CR-499: A UBL invoice should not include the TaxTotal TaxSubtotal Percent
2025-12-22 12:37:22 +01:00
Cédric Krier e3f4ec32d1 Do not set payment terms due date in Peppol UBL
UBL-CR-463: A UBL invoice should not include the PaymentTerms PaymentDueDate
2025-12-22 12:36:04 +01:00
Cédric Krier 9302fe27d7 Do not set payment terms amount in Peppol UBL
UBL-CR-459: A UBL invoice should not include the PaymentTerms Amount
2025-12-22 12:38:51 +01:00
Cédric Krier 4df308a430 Do not set country subentity code in Peppol UBL
UBL-CR-225: A UBL invoice should not include the AccountingCustomerParty Party
PostalAddress CountrySubentityCode
2025-12-22 12:33:05 +01:00
Cédric Krier 259b19006e Do not set country name in Peppol UBL
UBL-CR-166: A UBL invoice should not include the AccountingSupplierParty Party
PostalAddress Country Name
UBL-CR-229: A UBL invoice should not include the AccountingCustomerParty Party
PostalAddress Country Name
2025-12-22 12:37:52 +01:00
Cédric Krier f7d90215f0 Fill DueDate in UBL Invoice and CreditNote
The BR-CO-25 Peppol rule requires to have a DueDate if there is no payment term
description. So the simplest solution is to always fill DueDate.

Closes #14441
2025-12-22 11:17:26 +01:00
Cédric Krier def12c8e99 Save the link to the created invoice when processing Peppol invoice
Closes #14444
2025-12-22 14:16:18 +01:00
Cédric Krier f8f0cf6010 Fix typo when calling succeed on processed Peppol invoice
Closes #14444
2025-12-22 14:15:39 +01:00
Cédric Krier 9f88144394 Remove required on before/after carrier column of incoterm
We must rely only on the selection validation to require a value to permit to
create new incoterm in incoterm module when carrier_carriage is already
activated.

Closes #14440
2025-12-20 10:23:56 +01:00
Cédric Krier ae06fe3f47 Fill before/after carrier for Incoterm 2000 2025-12-20 10:08:09 +01:00
Cédric Krier d293bbda92 Set a default direction when no language preferences are set
Closes #14419
2025-12-19 19:19:13 +01:00
Cédric Krier f074a94234 Hide chat when changing current record without chat 2025-12-18 00:45:20 +01:00
Cédric Krier 8e12aa010b Do not create chat if there is not current reference
Closes #14427
2025-12-18 00:44:36 +01:00
Cédric Krier 42ad8ae30b Set toolbar button sensitiveness based on record id instead of position 2025-12-18 00:39:38 +01:00
Cédric Krier 077a0825b3 Add title to notification label and description
This way user can get the full content if it overflows.

Closes #14430
2025-12-16 17:15:40 +01:00
Cédric Krier 78b475740b Replace notify method by binded version in constructor of chat and notification menu
We need to keep a reference to the binded method registered to be able to
unregister it.

Closes #14425
2025-12-16 01:10:47 +01:00
Cédric Krier f9a6bd7379 Ensure get_preferences_fields_view modifies mutable field definitions
Closes #14433
2025-12-18 21:24:26 +01:00
Cédric Krier a727c747ae Register a set and frozenset marshalling function for both JSON-RPC and XML-RPC
This completes 0a0f4db765fb for #14387
2025-12-18 19:18:12 +01:00
Cédric Krier aafeeefe01 Fix typo when passing attribute from list widget to populate contextual menu
The typo was introduced in 2931c0e0ae5c

Closes #14428
2025-12-18 23:36:13 +01:00
Cédric Krier 63268692fd Use upper case for VATIN 2025-12-18 13:31:22 +01:00
Cédric Krier 543adc9e3f Support European VAT number as EAS and VATIN
Closes #14435
2025-12-19 09:41:39 +01:00
Cédric Krier 249e93dc68 Test if Peppol types is not None before testing for billing
Closes #14436
2025-12-18 12:55:42 +01:00
Cédric Krier 704da3630b Compare element to replace new view tree from inherit application against None
lxml raises a warning about truth-testing on element.

Close #14429
2025-12-16 11:56:31 +01:00
Cédric Krier 891a1fba98 Clarify the "no statement journal" error message about uniqueness 2025-12-15 11:45:17 +01:00
Cédric Krier 348b00cd15 Return the journal for a bank account if only one journal matches
Closes #14422
2025-12-15 11:44:21 +01:00
Cédric Krier 122ade0b30 Increase version number 2025-12-15 21:34:54 +01:00
Cédric Krier 34854e922f Add tag 7.8.0 2025-12-15 20:17:29 +01:00
Cédric Krier 692810e7b8 Prepare release 7.8.0 2025-12-15 20:17:16 +01:00
Cédric Krier 954f137e65 Update translations [skip ci] 2025-12-15 18:00:12 +01:00
Cédric Krier 0e95196f74 Fix format of the account_statement_rule CHANGELOG 2025-12-14 15:26:22 +01:00
José Antonio Díaz Miralles a95da3e7f2 Use shipment select of stock move as selection for lot trace document
The document is filled with the inventory or shipment of the stock move.

Closes #14411
2025-12-13 22:50:10 +01:00
Cédric Krier fd565b8ce6 Test check_credit_limit using a record as origin
Since 9bbe5251be9e the format method of warning enforces the usage of record.
2025-12-14 14:11:30 +01:00
Cédric Krier 433ef85ac8 Test action window using existing records from the keywords
Since 225529c5e779 the ids do not start at 1 so it must search for existing
records to test.
2025-12-14 13:57:42 +01:00
Nicolas Évrard 7bdb724da2 Search on the Target model in O2M when it has an active field
When comparing a one2many to None we should search on the Target model in order
to ensure the correct handling of the active field. Otherwise there might be
records that wouldn't be found by the search yet their one2many fields come up
empty.

Closes #14370
2025-11-14 18:11:20 +01:00
Nicolas Évrard 64424d1a90 Use the target id to compute the filter clause of a O2M field compared to None
Closes #14373
2025-12-13 14:57:52 +01:00
Nicolas Évrard a23df14c83 Use different starting point for IDs of table when testing
Closes #3799
2025-12-13 14:30:28 +01:00
Cédric Krier b5c13ef379 Use the right primary column name for PostgreSQL database method
On history table the primary column is `__id` instead of `id`.
2025-12-13 14:33:42 +01:00
Cédric Krier a9408ddd2f Implement setnextid for SQLite database 2025-12-13 14:31:19 +01:00
José Antonio Díaz Miralles 86f3804d63 Ensure that the computed traces of a stock move have a lot
For example the production module may include input or output moves without
lot.

Closes #14396
2025-12-13 12:56:46 +01:00
Cédric Krier e189e555fe Fix domain parser for Reference field when there is no value but a target
Closes #14413
2025-12-11 18:27:45 +01:00
Cédric Krier 038e5d030b Add an empty line to the console migration script after multi-line statement
Such that it can be copy/pasted directly into the console.
2025-12-12 18:58:01 +01:00
Cédric Krier 3cbc0652ec Remove extras require of bcrypt and html2text for web user module 2025-12-11 15:00:23 +01:00
Cédric Krier 626b8e768c Stream json and gzip response
Closes #14409
2025-12-05 20:59:59 +01:00
Nicolas Évrard c59b8b9b47 Force breaking error message when overflowing the error window
Closes #14414
2025-12-10 16:09:44 +01:00
Cédric Krier 500860c21d Use unit from similar line if not set yet by the UBL definition
Closes #14408
2025-12-05 10:18:23 +01:00
Cédric Krier 815bd08c8e Auto reload the server when tryton.cfg files are modified
Since 6eb1a23b7457 the tryton.cfg files contains the model to register.
Therefore if they change, the server must be reloaded.
2025-12-03 12:10:53 +01:00
Cédric Krier 2c0d096001 Recreate the invoice line for the cost based on shipment when handling the exception
The invoice line for cost based on shipment is managed by the shipment using
the "Cost Sale Invoice Line" field. Therefore when the cancelled invoice for
this line is recreated, the link must be cleared.

Closes #14227
2025-12-03 12:08:12 +01:00
Sergi Almacellas Abellana 00e24f2c04 Fix max_volume and max_weight field strings 2025-12-09 13:33:34 +01:00
Cédric Krier f7254c41c2 Do not apply inactive test when searching product through replacing products
The replacing products are most of the time inactive but the replacing link
should include them.

Closes #14403
2025-12-01 09:59:15 +01:00
Cédric Krier 8f824d3d2a Fix typo in super call of _parse_2_line_reference
Closes #14407
2025-12-05 10:03:01 +01:00
Cédric Krier 9df1b3ed84 Improve help for gross price of template as it included many taxes 2025-12-09 00:56:54 +01:00
Cédric Krier 7a6f773bc8 Do not run concurrently tests for Peppyrus 2025-12-09 00:50:08 +01:00
Cédric Krier 7111131981 Support a distinct VAT from the participant ID in the test scenario 2025-12-08 22:59:18 +01:00
Cédric Krier 158e580be5 Fix help text for rental state to be about rental 2025-12-08 10:32:08 +01:00
Cédric Krier 478f092fc8 Improve help for gross price as it included many taxes 2025-12-08 10:31:43 +01:00
Cédric Krier 83be0303f3 Do not translate Peppol document type 2025-12-08 10:30:10 +01:00
Cédric Krier f8b3b9ce3a Replace starting/ending date by start/end date
These are the most frequent terms used.
2025-12-08 10:29:42 +01:00
Cédric Krier f18bb91e49 Use better labels for the Belgian VAT and business number 2025-12-06 09:08:20 +01:00
José Antonio Díaz Miralles 49132d132a Do not return early when validating the default values set
Since f1fa123ad508 the validate method does not return any promise.

Closes #14378
2025-12-01 16:14:29 +01:00
Cédric Krier bc8a84feaa Standardise the skipping of warnings in the test scenario 2025-11-27 16:59:05 +01:00
Cédric Krier edb3c2c2d4 Remove warning for inventory in the future
Since #10591 we can skip the warning of stock move in the future for newly
created moves.
2025-11-27 16:28:21 +01:00
Cédric Krier 476065cf11 Use creation position to format warning key for new records
The opposite position in the creation order is used instead of the id (which is
not stable over transaction retries) to format the warning key when the record
has been created during the transaction.
This ensures that the formatting of the warning key is stable over transaction
retries.

Closes #10591
2025-11-27 16:26:20 +01:00
Cédric Krier cd223660ff Make option --all appends the res module to the list of updates
Since d237ff78d187 the res module is not updated even if it depends on ir
module because it is an early module.

Closes #14401
2025-11-28 15:32:06 +01:00
Cédric Krier a728312dc7 Add missing entry for edocument UBL, Peppol and Peppyrus 2025-12-03 12:15:51 +01:00
Cédric Krier 946805c0f3 Do not create fs_values and values for ir_model_data in init SQL
Since 49ca1e40161c those fields have been replaced by field_names.

Closes #14400
2025-11-28 10:19:03 +01:00
Cédric Krier 73b5bd429f Do not delete on cascade parts of a chart of account
Closes #14399
2025-11-27 15:12:45 +01:00
Cédric Krier c8f3df9390 Do not restrict deleting template of chart of account
Closes #14398
2025-11-27 15:10:27 +01:00
Cédric Krier 9cce9ef35e Lock only FRST SEPA mandates when processing payment group
This prevents most of the time to consume a sequence number for the group
because the transaction has to restart to lock the mandates.

Closes #14397
2025-11-27 15:14:26 +01:00
Cédric Krier c5d64cf98f Limit editable tree click event to the tab
This permits the navigation between tabs.

Closes #14393
2025-11-26 21:34:50 +01:00
Cédric Krier 93a5e6ceb8 Round moved quantity before compare to 0
As moved quantity is the sum of float, it may carry rounding issue so it must
be rounded before comparison.

Closes #14386
2025-11-25 18:38:51 +01:00
Cédric Krier d0cd3e31f9 Set focus on the first visible input when navigating with arrow keys
Closes #14372
2025-11-19 00:27:21 +01:00
Cédric Krier ff2b79194d Use double click to start editing up/down cell on editable tree
Closes #14371
2025-11-19 00:17:24 +01:00
Cédric Krier 01fc57e89e Replace non-ascii "N°" by "No" in report templates
msgmerge complaints about non-ascii msgid
2025-12-03 09:18:28 +01:00
Nicolas Évrard 9d4966e41f Filter Many2Many group fields on active = True
When the field is used in a domain adding this filter ensure that comparison
with None will succeed when there are only inactive groups in the field.

Closes #14369
2025-12-03 08:47:20 +01:00
Cédric Krier 72d637cec9 Test if field_names is None instead of empty in ModelStorage hooks
Closes #14382
2025-11-21 11:50:54 +01:00
Cédric Krier 98941a588e Allow users to subscribe to notification cron jobs
Closes #13988
2025-12-02 19:24:36 +01:00
Cédric Krier 6f26a9cc79 Add chat to operational documents 2025-12-02 16:01:39 +01:00
Cédric Krier 8ab505205d Allow users to subscribe to chats 2025-12-02 13:08:05 +01:00
Nicolas Évrard fa19c6226f Notify subscribed users of new message in chat 2025-12-02 18:11:10 +01:00
Nicolas Évrard 48dcd6ffdd Add user notification 2025-12-02 13:08:54 +01:00
Cédric Krier 4dce4ec167 Add documentation for chat 2025-12-02 14:38:58 +01:00
Cédric Krier 7b08540eda Make icon badge independent of the view box of the SVG 2025-12-02 13:39:07 +01:00
Nicolas Évrard 784eba9791 Correctly get model and id of resource when checking the Channel access rights 2025-10-02 09:44:58 +02:00
Nicolas Évrard 50e79a35bf Always return a promise when calling Sao.Tab.create 2025-10-02 09:42:19 +02:00
Cédric Krier b03aff8509 Rename _get_invoice_sale in _get_invoice on sale
fee96f0f00e8 missed the rename for commission module.
2025-12-02 17:50:32 +01:00
Adrià Tarroja Caubet 5525b195f3 Add cy_vat as tax identifier type
Closes #14381
2025-11-21 11:28:54 +01:00
Cédric Krier dcb06d6f7d Update documentation of sale_advance_payment 2025-11-22 18:10:08 +01:00
Cédric Krier 9c783419cf Rename advance payment conditions into lines
Closes #12854
2025-11-22 15:37:31 +01:00
Cédric Krier 1093f7caa7 Move advance payments in separate tab of sale form 2023-12-20 10:35:23 +01:00
Cédric Krier 276aef121f Display origin in purchase request list 2023-12-21 13:21:47 +01:00
Cédric Krier 66999ae7e5 Raise tailored error message when calculated account for move line is empty
Closes #14392
2025-11-26 12:03:42 +01:00
Nicolas Évrard 929b3545cd Add support for materializing ModelSQL based on a table query 2025-12-02 00:12:08 +01:00
Nicolas Évrard d8499a4fb0 Allow to use empty ModelList in Wizard
We might want to execute the wizard on a specific model even without selecting
some of its records

Closes #14291
2025-10-16 16:07:52 +02:00
Cédric Krier 0b69b334be Add edocument_peppol_peppyrus module 2025-11-21 22:37:20 +01:00
Cédric Krier e2b266e61e Add edocument_peppol module 2025-11-21 15:38:25 +01:00
Cédric Krier a89e7e20a7 Support UBL file in document incoming 2025-11-17 17:52:05 +01:00
Cédric Krier 6149c357f2 Add parser for UBL invoice and credit note 2025-11-20 13:08:49 +01:00
Cédric Krier 595c553a56 Add e-documents as reports on invoices 2025-10-29 15:55:04 +01:00
Cédric Krier 6e9981228a Add edocument_ubl module 2025-11-14 16:36:06 +01:00
Cédric Krier fa8cefff05 Use a random Shopify handle for product in test scenario 2025-12-01 18:41:01 +01:00
Cédric Krier 085ef4f9ac Add sale_rental_progress_invoice module
Closes #13211
2025-11-23 20:37:56 +01:00
Cédric Krier c39c64c1c8 Group sale invoices from rental 2024-06-05 14:48:53 +02:00
Cédric Krier e576fcacc9 Rename _get_invoice_purchase in _get_invoice on purchase 2024-02-21 15:07:52 +01:00
Cédric Krier 2bcb418688 Rename _get_invoice_sale in _get_invoice on sale 2024-02-21 15:07:05 +01:00
Cédric Krier a7908ffdec Add sale_rental module
Closes #13015
2025-11-23 19:20:17 +01:00
Cédric Krier f7b41a3a07 Set analytic account on closing move of asset also when it is an expense
Closes #14390
2025-11-25 16:02:52 +01:00
Cédric Krier 76cc0945e3 Add depends to parent account_category for on_change_gross_price
Since 101e1d87a261 product template has a One2Many field accounting_templates
which requires the new dependency.
2025-12-01 17:12:57 +01:00
Cédric Krier 998aa90a72 Set the language to party from the Shopify customer
Closes #14257
2025-12-01 16:52:59 +01:00
Cédric Krier bcd594fe74 Add logging for Shopify GraphQL queries and webhooks 2025-09-22 14:45:09 +02:00
Cédric Krier 23b4ec2aad Add admin URL to Shopify identifiers
Closes #14160 #14164
2025-08-14 14:31:32 +02:00
Cédric Krier 047d89886b Set compare-at price on Shopify using non-sale price
Closes #14155
2025-08-12 15:32:34 +02:00
Cédric Krier 03b82163ce Add support for product kit on Shopify
Closes #14129
2025-10-09 19:12:53 +02:00
Cédric Krier 567cae3c86 Add carrier selection for Shopify order
Closes #14102
2025-07-03 16:49:46 +02:00
Cédric Krier 807b593f1e Use GraphQL API instead of REST API of Shopify
The REST API has been deprecated.

Closes #13598
2025-12-01 16:46:23 +01:00
Cédric Krier 6360869d6c Add id as matching key for product image URL
This allows to generate an URL for a specific image.
2025-05-27 00:08:28 +02:00
Cédric Krier 3f7794b968 Replace picsum service by our own images in product image tests
Closes #14201
2025-08-28 10:51:26 +02:00
Cédric Krier 77a214385c Test Shopify module with extra dependencies 2025-06-30 17:01:31 +02:00
Cédric Krier 2f58b1be9a Add option to order products from web shop 2025-05-19 21:42:27 +02:00
Cédric Krier 1cfac84ebc Keep sale line removed from Shopify order
It is not allowed to delete a sale line if the sale state is not draft or
cancelled.

Closes #14376
2025-11-20 10:14:13 +01:00
Cédric Krier 2ce1adfc04 Do not prevent to process sale line without product and quantity from Shopify
When a line is removed on Shopify, the quantity of the sale line is set to 0 in
Tryton because Shopify refund the line.
So such line without product must not prevent to process the sale as they will
not generate any stock move nor invoice line.

Closes #14375
2025-11-20 10:10:27 +01:00
Cédric Krier d6fad7d10c Do not create contact mechanism for invalid email from Shopify
Closes #14368
2025-11-17 14:38:07 +01:00
Cédric Krier 72b7d9e922 Always fill contact of commercial invoice consignee for DPD shipping service 2025-11-30 08:45:34 +01:00
Cédric Krier dbb0abe49a Include origin name in stock move record name
Closes #14359
2025-11-14 09:05:02 +01:00
Cédric Krier 4d8a1cd837 Do not update key value of user application on write
Closes #14353
2025-11-06 11:34:07 +01:00
Cédric Krier 6a05c7597d Remove party name from address name for shipping services
If the party name of the address starts with the name of the party, we do not
need to repeat it as the shipping services have also a field to store the party
name.

Closes #14352
2025-11-08 09:53:01 +01:00
Cédric Krier 71ac33a2c9 Remove unused mailto function
It is no more used since 83287ed2d759
2025-11-20 22:07:43 +01:00
Cédric Krier 85920a9c3c Lock web shops when fetching order from Shopify
It is needed to avoid to fill the ir.error table with unique constraint error
on the web ID when the method is called in parallel by tasks posted from the
webhook.

Closes #14360
2025-11-13 15:23:47 +01:00
Xavi Hermoso 60a7b6654d Copy productions at once when splitting
closes #14325
2025-10-28 11:45:10 +01:00
Cédric Krier fe44ee1a60 Remove outdated comment about lock when closing stock period
Since c8771e45b861 the lock is taken at the transaction start so the calculated
stock quantities are always correct.
2025-11-29 14:59:43 +01:00
Cédric Krier b0fe13a8e6 Add test scenario for stock period 2025-11-29 14:57:15 +01:00
Sergi Almacellas Abellana d5482c3947 Include assigned move in close period error message 2025-11-29 14:56:44 +01:00
Sergi Almacellas Abellana 31a8acf935 Limit closed period assigned moves search 2025-09-04 09:08:41 +02:00
Sergi Almacellas Abellana bf6165076a Use default warehouse when creating new product locations 2025-11-21 10:57:32 +01:00
Cédric Krier 461d3a159d Remove Purchase prefix to purchase request menu entry
This create a simpler title for the tab.
2025-11-18 00:05:02 +01:00
Sergi Almacellas Abellana 612e7b72e1 Add routings on bom form
Closes #14367
2025-11-17 11:22:21 +01:00
Cédric Krier 66da5bf18a Add support to domain parser to search on empty relation field
Closes #14106
2025-11-06 18:15:38 +01:00
Cédric Krier 4859bedaaf Convert max_tasks_per_child to None when the value is 0
The ProcessPoolExecutor supports only a positive integer or None.

Closes #14349
2025-11-05 14:38:52 +01:00
Cédric Krier 9b217fa50b Use the same label for the quality inspect wizard on production as on shipments 2025-11-03 08:25:12 +01:00
Cédric Krier 19667f95fc Add test to check replaced field of replace party wizard 2025-10-31 12:03:02 +01:00
Cédric Krier 6b2b66cbd4 Allow multiple products to be added to or removed from an accounting category
Closes #14326
2025-11-28 12:06:48 +01:00
Nicolas Évrard 835aa2c1bc Use the form part of view_ids when opening a Many2One in a new tab
Closes #14391
2025-11-26 16:41:20 +01:00
Nicolas Évrard 6236d0a4f7 Use the widget attributes when populating the popup menu 2025-11-26 16:39:06 +01:00
Nicolas Évrard 622457ba33 Merge security.check_session and security.check
That way we won't use the pool when the database is not already initialized.

Closes #14316
2025-10-24 18:16:51 +02:00
Nicolas Évrard ecc3e152d1 Apply SQLite types in check_session query
Closes #14315
2025-10-24 18:13:01 +02:00
Cédric Krier f03f4512d4 Set Belgian account 488 as deposit
Closes #14148
2025-08-06 18:26:09 +02:00
Sergi Almacellas Abellana a7ddd70b00 Fix the link to the production module documentation
Closes #14395
2025-11-27 10:17:25 +01:00
Cédric Krier 67190a2e83 Use the default digit values to calculate the width for float widget
Closes #14153
2025-08-11 18:06:38 +02:00
Cédric Krier 9a8492d928 Do not sum digits for widget width when some parts are unknown
Closes #14384
2025-11-27 01:14:59 +01:00
Cédric Krier 9504ccf748 Raise inbound email menu 2025-10-26 09:00:15 +01:00
Cédric Krier 0d677b4f74 Add an option to trytond-console to run a script file 2025-10-21 16:05:39 +02:00
Cédric Krier ac39a44d3b Remove outdated comment about converting Decimal into float for XML-RPC 2025-11-26 21:53:24 +01:00
Nicolas Évrard 3ed88c83c5 Register a MappingProxyType marshalling function for both JSON-RPC and XML-RPC
Closes #14387
2025-11-26 21:50:01 +01:00
Cédric Krier c92dd960a3 Save contact mechanisms of address also when only the order is changed by Shopify
Closes #14356
2025-11-11 12:50:36 +01:00
Cédric Krier 518e5f3f69 Store only immutable structure or make a shallow copy in MemoryCache
Closes #14347
2025-11-03 23:08:31 +01:00
Cédric Krier 1824d5600c Format date with contextual language when used as record name 2025-10-21 11:00:36 +02:00
Cédric Krier 823c7d5ff7 Allow a different gross price to be set for each variant
Closes #14299
2025-10-17 17:59:53 +02:00
Cédric Krier 6b3634b74e Add stock_shipping_point module 2025-11-22 10:45:44 +01:00
Cédric Krier 133deb56b7 Add warehouse to the list view of supplier return shipment 2025-10-16 01:14:15 +02:00
Cédric Krier 7a82d82ba9 Add domain to warehouse of internal shipment
This ensures that the computed value is correct.
2025-10-16 01:13:50 +02:00
Cédric Krier 3ade628745 Add destination warehouse to internal shipment 2025-10-16 01:12:51 +02:00
Cédric Krier f67a5f8db9 Add missing entry in documentation for stock shipment customs 2025-11-22 10:44:35 +01:00
Cédric Krier e138ff1286 Order the list of variants on the product
Closes #14285
2025-10-10 17:42:08 +02:00
Cédric Krier a5330ab1ff Add product volume and weight to price list formula
Closes #13926
2025-03-17 18:24:14 +01:00
Cédric Krier b7ee37bb0a Replace clean_days with log_size in the cron configuration
Closes #14319
2025-10-27 19:20:23 +01:00
Cédric Krier ff2c9f7bc3 Load sub-fields of xxx2Many only for lazy loading
The sub-fields are not needed for eager loading view like the tree because they
are rendered with only the number of records.

Closes #14305
2025-10-21 12:14:04 +02:00
Cédric Krier 6ebc55a14e Add missing depends on currency to the TaxableMixin._round_taxes method
Closes #14348
2025-11-04 10:28:04 +01:00
Cédric Krier 142bb40876 Use short phone format in test scenario
As phonenumbers is not a dependency for the tests, we must use a short format
to not exceed the 20 characters limit.
2025-11-21 22:09:44 +01:00
Cédric Krier 36e7d69b89 Add stock_shipment_customs as requirement for tests 2025-11-21 15:34:30 +01:00
Cédric Krier d089be91ba Remove duplicate changelog entry in DPD shipping 2025-11-21 15:14:08 +01:00
Cédric Krier 8a772ad678 Support DPD international shipping 2025-02-15 22:23:11 +01:00
Cédric Krier 39a79c70ef Support Sendcloud international shipping 2025-02-15 19:27:34 +01:00
Cédric Krier 791d649dde Support UPS international invoice form 2025-02-17 19:01:11 +01:00
Cédric Krier 0796f27fbd Add fields depends to shipping properties 2025-02-15 22:24:49 +01:00
Cédric Krier a33ee46c20 Add stock_shipment_customs module 2025-10-23 17:18:15 +02:00
Cédric Krier b9a3b1405b Add import/export agent for customs 2025-02-01 01:52:03 +01:00
Cédric Krier fb0b92a387 Update to DPD Shipment Service 4.4 2025-02-13 23:47:46 +01:00
Cédric Krier 7e169c1176 Set customs menu as top-level 2025-02-01 01:50:00 +01:00
Cédric Krier 142e06c421 Add incoterm version 2000 2024-11-14 19:03:14 +01:00
Cédric Krier 2cb43f313d Use shipping properties instead of direct field
The properties were added in 682fe06f9774 to provide abstraction between the
different shipments.
2024-11-14 12:50:59 +01:00
Cédric Krier 4cb10fa620 Generate a default shipping description for the shipment
Also for UPS, it fallbacks to "General Merchandise" if the shipping description
is empty.

Closes #14351
2025-11-05 17:18:15 +01:00
Cédric Krier da78b11fca Escape completion content with custom format
Closes #14363
2025-11-20 17:03:46 +01:00
Cédric Krier b2d45c11cd Enforce access check in export_data
As the method is using instances to construct the exported data, the access
must be checked explicitly.

Closes #14366
2025-11-17 12:26:57 +01:00
Cédric Krier f98c5e87d9 Do not display error details if empty 2025-11-12 14:57:12 +01:00
Cédric Krier 95dc47a24f Include the traceback only in RPC responses in development mode
Closes #14354
2025-11-12 14:56:34 +01:00
Cédric Krier 41cc370e99 Enforce access check in HTML editor route
Use .read and .write instead of .browse and .save when editing field via the
HTML editor.

Closes #14364
2025-11-17 10:28:49 +01:00
Cédric Krier 3a4a23c3df Support Belgian structured communication on invoices, payments and statement rules 2025-09-30 00:41:08 +02:00
Cédric Krier e967e80974 Add payment reference to statement rule 2025-09-30 00:11:08 +02:00
Cédric Krier 3c8223a153 Allow customization of the payment reference to use 2025-09-29 15:37:10 +02:00
Cédric Krier 4c03672232 Validate the format of payment references 2025-09-29 15:33:46 +02:00
Cédric Krier 7c90b22b75 Add payment references to invoices 2025-09-30 00:11:31 +02:00
Cédric Krier 67b01f6cc3 Prevent running create quotation wizard from request in not allowed state
Using a button we can prevent to use the wizard on purchase request with a not
allowed state.
2025-11-19 12:22:51 +01:00
Cédric Krier c50d717dd7 Prevent running create purchase wizard from request with purchase line
Using a button we can prevent to use the wizard on purchase request with
purchase line.
2025-11-19 12:22:17 +01:00
Sergio Hervás f6ad52aebc Allow creating quotation from purchase request in received state
Closes #12630
2024-03-17 12:27:03 +01:00
Cédric Krier d4c6400c26 Include the line in the warehouse required error message for sale and purchase 2025-10-30 01:14:10 +01:00
Xavi Hermoso 4ae463d725 Improve stock level help message of purchase request 2025-11-18 00:09:52 +01:00
Xavi Hermoso 020931eef5 Add documentation to purchase request stock level
closes #14317
2025-10-27 10:13:33 +01:00
Hartmut Goebel 6cb77c6da9 Document gis fields 2025-11-18 00:35:27 +01:00
Cédric Krier 2e03f6cf94 Set currency field when creating invoice tax via on_change
This is needed to get the client format correctly the field using the currency
as digits.

Closes #14346
2025-11-04 10:25:02 +01:00
Cédric Krier e5b29042d8 Force reload on save of record
07831c6eddaf implemented the default value as `false` but in tryton it has
always been `True` since b8658ba902a5.
Some save calls relies on the record being reloaded like in the editable tree
when selecting another row.
This synchronise the behavior of all save calls between tryton and sao.

Closes #14345
2025-11-03 11:16:05 +01:00
Cédric Krier 4b9ec5939e Set TRYTOND_APPNAME and TRYTOND_TZ only if they are not set or empty
Closes #14322
2025-10-31 12:11:02 +01:00
Cédric Krier bee92b80fc Replace party on account statement origin
Closes #14282
2025-10-31 11:45:54 +01:00
Cédric Krier 59184cdfdd Add a default Incoterm to web shops
The default Incoterm is set by default to sale from web shop for which it is
required.
And the shipment address is also set by default as Incoterm location when it is
required.

Closes #14337
2025-10-31 11:57:19 +01:00
Cédric Krier 62a54d655f Set shipment cost method to order for sale from web shop
Closes #14336
2025-10-30 10:23:35 +01:00
Cédric Krier fe7bff23f8 Set Belgian account 406 as debt
Closes #14320
2025-10-27 15:52:04 +01:00
Cédric Krier 20a9ffce1c Set Belgian account 360 as debt
Closes #14321
2025-10-27 15:51:10 +01:00
Cédric Krier 66b0738f2e Set a default value when calculating clearing reconcile of a payment group
Closes #14301
2025-11-02 16:53:22 +01:00
Sergi Almacellas Abellana ccb48987be Update documentation of purchase request quotation 2025-11-17 12:44:45 +01:00
Sergi Almacellas Abellana e095f0fa92 Open purchase requests for quotations created from wizard
Closes #12927
2024-01-12 11:46:55 +01:00
Cédric Krier c33886a989 Update documentation of purchase request 2025-11-11 18:00:55 +01:00
Cédric Krier 4a17e80070 Use the fastest product supplier when anyone can supply on time
Closes #12806
2025-11-11 18:04:50 +01:00
Cédric Krier a735ea7a2b Make target ids unique when reading related fields
The result is converted into a dict based on the id so we must ensure that the
ids read are unique in case the same id appears after size limit.

Closes #14304
2025-10-21 12:07:40 +02:00
Nicolas Évrard 47efd4dba1 Use the local context when launching a graph_open action
Using the local context allow us to access the context of the field shown by
the graph when the graph shows a One2Many field.

Closes #14341
2025-10-31 18:04:31 +01:00
Nicolas Évrard 10ee881e65 Return the data name as the action key when launching the graph_open action
The ids of each record is in fact indexed by the name of the label in a pie
chart

Closes #14340
2025-10-31 18:02:26 +01:00
Cédric Krier 6c7e903226 Test from location when checking warehouse for purchase line with negative quantity
Closes #14333
2025-10-30 01:11:22 +01:00
Cédric Krier 0d5caa58e7 Use line's movable property to require incoterm
Closes #14332
2025-10-30 00:59:07 +01:00
Cédric Krier e97cd24ec2 Remove the first view_ids when opening the Many2One target from tree view
Closes #14328
2025-10-28 17:19:38 +01:00
Cédric Krier 0e5d2fc391 Use the view_ids attribute to open the Many2One target from tree view
Closes #14327
2025-10-28 17:17:31 +01:00
Cédric Krier 1f6403ba78 Use revenue account when the asset value increases or residual value is positive
Closes #14311 #14312
2025-10-23 19:23:09 +02:00
Cédric Krier 07fc626588 Hide all payment fields and buttons when using a different process method
Closes #14310
2025-10-23 18:24:26 +02:00
Cédric Krier b696fdadac Set column width only when the tree view is initialized
The column width should not be calculated on each display because a custom
width may have been applied by the user which is not yet saved.

Closes #14309
2025-10-22 18:57:34 +02:00
Cédric Krier 2b6880e12e Use mouse events instead of drag/drop events to resize column
On drag/drop events some browsers automatically scroll the container to make
the dragged element visible.

Closes #14306
2025-10-21 17:31:22 +02:00
Cédric Krier 817936ef58 Fallback to id as record name when _rec_name value is empty
It happens that the _rec_name is not required so a fallback value is needed to
ensure to always have a name for the record.

Closes #14275
2025-10-21 12:18:02 +02:00
Cédric Krier a9ce6df05d Escape record name used in testing regex 2025-10-21 13:13:23 +02:00
Cédric Krier 1299094185 Use list price used of product to calculate the dunning fee
Since 117e51123978 the multi-value list price field is also defined on variant
and it may be None. The list price used must be used instead.

Closes #14344
2025-11-01 13:04:15 +01:00
Cédric Krier a21df22391 Use list price used to fill unit price on stock move in test scenario
Since 117e51123978 there is a list price field on the variant which is empty.

Closes #14343
2025-11-01 11:10:56 +01:00
Sergi Almacellas Abellana 3eed891976 Fix typo in intrastat_declaration when cancelling moves
Closes #14331
2025-11-02 14:33:49 +01:00
Nicolas Évrard 8b89c1882b Do not use the bus URL when creating the XML-RPC authentication token
Since 5af8d41ce7ce we're also sending the bus URL on the login of the users.

Closes #14329
2025-10-28 18:50:24 +01:00
Nicolas Évrard f70d515905 Add a clear cache method to the Database
ExtensionTestCase uses this new method to clear all the caches of the Database.
2025-10-28 10:57:07 +01:00
Nicolas Évrard 3850af11f7 Find new key names using the definition from the dict widget's field
Closes #14323
2025-05-22 18:24:57 +02:00
Cédric Krier 1f8d64b3dc Group invoice and shipment also per sale line component as origin
Closes #14302
2025-10-20 18:11:09 +02:00
Cédric Krier 6e1d98779a Make the number of bank accounts required
The number is the record name so it must always be filled.

Closes #14297
2025-10-17 14:08:46 +02:00
Cédric Krier b84bec1dcf Use list price used to calculate unit list price on point of sale 2025-10-17 17:27:27 +02:00
Cédric Krier c36128f264 Use list price used to calculate the base price of sale discount
Closes #14288
2025-10-13 18:32:01 +02:00
Cédric Krier 6e47bcfc55 Accept email without content as incoming document
It allow the creation of incoming document without data as long as it has
children. This supports the case of email without text nor HTML content but
only an attachment.

Closes #14109
2025-10-17 14:51:15 +02:00
Cédric Krier dd5baea23a Document the scheduled task to assign shipments and productions 2025-10-21 13:35:04 +02:00
Cédric Krier 00e52f4a43 Update anchor for if-then-else link on Wikipedia
Closes #14267
2025-10-01 08:45:36 +02:00
Cédric Krier 645cdbd65e Improve dunning overdue help text 2025-09-15 16:25:52 +02:00
Cédric Krier cf1ce07e9b Fix parameter name for check_modification in the documentation 2025-07-31 23:47:59 +02:00
Cédric Krier 4622a4d104 Test stock internal supply with and without warehouses 2025-10-25 13:07:25 +02:00
Cédric Krier a2ad9560bb Filter order points using child of operator when supplying with internal shipments 2025-10-25 12:24:03 +02:00
Sergi Almacellas Abellana 60dc754bea Limit implicit locations to the child of warehouses when supplying for internal shipments
Closes #14262
2025-10-25 12:06:20 +02:00
Sergi Almacellas Abellana a0657d1cd7 Only delete requested shipments from the warehouses when supplying internal shipments
Closes #14263
2025-10-25 12:24:26 +02:00
Cédric Krier 0642af4150 Do not migrate the account periods to a strict sequence if there is no sequence
Closes #14308
2025-10-22 12:37:59 +02:00
Sergi Almacellas Abellana 3ad3c37273 Clarify that non deductible taxes apply for supplier invoices 2025-07-29 09:25:00 +02:00
Cédric Krier e9b3a9eed8 Use description used when exporting FEC file
Closes #14255
2025-10-19 17:57:27 +02:00
Nicolas Évrard 58428d09b9 Do not allow translations to be set or exported unless the default language is English 2025-10-24 10:22:38 +02:00
Sergi Almacellas Abellana ab7856ddcd Test if production has warehouse before reading its address
Closes #14307
2025-10-21 18:24:52 +02:00
Cédric Krier 342a7a42f9 Use queue to update sales from Shopify orders
Closes #14274
2025-10-05 17:44:47 +02:00
Cédric Krier 3d6558faaa Do not create Shopify fulfillment orders with a quantity of zero
Closes #14286
2025-10-11 15:06:20 +02:00
Cédric Krier 353deb659f Use sandboxed iframe to display document
The HTML element used to display the document is based on the mimetype.
And by default a sandboxed iframe is used to isolate the unsafe content from
the parent context.

Closes #14290
2025-10-17 14:55:30 +02:00
Nicolas Évrard b5ca5de485 Use && as the boolean operator instead of &
The typo was introduced in d5338ef23267
2025-09-17 11:41:30 +02:00
Adrià Tarroja Caubet 12211186f3 Fix typo in the custom CSS theme path of tryton documentation 2025-09-22 10:24:39 +02:00
Nicolas Évrard 6daccef092 Clarify the documentation about digits 2025-10-09 12:36:54 +02:00
Cédric Krier ecfad8ea81 Return the closest language instance for the code
When the language code is provided by an external source, a best effort
strategy must be used to always return a language.

Closes #14258
2025-09-26 08:45:49 +02:00
Cédric Krier f32669b086 Make each company's party unique 2025-10-01 10:17:22 +02:00
Cédric Krier 90ded6b681 Make the party field read-only for saved companies
Closes #14268
2025-10-01 10:16:47 +02:00
Cédric Krier be7347f600 Add the attributes name field to the sale and purchase list views
Closes #14280
2025-10-07 18:22:57 +02:00
Cédric Krier 4f0c8ada7c Use a MagicMock with a return value when patching ModelStorage copy for testing
Closes #14300
2025-10-19 10:43:23 +02:00
Cédric Krier 1c71eaba67 Construct move key for assignation by converting list to tuple
Instead of creating a new tuple on each field, it is faster to fill a list and
convert it to a tuple at the end.
2025-10-03 16:41:12 +02:00
Cédric Krier 5188badcfc Add support for null ordering on SQLite
The support was added in SQLite 3.30.0
2025-10-08 17:09:29 +02:00
Cédric Krier a772f1915a Limit SQLite version to feature release 2025-10-08 16:59:26 +02:00
Nicolas Évrard f1e71692db Use SQL queries to restore history
Restoring a fields.Dict value failed before using this pure SQL solution.
Also such a solution will be more efficient by minimizing the amount of python
code run.

Closes #14031
2025-05-20 18:28:23 +02:00
Nicolas Évrard 12185cc3bf Test the restoration of history after a DELETE 2025-06-14 03:21:40 +02:00
Nicolas Évrard 90f3c2f030 Compare the default fields used in copy with those of the calling class
Closes #14298
2025-10-17 16:27:11 +02:00
Nicolas Évrard 1492a174c7 Save column width in sao only when it has changed
Closes #14277
2025-10-07 12:42:44 +02:00
Nicolas Évrard 0c6b0399a9 Set default value of src_plural to NULL when setting translations
Adding the new translations to the internal language should set the value of
src_plural to NULL as this is the default value we use when importing from the
PO files. Moreover it might happen that an empty string could be a valid value
for src_plural.

Closes #14289
2025-10-17 10:33:06 +00:00
Nicolas Évrard 2029a9fa71 Skip the validation of the parent field of group
This is required because it can happen that a x2M field will have some records
set through an on_change but if the x2M is not linked to a screen then
exclude_field won't be set.

Closes #14283
2025-10-09 18:50:07 +02:00
Cédric Krier 354139725c Do not allow to change template of existing product
Many models rely on the couple product-template to be immutable.

Closes #14279
2025-10-07 17:42:27 +02:00
Cédric Krier c059af6bed Do not copy incoming documents when copying invoices
Closes #14272
2025-10-02 15:26:34 +02:00
Cédric Krier 0f331ef1fe Make Shopify identifier unique per record and web shop
Closes #14266
2025-09-30 15:55:59 +02:00
Cédric Krier f18165b5fc Add simpleeval as requirement for account statement rule module
Closes #14264
2025-09-30 12:32:05 +02:00
Cédric Krier c3c1b962ed Limit of shopify_orders context to test
Closes #14260
2025-09-29 11:21:39 +02:00
Cédric Krier caf49b463f Implement Array.toReversed when browser does not implement it
The usage of Array.toReversed was added in 9b65bcce3d16.

Closes #14270
2025-10-01 18:48:11 +02:00
Cédric Krier 6f876d10c4 Always try to confirm Shopify sale after creation and update
This is in case there is no transaction/payment to trigger the confirmation.

Closes #14256
2025-09-25 17:32:00 +02:00
Cédric Krier 4b75d20420 Require phonenumbers for testing scenario
The scenario relies on phone numbers format being standardized for comparison.

Closes #14292
2025-10-14 15:40:58 +02:00
Cédric Krier 1e03263529 Add contact mechanism for the phone number from Shopify address
Closes #14253
2025-09-23 18:43:08 +02:00
Cédric Krier 533f57f73a Insert last Shopify contact mechanism as first of its type
Closes #14252
2025-09-23 16:15:57 +02:00
Cédric Krier 9f95b28eaf Add sequence_reorder to model order
Closes #14251
2025-09-23 16:04:29 +02:00
Cédric Krier 9996cd8fde Remove usage of deprecated stripe.error module
Since version 7.8.0 of stripe, the module is deprecated and it was removed in
version 13.0.0.

Closes #14278
2025-10-07 15:21:08 +02:00
Cédric Krier 7e650ffd48 Limit stripe version before 13.0.0
The version 13.0.0 removed the deprecated stripe.error module.

Closes #14278
2025-10-07 15:27:45 +02:00
Cédric Krier ffd42a0fc4 Allow customization of the types of identifiers permitted on the address
Closes #14247
2025-09-19 17:24:36 +02:00
Cédric Krier 4fbf660b85 Add option to notify Shopify customer about fulfillment
Closes #14244
2025-09-18 14:12:16 +02:00
Cédric Krier 53919112df Add tests for __eq__ and __lt__ of Model 2025-09-24 09:29:03 +02:00
Cédric Krier 34056386bb Implement __hash__ on Model using xor 2025-09-24 09:28:39 +02:00
Cédric Krier 2f6b492e8b Remove unnecessary __bool__ implementation on Model
In standard Python already consider object as True if they do not implement
__bool__ nor __len__.
2025-09-24 09:27:26 +02:00
Cédric Krier 0414c1cc7f Remove unnecessary __ne__ implementation on Model
In standard Python already implement __ne__ as not __eq__.
2025-09-24 09:25:49 +02:00
Cédric Krier 382a6e206a Add total ordering on Model
Closes #14254
2025-09-24 09:09:05 +02:00
Maxime Richez 3d99b80027 Add phantom BOM
Closes #11160
2025-10-13 09:41:41 +02:00
Cédric Krier d96260f590 Add party's address to the SEPA mandate
Use explicit address selection to display on the SEPA mandate instead of the
default first address.

Closes #14229
2025-09-14 12:23:08 +02:00
Cédric Krier 47b79131dc Fallback to effective date to filter line for party payable/receivable today
This implements the same behavior as the payable/receivable date in
7caa97a96b95 ensuring that the cumulate balance is the same as the today field.

Also it allows to customize the date considered as today from the context date
key or _datetime (when browsing history).

Closes #14228
2025-09-13 11:22:40 +02:00
Cédric Krier b519f15a05 Allow cancellation of done drop shipments
Same as 0d599a48d351 but for drop shipment.

Closes #14223
2025-09-10 09:50:17 +02:00
Cédric Krier baf798eb6a Add a status URL to sales from web shop
Closes #14210
2025-09-02 10:14:54 +02:00
Cédric Krier 759a7c186d Forbid resetting to draft cancelled shipment from Shopify
Closes #14207
2025-08-29 14:38:40 +02:00
Nicolas Évrard 9839c0902d Add test that fields in __access__ are required
Closes #14261
2025-09-29 13:16:49 +02:00
Adrià Tarroja Caubet c9d323f544 Add a timestamp parameter to the URLs of the product images
Closes #11456
2025-10-11 13:27:37 +02:00
Cédric Krier ecc9ffc7de Add stock inventory and turnover reports 2025-10-11 10:46:03 +02:00
Cédric Krier da6b14a99b Decode the SQL query logged by the Postgresql backend
This makes it easier to copy and paste the query when debugging.
2025-08-27 10:00:14 +02:00
Cédric Krier 771e76f0cc Support taxes from Shopify shipping product
Closes #14192
2025-08-25 13:37:31 +02:00
Cédric Krier f6c86bf30a Use sub-test when testing search domain with deactivable mixin 2025-08-23 20:29:51 +02:00
Cédric Krier 9aff219032 Use an alert for processing notification 2025-08-22 00:13:56 +02:00
Cédric Krier 778d064f56 Add routes to open Shopify objects
Closes #14176
2025-08-20 14:01:18 +02:00
Cédric Krier c642173094 Add support for credit refunds with Shopify
Closes #14165
2025-08-15 13:08:08 +02:00
Cédric Krier 245092d63b Add support for refunding payments on sales
Closes #14166
2025-08-15 09:11:10 +02:00
Cédric Krier 7c4504f23a Do not use the order object from Shopify webhook update
But fetching the order we ensure to fetch all the data needed.
2025-08-16 14:10:56 +02:00
Cédric Krier 440b920654 Add button to update the sales from their web shop
Closes #14163
2025-08-14 12:56:41 +02:00
Cédric Krier faf11a8e48 Add web shop URLs to products
Closes #14160
2025-10-09 10:20:31 +02:00
Cédric Krier 6ba56ce0c8 Allow a different list price to be set for each variant
Closes #14154
2025-10-07 16:23:45 +02:00
Cédric Krier 965aa923c7 Include reference in shipment record name and fallback to id when empty
Closes #14147
2025-08-06 10:10:23 +02:00
Cédric Krier df1f944489 Order POS sale by descending date
Closes #13985
2025-08-01 10:34:42 +02:00
Xavi Hermoso 93385742d2 Make quality control points name unique per control
Closes #14124
2025-10-08 13:00:22 +00:00
Cédric Krier f325924717 Do not update measurements of all shipments for empty list
Closes #14271
2025-10-02 10:44:10 +02:00
Cédric Krier 5d6ec458c7 Remove unnecessary depends on Shopify UoM of product 2025-09-30 09:54:01 +02:00
Nicolas Évrard 818f26253a Remove has_window_functions on Database 2025-10-04 22:45:53 +02:00
Nicolas Évrard fb57dd9a25 Set a minimal supported version of sqlite 2025-10-06 17:36:06 +02:00
Cédric Krier 981d4768a1 Rename config variable to avoid naming collision
bd7e0b1a1276 import the trytond config as config now which was overridden by
the account configuration instance.
2025-10-07 15:15:52 +02:00
Cédric Krier befa450e47 Do not lock web shop records when fetching or updating Shopify order
It is not needed as the unique constraint on the sale for the shopify
identifier ensures that only one sale is created per order.

Closes #14259
2025-09-29 11:15:52 +02:00
Cédric Krier 74ee169c54 Refactor of trytond.config to add cache
This removes the need to store configuration in global variable and so make it
easier to update for example for testing.

Closes #14249
2025-10-07 08:19:57 +02:00
Cédric Krier 5fdcba985b Set width to 100% on all elements between pane and screen-container
Without the 100% width, Chrome does not render an horizontal scrollbar when the
form overflow the pane width.

Closes #14197
2025-09-23 12:12:52 +02:00
Sergi Almacellas Abellana a705be3b98 Leave the unit price field empty for the purchase line of production outsourcing
Since changeset 65be15fb7d8a the unit price is not required until
the purchase is confirmed

Closes #14245
2025-09-19 09:12:53 +02:00
Nicolas Évrard 736eda2333 Handle URL host of the bus on login instead of using a redirect
Browsers remove authorization header upon cross-origin redirect.

Closes #12329
2025-10-06 17:03:41 +02:00
Nicolas Évrard f0199c149b Validate the session without using the pool on bus requests 2025-10-04 15:53:18 +02:00
Nicolas Évrard a72adf0fdc Restrict sessions to the client's IP address
Closes #13909
2025-10-05 17:17:14 +02:00
Cédric Krier c9980988cc Store in the cache all the lines to reconcile when searching for the best reconciliation
When the last line is pop from the debit/credit list, the access to the balance
may invalidate the cache of other records to fill the cache of the last one.
This may become very inefficient on large list of lines.
So by setting the record cache size to the size of the list of lines, we ensure
that no cache is invalidated during the calculation.

Closes #14230
2025-09-15 13:18:39 +02:00
Cédric Krier 8b283d14a0 Use cache functools to cache entry points 2025-09-18 10:19:13 +02:00
Cédric Krier d80a166f2a Add cache to find_path tool 2025-09-18 10:18:54 +02:00
Cédric Krier 33d85882ad Compute root path of trytond only once 2025-09-18 10:18:21 +02:00
Cédric Krier ee18ba3924 Cache the module configuration 2025-09-18 10:17:27 +02:00
Cédric Krier 8e1c951e1e Add test for register conditionals in extras depend of module 2025-09-09 14:22:28 +02:00
Cédric Krier 134c35345e Make product_price_list_dates extras depend on purchase_price_list
Closes #14241
2025-09-18 09:13:01 +02:00
Cédric Krier fbee7be655 Make sale_product_quantity extras depend on sale_point
Closes #14240
2025-09-18 09:10:45 +02:00
Cédric Krier c0df960de7 Make sale_supply_production extras depend on production_routing
Closes #14239
2025-09-18 09:08:10 +02:00
Cédric Krier 95456d6f92 Use tryton.cfg to register in the Pool 2025-09-18 16:42:29 +02:00
Cédric Krier 390dd930d8 Compare product data feed CSV independently of the header order in tests 2025-09-18 09:44:17 +02:00
Cédric Krier 9b39b6f170 Disable action and reload toolbar menu when there is no record
There is no action to execute without a record.

Closes #11929
2025-09-23 11:37:19 +02:00
Cédric Krier 457adf3ebc Hide buttons and links when there is no record
There is no action to run without a record.

Closes #14250
2025-09-23 11:35:23 +02:00
Cédric Krier 63ef97ca4f Use only components without product from the template as the default components for the product
Closes #14246
2025-09-19 14:04:29 +02:00
Cédric Krier b934cd7b4e Enforce the same company, currency and party when the payment origin is a sale
Closes #14237
2025-09-17 16:28:04 +02:00
Cédric Krier c76a97868a Enforce the same party only for draft payments of sales
Closes #14236
2025-09-17 16:25:56 +02:00
Cédric Krier 7153bca657 Update sale addresses also for guest party from Shopify order
If the guest party is set back because the customer has been removed on
Shopify, the addresses must be also set back to those from the guest party.

Closes #14235
2025-09-17 15:21:54 +02:00
Cédric Krier 076fcbcc0a Use current total price when creating sale from Shopify order
At the creation the order may already have the total price modified by refund
etc.

Closes #14234
2025-09-17 13:23:09 +02:00
Cédric Krier 9e725456fd Do not try to fulfill move not linked to a Shopify order line
Closes #14232
2025-09-16 10:57:50 +02:00
Cédric Krier da9cc4bb87 Patch global PATH variable of filestore in test
Changing the configuration value is not enough as its value is cached in the
global variable.

Closes #14248
2025-09-20 09:07:18 +02:00
Cédric Krier 6c08365879 Do not set weight nor dimension to Sendcloud parcel when empty
Closes #14231
2025-09-15 17:58:55 +02:00
Cédric Krier 80eaf304d1 Remove padding in base64 converter 2025-08-27 12:35:31 +02:00
Cédric Krier 705baad2b1 Keep original order for data on pie chart
Closes #14222
2025-09-10 00:56:46 +02:00
Cédric Krier c66acb75e5 Use the length of data to generate color scheme on pie chart
We need a different color for each data instead of each y field.

Closes #14221
2025-09-10 00:53:45 +02:00
Cédric Krier 8d56e4fbf1 Return proper bad request error for request with incorrect data 2025-09-09 22:38:27 +02:00
Cédric Krier a1b80e1af5 Use the presentment currency of the Shopify order for the sale currency
Closes #14214
2025-09-04 10:37:26 +02:00
Cédric Krier 61731f9f1e Compare compact format of contact mechanism when updating Shopify customer
Closes #14211
2025-09-08 14:05:05 +02:00
Cédric Krier 32a8c0d6eb Refund Shopify shipping cost when no shipment was sent
Closes #14218
2025-09-05 17:57:12 +02:00
Cédric Krier 8f23c0d36b Refund Shopify order also when the sale state is done
If nothing has been shipped, the shipment state is "None" but the sale state is
"Done".

Closes #14208
2025-08-29 14:44:26 +02:00
Cédric Krier cae48b576e Restore limit when searching for searching for wizard name
20cdba7a1bf3 removed the limit but it is still needed to extract the single
record.

Closes #14238
2025-09-18 07:48:50 +02:00
Cédric Krier 13bb47b868 Remove default lead time for product sold
By default it is better to assume that we do not know the default lead time of
the company which allows to select the first supplier no matter its lead time.
The sale already plans the stock move to today when the planned shipping date
is empty since a748de86c8d6.

Closes #14224
2025-09-10 09:47:03 +02:00
Cédric Krier b21d1497fa Use the FILTER syntax with SQL aggregate functions
Closes #14199
2025-08-27 10:17:31 +02:00
Cédric Krier 3c82eeca33 Order locations by the MPTT left field when searching on quantities
This improves the likelihood that a full branch of locations will be calculated
in the same batch.

Closes #14182
2025-08-22 10:11:57 +02:00
Maxime Richez d72c4e2a95 Allow modifications of incoterm until customer's shipments has been shipped
Closes #14203
2025-09-14 22:23:45 +02:00
Nicolas Évrard d14e82281d Get name for wizards not linked to a model
Closes #14033
2025-09-14 15:27:16 +02:00
Nicolas Évrard cb48d24489 Add cache on ir.action.wizard get_models and get_name 2025-09-14 15:25:23 +02:00
Nicolas Évrard ace7be31be Use the EXISTS operator when using the 'where' operator in Many2One
Closes #11935
2025-09-14 12:38:50 +02:00
Alex Alias Montserrar 9223e17240 Test if address has a country before display country name in SEPA mandate report
Closes #14020
2025-09-14 11:47:59 +02:00
Cédric Krier 1de38fedd2 Only validate packing for shipments with a shipping service
Closes #14217
2025-09-05 16:52:11 +02:00
Cédric Krier 15f2650954 Redact sensitive values from the log
Closes #14220
2025-09-09 15:17:31 +02:00
Nicolas Évrard 689473f50f Make sure that the search order is predictable when either the limit or the offset is set
Closes #14169
2025-08-18 10:40:02 +02:00
Nicolas Évrard 77984124dd Add a test to ensure that Model._order is predictable 2025-09-11 00:30:16 +02:00
Cédric Krier 0bfe0895ae Update height of list-form when it is set on xxx2Many widget
The current view element is the `list-form` so it is not found. Instead we must
search from the content element of the xxx2Many widget because it replicate the
CSS rule.

Closes #14212
2025-09-02 14:28:57 +02:00
Cédric Krier 2282f46118 Do not refund the non-movable lines to Shopify
Closes #14209
2025-08-29 15:01:23 +02:00
Cédric Krier 5fbfae5a7b Rename the XML ids of the quality production inspection wizard 2025-09-02 13:38:24 +02:00
Cédric Krier c0d29441e9 Fix the XML id of the quality production inspection wizard
Closes #14113
2025-09-02 13:36:42 +02:00
Cédric Krier 91b88aed85 Prevent the CSV import and export windows from being clicked on multiple times
Closes #14205
2025-08-28 19:20:03 +02:00
Sergi Almacellas Abellana 2ae56ac164 Add readonly states to stock quantity issue model
Closes #14191
2025-08-25 12:39:40 +02:00
Sergi Almacellas Abellana 876e972fb6 Add default lead time on product configuration
Changeset 0a0b8be85ef5 added a default value for the multivalue model, but
not for the product configuration, so it is always ignored.

Closes #14188
2025-08-25 10:58:08 +02:00
Cédric Krier 33d5deb5c3 Pass also the number as formatting parameter to ngettext
Closes #14204
2025-08-28 18:16:48 +02:00
Cédric Krier 42ba69bfa6 Use line item quantity to calculate unit price of Shopify sale line
The total discount is based on the initial quantity of the line item instead of
the current quantity.

Closes #14187
2025-08-25 10:37:14 +02:00
Cédric Krier 7f0cb85631 Check for assigned move per company and recent date
d84b63604b10 calculates the recent date per company so we must search for moves
using this date for the same company.
2025-08-23 21:18:43 +02:00
Cédric Krier c169d22f96 Update Shopify payment even if the captured amount is zero
Closes #14181
2025-08-21 17:49:46 +02:00
Cédric Krier 2cc6581609 Always decrease Shopify sale line by the refunded quantity
The restock type is only for the stock level calculation of Shopify which is
not useful as Tryton always update the stock level.

Closes #14179
2025-08-20 16:29:15 +02:00
Cédric Krier 39de08712e Add test scenario to request production with BoM 2025-08-20 11:34:54 +02:00
Cédric Krier b9d34f3174 Use the BoM output unit to request the quantity to produce
This ensures that the output quantity of the production is not floored such
that the production supply does not enter in an infinite loop.

Closes #14175
2025-08-20 11:20:30 +02:00
Cédric Krier 9844fc004d Define weight as Shopify fields on product template
The product_measurement module defines the weight on the template.

Closes #14173
2025-08-19 16:37:43 +02:00
Cédric Krier 4c7a656308 Set sale attribute only if changed
This avoid to clear the sale if there are no actual change on the sale order.

Closes #14171
2025-08-19 13:33:55 +02:00
Cédric Krier c13b0b6626 Fix name of Shopify webhook topic for payment
Closes #14168
2025-08-16 14:16:40 +02:00
Sergi Almacellas Abellana e73ff8af6a Remove the empty notebook pages caused by field access
Closes #14157
2025-08-31 11:04:16 +02:00
Cédric Krier 6bf0edc5eb Manage Shopify webhook for orders edited and cancelled topic
Closes #14136
2025-08-16 14:12:34 +02:00
Cédric Krier e60c2ba8b4 Create draft sale with guest party for Shopify order without customer and update it later
Closes #14167
2025-08-16 10:33:56 +02:00
Cédric Krier 86c9db5ad9 Unpack move table when converting domain for payable/receivable date
Closes #14158
2025-08-23 21:21:10 +02:00
Cédric Krier d1f6163dc8 Do not sum moves progress of component if it is None
When the component has no move, its moves progress is None so it can not be
added to the general progress.

Closes #14183
2025-08-22 11:13:57 +02:00
Cédric Krier 9c0ec50ecf Use gettext method instead of gettext module in import window
Closes #14180
2025-08-21 08:17:10 +02:00
Lars Wuerfel 26d931f238 Correct typos in the report documentation 2025-07-23 10:44:12 +02:00
Cédric Krier 20109ca332 Fix highlight syntax of board documentation 2025-06-26 19:05:43 +02:00
Cédric Krier d33a0e9cb0 Remove metadata columns from tutorial of table query
Since 5095928ec38a those columns are added automatically.
2025-05-10 19:38:24 +02:00
Alex Alias Montserrat 824f6bdc50 Replace the description field with a summary field on the subscription line lists
Closes #12022
2025-08-23 10:24:36 +02:00
Cédric Krier 14947658f8 Allow searching for sales by web shop and ID
Closes #14162
2025-08-14 08:48:37 +02:00
Cédric Krier 9995fa616f Use product record name in record name of purchase request
Closes #14141
2025-08-01 10:01:14 +02:00
Cédric Krier 0b078acacd Add support for disassembly production
Closes #14091
2025-06-19 17:39:38 +02:00
Cédric Krier 29e3785f8d Do not create demo user for every language
Instead we rely on the client language.
2025-08-07 23:41:31 +02:00
Cédric Krier 33ee5f0d51 Set client language in the context when user has no language 2025-05-02 00:46:38 +02:00
Cédric Krier 411392bb09 Use constant-time to compare session key 2025-08-07 20:55:20 +02:00
Cédric Krier ee6f06bea4 Do not warn about missing list price when producing a single product
Closes #14146
2025-08-05 15:37:15 +02:00
José Antonio Díaz Miralles 3925faca88 Use the page position instead of the screen position to compute the column resizing
Screen or client position calculations may be inaccurate when there are
multiple monitors or scrollbars.

Closes #14156
2025-08-21 12:30:44 +02:00
Cédric Krier 137bb82fcd Call super for on_change of supplier and customer for Intrastat on shipments
Closes #14150
2025-08-07 11:11:32 +02:00
Cédric Krier 8f7ebb18cd Set web shop currency and methods on sale after calling on_change's
The on_change_party set the default currency from the company and methods from
the party.

Closes #14149
2025-08-07 10:28:09 +02:00
Cédric Krier 08ed6e529b Clear the Shopify tax adjustment before recalculating it
Closes #14143
2025-08-21 10:38:46 +02:00
Cédric Krier f555e35eca Set selected class before changing current record and do not rely on toggle
The class must be set before changing the current record because the property
selected_records relies on the classes and this method is called when changing
the current record to set the sensitivity of the buttons.
Also clicking a second time on the row must unselect the row which is not
possible to implement with the toggling of the class.

Closes #13980
2025-08-01 11:08:58 +02:00
Eddy Boer 7528183eee Move pricelist field before shipping date on sale form
Closes #14040
2025-08-21 09:50:22 +02:00
Adrià Tarroja Caubet 3ed4e9c168 Unpack tables move when ordering by payable_receivable_date
Closes #14158
2025-08-13 11:35:04 +02:00
Cédric Krier 013a6768cf Use a list of values when updating quality operations from done to do
Closes #14116
2025-08-12 00:33:19 +02:00
Cédric Krier b6472c7a71 Ensure date in log window is always a string
The date can be null for example for record having been just created without
any modification later.

Closes #14142
2025-08-01 10:20:59 +02:00
Cédric Krier dec047d676 Do not check www.gnu.org URLs
The server has a rate limit that the CI reaches.
2025-08-01 09:39:50 +02:00
Nicolas Évrard 65c93a338e Use the canonical name of the test timezone
Closes #14170
2025-08-18 11:35:25 +02:00
José Antonio Díaz Miralles 8d4b38b339 Include the period in the nested part when searching the invoice party of lines
Closes #14125
2025-08-12 00:15:43 +02:00
Cédric Krier f958c59d05 Test if party is set before using its record name for reconciliation error message
Closes #14127
2025-07-30 15:12:15 +02:00
Cédric Krier 16cbeeee2c Use rfc role in documentation and ignore checking datatracker.ietf.org links 2025-05-03 17:10:58 +02:00
Cédric Krier 29e6c6e0c9 Do not copy reference field by default
Closes #14140
2025-08-01 00:10:49 +02:00
Cédric Krier 454e35f555 Set One-Click header to unsubscribe from marketing mailing list
Closes #14137
2025-07-29 00:14:02 +02:00
Cédric Krier 4f0eb2b0d3 Add effective dates, company and warehouse on header of production form 2025-06-19 18:12:25 +02:00
Cédric Krier da57dd5f78 Reset period of move when company is changed
Closes #13999
2025-05-05 16:26:06 +02:00
Cédric Krier 26fff46aa6 Define the file types that image input accepts
Closes #14083
2025-06-18 00:49:55 +02:00
Cédric Krier acc9c6972a Add test to enforce One2Many Function field to have a setter
The clients may always try to write on One2Many even if it is readonly so such
Function field must have a setter.

Closes #8739
2025-06-17 15:02:55 +02:00
Cédric Krier b7f6a462f1 Allow unsplitting moves
Closes #14079
2025-08-09 15:39:54 +02:00
Cédric Krier 9da4595239 Update documentation of stock split 2025-06-16 19:17:23 +02:00
Cédric Krier 18491428f7 Ask for the clearing date when the payment group succeeds
Closes #14075
2025-06-15 18:38:09 +02:00
Cédric Krier c5600c0f9b Set multiple to some buttons on list view 2025-06-16 12:24:16 +02:00
Cédric Krier bcb8fd1cd2 Do not execute button if there is no current record for the screen 2025-06-16 11:38:20 +02:00
Cédric Krier b88d9004ef Replace menu entry for upgrade module wizard by multiple button on module list 2025-06-13 17:40:28 +02:00
Cédric Krier 9058fc381d Simplify buttons of module 2025-06-13 17:41:01 +02:00
Cédric Krier e994731e14 Add multiple attribute to the buttons in the tree view
Closes #14072
2025-06-13 17:34:39 +02:00
Cédric Krier 05fcef8204 Support delete on cascade user roles
Closes #14054
2025-06-06 15:07:00 +02:00
Cédric Krier a60dee6c84 Add users list on role form 2025-06-06 14:43:14 +02:00
Cédric Krier bf821e68df Support shortcuts on modal
The shortcut function search for a button in the last opened modal footer
having the id and click on it.
Otherwise it fallback to the existing searches on the current tab.

Closes #14041
2025-05-28 17:58:36 +02:00
Xavi Hermoso 5b7dacf3a5 Clear the lot when the stock move product changes
Closes #14035
2025-08-08 10:38:06 +02:00
Cédric Krier 74186a04c8 Improve error message when delete or modify reconciled line 2025-05-21 17:15:31 +02:00
Cédric Krier 3081ff10c1 Pass invoice data when processing supplier invoice line from OCR service
This eases the extension of invoice data that may be needed to process invoice
line when such data is not yet set on the invoice instance.

Closes #14017
2025-05-13 13:03:48 +02:00
Cédric Krier 5c806446b5 Set avatar to user 2025-04-29 23:32:29 +02:00
Sergi Almacellas Abellana 0f9d615975 Add expand on allocatiation tree view 2025-08-01 10:08:17 +02:00
Cédric Krier b0f7d45254 Manage readonly wizard
readonly wizards do not check for write access on the active model.

Closes #13989
2025-04-29 09:31:05 +02:00
Cédric Krier ea26652f45 Simplify tests by using movable property of line instead of product type 2025-07-10 17:52:16 +02:00
Cédric Krier 6cda4cf48d Replace checkout wizard by values returned by button_action
Closes #14076
2025-06-22 12:57:15 +02:00
Cédric Krier 20e8d5761c Use email tools to format address for marketing email
This supports sending email with local-part containing non-ASCII characters.

Closes #14138
2025-07-30 00:21:34 +02:00
Cédric Krier 720bd01f04 Enforce non-goods product to not be consumable
Closes #14132
2025-07-24 10:36:30 +02:00
Cédric Krier b05dd58da8 Make component fields readonly on non draft sale and purchase
Closes #14130
2025-07-23 18:03:49 +02:00
Cédric Krier ec36d50273 Forbid to select the invoice company as consolidation company
Closes #14126
2025-07-22 13:37:58 +02:00
Cédric Krier b47558053e Fix extras_depend name in tryton.cfg
Closes #14122
2025-07-15 17:56:59 +02:00
Cédric Krier ee76d45fd8 Add test for methods of buttons
Closes #14121
2025-07-15 17:45:56 +02:00
Cédric Krier 9b6ea0ae6a Do not fail to duplicate lot with an empty lot list 2025-07-15 17:44:06 +02:00
Cédric Krier 9c1824a913 Initialize recent date when closing periods with empty period list 2025-07-15 17:45:18 +02:00
Cédric Krier 8f9db42bc7 Do not fail to open product category to add products without any categories 2025-07-15 17:42:16 +02:00
Cédric Krier d0332b3852 Set default values for fields of button_change decorator
Closes #14120
2025-07-15 17:37:59 +02:00
Cédric Krier d5e92b91d9 Recursively set values on record for xxx2Many fields
The values for wizard may be a list of dictionaries for xxx2many fields.

Closes #14055
2025-07-11 23:14:50 +02:00
Cédric Krier 549370459d Set shipment cost method on Shopify sale only if a carrier is set
Closes #14105
2025-07-07 11:20:12 +02:00
José Antonio Díaz Miralles 9eb7dcc1c7 Avoid performing duplicate searches when submitting the filter dialog
Closes #14104
2025-07-06 13:03:41 +02:00
Cédric Krier bf18b966b8 Use quantity set on the line to compute unit price from Shopify order
The quantity of the line item may be different if part of the line item has
been refunded or cancelled.

Closes #14103
2025-07-04 10:15:23 +02:00
Cédric Krier aa0bf2e7ba Reset to draft sales updated from Shopify
As the update from Shopify may need to add new lines which can only be created
for a draft sale.

Closes #14099
2025-07-02 13:25:56 +02:00
Cédric Krier 038230eb91 Do not clear existing product of sale line when update from Shopify
Closes #14098
2025-07-02 11:42:14 +02:00
Cédric Krier 08d0789e0b Allow editing product on confirmed sale line with Shopify identifier
Closes #14096
2025-07-02 10:23:03 +02:00
Nicolas Évrard bf64f359a2 Set current screen context in import / export windows
Closes #14128
2025-07-23 14:10:32 +02:00
Nicolas Évrard 8d7279778b Get ir.model Model from the pool
Closes #14131
2025-07-23 18:01:24 +02:00
Cédric Krier 9a94f06da6 Do not crash if there is no Euro currency defined for intrastat reports
Closes #14050
2025-07-11 22:43:56 +02:00
Cédric Krier cc67a9b121 Do not fail to compute price when carrier has no price list per weight
Closes #14111
2025-07-11 09:41:35 +02:00
Cédric Krier 490fb564ea Stop propagation of click event on button in tree view
If the button is going to be executed, the selection of the row must not change
so the propagation must be stopped before reaching the row.

Closes #14118
2025-07-11 15:19:22 +02:00
Cédric Krier 750bfe2045 Do not convert integer value from binary function field
Binary fields can have two types bytes and integer when only the size is
requested. So integer value should not be converted to bytes.

Closes #14100
2025-07-03 23:10:30 +02:00
Cédric Krier 8ce69b1055 Use only foreign Many2One for domain on field for field access
The Char fields are not filled when using the foreign Many2One so the domain
must rely only on the foreign Many2One.

Closes #14081
2025-06-17 15:25:09 +02:00
Cédric Krier 380f7c6941 Slugify filename of email attachment
This gives more chance for the email to not be blocked as some mail server
implement restrictions on the filename of attachment.

Closes #14074
2025-06-15 12:19:39 +02:00
Cédric Krier 1fc8fa8809 Use chain to iterate over records to create and to write 2025-06-29 19:14:36 +02:00
Cédric Krier dbb65081b0 Do not restore values for created records when exception is raised when saving
Once a record has been created, the id is modified which change its hash value
such that it can not be found anymore.
But as the creation succeeded (and only the write part has failed) we can just
restore the values to None.

Closes #14093
2025-06-29 19:13:42 +02:00
Cédric Krier 125668e0e2 Do not change the selection of row when starting the edition
The edition of tree row relies on having the current record of the screen set
to the row edited. This can be only guarantee if we do not change the
selection.

Closes #14097
2025-07-03 16:24:59 +02:00
Cédric Krier 4238add5e3 Do not set Content-Length header to data response
Since version 0.8 werkzeug set the header automatically by default.

Closes #14010
2025-06-21 23:02:52 +02:00
Cédric Krier 13eb20f6b2 Use the actual Shopify values for scope in documentation 2025-05-07 19:13:03 +02:00
Nicolas Évrard 69690daa2c Fix a typo introduced in 71bad2d56f96 2025-07-02 01:02:22 +02:00
Cédric Krier 859a8ec312 Remove unecessary semicolon in tab modified_save
The semicolon was introduced in 14150ef09fb6
2025-06-29 02:10:35 +02:00
Cédric Krier b7d96280bc Limit the depth for finding modules in module directory 2025-06-28 16:22:27 +02:00
Cédric Krier d3ca288917 Round commission amount using price digit in reporting
Closes #14049
2025-06-10 19:52:29 +02:00
Cédric Krier b63c28503c Use recursive CTE for child/parent-of clause when the number of ids is too large
The path or MPTT queries are faster than the recursive CTE only when the number
of OR-ed clauses does not require more index scan than the CTE.
This number can be approximate to the depth of the tree.
Log10 is used to estimate the depth of the tree if it has an average of 10
children per node.

Closes #14078
2025-06-16 13:48:00 +02:00
Cédric Krier ea1393bb84 Reduce the clauses of child-of using common roots
For the path, if the longer path contains another searched path, we can ignore
it.
For MPTT, if a range is inside a larger range, we can also ignore it.

Closes #14064
2025-06-10 23:22:01 +02:00
Cédric Krier 6718a613cf Convert UnidentifiedImageError from PIL into validation error
The image conversion that are done as preprocessing of the user input should be
considered as data validation.

Closes #14084
2025-06-18 01:26:39 +02:00
Cédric Krier 2cd40e46a8 Catch error from clipboard.writeText
Closes #14082
2025-06-17 17:21:52 +02:00
Cédric Krier c3a9faea42 Convert domain without checking access
The searcher of Function field may execute code for which the user has no
access.

Closes #14077
2025-06-16 19:42:12 +02:00
Cédric Krier 98f6f4b037 Convert tuple from XML ID into string before join them
9941357a9b7c modified the 'ref' method of the eval context of XML file to
return reference string but get_id return a tuple of string and integer. So the
integer must be converted to string before being joined.

Closes #14066
2025-06-19 09:45:55 +02:00
Cédric Krier a41611ddd5 Do not fail if the cache name to clear does not exist
Cache instance can be created on usage like in ValueMixin, so a process may not
have an instance of the cleared cache.

Closes #14067
2025-06-12 12:48:22 +02:00
Cédric Krier d1b33c2dc0 Define product variable to raise error when cost price expression is not a Decimal
The product variable is used to format the error message but also as for
50bf49b7b031 it may be empty.

Closes #14062
2025-06-10 18:12:43 +02:00
Adrià Tarroja Caubet 4b07c0d666 Inherit marketing reporting abstract models in right order
Abstract models should be always the last in inheritance because
they are object when optional dependencies are not activated

Closes #14057
2025-06-13 10:56:40 +02:00
Maxime Richez 207f097a95 Do not check access when register button click
e6c72b1f23e7 missed to add the decorator on the register method.

Closes #14060
2025-06-19 23:40:11 +02:00
Cédric Krier fa4c2ae1fb Limit the height of completion dropdown
The actions are set as sticky to be always visible.

Closes #14063
2025-06-10 23:00:30 +02:00
Cédric Krier 7425bc176a Use dedicated list view to display children line on budget form
We do not need to full record name but just the current name when editing
children from the parent form.
2025-05-10 11:57:50 +02:00
Maxime Richez 776814ba5c Convert shipments set to list when calling set_measurements
Closes #14071
2025-06-13 15:57:31 +02:00
Cédric Krier 1921487213 Replace the usage of field definitions with field attributes in the ModelStorage
Model.fields_get is expensive to call as it create a new dictionary for each field.

Closes #14061
2025-06-10 14:31:11 +02:00
Cédric Krier 5e560afbdc Do not use field definitions when exporting data
Calling Model.fields_get is expensive especially for each record to export.

Closes #14061
2025-06-10 14:29:07 +02:00
Cédric Krier ed1e9d8916 Fill payment amount cache only when cache column is added by register
Closes #14034
2025-06-02 10:54:15 +02:00
Cédric Krier 593c8f0aea Use AND-ed clause when searching for implicit location for internal shipment
88978685 added a clause on the type but using an OR-ed clause which includes
all the storage locations instead of only the storage location with a
provisioning or overflowing location.

Closes #14016
2025-05-13 18:49:32 +02:00
Cédric Krier b708094026 Make trytond-gis depends on the trytond extras test for its tests 2025-06-01 23:19:18 +02:00
Cédric Krier ae71913833 Add transition from packed to cancelled for internal shipment
Since fee9e4e8c864 the internal shipment has a new packed state that can be
cancelled.

Closes #14053
2025-06-05 16:43:10 +02:00
Xavi Hermoso 3e4fea4b3c Set default flag to False in Own Requisition rule group as it is linked to Purchase Requisition group
Closes #13930
2025-03-20 12:22:47 +01:00
Cédric Krier 733df9d2dd Use the configured display size when selected or expanded row are defined
This ensure that we store on the view the selected/expanded rows by displaying
them after a reload.

Closes #14048
2025-06-01 12:49:28 +02:00
Cédric Krier eb7336c1c4 Delay the observation of the more button
#14048
2025-06-01 12:46:57 +02:00
Cédric Krier c37abac5dc Do not save tree state when setting value on form view 2025-06-01 12:45:53 +02:00
Cédric Krier 8e1e68727d Always wait for the promise of save_tree_state
#14048
2025-06-01 12:45:06 +02:00
Cédric Krier 312ae7b387 Forbid to set closed account on statement rule line
The domain must be the same as account domain of statement line.
2025-05-31 14:41:01 +02:00
Cédric Krier 75ccdb1ba2 Use -1 as fallback value for company in account domain of statement line 2025-05-31 14:40:02 +02:00
Sergi Almacellas Abellana e61ed092f6 Remove debug exception introduced by 2fbe3b55927a 2025-06-12 10:54:46 +02:00
Cédric Krier 1bc9046fbe Add test scenario for tax test wizard 2025-05-30 21:36:23 +02:00
Cédric Krier a4a655b05e Use explicit key when computing taxes and object instead of dict
This defines explicitly the available attribute and unify the use the values as
tax line instead of the keys.
2025-05-30 21:35:55 +02:00
Cédric Krier cc8901276e Round only the tax amount of the line when rounding per line
If we round the tax amount already added to the other line, the result may vary
depending on the order of the lines.
This is because round half even is used so the result may depend on the already
summed tax amounts.

Closes #14047
2025-05-30 18:10:27 +02:00
Cédric Krier c710994e2e Store the selected state before deselect all the rows
We must toggle the state of the row based on the original state.
Otherwise on single mode, clicking on a selected row keep it selected.

Closes #14045
2025-05-28 18:15:07 +02:00
Cédric Krier 45d3a25343 Unselect other rows when radio button of row is selected
The selection of a radio button, deselect automatically the other radio button
so we must update the selection of other rows to remove the selected class.

Closes #14044
2025-05-28 18:11:23 +02:00
Cédric Krier bd4b030518 Change the border color of checkbox and radio when focus
This provides a visual hint that the element has the focus.

Closes #14043
2025-05-28 18:05:16 +02:00
Cédric Krier eadd7bcffe Do not execute tab shortcuts if there is a modal open
The modals are linked to the current tab so we can not change the tab as long
as there is a modal.

Closes #14042
2025-05-28 18:02:21 +02:00
Cédric Krier e88fea9fc6 Apply filter on icon under primary background
Otherwise the icon is not visible as it has the same color as the background.

Closes #14032
2025-05-21 17:10:34 +02:00
Cédric Krier d10a8a243f Remove thousand separator when converting domain string to float
Since c8d97fac the domain parser format number using locale but the atof
function does not remove the thousand separator which could prevent Number to
parse the string.

Closes #14024
2025-05-23 12:53:44 +02:00
Cédric Krier 095ac6509b Use first description of statement lines as description of move line without origin
Closes #14038
2025-05-27 20:00:18 +02:00
Cédric Krier b859ee5074 Invert boolean operator when searching description with negative operator
Closes #14037
2025-05-27 19:57:03 +02:00
Maxime Richez 676050ff70 Remove useless variable quantity in explode_bom method
Closes #14036
2025-05-27 19:54:43 +02:00
Cédric Krier 6e49fd3e79 Add closed constraint on default receivable/payable account of configuration storage
The same domain constraint from the multivalue field must be applied to the
storage field.
2025-05-25 17:09:45 +02:00
Cédric Krier 98db94d3ef Remove explicit record name from export of relation field
This provides the same format as the import.
2025-05-21 17:02:51 +02:00
Cédric Krier 16d36ff2f7 Export Many2One and Reference using record name 2025-05-21 17:03:43 +02:00
Cédric Krier d769ff12c3 Support import of one2many as list of name 2025-05-21 17:03:21 +02:00
Cédric Krier eab2b6deb0 Support export of xxx2many fields as list of name 2025-05-21 17:00:31 +02:00
Cédric Krier 9843587815 Import multiselection field as CSV list
Closes #13995
2025-05-21 16:58:36 +02:00
Cédric Krier 840a342214 Export multiselection field as CSV list
Closes #13995
2025-05-21 18:38:40 +02:00
Cédric Krier 10c273d576 Avoid parsing image content as XML is they do not look like XML
This prevent the browser to log an error in the console.
Also we test for the presence of svg tag to be sure it is an svg image.

Closes #14019
2025-05-14 12:56:23 +02:00
Cédric Krier 0ad9570070 Document preferred languages order for get_email 2025-05-23 17:13:37 +02:00
Cédric Krier 5307e3303a Set email content with maintype when needed and correctly set Content-Language header
When the content is not a string, EmailMessage.set_content requires a maintype
argument but not when it is a string. The maintype is then deduced using the
mimetypes module.
The Content-Language of content or alternate must be set using the headers
parameter instead of params which is for the Content-Type.
And finally the Content-Language must be set on the main message only if it
contains multiparts otherwise it is set twice.

Closes #14028
2025-05-23 17:07:57 +02:00
Nicolas Évrard d3f93b46f8 Use class access model when testing for parent access 2025-05-22 10:59:36 +02:00
Cédric Krier db95c26b09 Store URL to open before getting the preferences
The preferences may execute actions which may change the original URL at the
login. Such that the original URL is never open.
This is more visible since ac5d71376fca which makes the actions sequential.

Closes #13975
2025-05-21 11:16:56 +02:00
Cédric Krier 0d361542fe Do not use state Function field of line to check against modification
The Function field is an helper to write PYSON statement so there is no need to
use it for checks.

Closes #14002
2025-05-08 18:36:13 +02:00
Cédric Krier 18e995089f Fix placeholder errors in tryton translations 2025-05-20 00:09:51 +02:00
Cédric Krier 6159c55203 Set default value via domain inversion only when deferred operand is id
Other cases for deferred operand can not be deduced as unique for sure.

Closes #14005
2025-05-08 18:22:54 +02:00
Cédric Krier c22cef7e23 Remove empty files when exporting translations of a module
If the module has no translations, no file should be created. If they exist,
they must be removed.

Closes #14021
2025-05-15 13:33:44 +02:00
Cédric Krier ed7285d6a0 Iterate on the result of items call to update values set by on_change on O2M
e38f2298 introduces wrongly the iteration over the function instead of the result.

Closes #14014
2025-05-12 12:36:10 +02:00
Sergi Almacellas Abellana 9ef6152a16 Do not require result nor type for inactive documents
Otherwise children documents can not be processed because the parent document
raises a RequiredValidationError when saved

Closes #14015
2025-05-12 15:17:26 +02:00
Nicolas Évrard a190aae17f Remove notification events from the queue after the wait times out
Closes #14022
2025-05-14 12:12:54 +02:00
Maxime Richez 4cf2384552 Set empty currency and unit price on stock move when not required
Closes #14023
2025-05-16 13:20:28 +02:00
Nicolas Évrard 2b8f96f8aa Use the initial precision when applying factor to a field without digits
Without digits the full representation of the number is used which might not
be the expected behaviour because applying the factor will result in a number
which short representation could be surprising to the user.

Closes #10460
2025-05-19 11:31:28 +02:00
Cédric Krier 686c3eff35 Test on_change_notification_email of trigger 2025-05-12 00:10:33 +02:00
Cédric Krier d56984a386 Search notification email model by name
Since a4f34799 the field containing the name of the model is 'name'.

Closes #14006
2025-05-12 00:10:13 +02:00
Sergi Almacellas Abellana 9487cbe10d Make bom notebook fill all form columns
Closes #14007
2025-05-09 14:07:31 +02:00
Cédric Krier d58b9e2d90 Set Message-Id to email sent
Closes #13974
2025-04-14 15:56:38 +02:00
Sergi Almacellas Abellana 4da84d5b3f Fill unknown country only for move with an intrastat type and one empty country
Closes #14008
2025-05-11 01:26:47 +02:00
Cédric Krier 41993306bf Use pairing to generate unique ID for purchase reporting
Purchase reporting are also grouped by currency so they should be part of the
ID.

Closes #13743
2025-05-05 15:07:27 +02:00
Cédric Krier 301982d6f2 Add pair/unpair in tools 2025-04-30 15:12:49 +02:00
Cédric Krier 7226268a08 Consider any field of new record as loaded
It is needed to trigger the validation of all the fields to set default value
thanks to the domain inversion.

Closes #14004
2025-05-08 18:15:25 +02:00
Cédric Krier 30c5744433 Fix message ID for unique constraint on move sequence of fiscal year
Closes #13996
2025-05-08 09:28:55 +02:00
Cédric Krier 4bda4705f1 Do not fail to reload modified view without a current record
It may happen that a tree view is considered as modified even if there is no
current record. In this case we should not try to compare the id of the current
record before and after reload as it is not defined.

Closes #13998
2025-05-05 12:33:01 +02:00
Cédric Krier 4b906352b1 Add tests for view tree width 2025-05-04 10:11:03 +02:00
Cédric Krier a69b2b6b69 Delete tree width records when field is set multiple times
There is no unique constraint so the method to set width should not rely on the
unicity of the field per screen size.

Closes #13997
2025-05-04 08:40:40 +02:00
Cédric Krier 39ddf8b838 Update label of window form only if it exists
The update of label was introduced in 89834116fe97 but the label is defined
only when the window form is created with the view type tree.

Closes #13994
2025-04-30 17:22:58 +02:00
Cédric Krier 581ffa80fa Set width to 100% on object of document widget
Closes #14000
2025-05-05 23:37:57 +02:00
Cédric Krier 5760ae39cb Set a background color to head and foot row of tree view table
Since ee297f4d7eea the sticky position is put on the row so it can no more be
transparent.

Closes #13993
2025-04-29 23:28:59 +02:00
Cédric Krier 30b867691a Use larger translation dialog for expanded widget
Closes #13987
2025-04-28 22:12:01 +02:00
Cédric Krier 56a3bd14d9 Set richtext widget inside an .input-group in translation dialog
It is needed to benefit from 6e2ff4b6.

Closes #13987
2025-04-28 22:10:50 +02:00
Cédric Krier 524c3b3cce Hide resizer of last column of tree view
This prevents the table to overflow and create an horizontal scrollbar because
of the negative inset.

Closes #13992
2025-04-29 23:24:16 +02:00
Cédric Krier d1e96023aa Set direction to column for text and richtext widget
Such that the toolbar is put on top and the input is taking the remaining
vertical space.

Closes #13986
2025-04-28 22:07:40 +02:00
Cédric Krier 47c173f74b Do not use OFX balance statement if the balance date is not the statement end date
The bank can put a balance for the statement at a different date than the end
date of the statement. But for Tryton the end balance must be the balance at
the end of the statement.

Closes #13982
2025-04-25 17:29:38 +02:00
Cédric Krier 8348ca4379 Increase minimal ECMAScript version to 8 2025-04-14 17:22:34 +02:00
Cédric Krier 8af876568f Do not deduce pending payments linked to a line from direct debit balance
The balance is calculated using the payment amount of the line which already
deduce the pending payment amount.
So such payment should not be deduced a second times from the balance.

Closes #13973
2025-04-14 12:00:58 +02:00
Cédric Krier e7fb100d8f Increase display size only once per more row
This ensures that the growing rate between display size and rows is the same.

Closes #13972
2025-04-14 09:52:31 +02:00
Cédric Krier 5b01323986 Coalesce boolean account type columns on negative clause
In SQL the negation of NULL is still NULL.

Closes #13967
2025-04-11 09:24:13 +02:00
Cédric Krier 5738a5fb46 Do not precede negative currency symbol in Italian 2025-04-10 09:10:12 +02:00
Cédric Krier c6b4b64482 Fix typo in the label and help of address format 2025-04-27 17:52:46 +02:00
Cédric Krier 296532218f Declare vals_to_set on the common block where it is used
e38f22986aac reuse vals_to_set later so linter may complain about it not being
defined.
2025-04-30 08:44:05 +02:00
Cédric Krier ae5b18eba0 Increase version number 2025-04-28 16:40:56 +02:00
Cédric Krier 91eb68f809 Add tag 7.6.0 2025-04-28 16:12:38 +02:00
Cédric Krier 04487b81d4 Prepare release 7.6.0 2025-04-28 16:12:25 +02:00
Cédric Krier 57b8d11d22 Always fill debit and credit of grouped account move line
The inherited MoveLineMixin is expecting those fields to be always filled.

Closes #13976
2025-04-18 12:30:59 +02:00
Cédric Krier 8c6eb00c2a Update incoterm scenario to use building name instead of name for warehouse address 2025-04-27 17:30:04 +02:00
Cédric Krier 87c3982ec2 Use full address to build Google Maps URL 2025-04-27 17:29:24 +02:00
Cédric Krier f11bb1bd42 Update UN/CEFACT CrossIndustryInvoice template to use structured address
Use unstructured street for Line and fill StreetName and BuildingNumber with
structured values.
2025-04-27 17:28:49 +02:00
Cédric Krier 12ce1f5c19 Update SEPA template to use structured address values
Use unstructured street as AdrLine and fill StrtNm and BldgNb with the
structured values.
2025-04-27 17:26:50 +02:00
Cédric Krier 2e1d79d050 Do not lock table on SQLite when checking unsupported constraint
It is not needed as SQLite does not have an explicit lock mechanism but such
call restart the transaction anyway.
2025-04-27 17:20:45 +02:00
Cédric Krier b85d6e9efa Update translations [skip ci] 2025-04-27 11:36:15 +02:00
Cédric Krier 1c794eae1b Use locale format in domain parser and search filter for numbers
Closes #13966
2025-04-07 23:43:31 +02:00
Cédric Krier 8b1c044274 Do not clear non unique help translation
The help translations may be composed of partitioned strings.

Closes #13978
2025-04-23 18:32:04 +02:00
Cédric Krier dedbd6df06 Reset to quotation Shopify sale with insufficient authorized payment amount
Shopify order can be modified from the admin in such way that the total
increase and it is only partially paid.
In such case we must prevent to process the sale by resetting to quotation
until being fully paid.

Closes #13961
2025-04-03 17:21:15 +02:00
Cédric Krier 2ed845b7e0 Compute digits of float value before applying factor
When applying the factor, we introduce new rounding issue which falsify the
computation of digits.
So it is better to compute the digits using the initial value (coming from the
string parsing) and update the digits based on the order of the factor.

Closes #13964
2025-04-04 18:51:30 +02:00
Cédric Krier 27e674fa36 Merge company into party name for Shopify address
Since a28904ce28d5 the address name has been replaced by building name.
It was a mistake to use the address name for the company name of Shopify
address.
So instead we merge the name and company of Shopify address into the party name
of the Tryton address.
2025-04-16 09:41:11 +02:00
Cédric Krier 3979c4b89a Cancel Shopify fulfillment when customer shipment is cancelled
Closes #13954
2025-04-02 13:16:08 +02:00
Cédric Krier 2972cbb7f1 Create Shopify fulfillment when customer shipment is shipped
Closes #13953
2025-04-02 13:15:36 +02:00
Cédric Krier 68067e9a5c Re-open Shopify order when the sale is no more done
Closes #13955
2025-04-02 13:14:40 +02:00
Cédric Krier 2aafc5626b Correctly clear all kinds of info bar messages
Closes #13951
2025-03-28 17:20:49 +01:00
Cédric Krier 3c0a1ea341 Force record message when selection has changed but not the current record
This is needed to update the toolbar label about the number of selected record.

Closes #13950
2025-03-28 17:14:12 +01:00
Cédric Krier e3ad7a6f2b Trigger record message even if current record has not changed
a2c50d4993cc disabled the trigger but it is needed to update the toolbar label
when the number of selected record is changed but not the current record.
2025-03-28 17:13:21 +01:00
Cédric Krier 1b50ab9624 Make lines of sales, subscriptions and purchases read only without a company and currency
Closes #13948
2025-03-27 23:07:41 +01:00
Cédric Krier 9b102df098 Forbid changing company of subscription if there are lines or invoice party set
Closes #13947
2025-03-27 23:03:40 +01:00
Cédric Krier efaccdb81b Allow to update production cost price updated of stock move in a closed period
The update of a production cost can happen when the input moves are in a closed
period.

Closes #13944
2025-03-26 23:58:06 +01:00
Cédric Krier e45be331a7 Lock records on transaction start
Same as c8771e45b861 but when locking only records instead of the table.

Closes #13943
2025-03-27 13:39:04 +01:00
Sergi Almacellas Abellana 637c4112dc Do not skip other invoices when printing an invoice that has a cache
Closes #13968
2025-04-17 00:04:15 +02:00
Nicolas Évrard 13345232ea Use hasOwnProperty to check for key presence in object 2025-04-15 18:38:45 +02:00
Nicolas Évrard 032f96cdca Do not set twice the result of an on_change call in a x2many
Closes #13971
2025-04-15 16:14:37 +02:00
Cédric Krier 27ff1ef14e Remove unused global variable in tryton plugins and rpc 2025-04-16 09:59:53 +02:00
Cédric Krier ac42d79df7 Document setup of Shopify variants 2025-03-09 10:30:46 +01:00
Cédric Krier a56834c421 Document that Modify Header wizards are recalculating lines 2025-03-10 13:46:00 +01:00
Cédric Krier 220fd433c9 Add checkout option to cookiecutter command line in tutorial 2025-03-25 09:30:22 +01:00
Cédric Krier 716b0b2ed6 Remove access right tests in scenario
The access rights are now only a configuration matter.
2025-03-30 15:22:07 +02:00
Cédric Krier 854562ad6e Add default value to user in set_user testing tool 2025-03-30 15:21:11 +02:00
Cédric Krier 86c60f700c Do not fill to_post_number with empty value in Sendcloud parcel 2025-04-15 21:27:51 +02:00
Cédric Krier 274f2a3941 Support structured address in shipping services 2025-01-25 13:21:21 +01:00
Cédric Krier 2e0ecbabf5 Add numbers property to address 2025-01-25 13:20:36 +01:00
Cédric Krier b2401ede71 Force update of address format 2025-01-25 01:14:12 +01:00
Cédric Krier 0d1da7c1b4 Add structured address 2025-01-25 13:21:34 +01:00
Cédric Krier 8043c1f6cd Fill secondary unit from product customer
Closes #2294
2025-04-14 18:19:25 +02:00
Maxime Richez 8129eb4bfc Fill secondary unit from product supplier
Closes #13933
2025-04-14 18:56:45 +02:00
Cédric Krier faca1dd187 Order bank account per owners
Closes #13937
2025-03-24 18:44:31 +01:00
Cédric Krier d68df1a8e6 Store payable bank account number on SEPA payment
This allows the user to select the bank account to use for the payment instead
of the first IBAN.
Also it stores the bank account that was selected by default on processing.

Closes #13938
2025-03-24 23:10:42 +01:00
Cédric Krier 2a85bd2a14 Remove test on the returned value from production _move method
The method always returns a stock move.
2025-03-27 00:26:53 +01:00
Cédric Krier 43dff0d4f6 Add method to prepare stock move from a BOM input or ouput
This allows customization of the stock move using data from the BOM.

Closes #13945
2025-03-27 00:25:18 +01:00
Cédric Krier 81134c70da Update window form buttons when record is modified
This synchronize the behavior of these buttons with the one from the One2Many
widget.

Closes #13949
2025-03-28 15:53:05 +01:00
Cédric Krier 3b253210ae Initialize position of One2Many widget to None/null 2025-03-28 15:51:55 +01:00
Cédric Krier 3a0892126d Set cursor on product field in opportunity line form
Since 9ec3b6ddc7ec the product is no more the first focusable field but it
stays the first useful to have the focus.

Closes #13908
2025-03-31 18:23:37 +02:00
Cédric Krier 1d68553044 Clear browser selection when selecting multiple rows
Closes #13952
2025-03-31 23:18:30 +02:00
Cédric Krier 130da3b56d Archive Shopify products removed instead of deleting them
Such that customization made from the admin interface are preserved if the
product is republished.

Closes #13962
2025-04-04 00:27:57 +02:00
Cédric Krier d169592a30 Do not update Shopify product with empty product description
Closes #13963
2025-04-04 00:37:39 +02:00
Cédric Krier fff5663ae1 Add DecimalNull as tools 2025-04-08 09:59:33 +02:00
Cédric Krier 88b9c02577 Prevent to revise multiple times the same asset with the same invoice line
Closes #13970
2025-04-11 13:24:16 +02:00
Cédric Krier b26b3538cf Always use flex display for #tabcontent except on small screen
On form view, this put the scrollbar for long form only on the form without the
preview.
On small screen the form is switch back to block so the panel-body with the
flex-direction column push the #tabcontent to expand more than the height of
the viewport.

With the content of the preview being always visible without scrollbar (except
for the screen), we can put the navigation at the bottom as natural place.
2025-04-12 12:42:54 +02:00
Nicolas Évrard cfc38c8070 Store column widths by screen size 2025-04-14 22:57:36 +02:00
Nicolas Évrard 8b6e83e5b2 Allow column widths to be reset 2025-04-14 23:16:26 +02:00
Nicolas Évrard 93ae0df5c3 Allow column resizing in Sao
Closes #13115
2025-04-14 23:11:48 +02:00
Nicolas Évrard 15b3e1f5cf Use the position:sticky on the row of the thead
It was previously put on the th because neither Firefox nor Chrome supported it
on thead or tr but it has been solved now.

https://caniuse.com/css-sticky
2024-12-12 10:50:15 +01:00
Nicolas Évrard 4f195c7ffe Add simple chat widget on sidebar of clients 2025-04-12 17:25:28 +02:00
Cédric Krier e5c35f988b Add chat 2025-04-12 16:54:16 +02:00
Nicolas Évrard a17172f6dd Toggle the option's selected state on mousedown in the filter window
This applies the changes from 3b0ae1dadfa0 to the filter window
2025-04-12 21:32:15 +02:00
Nicolas Évrard 83d280fede Display checkbox in multiselection in the filter window
This applies the changes from 97e82c27dc17 to the filter window
2025-04-12 21:30:56 +02:00
Nicolas Évrard 9babb76a0f Set sao's multiselection widget height according to its content 2025-03-05 18:13:37 +01:00
Nicolas Évrard baaf7784fa Ensure that update_selection is called if init_selection has failed
Closes #13960
2025-04-03 16:46:56 +02:00
Cédric Krier dc53b5fff1 Update npm dependencies 2025-04-12 21:11:11 +02:00
Cédric Krier f7b37fcf3b Display xxx2Many widgets when they become visible
When a tree is used in a xxx2Many widget then we can lazily request the content
of the tree by relying on the intersection observer that is already present at
the bottom of the table.
2025-04-10 19:09:38 +02:00
Nicolas Évrard 0e9cfb3e84 Do not refresh the pool when the notification comes from the same process 2024-12-18 17:08:26 +01:00
Nicolas Évrard 3cf1d64372 Use process-local data structure to store process related data 2025-01-08 23:20:32 +01:00
Nicolas Évrard 26f7c7142b Add process local objects ala threading.local 2025-02-14 17:16:55 +01:00
Nicolas Évrard c643794a85 Remove a useless call to Cache.refresh_pool
Since Pool.init is called with a non empty update, it will make a call to
Cache.refresh_pool at the end of its call to load_modules
2024-12-17 15:16:51 +01:00
Nicolas Évrard ac6e93b078 Reset the pool instances only on the pool initialization
In a scenario where cache_timeout is set to zero, concurrent updates to the
pool might result in an empty pool dictionary because the process making the
update lose its reference to the updated pool thus replacing it with an empty
dictionary on the following instantiation of Pool.

Closes #13763
2024-12-17 15:14:04 +01:00
Cédric Krier 7a9820e5af Change current record for the first selected only if there is no current record
#4028 added the behavior to apply the selected record also on form view the
first time.
But when switching to a calendar view from a form view, the tree states is
stored with the current record. If the calendar view is cleared (always with
sao via the search_filter), then the tree_states_done is cleared and on the
second switch to the form view the current record is override by record stored
in the tree states (from the first form switch).

Closes #13939
2025-03-26 20:07:54 +01:00
Nicolas Évrard cd5a54cb2f Delete warnings at the end of the Transaction
Closes #13686
2025-04-10 19:21:50 +02:00
Nicolas Évrard 68fb5e1fa7 Use high level API of res.user.warning in tests 2024-11-29 18:18:52 +01:00
Nicolas Évrard fb200e610d Add selection_change_with to Selection field's edition_depends
Closes #13959
2025-04-03 16:33:47 +02:00
Cédric Krier b426fe621c Restore asynchronous save but protected by a single promise
The write RPC must be done asynchronously in order to manage any concurrency
exception.
But the asynchronous RPC can only be done sequentially, so we ensure there can
be only one single pending promise.

Closes #13940
2025-03-25 13:49:53 +01:00
Cédric Krier e5f0688da7 Store target of field as relation
For Many2Many it replaces the relation model by the target which is what is
expected by usage in many places like the domain for email models.

Closes #13756
2025-03-24 23:32:36 +01:00
Cédric Krier 703223faf7 Do not set more than the fulfillable quantity in Shopify fulfillment
Closes #13956
2025-04-02 17:29:47 +02:00
Cédric Krier 2f701eb054 Do not fill mode and views for relation field without views
It is useless to send those attributes as they will not be used by the client.
2025-03-31 20:04:51 +02:00
Cédric Krier 6daed3eb95 Test if views attribute is empty using jQuery.isEmptyObject
The views attribute can be just an empty object when the xxx2Many field is
using a different widget like a multiselection.

Closes #13917
2025-03-31 20:01:42 +02:00
Cédric Krier a6c548b400 Check for new record only when saving an actual current record
49cbc9b99ed8 added the calculation of a new variable but before the test that a
current record is actually being saved.

Closes #13946
2025-03-28 16:04:21 +01:00
Cédric Krier 275248478a Ensure the contextual company is not None and positive before using it
Closes #13868
2025-03-10 23:43:49 +01:00
Cédric Krier 1e151a15a2 Remove support for Python 3.8 2025-04-06 12:11:03 +02:00
Cédric Krier 6d8b42c687 Add support for Python 3.13 2025-04-06 12:10:20 +02:00
Cédric Krier b2d84f32c2 Reset sale and shipment to draft before delete
Since 6c72b78d92d8 the documents are no more automatically cancelled prior
deletion.
2025-04-07 00:27:05 +02:00
Cédric Krier b7e5b7d865 Remove coupon name in Vue Storefront test
Since 5f9f977bfd12 there is no more a name field on coupon.
2025-04-07 00:25:13 +02:00
Cédric Krier 9ba7970f41 Check invoice state only for modified lines with an invoice
Since 6c72b78d92d8 the rewrite of the check did not skip invoice line without
invoice.
2025-04-07 00:23:44 +02:00
Cédric Krier 5041a85ef6 Update on_* field of trigger in tests
Since bc7e074fc4d9 the fields of trigger has been suffixed with an '_'.
2025-04-07 00:30:35 +02:00
Cédric Krier 39af772212 Do not override all written ids by ids from each argument in ModelSQL write
6f1447bdd702 makes ModelSQL.write retrieve the list of ids written from
_before_Write but they should be used as-is to call _after_write (and others).
2025-04-07 00:18:19 +02:00
Cédric Krier c5aadfb64a Clear currency on output move of production to lost and found 2025-04-05 19:43:09 +02:00
Cédric Krier 52dd42b587 Remove wrong classmethod decorator on compute_fields of timesheet line 2025-04-05 19:42:30 +02:00
Cédric Krier 5aeff66acd Use ModelStorage hooks instead of extending create/write/delete 2025-04-06 00:14:17 +02:00
Cédric Krier 45122b77c0 Add on_write to ModelStorage 2025-02-24 13:39:52 +01:00
Cédric Krier e9fe355663 Add on_delete to ModelStorage 2025-02-19 17:52:22 +01:00
Cédric Krier ae3cd83668 Rename "on_" columns of trigger 2025-02-20 09:29:52 +01:00
Cédric Krier 4b7b5a4739 Add check_modification to ModelStorage 2025-03-01 16:10:13 +01:00
Cédric Krier 72c96ec778 Add on_modification to ModelStorage 2025-02-19 23:01:52 +01:00
Cédric Krier defc4c46c5 Add preprocess_values to ModelStorage 2025-02-24 12:58:37 +01:00
Cédric Krier 121c279f47 Add before/after methods for CWRD methods of ModelStorage 2025-04-05 16:33:40 +02:00
Cédric Krier f94ae51649 Use compute fields for timesheet cost 2025-02-28 12:27:32 +01:00
Cédric Krier 15feef82d8 Use compute fields for places on stock move 2025-01-21 00:25:18 +01:00
Cédric Krier 12db02464b Use compute fields for format contact mechanism value 2025-01-17 17:24:50 +01:00
Cédric Krier 651144cf37 Use compute fields for IBAN number 2025-01-17 16:12:13 +01:00
Cédric Krier 5984c9aa5f Use compute fields for attendance date 2025-01-17 15:57:44 +01:00
Cédric Krier ea8b1e810f Use compute fields for intrastat type and value 2025-01-17 14:00:31 +01:00
Cédric Krier 6d8d307670 Use compute fields for internal quantities on stock move
Closes #13739
2025-01-15 22:10:07 +01:00
Cédric Krier 027384000b Add compute fields to ModelStorage 2025-01-15 21:37:11 +01:00
Cédric Krier 1772caec90 Clean migrations for series before 6.0 2025-01-04 00:19:42 +01:00
Nicolas Évrard cbdad75620 Remove old-style of super() calls 2025-04-04 00:45:18 +02:00
Nicolas Évrard 5781a49606 Call the actual super method of InteralShipmentReport
Closes #13892
2025-02-26 11:38:41 +01:00
Cédric Krier 18e4060d71 Do not check links to tfig.unece.org 2025-04-03 00:26:09 +02:00
Cédric Krier b4d984125b Permit party administrators to edit web users
Closes #13936
2025-03-24 13:12:43 +01:00
Cédric Krier ee10ced9e2 Allow to use phonenumberslite as dependency
phonenumberslite is a stripped version of phonenumbers which consume less
memory because it does not include geocoder, carrier and timezone packages
which are not used.
2025-02-03 14:00:41 +01:00
Cédric Krier a94ca05e3d Make phonenumbers dependency optional 2025-02-03 14:37:56 +01:00
Cédric Krier e9cd9d1163 Increase delay between transaction retries
Since c8771e45b861 the retry is no more a countdown but an increasing count, so
the sleep time must be adapted to also increase over retries.

Closes #13910
2025-03-07 21:54:11 +01:00
Nicolas Évrard 1e5fa01e63 Add launch_action helper function 2025-03-07 19:06:04 +01:00
Nicolas Évrard 1f414b20e5 Refactor _convert_action to use keyword-only arguments 2025-03-20 11:37:51 +01:00
Cédric Krier bee0a048f9 Add partial index on sale and purchase line for relate from product
Closes #13887
2025-02-25 10:05:43 +01:00
Cédric Krier 914373a6b4 Set unit price to purchase line from request in test scenario
Since ffe17ea235ab the unit price of purchase line is no more set to 0.
2025-03-30 14:45:32 +02:00
Cédric Krier c3cc1fdd80 Update test scenario to use "Accounting" in group names
The name of the groups have been updated in e5f6780b95b7.
2025-03-30 12:06:59 +02:00
Cédric Krier a5738aa475 Set supplier unit price for purchase request in test scenario
Since ffe17ea235ab the unit price of purchase line is no more set to 0.
2025-03-30 12:06:01 +02:00
Cédric Krier ae8c47d987 Use save current feature of Window Form when editing Many2Many record
This show the "Save" button instead of the "Apply changes" which is more
accurate.

Closes #13924
2025-03-15 15:52:40 +01:00
Cédric Krier 9557984b3f Set readonly Screen of One2Many when parent group is readonly
The user must not be allowed to modify records of a One2Many if the parent
record can not be saved.

Closes #13923
2025-03-15 15:47:29 +01:00
Cédric Krier 5bc3c53f6b Compare integrity error message with the constraint name prefixed by the table name
The TableHandler adds the table name as prefix to the constraint name so when
comparing with the integrity error message, it should also be added.
Especially if the constraint name is hashed by the TableHandler conversion
because the result is completely different.

Closes #13922
2025-03-15 13:31:57 +01:00
Cédric Krier cadc64f2ce Hide origin of incoming SEPA message
Closes #13920
2025-03-14 18:36:42 +01:00
Cédric Krier e1e597a4ea Allow SEPA messages to be downloaded at once
Closes #13919
2025-03-14 18:35:01 +01:00
Cédric Krier b66f41cdca Order lines in grouped line by descending id
This is to have the same order as the calculation of payable/receivable balance.
2025-03-13 18:34:04 +01:00
Cédric Krier 3b0b5f279e Filter out reconciled lines from debit/credit/secondary amount of account grouped line
It is needed to calculate the payable/receivable balance of grouped lines when
it is partially reconciled.

Closes #13918
2025-03-13 19:09:04 +01:00
Cédric Krier e5c727a12f Add payable/receivable date on move line group
Same as 7caa97a96b95 but for move line group.
2025-03-27 23:53:17 +01:00
Cédric Krier a276b07362 Make statement line number readonly when statement is not draft 2025-03-13 12:57:47 +01:00
Cédric Krier 73dfe9fc39 Reuse original readonly state of date of statement line 2025-03-13 12:57:31 +01:00
Cédric Krier f101ad8d05 Set party of statement line readonly when state is not draft
We must keep existing states when adding required states to party.

Closes #13916
2025-03-13 12:56:38 +01:00
Cédric Krier 0719694b36 Set grid template columns to 100% of dict container on XS screen
On XS screen, the dict container has only one column so it must take 100% of
the width instead of fit content of 50%.

Closes #13914
2025-03-10 13:00:29 +01:00
Cédric Krier 9489292259 Use .input-icon for date/time input button in Dict widget
The hidden input is not correctly aligned with the button of the
.input-group-btn.

Closes #13913
2025-03-10 12:54:56 +01:00
Maxime Richez b1bd50209a Add missing depends on rate and factor to calculate unit price from second unit of blanket line
Closes #13932
2025-03-21 10:50:23 +01:00
Cédric Krier 34686ae187 Do not include record with NULL field in nested negative clause on None
Since 87456218dcc9, record with NULL field is include in nested negative clause
but this should not applied if the operand is or contains None.

Closes #13911
2025-03-09 11:23:43 +01:00
Cédric Krier 13dec41635 Use "Accounting" in the group names
Closes #13907
2025-03-08 09:47:54 +01:00
Cédric Krier 9806aab7f2 Set default value for clean timeout of cache in config 2025-03-04 23:10:52 +01:00
Cédric Krier 881df99a24 Add configuration of select timeout for cache channels 2025-03-04 23:08:13 +01:00
Cédric Krier 723a820494 Query the database after each timeout of the listeners
This permit to keep the connection alive when the database is killing idle
connections.

Closes #13902
2025-03-04 23:00:16 +01:00
Adrià Tarroja Caubet b968ece9a7 Open CSV export file using with newline translation
The csv documentation [1] explains that file object used in writer should be
opened with newline as empty string.

[1] https://docs.python.org/3/library/csv.html

Closes #12115
2025-03-26 18:09:18 +01:00
Cédric Krier 453c79ff15 Store Shopify order ID as web ID 2025-02-27 00:18:07 +01:00
Cédric Krier 5d8a013676 Make web ID on sale unique per web shop
Closes #13891
2025-02-27 00:17:40 +01:00
Cédric Krier cfeb3685f4 Convert empty string to None for match value
It is not possible from the clients to force to store None value instead of
empty string.

Closes #13890
2025-02-26 23:51:39 +01:00
Sergi Almacellas Abellana 4288e9c6b0 Do not set the unit price of the purchased lines from the request to zero
Since 65be15fb7d8a its possible to set empty unit price

Closes #13886
2025-02-24 10:29:45 +01:00
Cédric Krier 0fd308172e Use strict sequence to number account moves
Closes #12603
2025-02-11 12:04:55 +01:00
Cédric Krier 24d89fad16 Add help selection to SII Tax Key 2025-01-26 13:55:58 +01:00
Cédric Krier 38f89a658a Enforce size of invoice XML values for SII service
Closes #13829
2025-03-08 09:54:46 +01:00
Maxime Richez 56956d40e1 Reuse of the secondary unit when crediting an invoice
Closes #13814
2025-01-22 12:32:23 +01:00
Cédric Krier 0059cd28cd Do not use instanceof on value of Date and DateTime of Dict field
Instead we must use the attributes isDate and isDateTime.

Closes #13845
2025-03-10 11:06:00 +01:00
Cédric Krier 8544521766 Raise UserError from the database exception
This adds the traceback of the original exception in the log.

Closes #13912
2025-03-09 16:07:58 +01:00
José Antonio Díaz Miralles 50d6a3a960 Use the same user form view structure in web users. 2025-02-17 22:07:06 +01:00
Cédric Krier 6f62110a6a Add place to inventory line
Closes #13878
2025-02-17 16:31:40 +01:00
Cédric Krier 64788a2e0c Merge list views of inventory line
Since 0b7f2304e207 there is no point to have two list views as the location and
date are in the record name of inventory.
2025-02-17 16:30:58 +01:00
Cédric Krier 29d5fe7316 Simplify the updating of inventory lines for complete
Line instances make it easier and simpler to extend.
2025-02-17 16:11:20 +01:00
Cédric Krier 262a8b894b Add payable/receivable date
The date is the maturity date and if it is empty, fallback to the effective
date.
This gives a better chronology of the lines.
2025-02-14 10:43:15 +01:00
Cédric Krier 93b3d27117 Replace account move number by post number
Closes #13864
2025-02-11 12:50:48 +01:00
Cédric Krier 9bd8739978 Remove no more needed context on invoice actions
Since the domain inversion and 74cad8cf1dbe, it is no more needed to use the
context to set invoice type.
2025-02-11 15:27:00 +01:00
Cédric Krier 1bd33cd0d1 Add common payment terms
Closes #13863
2025-02-10 01:33:51 +01:00
Cédric Krier c3835baa18 Display optional company on payment and group list 2025-02-09 19:38:59 +01:00
Cédric Krier 8fc5d631b9 Add quotation expiration date to purchase 2025-02-07 16:25:03 +01:00
Cédric Krier ae2609bec6 Manage expiration of sale quotation
Closes #11166
2025-02-07 16:24:12 +01:00
Cédric Krier ebd5a5f414 Set a positive number of col in sale amount group
With a negative number of col, tryton does not respect the new line and put all
the element on a single horizontal group.
2025-02-07 16:20:59 +01:00
Cédric Krier 0770f3cf88 Do not fill right aligned label 2025-02-07 16:19:13 +01:00
Julio Alberto Bravo Montanos 22f151fbdc Make product attribute name unique
The name of the attributes are the keys of the attributes Dict field of product
so they must be uniquely identified at least per sets.
But as an attribute can be reused on different sets, the unique constraint must
be set on the name.

Closes #13574
2025-03-16 23:30:23 +01:00
Cédric Krier 99603fd047 Remove usage of GenericTreeModel
Replace on_* method by PyGObject equivalent do_* and use a WeakValueDictionary
to keep the couple id, record used as user-data value on TreeIter.

Closes #13855
2025-02-01 16:32:35 +01:00
Cédric Krier 643006e859 Require PyGObject before 3.51
The GenericTreeModel from pygtkcompat has been removed.

#13855
2025-02-01 16:29:52 +01:00
Cédric Krier 424328610a Add tax identifiers to company 2025-01-30 19:10:23 +01:00
Cédric Krier 993c6dbf26 Make deposit optional on party list
Like the receivable and payable today fields.
2025-01-29 18:49:32 +01:00
Cédric Krier 55bd6d327e Remove or convert company domain into context domain
Closes #10506
2025-01-21 13:39:30 +01:00
Cédric Krier 125d413b69 Make company of statement readonly once there is a line
The content of the lines depends on the company of the statement, so the user
should not change it once he started to fill the lines.
2025-01-20 20:01:05 +01:00
Cédric Krier f66aae4d0b Use statement date to compute the start balance
Closes #13827
2025-01-20 19:59:12 +01:00
Cédric Krier 4520ef1527 Scroll to the first selected element in tree view
Closes #13344
2025-01-16 16:42:49 +01:00
Cédric Krier c4b405cef5 Easy extending pattern for sender address of Sendcloud 2025-01-15 00:58:21 +01:00
Cédric Krier 203a5f3a34 Add color as type of icon and image
Closes #13808
2025-01-09 18:52:36 +01:00
Cédric Krier ff6f920521 Return an empty gif as image URL without data
<img> must always have a src attribute so using an empty image is more
compliant with the standards.
2025-01-09 18:41:45 +01:00
Cédric Krier 093fb115ff Add color widget to form view
Closes #13800
2025-01-08 16:53:34 +01:00
Cédric Krier e119120af3 Deactivate open button of One2Many widget if there is no form view
Closes #13797
2025-01-06 17:39:48 +01:00
Cédric Krier 27d87ade18 Make analytic entry read only using origin state
Closes #11294
2025-01-06 12:21:27 +01:00
Cédric Krier 4f5c54dd40 Return series instead of version for remote call
This provides only the required information about the server.
2025-01-03 19:01:08 +01:00
Cédric Krier 1edefbeae5 Limit access to database from the same series as the server
The last series to which the database was updated is stored in
ir.configuration.
With this information, the list of databases is filtered for the same series.
Remote access to a database is restricted to databases available in the list.

Closes #13791
2025-01-06 15:54:02 +01:00
Nicolas Évrard 1168597b27 Handle errors when processing wizard steps
Closes #13906
2025-02-13 18:35:32 +01:00
Cédric Krier fadff449e8 Order incoming documents by descending ID
It is more natural to have the latest documents on top.
2025-01-03 15:15:57 +01:00
Cédric Krier d73ab8efa0 Use guilabel to document Shopify access scopes 2025-02-25 18:37:03 +01:00
Cédric Krier e8be3d21cd Add required read access to Shopify locations 2025-02-25 17:50:21 +01:00
Cédric Krier a016a41a1c Update documentation to labels used by Shopify 2025-02-25 16:59:06 +01:00
Cédric Krier 746448361f Order alphabetically Admin API access scopes in documentation
This follow the order in the Shopify settings.
2025-02-25 16:27:39 +01:00
Cédric Krier 0ec6e5b7cf Add example of payment term with multiple delta in documentation 2025-02-10 01:40:37 +01:00
Cédric Krier 67d2e13083 Add promotion coupon as action for sale complaint
Closes #13790
2025-01-02 17:16:41 +01:00
Cédric Krier 7a7d744c37 Use actual quantity of sale line when executing sale complaint
Closes #13783
2024-12-31 15:24:10 +01:00
Cédric Krier 9313409e82 Display quantity when searching lot for stock move
Closes #13782
2024-12-26 17:45:26 +01:00
Cédric Krier efba57bf65 Display quantity when searching location for stock move
Closes #13781
2024-12-26 17:33:51 +01:00
Cédric Krier 530471d9a8 Display quantity when searching product for stock move
Closes #13780
2024-12-26 17:29:21 +01:00
Cédric Krier 82cf417ae1 Add pack step to test scenario using internal shipment
fee9e4e8c864 added this new step.
2025-03-09 17:31:00 +01:00
Cédric Krier 0494e21706 Add relate to open products from sale
Closes #13773
2024-12-23 18:11:40 +01:00
Cédric Krier 467baaafec Use warning format for no carrier warning on shipping 2024-12-22 18:23:09 +01:00
Cédric Krier 5b1d989be1 Add shipping to internal shipment with transit 2024-12-22 18:22:36 +01:00
Cédric Krier 768fc5c1a8 Rely on ShippingMixin to implement shipping service 2024-12-22 18:21:03 +01:00
Cédric Krier e7f94ab26a Add package to internal shipment with transit 2024-12-22 18:14:11 +01:00
Cédric Krier 3283851774 Add packed state to internal shipment
Closes #9750
2024-12-22 18:23:21 +01:00
Adrià Tarroja Caubet 6d2cfee131 Include version number on new version available message
Closes #13640
2025-03-09 11:42:59 +01:00
Cédric Krier e0260c74aa Notify for duplicate contact mechanism
Closes #13750
2024-12-12 17:44:35 +01:00
Cédric Krier 73d210c362 Add menu entry for promotion coupon numbers
The creation of coupon is disable on the form because creating a coupon may
change the criteria to apply a promotion without the user notices it.

Closes #13736
2024-12-05 21:05:50 +01:00
Cédric Krier 8c3345db17 Display coupons as form on promotion
Closes #13738
2024-12-05 20:27:29 +01:00
Cédric Krier c7acd24333 Remove name on sale promotion coupon
Closes #13737
2024-12-05 19:34:39 +01:00
Cédric Krier 184536c72a Remove usage of getattr to access state view fields of wizard 2024-11-20 10:35:06 +01:00
Cédric Krier 8b8c65da84 Fill wizard state view instance with default value
Closes #13693
2024-11-20 10:34:13 +01:00
Cédric Krier ecaf2bc391 Setup explicitly the accounts, parties and currencies of reconciliation wizard
It is better to not rely on missing the field on the state view but to have an
explicit transition to setup the values.
2024-11-20 10:32:24 +01:00
Cédric Krier 744d04bde1 Require incoterm on sale for EU countries if intratstat is extended 2025-02-26 11:31:08 +01:00
Cédric Krier 94094ddb82 Do not require incoterm between European countries
Closes #13682
2024-11-14 12:27:50 +01:00
Cédric Krier 94728b284b Test if company if filled before computing incoterm required
Closes #13889
2025-02-26 23:23:26 +01:00
Cédric Krier 4cf6d46df1 Add optional company to the SEPA mandate list 2025-02-19 23:29:24 +01:00
Cédric Krier 2b55b49a62 Include account move lines without maturity date in direct debit
Closes #13883
2025-02-20 23:48:54 +01:00
Cédric Krier ec1c42552a Test SEPA mandate sequence of the company of the mandate instead of the context
Closes #13882
2025-02-19 23:37:00 +01:00
Cédric Krier bfe78f818a Do not keep product replaced when copying
Closes #13880
2025-02-18 15:55:44 +01:00
Cédric Krier 48a3241dac Search on code of replacing products when searching on record name
Closes #13879
2025-02-18 15:47:04 +01:00
Cédric Krier afb2ba6b50 Convert total weight of package into kilogram for DPD shipping
Closes #13876
2025-02-15 22:32:04 +01:00
Cédric Krier 57025ef193 Use contact instead of name2 for party name in DPD shipping
Closes #13875
2025-02-15 22:29:07 +01:00
Cédric Krier 6c67d2958c Invert sign of budget amount
As budget is based on income statement, the amount must be credit - debit.

Closes #13764
2025-02-10 13:08:22 +01:00
Cédric Krier efdda3a111 Restore assignation of string and integer value for Date, DateTime, Time and Timedelta fields
Closes #13873
2025-02-15 01:38:51 +01:00
Cédric Krier 164aabda58 Prevent to delete shipment costs if they are not cancelled or draft 2025-03-05 11:30:47 +01:00
Maxime Richez f5f786b972 Prevent to delete landed costs if they are not cancelled or draft
Closes #13893
2025-03-05 11:23:40 +01:00
Cédric Krier 73f6b2c6ca Do not check links to unece.org
Cloudflare blocks the check requests.
2025-03-05 00:19:21 +01:00
Udo Spallek b245323c30 Fix typo in alt text of documentation logo
Closes #13895
2025-02-28 00:49:48 +01:00
Cédric Krier 8653689b22 Do not fetch Shopify locations without session parameters
Closes #13888
2025-02-25 16:19:53 +01:00
Cédric Krier ba23d579e2 Prevent delete record if screen is not deletable
Closes #13885
2025-02-22 23:56:54 +01:00
Cédric Krier e395782ec3 Prevent saving record for readonly screen
Closes #13885
2025-02-22 23:55:57 +01:00
Cédric Krier 114c7d8fa6 Do not fail to limit city size for UPS shipping when it is empty
Closes #13874
2025-02-15 18:11:00 +01:00
Cédric Krier d78d99cb94 Prohibit calling convert_order on Function field
Closes #13872
2025-02-15 01:15:07 +01:00
Cédric Krier 5b39e5aad4 Fix typo in size_limits of ModelStorage.write
fd45274f2455 use a set as size_limits but it must be a dictionary.
2025-02-26 00:56:24 +01:00
Cédric Krier 58a8663a8b Remove fallback password hash checks
The fallback was added by cc5aba3b12c7 for password hash stored before 5.0.
2024-12-01 14:31:18 +01:00
Cédric Krier cac922b6ca Replace passlib by pwdlib
Closes #12936
2024-12-01 14:25:26 +01:00
Cédric Krier 9cb5d6d83a Raise HTTP exception when RPC convert request argument 2024-11-28 10:23:37 +01:00
Cédric Krier 611198f9f1 Add size limit for RPC arguments
Closes #10301
2024-11-28 09:31:43 +01:00
Cédric Krier 65d3f86149 Store the ignore search limit option of export
Closes #13601
2024-12-12 23:16:41 +01:00
Maxime Richez 76cdf889a2 Test actual quantity against None for processed quantity in Blanket Agreement
Closes #13865
2025-02-11 13:32:57 +01:00
Cédric Krier 96de1ae302 Make save call synchronous
This avoid to trigger multiple save in parallel which may raise a concurrency
exception.

Closes #13848
2025-01-30 10:12:49 +01:00
Adrià Tarroja Caubet d7ccb1b604 Strip accents for company name on report AEAT303
Closes #13858
2025-02-03 11:35:14 +01:00
Cédric Krier 2efc39346c Do not try to delete XML data without id
If the record has already been cleaned, there is no need to try to delete again.
2025-02-10 01:39:24 +01:00
Cédric Krier 11bac062f7 Update gettext.js dependency to version 2 2025-01-13 19:05:35 +01:00
Cédric Krier c91542adfb Do not retrieve current transaction to fetch model attribute
It is the transaction stored on the instance that must be used and which is set
by the context manager.
2025-01-21 18:43:23 +01:00
Cédric Krier 8072751d7f Do not load validated fields
If the field is not loaded, there is no need to validate it.
2024-12-28 18:50:04 +01:00
Cédric Krier 2be18d249e Do not validate record on reload
sao does not validate so tryton should not need neither.
2024-12-28 18:28:01 +01:00
Cédric Krier 8da6e82a15 Fix checkbox and radio alignment
By restoring from the original Bootswatch theme and correctly construct the
checkbox class from Bootstrap.

Closes #13643
2025-02-08 21:14:00 +01:00
Cédric Krier 237f9b754a Use proper default type for Eval in domain of Spanish tax reporting 2025-02-03 14:49:45 +01:00
Cédric Krier f773bc17d0 Display metric option to UPS credential form
Closes #13856
2025-02-03 01:02:20 +01:00
Cédric Krier b50c4e1e50 Remove deactivable from carrier selection
Closes #13854
2025-02-01 02:03:24 +01:00
Maxime Richez a2140b86a2 Consider packages as closed also when shipment state is shipped
Since 11be7a89b81d customer shipments have a shipped state.

Closes #13850
2025-02-16 01:19:46 +01:00
Cédric Krier 18bae90225 Update the URL when creating new record
When record saved is new, the URL must be updated just like if the view was
switched.

Closes #13849
2025-01-30 12:25:14 +01:00
Cédric Krier 7a4182ad6a Do not fail to translate model field that does not exist 2025-01-29 23:23:22 +01:00
Cédric Krier a878b8055d Improve form view of model field 2025-01-29 23:22:18 +01:00
Cédric Krier 8915b6f61e Set access as readonly on model field when module is set 2025-01-29 23:20:40 +01:00
Cédric Krier 715a1a0b32 Set readonly states for foreign many2one on model field based on module
Closes #13565
2025-01-29 23:20:07 +01:00
Cédric Krier 60cd69732f Try to reconcile only valid account move line
Closes #13847
2025-01-29 18:20:46 +01:00
Cédric Krier d6764027f1 Do not validate empty email in trytond-admin command
Closes #13837
2025-01-26 00:47:27 +01:00
Cédric Krier 8770a0183f Render one AdrLine per street line in SEPA messages
Closes #13834
2025-01-25 01:00:09 +01:00
Cédric Krier a3e5faac0c Add company and warehouse to supplier return form
Closes #13857
2025-02-03 01:05:24 +01:00
Cédric Krier 1a9213b51c Make text and richtext fill vertically
Closes #13835
2025-01-25 01:10:41 +01:00
Cédric Krier 9bf2d8e919 Use current account at the clearing date for clearing move of payment
Closes #13826
2025-01-20 17:26:52 +01:00
Cédric Krier 349f5328d3 Use payable or receivable account as fallback to create clearing move of payment
A payment, made on a journal with clearing setup, must always create a clearing
move even if no account or line are set.

Closes #13825
2025-01-20 17:25:25 +01:00
Cédric Krier 743f622a31 Link invoice lines and stock moves for different quantity sign if invoice method is not shipment
Closes #13821
2025-01-16 17:38:14 +01:00
Cédric Krier 8027e3842f Use saved tree state to restore selected record on form view
Closes #13822
2025-01-16 16:10:10 +01:00
Cédric Krier 827984a839 Store on the screen only the tree states of the current view
Otherwise it is only the tree states of the last view that is restored.

Closes #13822
2025-01-16 16:07:36 +01:00
Cédric Krier 2ccd9dec09 Include translation fuzzy in cache key of translated message
Closes #13805
2025-01-12 01:47:50 +01:00
Cédric Krier 7ba10bb365 Remove min-width for input of type file of Binary widget
The input file must stay inside the button.

Closes #13810
2025-01-09 22:54:41 +01:00
Cédric Krier 0c2c60ad9a Use boolean value when toggling input select of binary widget
jQuery requires a boolean type to toggle display.

Closes #13809
2025-01-09 22:50:26 +01:00
Cédric Krier 709bebe701 Use base URL as logo link and include homepage in TOC
This way the navigation in the documentation is unified.
2025-02-09 15:19:19 +01:00
Cédric Krier c2e8d187d1 Do not fail to clean when help selection is None
Closes #13862
2025-02-09 19:51:04 +01:00
Cédric Krier 504f3013cc Disable counting in super search call of ResourceAccessMixin only when enforcing access
The search method must always return an integer when count is True.

Closes #13846
2025-01-29 11:45:42 +01:00
Cédric Krier 2337e61b71 Skip empty filename as configuration file 2025-02-08 14:35:59 +01:00
Hartmut Goebel d009490e4e Make empty environment variable TRYTOND_LOGGING_LEVEL be treated as unset 2025-02-08 14:40:10 +01:00
Hartmut Goebel 76e335d894 Make empty environment variable TRYTOND_TZ be treated as unset 2024-01-20 22:51:08 +01:00
Hartmut Goebel 5a7f24617c Make empty environment variable TRYTOND_DATABASE_URI be treated as unset 2024-01-20 22:27:07 +01:00
Hartmut Goebel 6073e22d5c Make empty environment variable DB_NAME treated as unset
Closes #12364
2025-02-08 14:08:23 +01:00
Cédric Krier af67ddf8b9 Add stock measurements on internal shipment 2024-12-20 20:19:21 +01:00
Cédric Krier 2398473cae Ease customization of column and value for MeasurementsMixin 2024-12-20 17:57:17 +01:00
Cédric Krier 54c124cec8 Store internal transit location when internal shipment is set to wait
This supports changing the configuration of the transit location over time
without breaking existing shipments.
2025-02-08 12:45:40 +01:00
Dimitrios Josef Moustos d1a846fa10 Correctly document matching type for semicolon in search widget 2025-01-14 14:16:55 +02:00
Cédric Krier 795538a2d9 Use .user-select() helper from bootstrap 2025-02-08 01:18:49 +01:00
Hodei Navarro c8c3357669 Allow selection of sum row in tree view
Closes #11633
2025-02-08 01:18:01 +01:00
Julio Alberto Bravo Montanos e0fbe38914 Set contact mechanism select before email template subject
Closes #13812
2025-02-08 00:51:29 +01:00
Cédric Krier de98f63e59 Explicit how the configured sequence is used to fill the SEPA mandate identification 2025-01-08 17:45:21 +01:00
Cédric Krier 195d4d1097 Remove unnecessary metaclass in new model of product attribute module 2024-12-22 23:32:14 +01:00
Cédric Krier 7ffc7ebd99 Update documentation of product attribute 2024-12-22 23:31:44 +01:00
Cédric Krier c11e544273 Update method names called by key-press on binary widget
Since 87806105f07d the corresponding methods have been renamed in BinaryMixin.

Closes #13844
2025-01-29 10:42:47 +01:00
Cédric Krier b65377e89e Read only the image from the selected cache
Using the instance from the list of cache, the ORM read the image for all the
linked cache which is unnecessary.

Closes #13831
2025-01-21 18:35:56 +01:00
Cédric Krier c8f4d13745 Test if shipment is an instance of MeasurementsMixin
Closes #13842
2025-01-29 09:05:11 +01:00
Cédric Krier 56768c7ecc Create translation entries for help selection values
Closes #13840
2025-01-26 17:06:46 +01:00
Cédric Krier 4713207f14 Always define translation source name
The source name may be used to translate the help selection.

Closes #13839
2025-01-26 17:01:20 +01:00
Cédric Krier 8763c2fb69 Use LTS version of node for CI
Closes #13404
2024-07-19 13:17:08 +02:00
Dimitrios Josef Moustos ed0264af94 Distinct between users and database user in setup database documentation
Closes #13503
2025-02-02 12:10:09 +01:00
Cédric Krier a99a4ffff1 Fix readonly states in extend topic of module tutorial
The active field has no existing readonly states before the extension.
2025-02-02 10:10:32 +01:00
Hartmut Goebel 0dadb2a7d1 Fix typos and improve wording in modules topic documentation 2025-02-02 02:12:48 +01:00
Cédric Krier 1a2adb337a Fix typo in message ID for invalid address format
Closes #13836
2025-01-25 01:17:11 +01:00
Sergi Almacellas Abellana 5d9f370ad1 Explain how to extend field definition in tutorial 2025-02-01 23:42:51 +01:00
Julio Alberto Bravo Montanos 417428c2c6 Limit account types used for analytic distribution
Closes #13106
2025-02-01 23:00:19 +01:00
David Harper 913c59e58d Add help to selections of location type 2025-01-31 00:42:55 +01:00
Adrià Tarroja Caubet d98f5d0497 Add help text for subscription recurrence rule exclusive field
Closes #13480
2025-01-30 12:29:31 +01:00
Cédric Krier da04050cc3 Update documentation of product classification 2024-12-23 23:15:34 +01:00
Cédric Krier 598da387e2 Use generic sidebar to display attachment preview 2024-12-19 16:54:41 +01:00
Cédric Krier 93458b672e Do not convert empty origin to string to check against sale opportunity value
c5291471fd83 added a comparison with the value but it fails for None value.

Closes #13832
2025-01-26 17:14:58 +01:00
Cédric Krier a362054bbf Remove "User" suffix from fallback recipients of email notification 2025-01-26 11:52:37 +01:00
Maxime Richez def1dff17b Allow setting fallback user without corresponding field to email notification
Closes #13705
2025-01-26 11:50:48 +01:00
Cédric Krier aa5c02880b Move active filter for bank accounts of party to use "used"-field
Closes #13803
2025-01-09 15:28:40 +01:00
Cédric Krier 4852175b27 Close the SQLite connection to memory database when the database has been dropped
Instead of relying on the garbage collector to close the connection by deleting
the object, this ensures that the memory database is actually dropped before a
new connection is instantiated and keep the database.

Closes #13796
2025-01-16 09:47:25 +01:00
Cédric Krier 8da34d06d6 Create target SQLite database before copying when restoring SQLite database
Closes #13795
2025-01-05 16:15:17 +01:00
Cédric Krier ec6f30318b Remove shared memory and write-ahead log files when dropping SQLite database
Since 6837a618f53d SQLite may create such temporary files.

Closes #13794
2025-01-05 16:12:14 +01:00
Cédric Krier d4493f0a53 Ignore operational error when optimize SQLite database on connection
The 'PRAGMA optimize' command can not run on a locked database which may happen
when a nested transaction is started.

Closes #13793
2025-01-05 16:07:54 +01:00
Cédric Krier b5148a248c Allow running field binary tests with a non memory SQLite database
By setting the filestore path as a global variable, we can modify it for the
test without changing the database path where the SQLite databases are stored.

Closes #13792
2025-01-05 16:02:39 +01:00
Cédric Krier 5d062fb1b4 Use company from the record when copying budget
Since ba6b8ce0e692 only the fields displayed on the form state are set but the
copy wizard for analytic budget does not have any field depending on the
company so no default value is set for company.
Indeed we should not rely on the state view to retrieve the currency from the company.

Closes #13824
2025-01-17 00:03:03 +01:00
Cédric Krier 6fb00e2bed Test context on target instance of One2One 2025-01-14 01:19:50 +01:00
Cédric Krier 5f3e83f66f Instantiate One2One target when the context of the field
Closes #13819
2025-01-14 01:19:00 +01:00
Cédric Krier 7aeee5f06e Test setting value to xxx2One fields 2025-01-14 01:08:05 +01:00
Cédric Krier f908ccc85a Expand dictionary value set to a One2One field
Closes #13818
2025-01-14 01:07:33 +01:00
Cédric Krier 590102e87e Remove python type inherited from Many2Many of One2One
The python type is used to test the type of value set but for One2One it is an
instance which can not be tested with a simple Python type.

Closes #13817
2025-01-14 01:04:46 +01:00
Cédric Krier 32914eff90 Move fields from specific payment method in separate page 2024-12-12 14:05:20 +01:00
Cédric Krier d880f7c32a Do not search without accent number and reference of payments 2024-12-12 13:42:24 +01:00
Cédric Krier 8636a2b771 Add payment reference in record name of payment 2024-12-12 13:41:51 +01:00
Cédric Krier 14f5953c60 Rename payment description into reference
Closes #13748
2025-01-22 10:05:33 +01:00
Cédric Krier ac65439fab Ease extending account move and line from receivable rules
Closes #13741
2024-12-09 12:02:51 +01:00
Cédric Krier 15440fa44d Add same bottom padding on panel body as top padding
When the form does not expand vertically, the last row is very close to the
border of the panel which is odd.
2024-12-12 14:09:12 +01:00
Cédric Krier 6f049b695b Set company in the context of clearing journal
Closes #13591
2024-10-10 17:00:14 +02:00
Cédric Krier 492fb7731b Switch to searchable view when trigger search menu
Closes #12743
2024-12-31 01:15:42 +01:00
Adrià Tarroja Caubet 9a26aa923b Test SEPA mandate sequence type by ordered date 2025-01-18 12:50:22 +01:00
Cédric Krier b0fa1dd28e Sort SEPA payments by date
In order to compute the proper sequence type, the payments must be ordered by
ascending date in case there are many payments for a first used mandate.

Closes #12614
2025-01-18 12:57:41 +01:00
Adrià Tarroja Caubet 7063c9db31 Order payments in payment group by date
It is the most expected order for the processing methods.
2024-12-16 13:03:04 +01:00
Adrià Tarroja Caubet b7ee7a4acd Use start and end periods for AEAT reporting 2025-01-18 11:39:42 +01:00
Adrià Tarroja Caubet cd060fc20c Sort periods in AEAT 303 report
Closes #13707
2024-11-28 11:25:55 +01:00
Cédric Krier 58b10f68df Sanitize attachment filename for incoming document from email
When creating document incoming from email's attachments, the filename value
must be sanitized as there is no control on the data.

Closes #13801
2025-01-08 17:35:27 +01:00
Cédric Krier d25d05bb4b Propagate record modified to parent screens
It is needed to reach the top window and update the button sensitivity.

Closes #13798
2025-01-06 18:22:29 +01:00
Cédric Krier f42f4eba6e Add super call to setUpClass in custom test case
This is needed to catch the Python warnings.
2025-01-03 23:51:00 +01:00
Cédric Krier 4ff7ca6d6e Use None as default value for module of view
Since 53fc70c2139f the module column of ir_ui_view has a foreign key constraint
on ir_module table so the default value must be NULL to ignore the constraint
when there is no module.

Closes #13816
2025-01-13 19:28:18 +01:00
Cédric Krier 1f0b754785 Fill production moves with all default values
When used for on_change, we need to fill all the default values as the client
does create new record with default values.

Closes #12575
2024-12-26 16:12:10 +01:00
Cédric Krier 77bb47a3a4 Make field_names optional in Model.default_get 2024-12-26 16:08:18 +01:00
Cédric Krier eda1f8e7de Merge tax line with the same key but computed separately
Closes #13777
2024-12-24 14:54:47 +01:00
Cédric Krier bb6fe95a15 Do not run concurrently tests for french chorus account module 2024-12-30 19:08:14 +01:00
Cédric Krier 6d3103e95d Display attachment preview only on top of form view for small screen
Closes #13762
2024-12-18 17:42:45 +01:00
Cédric Krier eb6c40f135 Do not sum purchase line without amount to calculate purchase amounts
04e9bc5b56f3 removed the test against empty amount with the line test.

Closes #13784
2025-01-03 11:02:29 +01:00
Cédric Krier e656cccb7f Replace loading attribute by visible for loading xxx2Many fields with dotted notation
Override the loading attribute breaks the dependencies between fields.
Such xxx2Many becoming eager loading may miss some lazy loading fields which
may break the behavior like the domain inversion (which may set the wrong
value).

Closes #13452
2024-12-28 18:24:51 +01:00
Cédric Krier e6c82f7fc0 Correctly attribute migration steps to 6.0 series instead of 6.2 2025-01-03 14:40:08 +01:00
Cédric Krier 1b98cc52b3 Require invoice with posted move for SII
The construction of the payload relies on the invoice having an account move
posted.
2025-01-09 10:52:50 +01:00
Cédric Krier 39d47512f6 Explain why using taxes from account move lines for SII 2025-01-09 10:50:22 +01:00
Sergi Almacellas Abellana b1f8cb08b3 Use move post date as SII accounting date
Closes #13680
2025-01-07 17:34:43 +01:00
Cédric Krier ae00270ee7 Do not prevent to rewrite the same opportunity origin on sale
Closes #12517
2024-12-23 18:47:48 +01:00
Cédric Krier d1ce25bd4f Limit the worker retry delay to maximum 1 hour
Closes #13779
2024-12-26 12:47:08 +01:00
Cédric Krier 801a06970b Use proper default value for Eval on account move 2024-12-26 18:55:47 +01:00
Cédric Krier cae324ce6d Do not use empty contextual date to calculate active of party relation
Closes #13733
2024-12-26 18:54:46 +01:00
Cédric Krier 6ecd73b529 Update default_get signature to add with_default parameter
ba6b8ce0e692 extended the signature but some modules must be updated to follow
the new signature.
2024-12-26 16:16:48 +01:00
Cédric Krier 5ca8a1edf2 Restore raising KeyError when file system ID is not found
75936f10ee95 removed this behavior but some modules relies on it.
2025-01-01 20:51:44 +01:00
Cédric Krier f45f4ec348 Use company id to set context to compute today
Closes #13789
2025-01-01 20:05:24 +01:00
Cédric Krier 643dc186cd Get context from default config to get chart ID to create
49ca1e40161c replace the .find call by get_id which requires a context.
2025-01-01 19:59:35 +01:00
Cédric Krier 10c5392bea Use predefine testing payment method instead of creating one
Calling stripe.PaymentMethod.create is deprecated.
2025-01-01 19:52:58 +01:00
Cédric Krier c928c61f0e Do not initialize ir_ui_view table with model NOT NULL
Closes #13788
2025-01-01 19:15:38 +01:00
Cédric Krier 7917793f94 Search waiting marketing automation record activities using record ID
There is no custom search_rec_name for record, so all the records are valid.

Closes #13787
2025-01-01 19:07:43 +01:00
Cédric Krier a9e620a44d Save purchase request quotation before lines
This avoid warning about unsaved relation record.
2025-01-01 18:56:12 +01:00
Cédric Krier 910c61cb38 Update name of cost sale of shipments in copied default values
In 79512f8cfed1 the field has been renamed.

Closes #13786
2025-01-01 18:25:57 +01:00
Cédric Krier 62deec1671 Do not copy asset lot when copying sale subscription line
Closes #13785
2025-01-01 17:44:16 +01:00
Cédric Krier d26611be91 Add process method for Shopify payment method
Since 55db7836e132 the payment does not need to be grouped but a process method
must be implemented.
2025-01-01 17:40:41 +01:00
Cédric Krier 81669a33c9 Use proper BOOLEAN type in init SQL of SQLite 2025-01-01 17:39:20 +01:00
Cédric Krier 7f56ab27a7 Remove unused docstring
Since 23ce421d3bb9 the docstring's are no more used as string for the model.
2025-01-01 18:20:47 +01:00
Cédric Krier debaff1cd8 Create translation entry for model without docstring
Since 23ce421d3bb9 it is the __doc__ attribute that is used as string for the
module.
2025-01-01 18:10:12 +01:00
Cédric Krier f20c36e2a6 Test actually the translation when writing on model and field 2025-01-01 16:25:37 +01:00
Cédric Krier 2c97c87ce2 Create translation of model and field using the proper name 2025-01-01 16:24:55 +01:00
Cédric Krier 1f66be2076 Register model string translation as string field of ir.model 2025-01-01 16:22:25 +01:00
Cédric Krier ab19901d85 Fallback to plural message when index is greater than 0 2025-01-01 16:20:28 +01:00
Cédric Krier 592240fdb3 Always export the first plurals string and only consecutive plurals
To have a valid pofile we need to have all the plural form from index 0.
2025-01-01 11:50:13 +01:00
Cédric Krier fb714566f2 Add generic test for the default value of ModelStorage.copy 2024-12-03 19:06:33 +01:00
Cédric Krier 8ab7c421f2 Test that on_change_with getter use the name of the Function field 2024-12-16 18:18:48 +01:00
Cédric Krier 4454098479 Add foreign key for relation of model field
Closes #9050
2024-11-11 19:17:11 +01:00
Cédric Krier 620854a2d9 Display groups of record rules in list and form view
Closes #12000
2024-11-27 19:54:51 +01:00
Cédric Krier 2f8ce57d0b Remove required on user's menu and fallback to menu tree 2024-11-11 19:00:07 +01:00
Cédric Krier d7f89c8cba Move ir customization from res module to ir module 2024-11-10 02:14:34 +01:00
Cédric Krier ceb299a96a Setup and register ir and res modules earlier 2024-11-09 15:42:58 +01:00
Cédric Krier a82b9d35d0 Synchronize SQLite initialization SQL with PostgreSQL 2024-11-10 15:59:26 +01:00
Cédric Krier 81efba13d1 Optimize can_modify of model data
By searching only the records useful to raise error, it reduces the data read
and it can use an index.
2024-11-11 18:42:40 +01:00
Cédric Krier 7e827dd521 Ensure XML ID are unique per module 2024-11-11 16:39:56 +01:00
Cédric Krier 81f674082b Remove check_xml_record from ModelStorage 2024-11-11 15:19:51 +01:00
Cédric Krier f22c335057 Enforce unique DB ID per model in model data 2024-11-11 14:14:42 +01:00
Cédric Krier 534c5c28a9 Use message for unique constraint on model data 2024-11-11 14:11:11 +01:00
Cédric Krier 639482fd37 Update noupdate attribute on model data 2024-11-11 16:19:25 +01:00
Cédric Krier fabb5340e9 Always synchronize XML data with database
Closes #13668
2024-11-11 18:24:06 +01:00
Cédric Krier efab50227a Read only cost price from the history product when computing cost value
Closes #13767
2024-12-20 11:48:10 +01:00
Cédric Krier afcba82077 Do not add history to unnecessary model
d38610e26ede added history to all related models but it is not necessary as
only the One2Many and Many2Many are needed.
If the target of a Many2One or a Reference has been deleted meanwhile then the
record may not be readable at that date.

Closes #13768
2024-12-20 11:22:47 +01:00
Cédric Krier 7b75df7e4c Allow deleting routing or BOM linked together
Closes #13759
2024-12-16 18:28:21 +01:00
Cédric Krier f0f3888e35 Calculate digits shift even for all digits that are not None
Closes #13776
2024-12-23 18:25:41 +01:00
Cédric Krier 7c806d6b67 Decrease the number of decimal digits by the factor shift
Closes #13775
2024-12-23 18:23:32 +01:00
Cédric Krier c4c396bb6c Do not compute digits shift when digits is null
Closes #13774
2024-12-23 18:21:10 +01:00
Cédric Krier 0ef20b9571 Test model graph report 2024-12-23 15:36:47 +01:00
Cédric Krier c715844bb7 Move test workflow graph under ir module test 2024-12-23 15:32:11 +01:00
Cédric Krier d9ef6a486f Do not fail to render field without type in model graph 2024-12-23 15:29:56 +01:00
Cédric Krier 7ac5427f1c Search relational models by name in model graph
Since a4f347999b83 the name of the model is stored in the name field.
2024-12-23 15:29:00 +01:00
Cédric Krier 5229eaf4dc Do not select current record if it is no more in the group
on_change calls may remove the current record without updating the screen such
that it is not possible to compute a selection path.

Closes #13770
2024-12-21 18:12:09 +01:00
Cristina Sangrador 2c0f7be02d Do not try to create periods when renewing a fiscal year without periods
The computation of interval raises a ZeroDivisionError because the length of
periods is 0.

Closes #13671
2024-12-28 14:00:38 +01:00
Cédric Krier c2ae94e94b Fix import order
With the removal of try/except import of ssl, the following imports must be
sorted.
2024-12-28 11:59:56 +01:00
Nicolas Évrard c9072f993e Use an SSL Context when making a request to check the server version
python 3.13 removed the cafile keyword argument thus we have to use an SSL
Context to use those

Closes #13772
2024-12-23 11:56:35 +01:00
Nicolas Évrard 2ab12e8b40 Don't overflow select tag arrow with the option text
Closes #13765
2024-12-19 16:15:39 +01:00
Cédric Krier 555748ef01 Process Stripe and Braintree payments on checkout
Closes #13691
2024-12-15 19:15:39 +01:00
Cédric Krier 001bfe69c6 Make payment group optional per process method 2024-12-15 19:06:20 +01:00
Sergi Almacellas Abellana f9e4940ed7 Override _get_invoice_sale instead of create_invoice to set agent on invoice
This avoids saving invoices one by one.
2024-12-28 00:38:13 +01:00
Cédric Krier b72a6f0e7d Call on_change_notify for fields update by on_change
Closes #13753
2024-12-12 17:42:32 +01:00
Cédric Krier ce958434a8 Call on_change_notify for fields update by on_change_with
Closes #13752
2024-12-12 17:41:46 +01:00
Cédric Krier db8c876451 Propagate notifications to the parent group for screen without info bar
Closes #13751
2024-12-12 17:40:16 +01:00
Cédric Krier c5b039fade Return the attachment promise in attach callback
This way the button stays disabled until the drop down menu is filled.

Closes #13755
2024-12-12 23:39:43 +01:00
Cédric Krier f8ec37f24d Trigger change on "Selected Records" when predefined export is selected
The change callback set the visibility of the "Ignore search limit".

Closes #13754
2024-12-12 18:46:07 +01:00
Cédric Krier d6e0bfc053 Add new country subdivision types 2024-12-15 15:02:40 +01:00
Cédric Krier ee79c18d80 Support TEST_PYTHONWARNINGS in doctest
We restore the doctest_setup to setup the python warnings based on
TEST_PYTHONWARNINGS.
2024-12-15 14:45:15 +01:00
Cédric Krier 0206a17048 Raise a warning for unknown country subdivision type 2024-12-15 14:35:19 +01:00
Cédric Krier b4b2b5674a Add company in context of journal on account receivable rule
Closes #13742
2024-12-09 14:42:37 +01:00
Cédric Krier 2e61af81bb Fill ModelStorage caches only for records no further away then the read size
The read size is the size limit of the cache so filling it for record further
away will discard existing value closest.
2024-11-27 10:32:26 +01:00
Cédric Krier 57fbc89e78 Use TMPDIR as data folder to test demo
This reverts c4ab3ed92bf3 because since 6837a618f53d the size required is too
much for the default shm_size (300000 bytes) of the runners.
2024-12-25 14:30:44 +01:00
Cédric Krier 91f80aa529 Always send id for the on_change calls
Since cc277611c254 we rely on the id to decide if the instance is a new
instance from the server-side or from the client-side.

Closes #13769
2024-12-21 14:14:52 +01:00
Cédric Krier 523264e287 Compute default values of wizard view only for fields defined by value method
ba6b8ce0e692 introduces the reuse of Model.default_get to set the rec_name for
the values but it does by computing for all the fields which override the
actual default values.
2024-12-23 16:44:11 +01:00
Cédric Krier 00dff7193c Do not delete optional value for fields not set by the call
The same view may have different set of fields if it is extended conditionally.

Closes #13758
2024-12-16 15:38:11 +01:00
Cédric Krier 13a3f882a9 Share the same local cache for alone records saved together
The local cache must be shared between records from the same list of ids.

Closes #13704
2024-11-27 10:26:31 +01:00
Cédric Krier ab06c97ade Set journal mode, synchronous and optimize on SQLite connection
Closes #13609
2024-12-15 01:46:39 +01:00
Cédric Krier 030305ec49 Set screen to ScreenContainer at instantiation
Many methods of ScreenContainer relies on the screen being set.
And there is no reason to not set the screen at instantiation as long as show
filter refresh the bookmarks.

Closes #13757
2024-12-18 17:54:06 +01:00
Cédric Krier 43014db8ac Test if today is using the timezone of the contextual company 2024-12-16 17:23:03 +01:00
Cédric Krier d9b9d52643 Test if contextual company id is positive before using it to get the timezone
Closes #13702
2024-12-16 16:55:06 +01:00
Adrià Tarroja Caubet fb4600e095 Add method to return spanish tax identifiers for reports 2024-05-21 13:51:25 +02:00
Adrià Tarroja Caubet 7bc1d18cca Use es_code() to render AEAT reports
Closes #13242
2024-05-07 17:32:52 +02:00
Cédric Krier 5adb1e9356 Test default_get with instance value and rec_name 2024-12-22 17:25:46 +01:00
Cédric Krier be5d4fcfc4 Do not compute record name for negative id
With ba6b8ce0e692 the record name of default values are also computed for
one2one and reference but reference fields can have a default value with only
the model part by using a negative id. In this case we should not compute a
record name.
2024-12-22 17:24:22 +01:00
Cédric Krier 88b7266c6e Enforce record rules on resources
The rules of the resource record must be enforced like the model access.

Closes #13706
2024-11-27 19:48:27 +01:00
Nicolas Évrard 6f77a527b5 Add missing dot on the form-binary class selector
Closes #13766
2024-12-19 17:08:28 +01:00
Cédric Krier e492b6d048 Convert None as empty string when searching on Char or Text
Closes #13584
2024-11-24 18:01:51 +01:00
Cédric Krier c03dff9352 Support instances as default value
Closes #13694
2024-11-20 12:08:20 +01:00
Cédric Krier 7e5ef52975 Group on company currency in sale reporting
It is needed to construct unique ID when grouping by other mean than the line id.
Also the revenue is computed in the company currency.

Closes #13744
2024-12-12 00:42:58 +01:00
Cédric Krier 44957156d3 Ignore KeyError from the pool when filtering model names
When the database is updating, Model.get_name_items can be called while the
pool is not yet completely filled. So some model stored in the table may not
yet be in the pool. In this case we should ignore them.

Closes #13761
2024-12-18 17:01:24 +01:00
Cédric Krier 7464e4005c Keep raising HTTPException in with_pool wrapper
This was removed by mistake in c8ebaa541e21

Closes #13771
2024-12-21 18:58:50 +01:00
Cédric Krier 5b5377abca Use payment element for Stripe checkout
Closes #10031
2024-11-28 11:51:20 +01:00
Cédric Krier 43ca1d4968 Use HTTPStatus for Stripe routes 2024-11-17 16:45:36 +01:00
Cédric Krier 1fd50fb805 Retry locking tables at the same speed as the dispatcher request 2024-12-18 13:51:44 +01:00
Cédric Krier 167dc9629e Use /dev/shm as database path in demo CI jobs 2024-12-17 16:01:05 +01:00
Cédric Krier 430a359eed Use TMPDIR for CI jobs 2024-12-17 16:00:31 +01:00
Cédric Krier f1161d2aba Log request duration at wsgi_app level instead of with_pool
This gives more accurate duration as other decorators may take time to execute.

Closes #13650
2024-11-05 19:05:41 +01:00
Cédric Krier ee49ab66f9 Include the exceeding amount in the message about credit limit 2024-10-30 17:11:43 +01:00
Cédric Krier 5ef23b4335 Improve syntax of credit limit messages 2024-10-30 16:34:14 +01:00
Cédric Krier f5bf25a996 Use level and line name as record name for account dunning 2024-10-30 16:20:51 +01:00
Cédric Krier 5299f36eb9 Include amount in record name of account move line
Only the account code is used to limit the size of the name.
2024-10-30 16:19:57 +01:00
Cédric Krier 2b6166f155 Add original amounts before promotion
Closes #13633
2024-10-26 00:10:56 +02:00
Cédric Krier afc6c5a913 Require draft unit price if a promotion is applied on a sale line 2024-10-25 17:21:48 +02:00
Cédric Krier 59a0a8c8a7 Enforce company of promotion using the sale line company field 2024-10-25 17:06:42 +02:00
Cédric Krier 67e200848d Reassign points value instead of updating when changing quality control
The value of points is an immutable dictionary that can not be updated.

Closes #13730
2024-12-11 23:49:56 +01:00
Cédric Krier b26ff9757e Add metadata columns to ModelSQL with table query
Closes #9414
2024-10-25 00:24:39 +02:00
Cédric Krier c40169b8a9 Do not call next_party for account without party required
next_party assign a list with None as parties for the account without party
required. But since 81e16830e46e it is no more valid.
Instead we need to manage account without party explicitly without calling
next_party.

Closes #13760
2024-12-17 17:31:57 +01:00
Cédric Krier 2b8e4fb2dc Use record name for subtest based on record 2024-10-25 00:28:09 +02:00
Cédric Krier 16da4be04f Add report data to header_key
Closes #13627
2024-10-24 18:11:42 +02:00
Cédric Krier 5966a42979 Add reporting with latest date and amount per statement journal
Closes #9330
2024-12-16 09:39:07 +01:00
Cédric Krier 935307dbb2 Add scheduled task to confirm sales based on payment
Closes #13625
2024-10-24 16:01:38 +02:00
Cédric Krier 051bbb3087 Allow customizing the move date created by receivable rules 2024-12-08 11:43:26 +01:00
Cédric Krier 54672a40a9 Set a period from the company of the receivable rule creating move
Closes #13740
2024-12-08 11:41:03 +01:00
Cédric Krier 58647f9ee7 Remove unused docstring in Model definition testing field depends
docstrings are no more used since 23ce421d3bb9
2024-12-05 16:29:42 +01:00
Cédric Krier 4cbce5729e Include the depends of the getter function when depending on a Function field
Since c47b3642f1a6, the getter of a Function field may be called if there is no
value set for it on the instance.
In the on_change context, this may set the missing fields to None if they were
not defined in the depends of the method called. In addition to compute a wrong
value, those fields are then returned as modified.

Closes #13735
2024-12-05 16:25:16 +01:00
Cédric Krier 1360ae6c5d Do not use init values for new record without id to compute the changed values
When using new instance to fill a xxx2Many field, all the values must be
considered as changed and we should not expect any initial value.

Closes #13716
2024-11-30 12:56:41 +01:00
Cédric Krier 34df4552e5 Limit inbound email result to ModelStorage and ModelView 2024-11-16 18:43:16 +01:00
Cédric Krier ce2bc3a3a0 Limit keyword action to ModelView 2024-11-16 18:42:42 +01:00
Cédric Krier 2e974388b9 Limit resource reference to subclass of ModelView and ModelStorage
Closes #13689
2024-11-16 18:42:17 +01:00
Cédric Krier d661f3d8da Allow filtering model names by subclasses 2024-11-16 18:41:25 +01:00
Nicolas Évrard 05abf8ef2b Do not set the Group's context when setting a default group on xxx2Many
The context of the field is dynamic so evaluating it only once when creating
the group make it static.
Also the group is already evaluating the parent field context on the fly when
its context is retrieved.

Closes #13726
2024-12-16 10:29:26 +01:00
Cédric Krier f0b231d474 Do not check credit limit if the amount is negative or zero
Closes #13720
2024-11-30 23:50:59 +01:00
Cédric Krier 66253fbf37 Use warning format for credit limit warning name
Closes #13719
2024-11-30 23:46:57 +01:00
Cédric Krier 3d12183ebd Return credit limit amount for sale in company currency
Closes #13718
2024-11-30 23:43:00 +01:00
Cédric Krier df1021103f Add company argument to check credit limit
Closes #13717
2024-11-30 23:38:16 +01:00
Cédric Krier cd6c759e05 Display link symbol on hover of many2one and reference column
Closes #9091
2024-10-24 01:20:39 +02:00
Cédric Krier b8e124efaa Better naming between session and wizard instance when testing wizard 2024-11-21 18:09:22 +01:00
Cédric Krier 838cee8307 Do not re-instantiate action report when printing workflow graph 2024-11-21 18:08:54 +01:00
Cédric Krier 3481debb43 Convert value to integer when setting reference value as string 2024-11-21 18:07:57 +01:00
Cédric Krier 11d2468887 Set unit id in context to compute price of consignment 2024-10-22 00:12:22 +02:00
Cédric Krier 839d952e80 Set company id as context to compute today when creating purchase from request 2024-10-21 22:21:31 +02:00
Cédric Krier f5a9f36823 Test _ids type when instantiate ModelStorage 2024-11-21 18:06:48 +01:00
Cédric Krier c833195650 Set default integer digits to None 2024-11-25 23:47:12 +01:00
Cédric Krier 6cff740d3c Validate integer digits
Closes #12975
2024-10-20 18:22:26 +02:00
Cédric Krier d85f0b4456 Add support for DATE_TRUNC from INTERVAL to SQLite backend 2024-12-15 20:55:42 +01:00
Cédric Krier 90ffa4ad8a Fix DATE_TRUNC with date and time
Since 96bc08db1fd5, fromisoformat is used so the value may be a date or a time.
So not all the attributes are available for those types.
And SQL requires to always return a datetime.
2024-12-15 20:54:23 +01:00
José Antonio Díaz Miralles 94048faeb4 Prevent iOS from auto zooming on input focus
Closes #13602
2024-12-15 16:42:35 +01:00
Nicolas Évrard 294f2d1474 Allow searching on subdivision shorter code
When searching with a pattern, the shorter code is also tested.

Closes #13564
2024-12-15 12:53:34 +01:00
Cédric Krier c51e0157aa Use fromisoformat to parse value in SQLite functions 2024-12-14 16:20:10 +01:00
Cédric Krier 40c5010b77 Import datetime as dt in SQLite database 2024-12-14 16:16:07 +01:00
Cédric Krier 81cd587477 Add support for EXTRACT from INTERVAL to SQLite backend
Closes #13305
2024-12-14 16:22:59 +01:00
Cédric Krier c31522734f Test PostgreSQL backend with all Python versions
The backend contains Python code that should be tested for all versions.
2024-12-14 17:17:28 +01:00
Sergi Almacellas Abellana 26abd6635d Improve labels input and output materials of production and BOM 2024-12-14 12:08:49 +01:00
Cédric Krier d86eeeb5c5 Retrieve tax rounding configuration using the company of the taxable
Closes #13688
2024-11-15 18:06:45 +01:00
Cédric Krier e8f0704d0b Do not check for integrity error the required fields with set method
Closes #13745
2024-12-11 11:02:07 +01:00
Cédric Krier e9104be1ee Round together only taxable lines with the same taxes and sign
The rounding error must not be distributed between taxable lines having
different taxes otherwise the tax amount is not stable for the same base
amount.

Closes #13673
2024-11-12 17:39:42 +01:00
Cédric Krier 44b55e28f4 Use party access for address, contact mechanism and identifier 2024-11-08 16:26:01 +01:00
Maxime Richez 822ef93cd7 Add Brazilian, Canadian and Croatian tax identifiers
Closes #13678
2024-12-12 23:45:51 +01:00
Cédric Krier fe852af844 Merge move description with description on general ledger line
By using the move origin as fallback of the line origine, the description is
computed as the move description.

Closes #13696
2024-11-20 15:14:49 +01:00
Cédric Krier 1c9682e7ae Set default icon for board and list-form action window 2024-11-10 02:11:09 +01:00
Cédric Krier e77e0c2349 Add icon for list-form 2024-11-10 02:10:28 +01:00
Cédric Krier 48e6a7374d Use more explicit icons for form, list and tree
Closes #11391
2024-11-10 02:10:04 +01:00
Maxime Richez b502f39d6e Replace co_rut for co_nit as tax identifier
Closes #13679
2024-11-13 15:50:38 +01:00
Cédric Krier 25322bc0d1 Set label on form view as help text of record rules 2024-11-27 19:58:38 +01:00
Cédric Krier 3e45df410f Show only storage, view and warehouse locations by default
Closes #13711
2024-11-28 22:14:05 +01:00
Cédric Krier d1f97ed83b Replace playsound by playsound3 package
Closes #13629
2024-11-30 15:28:24 +01:00
Cédric Krier fd903381db Improve naming of the tested view
It is more useful to have the filename of the view if possible or the model
name and type.
2024-11-29 13:43:47 +01:00
Cédric Krier b6fd7fdf8a Do not instantiate record with default for the form of the wizard view
The default values are already set using the defaults of the wizard view.

Closes #13723
2024-12-01 23:48:17 +01:00
Cédric Krier e2ee8f5b13 Remove unused EMAIL_REFKEYS from action
Since 8288b688cfeb this global variable is no more used.
2024-12-05 16:27:17 +01:00
Cédric Krier 7a03020543 Assign customer moves when drop shipment is shipped
Closes #13648
2024-11-04 16:43:16 +01:00
Pedro Nuñez 7b67ad7891 Exclude report revisions from invoice copy
Closes #13698
2024-12-08 00:10:32 +01:00
Cédric Krier a93ccdc5c4 Always hide select button on binary cell when the field is readonly
Closes #13714
2024-11-29 13:06:08 +01:00
Cédric Krier 500f909a06 Properly disable the select button of Binary widget when readonly
The button is indeed a div which must have the .disabled CSS class and an input
which should be hidden when readonly.

Closes #13713
2024-11-29 13:03:53 +01:00
Sergi Almacellas Abellana 659f25e14f Cast excluded from sii as boolean before grouping
The value may be None which should be grouped with false values

Closes #13734
2024-12-05 15:54:50 +01:00
Cédric Krier 77dd7b3771 Test only last Python version with PostgreSQL 2024-11-24 13:55:42 +01:00
Cédric Krier 3f3320a70d Do not run pipeline on draft merge request 2024-11-22 13:50:10 +01:00
Cédric Krier 57ca116d24 Do not clear string field translations of model
Since de19952c097a the 'name' field has been renamed into 'string' also for the
translations.
2024-12-01 10:32:48 +01:00
Cédric Krier cd0bcf8ff5 Document gettext and ngettext methods added to the report context
They were added by 9403850c8ead but without documentation.
2024-12-01 19:06:26 +01:00
Cédric Krier f69fa14b74 Use msg_gettext to translate SEPA mandate title
Closes #13722
2024-12-01 19:05:34 +01:00
Cédric Krier 26930ddda9 Add msg_gettext and msg_ngettext to Report context 2024-12-01 19:04:56 +01:00
Cédric Krier a6ba7caead Enforce empty value for input and output production on stock move with id
The domain for Many2One is based on the target not the field value.

Closes #13721
2024-12-01 18:38:35 +01:00
Cédric Krier 1a835acf6d Do not convert invoiced quantity if sale has not unit when computing credit amount
Closes #13715
2024-11-29 14:12:01 +01:00
Cédric Krier 89f5385b70 Ensure current record is None after removing record from the group
The removal can trigger __select_changed on the list view which may set the
first record of the selection as the current record which may be the deleted
record.
This prevents the display triggered by record_modified to set the current
record in the selection as it has been removed from the group.

Closes #13712
2024-11-29 12:59:50 +01:00
Cédric Krier 1a842ade94 Return a dictionary when calling default_get and set a default empty value
18acfa54fa2e relies on having always a dictionary.

Closes #13690
2024-11-28 15:00:55 +01:00
Cédric Krier e1121fd3e9 Do not quit the SMTP sever on 421 error code
smtplib is already closing the connection when such error code is received.

Closes #13710
2024-11-28 14:47:11 +01:00
Cédric Krier 27e589ccd7 Do not set empty To, Cc nor Bcc in email message
Since gh-102988, email.utils.getaddresses() return [('', '')] for invalid email
addresses which includes empty string if the header is set with an empty list.

Closes #13649
2024-11-18 08:44:57 +01:00
Nicolas Évrard ffeeb1cdfe Parse child of group tags at the end
This allows to preserve the order of the state widgets in the form which is
important when evaluating the emptiness of a group

Closes #13622
2024-11-30 10:24:52 +01:00
Cédric Krier e0eb7390ed Add missing migration for column rename of ir.model and ir.model.field 2024-11-24 01:17:41 +01:00
Cédric Krier f93146919f Drop constraints using cascade
This is needed when dropping a constraint used to enforce a foreign key for
example.
2024-11-20 11:17:15 +01:00
Cédric Krier 7948557d03 Clear view type of price list line context
68816ce94559 moves the definition of the context view to product_price_list
module and convert the existing view to inherit it. But inheriting view must
not have a type.
2024-11-24 14:15:25 +01:00
Cédric Krier c8ab038585 Add missing migration of open lines button of product price list
68816ce94559 moves the button definition from product_price_list_dates module
to product_price_list but as product_price_list is updated first it can not
create the button because of the unique constraint.
2024-11-24 01:07:39 +01:00
Cédric Krier 2b8642b6ee Add manual migration to documentation 2024-11-24 00:35:36 +01:00
Cédric Krier 71e19b01d8 Create new context record with default value
Screen.new_ is returning already a promise that is resolved after the call to
default_get. This ensure that display is triggered after having set the default
value.

Closes #13697
2024-11-20 15:52:40 +01:00
Cédric Krier e5d7fae134 Remove new lines characters when comparing record name of Many2One and Reference
This avoid to trigger a reset of the field if the record name has such character.

Closes #13687
2024-11-15 15:20:28 +01:00
Cédric Krier 4b5fa06b60 Do not deactivate product in replacement wizard
If the product can be deactivated, it must be deactivated using the proper
method so all the operations like deleting staging and draft moves are
performed. Otherwise the stock moves for the deactivated product will stay.

Closes #13677
2024-11-13 13:19:25 +01:00
Cédric Krier 52de5320f6 Test if pre_validate is an empty object
Closes #13675
2024-11-13 11:22:21 +01:00
Cédric Krier f358b1fc1c Set default state when production moves from BOM
The visibility of some fields depend on the state so it is better to set it.
2024-11-13 11:14:35 +01:00
Cédric Krier 70e1b5bfad Fill unit price required when creating production moves from BOM
Since 23a3a9ed13d7 the unit price is reset to None if the unit price is not
required.
So the client must known that the unit price is required to keep the value.

Closes #13674
2024-11-13 11:10:05 +01:00
Cédric Krier 5965e02da3 Fix incompatible placeholders in tryton's translations 2024-11-07 21:44:36 +01:00
Cédric Krier 539513d74f Set a width to the nav-tabs to not be included in the min-content computation
When screen with tab domain is displayed in a board, the tab domain increase
the min-content which could overflow the tab content.

Closes #13665
2024-11-06 18:11:35 +01:00
Cédric Krier 1f42ffb932 Set grid template to container of board view
Closes #13663
2024-11-06 18:01:51 +01:00
Cédric Krier 7c6e54b364 Use ngettext for import/export message 2024-10-16 19:11:10 +02:00
Cédric Krier be2f522c05 Use plural for password length error message 2024-10-16 18:39:52 +02:00
Cédric Krier ffcf5a5225 Support plural translation of messages 2024-10-16 19:57:43 +02:00
Cédric Krier 851d0b580a Clear translation cache of message when translations of type model are changed 2024-10-16 17:27:16 +02:00
Cédric Krier 81d891bebf Support plural translations in report
In addition to add support for ngettext to Genshi i18n Translator, gettext and
ngettext methods are added to the report context.
2024-10-16 11:38:07 +02:00
Cédric Krier c9e059680e Add plural source to translations 2024-10-16 18:40:14 +02:00
Cédric Krier 01e715bb05 Add plural to language 2024-10-16 22:46:26 +02:00
Cédric Krier ccd026c9c6 Compute maturity date of grouped account move lines per debit/credit
Closes #8876
2024-10-23 20:02:00 +02:00
Cédric Krier 21d30ebd42 Use defaultdict when computing grouping move lines 2024-10-23 19:54:03 +02:00
Cédric Krier 120e315bec Set Decimal precision of default context from environment variable
This is placed in the trytond __init__.py because the default context must be
set prior to any start of thread. And thus it can only be set via environment.

Closes #13572
2024-10-08 16:34:37 +02:00
Sergi Almacellas Abellana c1e41fdfa2 Add final dot on dunning email help texts 2024-10-29 09:42:47 +01:00
Charles Germain 17e4d6a6f2 Clarify the need to create the opportunity.py file in the tutorial 2024-11-25 09:02:15 +01:00
Cédric Krier 6e3817ba05 Add equivalent domain of SQL constraints
When possible we should also add a domain so the client can provide better
feedback to the user.

Closes #9432
2024-10-27 16:20:45 +01:00
Cédric Krier b68ea11ed7 Remove unused dashboard cache 2024-11-06 17:57:56 +01:00
Cédric Krier 56afef04ec Clear view caches when dashboard fields of user are modified
Closes #13662
2024-11-06 17:57:35 +01:00
Cédric Krier beddddb6d8 Order tariff codes by sequence with null first
Closes #13655
2024-11-05 16:27:12 +01:00
Cédric Krier eb5ef7a443 Limit edition access on tariff codes of products to customs administrator
Closes #13656
2024-11-05 16:37:12 +01:00
Cédric Krier 622661350c Do not get a new connection when retrying to lock table on transaction start
Closes #13661
2024-11-06 13:57:10 +01:00
Cédric Krier 1557210b95 Disable promotion on tinyMCE
Closes #13660
2024-11-06 13:30:40 +01:00
Cédric Krier aba15a2885 Call directly record modified on group when Screen removes records
This is the same as in sao.
2024-11-13 11:33:51 +01:00
Cédric Krier 30fd8b38d2 Set a new current record if current one is not in the selection
`__select_changed` should not change the current record if the record is
already in the selection.

Closes #13676
2024-11-13 11:33:06 +01:00
Xavi Hermoso 27b672660a Update purchase requisition state when purchase request state is updated
Closes #13599
2024-11-24 18:47:43 +00:00
Cédric Krier 244d20f71c Relink stock moves to drop shipment after amending sale lines
Closes #13647
2024-11-04 16:45:49 +01:00
Cédric Krier ba38191f27 Set payment method and source name as class method 2024-10-29 12:01:00 +01:00
Cédric Krier 3421c62fa8 Propagate JSON-RPC protocol errors which are not service unavailable
Since 347c504196a9 requests are retried when service is unavailable but other
protocol errors like unauthorized must be raised to be processed.

Closes #13683
2024-11-16 00:02:36 +01:00
Cédric Krier 29868a0e0f Create tab content of board before retrieving the view
If the view is already cached, the callback is executed directly so the content
must have been created.

Closes #13664
2024-11-06 18:04:58 +01:00
Cédric Krier 363cbd986d Return the inherited view type for inheriting action window view
Closes #13659
2024-11-06 13:25:28 +01:00
Cédric Krier fdb7b33d50 Returns no view type when next view type is unknown
Closes #13658
2024-11-06 13:24:46 +01:00
Adrià Tarroja Caubet 1a6a4ecb66 Add test scenario for inventory count with lot 2024-11-20 23:02:03 +01:00
Adrià Tarroja Caubet ed4221bc35 Rename uom to unit when computing lot quantity counted for inventory
Since 7129f417a22c uom field on inventory line has been renamed to unit.

Closes #13646
2024-11-20 23:00:34 +01:00
Cédric Krier efab20b746 Add missing depends to counterpart intrastat property
Since 6bd1cdd44b6d the counterpart property is used for lost and found move.

Closes #13634
2024-11-19 16:50:36 +01:00
Udo Spallek 8b252472c4 Replace usage of docstring of Model by __string__ attribute
Closes #8402
2024-11-19 10:09:52 +01:00
Cédric Krier d99d001dfe Get default value from name2translations when updating model translations
Closes #13669
2024-11-12 00:02:58 +01:00
Cédric Krier 77d2d29447 Rename ir.model.field 'field_description' into 'string' 2024-11-11 20:04:03 +01:00
Cédric Krier 7449eda49c Rename ir.model 'model' field into 'name' 2024-11-16 21:17:55 +01:00
Udo Spallek a89fc8bf1c Rename ir.model 'name' field into 'string' 2024-11-16 21:18:38 +01:00
Cédric Krier a44d43f09b Update digits in project invoice test scenario
Since 7c7f60798d49, get_total is always rounding the value with the currency
digits.
2024-11-16 21:57:09 +01:00
Cédric Krier 5d9be5e253 Accept object has type for Greater statements
If the PYSON statement has the type 'object', it can be a Date, DateTime or
TimeDelta which is allowed for comparison.

Closes #13645
2024-11-04 13:09:34 +01:00
Cédric Krier 8397a314be Replace Many2Many by One2Many to stock move on forecast line
Closes #9243
2024-10-24 01:44:34 +02:00
Cédric Krier b58bb45544 Remove unnecessary invoice transition from cancelled to posted
cbb381841768 added it but it is not necessary because process use _post method
to set back the invoice to posted.

Closes #13619
2024-10-29 17:09:59 +01:00
Cédric Krier 7fafdf6af8 Set planned date of moves for all productions at once
Closes #8873
2024-10-23 19:30:17 +02:00
Cédric Krier a3568f6bb0 Do not update planned date of production moves if it is not needed 2024-10-23 19:34:26 +02:00
Cédric Krier 8f570007f0 Set planned date when creating production moves 2024-10-23 19:27:28 +02:00
Cédric Krier ab23b19d4e Round work total with currency digits in get_total
This allows to extend the computation methods without rounding too early.
2024-10-14 18:50:59 +02:00
Cédric Krier 315064677a Extract timesheet cost computation from _get_cost
This allows customization to use different composition of the costs.
2024-10-14 18:39:58 +02:00
Cédric Krier 53c042971b Group locations under the first requested location when computing stock quantities
This reduces the number of unnecessary intermediary results.

Closes #8594
2024-10-22 15:04:52 +02:00
Cédric Krier 31d53ba7a5 Reduce access to dictionary keys when computing stock quantities
#8594
2024-10-22 14:59:18 +02:00
Cédric Krier 462853ef3d Do not store period cache for empty quantity
This prevents to create a record for product that are no longer in the stock.

Closes #8151
2024-10-22 13:44:41 +02:00
Cédric Krier b86d70c701 Use the party currency added by account module for credit limit
Closes #13610
2024-10-20 21:19:39 +02:00
Cédric Krier 4aa300a3e4 Search for implicit locations of type storage when generating internal shipment
The provisioning and overflow locations are only meaningful on storage locations.
2024-10-06 12:38:20 +02:00
Cédric Krier fbbad830a2 Do not search for late moves when supplying stock if warning are skipped
For example the cron job skips the warnings so we safe some resources by not
searching for late moves.
2024-10-06 12:37:11 +02:00
Cédric Krier fb813f5abc Set and unset consignment origin without changing the state of the move
When changing the state of the move, the workflow transition of the decorated
function may filter out the move because the transition does not exist for the
new state.

Closes #13623
2024-10-24 00:52:27 +02:00
Cédric Krier e1a5a457f3 Extend searcher for assignation required from supplier consignment
Closes #8893
2024-10-23 21:15:33 +02:00
Cédric Krier d194910b72 Do not ask question on warning message about closed period
The client already ask a generic question to keep proceeding.

Closes #8806
2024-10-23 19:12:31 +02:00
Cédric Krier d7c8fae637 Do not allow to add product or unit with amendment if there was no unit
Invoice lines may already exist with incompatible unit which will fail to
compute invoiced quantity.
2024-10-27 19:43:15 +01:00
Cédric Krier 0e0f5f0ec6 Do not convert invoiced quantity if sale or purchase has not unit
Closes #13593
2024-10-27 19:41:19 +01:00
Cédric Krier 9d12fbf307 Take the first item of single value only with 'in' operator
Closes #13403
2024-10-28 00:39:53 +01:00
Cédric Krier 148135ddd2 Compare purchase requests having product and purchase line
Closes #13624
2024-10-28 00:19:53 +01:00
Cédric Krier e54257bf7c Set payment term ratio and divisor to None when type is not percentage 2024-10-27 20:04:09 +01:00
Cédric Krier bdabde97c6 Forbid to set ratio and divisor to zero for percentage payment term
Closes #13615
2024-10-27 20:03:24 +01:00
Cédric Krier ab3fecb282 Increase version number 2024-11-04 18:51:20 +01:00
Cédric Krier 18280c96af Add tag 7.4.0 2024-11-04 18:23:54 +01:00
Cédric Krier dc470fe1f4 Prepare release 7.4.0 2024-11-04 18:23:40 +01:00
Cédric Krier 3c6a527b56 Reorder trytond documentation 2024-11-04 09:51:15 +01:00
Cédric Krier 43790f90dc Do not add field in optional menu if it is excluded
Closes #13618
2024-10-22 19:47:27 +02:00
Cédric Krier 2a7c3dc2a2 Load sequence field value of previous record before setting sequence
Closes #13604
2024-10-15 14:50:08 +02:00
Cédric Krier 015c68f2c6 Update translations 2024-11-02 16:10:36 +01:00
Cédric Krier cb1dbd007a Update account name and code to universal chart of account in winbooks export test 2024-11-02 09:10:17 +01:00
Cédric Krier 2612aced12 Fix missing target field in operand of domain 2024-11-01 09:00:07 +01:00
Cédric Krier e61143c7ec Use type and closed to filter account on analytic rule instead of view type
The view type has been removed since 6b76c4de4813.

Closes #13641
2024-11-01 08:59:13 +01:00
Cédric Krier e5c4b1b1c2 Use default email policy to parse raw email
The default policy uses the EmailMessage class instead of the Message class
from the compat32 policy.
The EmailMessage decodes automatically the header values.

Closes #13607
2024-10-19 16:24:29 +02:00
Korbinian Preisler cbee496373 Add German translation of universal chart of account 2024-10-31 09:45:45 +01:00
Sergi Almacellas Abellana 954c6c233a Add Spanish translation of universal chart of account 2024-10-31 09:25:58 +01:00
Cédric Krier 1c40ca075e Allow passing the output directory of check scripts as argument
Such that the script can be used to regenerate the files in the repository if
the root directory is passed.
2024-10-31 09:15:23 +01:00
Cédric Krier 8e5b459d76 Add French translation of universal chart of account 2024-10-30 22:55:00 +01:00
Cédric Krier 83037ea151 Check in CI other modules that extend universal chart of accounts 2024-10-30 22:24:51 +01:00
Cédric Krier ae26cabdb0 Standardize and minimize output of XLST
This prevent to regenerate existing versions because a new version is added.
2024-10-30 19:23:06 +01:00
Cédric Krier 015f454609 Add CI check for chart of accounts 2024-10-30 19:02:22 +01:00
Cédric Krier a79563f514 Add XSL filter on record with chart attribute for account SYSCOHADA 2024-10-30 19:02:00 +01:00
Korbinian Preisler e9f5155062 Fix typo in word Litigation of universal account chart template 2024-10-29 20:53:20 +01:00
Cédric Krier e5658ccf92 Fix missing target field in operand of domain 2024-10-30 11:24:15 +01:00
Cédric Krier 1fdda8bdb2 Fix missing target field in operand of domain 2024-10-29 19:56:58 +01:00
Cédric Krier ce7be2e628 Do not try to paste empty clipboard as row
Closes #13613
2024-10-22 01:41:28 +02:00
Cédric Krier e1aa6a9642 Support widget with search_remote when pasting rows
Since 4db597e5b08c the widget value is not set automatically if there is only
one result.

Closes #13612
2024-10-22 01:39:29 +02:00
Cédric Krier ec70ef4203 Save each valid record pasted
Closes #3312
2024-10-22 01:18:57 +02:00
Cédric Krier ec33e1c3bf Test autocomplete of postal code and city on address 2024-10-19 23:49:41 +02:00
Cédric Krier 4fa6d9093d Do not autocomplete postal code nor city with empty value
None value prevents to sort the result and empty value does not add information.

Closes #13482
2024-10-19 23:48:53 +02:00
Cédric Krier aec4eae3f5 Replace forbidden char of document incoming name by space
When creating document incoming from email, the name value must be sanitized as
there is no control on the data.

Closes #13608
2024-10-19 16:34:36 +02:00
Cédric Krier 48cf2814ea Use "No Subject" fallback when creating document incoming from email with empty subject
Closes #13606
2024-10-19 15:25:33 +02:00
Cédric Krier afb909aa41 Fix missing target field in operand of domain 2024-10-28 21:23:57 +01:00
Cédric Krier 8ec4d98510 Update documentation of account cash rounding 2024-07-24 11:59:27 +02:00
Cédric Krier 7c3f4a85ee Update documentation of Spanish account 2024-07-29 17:00:28 +02:00
Cédric Krier 959e9bafae Update documentation of account payment Stripe 2024-10-28 14:40:37 +00:00
Cédric Krier c91260c175 Do not check link for www.facebook.com/business
It returns 400 when not logged.
2024-10-28 09:01:18 +01:00
Cédric Krier 2cb4ff88e0 Do not check link for www.sede.fnmt.gob.es
The SSL certificate can not be verified.
2024-10-28 08:59:24 +01:00
Cédric Krier dc0f0945ac Update Shopify webhooks link 2024-10-28 08:45:52 +01:00
Cédric Krier 5979e496de Do not check link for help.shopify.com
Cloudflare returns a 403 status before redirecting.
2024-10-28 08:45:28 +01:00
Cédric Krier 3217b224a4 Update documentation of account statement OFX 2024-10-18 00:01:52 +02:00
Cédric KrierandDavid Harper cfebb57220 Update documentation of account stock Anglo-Saxon
Co-authored-by: David Harper <dave@libateq.org>
2024-08-15 09:47:43 +02:00
Cédric Krier 7eab401995 Update documentation of analytic sale 2024-08-02 10:15:25 +02:00
Cédric Krier 03c8668a2c Update documentation of analytic purchase 2024-08-02 10:11:32 +02:00
Cédric Krier 1febbee273 Update documentation of analytic invoice 2024-08-02 10:04:49 +02:00
Cédric Krier 4a03517f34 Update documentation of analytic account 2024-08-01 19:00:32 +02:00
Cédric Krier bc1a7fdab1 Update test of account used for universal chart of account 2024-10-25 00:35:24 +02:00
Cédric Krier c877d21baf Update documentation of carrier weight 2024-08-03 12:31:21 +02:00
Cédric Krier d82cc37f3e Update documentation of carrier subdivision 2024-08-03 13:34:37 +02:00
Cédric Krier 1400b89eef Update documentation of carrier percentage 2024-08-03 12:01:24 +02:00
Cédric Krier 14caf1d81b Update documentation of carrier 2024-08-03 11:43:25 +02:00
Cédric Krier 871a65c2b2 Add incoterm warning on shipment only if sale or purchase modules are activated
5e14ff4b00a6 adds the warnings which require to have sale or purchase.
2024-10-25 00:38:11 +02:00
Cédric Krier 5ef6e24da1 Remove button decorator on create_waiting_move
It is not needed as this method is not linked to a button.
2024-08-04 13:04:47 +02:00
Cédric KrierandDavid Harper a10b393b05 Update documentation of commission waiting
Co-authored-by: David Harper <dave@libateq.org>
2024-10-17 23:54:46 +02:00
Cédric Krier 78a2fd0de2 Remove duplicate country field definition in tariff code
The CountryMatchMixin already defines a country and an organization field.
2024-08-04 17:08:56 +02:00
Cédric Krier bee1f094bc Update documentation of customs 2024-08-04 17:07:10 +02:00
Cédric Krier 5d04179b15 Update documentation of dashboard 2024-10-27 16:57:41 +00:00
Cédric Krier 2bb7b9db91 Update documentation for edocument UN/CEFACT 2024-10-27 15:34:14 +00:00
Cédric Krier eb2e32a0ec Update document of edocument UNECE 2024-08-04 19:33:36 +02:00
Cédric Krier d7ea8c0b8b Update documentation of marketing email 2024-10-27 12:57:25 +01:00
Cédric Krier f0d98649d0 Copy root lines as line when copying budget
Since b7a82bf780b4 the root lines field is no more copied and as lines are not
copied by default, we must copy the root lines as lines.
2024-10-27 12:56:22 +01:00
Cédric Krier 0fbb9b43cd Update analytic tests for Universal Chart of Account 2024-10-27 12:53:51 +01:00
Cédric Krier 2464ef02aa Update documentation of marketing campaign 2024-08-04 23:40:33 +02:00
Cédric Krier b174e0a833 Update documentation of marketing 2024-08-04 23:39:32 +02:00
Cédric Krier aa1ed2fcaf Update link to documentation of marketing automation 2024-08-04 23:41:54 +02:00
Cédric Krier 90dd7a5126 Update documentation of party relationship 2024-08-16 11:45:36 +02:00
Cédric Krier 9b0db800cf Use existing write-off journal in invoice test scenario 2024-10-26 21:32:53 +02:00
Cédric Krier febb42237a Add currency exchange write-off to demo
Closes #13227
2024-10-26 21:32:06 +02:00
Cédric Krier bec00bd8de Add payment method to demo
Closes #13227
2024-10-26 21:31:45 +02:00
Cédric Krier 17fb714e38 Document that getter function is called with the record context 2024-08-17 17:48:12 +02:00
Cédric Krier c8caf77630 Document _transaction, _user and _context attributes of ModelStorage
They are private attributes to avoid collision with fields but they should be
indeed part of the public API.
2024-08-17 17:47:33 +02:00
Cédric Krier 556858d1a1 Remove documentation about target_search parameter on Many2One
a8f355306be5 removed the parameter but not the docstring documentation.
2024-08-19 12:53:53 +02:00
Cédric Krier 710ec4a136 Update documentation of party SIRET 2024-08-26 22:06:16 +02:00
Cédric Krier 9c4f6e91f0 Use https for links in sao package 2024-10-21 12:07:37 +02:00
Cédric Krier 711c2d1700 Update repository link for sao package
Closes #12569
2024-10-21 12:06:58 +02:00
Cédric Krier c0028d438b Use domain iso3166-1 instead of iso3166 to translation countries
pycountry has removed the iso3166.mo file in version 23.12.7 but the
iso3166-1.mo exists since version 16.11.8.

Closes #13617
2024-10-22 16:46:53 +02:00
Cédric Krier 40520b9ad0 Filter out existing records from the search results of xxx2Many
Closes #3285
2024-10-22 01:01:33 +02:00
Cédric Krier f4e9ef595a Select by default the first active carrier
The available carries can contain inactive carries because it is just a list of
carriers matching the criteria.

Closes #12888
2024-10-20 22:12:32 +02:00
Cédric Krier ac96da85d6 Use ModelSQL.lock to lock table when validating SQL constraint
Since c8771e45b861 locking table must be performed at the start of the
transaction which is managed by the `Transaction.lock_table` method which is
used by `ModelSQL.lock` but not `Database.lock`.

Closes #13626
2024-10-24 15:06:00 +02:00
Cédric Krier 74bfb4af96 Do not force to lock table at the transaction start when updating module 2024-10-24 15:45:40 +02:00
Cédric Krier 1765468674 Update pixbuf loaders and immodules when building installers
Closes #13611
2024-10-21 18:01:53 +02:00
Cédric Krier 3aecfc9658 Do not fail to set value of the wrong type to Dict Entry widget
Closes #13621
2024-10-23 13:56:53 +02:00
Cédric Krier 0125b704de Store document number of AEB43 as char 2024-10-23 13:30:46 +02:00
Cédric Krier 95cc30b9e3 Convert AEB43 document number to integer when stored as information
Closes #13620
2024-10-23 13:26:40 +02:00
Cédric Krier c1a736f118 Add rules to check code jobs to run only if targeted files have changed 2024-10-24 10:43:59 +02:00
Cédric Krier 64bcec5fa6 Do not update unit price of stock move when it is not required
Closes #13561
2024-10-19 23:06:22 +02:00
Cédric Krier 18aad8ae0e Install setuptools before generate and check documentation
Closes #13628
2024-10-25 09:44:39 +02:00
Cédric Krier 7f9d1ff68e Fix typo in the handle exception wizards of sale and purchase 2024-10-23 09:38:35 +02:00
Cédric Krier 5546f5d125 Use proper name for Hidden Recipients in email template help text 2024-10-19 09:39:34 +02:00
Cédric Krier 803fc3a54a Reduce the size of docs artifact
We just need to objects.inv for intersphinx mapping.
And as the linkcheck verifies only http links, we do not need the html files.
2024-10-24 10:13:31 +02:00
Cédric Krier ea41b52449 Apply saved optional to column with the optional attribute
If the same column is added twice in a view with and without optional, only the
columns with optional attribute must be updated.
2024-10-15 12:25:46 +02:00
Cédric Krier e92d79df01 Group optional column with the same
The optional state is stored only by field name so the toggle menu should
display only one state per column name to avoid ambiguity.

Closes #13603
2024-10-15 12:13:54 +02:00
Cédric Krier ac524f08db Simplify demo company
The most common usage is to have a single company so the demo should show this
use case.
Also to help demonstrate the different access right, more users are created
with a subset of groups.
2024-10-14 21:30:40 +02:00
Cédric Krier f288356adf Do not replace redefined product field with template function field
Closes #10322
2024-09-30 16:53:49 +02:00
Cédric Krier 660689b128 Invert sign when searching on deposit amount of party
Since 2cc065fbce6b, the getter is using credit - debit so the searcher should
also.

Closes #13563
2024-10-04 09:21:43 +02:00
Cédric Krier 5d1c35d5f8 Round unit price from the price list computation
The unit price may not be roundable if the user expression results in a too
large for the Decimal context.

Closes #13542
2024-10-08 16:11:50 +02:00
Cédric Krier 7c22ab2f61 Raise FormulaError also when computing unit price from price list 2024-10-08 16:10:14 +02:00
Cédric Krier 4563f61fc9 Use tuple to compare identifier types for migration 2024-10-18 13:53:00 +02:00
Sergi Almacellas Abellana c29771ec9c Use SQL query on party configuration identifier types migration
Closes #13577
2024-10-15 12:57:32 +02:00
Cédric Krier ca00614407 Do not set line terminator when copying a single row
When a single row is copied there is no need for a carriage return.

Closes #13573
2024-10-14 09:35:11 +02:00
Cédric Krier 496ee650da Do not use negative company ID from context to compute credit limit
Closes #13596
2024-10-11 19:31:14 +02:00
Cédric Krier d967356c7e Return location instance in getter of sale and purchase
If the location field is empty, it prevents to raise an attribute error when
accessing the id.

Closes #13544
2024-10-11 15:59:18 +02:00
Cédric Krier f53b5cb0d0 Update documentation of account credit limit 2024-07-24 11:53:54 +02:00
Cédric Krier f5d3f4c0e5 Update account credit limit tests for more receivable and revenue accounts
Closes #13605
2024-10-17 17:20:32 +02:00
Cédric KrierandDavid Harper 10b81b4410 Update documentation of account payment SEPA
Co-authored-by: David Harper <dave@libateq.org>
2024-08-08 23:39:50 +02:00
Cédric Krier 7d0d2df3fe Update documentation of account dunning 2024-10-17 11:04:46 +00:00
Cédric Krier a4d3989874 Update documentation of account stock continental 2024-10-17 10:16:03 +00:00
Cédric Krier a1a602159a Update documentation of account tax rule country 2024-10-17 09:46:50 +00:00
Cédric Krier 422be751d9 Update documentation of account stock landed cost weight 2024-10-17 09:27:32 +02:00
Cédric Krier 2b188f1f0a Update documentation of account stock landed cost 2024-10-17 10:41:39 +02:00
Cédric Krier 4fb1f4b277 Update documentation of account statement rule 2024-10-16 08:31:40 +00:00
Cédric Krier cf0fff897e Update documentation of account tax cash 2024-10-16 07:32:34 +00:00
Cédric Krier f5cfc9341d Update documentation of attendance 2024-10-15 18:55:14 +00:00
Cédric Krier 2f1446a5c0 Update documentation of authentication SMS 2024-10-15 17:43:50 +00:00
Cédric Krier f3c767dc6f Update documentation of authentication SAML 2024-08-02 15:51:49 +02:00
Cédric Krier b9465aae47 Update documentation of bank 2024-10-15 17:02:17 +00:00
Cédric Krier ed6e62d396 Update documentation of company work time 2024-10-15 16:28:03 +00:00
Cédric Krier b30a4005df Update documentation of Google Maps 2024-10-15 15:14:33 +00:00
Cédric Krier 0721f62c20 Add docker installation options in the documentation 2024-10-15 13:26:28 +00:00
Cédric Krier 286c924486 Quote empty string when formatting list value of domain
This is needed to keep the empty string in the list on a second parsing.

Closes #13558
2024-10-02 17:06:58 +02:00
Cédric Krier 8edd9f79f8 Use equality operators when stringify in domain clause with singleton
Closes #13557
2024-10-02 17:02:55 +02:00
Cédric Krier f2e064272f Replace in comparison with equality in ModelStorage copy 2024-09-30 23:15:08 +02:00
Cédric Krier 8efee8823a Do not copy relational fields with filter
Closes #13549
2024-09-30 23:14:36 +02:00
Cédric Krier 70f6a94537 Optimize searching stock moves with FIFO quantity when deleting 2024-10-14 17:55:20 +02:00
Cédric Krier 597ad2af0a Forbid to cancel stock move used for anglo-saxon accounting
Closes #13597
2024-10-14 17:54:40 +02:00
Cédric Krier 9e9fdb7782 Cancel account move when stock move is cancelled
Closes #13597
2024-10-14 17:54:18 +02:00
Cédric Krier 745099113f Enforce strictly positive currency rate 2024-10-14 15:18:19 +02:00
Cédric Krier d0efae47b5 Enforce positive number of digits for currency 2024-10-14 14:37:41 +02:00
Cédric Krier 62fe5b3fdf Enforce strictly positive rounding value for currency
Closes #13600
2024-10-14 14:35:37 +02:00
Cédric Krier 6d0270e7d8 Do not enforce implicit NOT NULL on name field of a tree
The `not like` operator implicitly requires the field to be not null but
specific implementation of the named field may allow to have NULL values.

Closes #13592
2024-10-11 10:51:04 +02:00
Cédric Krier f9e13ddc3f Include NULL value for negative search on nested Many2One and Reference
This unify the search behavior on relational fields with NULL value started
with c14f51b77b30.

Closes #13585
2024-10-11 11:24:06 +02:00
Cédric Krier d34ad9cbc9 Encode JSON value before storing it as date on inbound email
Closes #13583
2024-10-09 20:20:21 +02:00
Cédric Krier a286726c0c Test if work cost is a timedelta before converting to seconds
Closes #13582
2024-10-09 20:18:37 +02:00
Cédric Krier c02fbaad97 Fallback to 0 when summing stock values of products
Closes #13581
2024-10-09 20:15:47 +02:00
Cédric Krier 9d9a6253cd Explicitly set boolean operator to compose domain of current name of budget line
Closes #13580
2024-10-09 20:13:30 +02:00
Cédric Krier 22f6237085 Always return a string for status bar of user
Closes #13579
2024-10-09 20:10:13 +02:00
Cédric Krier 46e9405595 Do not add model name in record name of view without model
Closes #13578
2024-10-09 20:07:30 +02:00
Cédric Krier 071c98210d Do not compute sequence next number if the SQL sequence does not exist 2024-10-09 09:47:15 +02:00
Cédric Krier f10ee771e0 Round payable and receivable balance on account move line 2024-10-08 14:43:51 +02:00
Cédric Krier 68fdd840a9 Extend searchable of Template Function field instead of definition
Since 4689fc76ddb7 the definition is based on the searchable result.
2024-10-08 14:38:40 +02:00
Cédric Krier cff908ff80 Use Text field for icon content
The SVG format can have line break so the field must allow them.
2024-10-08 14:37:07 +02:00
Cédric Krier 799b8dde56 Validate Function fields when running tests 2024-10-08 14:36:13 +02:00
Cédric Krier 6868d72b86 Enforce the type of value for Function fields
Closes #13550
2024-09-30 19:13:01 +02:00
Cédric Krier f1ce119ad4 Document the attributes on the fields 2024-09-30 19:12:04 +02:00
Maxime Richez c5682a2548 Warn when incoterm on shipment is different from its origins
Closes #13354
2024-10-14 18:00:19 +02:00
Cédric Krier 6208cd69bd Add group names added by payment modules to help of statement rule 2024-10-13 16:31:47 +02:00
Cédric Krier 65d254c4c2 Manage payment keywords of statement rules in account_payment module
Closes #11053
2024-10-13 15:43:19 +02:00
Cédric Krier 1c95e602c7 Add test scenario for payment clearing with statement rule 2024-10-13 15:40:15 +02:00
Cédric Krier 39ae838bfe Add number as record name to payment
Closes #7285
2024-10-13 14:44:08 +02:00
Sergi Almacellas Abellana 07902c1f81 Do not unpack payment groups when applying statement rules
Closes #13569
2024-10-07 12:21:52 +02:00
Cédric Krier 3621bc78f8 Use expense journal instead of expense account as payment clearing journal in scenario 2024-10-14 15:16:00 +02:00
Cédric Krier 6309f4f18d Update budget test scenario to be less dependent on chart of account 2024-10-14 13:52:41 +02:00
Cédric Krier 6ac2e5001f Order Non-operating section account type after expense 2024-10-14 13:52:17 +02:00
Cédric Krier a3ada4ef98 Replace minimal by universal chart of account
Closes #9642
2024-10-13 23:55:37 +02:00
Cédric Krier 6063682e35 Replace unique check of promotion coupon number by overlap SQL constraint
This adds also a company field to coupon and number.
2024-10-11 15:29:51 +02:00
Cédric Krier 5853d86d25 Replace dates checks of stock forecast by overlap SQL constraint 2024-10-11 16:01:55 +02:00
Cédric Krier fce7629ecb Simplify PYSON expressions in forecast 2024-10-11 12:30:32 +02:00
Cédric Krier 56d77717c8 Replace dates checks of subscription line with asset lot by overlap SQL constraint 2024-10-11 11:51:29 +02:00
Cédric Krier 1e7dd3c351 Use SQL constraint to enforce unique usage of post move sequence 2024-10-10 00:34:19 +02:00
Cédric Krier 6f4fbb008a Replace dates checks of fiscal year and period by overlap SQL constraint 2024-10-09 17:29:27 +02:00
Cédric Krier f64e38f799 Surround exclude expression with parenthesis
Closes #13576
2024-10-09 17:19:44 +02:00
Cédric Krier ca61f7cc7b Support range functions and operators in EXCLUDE constraint
Closes #7471
2024-10-10 00:34:53 +02:00
Cédric Krier 1e85b264ca Use the intrastat country of production warehouse for production location
Closes #13524
2024-09-18 10:59:32 +02:00
Cédric Krier e8b8d6758a Use the intrastat country of the other location for lost and found location
The lost or found happens in the country of the other location.

Closes #13523
2024-09-18 10:54:22 +02:00
Nicolas Évrard 35fb76f754 Add tests on ir.model and ir.model.field write calls on translated fields 2024-09-25 00:12:46 +02:00
Nicolas Évrard be0e2e691a Update only the actual ir.model and ir.model.field translations
Closes #13546
2024-10-01 16:45:46 +02:00
Cédric Krier 032813a0b8 Support None as default value for xxx2Many fields
Closes #13588
2024-10-10 09:38:40 +02:00
Maxime Richez dcef019d80 Allow cancellation of done shipments and productions
Closes #13489
2024-10-13 15:50:49 +02:00
Sergi Almacellas Abellana 75fa7e22ca Add company on packages tree view 2024-08-21 10:23:23 +02:00
Sergi Almacellas Abellana b9478515c0 Only consider done forecast when checking if they overlap
Closes #13553
2024-10-01 13:49:34 +02:00
Cédric Krier 29de47586c Test if all columns of SQL constraint are Column before testing their names
Closes #13587
2024-10-10 00:48:39 +02:00
Cédric Krier abb51c5cb3 Test all the SQL constraints name first before testing common column names
Closes #13586
2024-10-10 00:44:50 +02:00
Cédric Krier aafa890c5c Add depends on periods when changing company of tax code context
Since fa8f759f834b there is an assert to ensure that changing values of
xxx2Many can be done only if the field had a initial value.

Closes #13535
2024-09-30 17:22:37 +02:00
Cédric Krier e16889a592 Use sparkline tools instead of pygal 2024-09-29 11:46:53 +02:00
Cédric Krier 530b55ac42 Add sparkline chart tools
Closes #13548
2024-09-29 12:36:21 +02:00
Cédric Krier ae6df62434 Collapse main navbar when link is clicked
The main navbar is collapsed automatically on small screens when a tab is
selected.
2024-10-10 14:04:47 +02:00
José Antonio Díaz Miralles 9b3d3f85d6 Simplify menu handling by using flex instead of offcanvas and make it resizable
Closes #13444
2024-10-10 12:52:07 +02:00
Cédric Krier 91d7ec1289 Remove padding on menu 2024-10-11 22:55:04 +02:00
Cédric Krier 5c590194c5 Remove margin on image of treeview expander 2024-10-11 23:03:51 +02:00
José Antonio Díaz Miralles 74966d8b05 Reduce padding for affix in tree view 2024-08-09 00:16:55 +02:00
Sergi Almacellas Abellana 76fd78716d Prevent deletion of non-pending quality inspections
Closes #13456
2024-10-11 21:22:14 +02:00
Cédric Krier 0b5d5c2322 Manage to replace products 2024-09-03 12:39:57 +02:00
Sergi Almacellas Abellana 9a14948fb4 Use Function field to test if invoice has an account move
This prevents to hide the post button if the user has no read access to the
account moves.

Closes #13493
2024-10-11 15:33:51 +02:00
Cédric Krier 68d7267502 Do not create twice a chart of account in Stripe dispute scenario
7a523d9c3ffa activate the module with the creation of chart of account.
2024-10-11 09:23:27 +02:00
Cédric Krier 32227136e7 Add validity dates to coupon number to allow reuse of coupon number
Closes #13010
2024-09-27 10:35:53 +02:00
Cédric Krier 670f3f894d Lock the table before checking uniqueness of coupon number
Closes #13011
2024-02-06 23:53:28 +01:00
Cédric Krier d3cca51abc Create company and chart of account when activate modules in test scenario 2024-09-11 19:05:12 +02:00
Cédric Krier d83bcc784c Add setup methods to activate_modules 2024-09-10 18:01:29 +02:00
Cédric Krier 529fa7bb0e Add optional company to account statement list view 2024-09-16 18:33:11 +02:00
Cédric Krier 60f07545e5 Do not fail to get Stripe refund failure reason if it is not present
Closes #13590
2024-10-10 14:18:32 +02:00
Cédric Krier 0b5dd24b80 Update usage of synchronous Record.validate and _check_load
Closes #13497
2024-10-03 14:44:09 +02:00
Cédric Krier 57b5c736b2 Clear Braintree error message on succeeded status 2024-10-01 12:31:01 +02:00
Cédric Krier f21f1f92f6 Clear Stripe error codes when updated 2024-10-01 12:30:37 +02:00
Cédric Krier 9bdc52e67b Do not display payment errors when payment or refund is succeeded 2024-10-01 12:28:44 +02:00
Cédric Krier 2616442a36 Add configuration for maximum size of document incoming request
Closes #13515
2024-09-16 19:32:38 +02:00
Cédric Krier 859b66c669 Add configuration for maximum size of inbound email request
Closes #13514
2024-09-16 19:31:04 +02:00
Cédric Krier 42fb22e164 Add border to notebook and navbar background to nav-tabs
This allows to better distinct the notebook and its content.
2024-10-01 12:41:50 +02:00
Cédric Krier c4e49fbc58 Use column and row gap instead of padding to separate cells of grid
Using gap of grid allows to not loose the space when widgets are nested.
And keep top/bottom padding on small screen.
2024-10-02 10:29:44 +02:00
Cédric Krier 3948905844 Remove widget class on form-item
The widget class is set on the content of the form-item.
Having it twice apply margin or padding twice.
2024-09-27 20:49:50 +02:00
Cédric Krier bf9709d360 Render xalign-end as start on small screen
As the rule was not in .form, it was not enough specific to apply.
Also on small screen we can keep centered the xalign-center
2024-09-27 20:47:52 +02:00
Cédric Krier f40829a231 Set default y-attributes for notebook 2024-09-27 20:44:56 +02:00
Sergi Almacellas Abellana da99315a14 Remove duplicated timestamps from history_revisions
Closes #13528
2024-09-19 09:49:33 +02:00
Cédric Krier a091c2b8fc Order errors by descending id
Usually it is the latest errors that are interesting for the user.
2024-09-25 09:56:50 +02:00
Maxime Richez 348ea5c5bb Extend domain to reschedule not yet done shipment
Closes #13536
2024-09-20 14:58:46 +02:00
Cédric Krier 008c1688bf Set employee when changing company only if the user has one available value 2024-09-25 12:44:11 +02:00
Cédric Krier 37c44ffbde Add simple list view for company and employee
The views have only the record name field so they can be used in Many2Many to
not display extra information.
2024-09-25 12:33:56 +02:00
Cédric Krier e06b0dce8e Set default companies and company for user only if there is one company 2024-09-25 12:24:54 +02:00
Cédric Krier 18f0801e60 Use design to fill companies and employees first on user form
To make it obvious that companies and employees must be filled first, they are
displayed first and the company and employee fields are hidden if there is no
values to select.
2024-09-24 19:31:56 +02:00
Cédric Krier 464eb3e572 Allow switching to non-form view even if no record is selected
Closes #13511
2024-09-24 17:23:12 +02:00
Cédric Krier e5e17ab699 Remove shortcut hint in undelete button of One2Many
The shortcut is already explained in the help pop-up.
2024-09-24 15:51:14 +02:00
Cédric Krier dd9ad81995 Add restore button on Many2Many widget 2024-09-24 15:50:18 +02:00
Cédric Krier f496ca79d6 Disable remove button of Many2Many if all selected records are already removed 2024-09-24 14:55:14 +02:00
Cédric Krier 158069f42b Activate delete and undelete buttons of One2Many depending of the selected records
If there are no deleted records selected, the undelete button is disabled and
if there are only deleted records selected, the delete button is disabled.
2024-09-24 14:54:11 +02:00
Cédric Krier 34d34b682c Ensure current record is in the tree view selection 2024-09-24 14:46:39 +02:00
Cédric Krier 148f0cc5ce Keep current record if it has not been destroyed after removal
This allows to keep selected the removed record on the xxx2Many widgets such
that it is easy to undo the removal.
2024-09-24 12:10:24 +02:00
Cédric Krier 92192b789a Use One2Many length to set sensitivity on next/previous buttons
Closes #12950
2024-09-24 11:26:14 +02:00
Cédric Krier e59d01aead Enforce agent type on agent selection 2024-08-25 20:37:47 +02:00
Cédric Krier 373cfe75cc Show products on agent form 2024-08-25 20:37:14 +02:00
Cédric Krier 267380a266 Allow agent to be deactivated
Closes #13282
2024-08-25 20:36:32 +02:00
Cédric Krier aab7a7de97 Allow admin users to update invoice tax description and legal notice
Closes #13554
2024-10-01 15:31:05 +02:00
Cédric Krier 3fc39d0433 Reset cancelled invoice to posted when unpaid
Closes #13509
2024-09-13 15:30:26 +02:00
Sergi Almacellas Abellana 781856a3c9 Remove company domain from price list action window
Closes #13416
2024-07-23 11:12:24 +02:00
Nicolas Évrard 87ce09a7c7 Deactivate only the class buttons in x2M widgets
Closes #13530
2024-09-19 11:09:47 +02:00
Cédric Krier d13f40521f Remove print statement in exception handling of cron's run 2024-10-06 12:20:13 +02:00
Cédric Krier 2b9e1086a5 Use better name for the invoice account variable to compute remainder amount 2024-09-27 19:29:23 +02:00
Cédric Krier 6d5879cdb3 Add test scenario to defer invoice all at once
#13547
2024-09-27 19:28:27 +02:00
Cédric Krier a69fffce46 Exclude the move which defer the invoice line amount
The move to defer amount must be created before creating the period move in
case we need to compute the remainder amount on the first run.

Closes #13547
2024-09-27 19:28:03 +02:00
Cédric Krier 68d093189a Consider as loaded the fields marked as modified
As the load method skips setting modified fields, so they are not and will
never be marked as loaded.
2024-10-02 12:07:48 +02:00
Cédric Krier 6f372e2b92 Check load of only fields being validated
Closes #13556
2024-10-02 12:05:16 +02:00
Cédric Krier db99bb6801 Do not copy origin of stock moves in each shipment
The ShipmentMixin is also used by the production which does not have a moves
field.

Closes #13555
2024-10-01 18:32:18 +02:00
Cédric Krier a87be1db6a Do not return empty for planned deliver date of purchase line when it is in the past
Closes #13298
2024-09-07 14:00:50 +02:00
Cédric Krier 48568f7856 Do not return today planned shipping date of sale line when in the past
Closes #13298
2024-09-07 13:59:57 +02:00
Nicolas Évrard 6907ea5b7b Add warning when using implicit rec_name target for relational domain 2024-09-07 00:39:55 +02:00
Nicolas Évrard 618f20d453 Return the display promise when creating a new record from the screen
This is necessary because otherwise it could result in concurrent update of the
models of the models used by the underlying widgets.

Closes #13545
2024-09-24 16:37:50 +02:00
Cédric Krier 514495cf1e Rename "Product Quantities By Warehouse" into "Stock Quantities By Warehouse" 2024-09-14 13:07:43 +02:00
Cédric Krier 26f1f8fda6 Remove "Lots By Warehouse" relate
It is not very useful and the same view can be opened from the stock location
relate.
2024-09-14 13:00:53 +02:00
Cédric Krier ca6bb39948 Rename "Locations * Quantity" into "Stock Locations *" 2024-09-14 12:51:16 +02:00
Cédric Krier 62e2e4f62e Document viewing stock levels of lots 2024-09-14 12:39:28 +02:00
Cédric Krier 916a3ef855 Rename "Lots by Locations" into "Lots"
As the locations are added to the tab name, there is no need to specify that it
is "by Locations".
2024-09-14 12:39:07 +02:00
Cédric Krier a65c9879dd Rename "Products by Locations" into "Products"
As the locations are added to the tab name, there is no need to specify that it
is "by Locations".
2024-09-14 12:38:24 +02:00
Cédric Krier d9b275e181 Move "Open Lines" button to product price list module
Closes #13527
2024-09-18 18:14:58 +02:00
Cédric Krier e54322910c Filter shipment moves before sorting them in the getters of Function field
This way the filtering can benefit of the cache alignent before the order of
the list is modified.

Closes #13526
2024-09-18 13:51:16 +02:00
Cédric Krier 1f0afd17a7 Iterate only once to sort records by order clauses
Instead of sorting the list multiple times applying order clause one by one in
reverse order, the list is sorted only once using a key composed of all the
order clauses.
An operator is used to reverse the comparison instead of using the reverse
keyword argument of sorted.

Closes #13525
2024-09-18 13:46:10 +02:00
Cédric Krier e0be630f42 Do not export selected records by default when there is no record selected 2024-09-17 18:17:58 +02:00
Cédric Krier 15c468a860 Use dedicated buttons for CSV import and export
Closes #10115
2024-09-17 17:24:36 +02:00
Cédric Krier 4e37fb2039 Keep CSV export window opened
Closes #13521
2024-09-17 16:50:50 +02:00
Cédric Krier dba33cbb64 Prevent modification of the stock lot of stock move done or cancelled
Closes #13520
2024-09-17 15:49:46 +02:00
Cédric Krier 37022fff21 Prevent deletion of stock lot used for stock move
Closes #13519
2024-09-17 15:48:01 +02:00
Cédric Krier 67daf2085b Use correct binary operator for PYSON Greater and Less
Opposite binary operators were commit in b71b2417c4bc.
2024-09-28 16:51:26 +02:00
Cédric Krier 2e9117f6c4 Synchronise PYSON code to represent params
Different versions of the code were commit in e2bb5ac20d22
2024-09-28 16:50:07 +02:00
Cédric Krier c0077445d0 Check that rec_name is searchable on searchable model 2024-09-10 15:40:19 +02:00
Cédric Krier 16136ab2af Add searcher for name of sale reporting per region
Closes #13466
2024-09-10 15:38:44 +02:00
Nicolas Évrard afd48ab128 Add method to the backend to estimate number of rows
Such that each backend can rely on its own statistics.

Closes #13118
2024-09-28 18:02:31 +02:00
Cédric Krier 68ae551752 Add test for fmany2one field 2024-09-19 13:34:15 +02:00
Cédric Krier f147c94118 Fill the source value of fmany2one in create and write methods
We can not rely on the Function field setter to set the value because it may be
too late if the source field is required and for composite key, a partial
update may not be a valid foreign key.

Closes #13522
2024-09-19 13:31:59 +02:00
Cédric Krier 513043dd6a Always validate record synchronously
Closes #13497
2024-09-06 17:47:00 +02:00
Sergi Almacellas Abellana a87099396c Clear employee fields when duplicating invoices
Closes #13471
2024-09-28 15:19:35 +02:00
Sergi Almacellas Abellana da4f361d23 Show complete button on shipped shipments
Closes #13455
2024-08-21 10:32:12 +02:00
Sergi Almacellas Abellana e411698df0 Clear packages when copying shipments
Closes #13454
2024-09-28 14:24:03 +02:00
Adrià Tarroja Caubet 68d4cc4cc7 Save party configuration after replacing vat identifiers
Closes #13387
2024-07-03 14:14:49 +02:00
Cédric Krier 8d9da767bb Do not try to assign currency id to the invoice if the currency has not be found
Closes #13538
2024-09-20 15:52:43 +02:00
Cédric Krier 6bda7c336f Do not format discount with currency if there is no currency
Closes #13531
2024-09-19 19:30:06 +02:00
Cédric Krier 8523552c12 Test invoice of invoice line before using it to compute remaining quantity
Closes #13534
2024-09-19 19:14:31 +02:00
Nicolas Évrard 5cbedc1afd Add tests on PYSON default value 2024-09-27 15:30:47 +02:00
Nicolas Évrard 4a8300f0b2 Handle PYSON default value in Eval for repr
Closes #13533
2024-09-19 16:16:20 +02:00
Sergi Almacellas Abellana 38dbf23c3d Remove unexisting model keyword from msg_size_validation catalan translation
Closes #13516
2024-09-17 10:42:45 +02:00
Cédric Krier 6e798f98fc Test if origin id is greater or equals to 0 before accessing the target record
Closes #13498
2024-09-09 12:46:16 +02:00
Cédric Krier 04f378c503 Add example for connection to PostgreSQL with OS user name 2024-09-24 10:09:46 +02:00
Cédric Krier 3d8fcb97bd Start PostgreSQL URI path with a '/'
Since https://github.com/python/cpython/issues/76960 if the path of the URI
does not start with a '/', the netloc is removed.

Closes #13543
2024-09-24 10:19:57 +02:00
Cédric Krier 19153c0ab5 Do not copy origin of stock inputs and outputs when duplicate productions 2024-09-06 13:32:08 +02:00
Cédric Krier eeb9ba5650 Do not copy origin of stock moves when duplicate shipments
Closes #13496
2024-09-06 13:31:44 +02:00
Cédric Krier 899d9db2ee Format quantities of over shipment warning message with the unit 2024-09-06 10:09:14 +02:00
Cédric Krier 52a03f03df Do not format quantities with digits in over shipment warning message
The rounding, due to the number of digits, may display an confusing message
for which both quantities are the same.

Closes #13495
2024-09-06 10:08:09 +02:00
Cédric Krier 60683dc14d Round up the measurements for package shipping APIs
Closes #13494
2024-09-05 13:47:53 +02:00
Maxime Richez c7177facfe Do not reset non-existent fields on requisition in draft state
Closes #13532
2024-09-19 13:55:32 +02:00
Cédric Krier 62b079225f Remove $ before series in formatted document URL without base URL 2024-09-03 17:55:42 +02:00
Cédric Krier 858757c5d7 Update scenario for the merge of warehouse_location and storage_location in order point
fb59b06d251b merged both fields into a single location field.

#13476
2024-09-24 18:41:47 +02:00
Cédric Krier effe2f74e2 Do not fail to clean fields from missing model from the pool
Closes #13504
2024-09-12 13:17:37 +02:00
Cédric Krier 8f4e926c81 Add setup indexes method to ModelSQL
As __setup_indexes__ is always called on all the ModelSQL once they have been
setup in the pool, this ensures that the definition of indexes is
deterministic.
Also it provides a new hook to customize indexes after the default
definitions.

Closes #13299
2024-08-31 21:13:55 +02:00
Cédric Krier eefdb714b1 Group accounts per company when computing the balance, debit or credit
The Move.query_get relies on the contextual company to filter the lines.
So when computing an amount for an account, its company must be in the context
of the query_get call otherwise no lines will be selected and the amount is
always 0.

Closes #13483
2024-08-30 12:50:29 +02:00
Cédric Krier c47fc79f06 Link stock moves with invoice lines only for the same quantity sign as the order line
When invoice lines are created to correct invoices quantity, it should not be
linked to stock moves because it comes from a stock move being cancelled.

Closes #12972
2024-08-27 13:24:29 +02:00
Cédric Krier 4a14245e10 Ensure effective date is before or after origin or outcome stock moves
When the source of the move is the same as the destination of its origin or
outcomes, the stock move can not be done before those moves.
When the destination of the move is the same as the source of the its origin
or outcomes, the stock move can not be done after those moves.

Closes #12851
2024-08-26 22:53:34 +02:00
Cédric Krier 2dfc489ea0 Add outcome moves to stock move
It contains the stock moves for which the stock move is the origin.
2024-08-26 22:49:51 +02:00
Cédric Krier 6177198b64 Remove favorite management
Since 8976c8708997 user has no write access to any favorites.
But the user can add/remove favorites from the menu entry which is enough for
most of the use case.

Closes #13335
2024-08-27 00:29:10 +02:00
Cédric Krier a38fc477f5 Remove sequence order on menu favorite
Instead we order the favorites of a user by descending id. Such that the last
favorite set is the first from the list. So user can put a favorite back on
top by unset a menu and set it again.
2024-08-27 00:16:24 +02:00
Cédric Krier 50122462ed Display favorite users on menu form 2024-08-27 00:11:50 +02:00
Adrià Tarroja Caubet 9828450d2f Display user on menu favorite list
Closes #13246
2024-08-27 00:04:46 +02:00
Cédric Krier 39b05c1259 Replace order point uniqueness validation by SQL constraints
Closes #13476
2024-08-26 19:02:39 +02:00
Cédric Krier 07eb4dc3f9 Simplify PYSON expression of order point fields 2024-08-26 19:01:42 +02:00
Cédric Krier 564598270f Remove contextual domain on company of order point 2024-08-26 19:00:34 +02:00
Cédric Krier f3565271a7 Merge warehouse_location and storage_location in order point
#13476
2024-08-26 19:08:39 +02:00
Cédric Krier 1be542991a Add test scenario for extended intrastat export 2024-09-22 15:13:38 +02:00
Maxime Richez a7dba58f95 Remove extra columns from Belgian standard intrastat export
Closes #13368
2024-09-22 15:08:43 +02:00
Cédric Krier 1da4e8811e Group numbering account move when posting 2024-08-27 13:35:18 +02:00
Cédric Krier 0d077539bf Store computation of invoice sequence type as cache after numbering
Closes #12080
2024-08-25 13:08:56 +02:00
Cédric Krier b1ba498b87 Group numbering invoices
Closes #12080
2024-08-25 12:42:57 +02:00
Cédric Krier 97ac57e1e9 Group numbering shipments 2024-08-25 12:18:07 +02:00
Cédric Krier 4f4c5e811d Group numbering sale subscriptions 2024-08-25 12:17:52 +02:00
Cédric Krier 0c8a24533c Group numbering sale blanket agreements 2024-08-25 12:17:35 +02:00
Cédric Krier 2daea7a961 Group numbering sales 2024-08-25 12:17:14 +02:00
Cédric Krier 91106c596d Group numbering purchase request quotations 2024-08-25 12:16:59 +02:00
Cédric Krier daabf44acf Group numbering purchase blanket agreements 2024-08-25 12:16:36 +02:00
Cédric Krier cae99922de Group numbering purchases 2024-08-25 12:16:12 +02:00
Cédric Krier 3ee4a0febd Group numbering productions 2024-08-25 12:15:56 +02:00
Cédric Krier 46b6c17595 Group numbering of account assets 2024-08-25 12:15:39 +02:00
Cédric Krier 7bafe98a0c Group generation of stock lot number 2024-08-25 11:02:33 +02:00
Cédric Krier 3d7a9e22f4 Group numbering POS sale 2024-08-25 11:02:05 +02:00
Cédric Krier 5e61338bda Generate all gift card numbers at once 2024-08-25 11:01:36 +02:00
Cédric Krier ead6ea96dd Group generation of BOM's code at creation 2024-08-25 11:00:20 +02:00
Cédric Krier 10949e13fa Group generation of product code at creation 2024-08-25 10:59:44 +02:00
Cédric Krier b468d3e762 Group generation of product category code at creation 2024-08-25 10:59:20 +02:00
Cédric Krier 911861837a Group generation of party code at creation 2024-08-25 10:58:36 +02:00
Cédric Krier 2c87de506c Group numbering account move at creation 2024-08-25 10:58:04 +02:00
Cédric Krier b595b68b79 Support getting many sequences at once
Closes #13474
2024-08-25 11:02:42 +02:00
Cédric Krier 546247b635 Add sequence_nextval function to Database 2024-08-24 15:44:06 +02:00
Cédric Krier f3485d10cf Remove nonexistent sequence from purchase request quotation line view
Closes #13541
2024-09-22 18:21:25 +02:00
Cédric Krier 5dc10a92e1 Do not update multivalue record if the value is not modified
When a ValueMixin is used for many MultiValue fields, they are created with
default values when the first MultiValue is set.
But often the other MultiValue fields are set with the default value so by not
forcing the change, we avoid a unnecessary UPDATE query.
2024-09-22 12:42:42 +02:00
Cédric Krier 445df1ccc5 Cache all the records of ValueMixin without a Many2One
Closes #6984
2024-08-23 17:31:02 +02:00
Cédric Krier 88ed73598b Add __slots__ to ValueMixin 2024-08-23 17:29:52 +02:00
Cédric Krier 8c7034ed1a Display cache name on unique instance assertion 2024-08-23 17:28:43 +02:00
Cédric Krier d8e6b42c58 Save generated avatar in a single call
Instead of saving the avatar on each record which result in an UPDATE query
for each record, grouping the saving of the avatars allows to INSERT multiple
row at once.

Closes #13472
2024-08-23 15:25:16 +02:00
Cédric Krier 07e582e395 Test more attributes in test_view
Closes #13462
2024-09-11 17:51:49 +02:00
Cédric Krier 34d7fd19c4 Make package measurements read-only when closed 2024-09-07 17:57:44 +02:00
Cédric Krier 38bb6cada6 Add sale reporting per promotion 2024-09-05 19:28:51 +02:00
Cédric Krier e495d2dbfa Support POS sale line columns defined before mixin is applied
The mixin is applied after the Model so if another module wants to extend the
method, the method may be in the super class.
2024-09-05 19:27:36 +02:00
Cédric Krier 6451c3f157 Add relate from promotions to sales 2024-09-05 12:39:05 +02:00
Cédric Krier b3e4b7330e Improve label of destination in party replace ask form 2024-09-03 12:00:43 +02:00
Cédric Krier e6e93134e4 Add missing copyright notice to party replace ask form 2024-09-03 12:00:17 +02:00
Cédric Krier 8b8e54df23 Enforce randomness on unspecified value of scheduled task
Closes #13484
2024-08-30 17:52:43 +02:00
Cédric Krier 546e8c92f5 Group links from the same area together 2024-08-29 15:57:31 +02:00
Cédric Krier 6ac7de5098 Update test scenario to use two Many2Many for handling exceptions
#8142
2024-09-20 00:48:48 +02:00
Cédric Krier b3794e1151 Fix documentation about Views menu 2024-09-18 09:44:20 +02:00
Cédric Krier 90f6084c87 Replace menu entries for view configuration by relate on model in the documentation
#12995
2024-09-18 09:43:59 +02:00
Cédric Krier 3651b9d7d4 Replace menu entries for view configuration by relate on model
#12995
2024-08-27 13:14:18 +02:00
Cédric Krier b5f2946b0a Add foreign keys for model to view search 2024-08-27 11:07:36 +02:00
Cédric Krier 2d12c5ce74 Add foreign keys for model and field to view tree state 2024-08-27 10:57:26 +02:00
Cédric Krier a4a97c9369 Rename view id from view tree optional into view 2024-08-27 10:47:25 +02:00
Cédric Krier 5aa6ae9118 Add model and foreign keys to view tree optional 2024-08-27 10:40:49 +02:00
Cédric Krier 885e40d4be Add button to update Braintree customer
Closes #13469
2024-08-22 18:39:53 +02:00
Cédric Krier ee3deba96b Raise error when updating Braintree customer
#13469
2024-08-22 18:36:19 +02:00
Cédric Krier 3abe5f6fc5 Add button to update Stripe customer
Closes #13468
2024-08-22 18:33:39 +02:00
Cédric Krier 8468d694ac Raise error when updating Stripe customer
#13468
2024-08-22 18:33:16 +02:00
Cédric Krier b222ab29f9 Improve exception handling wizard
We use two Many2Many fields to let the user explicitly fill them with the
records to ignore or recreate.
Any cancelled records that have not been added to one of the fields, will stay
in exception to be proceeded later.

Closes #8142
2024-08-21 17:33:14 +02:00
Cédric Krier da0479c619 Compare selection and model of multiselection with the same type
The selection can be a list of tuple or a list of list.
2024-08-27 20:41:31 +02:00
Cédric Krier 44019be668 Display checkbox on multiselection
This removes ambiguity between the multiselection widget and the other
xxx2Many that already has checkboxes.


Closes #13458
2024-08-21 10:57:07 +02:00
Cédric Krier b73e9ca7f1 Toggle the option's selected state of multiselection on mouse down
This provides a more intuitive behavior for user.

Closes #13459
2024-08-21 12:58:30 +02:00
Cédric Krier ac7fdeb988 Add selection checkbox to display selected state of treeview rows
Closes #13457
2024-08-21 12:46:39 +02:00
Cédric Krier 9dc25266b0 Implement a strategy of O(n) to find the best combination of lines to reconcile
The combination implementation is replaced by strategy that search the
smallest remaining from the order lines by removing the last debit or credit
depending on the remaining sign.

Closes #13451
2024-08-19 23:58:41 +02:00
Cédric Krier c384f8e658 Add cache to get_groups of actions 2024-09-12 16:55:53 +02:00
Cédric Krier 098458daa8 Move all access checks of report to check_access method 2024-09-12 16:45:34 +02:00
Cédric Krier 754a868bdf Test execute report without model access 2024-09-12 16:36:42 +02:00
Cédric Krier bb8b4cb235 Test execute wizard without access 2024-09-12 16:36:22 +02:00
Cédric Krier e4bd186091 Test create session for wizard without access 2024-09-12 16:36:04 +02:00
Cédric Krier c59503910a Use proper placeholder to format message about wizard access error
Closes #13507
2024-09-12 16:34:58 +02:00
Cédric Krier 2bce5d7240 Retrieve groups of actions without checking access
Closes #13506
2024-09-12 16:33:03 +02:00
Cédric Krier a75f6b3f9c Test access to report execute 2024-09-12 16:10:29 +02:00
Cédric Krier b32cbb18a9 Check read access of report records
Closes #13505
2024-09-12 16:09:39 +02:00
Cédric Krier 9cec77a88c Add payment amount cache to account move line
Closes #13407
2024-07-22 12:12:07 +02:00
Cédric Krier 60c719d830 Use sub-query clause to filter accounts when searching amount to pay
As the number of accounts should be much smaller than the number of lines, it
is more efficient to use a sub-query than joins.

#13407
2024-07-19 18:06:49 +02:00
Cédric Krier 9f02f354db Add index on payment for join in searcher of amount to pay
#13407
2024-07-19 18:04:50 +02:00
Cédric Krier 2af3624e7d Support JSONB when migrating quality operations
Since 33c7f6e19680 JSONB is used by default for MultiSelection.

Closes #13500
2024-09-11 16:05:50 +02:00
Cédric Krier 3e638151f7 Update only the control with the operations value to update when migrating
Closes #13499
2024-09-11 16:03:19 +02:00
Cédric Krier 1c5e39702c Do not recommend inactive product
Closes #13477
2024-08-26 17:04:05 +02:00
Cédric Krier 75bfe10ab8 Do not check www.iso20022.org URLs
The site seems to block bots.

Closes #13487
2024-09-01 10:38:18 +02:00
Cédric Krier 8a59023e1c Use reference instead of link for documentation about paying an invoice
Closes #13486
2024-09-01 10:34:22 +02:00
Cédric Krier b5cbde9a9a Do not check unece.org URLs
UNECE has added a CAPTCHA in front of their website.

Closes #13485
2024-09-01 10:29:45 +02:00
Cédric Krier 3b139f4cb5 Remove unnecessary parenthesis in cron documentation
Closes #13502
2024-09-12 08:36:06 +02:00
Cédric Krier aac6fbd1b8 Set alias to the balance expression of amount query for budget line
Since 530295147233 AmountMixin.get_amount uses sqlite_apply_types which
requires columns of select query to have an alias to apply the type for
SQLite.

Closes #13491
2024-09-04 01:29:57 +02:00
Cédric Krier 8f96e4af72 Unify email terminology
Closes #13463
2024-08-22 09:52:06 +02:00
Cédric Krier 34d429558b Add cost prefix to all sale shipment cost fields
This improves the naming convention and avoid collisions or
misinterpretations.
2024-08-20 13:13:32 +02:00
Nicolas Évrard aa56b367d2 Raise the original RPCException when handling it in RPCProgress
Closes #13385
2024-09-08 17:25:20 +02:00
Maxime Richez 8b1b2ceefe Do not copy shipment costs when copying sale
Closes #13384
2024-09-08 16:59:17 +02:00
Maxime Richez e151499adc Do not copy cost shipments when copying invoice lines
Closes #13372
2024-09-08 16:56:17 +02:00
Cédric Krier f0b313bfb5 Forbid editing cron when it is running
Closes #13447
2024-08-09 16:21:18 +02:00
Cédric Krier b14bcea3c1 Store last cron durations
Closes #13445
2024-08-09 10:40:18 +02:00
Cédric Krier 4fe02eee89 Do not add extra line for product that is not active nor salable
Closes #13479
2024-08-26 17:02:00 +02:00
Cédric Krier de52bfeeb1 Do not fetch all order points when generating production requests
Instead we load only the order point of the products for which we calculate
the production requests.
2024-08-26 19:24:26 +02:00
Cédric Krier 66112f503b Do not fetch all order points when generating purchase request
Instead we load only the order point of the products for which we calculate
the purchase requests.
2024-08-26 16:39:06 +02:00
Cédric Krier ff46d1f321 Do not copy order points when copying products
Closes #12287
2024-08-26 16:36:18 +02:00
Cédric Krier 767e1cf8d2 Simplify domains and states of commission to use Function fields instead of _parent 2024-08-23 01:17:21 +02:00
Cédric Krier 44e98af02b Use principal with the same company as the product context
Closes #13470
2024-08-23 01:16:26 +02:00
Cédric Krier 7d14ec5830 Remove saved record from the group if the parent record is not saved
This prevents to keep displaying removed records from a Many2Many on a wizard
and optionally on an unsaved record.

Closes #13461
2024-09-08 00:48:45 +02:00
Cédric Krier f350adcee3 Remove "Parties associated to Purchases" menu entry
Closes #6935
2024-08-06 16:51:57 +02:00
Cédric Krier 78d659b48d Remove "Parties associated to Sales" menu entry
Closes #6935
2024-08-06 16:51:41 +02:00
Cédric Krier 12e3c5de7c Use incoterm from invoice line origin if there are no incoterm on stock moves
Closes #13353
2024-09-07 18:31:04 +02:00
Sergi Almacellas Abellana 067ba46713 Round TipoImpositivo key to two decimal places
Closes #13014
2024-06-07 11:44:38 +02:00
Sergi Almacellas Abellana 074c173753 Set routing on production request supplied on sale
Closes #13295
2024-09-07 11:27:39 +02:00
Cédric Krier 1fcd308aa6 Use MatchMixin to get product bom 2024-09-07 11:20:52 +02:00
Cédric Krier a4eb342cd7 Retry to get a connection when an OperationalError is raised
If there are no connection available in the pool, psycopg2 tries to create a
new connection but it may raise an OperationalError if the server close it.

Closes #13475
2024-08-26 09:33:58 +02:00
Cédric Krier 958090cc27 Search on location of inventory when searching the inventory location of lines
Closes #13464
2024-08-22 11:31:10 +02:00
Cédric Krier 3239549b99 Do not include cancelled moves in measurements
Closes #13439
2024-08-05 19:07:01 +02:00
Cédric Krier ea4782565a Store internal measurements for final states of shipments
This prevents the searcher to compute the sum for all the shipments with a
join to all the stock moves.

Closes #13438
2024-08-06 08:24:46 +02:00
Cédric Krier 05b5a79564 Support list as search operand on shipment measurements
Closes #13437
2024-08-05 18:53:34 +02:00
Nicolas Évrard 428825ac6a Use JSONB to store MultiSelection field by default
Closes #11513
2024-09-02 11:25:49 +02:00
Nicolas Évrard 1fbcf70283 Apply the function field searcher transformation before doing any optimization
This allows to use the OR-to-UNION optimization if the searcher returns only
local columns.
2024-06-27 19:15:07 +02:00
Nicolas Évrard 02f054bd26 Check the return type of Function fields searchers 2024-06-28 15:38:46 +02:00
Nicolas Évrard 6512d36bd1 Rely on the tables dict to choose when to apply the OR-to-UNION optimization
The dict changes in size if non-local columns are used to order the search
results.

Closes #13346
2024-06-13 18:57:14 +02:00
Nicolas Évrard a11522ffd6 Externalize the method to apply sorting on order tuples 2024-06-27 18:09:07 +02:00
Adrià Tarroja Caubet ba02686320 Remove redundant product kit scenario testing duplicate
Closes #12880
2024-09-01 12:24:29 +02:00
Nicolas Évrard fab9093188 Fill default values of record in exception in a single loop 2024-08-31 14:01:36 +02:00
Nicolas Évrard 5e3daac1b8 Do not override id as default values of failed read
Closes #13331
2024-08-31 12:19:20 +02:00
Nicolas Évrard e2e520b280 Raise non processed exceptions when they occur during load of records
It is needed to not bypass catch_error decorator.

Closes #13332
2024-08-31 11:34:20 +02:00
Adrià Tarroja Caubet c1f60725c5 Do not copy project works nor progresses when copying invoice line
Closes #13369
2024-08-30 23:57:05 +02:00
Sergi Almacellas Abellana 706bd182c7 Fix typo on web user invalid email error message
Closes #13405
2024-07-19 13:48:36 +02:00
Nicolas Évrard 53bb613564 Implement __deepcopy__ on ImmutableDict
Closes #13408
2024-07-19 19:04:01 +02:00
Cédric Krier 63c6eacc89 Retry JSON-RPC requests on Service Unavailable
Closes #13139
2024-08-07 16:07:18 +02:00
Cédric Krier c3e4788a2b Add timeout option to show processing label 2024-08-07 16:05:43 +02:00
Cédric Krier f3c5f401a3 Search on customer id when searching by record name of Braintree customer 2024-08-22 18:41:43 +02:00
Cédric Krier deb0eb5d78 Search on customer id when searching by record name of Stripe customer 2024-08-22 18:41:31 +02:00
Cédric Krier c8464cd945 Add SQL constraint to ensure only one tax line without period
TaxLine.update_cash_basis relies on having only one line without period per
grouping key so it is safer to make it a SQL constraint.
2024-08-01 23:43:43 +02:00
Cédric Krier ef5d8d53ac Update tax cash only for invoices with payment lines modified
Closes #13433
2024-08-01 23:26:49 +02:00
Cédric Krier 2197eb153c Set only the missing tax amount on the current period
The ratio is computed for all the existing periods with payments, so when
updating for a new period only the part that is not yet on a period should be
modified.

Closes #13433
2024-08-01 23:24:54 +02:00
Cédric Krier 112bfd25c4 Move tax rule pattern from stock move to invoice line
Since fea57ac2ca9d the taxes for consignment invoice lines are computed by the
invoice line and no more by the stock move.

Closes #13432
2024-08-01 16:04:41 +02:00
Cédric Krier a2dfc4455b Refine index definition
- Set low and high cardinality to index usage
- Use Range usage for numerical expression instead of Equality
2024-07-27 18:36:14 +02:00
Cédric Krier 234daa0f99 Add cardinality option to Index Usage
Closes #13426
2024-07-27 17:49:13 +02:00
Cédric Krier 084cd424ce Use more accurate threshold between update or rebuild of MPTT
Closes #13422
2024-07-27 11:55:20 +02:00
Maxime Richez 4244ad305d Use today as planned date for assigned move in stock moves by warehouse
Closes #13417
2024-07-23 16:19:09 +02:00
Cédric Krier 4b32fabdc7 Remove optional from company agent
The type string is supposed to be followed by the company name.
2024-08-06 17:38:10 +02:00
Cédric Krier 01574e6700 Add searcher to summary fields
Closes #13401
2024-07-18 10:12:04 +02:00
Cédric Krier 337dc832e0 Add package weight as shipping method criteria
Closes #13390
2024-07-04 18:25:59 +02:00
Cédric Krier 0f0fe9053c Add warehouse as shipping method criteria for Sendcloud
The available methods may depend on the sender address which comes from the
warehouse.

Closes #13389
2024-07-04 17:10:42 +02:00
Cédric Krier 40732da51d Do not set unit price for production input move in test scenario
Since 23a3a9ed13d7 the unit price must be empty when not required.

Closes #13453
2024-08-21 19:25:16 +02:00
Cédric Krier 684a4e7aa0 Use column name to load field when copying selected rows with not loaded fields
Closes #13443
2024-08-07 19:02:49 +02:00
Adrià Tarroja Caubet 2fce001bcd Fallback to 0 when time series value is None
Closes #13373
2024-08-21 09:05:33 +02:00
Cédric Krier f3188ab177 Do not copy button into clipboard
Closes #13442
2024-08-07 18:58:41 +02:00
Cédric Krier bb533d1a94 Convert to string the action key when the type of x axis is date or datetime
Closes #13440
2024-08-07 17:25:45 +02:00
Cédric Krier 6f7109b317 Consider as stringable domain with empty clause
Closes #13414
2024-08-07 16:34:09 +02:00
Adrià Tarroja Caubet 78f0aae2e2 Use empty string for empty descriptions to construct grouping key
Closes #12952
2024-08-18 14:25:54 +02:00
Cédric Krier d0c5188641 Enforce empty price on stock move when not required
Closes #13382
2024-07-19 13:14:58 +02:00
Cédric Krier e84fec0f84 Close connection when listing or testing PostgreSQL databases
Closes #13441
2024-08-07 17:49:10 +02:00
Cédric Krier be68d7ad69 Use a separate browse list to compute amounts from non cached states
The browse record list loops over the ids of the list to complete the read
batch. So move the record without cache at the end does not prevent to read
the lines of the first records with cache. A separate browse list must be used
for the records without cache to prevent to read lines from record with cache.

Closes #13396
2024-07-27 10:16:51 +02:00
Cédric Krier 48ad8ebb02 Add filtered One2Many fields on sale, purchase and invoice
This allows to create only instances for the lines of type line when only
those lines are needed.
This mainly avoid to compute amount for subtotal lines when accessing the
amount of instance of type line.
2024-06-22 16:50:48 +02:00
Cédric Krier 07f5e3faaa Allow only sale and purchase lines of type line as origin of stock move 2024-06-22 16:51:52 +02:00
Cédric Krier 17476c5844 Return definition translations from the underlying field of Function field
Closes #13356
2024-06-21 18:49:51 +02:00
Cédric Krier 3d9852c008 Set product range index last for stock move
As product clause are reduced ids, they have less chance to be usable than the
date which is often a single value.
2024-06-19 13:23:57 +02:00
Cédric Krier 3ca4615b32 Add location and use product range in stock period cache index
The cache is always filtered by location and the product is often filtered
with reduced ids.
2024-06-19 12:44:33 +02:00
Cédric Krier 9a4051ab8c Add company to the stock move indexes
Almost all the queries on stock move filter by company.
2024-06-18 20:33:41 +02:00
Cédric Krier 6d219e96f3 Do not add period query to the union if there is no period
There is no cache record without period so there is no need to add the query
to the UNION.
2024-06-18 20:32:09 +02:00
Cédric Krier e00fd063c5 Reuse simple COALESCE expression to filter moves after stock period
The expression must be the same as the one in the indexes such that the
indexes can be used to directly filter out all the moves before the period.
This restores the original expression that was changed by e4431b79e409 for the
generic move_date. But by design there can not be any assigned move planned
before the closed period.
2024-06-18 20:29:31 +02:00
Cédric Krier 642c3cd8db Add United Kingdom Unique Taxpayer Reference identifier
Closes #11870
2024-07-18 17:01:15 +02:00
Cédric Krier fc8130e7c4 Raise a warning when submitting complaint for the same origin
Closes #13360
2024-06-25 16:57:02 +02:00
Cédric Krier b41ee38f1a Allow copying move from closed period
Closes #13361
2024-06-26 09:39:26 +02:00
Cédric Krier b1e1034db1 Update documentation of account statement CODA 2024-08-10 15:49:36 +02:00
Cédric Krier 683f94238f Update documentation of account invoice line standalone 2024-08-08 23:25:23 +02:00
Cédric Krier d40c0968ab Update documentation of account invoice secondary unit 2024-08-08 23:28:03 +02:00
Cédric Krier b4ba3202e7 Use moveable types from sale line for Shopify Inventory Item 2023-11-18 00:25:19 +01:00
Cédric Krier 4fd13555f4 Add movable field on sale and purchase line 2023-11-18 00:24:33 +01:00
Cédric Krier 0590d00404 Update documentation of account payment SEPA CFONB 2024-08-08 23:34:44 +02:00
Cédric KrierandDavid Harper 21776a54da Update documentation of account payment Braintree
Co-authored-by: David Harper <dave@libateq.org>
2024-08-08 23:32:38 +02:00
Cédric Krier a3d5c74c87 Update documentation of account invoice history 2024-07-29 23:40:44 +02:00
Cédric KrierandDavid Harper 358ee29fef Update documentation of account invoice correction
Co-authored-by: David Harper <dave@libateq.org>
2024-08-08 23:21:00 +02:00
Cédric KrierandDavid Harper 67bfcde06f Update documentation of infrastructure
Co-authored-by: David Harper <dave@libateq.org>
2024-08-07 23:24:57 +02:00
Cédric Krier a080a11b3e Allow configuring TinyMCE license key 2024-06-25 09:37:31 +02:00
Cédric Krier 23d3ce2edf Merge edit and translate button for HTML widget
Closes #13383
2024-07-02 15:58:15 +02:00
Cédric Krier 5b23e66b10 Manage default value for client selection 2024-07-02 15:57:48 +02:00
Cédric Krier 6b15a5c680 Make radio input of selection unique on the page 2024-07-02 15:58:40 +02:00
Cédric Krier 629c864ff0 Use max_content_length of werkzeug Request
Werkzeug provides a way to restrict request content size which does not rely
on Content-Length header.
2024-05-05 00:18:23 +02:00
Cédric Krier 9f4885629a Do not hide HTTP Exception in RPC protocols 2024-05-05 00:06:09 +02:00
Cédric Krier 20a3f53d2b Do not filter with context lines for aged balance
Closes #12210
2024-07-26 23:25:02 +02:00
Cédric Krier 147be849f4 Prevent reconcile lines using write-off with the same account
Closes #13425
2024-07-27 15:15:55 +02:00
Cédric Krier 87cfa6281c Set popup property to false when opening Many2One in a new tab
There is no callback to reset popup to false in this case.

Closes #13370
2024-07-19 09:13:24 +02:00
Cédric Krier 63d20a42fa Do not run concurrently tests for some modules
Closes #13395
2024-07-14 09:20:25 +02:00
Cédric Krier 4eb4c7de07 Use boolean type to toggle URL button visibility
Closes #13399
2024-07-16 16:19:14 +02:00
Cédric Krier 115b1e0aee Unify message ID when creating invoice tax on non draft invoice 2024-07-27 10:23:30 +02:00
Cédric Krier 04f803bac3 Fix message ID when creating invoice tax on non draft invoice
Closes #13402
2024-07-27 10:22:32 +02:00
Cédric Krier 127c93caaa Select only id from query of ModelSQL.search
Closes #13421
2024-07-26 23:00:05 +02:00
Sergi Almacellas Abellana ab907730e0 Update SII documentation link
Closes #13430
2024-08-01 10:16:01 +02:00
Cédric Krier 4d8805d432 Get product supplier from the same party as the purchase request
Closes #13424
2024-07-27 12:16:41 +02:00
Cédric Krier e90bb34f8b Test if a product supplier was found before using it
Closes #13423
2024-07-27 12:13:12 +02:00
Sergi Almacellas Abellana da5d756f32 Update documentation of stock lot module 2024-07-22 13:07:10 +02:00
Sergi Almacellas Abellana 47392d8a04 Compute lot trace document using sql expression 2024-07-22 12:24:34 +02:00
Sergi Almacellas Abellana d83ed4e37c Show inventory as document on lot trace
Closes #12929
2024-07-30 08:36:27 +02:00
Cédric Krier a272672f9c Update documentation of French account 2024-07-29 17:02:29 +02:00
Cédric Krier 260fa76c83 Update documentation of German Account SKR 03 2024-07-24 12:00:02 +02:00
Cédric Krier 0d6eab8829 Update documentation of account deposit 2024-07-24 12:55:38 +02:00
Cédric Krier bc8ff46a59 Update documentation of European account 2024-07-29 13:31:28 +02:00
Cédric Krier a821fcd7ea Fix label of asset sequence field of configuration 2024-07-24 11:31:05 +02:00
Cédric Krier 85ddcbd92f Update documentation of account asset 2024-07-22 17:24:28 +02:00
Cédric Krier 583082cf7b Fix typos in Belgium account documentation 2024-07-29 13:32:26 +02:00
Sergi Almacellas Abellana a4e568738b Allow admin users to update invoice line description
Closes #13277
2024-05-23 11:14:22 +02:00
Sergi Almacellas Abellana 30d8036d88 Test invoice state on payment clearing scenario
Altougth the amount to paid is always zero the invoice state is updated
when the payment is succeded, so we must ensure it on the test scenario
2024-04-17 12:46:11 +02:00
Adrià Tarroja Caubet f780ea15d7 Simplify statements validation messages 2024-05-21 10:11:05 +02:00
Adrià Tarroja Caubet 0ccab09c1d Clarify removal of paid invoices affects only draft statements
Closes #12957
2024-02-14 11:35:19 +01:00
Cédric Krier e8acbc6a8c Index invoice and shipment state partially on their own state
Closes #13365
2024-06-26 18:37:26 +02:00
Cédric Krier f5d32c78b6 Do not update indexes if not explicitly requested or modules are not updated
Closes #13400
2024-07-22 18:22:29 +02:00
Cédric Krier e3172b2dc5 Check every rows are selected to keep global selection checked
Closes #13393
2024-07-05 15:15:28 +02:00
Cédric Krier c058c1791d Update selection after new rows has been added
The update selection method check the number of row in tbody.

Closes #13392
2024-07-05 10:36:07 +02:00
Cédric Krier 61c57bb841 Send package weight in kilograms to Sendcloud
Since a3e3a447615f, the unit of total weight for a package can be configured.

Closes #13391
2024-07-04 18:32:56 +02:00
Cédric Krier e08a8ba208 Remove horizontal padding to panel body of tabs
This provide more horizontal spaces on small screen.
2024-06-19 20:13:48 +02:00
Cédric Krier eb69b1385b Limit width of tab-domain to the screen width
On small screens when the number of tab domain overflow, it is better to have
the scrollbar only on the tab domain element.
2024-06-19 20:12:45 +02:00
Cédric Krier 31e17281e2 Do not display responsive scrollbar on small screen
The responsive tables have never a scrollbar so it is better to free the
vertical space.
2024-06-19 20:11:01 +02:00
Cédric Krier bce384083e Do not set column-reverse for panel body of tabs on small screen
We can rely on the implementation of 3742dd6340ec to have the treeview to fill
the available vertical space.

Closes #13349
2024-07-12 17:38:49 +02:00
Cédric Krier 625abc476f Update documentation for Belgian Account 2024-07-23 17:35:07 +02:00
Cédric Krier e047988aff Return null for empty MultiSelection key of Dict widget
This is more consistent with the other widgets.
2024-06-30 01:57:44 +02:00
Cédric Krier df1fdfaf0d Do not store empty list for MultiSelection key of Dict
Closes #13376
2024-06-30 01:55:55 +02:00
Cédric Krier c94900b2de Do not iterate over MultiSelection value of Dict key if it is null
Closes #13375
2024-06-30 01:53:24 +02:00
Cédric Krier bfdd8924a3 Do not allow to mutate dict value
A copy of the value is always returned so if it is modified it does not modify
the internal value of the record.
So to update Dict value, a new dictionary must be set on the field.

Closes #13374
2024-06-30 01:49:42 +02:00
Cédric Krier 8b3d5e603b Improve tax identifiers test 2024-07-18 17:14:59 +02:00
Adrià Tarroja Caubet 06778fb081 Fix internal for Uruguay Tax Number
Closes #12941
2024-07-18 16:38:51 +02:00
Adrià Tarroja Caubet 2ae871ae9f Add more tax identifiers
Closes #12940
2024-07-18 17:12:02 +02:00
Adrià Tarroja Caubet 2ce93f01d9 Test if tax identifiers are also declared as identifiers 2024-05-21 10:01:52 +02:00
Cédric Krier 55acbadcf2 Keep retrying on 429 error from Sendcloud
Closes #13388
2024-07-03 19:46:50 +02:00
Cédric Krier 04ce1a0456 Add option to create direct debit based on balance
Closes #13084
2024-03-08 18:45:37 +01:00
Cédric Krier 935299cd64 Always require a party for reception of direct debit 2024-03-08 18:26:32 +01:00
Cédric Krier d1c62a0727 Add searcher for payment currency of account move line 2024-03-08 18:23:26 +01:00
Cédric Krier 2eeb55a107 Create payment only for the first matching party reception of direct debit
Closes #13086
2024-03-08 18:22:37 +01:00
Cédric Krier fcace41a1b Included nested fields when searching invoice payments on move line
Closes #13377
2024-06-30 13:04:45 +02:00
Cédric Krier 009c7afa12 Set shipment cost currency to company currency when allocate account shipment cost
Closes #13367
2024-06-27 11:56:05 +02:00
Cédric Krier 6996b5ad30 Test taxes are set in sale converted from opportunity 2024-06-25 18:45:28 +02:00
Cédric Krier ee42028769 Set company in the context of product from opportunity line
Closes #13297
2024-06-25 18:44:57 +02:00
Cédric Krier 13c4ed1c0b Sum only invoice lines of type line to update untaxed amount
Closes #13357
2024-06-22 16:46:54 +02:00
Cédric Krier ca69c82273 Add Stripe pull button to payment
This may be useful if events have been missed.
2024-06-21 14:29:26 +02:00
Cédric Krier 90fbb99ed2 Do not update payment if amount or status from Braintree has not changed
If payment create clearing moves, this avoid to cancel and recreate account
moves unnecessary.
2024-06-21 14:32:15 +02:00
Cédric Krier 45ca2b0343 Test account payment Stripe for refund failure
#13355
2024-07-14 02:18:38 +02:00
Cédric Krier 52404aba1a Update payment using stripe charge object on refund failure
The refund may fail after the charge.refunded has been triggered.

Closes #13355
2024-06-27 17:32:22 +02:00
Cédric Krier 653c50f2a6 Add property to retrieve stripe charge object 2024-06-21 14:16:32 +02:00
Cédric Krier f0e2696b9a Allow stripe refund to transition from succeeded to failed
For asynchronous charge the refund may fail after being succeeded.

#13355
2024-06-21 14:26:49 +02:00
Cédric Krier 4216dfdc7b Do not always update stripe amount with amount received on payment intent succeeded
The amount received is never updated once the payment intent has been created.
So we should update the payment amount only if the amount received is less
because the payment amount may have been already reduced by refunds.

#13355
2024-06-21 14:19:20 +02:00
Sergi Almacellas Abellana 0c5707f0fe Unify reopen usage 2024-07-13 19:54:41 +02:00
Maxime Richez b8d9b593a8 Remove default planned date on supplier shipment
Closes #12966
2024-07-13 19:31:46 +02:00
Sergi Almacellas Abellana a65866e59b Add reference and warehouse fields to the list of purchase request quotations
Closes #13021
2024-07-13 13:52:53 +02:00
Cédric Krier 6e2c910539 Fix typo in numeric field comments 2024-07-13 15:35:33 +02:00
Cédric Krier d78dfc75a8 Cast numeric columns for order expression on SQLite
Closes #13397
2024-07-13 15:35:01 +02:00
Sergi Almacellas Abellana 0bcfb7b427 Add warning to backup database before update 2024-07-13 12:14:29 +02:00
Cédric Krier 508ca25607 Update UPS shipment API to v2403
It is the only valid values for now even if v1 seems to still work.
2024-06-17 10:51:59 +02:00
Cédric Krier 61c81e54e8 Use JSON error messages on response with error status from UPS
Closes #13341
2024-06-17 10:50:26 +02:00
Cédric Krier 19fc61e696 Commit reaadonly transaction before starting the new transaction for indexes
The readonly transaction used to load modules may have read lock that dead
locks the new transaction to create indexes.

Closes #13347
2024-06-18 20:42:13 +02:00
Cédric Krier 85a5a09a53 Fill models with indexes when database is not updated but indexes
Closes #13347
2024-06-18 20:41:06 +02:00
Cédric Krier 9424176aa3 Expand vertically document object as much as possible
Only a minimal height is required.
2024-07-11 10:20:09 +02:00
Cédric Krier d47992cdab Set bottom border on attachment preview only on xs
It is only on xs that the preview is put on top and thus requires a
separation.
2024-07-11 10:18:51 +02:00
Nicolas Évrard 93a95bbf4e Allow resizing the attachment preview panel
Closes #13234
2024-07-11 10:21:11 +02:00
Cédric Krier 5823bce6cf Add tools to apply types to SQLite select queries 2024-07-04 08:45:19 +02:00
Cédric Krier f5e33378be Set type declaration in column names of SQLite only on top-level query
Closes #12532
2024-06-30 16:25:41 +02:00
Cédric Krier 2144389096 Do not try to set focus to <td> without child
Closes #13394
2024-07-09 10:18:30 +02:00
Cédric Krier 29291130fc Use identifier code to fill siren company substitution
Closes #13366
2024-06-28 09:27:25 +02:00
Juan Jose Pablos c18c390973 Update documentation of notification email 2024-07-09 22:29:47 +02:00
Cédric Krier d95bf48e93 Allow Account group to run open type wizard
As account group has only read access to account type, it needs to be given
access to the open type wizard to run it.

Closes #13342
2024-06-17 15:40:28 +02:00
Cédric Krier a7b64d2afd Set default value for web shop on product image to False 2024-06-14 10:03:33 +02:00
Cédric Krier 3360de4a98 Match product image against None
Closes #13337
2024-06-14 10:03:07 +02:00
Juan Jose Pablos fbe87b99c8 Replace link to configuration document by ref to labels 2024-07-08 19:00:26 +02:00
Cédric Krier 376dbeddb5 Clear cached amount when resetting to draft sale, purchase and purchase requisition
Closes #13296
2024-06-13 12:34:50 +02:00
Cédric Krier 09985de225 Always clear cached amount before storing it
This is safer as if for some reason the cache is filled with wrong data, the
values will be fixed instead of keep propagating it.
2024-06-13 12:32:08 +02:00
Cédric Krier 347a161353 Do not copy cached amounts of sale, purchase and purchase requisition
Closes #13336
2024-06-13 12:11:51 +02:00
Cédric Krier 2049c0f376 Manually handle hiding of bootstrap Modals in search
Closes #13330
2024-06-11 09:41:46 +02:00
Cédric Krier 8141bec786 Use search text when clicking on find button of search window
Closes #13329
2024-06-11 09:33:47 +02:00
Cédric Krier 79901931fc Use decompress method from gzip 2024-05-04 18:46:01 +02:00
Cédric Krier 5af12a226e Compress RPC responses
Closes #13235
2024-05-04 18:43:27 +02:00
Cédric Krier 0807b42e87 Do not run menu action if the menuitem is disabled
The click event can still be triggered by the shortcut or event by clicking on
the disabled menuitem. So the callback must not run the action if the menuitem
is disabled.

Closes #13326
2024-06-10 18:01:03 +02:00
Cédric Krier 72e5a47ea2 Improve label of split shipment wizard 2024-06-25 12:28:55 +02:00
Cédric Krier ebad3b8faf Add tests to carrier module 2024-07-07 14:26:34 +02:00
Cédric Krier 6ef34db291 Do not compute carrier price without a company in the context
Closes #13364
2024-06-26 13:37:01 +02:00
Cédric Krier cc08b1c624 Save template before using it in product image attribute tests
This prevents the warning about unsaved relation record.

Closes #13380
2024-07-01 13:23:16 +02:00
Cédric Krier 3b5bb8f76a Save records before using them as many2one in Vue Storefront web shop
This prevents the warning about unsaved relation record.

Closes #13379
2024-07-01 13:09:28 +02:00
Cédric Krier 396ebaf2af Test if main_menu_screen is filled before using it when destroying wizard dialog
Closes #13363
2024-06-26 13:07:53 +02:00
Cédric Krier f0b1c9d590 Align label in the middle of image 2024-06-25 12:28:11 +02:00
Cédric Krier 575d1d0132 Change _changed_values and _save_values properties to method
Closes #13317
2024-06-09 19:54:52 +02:00
Cédric Krier 95f9a21426 Add default timeout to read and export_data RPC entries
Closes #13218
2024-04-26 12:30:49 +02:00
Cédric Krier bd9be5aace Add transaction timeout to export data route
Closes #13217
2024-04-26 12:30:11 +02:00
Cédric Krier b47072feb8 Add timeout option to with_transaction wrapper 2024-04-26 12:29:34 +02:00
Cédric Krier bff6733ca7 Set focus on search entry after search
Closes #13328
2024-06-11 09:29:57 +02:00
Nicolas Évrard 84f987b673 Execute user login's actions sequentially
Closes #13074
2024-03-05 16:37:41 +01:00
Nicolas Évrard eecda83f1d Add a promise to denote the state of the wizard 2024-04-09 18:48:08 +02:00
Nicolas Évrard c8a2e7ad7a Return a promise in Sao.Action.exec_report 2024-03-05 16:36:00 +01:00
Cédric Krier e59a24de94 Fix test_document_from_inbound_email of document_incoming
Closes #13319
2024-06-09 17:41:59 +02:00
Cédric Krier 40af8dc4ee Fix test_assign_try_with_lot of stock_lot
Closes #13318
2024-06-09 17:29:22 +02:00
Cédric Krier 948c375e59 Save party before saving bank created from BIC
This prevents the warning about unsaved relation record.
2024-06-09 15:03:51 +02:00
Cédric Krier 390310d7de Do not save invoice sequence in set_invoice_sequences tests
This prevents the warning about unsaved relation record as the fiscal year is
not yet created.
2024-06-09 14:58:34 +02:00
Cédric Krier 5fa6e8533b Add missing documentation of ExtensionTestCase 2024-06-09 12:45:58 +02:00
Cédric Krier 36f3adca1e Add TestCase to filter warnings with TEST_PYTHONWARNINGS 2024-06-09 12:45:39 +02:00
Cédric Krier 685411cf9a Catch and test warning for using an unsaved relation record 2024-06-08 17:37:35 +02:00
Cédric Krier 11ef2ba54c Replace deprecated datetime.utcnow usage
Closes #12647
2024-06-15 11:01:41 +02:00
Cédric Krier 951001cd35 Remove warnings for unsupported features of SQLite table handler
There is no need to raise warnings as the API is called by ModelSQL and the
user has not control over it.
2024-06-08 17:21:59 +02:00
Cédric Krier 5b253450a3 Fix test_set_key of FieldDictTestCase
Closes #13314
2024-06-08 17:19:40 +02:00
Cédric Krier 5b17010a9f Replace default sqlite3 adapters and converters
The defaults are deprecated since Python 3.12

Closes #13313
2024-06-08 17:18:03 +02:00
Cédric Krier 30fa01a012 Use a dedicated page on product form for web shop fields 2024-06-06 12:21:10 +02:00
Cédric Krier a7d4ae446a Add test scenario to inventory count with lot 2024-06-30 19:16:48 +02:00
Sergi Almacellas Abellana 1ab12f3e87 Display lot of counted inventory line
Closes #13083
2024-06-30 19:16:05 +02:00
Nicolas Évrard 68360837be Use a grid to display dictionaries
Closes #13120
2024-06-30 01:39:08 +02:00
Cédric Krier 5a6017afdc Disable user select for any theme 2024-06-03 17:00:50 +02:00
Cédric Krier 66b4a3a2a8 Make message dialog content selectable
Closes #7560
2024-06-03 17:29:16 +02:00
Cédric Krier 01c1966ba8 Add relate from sale and purchase lines to stock moves and invoice lines 2024-06-03 13:14:03 +02:00
Cédric Krier 2244c964fe Add "Stock" prefix to stock move labels 2024-06-03 10:48:34 +02:00
Cédric Krier 71c4f6e185 Add configuration for report convert command
Closes #13292
2024-05-31 19:35:02 +02:00
Cédric Krier 01aa71bf3d Remove "include list of currencies" from documentation 2024-06-01 19:01:14 +02:00
Cédric Krier 761e47c825 Update links in Chorus Pro documentation 2024-06-01 10:54:29 +02:00
Cédric Krier 8f68b65879 Wait for expected inventory levels number in test scenario
Closes #12794
2024-06-23 08:35:43 +02:00
Cédric Krier 29cf9e102a Allow payment with amount equals to 0
This is needed for integration with some services for which a payment fully
refund is updated with an amount of 0.

Closes #13351
2024-06-21 14:39:25 +02:00
Cédric Krier 59b74452e6 Add test scenario for reconciliation of empty lines on posting 2024-06-28 01:00:22 +02:00
Richard Vong e48510503f Do not try to reconcile posted lines without debit/credit but with second currency amount
Closes #13293
2024-06-28 00:59:01 +02:00
Cédric Krier cd1c57dddf Use UPSERT to update cache 2024-06-23 08:39:41 +02:00
Cédric Krier c1310f677a Add unique constraint on cache name 2024-03-30 16:13:30 +01:00
Cédric Krier 7dfd4292e9 Remove extra query that retrieve cache timestamp twice 2024-03-30 16:09:07 +01:00
Cédric Krier c028397262 Try to update next call of skipped cron tasks 2024-05-08 10:07:09 +02:00
Cédric Krier a84cb45141 Compute next call of cron task using actual now
If the cron task took more time then the repeating delay, it is not useful to
reschedule it in the past.
2024-04-03 16:30:46 +02:00
Cédric Krier 339ee1867d Use process pool to run cron
Closes #13053
2024-04-03 16:28:22 +02:00
Cédric Krier f9b50f16bf Lock only running cron record
A single transaction is used to lock, run and update the cron record.
Only the cron run is locked so other cron processes could run other cron
tasks.
When fixing transaction, we ensure that the same cron record is selected again
otherwise we restart with an empty transaction setup the selection process.
If a cron record fails to execute, it is ignored from the selection for this
run.
The run stops once there is no cron record that can be selected.

Closes #13158
2024-05-07 19:44:35 +02:00
Cédric Krier 3369d98de2 Add option to skip tests that require network 2024-05-20 12:20:00 +02:00
Cédric Krier 822e716070 Add language support per field in export data
Closes #13266
2024-05-19 19:58:16 +02:00
Cédric Krier e98b1f2559 Add translated descriptor for Char and Text fields 2024-05-18 19:06:00 +02:00
Cédric Krier 76b60d19ec Do not close import window on error
Closes #8202
2024-05-27 16:32:58 +02:00
Cédric Krier 7e0caccd67 Include row and column in error message when importing data 2024-05-27 16:24:47 +02:00
Cédric Krier 922925c151 Remove support for :id suffix in import data
Closes #13189
2024-05-27 16:25:33 +02:00
Cédric Krier db97bdca70 Raise user error when import data with wrong number of columns 2024-05-27 14:54:03 +02:00
Cédric Krier 57e59ac67d Add secondary unit to purchase amendment
Closes #13256
2024-05-21 18:56:20 +02:00
Cédric Krier bbd5e521f3 Add secondary unit to sale amendment
Closes #13256
2024-05-21 18:56:03 +02:00
Cédric Krier 6ffe8bcea0 Enforce secondary unit rate and factor on sale and purchase line 2024-05-21 16:30:46 +02:00
Cédric Krier 77363b377f Optimize and simplify search query for invoice amount
There is no need to include record rule clause in the searcher.
And the grouping can be done only once.
2024-04-28 17:28:58 +02:00
Cédric Krier 1c9740fd2f Do not use a Form to get the menu Screen
When the screen is created by a Form, it fetches the resources when a record
is selected. But this is not needed for the menu as it has no menu bar.
2024-05-10 16:32:31 +02:00
Cédric Krier 43599f9927 Use SQL query to compute reconciliation lines of invoices
Closes #13260
2024-05-16 16:06:49 +02:00
Cédric Krier c54d3e89ec Extract SQL query for lines to pay of invoices 2024-05-16 14:47:22 +02:00
Hartmut Goebel dd01b75956 Update documentation of LDAP authentication 2024-06-20 13:13:17 +02:00
Cédric Krier 7acc539f85 Do not test network client in unittest
The services are not reliable enough to be tested as unittest.

Closes #13264
2024-05-22 09:20:01 +02:00
Cédric Krier b00015d85a Do not update shipment cost method to Null if it is already Null
The migration update the sales already updated each time the sale is
registered. On large table, this can be slow.
2024-06-13 17:26:01 +02:00
Cédric Krier e58215ae2b Set focus to the first focusable child of the cell
Closes #13327
2024-06-10 20:04:39 +02:00
Cédric Krier 31653d99a3 Disable input and buttons on form view when there is not record displayed
The input icons are replaced by button so they can be disabled.
The search filter is hidden in xxx2Many widgets when there is no record to
display.

Closes #13287
2024-06-05 18:16:03 +02:00
Cédric Krier 74d3d230bd Fix python formatting for missing account revenue message in Spanish
Closes #13322
2024-06-10 17:31:00 +02:00
Cédric Krier 1d906921b3 Eager load other fields only if they share the same views
We do not want to eager load fields that are only set on form view even if it
cost a second read for the fields that are only on the list view.

Closes #13281
2024-05-26 15:55:09 +02:00
Cédric Krier 03408fe463 Do not re-select all records if current record is empty and selection is checked
This happens when the current record is removed when it is deleted.

Closes #13325
2024-06-10 17:23:18 +02:00
Cédric Krier bac3536b4c Store readonly attribute on Screen with a default value
Otherwise the attribute value may be undefined instead of being a boolean.

Closes #13324
2024-06-10 17:17:27 +02:00
Cédric Krier 342d5eb6ed Always update state of delete and undelete buttons in window form
Closes #13323
2024-06-10 17:13:03 +02:00
Cédric Krier 26896b5da6 Use only the readonly from group in Window Form
Since 12e08efd3872 the readonly of the Screen depends on the selected records.
But we still wants to save the modification from the Window Form even if a
deleted record is selected.

Closes #13321
2024-06-10 17:09:41 +02:00
Cédric Krier c86bfec305 Set 100% width to input-group of form-text and form-richtext
Otherwise if the widget is not translated, the textarea does not expand.

Closes #13320
2024-06-10 17:02:56 +02:00
Cédric Krier 47e0befb92 Set EV_BACKENDS_DIR to the backends directory of evince
Closes #13309
2024-06-07 20:48:09 +02:00
Cédric Krier 5c9e6c44eb Add logging when Evince can not open a document 2024-06-07 20:45:33 +02:00
Cédric Krier fe432dab2d Do not fail to remove temporary files at exit
On Windows PermissionError may be raised.

Closes #13308
2024-06-07 20:44:51 +02:00
Cédric Krier f065ef4ff9 Use file from the Binary field to display document
On Windows the file used to create the Evince document must be kept after the
initialization.
Also reusing the file cache mechanism of the Binary field, prevents to create
temporary files on each call of display.
Evince document needs to have the proper extension to be sure to load the
proper backend. So the cache file must be retrieved with the requested
extension.
And finally we use Document.factory_get_document_full so if leading with the
filename extension does not work, it will try to guess from the data.

Closes #13307
2024-06-07 20:42:40 +02:00
Cédric Krier 6fc993f82a Always use an offset of 2 to update visible cells
View Tree has always two table header for the selection state and the tree
menu.
2024-06-19 16:16:04 +02:00
Cédric Krier 801d087411 Replace to_hide and to_show jQuery object with .add result
jQuery.add returns a new jQuery object from the union and do not modify the
existing ones.
2024-06-19 16:14:55 +02:00
Cédric Krier 8903615bfa Find table cell from tbody
View Tree does not have a body attribute.
2024-06-19 16:12:16 +02:00
Nicolas Évrard 30eb297753 Use move_to_end to update key recency of memory cache
This is faster than popping and setting the item.
2024-06-19 00:40:38 +02:00
Cédric Krier acaeaf1eff Do not correct normalized delta when start date is February 29
Closes #13310
2024-06-08 12:10:40 +02:00
Cédric Krier 6e4f8a09c3 Set custom string on label of the form instead of field 2024-06-03 13:24:19 +02:00
Cédric Krier f0936ef64c Ignore production request when searching for draft production moves in the past
Closes #13269
2024-05-27 23:46:47 +02:00
Cédric Krier ac75f5f371 Add searcher to production of stock move 2024-05-27 23:45:48 +02:00
Cédric Krier 98f057e41b Apply access rules when searching for draft production moves in the past
Closes #13284
2024-05-27 23:34:31 +02:00
Nicolas Évrard be0ea9e6b7 Update visible columns at the end of tree's redraw
Updating the visibility of all the cells at once allows the browser to compute
the style and layout once instead of once per row.

Closes #13200
2024-04-04 20:56:21 +02:00
Sergi Almacellas Abellana 732af53046 Replace Accounting Party by Accounting group
There is no need to use a dedicated group for party fields as it can use the
Accounting group
2024-05-13 14:11:20 +02:00
Cédric Krier 09976345fe Convert image in RGBA to add background using alpha composite
Closes #13316
2024-06-09 01:49:57 +02:00
Cédric Krier 347a816156 Do not include WHERE clause to constraint if it is None
Closes #13315
2024-06-09 01:45:21 +02:00
Cédric Krier dfb3bc9337 Test Shopify fulfillment status to be fulfilled when backorder is cancelled
Shopify has changed the fulfillment status when products are removed from the
order.

Closes #13221
2024-06-08 13:29:30 +02:00
Cédric Krier 4466c4305a Search records for calendar view using date value if the field is a date
Since bb3cb0d30686, it is not allowed to use a datetime value on a Date field.


Closes #13300
2024-06-05 19:32:50 +02:00
Cédric Krier db9becfd6d Exclude records without dtstart or dtend from calendar view
Closes #13302
2024-06-06 10:01:55 +02:00
Cédric Krier 36dee8a853 Bind callback to the attachment window when dropping file as attachment
Closes #13182
2024-06-05 18:38:58 +02:00
Cédric Krier bec3fff190 Handle invalid email in trytond-admin command
The email value is validated by the command line parser.
And the interactive input loop until a valid email is entered.

Closes #13294
2024-06-02 11:38:06 +02:00
Cédric Krier d011e4149e Add export translations option to trytond-admin
Closes #13231
2024-05-01 20:08:15 +02:00
Cédric Krier 6f349d7e7f Do not test file exists when opening it
The file_open tools may be used to create a file so it may not yet exist.
Also io.open will raise the proper exception if the file can not be open.

Closes #13230
2024-05-01 20:03:17 +02:00
Cédric Krier 928ca1dae1 Use empty string as fallback value for module path
The module path is used later to join path so it must be a string.

Closes #13229
2024-05-01 19:59:17 +02:00
Cédric Krier e45ff0098b Do not rely on locale from context as fallback format for date
Since 6c5f4d760e54, the locale key is removed from the RPC context so the
fallback for the date format must come from the translation utilities.

Closes #13290
2024-05-31 11:13:06 +02:00
Cédric Krier 8f49454f08 Test if main menu screen is not empty before using it in callback
The callbacks could be triggered after the main menu screen has been removed.
2024-05-28 16:51:24 +02:00
Cédric Krier be9cc4daee Test importing translated data 2024-05-22 18:08:12 +02:00
Cédric Krier a976b965d8 Do not convert to False when importing translated translated which is empty
Closes #13276
2024-05-22 18:07:32 +02:00
Cédric Krier bffc2c6ac5 Add test case for email tools 2024-06-07 09:56:33 +02:00
Cédric Krier 2f26c7c067 Allow formatting non ASCII email address
Closes #13241
2024-05-07 16:57:59 +02:00
Cédric Krier 5f934d2f30 Fallback to normalized email if there is no ascii available
Closes #13241
2024-05-07 16:56:51 +02:00
Cédric Krier b3fd5364dc Document that _rec_name must point to a Char field 2024-05-22 15:33:55 +02:00
Cédric Krier 525dd32ffb Test every kind of getter of Function field 2024-05-20 23:17:20 +02:00
Cédric Krier 530f6cbf7f Return proper dictionary structure for instance getter with names
Closes #13136
2024-05-20 23:16:39 +02:00
Cédric Krier 307e9f73f5 Do not rely on assigned quantity to supply on stock first
Closes #13279
2024-05-24 15:20:43 +02:00
Cédric Krier 25d0cb7787 Do not commit readonly transaction even with channel
Even if the backend allows NOTIFY query on readonly transaction, it is strange
to commit readonly transaction because the backend may not enforce the
readonly.
Also commit performs other actions that may not be wanted like commit
datamanager or clear cache.
A procedure that requires to perform a NOTIFY should have a non-readonly
transaction.

Closes #12542
2024-05-23 14:22:42 +02:00
Cédric Krier f0f2294d2c Use a readonly transaction to load module without update
Closes #12542
2024-05-23 14:18:51 +02:00
Cédric Krier bf70e12f8f Remove print statement when catching check vies exceptions 2024-05-23 14:23:52 +02:00
Cédric Krier b708f5ff48 Put textarea and richtext under an input-group
If the widget is translatable, the translate button is an input-group-btn
which must be under the same input-group as the principal input.

Closes #13238
2024-05-14 19:44:39 +02:00
Cédric Krier bcf87266c3 Allow web_shop as key for product image
Closes #13258
2024-05-14 15:25:22 +02:00
Cédric Krier 441abbfbf8 Delete purchase request when the product is deleted
Closes #12917
2024-05-11 11:58:40 +02:00
Cédric Krier b8c759594e Clear translations with invalid placeholders 2024-05-01 11:18:06 +02:00
Cédric Krier 91e95c52b5 Always return a promise from _update_completion
Closes #13280
2024-05-25 20:40:56 +02:00
Cédric Krier 9e759e9604 Sort posted lines to reconcile at last by party
The lines may or may not have a party depending on the account.
So the order key must avoid compare party instance with None value.

Closes #13268
2024-05-21 10:12:46 +02:00
Nicolas Évrard 0cd6aaf298 Sort X2M fields according to the order
Since 40615f3e3e8e .browse calls have been replaced by a .read one but .read
does not respect the order of the ids.

Closes #13288
2024-05-30 19:30:14 +02:00
Cédric Krier 660eafe90c Add test scenario for production split 2024-05-20 20:35:26 +02:00
Cédric Krier e1a63d4c39 Rename uom to unit in production split wizard
Closes #13263
2024-05-20 20:35:07 +02:00
Cédric Krier 3359b76579 Search tax identifier from the invoice party identifiers
Closes #13265
2024-05-20 14:26:21 +02:00
Adrià Tarroja Caubet d590139f93 Update TinyMCE to version 7
Closes #8683
2024-05-07 00:29:45 +02:00
Cédric Krier af50a2fd64 Insert new modules in ir_module table before registration
The ir.model* Models have foreign key constraint for the module column.

Closes #13244
2024-05-10 23:45:00 +02:00
Cédric Krier 76190b9e9d Remove NOT NULL from create_uid and create_date in PostgreSQL init SQL
Those fields are not required.
2024-05-10 23:23:13 +02:00
Cédric Krier 2bc7969652 Fallback to the default language if it does not exist for product data feed
This avoid to fill the cache with unsupported languages.
2024-04-16 18:33:38 +02:00
Cédric Krier cccdc1f1f7 Add scheduled task to update cached feeds
On large data set, generating the feed may take too long for an HTTP request.
So in this case user may want to update the cache with a scheduled task so the
requests are always answered directly using the cache.
2024-04-16 18:43:37 +02:00
Cédric Krier 215834f78f Add code to production BOM 2024-05-14 08:58:04 +02:00
Cédric Krier c1f3ddcd10 Unify logging message of bus 2024-05-09 17:01:28 +02:00
Cédric Krier a5fcf23ad0 Save images with 300 dpi
Closes #13206
2024-04-20 12:29:34 +02:00
Cédric Krier cd41ab4c5e Always convert image to RGB format
Closes #13206
2024-04-20 12:26:21 +02:00
Cédric Krier 3800523d11 Move language field to the party header form 2024-05-09 12:07:48 +02:00
Cédric Krier dea9cea516 Add description for image
Closes #13226
2024-04-30 12:58:04 +02:00
Nicolas Évrard d3e9f3ac5f Use read to fetch reverse field value of x2M field in field get
This avoid to create instances for origin or target just to get their id.

Closes #13245
2024-05-25 12:59:45 +02:00
Nicolas Évrard 56d580ae5b Optimize instance creation in ModelStorage.__getattr__
The kwargs and pysoned context are put in a cache to avoid rebuild them for
each similar instance.

Closes #13245
2024-05-25 12:50:02 +02:00
Nicolas Évrard 4df7a36de3 Set the language when parsing XML files 2024-04-22 10:42:28 +02:00
Nicolas Évrard 370e2f3b41 Use English when fetching records from the database
Closes #13204
2024-04-18 19:00:34 +02:00
Nicolas Évrard 907bcafd64 Fix typo in the name of the filesystem caching class of the XML parser 2024-04-19 15:40:23 +02:00
Cédric Krier 8e9d6712c9 Use sales field to relate from sale to invoices 2024-05-02 18:47:41 +02:00
Cédric Krier 97796eacd1 Use purchases field to relate from purchase to invoices 2024-05-02 18:47:16 +02:00
Cédric Krier 5b9cc03243 Add python-format flag to PO files 2024-05-01 19:13:04 +02:00
Cédric Krier ed5f91a480 Forbid payment of zero amount
Closes #13031
2024-05-05 10:06:07 +02:00
Cédric Krier 196cfbeb0c Do the marketing record activity in the queue
This avoid to block the cron for a long period if there is a lot of record
activities to process.
In case of failure the record activities will be retried. And in case of long
delay in the queue, the record activities will not be processed twice thanks
to the transition filter of the workflow and the lock when updating state
field.

Closes #13146
2024-03-30 12:03:30 +01:00
Cédric Krier 5035063b35 Check validity of description of move template 2024-05-10 16:06:31 +02:00
Cédric Krier ecd252e48b Raise user error when description of move template can not be formatted
Closes #13240
2024-05-10 16:05:33 +02:00
Cédric Krier 06270e6a7a Use decimal 0 without digits as default value
If the digits of the field is 0, than using '0.0' trigger the validation error
introduced by 2be02f249a1d.

Closes #13197
2024-04-30 19:15:44 +02:00
Cédric Krier 5bc94899c7 Fill tax rule pattern of web shop with countries
When account_tax_rule_country is activated, the pattern must be filled with
from_country and to_country to compute the right tax.

Closes #13223
2024-04-29 18:08:39 +02:00
Cédric Krier f4f0102d20 Do not convert sale unit price to sale unit of measure if empty
Closes #13213
2024-05-10 15:17:37 +02:00
Nicolas Évrard 5d2e5f9329 Use the catch_warnings context manager when importing relatorio
Using warnings.resetwarnings also reset the warnings filter set from the
environment variable which makes working on fixing warnings more difficult.
2024-05-16 21:19:17 +02:00
Cédric Krier 1035df5340 Test if cache amount is null to include tax amount when searching for amount
Closes #13219
2024-04-28 17:30:17 +02:00
Cédric Krier 306f84c9d2 Clear company on the lot sequence in production scenario
Since 9191fe4b4da4, the sequence can not be restricted to a company.

Closes #13257
2024-05-14 08:56:28 +02:00
Cédric Krier 0442c7475b Update reports to display company logo 2024-04-19 23:30:05 +02:00
Cédric Krier 254370278a Add logo of companies
Closes #13205
2024-04-29 14:38:36 +02:00
Cédric Krier e23c126c90 Cache http-v2 pip directory
Since pip 23.3 the HTTP requests are cached in a new directory.
2024-05-03 00:25:48 +02:00
Cédric Krier 4a6e8e5823 Set PIP_CACHE_DIR for job using pip 2024-05-03 00:19:28 +02:00
Hulala 1f74c18430 Close client tab with mouse middle click 2024-05-11 11:19:38 +02:00
Cédric Krier cfc0cba290 Prevent to use sequence limited to company for stock lot
The lots are not linked to a company, neither the product so their sequences
should not to avoid access right errors.

Closes #13209
2024-04-24 00:05:10 +02:00
Cédric Krier fbc0d82d6a Support language suffix in CSV import
Closes #13141
2024-04-11 12:41:05 +02:00
Cédric Krier 891423c6b2 Set default value from account move using line field name
Some Function fields has the move as prefix which is removed when applied to
the move. But when setting default value for the line, the move prefix must
not be removed.

Closes #12967
2024-04-27 18:36:49 +02:00
Cédric Krier f94f539158 Fix changelog of purchase request module 2024-04-30 01:47:22 +02:00
Cédric Krier 52d2b788d6 Use model reference of field to get model name for HTML editor
Since 8680316c6805 the model field stores only the string name of the model,
the foreign many2one must be used instead.

Closes #13239
2024-05-07 00:35:29 +02:00
Cédric Krier 9e6789f8c1 Ensure there is a company id in the context before testing as positive
Closes #13228
2024-05-02 18:55:04 +02:00
Cédric Krier 3b7fb6adca Remove default value for unknown request_quotations field
Closes #13212
2024-04-30 18:29:24 +02:00
Cédric Krier f859c8941d Rename quality inspect wizard from Done to Completion
Following 64726d495038
2024-04-16 23:48:13 +02:00
Cédric Krier c561ffc298 Unify logging message of modules 2024-04-13 10:52:08 +02:00
Cédric Krier 2eaf20a461 Add shipped state to customer shipment
Closes #13150
2024-05-06 00:34:03 +02:00
Cédric Krier 6f40ac5659 Add partial support for constraints with SQLite backend
The Unique and Exclude constraints can be enforced on SQLite backend with
UNIQUE INDEX as long as they do not use parameters.
2024-04-02 00:29:35 +02:00
Sergi Almacellas Abellana ea01ba7d47 Add missing gettext to sao forgotten password button
Otherwise the text can not be traanslated
2024-04-18 17:54:52 +02:00
Cédric Krier c80310c2dc Add warning when changing credentials
Closes #13126
2024-03-25 14:24:55 +01:00
Juan Jose Pablos 981580a19c Add labels in configuration documentation of trytond 2024-05-04 12:37:32 +02:00
Cédric Krier cd8777277a Update translations [skip ci]
Closes #13225
2024-04-30 13:09:39 +02:00
Adrià Tarroja Caubet 0506c86e8c Add space after quote in message for no open fiscal year date 2024-04-30 09:44:04 +02:00
Cédric Krier f100bb11ed Use title case for button in wizard to handle purchase request cancellation 2024-04-21 12:18:38 +02:00
Cédric Krier 38a3a8e68e Increase version number 2024-04-29 18:03:56 +02:00
Cédric Krier a504f363cc Add tag 7.2.0 2024-04-29 17:31:23 +02:00
Cédric Krier 2fc668b9f7 Prepare release 7.2.0 2024-04-29 17:31:11 +02:00
Cédric Krier a9a5be0834 Add demo script 2024-04-28 13:58:17 +02:00
Cédric Krier 5f5a93617d Fallback to store true for indexes command line option
BooleanOptionalAction does not exist on Python 3.8
2024-04-28 10:43:14 +02:00
Cédric Krier b443997044 Update translations [skip ci] 2024-04-27 18:44:57 +02:00
Cédric Krier 4c5659e87c Support loading plugins without sources
cx_Freeze include only the bytecodes version of the translation plugin.

Closes #13208
2024-04-23 13:38:29 +02:00
Cédric Krier f5db4a5899 Use find_packages to fill packages for build_exe
Otherwise cx_Freeze does not include the translation plugin as it is
dynamically loaded.

Closes #13208
2024-04-23 13:19:54 +02:00
Cédric Krier 4acd946200 Use id as default payee value on pay invoice wizard
Closes #13140
2024-04-21 15:33:42 +02:00
Cédric Krier ba6c36654c Assert that xxx2many fields have an initial value to compute changes
The changed values relies on the initial value to compute the changes for
xxx2many fields. So we must ensure to have it if the field has been modified.

Closes #13099
2024-04-22 09:32:58 +02:00
Cédric Krier 787595125a Depends on xxx2many fields when they are assigned by a change function
Closes #13099
2024-04-22 08:59:48 +02:00
Cédric Krier 681b5e7d64 Do not rely on taxes order to compare with default invoice line taxes
Since 6f4fa96a654c invoice line taxes are compared with the default taxes but
the order may not be the same.
The order on Many2Many is not relevant because the computation always sort
using Tax.sort_taxes.
2024-04-21 22:17:28 +02:00
Cédric Krier 1cb2174141 Trigger record saved after reload ids when execute button
The buttons of the toolbar must be updated after having saved the current
record.

Closes #13125
2024-04-21 15:23:18 +02:00
Cédric Krier ed48f7e9dc Simplify type test when screen execute button 2024-04-21 15:26:19 +02:00
Cédric Krier 8e211785e4 Ensure current record has been saved before execute button action 2024-04-21 15:25:14 +02:00
Cédric Krier e09d6c6beb Wait for display to finish when reloading record 2024-04-21 15:24:26 +02:00
Cédric Krier dac0b9c0a7 Fallback to default model access if RPC request fails 2024-04-18 19:22:07 +02:00
Cédric Krier 0e81d2d158 Encode with gzip only if a session exists
Since 1923117e935d the server does not accept compressed content for
unauthenticated request.
2024-04-18 19:15:47 +02:00
Cédric Krier 490a5e2c6c Do not display cancelled moves in shipment reports
Closes #13202
2024-04-18 14:49:49 +02:00
Cédric Krier 567719b1ab Use shipment report mixin for delivery note 2024-04-18 14:49:14 +02:00
Cédric Krier 53c0edfe05 Use a set of models to compute cache key for record rules 2024-04-17 20:23:26 +02:00
Cédric Krier 38fe0c087a Compute cache key for record rules using all models
As model can inherit the access rules from another, the key must include the
keys of those other models.

Closes #13162
2024-04-17 20:22:10 +02:00
Cédric Krier d4248499ca Use white background to remove alpha channel of images
Closes #13191
2024-04-11 15:19:41 +02:00
Cédric Krier 1ec445dbb1 Use strict locale parsing for date and datetime
Closes #12314
2024-04-11 13:04:01 +02:00
Cédric Krier f3bcf05446 Include tax amount in shipping cost in product data feed
Closes #13173
2024-04-09 15:03:39 +02:00
Cédric Krier 8320379195 Compute sale price under the web shop context
Closes #13172
2024-04-09 13:25:35 +02:00
Cédric Krier 14c5a40342 Check only shipment with cost method 'order' to invoice shipment cost on order
If the sale is linked to a shipment with a different cost method than order,
it should not be considered to decide to invoice or not the sale shipment
cost.

Closes #13171
2024-04-08 17:45:01 +02:00
Cédric Krier 49bd15c94e Fill tax rule pattern with default empty countries
A rule line for a country is not expected to be used when the country is
unknown.

Closes #13169
2024-04-08 12:13:33 +02:00
Cédric Krier 3bfc1e25d0 Limit template error to Genshi error in marketing activity and email validation 2024-04-05 00:35:19 +02:00
Cédric Krier 6d9f1c8d56 Raise user error on template error when render marketing activity or email
Closes #13163
2024-04-05 00:34:19 +02:00
Adrià Tarroja Caubet e046274641 Clear view toolbar cache when email templates are modified
Closes #13072
2024-04-21 17:29:41 +02:00
Sergi Almacellas Abellana a71931c15b Add employee fields on invoice form
Closes #13128
2024-03-25 15:30:57 +01:00
Cédric Krier f502095a4a Set exact width for date, time and datetime widgets
Closes #13035
2024-04-15 00:30:28 +02:00
Cédric Krier cd816227b3 Prevent to get user_id from request without view_args
If user_id is accessed before view_args has been setup, we should not cache
`None` as value but instead raise an exception.
The `user_id` may be accessed before the mapping if the request is logged
because the representation of the request used the `rpc_method` which needs to
parse the request data. But since 1923117e935d parsing compressed content is
only allowed for request with `user_id`.
So we can no more include the `rpc_method` is the request has not yet been
mapped and so it has a `view_args`.

Closes #13203
2024-04-18 19:28:04 +02:00
Cédric Krier 2500e09ce2 Use jQuery remove to remove children row elements
We can not rely on the row node to always have a parent node as toggle_row is
a callback to an event that can be executed after the row has already be
removed from the DOM.

Closes #13198
2024-04-16 09:16:24 +02:00
Cédric Krier 04fc53ce9a Rename prefixes/suffixes as cells and make them private 2024-04-14 17:16:39 +02:00
Cédric Krier 0845b8c1fa Set value in editable tree using the editable linked to the renderer
Closes #13078
2024-04-14 17:12:52 +02:00
Cédric Krier 8f97b59e25 Catch only RPCException on RPCExecute without exception processing 2024-04-14 11:18:31 +02:00
Cédric Krier 7d3dc69bd8 Always raise RPCException in RPCExecute
So when calling RPCExecute without processing exception, all exceptions can be
catch with RPCException.

Closes #12874
2024-04-14 11:07:33 +02:00
Cédric Krier d1dbfd6a82 Parse text as datetime when it is a string
The on_paste method is calling value_from_text for each widget using the
string from the clipboard.
So textual value needs to be supported even for date and time widgets which
uses a cell renderer that provides datetime value.

Closes #12860
2024-04-14 10:56:27 +02:00
Cédric Krier 95aa57c72c Test if current view is defined on screen before using it
Closes #13178
2024-04-13 15:35:15 +02:00
Cédric Krier 7af1012be3 Test if user has a company before using it in letter report
Closes #13174
2024-04-13 15:04:45 +02:00
Cédric Krier b2ccdd1d9c Use function to not copy custom report content
The Function fields are not copied so it is the storage field that must have a
default value.

Closes #13170
2024-04-13 15:00:52 +02:00
Cédric Krier cf02996a09 Do not fail to get product location for shipment without warehouse
The warehouse of internal shipment is computed and may be empty if the from
location does not have a warehouse.

Closes #13129
2024-04-13 13:52:43 +02:00
Cédric Krier e0801df2f6 Fix call to warn method of logger
Closes #13179
2024-04-11 19:46:48 +02:00
Maxime Richez 491fb6330b Do not check access when checking warnings
Closes #13131
2024-04-15 16:22:05 +02:00
Maxime Richez 507079741c Decorate pack button of customer shipment when extending it for shipping
Closes #13131
2024-04-15 16:20:31 +02:00
Adrià Tarroja Caubet 6d37785d85 Fix typo when searching euro to get intrastat currency
Closes #13201
2024-04-18 10:12:18 +02:00
Cédric Krier c32a98f66c Do not try to round or convert list price of project revenue
By using list_price_used we are sure to have a list price in the company
currency so there is not need for conversion.
Also list price of a product can be empty so we should not try to round it.

Closes #13110
2024-04-10 18:06:23 +02:00
Cédric Krier dda35caa21 Test if queue batch is boolean
In Python bool type is a subtype of integer so it must be tested first.
Also by converting other types to int, we catch any other wrong types.

Closes #13133
2024-04-13 14:20:21 +02:00
Cédric Krier 1f2b9e15c3 Test using the icon name if it was loaded
Closes #13193
2024-04-11 19:29:30 +02:00
Cédric Krier 11b092a61b Do not fail to compute record name of opportunity reporting without employee
Closes #13114
2024-04-10 18:13:54 +02:00
Cédric Krier e69fbf7a9e Convert recursive calls of reconcile accounts wizard into loop
The recursive calls may reach the Python recursion limit if there are a lot of
accounts and parties to process.
So converting the recursion into a loop prevent reaching this limit.

Closes #13164
2024-04-05 14:39:23 +02:00
Cédric Krier de9136eed7 Do not accept compressed content from unauthenticated request
Closes #13142
2024-04-17 09:47:20 +02:00
Cédric Krier 4ecca33e0e Do not fail when testing if account is set on invoice line for project
If there is no product defined on the project, the call to on_change_product
for the invoice line does not set the account field.

Closes #13111
2024-04-10 17:56:20 +02:00
Cédric Krier 1f470cb4d1 Return currency instance instead of id in party getter 2024-04-10 11:25:48 +02:00
Cédric Krier b0335a27b0 Test if contextual company id is positive before using it
Closes #13176
2024-04-10 11:25:11 +02:00
Cédric Krier bf7f66afe6 Set visibility property always to the entry widget
When the password widget has autocomplete activated, the entry is a combobox.

Closes #13166
2024-04-05 18:09:19 +02:00
Cédric Krier b41e204d83 Do not hide visibility checkbox on readonly password
Closes #13165
2024-04-05 18:06:23 +02:00
Cédric Krier 8d4fd4ebb6 Fix setting view type attribute on Tab
Set nothing if there is no current tab and use the correct attribute to
retrieve the current view type.

Closes #13192
2024-04-11 19:26:13 +02:00
Cédric Krier de7bd32700 Do not copy products, categories and images to web shop
Closes #13161
2024-04-04 15:55:01 +02:00
Cédric Krier b0d38bd797 Set invoice progress of shipment cost line of sale always as 100%
Closes #13160
2024-04-04 15:13:36 +02:00
Cédric Krier 3a25fc0df9 Always return float for invoice or moves progress
The fields are Float so they must return a float.
2024-04-04 15:12:21 +02:00
Cédric Krier 07d0a29bdc Do not accept anymore datetime with null time as date
Closes #13135
2024-03-27 12:42:24 +01:00
Maxime Richez f2353c8f6a Allocate also shipment cost of 0
Closes #13155
2024-04-13 19:13:44 +02:00
Sergi Almacellas Abellana fc5edbbd8f Include uom access rule under updatable data 2024-04-03 11:24:04 +02:00
Ahmed AlBoori 844c2b503a Add scenario to test receivable rules on statement
#13063
2024-04-13 18:10:13 +02:00
Ahmed AlBoori 6d57f3498c Use positional argument when applying account receivable rule
The ModelView.button decorator is expected first positional argument to be
named records so we can not use keyword argument in this case.

Closes #13063
2024-03-02 06:11:36 +03:00
Ahmed AlBoori fbd83cfeb2 Correct Account Receivable Rule Model Name
Closes #13063
2024-02-28 23:33:19 +03:00
Nicolas Évrard a73b28ce96 Check for the existence of a screen before restoring size of wizard's dialog window
Closes #12944
2024-04-13 17:42:02 +02:00
Cédric Krier 38037cb8c5 Reset sales to state quotation to avoid duplicate log entries
Closes #13159
2024-04-04 12:51:18 +02:00
Cédric Krier b50911d36c Do not deduce current payment from the amount of the sale
Closes #13157
2024-04-02 16:47:01 +02:00
Cédric Krier 70f068b318 Return False on the callback on readonly window Form
When a readonly Form is closed, the callback result should always be False as
the opened record has not changed.

Closes #13156
2024-04-02 16:39:06 +02:00
Cédric Krier 89c1127952 Enforce clearing account type only on draft payment
As the receivable, payable type may evolve over time, only draft state should
enforce it.

Closes #13145
2024-03-30 11:32:22 +01:00
Cédric Krier 79e5ab807d Set posting employee only when using button
As the posted by employee field can not be modified once the invoice is
posted, the employee must be set only when it is an action of the user.
On processing the invoice, it is the internal posting method that must be used
so no employee is set nor any other warning checks.

Closes #13124
2024-03-25 10:17:35 +01:00
Cédric Krier a240337a51 Do not commit new transaction for database error processing 2024-04-02 00:34:25 +02:00
Cédric Krier 0c3f88b776 Wrap transaction description into a single line to store as origin description
Since a2f811ed0e99 it is not allowed to store multiline in Char field.

Closes #13123
2024-03-25 00:19:23 +01:00
Cédric Krier f71e90a7f3 Put gir libraries under lib also for Windows
cf5adeee978b did it for darwin but it is also useful for Windows to avoid
duplicate dlls.
2024-03-23 18:17:05 +01:00
Cédric Krier 8f291b76be Use format from server locale as fallback for date in graph view
Closes #13112
2024-03-21 09:47:45 +01:00
Cédric Krier 854efb8216 Use min date as default From Date for start amount of general ledger
Closes #12660
2024-03-17 11:36:24 +01:00
Nicolas Évrard 026ae5bff4 Use PYSON's Bool evaluation for PYSON's Not evaluation
Closes #13096
2024-03-11 16:35:39 +01:00
Nicolas Évrard 3e06f5043a Instantiate PYSON.Bool expression with new from PYSON.Not instances
Closes #13177
2024-03-11 12:43:53 +01:00
Nicolas Évrard b346fc23fb Hide notebooks and groups when they are empty
Closes #13070
2024-03-04 17:14:04 +01:00
Cédric Krier cee75c14a1 Do not distribute residual rounding to tax with 0 amount
Closes #13098
2024-03-15 13:16:33 +01:00
Cédric Krier 26f877e8ce Force scrollbar inside xxx2Many table
On Chrome based browsers the min-content of the table inside a xxx2Many widget
is the minimal size to display all the columns.
So when this min-content size is bigger than the width of the tab, it is the
all form that get a scrollbar instead of only the tree view element.
By adding a display grid to the div containing the treeview, the min-content
is not more used by the grid-template-columns of the form-container.

Closes #13050
2024-03-15 09:50:08 +01:00
Cédric Krier 334a554dd6 Add web_shop_product_data_feed module
Closes #13069
2024-04-08 17:27:25 +02:00
Cédric Krier a535c54d36 Add countries for web shop 2024-03-05 10:43:41 +01:00
Cédric Krier 4df4d72f8d Add Manufacturer Part Number product identifier 2024-03-05 10:42:44 +01:00
Cédric Krier f003128df6 Add brand product identifier 2024-03-05 10:42:10 +01:00
Cédric Krier e297a3ad47 Support generate barcode of different type 2024-03-05 10:41:23 +01:00
Cédric Krier 1415713e6b Explicitly define product identifier from stdnum 2024-03-05 10:40:18 +01:00
Cédric Krier a4588bd5ac Add send_file to protocols wrappers 2024-03-05 10:38:33 +01:00
Cédric Krier 8c356b0c27 Support sale price list per web shop
Closes #13076
2024-03-06 10:18:37 +01:00
Cédric Krier 2ca33a8e19 Add carrier to list view of customer shipment in stock_shipment_cost
It is stock_shipment_cost that adds the field to the shipment so it should be
also added to the view by the same module.
2024-03-25 11:53:41 +01:00
Cédric Krier 4e3027c7a9 Add description and note to opportunity line 2024-03-23 22:51:52 +01:00
Cédric Krier f0050a6635 Enforce the unit category of opportunity line from the product 2024-03-23 22:43:49 +01:00
Cédric Krier edd36e67b0 Make product optional on opportunity line
Closes #2172
2024-03-23 22:52:15 +01:00
Cédric Krier 7e1272f46b Use gettext to format access error message when deleting drop shipment 2024-03-18 18:38:39 +01:00
Cédric Krier 9be2860eb7 Support splitting drop shipment 2024-03-18 18:36:08 +01:00
Cédric Krier e052849c3d Use split function to add lots on move when available
The split function ensures that customer moves of drop shipment are split also
when splitting supplier moves.

Closes #13037
2024-03-18 18:35:22 +01:00
Cédric Krier e686904520 Split customer moves when splitting supplier moves of drop shipment 2024-03-19 09:22:08 +01:00
Cédric Krier 372c212347 Set only periods or dates on the same line for general ledger context
Those fields may become invisible so they should not have any other field next
to them for when they become invisible.
2024-03-17 11:48:43 +01:00
Nicolas Évrard 80ffcdea53 Read xxx2Many fields using the dotted notation
Closes #12856
2024-04-07 17:39:13 +02:00
Nicolas Évrard b973f371c8 Add a contextual read limit for related fields 2024-04-08 13:13:14 +02:00
Nicolas Évrard c3a7758c5c Remove the switch-page hack on the notebook
The hack isn't used anymore anyway as the test on self.view.widget is always
True since e8ffb2b2e722
2023-12-20 22:00:13 +01:00
Nicolas Évrard 2f29a24c9c Stop loading fields definition already known by the field 2023-12-18 19:19:39 +01:00
Cédric Krier 0c5ac00c69 Replace _explode_move_values calls by _move call of production 2024-03-16 21:07:22 +01:00
Cédric Krier fe4cec2189 Set currency and unit price of production move when unit price is required
Since 0b2e50445415 the unit price is always set when production is done, so
the unit price of output moves is not important before.
2024-03-16 21:03:13 +01:00
Cédric Krier 51360ee110 Fill currency when creating output move of production
Closes #12360
2024-03-16 21:00:21 +01:00
Cédric Krier e2139ba445 Add company record rule to journal - period 2024-03-14 13:53:31 +01:00
Cédric Krier 4da709134d Add journal - period buttons to form view 2024-03-14 13:51:20 +01:00
Cédric Krier 440827194d Remove declaration of non-existent open button for journal - period 2024-03-14 13:50:49 +01:00
Cédric Krier 36cf314066 Add company to journal-period 2024-03-14 14:04:31 +01:00
Cédric Krier 0a14c86d4e Remove active field on journal - period 2024-03-14 13:44:29 +01:00
Nicolas Évrard a442953776 Use a pure CSS solution to compute the container view height and width
Closes #12983
2024-04-06 18:30:01 +02:00
Cédric Krier 4790d928af Add images to product category
Closes #13062
2024-02-27 17:52:09 +01:00
Cédric Krier 6bb7b6cc43 Generalize ImageMixin to be used with other models than products 2024-02-27 17:52:34 +01:00
Cédric Krier ed718e31a3 Add code on product category 2024-02-27 17:44:29 +01:00
Cédric Krier 575ae00711 Use sequence ordered for view priority 2024-02-25 13:32:10 +01:00
Cédric Krier 0b431b0ce1 Do not mix base views and extensions
Closes #13056
2024-02-25 13:31:48 +01:00
Cédric Krier adb7243f0c Display XML ID on Log window
Closes #13055
2024-02-25 13:42:18 +01:00
Cédric Krier cd3395b233 Add email constructor from message 2024-02-21 21:43:50 +01:00
Cédric Krier c5d85c1a4f Order email multipart/alternative by increasing preferences
The html version is preferred over the plain text.

Closes #13049
2024-02-21 19:51:08 +01:00
Cédric Krier 3cc0bb6c15 Add send_message methods to sendmail
Closes #13048
2024-02-21 21:38:53 +01:00
Cédric Krier 2ae89396c3 Open new tab if the current view of existing tab is not the first one
User expect that action will open a tab on the first/default view even if an
existing tab exists with a different view.

Closes #9086
2024-02-21 16:47:19 +01:00
Cédric Krier 0f06ca9142 Raise a warning when validating invoice with non default taxes
Closes #3818
2024-02-19 12:43:52 +01:00
Cédric Krier 8666e82b80 Rename 'done' buttons to 'do' and label them as "Complete"
Closes #13039
2024-02-17 17:50:49 +01:00
Cédric Krier 254e72b074 Display origin also on invoice line list 2024-02-14 09:58:50 +01:00
Cédric Krier d6515743cc Display invoices and moves progress on sale and purchase lines
Closes #13025
2024-02-08 16:58:46 +01:00
Cédric Krier 401d2edbd9 Add account export WinBooks module 2024-04-07 11:13:31 +02:00
Cédric Krier 8b298a522b Add account export module 2024-04-07 11:13:39 +02:00
Cédric Krier 1ad42b265f Define generic getter and searcher for identifier of party 2024-01-19 23:35:21 +01:00
Cédric Krier 5e10e9df21 Add skip warning on trytond configuration
Closes #12954
2024-01-22 10:03:16 +01:00
Cédric Krier c5eb6248a9 Disable maxDiff for scenario asserts 2024-01-22 10:03:55 +01:00
Cédric Krier db1f9fcd4a Update proteus tests to use model field of model access as string 2024-04-07 12:17:36 +02:00
Cédric Krier 9a4f3322ac Fallback to searching on rec_name for fmany2one only when value is a string
Like Many2One field, the implicit rec_name search should only apply to string
value otherwise it is on the target id.
2024-04-07 12:16:54 +02:00
Cédric Krier 85adb630b8 Add account SYSCOHADA module 2024-04-07 09:50:53 +02:00
Cédric Krier 79fabdfd1f Normalize logging message when deleting old XML records
Closes #13007
2024-02-06 15:43:10 +01:00
Cédric Krier 229e30286a Use fromisoformat to parse date when importing data 2024-03-27 12:37:24 +01:00
Cédric Krier 9d27f8b951 Do not use sub-query with target table of Many2One for id only clause
Closes #13121
2024-03-22 22:40:09 +01:00
Cédric Krier ed552f357e Add size constraint on RPC cache 2024-03-22 19:29:54 +01:00
Cédric Krier 76cce2217d Fetch URL icons asynchronously
If the URL is not yet in cache, an empty image at the proper size is return,
then when the callback is triggered, the URL should be in cache. So we force a
redraw of the treeview which should set the proper pixbuf.
The IconFactory uses a pool of 5 workers like the browsers.

Closes #13119
2024-03-22 19:16:55 +01:00
Cédric Krier 7b86761834 Do not minify JavaScript nor CSS
It is better to rely on the server compression and ease debugging source code
even on production installation.

Closes #11936
2024-03-15 10:13:23 +01:00
Cédric Krier ff7cd065ad Add module Many2One 2024-02-25 13:49:05 +01:00
Cédric Krier a42777834e Add model Many2One on ir.action.wizard 2024-02-25 16:23:30 +01:00
Cédric Krier b83ad6695a Add model Many2One on ir.action.act_window 2024-02-24 18:04:11 +01:00
Cédric Krier 51b1c05832 Add model Many2One on ir.action.report 2024-02-25 16:23:50 +01:00
Cédric Krier dc1f2df99e Add model Many2One on ir.model.data 2024-02-24 17:43:15 +01:00
Cédric Krier 302e92783c Add model and field Many2One on ir.ui.view_tree_width 2024-02-22 17:49:34 +01:00
Cédric Krier 2502e07bb3 Add children field Many2One on ir.ui.view 2024-02-22 17:39:16 +01:00
Cédric Krier c18c7dd927 Add model Many2One on ir.ui.view 2024-02-24 00:13:24 +01:00
Cédric Krier 80b61a9f63 Store model on ir.rule.group 2024-02-25 13:45:21 +01:00
Cédric Krier 5448a91bf7 Store model on ir.model.button 2024-04-06 10:48:45 +02:00
Cédric Krier 122a45b167 Store model and field name on ir.model.field.access 2024-04-06 11:04:15 +02:00
Cédric Krier 9193a425d1 Store model name on ir.model.access 2024-04-06 14:10:01 +02:00
Cédric Krier b60f0b7044 Store model name on ir.model.field 2024-02-23 18:40:52 +01:00
Cédric Krier 0dffe1087c Add fmany2one field
Closes #13051
2024-02-22 17:36:51 +01:00
Cédric Krier e0f11efc94 Allow creation of foreign key on non primary key 2024-02-22 19:08:43 +01:00
Cédric Krier 2f84af4adf Allow to ignore cancelled advance payment invoices
Since b5a7c00ebf5c there is a domain on ignored invoices which should include
advance payment invoices.

Closes #13148
2024-04-01 15:15:50 +02:00
Cédric Krier 02f21576f5 Include advance payment invoices when searching by sales
Closes #13148
2024-04-01 15:16:31 +02:00
Cédric Krier e4a386c316 Instantiate pool in the initialization thread
Since 30429d744d29 the pool instance is stored per thread so to initialize a
pool within a thread, the instance must have been created in the same thread.
2024-04-03 09:48:48 +02:00
Cédric Krier 3f72367f13 Catch exception before the cron transaction is ended
To rollback the transaction must be done before the context manager calls stop
on exit.

Closes #13149
2024-04-01 16:18:13 +02:00
Cédric Krier b0d40807ac Update precision of cost price test from modification under stock continental accounting
Since 0809f9f56c4e the modified cost price is rounded with the price
precision.

Closes #13041
2024-04-01 14:04:52 +02:00
Cédric Krier 85da55352e Setup a database for CacheTestCase
Since 8616fb62c5e9 some tests are decorated with transaction so the test case
needs a database to run.
2024-04-01 12:27:33 +02:00
Cédric Krier 82c1583112 Do not round Decimal to validate digits
Decimal may raise an InvalidOperation error if the context does not allow the
needed precision.
But rounding is not necessary for Decimal as we can just test the exponent
from the tuple version.

Closes #13138
2024-03-28 09:25:55 +01:00
Cédric Krier 79c5809cc2 Fix typo when processing refund on charge refund updated webhook from Stripe
Closes #13137
2024-03-27 19:38:52 +01:00
Cédric Krier 6610bf7e31 Do not set current record to the first id if the list is empty
Closes #13130
2024-03-26 11:20:07 +01:00
Cédric Krier 4f7acf0bbf Use duck typing to convert single UPS package into a list
It seems that UPS has fixed its API such that it always returns a list for
PackageResults but it is still better to test the actual result.

Closes #13116
2024-03-21 16:55:01 +01:00
Cédric Krier 67e1423194 Use same error message for HTTP error
We should use the same error message between both clients.
2024-02-04 22:32:08 +01:00
Cédric Krier 6bae798031 Remove unnecessary preference keys from RPC context
The locale key is only used by the client to properly format in the locale.
And the '.rec_name' keys are used by preferences dialog.

Closes #13068
2024-03-01 18:06:33 +01:00
Cédric Krier cd345c2399 Set cursor when displaying screen to select new record after copy
Closes #12820
2024-03-22 12:52:19 +01:00
Sergi Almacellas Abellana 8dc319a4cb Set current record after copying records
Since ab82d479eca1 the current record is no longer set on load call

Closes #12820
2024-03-11 12:18:19 +01:00
Cédric Krier 2a8626afd5 Permit to remove ignored invoices and stock moves
Closes #13066
2024-03-01 14:44:47 +01:00
Cédric Krier df31d37ae5 Enforce domain on ignored and recreated invoices and stock moves 2024-03-01 14:55:14 +01:00
Cédric Krier ef56a18b3c Set tab_domain in URL only for views that are not form
As the form view has an id and so tab_domain will be discarded on opening,
there is no need to add the parameter in the URL.

Closes #13046
2024-02-21 16:22:49 +01:00
Cédric Krier e95057981d Remove ending commit when loading modules
The commit call was added by a6624f31ff20 to release lock because Cache.resets
was called inside the transaction.
But Cache.resets was removed in a83631f4ba67 and Cache does not create any new
transaction since.
And since 2fd8c5f88265 the transaction is even committed only on module
update.
2024-03-13 08:42:10 +01:00
Cédric Krier 02bbbc6549 Silent exit of cron and worker with keyboard 2024-02-04 20:51:05 +01:00
Cédric Krier e77255d0c1 Update list of local icons from sao directory 2024-02-12 18:15:37 +01:00
Cédric Krier 5e4fb93e8d Make icon factory thread-safe
By using a single immutable dictionary as source for icon ids, we ensure the
coherence during the execution even if other calls are executed in parallel.

Closes #13033
2024-02-12 18:27:26 +01:00
Cédric Krier 2bf7e4bd3d Revoke URLs of loaded icons
Closes #13095
2024-03-10 01:09:35 +01:00
Cédric Krier 1846050401 Do not set sale nor purchase in exception for invoice with cancel move
Cancelled invoices with a cancel move should be considered as paid.

Closes #13085
2024-03-08 12:36:57 +01:00
Cédric Krier 40d4fe61ac Set invoice line state to paid when invoice is cancelled with cancel move
Such invoice line should be considered as booked for example to compute the
invoiced quantity of stock move.

Closes #13085
2024-03-08 12:29:03 +01:00
Cédric Krier d85d7a1f9c Expand form container to fill all parent spaces
Closes #13073
2024-03-05 15:18:03 +01:00
Cédric Krier f409e36e91 Do not delete purchase request with a purchase line when supply stock
The design does not ensure that draft purchase request can not be linked to a
purchase line.

Closes #12974
2024-02-05 23:15:21 +01:00
Cédric Krier d60af01050 Hide traceback by default in error message
Closes #12991
2024-02-02 22:55:21 +01:00
Sergi Almacellas Abellana 751cf5081a Update documentation of stock forecast 2024-03-17 15:27:08 +01:00
Sergi Almacellas Abellana d2e269e66a Set warehouse by default on forecast
Closes #12717
2024-03-17 15:26:16 +01:00
Cédric Krier 39c5056da5 Use Javascript classes for PYSON 2024-03-16 19:50:34 +01:00
Cédric Krier a281900e51 Fix link to documentation of stock_product_location_place 2024-03-09 02:03:14 +01:00
Cédric Krier 10cdcd5826 Document how to fill opening balance 2024-02-10 20:29:00 +01:00
Cédric Krier 245a0573ce Add auto-detected fields with drag and drop handler
Closes #13082
2024-03-07 13:06:11 +01:00
Cédric Krier ca35638145 Set height to 100% for text and richtext
Closes #13058
2024-02-25 13:40:59 +01:00
Cédric Krier 743e938baa Set empty currency when reconcile no lines
Since f9560247a0fc the currency for the reconciled lines is computed but when
there is no line, there is no company to get currency from.

Closes #13047
2024-03-02 11:39:29 +01:00
Cédric Krier 9aceea55c4 Use moment to parse time
Closes #13032
2024-02-21 09:52:06 +01:00
Nicolas Évrard 00f81cf62f Limit search for NULL rows when adding a NOT NULL constraint 2024-03-05 16:08:19 +01:00
Sergi Almacellas Abellana c3117568ad Round code price before storage when modifying from product wizard
Closes #13041
2024-03-15 19:18:30 +01:00
Adrià Tarroja Caubet 3da23862c5 Test phone number on 347 and 349 reports 2024-03-07 10:38:57 +01:00
Adrià Tarroja Caubet 1346293974 Check country code from phonenumber as int
Closes #13060
2024-02-27 13:29:54 +01:00
Cédric Krier 9dfec46280 Activate no-with rule of eslint 2024-03-11 23:46:03 +01:00
Cédric Krier 58e2e9f70d Activate no-useless-escape rule of eslint 2024-03-10 01:00:02 +01:00
Cédric Krier 919ab27a8c Do not activate no-unused-vars only for args 2024-03-10 00:58:24 +01:00
Cédric Krier d6adb7578f Activate no-unexpected-multiline rule of eslint 2024-03-10 00:33:47 +01:00
Cédric Krier bab234389f Activate no-self-assign rule of eslint 2024-03-10 00:31:44 +01:00
Cédric Krier ef6a0483a8 Activate no-prototype-builtins rule of eslint
In most case there is no need to test loop attribute with hasOwnProperty
because we know that Object.prototype is not modified.
2024-03-10 00:28:14 +01:00
Cédric Krier d59dddea7d Activate no-extra-boolean-cast rule of eslint 2024-03-09 23:36:02 +01:00
Cédric Krier f5a7211436 Activate no-empty rule of eslint 2024-03-09 23:34:23 +01:00
Cédric Krier 9140665f5a Activate no-constant-condition rule of eslint 2024-03-11 23:37:56 +01:00
Cédric Krier f1f04dbc5b Activate getter-return rule of eslint 2024-03-09 23:31:41 +01:00
Cédric Krier 61acc97074 Return an array for listed_records accessor of list-form
Closes #13094
2024-03-09 23:22:09 +01:00
Cédric Krier 7dcfcfcb3a Replace jshint by eslint
Closes #13087
2024-03-11 23:33:12 +01:00
Cédric Krier 18d6933489 Use model attribute to compute model name of CharColumn
Closes #13093
2024-03-09 11:01:34 +01:00
Cédric Krier fca4a93d08 Compute index when selecting list-form row to select records
Closes #13092
2024-03-09 10:59:52 +01:00
Cédric Krier f1a526d2b7 Set graph color from yfield
Closes #13091
2024-03-09 10:56:54 +01:00
Cédric Krier 0e68b91488 Fix typo in defaults argument in new_ method of Many2Many widget
Closes #13090
2024-03-09 10:55:19 +01:00
Cédric Krier ceb0ff3700 Use size from attributes when setting url_size parameters for Image
Closes #13089
2024-03-09 10:52:41 +01:00
Cédric Krier 824e282b6f Do not fail on input completion when source is an Array
Closes #13088
2024-03-09 10:49:27 +01:00
Cédric Krier 2837108682 Use operators when converting PYSON to string
Closes #12986
2024-03-09 01:41:54 +01:00
Cédric Krier 4d084ec01b Remove icons in unique dialog
There is already an alert background set to distinct them.
2024-01-31 10:32:35 +01:00
Cédric Krier c4de553be3 Rationalize unique dialog size 2024-01-31 10:25:30 +01:00
Cédric Krier b36a38a14a Allow account users to delete moves
Closes #12976
2024-01-30 16:37:15 +01:00
Cédric Krier 29de76f324 Activate employee based on dates
Closes #12077
2024-01-30 10:34:34 +01:00
Cédric Krier 4e75c63e51 Include context information in access error
We include the date/time when the access error may be due to history and
user's groups when it depends on it.

Closes #12670
2024-01-29 13:18:30 +01:00
Cédric Krier ed0b38db47 Add location name fields to move 2024-01-04 10:56:25 +01:00
Cédric Krier da08123b44 Add stock_product_location_place module
Closes #12797
2024-03-07 13:44:35 +01:00
Cédric Krier a426898971 Try to assign automatically planned shipments in the past
Closes #13030
2024-02-09 16:44:46 +01:00
Cédric Krier 31e3eb142c Unify shipment assignation scheduled jobs
The order shipments are assigned is important as it determines which order
will be done or not. So we must try to assign all the shipments and
productions following a defined order.

Closes #13027
2024-02-09 16:42:28 +01:00
Cédric Krier ec5a00c82e Make pool initialization atomic
An instance of pool is created per thread and it stores a reference to the
current pool values.
When the pool is initialized, a temporary reference is set on the instance so
only the values for this thread is modified. Once the initialization is
complete, the new pool value replace the global values.
Each instances is refreshed with the global values after the pool has been
stopped.

Closes #11401
2024-03-06 18:28:38 +01:00
Cédric Krier 88ac130d2f Remove readthedocs 2024-02-18 18:35:54 +01:00
Cédric Krier 4632152d2b Do not fail on leap day to create next fiscal year
Replace the year of a date is not safe, it is better to use relativedelta.

Closes #13064
2024-02-29 15:36:16 +01:00
Cédric Krier 555ae0f465 Do not copy sale lines when copying purchase requests
Closes #12918
2024-02-12 23:54:07 +01:00
Maxime Richez 751e549995 Do not enforce empty shipment cost method on cancelled state
Closes #13018
2024-02-22 00:06:28 +01:00
Cédric Krier 2e722731c7 Delay the selection of first visible sibling tab
When the current tab is hidden, the other tabs may not have their definitive
visibility so we must delay the selection.

Closes #13024
2024-02-12 13:32:12 +01:00
Cédric Krier 9795da5179 Check OAuth environment to run UPS scenario
6723c2dced5b changed the environment variables needed to run the scenario.
2024-02-06 16:11:50 +01:00
Cédric Krier fa7ec2eecd Increase transaction counter when erasing party
As the erase is done using direct SQL query, the counter is not increased so
there is no log event created because the wizard use the counter to determine
if there were some modification and thus create a log entry.

Closes #13002
2024-02-05 18:57:28 +01:00
Cédric Krier ea9740846e Clear stock moves in staging when validating amendment
Closes #12999
2024-02-05 11:51:00 +01:00
Cédric Krier bb9a1fd2f5 Fix typo in cancel confirm message of customer shipment 2024-02-04 22:35:51 +01:00
Cédric Krier f8c0b16f7e Increase maximal number of retries in test scenario
When many scenario are run with the same account in parallel, the processing
time of Stripe can increase a lot so we need to wait longer.
2024-02-20 11:28:45 +01:00
Cédric Krier 76da0b26a6 Format direct debit name of Stripe payment method
Closes #12990
2024-02-02 19:52:35 +01:00
Cédric Krier ca958a1296 Return all Stripe payment methods instead of only card
Closes #12990
2024-02-02 19:51:34 +01:00
Cédric Krier 2dde73b737 Unify help text of command line 2024-01-26 00:09:37 +01:00
Cédric Krier a29ef14d49 Remove unused get_mime on notification email attachment 2024-01-25 16:08:47 +01:00
Cédric Krier 25b8316733 Use EmailMessage to construct emails
Closes #12958
2024-01-25 16:04:05 +01:00
Cédric Krier ea53fb3ce8 Test number of dots in name before computing unique value from a domain
The type of value may not correspond with the single_value parameter if the
domain does not apply directly to the field but to a nested field.

Closes #12843
2024-02-12 11:59:13 +01:00
Dimitrios Josef Moustos 6206ef7bb0 Fill shipment number only in waiting state
Closes #12905
2024-02-19 22:51:55 +01:00
Dimitrios Josef Moustos a327edd0a5 Fill production number only in waiting state
Closes #12904
2024-02-19 22:21:38 +01:00
Cédric Krier 166b47f3b1 Set receivable payment menu on same level as payable menu 2024-01-13 18:59:37 +01:00
Cédric Krier f9993960b9 Reset table of BOM output with None
This allow to customize the name.
2023-12-26 12:21:20 +01:00
Cédric Krier a66c7c42b1 Update help of account taxes
Since d66471767177 the taxes are not used as default for manual encoding of
move lines.
2024-02-07 09:24:53 +01:00
Cédric Krier ab83059056 Limit contextual ids in table query for product quantities by warehouse
Closes #12968
2024-02-05 23:35:24 +01:00
Cédric Krier 17ca6631e0 Reduce contextual ids in table query for product quantities by warehouse
Closes #12968
2024-02-01 23:17:48 +01:00
Cédric Krier cf554ff391 Install all documentation requirements at once 2024-02-03 23:56:52 +01:00
Cédric Krier f87c26f583 Use set to define sale grouping fields
This avoid to have duplicate domain clause on the same field.
2023-12-23 01:29:31 +01:00
Cédric Krier ce530c6c0b Remove custom table names 2023-12-26 12:18:00 +01:00
Cédric Krier 9223f374bf Use same sign when deducing ignored stock moves of remaining quantity to be paid
When the quantity of the line is negative, the quantity of the ignored stock
move must be added instead of subtracted.

Closes #12988
2024-02-02 13:48:12 +01:00
Cédric Krier 53460ad511 Add duration in logging message of with_pool decorator
This applies the same design as 180997544b2e did to the dispatcher.
2024-02-06 14:17:10 +01:00
Cédric Krier ffaa3f096c Clear transaction tasks on retry of with_transaction decorator
Closes #13008
2024-02-06 13:26:34 +01:00
Cédric Krier f02c9cf04c Lock table at transaction start for with_transaction decorator
Since c8771e45b861 TransactionError is raised if a table is not locked at the
transaction start. The decorator must manage such exception in case the
decorated route needs to lock a table.

Closes #12962
2024-02-06 12:59:00 +01:00
Cédric Krier a961d7c205 Test if specific exception is raised in stock tests 2024-01-24 10:31:22 +01:00
Cédric Krier ad361cbdab Document Units of Measure conversion API 2024-01-23 23:31:48 +01:00
Cédric Krier 1cb00830de Document product price API 2024-01-23 23:31:34 +01:00
Cédric Krier 8ac18badfc Remove unused template variable to order product record name 2024-01-23 23:08:46 +01:00
Cédric Krier 86b9b16a95 Add product deactivable mixins
Those include the product and template active field in the expression when
converting domain on active field.

Closes #12955
2024-01-24 10:16:04 +01:00
Cédric Krier ba1d556234 Keep copying readonly moves of shipments
Since cf8f1399bc1b readonly fields are not more copied but on shipment the
moves is readonly only to force the usage of Function fields.
So we could convert the readonly attribute by a static readonly states.

Closes #13004
2024-02-06 00:12:55 +01:00
Hartmut Goebel c60534e7ff Handle SOAP errors in EU Check Vies service
When introducing CheckVIES wizard in 7c90d7100f10, it was based on module
'vatnumbers' which returned an XML tree where we needed to pick the
'faultstring' from.
Since aeb2d1398456 it uses 'stdnum', which uses either 'zeep', 'suds' or
'pysimplesoap' as backend, all of which provide the faultstring in the
exception arguments. Unfortunately 'suds' puts it into 'args[1]', thus a loop
is required.

Also add missing error-codes from EU Check Vies service.

Closes #11147
2024-02-16 09:51:05 +01:00
Sergi Almacellas Abellana af093904ef Add employees to rule context for timesheet reporting models
Closes #13038
2024-02-16 00:35:52 +01:00
Sergi Almacellas Abellana 58fed762e5 Add employees to rule context for attendance sheet models
Closes #13036
2024-02-16 00:37:03 +01:00
Cédric Krier 53a383db4d Restore passing activatedeps to load_modules when initialize to Pool
e00d867eda85 removed the argument.

Closes #13000
2024-02-05 12:59:35 +01:00
Cédric Krier 2c121f61cc Support drop event on binary select button and image element
Closes #12924
2024-01-11 16:21:53 +01:00
Cédric Krier 8d0799bb85 Allow RPC on get_by_bank_account of statement journal 2024-02-05 09:59:35 +01:00
Cédric Krier d4f946b5a9 Search statement journal by bank account and currency
Closes #8492
2024-02-05 09:59:25 +01:00
Cédric Krier 524f6abec9 Split MT940 account into IBAN and currency for Rabobank
Closes #12882
2024-01-01 14:20:29 +01:00
Cédric Krier efa2b0efa7 Update documentation of production 2024-02-04 12:15:22 +01:00
Cédric Krier c02fe6b97a Update documentation of account statement AEB43 2024-01-13 16:38:34 +01:00
Sergi Almacellas Abellana f1fac7036e Reset amount to pay with Decimal
Otherwise amount to pay can not copy sign from line.

Closes #13023
2024-02-12 23:45:14 +01:00
Maxime Richez 46f4e09324 Order journals by matching sequence in configuration
Closes #13001
2024-02-12 23:26:54 +01:00
Maxime Richez c511c7045e Order journal by matching sequence when searching for match
Journals are ordered by default by name instead of matching sequence.

Closes #13001
2024-02-12 23:22:23 +01:00
Cédric Krier 2eec02b501 Update documentation of account statement 2024-02-05 22:58:38 +01:00
Cédric Krier d4eae01e14 Wait for dispute status change in Stripe scenario
Closes #12221
2024-02-03 16:12:12 +01:00
Cédric Krier 5da2affe6d Add test scenario for lot trace with production 2023-10-23 00:09:23 +02:00
Cédric Krier 2108bd10fe Include stock moves with same location in upward/downward traces
Closes #12637
2023-10-22 23:51:21 +02:00
Cédric Krier 3459ddefc9 Order downward lot trace by descending date 2023-10-22 22:38:57 +02:00
Cédric Krier 2778cd905a Restrict lot trace to move with lot 2023-10-23 08:02:03 +02:00
Cédric Krier fe946540cc Add locations to stock lot trace
Closes #12659
2023-10-22 22:36:01 +02:00
Cédric Krier 7a280ff797 Call on_change_with only for later field names
Closes #13016
2024-02-07 21:47:12 +01:00
Cédric Krier 946749eb81 Update comparison fiscal year, periods and dates of Income Statement Context
The comparison fields should behave the same way as the default fields.
2024-01-27 10:58:41 +01:00
Sergi Almacellas Abellana f834a5e940 Fill fiscal year when changing company of GL and Income statement context
Closes #11208
2024-01-27 10:59:59 +01:00
Cédric Krier 7f0c8c6705 Improve documentation about escaping wildcards 2024-01-30 12:46:35 +01:00
Cédric Krier 45ab83cba5 Return new instances of PYSON object from PYSON shortcut methods
Closes #12985
2024-02-03 19:29:59 +01:00
Cédric Krier 276c2e6338 Do not insert contact mechanism between recipients hidden fields
Since e356d97a0f59 there are two recipients hidden fields in the email
template view.

Closes #12981
2024-02-01 12:10:59 +01:00
Cédric Krier d48292e786 Start editing only if clicked row is already the current row
Closes #12971
2024-01-29 23:18:40 +01:00
Cédric Krier e9089e17b0 Toggle a single instance of help dialog when pressing F1
Closes #12970
2024-01-29 20:33:22 +01:00
Cédric Krier 9cc7de53e6 Compare original functions to compute access of table query models
The bound methods are different because they are bounded to different classes.

Closes #12965
2024-01-29 11:35:16 +01:00
Cédric Krier 12bda46e38 Ignore bnr.ro when checking documentation link
Closes #12979
2024-02-01 09:47:57 +01:00
Cédric Krier 122dd1aa57 Apply access rights only on resource record linked to an instance
Closes #12977
2024-01-30 17:09:22 +01:00
Cédric Krier 20fff88603 Add support for timestamp field as datetime in domain parser
Closes #12776
2024-01-30 12:07:21 +01:00
Cédric Krier a8ee857681 Compute name of the product for stock move
So we can customize the product name to use the customer or supplier name.

Closes #12893
2024-01-04 23:54:49 +01:00
Cédric Krier b4608428fb Compute name of the product for sale, purchase and invoice lines
Instead of having the code in the report templates, we use a property that can
be extended without updating the template.

Closes #12892
2024-01-04 23:55:09 +01:00
Dani Möller bd54284d6f Use processing pool and selector as context managers
Delegate closing both resources to the with instruction.
2024-02-04 19:45:59 +01:00
Dani Möller aa96c33cbc Rewrite worker with concurrent.futures instead of multiprocessing
Unlike multiprocessing pools, the concurrent library pools will raise an
exception if child processes have died and can't accept further tasks. This
should cause the main worker to stop instead of stalling in an inifinite wait.

Introduce a dummy noop execution in the pool to probe if it is still operative
to mitigate the volume of lost tasks if the next submited execution would raise
a BrokenExecutor exception. This isn't 100% bulletproof because the pool might
still break between the probe and a new task being pulled.

The maxtasksperchild CLI option will only work for Python 3.11 onwards because
former concurrent.futures pools do not support this option.

Closes #11104
2024-02-04 20:32:09 +01:00
Cédric Krier bfbab59ebf Use usage from context for default contact mechanism on party 2024-01-04 18:48:14 +01:00
Cédric Krier 5181591ed7 Use template substitution for company header/footer
Closes #12699
2024-01-04 18:55:06 +01:00
Cédric Krier 1e0a1d648c Use latest link to document incoming OCR Typless documentation 2023-12-27 11:36:03 +01:00
Cédric Krier 7981f19cc8 Support second currency on statement line
Closes #12673
2023-10-30 17:37:54 +01:00
Cédric Krier 94a51aaa64 Invert sign of amount in second currency to reconcile statement line with invoice
When using the company currency, the amount used is credit - debit which is in
the opposite sign of amount in second currency.

Closes #12688
2023-10-30 17:44:35 +01:00
Sergi Almacellas Abellana 53304ebfd0 Fix typo in lot unit help text 2024-01-30 15:53:42 +01:00
Sergi Almacellas Abellana 79af25cee7 Fix typo in purchase change unit of measure error message 2024-01-30 15:51:16 +01:00
Cédric Krier 9900a62c95 Set default lead time for product to 0
It is assumed that most business will try to deliver customer as fast as
possible.

Closes #12728
2023-12-23 19:27:01 +01:00
Cédric Krier 5288fca2c5 Use csv reader to paste clipboard content in tree view 2023-12-22 14:28:24 +01:00
Cédric Krier 32cfd57d27 Add contextual menu to copy cell and column
Closes #12824
2023-12-22 14:48:01 +01:00
Cédric Krier 4a58965be5 Rename menu entry for copy/paste rows 2023-12-22 14:08:37 +01:00
Cédric Krier 4a0a6faea6 Manage assignation for customer shipment with same picking and output location
Closes #12815
2023-12-21 15:01:14 +01:00
Cédric Krier c6f095c760 Do not copy readonly relational fields
Closes #12849
2023-12-20 13:56:57 +01:00
Cédric Krier 04778f67de Allow user-select on cell except from menu
Closes #12824
2023-12-12 18:37:24 +01:00
Cédric Krier 160fae1b79 Disable user-select everywhere
user-select is now a standard.
2023-12-12 18:36:58 +01:00
Cédric Krier 3e3c047ca1 Define explicitly escape char used for like operators
For now we rely on the default value set by python-sql but SQL-92 does not
define a default value.

Closes #12933
2024-01-14 13:32:27 +01:00
Cédric Krier c67a5fd5e1 Use only debit and credit sign to compute payment kind of move line
Closes #12932
2024-01-13 18:53:13 +01:00
Cédric Krier 10505dd484 Remove duplicate subdivision in Australia address format
Closes #12928
2024-01-13 14:00:06 +01:00
Cédric Krier eb450247ee Consider null value as data for binary field
null value is set when the widget is cleared so it should not try to read it
again from the server.

Closes #12926
2024-01-11 16:30:10 +01:00
Cédric Krier 970f40f3be Use internal shipment location to compute warehouse of transit stock move
When the location is the transit location, the warehouse to be used is the
warehouse of the corresponding location on the internal shipment.

Closes #12746
2024-01-11 17:09:50 +01:00
Cédric Krier ee89b4cfac Use dedicated warehouse properties for cost
#12746
2024-01-11 18:30:01 +01:00
Cédric Krier 3e40277da9 Activate scrollbar on text and richtext widget and limit resize to vertical
The minimal height is set to 5 lines and maximal to 20 lines.

Closes #12921
2024-01-10 19:07:03 +01:00
Cédric Krier d18d5fb061 Reduce tox verbosity 2024-01-16 18:17:27 +01:00
Cédric Krier 69bdce8b29 Use include directive for subdirectory documentation
Closes #12822
2023-12-24 10:48:07 +01:00
Cédric Krier 10a8207581 Include database name in reset password request from tryton 2024-01-27 18:41:40 +01:00
Cédric Krier cdbeaa70ba Do not check link to ups.com
UPS blocks the automate test so we have to ignore them.
2024-01-01 13:45:14 +01:00
Cédric Krier 40b8cf0eca Support linkcheck ignore per module documentation
If a linkcheck_ignore.json exists in the doc folder, it is loaded to extend
the linkcheck_ignore configuration of Sphinx.
2024-01-01 13:43:49 +01:00
Cédric Krier ef49ce3774 Update documentation link to Shopify custom app
The anchor was removed on the website.
2024-01-01 13:40:00 +01:00
Cédric Krier 413048c312 Add template filters after being cached
The MemoryCache copy the stored template since 7bbbb91621ab but Genshi
Template clear the filters when copied.

Closes #12963
2024-01-28 00:34:12 +01:00
Cédric Krier e5a6aba9bb Support list of single value in sortable_values tools 2024-01-15 20:31:33 +01:00
Cédric Krier e409547408 Sort sale lines without shipping_date at the end when computing stock quantity
Closes #12938
2024-01-15 20:30:34 +01:00
Adrià Tarroja Caubet 0d71ab5440 Check purchase amount is not None on compute production cost
Closes #12946
2024-01-18 10:38:07 +01:00
Cédric Krier 8dc2186c94 Update documentation of web user 2023-11-08 10:55:53 +01:00
Cédric Krier 7fab261d1c Clear reset password when setting a new password 2023-12-27 17:50:15 +01:00
Cédric Krier 28434749db Allow resetting forgotten password
Closes #10629
2023-11-07 18:08:43 +01:00
Cédric Krier e6736aaed7 Allow resetting password of user via RPC
Closes #10629
2023-11-07 16:52:06 +01:00
Cédric Krier 6702732826 Explain no changes have been made on web user reset password email 2023-11-07 16:53:41 +01:00
Cédric Krier 013a47d35f Do not remove existing password when reset password 2023-11-07 16:52:31 +01:00
Cédric Krier e193722acb Convert reset_password method into dualmethod 2023-10-20 14:49:37 +02:00
Cédric Krier d09a438f76 Update documentation of marketing automation 2023-12-23 18:03:06 +01:00
Cédric Krier b919e5c828 Add trend spark lines to marketing automation scenario and activity 2023-11-07 00:21:00 +01:00
Cédric Krier a543d94a28 Add reporting on scenario and activity per period 2023-10-17 17:10:44 +02:00
Cédric Krier e8306b14de Require a date time for record activity of marketing automation 2023-10-17 13:07:44 +02:00
Cédric Krier f671cb8532 Display block rate instead of absolute value
The rate provides a better picture of the unsubscription of the marketing
scenario.
2023-10-17 18:42:41 +02:00
Cédric Krier 42b5ba1377 Display email rates instead of absolute value
The rates provide a better picture of the efficiency of the marketing
scenario.
2023-10-16 16:25:48 +02:00
Cédric Krier ec6ce50423 Always return an integer when counting records for marketing scenario and activities 2023-10-18 17:30:43 +02:00
Nicolas Évrard a12ce3cdc2 Apply overflow value to every parent group of node
Closes #12960
2024-01-26 12:40:14 +01:00
Sergi Almacellas Abellana 4c21901493 Do not fail when accessing sales or purchases attributes for UN/CEFACT Invoice
Closes #12873
2024-01-27 10:21:19 +01:00
Cédric Krier be1aac4fac Support cached_property on object with __slots__
Closes #12894
2024-01-05 01:36:50 +01:00
Cédric Krier 8eea0020b7 Initialize Model attributes of EDocument UN/CEFACT Invoice
The super __init__ method must be called to set some attributes used by Model.

Closes #12895
2024-01-05 01:36:06 +01:00
Cédric Krier 8a69a69cf6 Update request stock move to draft when sale line has no purchase request
When the purchase request is deleted and the process does not require to
recreate a purchase request, the request stock moves must be updated to draft.

Closes #12903
2024-01-20 00:01:38 +01:00
Cédric Krier 3565d06f80 Process for supply sales with the same company
Closes #12945
2024-01-18 10:02:22 +01:00
Cédric Krier 30e80741b6 Use only forecast quantity to process supply on sale
Closes #12901
2024-01-05 17:56:07 +01:00
Cédric Krier e29a075bdb Process for supply sales with the same warehouse
The product quantities must be from the same warehouse.

Closes #12902
2024-01-05 17:55:17 +01:00
Nicolas Évrard 5c36f4ddee Commit when all modules are upgraded
Closes #12542
Closes #12518
2023-10-24 20:27:14 +02:00
Nicolas Évrard a466db9eed Create table as they are finally set up
If the base tables are not in their final set up the update process will lock
them and it could result in a deadlock when the ir_cache table is used by the
Cache
2023-10-25 18:11:31 +02:00
Nicolas Évrard 75d1af9f84 Allow creating index concurrently 2023-09-27 17:20:20 +02:00
Nicolas Évrard 9ef3a0aafa Allow skipping index creation
Closes #12596
2023-09-27 17:15:44 +02:00
Cédric Krier f26aa8863a Prevent modify mutable cached value
The cached values are copied when set and copied again when returned so the
stored values can never be modified.

Closes #9558
2024-01-15 23:48:50 +01:00
Cédric Krier c76a4f85d1 Remove global OPJ variable 2024-01-05 19:57:01 +01:00
Cédric Krier 33a369385a Use pkgutil to list modules in directory 2024-01-05 19:55:51 +01:00
Cédric Krier 93980a94b8 Find module paths using entry points
Closes #12900
2024-01-05 19:57:49 +01:00
Cédric Krier 2f6ab00c76 Test sale and purchases scenario with payment term in cash rounding 2024-01-23 10:55:19 +01:00
Sergi Almacellas Abellana d36ee557ff Fix typo in set_context call when computing sale cash rounded amounts
Closes #12800
2023-12-05 09:34:46 +01:00
Sergi Almacellas Abellana a23879f25c Delete points when deleting quality control
Closes #12942
2024-01-22 16:28:16 +01:00
Cédric Krier f5fc52577f Use today as planned date for assigned move
The inclusion of the assigned move in the computation must be coherent between
quantity and delta.

Closes #12914
2024-01-09 19:42:05 +01:00
Cédric Krier 78abed9f25 Allow selecting blanket agreement line without supplier/customer product
When the order line as a supplier/customer product, we should allow to select
blanket agreement line with the same product or without any product. Because
the supplier/customer product may be added after the blanket agreement is
running.

Closes #12909
2024-01-08 14:28:38 +01:00
Cédric Krier 88b26a7eb6 Display the actual wrong ids in domain rule error message
Closes #12907
2024-01-07 19:11:58 +01:00
Cédric Krier d3e086aace Order cancelled document without number last
Closes #12899
2024-01-05 15:33:57 +01:00
Cédric Krier 9d4aee14f2 Use the same separator between account configuration and create chart wizard
The separator for the default category accounts should be the same between
configuration and the wizard.

Closes #10910
2024-01-05 09:14:19 +01:00
Cédric Krier 276fc2a55d Group the creation of advance payment invoices from sale
It is faster to save the invoices all at once.
2024-01-03 13:47:46 +01:00
Cédric Krier f38c760c2d Append recalled lines from sale advance payment to invoice
This prevents extra save of the invoice and lines by taking advantage of the
process decomposition of bdbd8ba02e94.
2024-01-03 13:40:01 +01:00
Cédric Krier 4841c130de Save invoice before adding recalled lines from sale advance payment
Closes #12889
2024-01-03 13:30:22 +01:00
Cédric Krier 821be7e6dc Return test suite when loading proteus README 2023-12-31 16:59:39 +01:00
Cédric Krier 406092be4d Check doctest files
They are converted to python files before running checks.
2024-01-14 19:21:56 +01:00
Cédric Krier b913ad45d8 Add assert methods to test tools
Closes #12879
2023-12-29 19:02:08 +01:00
Cédric Krier f15e7a901f Strip trailing 0 when checking Decimal in doctest output of SQLite
Closes #12878
2023-12-30 19:45:32 +01:00
Cédric Krier 2fce630dd6 Test expected output instead of comparison in doctest 2023-12-29 19:03:10 +01:00
Cédric Krier 72f5012be5 Set ELLIPSIS option flag on doctest
Closes #12877
2023-12-28 23:00:52 +01:00
Cédric Krier 2743dc7a06 Set IGNORE_EXCEPTION_DETAIL option flag on doctest
Closes #12877
2023-12-28 14:39:39 +01:00
Cédric Krier 10a513babd Use defaultdict to compute amount to pay of invoice 2023-12-29 14:34:06 +01:00
Cédric Krier a443bbe466 Round amount with currency digits in commission reporting 2023-12-29 15:01:25 +01:00
Cédric Krier 840b1d7c30 Round revenue with currency digits in sale reporting 2023-12-29 14:16:30 +01:00
Cédric Krier a32876e1b0 Set currency exchange account for account cash scenario
Since 1c698e656c02 such account is needed if there is a difference due to
exchange rate.

Closes #12935
2024-01-14 23:34:48 +01:00
Cédric Krier 6760a897eb Fill second currency fields of exchange move line
account_cash_rounding module expect that all move lines from Invoice.get_move
has the fields filled.

Closes #12935
2024-01-14 23:33:40 +01:00
Cédric Krier 92c9626008 Cancel only staging moves when purchase request is cancelled
Otherwise when the exception is handled and new stock moves are created for
the line, they are cancelled the next time the sale is processed.

Closes #12934
2024-01-14 22:30:26 +01:00
Cédric Krier 2e08be99c7 Return list of instance as result of test recurrence rule wizard
Since 0db956eb2505 the on_change_with for xxx2Many must return a list of
instances.

Closes #12885
2024-01-11 22:02:48 +01:00
Cédric Krier f8e095826d Do not translate quantity placeholder in sale and purchase messages
Closes #12919
2024-01-10 14:15:52 +01:00
Cédric Krier 5f3df70bd9 Return children length only if children field is loaded
Closes #12906
2024-01-06 22:56:46 +01:00
Cédric Krier 5a24591cd5 Use account end date of AEB43 as statement date
It is useful to have statement ordered correctly to have the start balance
filled by default.
2024-01-02 17:04:33 +01:00
Cédric Krier bfee808b02 Search first journal by client account code from AEB43
We fallback to IBAN search if no journal is found.
2024-01-02 12:24:34 +01:00
Cédric Krier d64d54c13e Do not include account number in AEB43 statement name
The account number should already by in the journal name.
2024-01-02 12:22:08 +01:00
Cédric Krier ba7e60e9a3 Replace csb43 by aeb43 package to parse AEB43 statement
Closes #12881
2024-01-02 12:22:58 +01:00
Cédric Krier 779ece7045 Use transaction date for accounting date when importing AEB43 statement
Closes #12886
2024-01-02 17:02:23 +01:00
Cédric Krier 8d35781825 Permit to use deposit account for payment
97281a746606 removed this option that was available since 3255a31c30a2.

Closes #12910
2024-01-08 17:29:26 +01:00
Sergi Almacellas Abellana 44c73a2118 Fix typo in invoice post exchange credit account message 2024-01-10 10:04:24 +01:00
Cédric Krier a71d7b3ebf Book currency exchange amount of invoice in dedicated account
Closes #1302
2023-12-23 23:15:47 +01:00
Cédric Krier f6d8247263 Use AccountMissing and JournalMissing exception for reconciliation 2023-12-23 23:12:41 +01:00
Cédric Krier 61e1b18e76 Compute remaining quantity of sale and purchase order following their method
Ignored quantities must be deduced from the remaining quantity.

Closes #12698
2023-12-17 17:07:41 +01:00
Cédric Krier d3264484c4 Update sale based on purchase request update state
It is simpler if the purchase triggers the update of the request and the
update of the request triggers the process of the sale.
2023-12-21 12:33:00 +01:00
Cédric Krier 956040bca9 Test resetting purchase request exception
#12853
2023-12-21 13:14:18 +01:00
Cédric Krier f6254471f2 Set supply state of sale line to cancelled only if the purchase request is also cancelled
Closes #12853
2023-12-21 12:01:31 +01:00
Cédric Krier 5cda753f9f Allow assigned move of 0 quantity using view location and delete them
This is needed to be able to ignore assignation of move from a view location,
and to delete them before all moves are set to done.

Closes #12870
2023-12-26 16:00:06 +01:00
Cédric Krier d9782d97aa Do not hard-code invoice report action in refresh report wizard
This prevents customization of the report by deactivating the report action as
documented.

Closes #12872
2023-12-27 13:33:10 +01:00
Cédric Krier a241eb3f96 Group only customer shipment by cost method
The return shipment does not have this field.

Closes #12842
2024-01-06 01:32:52 +01:00
Nicolas Évrard e66e35a0bd Sort correclty eager and lazy fields when calling Form.display
Closes #12890
2023-12-22 14:48:49 +01:00
Cédric Krier 4cbcfc4a4c Remove shipment cost method on sale without carrier
Since 34a5debdca00 a domain enforce an empty shipment cost method when no
carrier is selected. So former order must be updated to still be valid.

Closes #12753
2023-12-23 18:42:46 +01:00
Cédric Krier aa20b2de71 Update planned date of assigned move from shipment and production
Closes #12867
2023-12-23 02:32:43 +01:00
Cédric Krier 435e3a0c59 Do not copy drop moves when copying move
Closes #12848
2023-12-20 13:12:32 +01:00
Cédric Krier 14596be0b8 Add CompanyTestMixin to sale advance payment tests
Closes #12845
2023-12-19 18:09:12 +01:00
Cédric Krier d67158f723 Inherit access from sale for advance payment condition 2023-12-19 18:05:28 +01:00
Cédric Krier 6188d35854 Add missing company context to line of advance payment term line account 2023-12-19 18:03:19 +01:00
Cédric Krier 7b1b686603 Ensure to use the same connection when connecting
Closes #10154
2023-12-17 00:38:43 +01:00
Cédric Krier b1c62be75a Remove socket option TCP_NODELAY
The option is now set by default in standard library
https://github.com/python/cpython/commit/9d8a3ad02acdd7800775b4e1e205bf7c8e47162f
2023-12-17 00:12:41 +01:00
Cédric Krier 8c7e035976 Do not raise warning when shipment quantity difference is 0
Closes #12817
2023-12-11 16:35:18 +01:00
Cédric Krier 2cbc71847b Factorize assign_supplied of Sale to reuse assign_try of Move 2023-12-08 14:00:08 +01:00
Cédric Krier ae9746f4e0 Pick only from children location when assigned stock move from supplied sale line
Closes #12812
2023-12-08 12:53:16 +01:00
Cédric Krier 2cab2b2282 Do not check warnings with access checked
The user does not have access right to delete warnings.

Closes #12861
2023-12-22 16:57:43 +01:00
Cédric Krier dfadc5b62b Do not fail to get keyword action with empty record id
Closes #12767
2023-12-23 18:50:58 +01:00
Cédric Krier 1cc73c08ab Convert __export_row from static method to instance method 2023-12-23 18:30:59 +01:00
Cédric Krier 7b3107a8a0 Instantiate list of ids when exporting data with domain as list of ids
Closes #12868
2023-12-23 18:26:00 +01:00
Cédric Krier 27b0b99a44 Compute length of inserted text in bytes
Closes #12138
2023-12-23 18:21:35 +01:00
Cédric Krier 10a5cb783e Return list of instance as result of test tax wizard
Since 0db956eb2505 the on_change_with for xxx2Many must return a list of
instances.

Closes #12852
2023-12-23 01:47:24 +01:00
Cédric Krier 5fae62689f Catch InvalidOperation when rounding inserted number
Closes #12866
2023-12-23 01:39:53 +01:00
Cédric Krier e3be4a5897 Do not rely on invoice state to compute reconciliation lines
Closes #12864
2023-12-22 18:43:55 +01:00
Cédric Krier 675f848571 Include location code when testing record name of forecast
Since e229080e430e the location record name contains the code.

Closes #12869
2023-12-26 13:21:06 +01:00
Cédric Krier 3d0512ed89 Use correct id for error message when creating invoice line not draft
Closes #12863
2023-12-22 18:34:45 +01:00
Cédric Krier 3f11b8f6b5 Delete inventory moves when shipment is reset to draft
Closes #12826
2023-12-14 10:28:12 +01:00
Cédric Krier 94e7196488 Add test scenario for cancelled purchase request from sale supply
#12825
2023-12-21 13:11:20 +01:00
Cédric Krier 3a711d631d Reset and cancel shipment when purchase request is cancelled
The stock moves of the linked sale line is cancelled so the linked shipment
state must be updated to synchronize the inventory moves or to cancel it.

Closes #12825
2023-12-13 23:27:42 +01:00
Cédric Krier eb681a2ece Document that payment method is needed to run pay invoice wizard 2023-12-15 10:12:14 +01:00
Adrià Tarroja Caubet 35a048deea Rename move uom to unit to compute credit limit quantity
Since 7129f417a22c the unit field has been renamed on stock move.

Closes #12875
2023-12-28 12:25:05 +01:00
Cédric Krier de9abf43cc Convert negative id value as None when set by the client
Domain inversion may force a unique value based on the default value from
PYSON evaluation. In such case it means that no record can be set.

Closes #12799
2023-12-17 23:39:16 +01:00
Cédric Krier 2d8df237dd Do not fill invoice date when advance payment condition has no delay
Closes #12844
2023-12-19 16:22:05 +01:00
Cédric Krier b06c9083e7 Prevent opening multiple popup window from the same widget
Closes #12819
2023-12-11 19:28:39 +01:00
Cédric Krier a101df7399 Reload screen after the button action has been executed
Closes #12818
2023-12-12 00:44:42 +01:00
Cédric Krier 8c57fcc0b2 Return a promise when executing an action
This is useful to trigger event after the action is executed.
2023-12-11 18:47:12 +01:00
Cédric Krier e5f73ea902 Set to wait only once each shipment
When shipments are groupes they may appears multiple times in the list so we
must use a unique set.

Closes #12839
2023-12-18 19:13:28 +01:00
Cédric Krier 7c7af11e7a Check selection of dict schema when selection or help selection are modified
It is the modification of stored field that must be checked and not the json
version.

Closes #12781
2023-12-17 20:33:32 +01:00
Cédric Krier 0d437d341c Use empty value Function xxx2Many fields without initial value
Since d142b33fa3ab the on_change_with relies on _changed_value. But for
Function xxx2Many fields if their value is not in the initial value, we should
not retrieve it from the database because the result will be the same as the
one set by on_change_with.

Closes #12836
2023-12-15 18:09:30 +01:00
Cédric Krier 8197d55ed1 Set the same width to input and its group
Such that the suffix are next to the input.

Closes #12821
2023-12-12 11:47:07 +01:00
Cédric Krier 8d9156df84 Add ondelete RESTRICT on Many2One of party ValueMixin
Closes #12809
2023-12-07 23:24:37 +01:00
Cédric Krier acd0ae2ad2 Remove unused view from purchase invoice line standalone
The view is no more used since 17796866a629
2023-12-11 12:12:23 +01:00
Cédric Krier ce5afab66e Duplicate object tag when updating the content of Document widget
Some browser does not refresh properly the content when updating the data
attribute.

Closes #12808
2023-12-07 22:50:42 +01:00
Cédric Krier b3d31f1b60 Always align on start on xs screen
e5446fb8d4ce reintroduced the rule but using text-center while it is justify-*
that is used for grid layout.

Closes #12807
2023-12-07 19:54:48 +01:00
Cédric Krier 28d72755f4 Give more spaces to the party identifier types configuration 2023-12-10 23:42:24 +01:00
Cédric Krier 71ea6e12e7 Hide filter box on extra small screen
Closes #12014
2023-12-07 17:53:34 +01:00
Cédric Krier 413bb19f68 Limit size of tab title per screen size
#12014
2023-12-07 17:36:14 +01:00
Cédric Krier 001377f6e2 Switch between long and short name/title of tab depending on screen size
On small screen the long name is used for the tab name and the short name for
the title. On large screen it is the opposite.

#12014
2023-12-07 17:24:19 +01:00
Cédric Krier 0a4015a2d2 Remove navbar-header to dropdown menu of tab
#12014
2023-12-07 13:41:14 +01:00
Cédric Krier a6639da28b Hide more buttons on small and extra small screens
#12014
2023-12-07 14:14:52 +01:00
Cédric Krier 2c87c460ac Use reference and id to compute record name of blanket agreement
Closes #12805
2023-12-06 16:54:44 +01:00
Cédric Krier fa8f47e0d1 Add short method to email marketing template context
This allows dynamic URL to be shorten and tracked.

Closes #12785
2023-11-30 10:07:57 +01:00
Cédric Krier 5208b96d55 Add UTM to marketing automation activity
Such that links in email message get UTM parameters.
2023-11-25 18:16:33 +01:00
Cédric Krier 1150e78834 Add UTM to marketing email message
Such that links in email message get UTM parameters.
2023-11-25 17:57:12 +01:00
Cédric Krier 2cf37b3763 Add UTM parameters to shortened URL
Closes #12772
2023-11-24 19:28:23 +01:00
Cédric Krier f9a638e951 Use sql table after calling the __setup__ super of marketing parameter
It is ModelSQL.__setup__ that fill the _table attribute used in the SQL table.

Closes #12773
2023-11-25 18:31:08 +01:00
Cédric Krier 071364744e Use sortable function to test origin of xxx2Many 2023-12-02 18:33:07 +01:00
Cédric Krier 37ef23134a Order xxx2Many targets by id origin instead of order name
The ordering is only to group records for cache alignment, so ordering by id
avoid to have to join on the origin table.

Closes #12795
2023-12-02 18:25:11 +01:00
Cédric Krier 96c8feaaba Round moves progress to 4 digits as the field
Closes #12834
2023-12-14 19:13:23 +01:00
Nicolas Évrard c5e5ddf2a1 Mark M2M records for addition in parent after they're saved
Closes #12832
2023-12-14 17:54:27 +01:00
Maxime Richez b391c418ef Run setup.py explicitly with python3 to get version when freezing
Closes #12831
2023-12-23 02:06:45 +01:00
Cédric Krier 1c0ff8eec2 Do not try to read action values if the ID does not exist 2023-12-17 22:57:20 +01:00
Cédric Krier 3d3ffc5c7c Do not check access when retrieving action ID
The ID does not contain any security data. If the user does not have access to
the action, an access error will be raised later when actual values are read.

Closes #12803
2023-12-17 22:54:17 +01:00
Cédric Krier 37997a6329 Add None value to selection for nullable_widget when search_read fails
Closes #12838
2023-12-17 21:13:12 +01:00
Cédric Krier 950ba29cd7 Do not read record name for value None for inactive selection
Closes #12838
2023-12-17 21:12:41 +01:00
Cédric Krier d8a0bfb4e1 Fix python formatting in tryton translation 2023-12-16 11:17:44 +01:00
Cédric Krier 0ff69f990a Add missing match_none argument to carrier match for subdivision
Closes #12835
2023-12-14 19:26:23 +01:00
Cédric Krier ea2dbe21d5 Check lot required only when changing move to done
Closes #12547
2023-12-12 16:03:33 +01:00
Cédric Krier 92c9467b9c Always include changed field when calling on_change_with
Since d142b33fa3ab the on_change_with relies on _changed_value.
So in order to correctly detect if a xxx2Many field has some record removed,
we need to have the value of the client.

Closes #12837
2023-12-15 19:10:38 +01:00
Cédric Krier fb1f515011 Add location code to record name of location
Closes #12804
2023-12-06 16:42:24 +01:00
Cédric Krier e9f90b7944 Use 0 as fallback for missing debit or credit in on_change functions
Closes #12823
2023-12-12 17:02:31 +01:00
Cédric Krier 2b0d50afc4 Compare leaf values only of the same type to sort domain
Closes #12792
2023-12-12 18:02:14 +01:00
Cédric Krier f978cf0f73 Fill currency, payment term and invoice address with on_change_party of purchase
Closes #7027
2023-12-02 23:17:25 +01:00
Cédric Krier 0b8fa97b81 Update marketing campaign scenario for sales returned by opportunity conversion
Closes #12829
2023-12-16 00:11:59 +01:00
Cédric Krier 545e10465f Open purchases created from purchase requests
Closes #12796
2023-12-02 23:42:08 +01:00
Cédric Krier 80fac3b031 Add confirmation when cancelling shipments
Closes #9667
2023-12-02 18:45:20 +01:00
Cédric Krier 278c61466b Prefix record name with "record" in validation error message 2023-11-17 23:00:57 +01:00
Cédric Krier 779b329705 Use string version for selection values in error message 2023-11-17 19:55:48 +01:00
Cédric Krier 332bf2d30a Support x86_64 and arm64 darwin build
Closes #10046
2023-11-04 19:58:21 +01:00
Cédric Krier 8d07966b10 Update documentation of stock product location 2023-11-21 12:09:42 +01:00
Cédric Krier 902b745bb7 Pick consumable product by default product location
Closes #12315
2023-11-21 11:29:07 +01:00
Cédric Krier 86c2350271 Add default location property to pick product as fallback 2023-11-21 10:57:38 +01:00
Cédric Krier 98c6a80035 Split set_product_location to have a get_product_location 2023-11-21 10:46:48 +01:00
Cédric Krier ac7c59dd1b Add index entries for document incoming modules 2023-11-25 21:40:12 +01:00
Cédric Krier 9ad54faa98 Update documentation to use python3 instead of python 2023-11-20 00:04:08 +01:00
Cédric Krier 0d625d4010 Remove usage of set_user to skip check access
Since ce8d7a19766a the access rule are enforced only if check access is set.
2023-12-01 21:14:37 +01:00
Nicolas Évrard 8c82dccd9f Filter history using SQL
Closes #12687
2023-10-29 01:31:05 +02:00
Nicolas Évrard 2f2f15e49b Create indexes on the history table
Closes #12686
2023-10-30 16:37:40 +01:00
Nicolas Évrard 67fe5021ba Do not prevent to fill the cache of fields with a datetime_field set
The value of those fields do not depend on the value of the datetime_field,
only the value of the remote fields read.

Closes #12715
2023-11-22 01:29:47 +01:00
Nicolas Évrard 32fa5569ad Do not prevent to fill the cache of fields with a context
The value of those fields in the database do not depend of the context and
Function fields getter depending on context are tested separately.

Closes #12715
2023-12-12 22:48:01 +01:00
Nicolas Évrard 59b686b264 Report DatabaseOperationalError as an HTTP Service Unavailable error
Closes #12736
2023-11-13 10:42:37 +01:00
Nicolas Évrard e084ca5d66 Use a standard reporting mecanism for all HTTP errors 2023-11-13 10:40:21 +01:00
Cédric Krier 2ff6251c0e Do not compute domain inversion when displaying column that is not a field
Since c320a786923f the field is needed to compute domain inversion so we
should not compute domain inversion for non field.

Closes #12814
2023-12-10 23:32:43 +01:00
Nicolas Évrard f756c5f2e3 Insert new keys in dictionary while respecting the key sequence
Closes #12750
2023-11-14 10:20:07 +01:00
Cédric Krier 08a5b65618 Always pass the field name to convert value from getter of Function field
Closes #12802
2023-12-05 12:33:33 +01:00
Cédric Krier e030cd2470 Strip generated code of product
The template code or product suffix code allow to have trailing and leading
spaces but not the code of the product. So we must compare the code with a
stripped version of the generated code to avoid infinite loop.

Closes #12801
2023-12-05 10:28:35 +01:00
Cédric Krier f5076fb5e7 Limit modification access of product location to stock administrator
Closes #12798
2023-12-03 23:01:57 +01:00
Cédric Krier 3567c87ebc Test workflow graph report 2023-11-19 17:50:14 +01:00
Hartmut Goebel 1bcf23721c Make state node of workflow graph unique
Quite a few model have states with the same name (e.g. "open",
"close).  When creating Workflow Graphs for several of these models at
once, the nodes of these states must be distinguished.  Otherwise the
graphs will overlap and eventually even overwrite each other.

Closes #12253
2023-11-19 12:16:03 +01:00
Cédric Krier 3d31023cd9 Wait until the expected result is fetched in Stripe test scenario
Closes #12221
2023-12-02 12:02:10 +01:00
Cédric Krier 2d45f1630a Wait until the expected result is fetched in Shopify test scenario
Closes #12794
2023-12-02 12:02:16 +01:00
Cédric Krier 9358d7197f Do not clear log_records of Transaction if it is empty
When the transaction fails to start, the log_records may still be None.

Closes #12793
2023-12-01 20:55:20 +01:00
Cédric Krier 5f2793f75c Hide URL button when the field is empty
The disabled attribute does not prevent the user to click on the empty link.

Closes #12747
2023-11-14 15:23:36 +01:00
Cédric Krier 77660e3932 Do not disable button and action on readonly records
Backed out changeset 0e988bac37ba

Closes #12651
2023-11-14 14:25:04 +01:00
Cédric Krier 2e31d458e1 Render button as readonly in tryton list if the record is readonly
Closes #12741
2023-11-14 00:31:12 +01:00
Cédric Krier 6ebbe6d5d7 Set One2Many fields later
Closes #12740
2023-11-14 00:05:51 +01:00
Cédric Krier b75207c1cb Validate field set later
Closes #12739
2023-11-14 00:05:17 +01:00
Cédric Krier 47df4da88f Add statement_timeout to postgis get_connection
173ecc4f452d add a new parameter to get_connection so it must also be defined
for postgis.
2023-12-01 12:03:55 +01:00
Cédric Krier e195a0fb93 Add DatabaseTimeoutError to postgis backend
173ecc4f452d add a new database error so it must also be defined for postgis.
2023-12-01 11:32:57 +01:00
Cédric Krier 2cc7faec53 Update tutorial to use PEP517 when installing in editable mode
Closes #12701
2023-11-20 00:00:26 +01:00
Cédric Krier fd652d4b4f Update documentation of sale opportunity 2023-11-05 21:35:48 +01:00
Cédric Krier 24fc9d1caa Open sales converted from opportunity 2023-11-05 00:02:18 +01:00
Cédric Krier bf6cb46170 Restrict convert button of sale opportunity to sale group 2023-11-05 00:03:21 +01:00
Cédric Krier 87470e9180 Fill sale with default addresses and payment term if not filled on opportunity
Closes #12671
2023-10-26 09:58:49 +02:00
Cédric Krier e58a569f23 Do not force value for single list on multi-value field
Fields based on multi-value must not be forced to the single value of a list.

Closes #12737
2023-11-14 00:00:15 +01:00
Cédric Krier ba7badec6e Retry to send email when server unexpectedly disconnect
Closes #12790
2023-12-01 09:54:40 +01:00
Cédric Krier b7fe8b8c1a Always round unit price when recomputing it for stock move
Closes #12787
2023-11-30 15:59:31 +01:00
Cédric Krier e63fe001cb Do not scroll into view empty element
Closes #12783
2023-12-03 01:51:48 +01:00
Cédric Krier e70d24d375 Return values instead of changed result when testing payment term
Since 0db956eb2505 the returned value of on_change_with is set on the field.

Closes #12775
2023-11-27 12:43:31 +01:00
Sergi Almacellas Abellana 93beb80269 Explain where available companies and employes are defined 2023-11-20 09:51:12 +00:00
Sergi Almacellas Abellana afa4a20176 Make record rules documentation more explicit 2023-11-23 15:04:06 +01:00
Nicolas Évrard 300bad3f6b Assert that only one thread is active in trytond.application 2023-11-22 01:37:11 +01:00
Nicolas Évrard 50c102a2e5 Do not start threads before the end of the evaluation of trytond.application
When uwsgi forks workers it can happen that python execute the code from one of
the launched thread (eg: the cache listener or trytond-status). In that case
python will keep executing the thread and never switch to the main thread. Thus
preventing to listen for incoming connections.

Closes #12758
2023-11-16 23:37:19 +01:00
Cédric Krier 4779c72913 Limit size of database cache dump to 40 chars
Each backend has their limit. 40 chars is picked as limit to match the size of
mercurial hash.

Closes #12754
2023-11-26 17:12:40 +01:00
Cédric Krier 459795e2f3 Do not fail on missing colli_tracking_number in Sendcloud parcels
Closes #12782
2023-11-29 15:12:05 +01:00
Cédric Krier 3dc49cc1ae Set product to None on supplier invoice when product name is not found
Closes #12774
2023-11-25 21:28:50 +01:00
Cédric Krier c6335a368c Update trees of chart of accounts with 2 passes
When a new parent is added to a tree template like types, taxes or tax codes,
the corresponding record of the new template parent is not yet created.
So we need to use a default value for the parent and update again the tree
after creating the new records.

Closes #12755
2023-11-16 16:32:43 +01:00
Cédric Krier 3af76aa548 Select first record when refreshing attachment preview
Since ab82d479eca1 no record is set when displaying screen.

Closes #12756
2023-11-16 18:23:14 +01:00
Cédric Krier 1b1bbc5390 Use screen methods to activate or not the next/previous buttons of attachment preview
Closes #12756
2023-11-16 18:22:04 +01:00
Nicolas Évrard e1e6492a40 Add a test on search of historical records 2023-11-23 17:56:11 +01:00
Nicolas Évrard bd5e4d6714 Filter history lines matching search when they're too old
Closes #12687
2023-11-03 19:07:11 +01:00
Cédric Krier c3a8f6bea9 Fix call to Sao.Logger.error
Closes #12778
2023-11-27 21:35:24 +01:00
Cédric Krier b93f265fcd Submit form only if scan_code is submit
Close #12764
2023-11-20 20:41:34 +01:00
Cédric Krier cd18803452 Use list price instead of gross price in sale reporting
The sales are computed without taxes so the sales from point should use the
same kind of price.

Closes #12703
2023-11-03 13:00:12 +01:00
Cédric Krier b55e8c71ec Do not remove starting wildcard when searching bank account number
The start number of bank account are often the same for account from the same
bank.

Closes #12769
2023-11-22 11:01:31 +01:00
Cédric Krier 00f6195b48 Enforce uniqueness only on bank account number active
Closes #12768
2023-11-21 18:07:11 +01:00
Cédric Krier b794bcb0fe Use production warehouse to select product location
Closes #12765
2023-11-21 11:35:44 +01:00
Cédric Krier 7e9d69f07f Set state to done when all lines of sale or purchase are cancelled
So when the shipment and invoice state are None and all lines have an 100%
progress, then the order should be considered as done.

Closes #12698
2023-11-01 16:37:23 +01:00
Cédric Krier da3c68d0c0 Add invoice progress on sale and purchase line 2023-11-01 16:34:42 +01:00
Cédric Krier 92a3ddb9ee Set shipment state of sale and purchase to None when all stock moves are cancelled
Closes #12697
2023-11-01 16:32:41 +01:00
Cédric Krier fe921d6406 Support writing None on Shopify identifier
Closes #12760
2023-11-20 12:04:37 +01:00
Cédric Krier 88dc4b90dd Prevent to delete lines and origins of statements not cancelled or in draft
Closes #12678
2023-10-28 14:31:35 +02:00
Cédric Krier 1b5fa9a892 Clear tax identifiers on invoice when they are no more valid
Closes #12748
2023-11-15 11:09:44 +01:00
Cédric Krier 41df1f1d7e Do not expand checkboxes group in party form
This gives more space for the name and code.
2023-11-09 15:11:50 +01:00
Cédric Krier 37e43d6573 Optimize update of customer move when drop shipment is set to waiting
By using One2Many fields, it is possible to avoid custom search and use nested
single loop to update the customer moves.
2023-10-25 18:11:34 +02:00
Cédric Krier 4344f77ac5 Do not convert width and height URL parameters of product image into boolean
Since 8cba7039bc3c there are 2 new arguments w and h.

Closes #12745
2023-11-14 15:07:54 +01:00
Cédric Krier 84d4f09f56 Increase the size of expander
Closes #12733
2023-11-11 19:37:53 +01:00
Cédric Krier adea79e356 Prevent switching row when double click on expander
Closes #12732
2023-11-11 19:34:27 +01:00
Cédric Krier 389d7a1143 Do not execute action on row active if there is no selected id
Closes #12731
2023-11-11 19:31:35 +01:00
Cédric Krier fb034737db Set grab cursor only on draggable-handle class
Closes #12730
2023-11-11 19:27:03 +01:00
Cédric Krier a918b8245d Hide tree-menu column on sao menu
Closes #12729
2023-11-11 19:24:19 +01:00
Cédric Krier 7b454b7284 Set height of street text widget for 3 lines
Closes #12723
2023-11-09 10:07:47 +01:00
Cédric Krier e6d8dbd359 Use default access for ModelSQL based on table_query when method is extended
When the create/write/delete methods are extended, we should assume that
developer has implemented such access.

Closes #12757
2023-11-16 18:55:47 +01:00
Cédric Krier ca253a388c Do not include locale of build system
They should not be needed as tryton uses only its own strings.
2023-11-04 19:52:58 +01:00
Cédric Krier f25c90e284 Do not copy tryton data and plugins in frozen build
Since d94c92c1de67 the library is no more compressed so those package data are
already in the usual place.
2023-11-04 19:51:52 +01:00
Cédric Krier 95fae18a2a Include shared libraries in lib folder for darwin build
cx_Freeze 6.15.10 store included files in Resources folder and make a symlink
in MacOS folder for lib and share.
So we must include shared libraries in the lib folder to be available.
2023-11-04 19:48:03 +01:00
Cédric Krier aba92d0126 Replace etc directory by share for frozen build
cx_Freeze 6.15.10 store included files in Resources folder and make a symlink
in MacOS folder for lib and share.
So we need to store etc content in share to be available.
2023-11-04 19:44:09 +01:00
Cédric Krier 3a05f7b69b Clean temporary files and directories when exiting tryton
Closes #9507
2023-11-06 19:33:16 +01:00
Cédric Krier 5d2bc18e3d Display fields of payment term delta in application order
The user may not know the order in which the relativedelta operations are
applied.
2023-11-02 16:21:25 +01:00
Cédric Krier 7270cc86fa Remove non updated targets of xxx2Many when importing data
Closes #12625
2023-10-09 11:42:36 +02:00
Cédric Krier f4ca6c4648 Document how account journal are chosen 2023-11-07 00:35:26 +01:00
Cédric Krier 97f432e06f Fix typo in sale documentation 2023-11-16 09:24:27 +01:00
Cédric Krier a88682d1a6 Fallback to move date when ordering by maturity date and it is empty
Closes #12722
2023-11-09 09:40:49 +01:00
Cédric Krier 3ffd756e7f Select first visible siblings when page is hidden
We need to search for all siblings because the next page may also be
invisible.

Closes #12553
2023-11-06 18:53:39 +01:00
Sergi Almacellas Abellana 7274778986 Do not instanciate transaction multiple times when computing sale price 2023-11-15 16:44:53 +01:00
Cédric Krier 4bc74de579 Remove check against move when deleting account period
The period on the move restrict on delete of the foreign key.
2023-11-06 15:46:25 +01:00
Cédric Krier 592edc13dd Allow modifying account period dates with account moves
As long as the existing moves has still a date inside the new period dates.

Closes #12667
2023-11-06 15:44:47 +01:00
Cédric Krier 91f4c6b2b8 Check dates of periods when changing fiscal year dates
Closes #12667
2023-11-06 16:19:33 +01:00
Cédric Krier fac8bb3e18 Always trigger default branch on readthedocs
This allows readthedocs to detect new branches:
https://github.com/readthedocs/readthedocs.org/issues/9106

Closes #12694
2023-10-31 23:04:37 +01:00
Cédric Krier 6b2aa74ce5 Preserve product image ratio
Closes #12744
2023-11-14 14:18:56 +01:00
Cédric Krier e4702d47ba Do not set offset in counting domain of link
173ecc4f452d moved the offset parameter into the domain.

Closes #12725
2023-11-09 15:03:32 +01:00
Adrià Tarroja Caubet ad9c41be26 Fix typo in comment of test scenario for stock supply production 2023-11-13 00:30:34 +01:00
Cédric Krier f8a6d08b20 Test extension of invoice and shipment grouping fields 2023-11-08 11:37:38 +01:00
Cédric Krier 84318913c7 Incoterm tests depend on sale shipment grouping not sale invoice group 2023-11-08 11:36:58 +01:00
Cédric Krier b1a3e23951 Extend grouping fields with a list
4e84027dbc2e updated the grouping fields method to receive the grouped
instance but it did not adapt to the returned type which is a list.

Closes #12718
2023-11-08 00:09:37 +01:00
Cédric Krier 7fb5a0c6b8 Do not compute internal quantity for stock move created without product nor unit
Closes #12716
2023-11-06 18:02:23 +01:00
Cédric Krier d9ace5f731 Properly use resources files from importlib
Closes #12706
2023-11-04 19:32:22 +01:00
Cédric Krier 258912e273 Allow to freeze tryton on OS without python
Use python version defined in the setup.py shebang instead of the generic
python.
2023-11-04 14:05:12 +01:00
Nicolas Évrard 02650a0ffd Share record's _ids when saving new records
Closes #12657
2023-11-11 13:48:16 +01:00
Cédric Krier d35d519ea1 Do not try to compute promotion quantity for lines without type line
Closes #12351
2023-11-02 16:42:45 +01:00
Cédric Krier f8ca4ce512 Avoid race condition when making directories for database cache 2023-11-01 13:27:36 +01:00
Cédric Krier 5ff3893f50 Avoid race condition when making configuration directory of tryton 2023-11-01 13:27:09 +01:00
Cédric Krier ee8782f102 Avoid race condition when making directories for filestore
Closes #12696
2023-11-01 13:26:37 +01:00
Cédric Krier 3e49835516 Update documentation link for UNECE Recommendation N° 20
Closes #12695
2023-11-01 10:06:00 +01:00
Cédric Krier 783e4364af Do not translate data type of inbound email 2023-10-21 23:21:28 +02:00
Cédric Krier ea16e4e071 Use secondary instead of second in help of Purchase Secondary UoM 2023-10-21 17:21:27 +02:00
Cédric Krier f20e941597 Display Braintree transaction ID for refund on the form 2023-10-18 13:13:27 +02:00
Cédric Krier 294f666b0d Display Stripe refund ID on the form 2023-10-18 13:12:57 +02:00
Cédric Krier bf9bfdcd8d Test JSON-RPC response ID 2023-10-22 12:19:29 +02:00
Cédric Krier 8f7ce67b20 Translate invalid response ID message 2023-10-22 12:19:54 +02:00
Juan Jose Pablos efe0f40b55 Fix typo in invalid response ID message 2023-10-22 13:42:01 +02:00
Nicolas Évrard a42cb450f7 Add timeout parameter on RPC calls
Closes #11293
2023-10-08 00:08:52 +02:00
Cédric Krier 6ea6082b78 Wrap long label to 80 chars
Closes #12618
2023-10-05 18:29:20 +02:00
Cédric Krier 4556b58e57 Set button sensitive on One2Many widget after screen display promise is done
The method to set button sensitive needs the view type to be set since
7d8c4076363f.

Closes #12691
2023-10-31 21:57:09 +01:00
Cédric Krier 816dd6f549 Do not union empty dict as payments when creating moves without statements
Closes #12689
2023-10-30 23:45:52 +01:00
Cédric Krier 3175c99f26 Use list to declare requirement for tryton with sound
Closes #12690
2023-10-30 23:48:16 +01:00
Cédric Krier 689382daeb Do not fail when parsing invalid Decimal value in number entry
Closes #12692
2023-10-31 21:42:11 +01:00
Cédric Krier 25f2f35fea Round with decimal digits when applying factor on float and numeric field
Closes #12692 #12669
2023-10-31 21:41:23 +01:00
Cédric Krier 38da6a0451 Increase version number 2023-10-30 18:51:13 +01:00
10300 changed files with 690609 additions and 250266 deletions
+2
View File
@@ -1,3 +1,5 @@
[flake8]
ignore=E123,E124,E126,E128,E741,W503
extend-exclude=cookiecutter-module
per-file-ignores =
**/*/tests/scenario*.py:E302,E305
+57
View File
@@ -0,0 +1,57 @@
name: Validate Tryton customizations
on:
push:
branches:
- '8.0'
- 'integration/8.0'
- 'feature/**'
- 'translation/**'
pull_request:
branches:
- '8.0'
- 'integration/8.0'
workflow_dispatch:
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-24.04
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 1
github-server-url: https://code.unpaismejor.org.do
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
cache: pip
- name: Install validation dependencies
run: python -m pip install --upgrade build polib
- name: Validate Python syntax
run: python -m compileall -q trytond/trytond
- name: Validate PO files
run: python ci/validate_po.py
- name: Build customized packages
run: python -m build trytond
- name: Install customized Tryton server
run: python -m pip install './trytond[test]'
- name: Run relevant Tryton tests
env:
TRYTOND_DATABASE_URI: sqlite://
DB_NAME: ':memory:'
run: |
python -m unittest discover -s ci/tests -p 'test_*.py'
python -m unittest discover -s trytond/trytond/tests -p 'test_i18n.py'
python -m unittest trytond.tests.test_ir.IrTestCase.test_dominican_spanish_language
+42
View File
@@ -0,0 +1,42 @@
name: Propose upstream Tryton updates
on:
schedule:
- cron: '35 */6 * * *'
workflow_dispatch:
permissions:
contents: write
pull-requests: write
issues: write
concurrency:
group: upstream-8.0-sync
cancel-in-progress: false
jobs:
propose-update:
runs-on: ubuntu-24.04
env:
GITEA_URL: https://code.unpaismejor.org.do
MIRROR_REPOSITORY: tryton-do/tryton-mirror
CUSTOM_REPOSITORY: tryton-do/tryton
TARGET_BRANCH: '8.0'
INTEGRATION_BRANCH: integration/8.0
UPDATE_BRANCH: automation/upstream-8.0
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
steps:
- name: Check out customized repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITEA_TOKEN }}
github-server-url: https://code.unpaismejor.org.do
- name: Configure Git identity
run: |
git config user.name 'tryton-sync'
git config user.email 'tryton-sync@noreply.unpaismejor.org.do'
- name: Propose upstream update
run: ci/sync_upstream.sh
+284 -1075
View File
File diff suppressed because it is too large Load Diff
+146 -84
View File
@@ -2,6 +2,8 @@ workflow:
rules:
- if: $CI_COMMIT_BRANCH =~ /^topic\/.*/ && $CI_PIPELINE_SOURCE == "push"
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^(\[Draft\]|\(Draft\)|Draft:)/
when: never
- when: always
stages:
@@ -10,6 +12,9 @@ stages:
- test
- build
variables:
TMPDIR: /tmp
packages:
stage: preparation
rules:
@@ -17,6 +22,12 @@ packages:
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/tryton/ci
variables:
DOC_BASE_URL: ${CI_PROJECT_DIR}/docs
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/http-v2
before_script:
- pip install build "hatchling >= 1" hatch-tryton babel rnc2rng
script:
- .gitlab-scripts/generate-packages.sh packages
artifacts:
@@ -27,8 +38,18 @@ packages:
documentation:
stage: preparation
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/sphinxdoc/sphinx
variables:
DOC_NO_ISOLATION: true
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/http-v2
before_script:
- pip install build "hatchling >= 1" hatch-tryton babel rnc2rng
script:
- .gitlab-scripts/generate-doc.sh docs
- find docs -type f -not -name 'objects.inv' -delete
- find docs -type d -empty -delete
artifacts:
paths:
- docs/
@@ -38,7 +59,7 @@ documentation:
- "**/*/doc/**/*"
- "**/*/tryton.cfg"
- "**/*/CHANGELOG"
- "readthedocs/**/*"
- "doc/**/*"
.check:
stage: check
@@ -53,11 +74,14 @@ documentation:
variables:
DOC_BASE_URL: ${CI_PROJECT_DIR}/docs
DOC_DIR: doc
DOC_NO_ISOLATION: true
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/http
- .cache/pip/http-v2
before_script:
- pip install -r "${PACKAGE}/${DOC_DIR}/requirements-doc.txt"
- pip install build "hatchling >= 1" hatch-tryton babel rnc2rng
- pip install sphinx-lint rstcheck[sphinx]
script:
- cd "${PACKAGE}"
@@ -89,10 +113,10 @@ documentation:
when: on_success
- when: never
check-doc-readthedocs:
check-doc:
extends: .check-doc
variables:
PACKAGE: readthedocs
PACKAGE: doc
DOC_DIR: .
rules:
- if: $CI_COMMIT_TAG == null
@@ -103,9 +127,15 @@ check-doc-readthedocs:
.check-code:
extends: .check
before_script:
- .gitlab-scripts/doctest2python.py
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
changes:
- "**/*.py"
- "**/tests/*.rst"
when: always
- when: never
check-flake8:
extends: .check-code
@@ -125,37 +155,81 @@ check-dist:
script:
- twine check packages/*
check-eslint:
extends: .check
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/node:lts
variables:
NODE_CACHE_DIR: "$CI_PROJECT_DIR/.cache/npm"
cache:
paths:
- .cache/npm
script:
- cd sao
- npm install --cache ${NODE_CACHE_DIR} --unsafe-perm --legacy-peer-deps
- npm run check
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
changes:
- "sao/**/*.js"
when: always
- when: never
check-ci-modules:
extends: .check
script:
- python .gitlab-scripts/generate-ci.py $TMPDIR/gitab-ci-modules.yml
- cmp .gitlab-ci-modules.yml $TMPDIR/gitab-ci-modules.yml
- python .gitlab-scripts/generate-ci.py "${TMPDIR}/gitab-ci-modules.yml"
- cmp .gitlab-ci-modules.yml "${TMPDIR}/gitab-ci-modules.yml"
check-cookiecutter-module:
extends: .check
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/http
- .cache/pip/http-v2
before_script:
- pip install cookiecutter
script:
- cookiecutter --no-input cookiecutter-module -o /tmp
- flake8 /tmp/my_module
- isort --multi-line VERTICAL_GRID --check --diff /tmp/my_module
- cookiecutter --no-input cookiecutter-module -o "${TMPDIR}"
- flake8 "${TMPDIR}/my_module"
- isort --multi-line VERTICAL_GRID --check --diff "${TMPDIR}/my_module"
rules:
- changes:
- cookiecutter-module/**/*
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
changes:
- cookiecutter-module/**/*
when: always
- when: never
check-template-modules:
extends: .check
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/http
- .cache/pip/http-v2
before_script:
- pip install cookiecutter
script:
- .gitlab-scripts/check-template-modules.sh
check-account-chart:
extends: .check
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/alpine
before_script:
- apk add --no-cache libxslt
script:
- .gitlab-scripts/check-account-chart.sh
rules:
- if: $CI_COMMIT_TAG == null
changes:
- modules/*/localize.xsl
- modules/account/account_chart*.xml
- modules/account_be/account_be*.xml
- modules/account_be/tax_be*.xml
- modules/account_syscohada/account_syscohada*.xml
when: on_success
- when: never
.test:
stage: test
rules:
@@ -175,11 +249,13 @@ check-template-modules:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/http
- .cache/pip/http-v2
before_script:
- pip install tox
script:
- tox -e "py${PYTHON_VERSION/./}" -c "${PACKAGE}" -vv -- -v --output-file junit.xml
- tox -e "py${PYTHON_VERSION/./}" -c "${PACKAGE}" -- -v --output-file "${CI_PROJECT_DIR}/${PACKAGE}/junit.xml"
after_script:
- .gitlab-scripts/rewrite-coverage-paths.py "trytond/" "" ${PACKAGE}/junit.xml ${PACKAGE}/coverage.xml
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
artifacts:
reports:
@@ -189,14 +265,14 @@ check-template-modules:
path: ${PACKAGE}/coverage.xml
parallel:
matrix:
- PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12"]
- PYTHON_VERSION: ["3.10", "3.11", "3.12", "3.13", "3.14"]
.test-db:
extends: .test-tox
variables:
DB_CACHE: /tmp/cache
DB_CACHE: "${TMPDIR}/cache"
script:
- tox -e "py${PYTHON_VERSION/./}-${DATABASE}" -c "${PACKAGE}" -vv -- -v --output-file junit.xml
- tox -e "py${PYTHON_VERSION/./}-${DATABASE}" -c "${PACKAGE}" -- -v --output-file "${CI_PROJECT_DIR}/${PACKAGE}/junit.xml"
.test-sqlite:
extends: .test-db
@@ -214,6 +290,9 @@ check-template-modules:
- name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/postgres
alias: postgresql
command: ["-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
parallel:
matrix:
- PYTHON_VERSION: ["3.14"]
.test-postgis:
extends: .test-db
@@ -222,7 +301,7 @@ check-template-modules:
POSTGIS_URI: postgis://postgres@postgis:5432/
POSTGRES_HOST_AUTH_METHOD: trust
script:
- tox -e "py${PYTHON_VERSION/./}" -c "${PACKAGE}" -vv -- -v --output-file junit.xml
- tox -e "py${PYTHON_VERSION/./}" -c "${PACKAGE}" -- -v --output-file "${CI_PROJECT_DIR}/${PACKAGE}/junit.xml"
services:
- name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/postgis/postgis
alias: postgis
@@ -230,14 +309,12 @@ check-template-modules:
.test-npm:
extends: .test
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/node
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/node:lts
variables:
NODE_CACHE_DIR: "$CI_PROJECT_DIR/.cache/npm"
cache:
paths:
- .cache/npm
before_script:
- sh .gitlab-scripts/bower_allow_root.sh
script:
- cd "${PACKAGE}"
- npm -s install --cache ${NODE_CACHE_DIR} --unsafe-perm --legacy-peer-deps
@@ -246,82 +323,39 @@ check-template-modules:
reports:
junit: ${PACKAGE}/_build/test-reports/*.xml
.trigger-doc-build:
stage: build
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/tryton/ci
script:
- .gitlab-scripts/trigger-readthedocs.py -c "${RTD_CONFIG}" -p "${PACKAGE}" -b "${CI_COMMIT_BRANCH#branch/}"
rules:
- if: $CI_COMMIT_BRANCH =~ /^branch\/.*/
changes:
- ${PACKAGE}/doc/**/*
- ${PACKAGE}/tryton.cfg
- ${PACKAGE}/CHANGELOG
- ${PACKAGE}/.readthedocs.yaml
allow_failure: true
trigger-doc-build-readthedocs:
extends: .trigger-doc-build
variables:
PACKAGE: readthedocs
rules:
- if: $CI_COMMIT_BRANCH =~ /^branch\/.*/
changes:
- ${PACKAGE}/**/*
allow_failure: true
check-doc-trytond:
extends: .check-doc
variables:
PACKAGE: trytond
check-trytond-rng:
extends: .check
cache:
paths:
- .cache/pip/http
before_script:
- pip install rnc2rng
script:
- python trytond/setup.py update_rng
- |
if [ `hg status trytond| wc -l` -ne 0 ]; then
false
fi
rules:
- changes:
- trytond/**/*.rnc
- trytond/**/*.rng
trigger-doc-build-trytond:
extends: .trigger-doc-build
variables:
PACKAGE: trytond
test-trytond-sqlite:
extends: .test-sqlite
after_script:
- .gitlab-scripts/rewrite-coverage-paths.py "" "${PACKAGE}/" ${PACKAGE}/junit.xml ${PACKAGE}/coverage.xml
variables:
PACKAGE: trytond
TAG_PATTERN: '/^trytond-.*/'
test-trytond-postgresql:
extends: .test-postgresql
after_script:
- .gitlab-scripts/rewrite-coverage-paths.py "" "${PACKAGE}/" ${PACKAGE}/junit.xml ${PACKAGE}/coverage.xml
variables:
PACKAGE: trytond
TAG_PATTERN: '/^trytond-.*/'
parallel:
matrix:
- PYTHON_VERSION: ["3.10", "3.11", "3.12", "3.13", "3.14"]
check-doc-trytond-gis:
extends: .check-doc
variables:
PACKAGE: trytond-gis
trigger-doc-build-trytond-gis:
extends: .trigger-doc-build
variables:
PACKAGE: trytond-gis
test-trytond-gis-postgis:
extends: .test-postgis
after_script:
- .gitlab-scripts/rewrite-coverage-paths.py "" "${PACKAGE}/" ${PACKAGE}/junit.xml ${PACKAGE}/coverage.xml
variables:
PACKAGE: trytond-gis
TAG_PATTERN: '/^trytond-gis-.*/'
@@ -331,30 +365,37 @@ check-doc-proteus:
variables:
PACKAGE: proteus
trigger-doc-build-proteus:
extends: .trigger-doc-build
variables:
PACKAGE: proteus
test-proteus:
extends: .test-tox
after_script:
- .gitlab-scripts/rewrite-coverage-paths.py "" "${PACKAGE}/" ${PACKAGE}/junit.xml ${PACKAGE}/coverage.xml
variables:
PACKAGE: proteus
TAG_PATTERN: '/^proteus-.*/'
check-doc-naiad:
extends: .check-doc
variables:
PACKAGE: naiad
test-naiad:
extends: .test-tox
after_script:
- .gitlab-scripts/rewrite-coverage-paths.py "" "${PACKAGE}/" ${PACKAGE}/junit.xml ${PACKAGE}/coverage.xml
variables:
PACKAGE: naiad
TAG_PATTERN: '/^naiad-.*/'
check-doc-tryton:
extends: .check-doc
variables:
PACKAGE: tryton
trigger-doc-build-tryton:
extends: .trigger-doc-build
variables:
PACKAGE: tryton
test-tryton:
extends: .test-tox
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/tryton/tryton-test:${PYTHON_VERSION}
after_script:
- .gitlab-scripts/rewrite-coverage-paths.py "" "${PACKAGE}/" ${PACKAGE}/junit.xml ${PACKAGE}/coverage.xml
variables:
PACKAGE: tryton
TAG_PATTERN: '/^tryton-.*/'
@@ -366,4 +407,25 @@ test-sao:
PACKAGE: sao
TAG_PATTERN: '/^sao-.*/'
test-demo:
stage: test
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/python:3.10
variables:
TRYTOND_DATABASE__PATH: "$TMPDIR"
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/http-v2
before_script:
- pip install packages/trytond* packages/proteus*
script:
- touch "${TRYTOND_DATABASE__PATH}/demo.sqlite"
- echo "admin" > "${TMPDIR}/password"
- TRYTONPASSFILE="${TMPDIR}/password" trytond-admin --database demo --all --email admin@example.com
- python -m demo --database demo
rules:
- changes:
- demo/**/*
- modules/{account,account_invoice,account_payment,account_statement,company,country,currency,party,product,production,production_routing,production_work,project,purchase,sale,stock,timesheet}/**/*
include: '.gitlab-ci-modules.yml'
-2
View File
@@ -1,2 +0,0 @@
#!/bin/sh
echo '{ "allow_root": true }' > ~/.bowerrc
+46
View File
@@ -0,0 +1,46 @@
#!/bin/sh
set -eu
OUTPUT=${1:-`mktemp -d`}
for module in account account_asset account_deposit sale_advance_payment
do
module="modules/${module}"
mkdir -p "${OUTPUT}/${module}"
for lang in de en es fr
do
printf "Check ${module} ${lang} ..."
file="${module}/account_chart_${lang}.xml"
xsltproc --stringparam lang "${lang}" "modules/account/localize.xsl" "${module}/account_chart.xml" > "${OUTPUT}/${file}"
cmp "${file}" "${OUTPUT}/${file}"
printf "OK\n"
done
done
module="modules/account_be"
mkdir -p "${OUTPUT}/${module}"
for lang in fr nl
do
printf "Check ${module} ${lang} ..."
for template in account tax
do
file="${module}/${template}_be_${lang}.xml"
xsltproc --stringparam lang "${lang}" "${module}/localize.xsl" "${module}/${template}_be.xml" > "${OUTPUT}/${file}"
cmp "${file}" "${OUTPUT}/${file}"
done
printf "OK\n"
done
module="modules/account_syscohada"
mkdir -p "${OUTPUT}/${module}"
for chart in 2001 2016
do
for lang in fr
do
printf "Check ${module} ${chart} ${lang} ..."
file="${module}/account_syscohada_${chart}_${lang}.xml"
xsltproc --stringparam chart "${chart}" --stringparam lang "${lang}" "${module}/localize.xsl" "${module}/account_syscohada.xml" | sed -e "s/\$country/SYSCOHADA/" > "${OUTPUT}/${file}"
cmp "${file}" "${OUTPUT}/${file}"
printf "OK\n"
done
done
+4 -3
View File
@@ -1,14 +1,15 @@
#!/bin/sh
set -eu
OUTPUT=`mktemp -d`
find modules -name setup.py -print | while read path
OUTPUT=${1:-`mktemp -d`}
find modules -maxdepth 2 -name pyproject.toml -print | while read path
do
path=`dirname "${path}"`
module=`basename "${path}"`
printf "Check $module ... "
cookiecutter --no-input cookiecutter-module -o "${OUTPUT}" module_name="${module}"
for file in tox.ini .readthedocs.yaml doc/conf.py doc/requirements-doc.txt
for file in tox.ini doc/conf.py doc/requirements-doc.txt
do
cmp "${path}/${file}" "${OUTPUT}/${module}/${file}"
done
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env python3
import doctest
import glob
import os
from itertools import chain
from pathlib import Path
ROOT_DIR = os.path.dirname(os.path.dirname(__file__))
if __name__ == '__main__':
parser = doctest.DocTestParser()
for filename in chain(glob.glob('**/*/tests/*.rst', root_dir=ROOT_DIR)):
filename = Path(filename)
with open(filename, 'r') as scenario:
text = scenario.read()
with open(filename.with_suffix('.py'), 'w') as file:
lineno = -1
for line in parser.parse(text):
if isinstance(line, doctest.Example):
file.write(('#\n' * (line.lineno - lineno - 1))[1:])
file.write(line.source)
lineno = line.lineno + len(line.source.splitlines()) - 1
newline = False
else:
pass
+15 -9
View File
@@ -1,4 +1,4 @@
#!/bin/env python
#!/bin/env python3
import glob
import os
import sys
@@ -12,23 +12,24 @@ check-doc-${name}:
variables:
PACKAGE: ${package}
trigger-doc-build-${name}:
extends: .trigger-doc-build
variables:
PACKAGE: ${package}
test-${name}-sqlite:
extends: .test-sqlite
variables:
PACKAGE: ${package}
TAG_PATTERN: '/^${tag_name}-.*/'
${extra}
test-${name}-postgresql:
extends: .test-postgresql
variables:
PACKAGE: ${package}
TAG_PATTERN: '/^${tag_name}-.*/'
""")
${extra}""")
RESOURCE_GROUPS = {
'account_fr_chorus': 'chorus',
'account_payment_stripe': 'stripe',
'edocument_peppol_peppyrus': 'peppyrus',
'web_shop_shopify': 'shopify',
}
def main(filename):
@@ -45,10 +46,15 @@ def render(file):
name = tag_name = package.replace('/', '-')
if tag_name.startswith('modules-'):
tag_name = tag_name[len('modules-'):]
if resource_group := RESOURCE_GROUPS.get(tag_name):
extra = ' resource_group: ' + resource_group + '\n'
else:
extra = ''
mapping = {
'name': name,
'package': package,
'tag_name': tag_name,
'extra': extra,
}
file.write(TEMPLATE.substitute(mapping))
@@ -56,7 +62,7 @@ def render(file):
def all_packages():
root_dir = os.path.dirname(BASE_DIR)
for filename in chain(
glob.glob('modules/*/setup.py', root_dir=root_dir)):
glob.glob('modules/*/pyproject.toml', root_dir=root_dir)):
yield os.path.dirname(filename)
+11 -5
View File
@@ -3,11 +3,13 @@ set -eu
OUTPUTDIR=`realpath "${1}"`
mkdir -p "${OUTPUTDIR}"
export DOC_BASE_URL=$OUTPUTDIR
: ${DOC_BASE_URL:=${OUTPUTDIR}}
: ${MAX_PROCS:=$(( `nproc` * 2 ))}
export DOC_BASE_URL
find . -name 'cookiecutter*' -prune -o -path '*/doc/requirements-doc.txt' -print | while read path; do
pip install -r "${path}"
done
requirements=$(mktemp "${TMPDIR}/requirements-doc-XXXXXXXXXX.txt")
find . -name 'cookiecutter*' -prune -o -path '*/doc/requirements-doc.txt' -exec cat {} + | sort | uniq > "${requirements}"
pip install -r "${requirements}"
(find . -name 'cookiecutter*' -prune -o -path '*/doc/conf.py' -print | while read path; do
path=`dirname "${path}"`
@@ -20,10 +22,14 @@ done
package="client-desktop"
elif [ "${package}" = "proteus" ]; then
package="client-library"
elif [ "${package}" = "naiad" ]; then
package="client-rest"
elif [ "${package}" = "trytond-gis" ]; then
package="backend-gis"
elif [ "${package}" = "." ]; then
package=""
else
package="modules-${package}"
fi
echo "${path}/doc" "${OUTPUTDIR}/${package}"
done) | xargs --max-args=2 --max-procs=$(( `nproc` * 2)) python -m sphinx -Q -T -E -b html
done) | xargs --max-args=2 --max-procs=${MAX_PROCS} python3 -m sphinx -Q -T -E -b html
+2 -2
View File
@@ -4,6 +4,6 @@ set -eu
PACKAGES=`realpath "${1}"`
mkdir -p "${PACKAGES}"
(find . -name 'cookiecutter*' -prune -o -name setup.py -print | while read path; do
(find . -name 'cookiecutter*' -prune -o -name pyproject.toml -print | while read path; do
echo "`dirname ${path}`"
done) | xargs --max-procs=$(( `nproc` * 2)) -I '{}' sh -c "cd \"{}\" && python setup.py --quiet sdist --dist-dir \"${PACKAGES}\""
done) | xargs --max-procs=$(( `nproc` * 2)) -I '{}' sh -c "cd \"{}\" && python3 -m build --no-isolation --wheel --quiet --outdir \"${PACKAGES}\""
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env python3
import sys
import xml.etree.ElementTree as ET
def _replace_path(root, tag, attribute, old_prefix, new_prefix):
for element in root.iter(tag):
original_path = element.get(attribute)
if old_prefix and original_path.startswith(old_prefix):
new_path = original_path.replace(old_prefix, new_prefix, 1)
element.set(attribute, new_path)
elif not old_prefix:
new_path = new_prefix + original_path
element.set(attribute, new_path)
def rewrite_coverage_xml(file_path, old_prefix, new_prefix):
tree = ET.parse(file_path)
root = tree.getroot()
if root.tag == 'coverage':
_replace_path(root, 'class', 'filename', old_prefix, new_prefix)
elif root.tag == 'testsuites':
_replace_path(root, 'testcase', 'file', old_prefix, new_prefix)
tree.write(file_path)
if __name__ == "__main__":
old_prefix, new_prefix, *file_paths = sys.argv[1:]
for file_path in file_paths:
rewrite_coverage_xml(file_path, old_prefix, new_prefix)
-45
View File
@@ -1,45 +0,0 @@
#!/usr/bin/env python
#
# Requires $RTD_CONFIG to point to a file providing the webhook data for each
# package. The file is in Python cfg file format.
# Each section defines on package. Example::
#
# [modules/party]
# url: https://readthedocs.org/api/v2/webhook/modules-party/12345/
# token: 93afe1ce2d1107597f69774009964990c0643dad
import configparser
import sys
from argparse import ArgumentParser
from urllib import request
from urllib.parse import urlencode
parser = ArgumentParser()
parser.add_argument('--config', '-c', required=True)
parser.add_argument('--package', '-p', required=True)
parser.add_argument('--branches', '-b', nargs='*')
args = parser.parse_args()
cfg = configparser.ConfigParser()
cfg.read(args.config)
url = cfg.get(args.package, 'url')
token = cfg.get(args.package, 'token')
if not url:
sys.exit(f"Missing url for {args.package!r}")
elif not token:
sys.exit(f"Missing token for {args.package!r}")
data = [
('token', token),
*(('branches', branch) for branch in args.branches),
]
req = request.Request(
url,
data=urlencode(data).encode(),
headers={
'User-Agent': 'python-urllib/%s' % request.__version__,
})
with request.urlopen(req) as resp:
print(resp.read())
+2 -1
View File
@@ -1,10 +1,11 @@
syntax: glob
*.py[cdo]
*.mo
*.rng
*.egg-info
dist/
build/
node_modules/
bower_components/
.tox/
requirements.txt
requirements-dev.txt
+1230
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
@@ -12,11 +12,11 @@ destination = os.path.join(root, 'trytond', 'trytond', 'modules')
modules = set()
try:
filenames = glob.glob('modules/*/setup.py', root_dir=root)
filenames = glob.glob('modules/*/pyproject.toml', root_dir=root)
except TypeError:
# If root_dir is not supported, fallback considering the hook is executed
# from the repository root
filenames = glob.glob('modules/*/setup.py')
filenames = glob.glob('modules/*/pyproject.toml')
for filename in filenames:
modules.add(os.path.basename(os.path.dirname(filename)))
+44 -49
View File
@@ -1,86 +1,81 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import importlib.metadata
import io
import json
import os
import subprocess
from multiprocessing.dummy import Pool
from packaging.requirements import Requirement
root = os.path.dirname(os.path.dirname(__file__))
module_path = os.path.join(root, 'modules')
dependencies = set()
development_dependencies = {
build_dependencies = {
'rnc2rng',
'Babel',
'hatchling',
'hatch-tryton',
}
development_dependencies = build_dependencies | {
'Sphinx',
'cookiecutter',
'rnc2rng',
'sphinx-lint',
'tox',
}
FNULL = open(os.devnull, 'w')
_build_deps_installed = True
try:
for requirement in build_dependencies:
importlib.metadata.version(Requirement(requirement).name)
except importlib.metadata.PackageNotFoundError:
_build_deps_installed = False
def add_dependencies(package, path):
egg_info_name = '%s.egg-info' % package
egg_info = os.path.join(path, egg_info_name)
if (not os.path.isdir(egg_info)
or (os.path.getmtime(os.path.join(path, 'setup.py'))
> os.path.getmtime(os.path.join(egg_info, 'requires.txt')))
or (os.path.exists(os.path.join(path, 'tryton.cfg'))
and os.path.getmtime(os.path.join(path, 'tryton.cfg'))
> os.path.getmtime(os.path.join(egg_info, 'requires.txt')))):
subprocess.call(
['./setup.py', 'egg_info'],
cwd=path,
stdout=FNULL,
stderr=FNULL)
with io.open(os.path.join(egg_info, 'requires.txt')) as f:
development = False
for dependency in f.readlines():
dependency = dependency.strip('\n')
# Do not include trytond requirements as we have its source code
if (not dependency
or dependency.startswith('trytond')
or dependency.startswith('proteus')):
continue
# Always include optional dependencies as development
if dependency[0].startswith('['):
development = True
continue
# Remove version numbers
for char in ['>', '<', '=']:
dependency = dependency.split(char)[0]
if development:
development_dependencies.add(dependency)
else:
dependencies.add(dependency)
def add_dependencies(package):
cmd = 'python3 -m build -qq --metadata'
if _build_deps_installed:
cmd += ' --no-isolation'
metadata = subprocess.check_output(
cmd, shell=True, encoding='utf-8', cwd=package).strip()
metadata = json.loads(metadata)
for requirement in metadata.get('requires_dist', []):
requirement = Requirement(requirement)
if (requirement.name.startswith('trytond')
or requirement.name in {'proteus', 'tryton'}):
continue
development = bool(requirement.marker)
requirement.marker = None
if development:
development_dependencies.add(requirement)
else:
dependencies.add(requirement)
pool = Pool()
pool.apply_async(add_dependencies,
('trytond', os.path.join(root, 'trytond')))
pool.apply_async(add_dependencies,
('tryton', os.path.join(root, 'tryton')))
pool.apply_async(add_dependencies,
('proteus', os.path.join(root, 'proteus')))
pool.apply_async(add_dependencies,
('trytond_gis', os.path.join(root, 'trytond-gis')))
pool.apply_async(add_dependencies, (os.path.join(root, 'trytond'),))
pool.apply_async(add_dependencies, (os.path.join(root, 'tryton'),))
pool.apply_async(add_dependencies, (os.path.join(root, 'proteus'),))
pool.apply_async(add_dependencies, (os.path.join(root, 'trytond-gis'),))
for module in os.listdir(module_path):
path = os.path.join(module_path, module)
if not os.path.isdir(path):
continue
pool.apply_async(
add_dependencies, ('trytond_%s' % module, path))
pool.apply_async(add_dependencies, (path,))
pool.close()
pool.join()
with io.open(os.path.join(root, 'requirements.txt'), 'w') as fp:
fp.writelines(map(lambda d: d + '\n', sorted(dependencies)))
fp.writelines(map(lambda d: d + '\n', sorted(map(str, dependencies))))
with io.open(os.path.join(root, 'requirements-dev.txt'), 'w') as fp:
fp.writelines(map(lambda d: d + '\n', sorted(development_dependencies)))
fp.writelines(
map(lambda d: d + '\n', sorted(map(str, development_dependencies))))
+7 -2
View File
@@ -17,6 +17,7 @@ From the root directory of the repository run:
.. code-block:: console
pip install packaging build
.hooks/update_requirements
.hooks/link_modules
@@ -41,9 +42,13 @@ the ``.hg/hgrc``:
[hooks]
update.modules = .hooks/link_modules
update.requirements = .hooks/update_requirements
update.trytond = trytond/hatch_build.py
update.tryton = tryton/hatch_build.py
On ``hg update``, the first hook will automatically create symlinks for modules
and the second hook will automatically generate requirements files.
On ``hg update``, the first hook will automatically create symlinks for
modules, the second hook will automatically generate requirements files, the
third generate the ``RNG`` files for ``trytond`` and the last compile the
translation files for ``tryton``.
Submit Change
=============
+63
View File
@@ -0,0 +1,63 @@
#!/usr/bin/env bash
set -Eeuo pipefail
required=(GITEA_URL MIRROR_REPOSITORY CUSTOM_REPOSITORY TARGET_BRANCH \
INTEGRATION_BRANCH UPDATE_BRANCH GITEA_TOKEN)
for variable in "${required[@]}"; do
if [[ -z "${!variable:-}" ]]; then
echo "Missing required environment variable: ${variable}" >&2
exit 2
fi
done
auth_header="Authorization: token ${GITEA_TOKEN}"
mirror_url="${GITEA_URL}/${MIRROR_REPOSITORY}.git"
push_url="${GITEA_URL}/${CUSTOM_REPOSITORY}.git"
git remote add upstream "${mirror_url}"
git -c "http.extraHeader=${auth_header}" fetch --no-tags upstream \
"+refs/heads/${TARGET_BRANCH}:refs/remotes/upstream/${TARGET_BRANCH}"
git fetch origin "${INTEGRATION_BRANCH}"
upstream_ref="upstream/${TARGET_BRANCH}"
base_ref="origin/${INTEGRATION_BRANCH}"
if git merge-base --is-ancestor "${upstream_ref}" "${base_ref}"; then
echo "${INTEGRATION_BRANCH} already contains the current upstream commit."
exit 0
fi
if git ls-remote --exit-code --heads origin "${UPDATE_BRANCH}" >/dev/null 2>&1; then
git fetch origin "${UPDATE_BRANCH}"
git switch --create "${UPDATE_BRANCH}" --track "origin/${UPDATE_BRANCH}"
else
git switch --create "${UPDATE_BRANCH}" "${base_ref}"
fi
# Keep a reused automation branch based on the latest integration history.
# This merge is intentionally non-destructive: conflicts create an issue and
# leave every published reference untouched.
if ! git merge-base --is-ancestor "${base_ref}" HEAD; then
if ! git merge --no-edit --no-ff "${base_ref}"; then
conflicts=$(git diff --name-only --diff-filter=U | sed '/^$/d')
git merge --abort
python ci/upstream_pr.py conflict "${conflicts}"
exit 1
fi
fi
if ! git merge --no-edit --no-ff "${upstream_ref}"; then
conflicts=$(git diff --name-only --diff-filter=U | sed '/^$/d')
git merge --abort
python ci/upstream_pr.py conflict "${conflicts}"
exit 1
fi
if git diff --quiet "origin/${UPDATE_BRANCH}" HEAD 2>/dev/null; then
echo 'The existing update branch already contains this upstream revision.'
else
git -c "http.extraHeader=${auth_header}" push "${push_url}" \
"HEAD:refs/heads/${UPDATE_BRANCH}"
fi
python ci/upstream_pr.py pull-request "$(git rev-parse "${upstream_ref}")"
+60
View File
@@ -0,0 +1,60 @@
import importlib.util
import os
import pathlib
import unittest
from unittest.mock import ANY, patch
SCRIPT = pathlib.Path(__file__).parents[1] / 'upstream_pr.py'
class UpstreamPullRequestTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
environment = {
'GITEA_URL': 'https://gitea.example.test',
'CUSTOM_REPOSITORY': 'tryton-do/tryton',
'GITEA_TOKEN': 'test-token',
'INTEGRATION_BRANCH': 'integration/8.0',
'UPDATE_BRANCH': 'automation/upstream-8.0',
}
with patch.dict(os.environ, environment, clear=False):
spec = importlib.util.spec_from_file_location('upstream_pr', SCRIPT)
cls.module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(cls.module)
def test_reuses_existing_pull_request(self):
existing = [{
'head': {'ref': self.module.HEAD},
'base': {'ref': self.module.TARGET},
'html_url': 'https://gitea.example.test/pulls/1',
}]
with patch.object(self.module, 'open_pulls', return_value=existing), \
patch.object(self.module, 'request') as request:
self.module.ensure_pull_request('a' * 40)
request.assert_not_called()
def test_creates_pull_request_with_review_target(self):
created = {'html_url': 'https://gitea.example.test/pulls/2'}
with patch.object(self.module, 'open_pulls', return_value=[]), \
patch.object(self.module, 'request', return_value=created) as request:
self.module.ensure_pull_request('b' * 40)
request.assert_called_once_with(
'POST', '/repos/tryton-do/tryton/pulls', ANY)
payload = request.call_args.args[2]
self.assertEqual(payload['head'], 'automation/upstream-8.0')
self.assertEqual(payload['base'], 'integration/8.0')
def test_reuses_existing_conflict_issue(self):
existing = [{
'title': 'Upstream Tryton 8.0 synchronization conflict',
'html_url': 'https://gitea.example.test/issues/1',
}]
with patch.object(self.module, 'request', return_value=existing) as request:
self.module.ensure_conflict_issue('trytond/file.py')
request.assert_called_once()
if __name__ == '__main__':
unittest.main()
+91
View File
@@ -0,0 +1,91 @@
#!/usr/bin/env python3
"""Create an idempotent Gitea pull request or conflict issue."""
from __future__ import annotations
import json
import os
import sys
import urllib.error
import urllib.parse
import urllib.request
BASE_URL = os.environ['GITEA_URL'].rstrip('/') + '/api/v1'
REPOSITORY = os.environ['CUSTOM_REPOSITORY']
TOKEN = os.environ['GITEA_TOKEN']
TARGET = os.environ['INTEGRATION_BRANCH']
HEAD = os.environ['UPDATE_BRANCH']
def request(method: str, path: str, payload: dict | None = None):
data = json.dumps(payload).encode() if payload is not None else None
req = urllib.request.Request(
f'{BASE_URL}{path}', data=data, method=method,
headers={
'Authorization': f'token {TOKEN}',
'Accept': 'application/json',
'Content-Type': 'application/json',
})
try:
with urllib.request.urlopen(req, timeout=30) as response:
return json.load(response)
except urllib.error.HTTPError as exc:
detail = exc.read().decode(errors='replace')
raise RuntimeError(f'Gitea API returned {exc.code}: {detail}') from exc
except urllib.error.URLError as exc:
raise RuntimeError(f'Could not reach the Gitea API: {exc.reason}') from exc
def open_pulls():
query = urllib.parse.urlencode({'state': 'open', 'limit': 50})
return request('GET', f'/repos/{REPOSITORY}/pulls?{query}')
def ensure_pull_request(upstream_sha: str) -> None:
for pull in open_pulls():
if pull['head']['ref'] == HEAD and pull['base']['ref'] == TARGET:
print(f"Using existing pull request: {pull['html_url']}")
return
pull = request('POST', f'/repos/{REPOSITORY}/pulls', {
'title': f'Upstream Tryton 8.0 update ({upstream_sha[:12]})',
'head': HEAD,
'base': TARGET,
'body': (
'Automated proposal from the private official mirror.\n\n'
'Review the upstream changes and wait for all required checks. '
'This pull request must be merged manually.'),
})
print(f"Created pull request: {pull['html_url']}")
def ensure_conflict_issue(conflicts: str) -> None:
title = 'Upstream Tryton 8.0 synchronization conflict'
query = urllib.parse.urlencode({'state': 'open', 'type': 'issues', 'limit': 50})
for issue in request('GET', f'/repos/{REPOSITORY}/issues?{query}'):
if issue['title'] == title:
print(f"Conflict issue already open: {issue['html_url']}")
return
issue = request('POST', f'/repos/{REPOSITORY}/issues', {
'title': title,
'body': (
'The scheduled synchronization could not merge the latest '
'official 8.0 changes. No branch was overwritten.\n\n'
f'Conflicting paths:\n```\n{conflicts or "unknown"}\n```'),
})
print(f"Created conflict issue: {issue['html_url']}")
def main() -> None:
if len(sys.argv) != 3:
raise SystemExit('usage: upstream_pr.py pull-request SHA | conflict PATHS')
if sys.argv[1] == 'pull-request':
ensure_pull_request(sys.argv[2])
elif sys.argv[1] == 'conflict':
ensure_conflict_issue(sys.argv[2])
else:
raise SystemExit('usage: upstream_pr.py pull-request SHA | conflict PATHS')
if __name__ == '__main__':
main()
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env python3
"""Validate every Gettext catalog changed or maintained in this repository."""
from __future__ import annotations
import sys
from pathlib import Path
import polib
def main() -> int:
failures: list[str] = []
catalogs = sorted(Path('.').glob('**/*.po'))
if not catalogs:
failures.append('no PO catalogs were found')
for path in catalogs:
try:
catalog = polib.pofile(path, check_for_duplicates=True)
except (OSError, UnicodeError, ValueError) as exc:
failures.append(f'{path}: {exc}')
continue
if not catalog.metadata.get('Content-Type', '').startswith('text/plain'):
failures.append(f'{path}: missing or invalid Content-Type metadata')
if failures:
print('\n'.join(failures), file=sys.stderr)
return 1
print(f'Validated {len(catalogs)} PO catalogs')
return 0
if __name__ == '__main__':
raise SystemExit(main())
+2 -4
View File
@@ -4,10 +4,8 @@
"package_name": "{% if not cookiecutter.prefix %}trytond_{{ cookiecutter.module_name }}{% else %}{{ cookiecutter.prefix }}_{{ cookiecutter.module_name }}{% endif %}",
"version": "{{ version }}",
"description": "",
"author": "Tryton",
"author_email": "foundation@tryton.org",
"fullname": "",
"url": "http://www.tryton.org/",
"author": "",
"author_email": "",
"keywords": "",
"test_with_scenario": "",
"_extensions": ["extensions.Version"]
@@ -5,3 +5,10 @@ try:
os.symlink('doc/index.rst', 'README.rst')
except (AttributeError, OSError):
shutil.copyfile('doc/index.rst', 'README.rst')
{% if cookiecutter.prefix %}
try:
os.symlink('.', '{{ cookiecutter.package_name }}')
except (AttributeError, OSError):
pass
{% endif %}
@@ -1,18 +0,0 @@
version: 2
build:
os: ubuntu-22.04
tools:
python: "3"
python:
install:
{%- if not cookiecutter.prefix %}
- requirements: modules/{{ cookiecutter.module_name }}/doc/requirements-doc.txt
{%- else %}
- requirements: doc/requirements-doc.txt
{%- endif %}
sphinx:
{%- if not cookiecutter.prefix %}
configuration: modules/{{ cookiecutter.module_name }}/doc/conf.py
{%- else %}
configuration: doc/conf.py
{%- endif %}
@@ -1,4 +1,4 @@
Copyright (C) {% now 'local', '%Y' %} {{ cookiecutter.fullname }}
Copyright (C) {% now 'local', '%Y' %} {{ cookiecutter.author }}{% if cookiecutter.author_email %} <{{ cookiecutter.author_email }}>{% endif %}
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -1,6 +0,0 @@
include CHANGELOG
include COPYRIGHT
include LICENSE
include README.rst
include icons/LICENSE
graft doc
@@ -1,17 +1,4 @@
{% if not cookiecutter.prefix -%}
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
{% endif -%}
from trytond.pool import Pool
__all__ = ['register']
def register():
Pool.register(
module='{{ cookiecutter.module_name }}', type_='model')
Pool.register(
module='{{ cookiecutter.module_name }}', type_='wizard')
Pool.register(
module='{{ cookiecutter.module_name }}', type_='report')
@@ -11,14 +11,14 @@ if base_url:
trytond_url = base_url + '/server/'
else:
modules_url = (
'https://docs.tryton.org/projects/modules-{module}/en/{series}/')
trytond_url = 'https://docs.tryton.org/projects/server/en/{series}/'
'https://docs.tryton.org/{series}/modules-{module}/')
trytond_url = 'https://docs.tryton.org/{series}/server/'
def get_info():
import configparser
import json
import subprocess
import sys
module_dir = os.path.dirname(os.path.dirname(__file__))
@@ -26,17 +26,15 @@ def get_info():
config.read_file(open(os.path.join(module_dir, 'tryton.cfg')))
info = dict(config.items('tryton'))
result = subprocess.run(
[sys.executable, 'setup.py', '--name', '--description'],
stdout=subprocess.PIPE, check=True, cwd=module_dir)
info['name'], info['description'] = (
result.stdout.decode('utf-8').strip().splitlines())
result = subprocess.run(
[sys.executable, 'setup.py', '--version'],
stdout=subprocess.PIPE, check=True, cwd=module_dir)
version = result.stdout.decode('utf-8').strip()
major_version, minor_version, _ = version.split('.', 2)
metadata_cmd = 'python3 -m build -qq --metadata'
if os.environ.get('DOC_NO_ISOLATION'):
metadata_cmd += ' --no-isolation'
metadata = subprocess.check_output(
metadata_cmd, shell=True, encoding='utf-8', cwd=module_dir).strip()
metadata = json.loads(metadata)
info['name'] = metadata['name']
info['description'] = metadata['summary']
major_version, minor_version, _ = metadata['version'].split('.', 2)
major_version = int(major_version)
minor_version = int(minor_version)
if minor_version % 2:
@@ -45,7 +43,7 @@ def get_info():
info['branch'] = 'branch/default'
{%- endif %}
else:
info['series'] = '.'.join(version.split('.', 2)[:2])
info['series'] = '.'.join(metadata['version'].split('.', 2)[:2])
{%- if not cookiecutter.prefix %}
info['branch'] = 'branch/' + info['series']
{%- endif %}
@@ -63,6 +61,13 @@ info = get_info()
html_theme = 'sphinx_book_theme'
{%- if not cookiecutter.prefix %}
html_theme_options = {
'logo': {
'alt_text': "Tryton Documentation",
'image_light': 'https://docs.tryton.org/logo-light.svg',
'image_dark': 'https://docs.tryton.org/logo-dark.svg',
'link': base_url,
},
'home_page_in_toc': True,
'repository_provider': 'gitlab',
'repository_url': 'https://code.tryton.org/tryton',
'repository_branch': info['branch'],
@@ -79,6 +84,7 @@ project = info['name']
release = version = info['series']
default_role = 'ref'
highlight_language = 'none'
exclude_patterns = ['**/*.inc.rst']
extensions = [
'sphinx_copybutton',
'sphinx.ext.intersphinx',
@@ -92,5 +98,22 @@ intersphinx_mapping.update({
for m in info['modules']
})
linkcheck_ignore = [r'/.*', r'https://demo.tryton.org/*']
linkcheck_request_headers = {
'User-Agent': (
'TrytonBot/0.0 (https://www.tryton.org/foundation) '
'sphinx-linkcheck/0.0'),
'Accept-Encoding': 'gzip',
}
linkcheck_workers = 1
try:
with open(os.path.join(
os.path.dirname(__file__),
'linkcheck_ignore.json'), 'r') as f:
import json
linkcheck_ignore.extend(json.load(f))
del json
except FileNotFoundError:
pass
del get_info, info, base_url, modules_url, trytond_url
@@ -1,2 +1,3 @@
build
sphinx_book_theme
sphinx_copybutton
@@ -0,0 +1,89 @@
[build-system]
requires = ['hatchling >= 1', 'hatch-tryton']
build-backend = 'hatchling.build'
[project]
name = '{{ cookiecutter.package_name }}'
dynamic = ['version', 'dependencies', 'optional-dependencies', 'authors', 'readme']
requires-python = '>=3.10'
maintainers = [
{%- if cookiecutter.prefix %}
{name = "{{ cookiecutter.author }}", email = "{{ cookiecutter.author_email }}"},
{%- else %}
{name = "Tryton", email = "foundation@tryton.org"},
{%- endif %}
]
description = "{{ cookiecutter.description }}"
license = 'GPL-3.0-or-later'
license-files = ['LICENSE', 'icons/LICENSE', 'COPYRIGHT']
keywords = {{ cookiecutter.keywords.split() | tojson }}
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Plugins",
"Framework :: Tryton",
"Topic :: Office/Business",
{%- if cookiecutter.module_name.startswith('account') or cookiecutter.module_name.startswith('analytic_account')%}
"Topic :: Office/Business :: Financial :: Accounting",
{%- endif %}
{%- if cookiecutter.module_name.startswith('sale') %}
"Topic :: Office/Business :: Financial :: Point-Of-Sale",
{%- endif %}
"Topic :: Software Development :: Libraries :: Python Modules",
]
[project.entry-points.'trytond.modules']
{%- if cookiecutter.prefix %}
{{ cookiecutter.module_name }} = '{{ cookiecutter.package_name }}'
{%- else %}
{{ cookiecutter.module_name }} = 'trytond.modules.{{ cookiecutter.module_name }}'
{%- endif %}
[project.urls]
{%- if not cookiecutter.prefix %}
homepage = "https://www.tryton.org/"
documentation = "https://docs.tryton.org/modules-{{ cookiecutter.module_name|replace('_', '-') }}/"
changelog = "https://docs.tryton.org/modules-{{ cookiecutter.module_name|replace('_', '-') }}/releases.html"
forum = "https://www.tryton.org/forum"
issues = "https://bugs.tryton.org/tryton"
repository = "https://code.tryton.org/tryton"
funding = "https://www.tryton.org/donate"
{%- endif %}
[tool.hatch.build]
include = [
'**/tryton.cfg',
'**/*.py',
'**/*.xml',
'view/**/*.xml',
'locale/**/*.po',
'**/*.fodt',
'icons/**/*.svg',
'tests/**/*.rst',
'tests/**/*.json',
]
exclude = ['doc']
{%- if cookiecutter.prefix %}
dev-mode-dirs = ["."]
{%- endif %}
[tool.hatch.build.targets.wheel.sources]
{%- if cookiecutter.prefix %}
"" = "{{ cookiecutter.package_name }}"
{%- else %}
"" = "trytond/modules/{{ cookiecutter.module_name }}"
{%- endif %}
[tool.hatch.metadata.hooks.tryton]
{%- if cookiecutter.prefix %}
prefixes = {}
{%- endif %}
dependencies = []
copyright = 'COPYRIGHT'
readme = 'README.rst'
[tool.hatch.metadata.hooks.tryton.tryton-optional-dependencies]
{%- if cookiecutter.test_with_scenario %}
test = ['proteus']
{%- else %}
test = []
{%- endif %}
@@ -1,149 +0,0 @@
#!/usr/bin/env python3
{% if not cookiecutter.prefix -%}
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
{% endif -%}
import io
import os
import re
from configparser import ConfigParser
from setuptools import find_packages, setup
{%- if cookiecutter.prefix %}
MODULE2PREFIX = {}
{%- endif %}
def read(fname):
content = io.open(
os.path.join(os.path.dirname(__file__), fname),
'r', encoding='utf-8').read()
content = re.sub(
r'(?m)^\.\. toctree::\r?\n((^$|^\s.*$)\r?\n)*', '', content)
return content
def get_require_version(name):
require = '%s >= %s.%s, < %s.%s'
require %= (name, major_version, minor_version,
major_version, minor_version + 1)
return require
config = ConfigParser()
config.read_file(open(os.path.join(os.path.dirname(__file__), 'tryton.cfg')))
info = dict(config.items('tryton'))
for key in ('depends', 'extras_depend', 'xml'):
if key in info:
info[key] = info[key].strip().splitlines()
version = info.get('version', '0.0.1')
major_version, minor_version, _ = version.split('.', 2)
major_version = int(major_version)
minor_version = int(minor_version)
name = '{{ cookiecutter.package_name }}'
{% if not cookiecutter.prefix %}
if minor_version % 2:
download_url = ''
else:
download_url = 'http://downloads.tryton.org/%s.%s/' % (
major_version, minor_version)
{% endif %}
requires = []
for dep in info.get('depends', []):
if not re.match(r'(ir|res)(\W|$)', dep):
{%- if not cookiecutter.prefix %}
requires.append(get_require_version('trytond_%s' % dep))
{%- else %}
prefix = MODULE2PREFIX.get(dep, 'trytond')
requires.append(get_require_version('%s_%s' % (prefix, dep)))
{%- endif %}
requires.append(get_require_version('trytond'))
{% if cookiecutter.test_with_scenario -%}
tests_require = [get_require_version('proteus')]
{%- else -%}
tests_require = []
{%- endif %}
setup(name=name,
version=version,
description='{{ cookiecutter.description }}',
long_description=read('README.rst'),
author='{{ cookiecutter.author }}',
author_email='{{ cookiecutter.author_email }}',
url='{{ cookiecutter.url }}',
{%- if not cookiecutter.prefix %}
download_url=download_url,
project_urls={
"Bug Tracker": 'https://bugs.tryton.org/',
"Documentation": 'https://docs.tryton.org/projects/modules-{{ cookiecutter.module_name|replace('_', '-') }}',
"Forum": 'https://www.tryton.org/forum',
"Source Code": 'https://code.tryton.org/tryton',
},
{%- endif %}
keywords='{{ cookiecutter.keywords }}',
package_dir={'trytond.modules.{{ cookiecutter.module_name }}': '.'},
packages=(
['trytond.modules.{{ cookiecutter.module_name }}']
+ ['trytond.modules.{{ cookiecutter.module_name }}.%s' % p
for p in find_packages()]
),
package_data={
'trytond.modules.{{ cookiecutter.module_name }}': (info.get('xml', [])
+ ['tryton.cfg', 'view/*.xml', 'locale/*.po', '*.fodt',
'icons/*.svg', 'tests/*.rst', 'tests/*.json']),
},
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Plugins',
'Framework :: Tryton',
'Intended Audience :: Developers',
'Intended Audience :: Financial and Insurance Industry',
'Intended Audience :: Legal Industry',
'License :: OSI Approved :: '
'GNU General Public License v3 or later (GPLv3+)',
'Natural Language :: Bulgarian',
'Natural Language :: Catalan',
'Natural Language :: Chinese (Simplified)',
'Natural Language :: Czech',
'Natural Language :: Dutch',
'Natural Language :: English',
'Natural Language :: Finnish',
'Natural Language :: French',
'Natural Language :: German',
'Natural Language :: Hungarian',
'Natural Language :: Indonesian',
'Natural Language :: Italian',
'Natural Language :: Persian',
'Natural Language :: Polish',
'Natural Language :: Portuguese (Brazilian)',
'Natural Language :: Romanian',
'Natural Language :: Russian',
'Natural Language :: Slovenian',
'Natural Language :: Spanish',
'Natural Language :: Turkish',
'Natural Language :: Ukrainian',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: Implementation :: CPython',
'Topic :: Office/Business',
],
license='GPL-3',
python_requires='>=3.8',
install_requires=requires,
extras_require={
'test': tests_require,
},
zip_safe=False,
entry_points="""
[trytond.modules]
{{ cookiecutter.module_name }} = trytond.modules.{{ cookiecutter.module_name }}
""", # noqa: E501
)
@@ -4,7 +4,7 @@
Imports::
>>> from proteus import Model, Wizard
>>> from proteus import Model
>>> from trytond.tests.tools import activate_modules
Activate modules::
@@ -1,21 +1,28 @@
[tox]
envlist = {py38,py39,py310,py311,py312}-{sqlite,postgresql}
envlist = {py310,py311,py312,py313,py314}-{sqlite,postgresql}
[testenv]
usedevelop = true
changedir = {env_site_packages_dir}
extras = test
commands =
coverage run --omit=*/tests/* -m xmlrunner discover -s tests {posargs}
{%- if cookiecutter.prefix %}
coverage run --rcfile={toxinidir}/tox.ini --source={{ cookiecutter.package_name }} --omit=*/tests/* -m xmlrunner discover -s {{ cookiecutter.package_name }} {posargs}
{%- else %}
coverage run --rcfile={toxinidir}/tox.ini --source=trytond.modules.{{ cookiecutter.module_name }} --omit=*/tests/* -m xmlrunner discover -s trytond.modules.{{ cookiecutter.module_name }} {posargs}
{%- endif %}
commands_post =
coverage report
coverage xml
coverage report --rcfile={toxinidir}/tox.ini
coverage xml --rcfile={toxinidir}/tox.ini -o {package_root}/coverage.xml
deps =
coverage
unittest-xml-reporting
postgresql: psycopg2 >= 2.7.0
postgresql: psycopg[pool,binary] >= 3
passenv = *
setenv =
sqlite: TRYTOND_DATABASE_URI={env:SQLITE_URI:sqlite://}
postgresql: TRYTOND_DATABASE_URI={env:POSTGRESQL_URI:postgresql://}
sqlite: DB_NAME={env:DB_NAME::memory:}
postgresql: DB_NAME={env:DB_NAME:test}
[coverage:run]
relative_files = true
@@ -3,3 +3,10 @@ version={{ cookiecutter.version }}
depends:
ir
xml:
[register]
model:
wizard:
report:
+173
View File
@@ -0,0 +1,173 @@
#!/usr/bin/env python3
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
from proteus import Model, Wizard
from proteus import config as pconfig
from . import account, account_invoice, account_payment, account_statement
from . import company as company_
from . import (
country, currency, party, product, production, project, purchase, sale,
stock, timesheet)
def set_config(database, config_file):
return pconfig.set_trytond(database, config_file=config_file)
def activate_modules(config, modules):
Module = Model.get('ir.module')
modules = Module.find([
('name', 'in', modules),
])
for module in modules:
if module.state == 'activated':
module.click('upgrade')
elif module.state == 'not activated':
module.click('activate')
modules = [x.name for x in Module.find([('state', '=', 'to activate')])]
Wizard('ir.module.activate_upgrade').execute('upgrade')
ConfigWizardItem = Model.get('ir.module.config_wizard.item')
for item in ConfigWizardItem.find([('state', '!=', 'done')]):
item.state = 'done'
item.save()
activated_modules = [m.name
for m in Module.find([('state', '=', 'activated')])]
return modules, activated_modules
def setup_user(config, demo_password, company=None):
User = Model.get('res.user')
Group = Model.get('res.group')
admin = config.user
# Use root to skip password validation
config.user = 0
try:
user, = User.find([('login', '=', 'demo')])
except ValueError:
user = User()
user.name = "Demo"
user.login = 'demo'
user.password = demo_password
groups = Group.find([
('name', 'not ilike', '%Admin%'),
])
user.groups.extend(groups)
if company:
Company = Model.get('company.company')
user.companies.append(Company(company.id))
user.company = company
user.save()
config.user = admin
def setup_languages(config):
Lang = Model.get('ir.lang')
langs = Lang.find()
Lang.click(langs, 'load_translations')
def main(database, modules, demo_password, config_file=None):
config = set_config(database, config_file)
to_activate, activated = activate_modules(config, modules)
if 'country' in to_activate:
country.do_import()
if 'currency' in to_activate:
currency.do_import()
if ('party' in to_activate
or 'sale' in to_activate
or 'purchase' in to_activate
or 'stock' in activated):
customers, suppliers = party.setup(config, modules)
if 'company' in to_activate:
company = company_.setup(config, activated)
elif 'company' in activated:
company = company.get()
else:
company = None
if 'account' in to_activate:
account.setup(config, activated, company)
if 'company' in to_activate:
company_.setup_post(config, activated, company)
if 'product' in to_activate:
product.setup(config, activated, company=company)
if 'account_invoice' in to_activate:
account_invoice.setup(config, activated, company)
if 'sale' in to_activate:
sale.setup(config, activated, company, customers)
if 'purchase' in to_activate:
purchase.setup(config, activated, company, suppliers)
if 'stock' in to_activate:
stock.setup(config, activated, company, suppliers)
if 'account_invoice' in activated:
account_invoice.setup_post(config, activated, company)
if 'account_payment' in activated:
account_payment.setup(config, activated, company)
if 'account_statement' in activated:
account_statement.setup(config, activated, company)
if 'project' in activated:
project.setup(config, activated, company, customers)
if 'timesheet' in activated:
timesheet.setup(config, activated, company)
if 'production' in to_activate:
production.setup(config, activated, company)
setup_user(config, demo_password, company=company)
setup_languages(config)
if __name__ == '__main__':
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument('-c', '--config', dest='config_file')
parser.add_argument('-m', '--module', dest='modules', nargs='+',
help='module to activate', default=[
'account',
'account_invoice',
'account_payment',
'account_statement',
'company',
'party',
'party_avatar',
'product',
'purchase',
'sale',
'stock',
'project',
'timesheet',
'production',
'production_routing',
'production_work',
])
parser.add_argument('--demo_password', dest='demo_password',
default='demo', help='demo password')
parser.add_argument('-d', '--database', dest='database',
default='demo', help="database name")
options = parser.parse_args()
main(options.database, options.modules, options.demo_password,
config_file=options.config_file)
+96
View File
@@ -0,0 +1,96 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
from dateutil.relativedelta import relativedelta
from proteus import Model, Wizard
def setup(config, modules, company):
AccountTemplate = Model.get('account.account.template')
Account = Model.get('account.account')
FiscalYear = Model.get('account.fiscalyear')
SequenceStrict = Model.get('ir.sequence.strict')
SequenceType = Model.get('ir.sequence.type')
Party = Model.get('party.party')
WriteOff = Model.get('account.move.reconcile.write_off')
Journal = Model.get('account.journal')
root_template, = AccountTemplate.find([
('parent', '=', None),
('name', '=', 'Universal Chart of Accounts'),
])
create_chart_account = Wizard('account.create_chart')
create_chart_account.execute('account')
create_chart_account.form.account_template = root_template
create_chart_account.form.company = company
create_chart_account.execute('create_account')
receivable, = Account.find([
('company', '=', company.id),
('code', '=', '1.2.1'),
])
payable, = Account.find([
('company', '=', company.id),
('code', '=', '2.1.1'),
])
create_chart_account.form.account_receivable = receivable
create_chart_account.form.account_payable = payable
create_chart_account.execute('create_properties')
# Set account for parties created without company
parties = Party.find([])
for party in parties:
party.account_receivable = receivable
party.account_payable = payable
Party.save(parties)
move_sequence_type, = SequenceType.find(
[('name', '=', "Account Move")], limit=1)
invoice_sequence_type, = SequenceType.find([
('name', '=', "Invoice"),
], limit=1)
today = dt.date.today()
for start_date in (
today + relativedelta(month=1, day=1, years=-1),
today + relativedelta(month=1, day=1),
today + relativedelta(month=1, day=1, years=1)):
fiscalyear = FiscalYear(name='%s' % start_date.year)
fiscalyear.start_date = start_date
fiscalyear.end_date = start_date + relativedelta(month=12, day=31)
fiscalyear.company = company
move_sequence = SequenceStrict(
name='%s' % start_date.year,
sequence_type=move_sequence_type,
company=company)
move_sequence.save()
fiscalyear.move_sequence = move_sequence
invoice_sequence, = fiscalyear.invoice_sequences
if 'account_invoice' in modules:
for attr, name in (('out_invoice_sequence', 'Invoice'),
('in_invoice_sequence', 'Supplier Invoice'),
('out_credit_note_sequence', 'Credit Note'),
('in_credit_note_sequence', 'Supplier Credit Note')):
sequence = SequenceStrict(
name='%s %s' % (name, start_date.year),
sequence_type=invoice_sequence_type,
company=company)
sequence.save()
setattr(invoice_sequence, attr, sequence)
fiscalyear.save()
fiscalyear.click('create_period')
expense, = Account.find([
('company', '=', company.id),
('code', '=', '6.2.1'),
], limit=1)
write_off = WriteOff()
write_off.name = "Currency Exchange"
write_off.journal, = Journal.find(
[('code', '=', 'EXC'), ('type', '=', 'write-off')], limit=1)
write_off.credit_account = expense
write_off.debit_account = expense
write_off.save()
+76
View File
@@ -0,0 +1,76 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
import random
from itertools import chain
from dateutil.relativedelta import relativedelta
from proteus import Model
from .tools import skip_warning
def setup(config, modules, company):
Party = Model.get('party.party')
PaymentTerm = Model.get('account.invoice.payment_term')
PaymentMethod = Model.get('account.invoice.payment.method')
Journal = Model.get('account.journal')
Account = Model.get('account.account')
payment_term = PaymentTerm(name='30 days')
line = payment_term.lines.new()
line.type = 'remainder'
delta = line.relativedeltas.new()
delta.days = 30
payment_term.save()
parties = Party.find()
Party.write([p.id for p in parties], {
'customer_payment_term': payment_term.id,
'supplier_payment_term': payment_term.id,
}, config.context)
cash_account, = Account.find([
('company', '=', company.id),
('code', '=', '1.1.1'),
], limit=1)
payment_method = PaymentMethod()
payment_method.name = "Cash"
payment_method.journal, = Journal.find([('type', '=', 'cash')], limit=1)
payment_method.credit_account = cash_account
payment_method.debit_account = cash_account
payment_method.save()
def setup_post(config, modules, company):
Invoice = Model.get('account.invoice')
invoices = Invoice.find([
('type', '=', 'out'),
('state', 'in', ['draft', 'validated']),
])
invoices = random.sample(invoices, len(invoices) * 2 // 3)
invoices = list(chain(*list(zip(invoices,
Invoice.find([
('type', '=', 'in'),
('state', 'in', ['draft', 'validated']),
])))))
today = dt.date.today()
invoice_date = today + relativedelta(months=-1)
i = j = 0
while invoice_date <= today:
j = random.randint(1, 5)
for invoice in invoices[i:i + j]:
invoice.invoice_date = invoice_date
invoice.save()
i += j
invoice_date += relativedelta(days=random.randint(1, 3))
invoices = [inv for inv in invoices[0:i]]
for invoice in invoices:
skip_warning(config, 'invoice_payment_term', [invoice])
skip_warning(config, 'invoice_date_future', invoices)
Invoice.click(invoices, 'post')
+47
View File
@@ -0,0 +1,47 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import random
from proteus import Model, Wizard
def setup(config, modules, company):
Currency = Model.get('currency.currency')
Journal = Model.get('account.payment.journal')
Line = Model.get('account.move.line')
Payment = Model.get('account.payment')
usd, = Currency.find([('code', '=', 'USD')])
journal = Journal(name='Manual', currency=usd, company=company,
process_method='manual')
journal.save()
lines = Line.find([
('account.type.payable', '=', True),
('party', '!=', None),
('reconciliation', '=', None),
('payment_amount', '!=', 0),
])
lines = random.sample(lines, len(lines) * 2 // 3)
if not lines:
return
pay_line = Wizard('account.move.line.pay', lines)
pay_line.execute('next_')
pay_line.form.journal = journal
pay_line.execute('next_')
payments = Payment.find([])
payments = random.sample(payments, len(payments) * 2 // 3)
for payment in payments:
payment.click('submit')
payment.click('approve')
payments = random.sample(payments, len(payments) * 2 // 3)
i = j = 0
while i < len(payments):
j = random.randint(1, 5)
Wizard('account.payment.process', payments[i:i + j])
i += j
+59
View File
@@ -0,0 +1,59 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import random
from decimal import Decimal
from dateutil.relativedelta import relativedelta
from proteus import Model
def setup(config, modules, company):
Journal = Model.get('account.statement.journal')
Statement = Model.get('account.statement')
AccountJournal = Model.get('account.journal')
Account = Model.get('account.account')
Invoice = Model.get('account.invoice')
cash, = Account.find([
('company', '=', company.id),
('code', '=', '1.1.1'),
])
account_journal = AccountJournal(name='Bank', type='statement')
account_journal.save()
journal = Journal(name='Bank',
journal=account_journal,
account=cash,
validation='balance')
journal.save()
invoices = Invoice.find([
('state', '=', 'posted'),
])
invoices = random.sample(invoices, len(invoices) * 2 // 3)
total_amount = Decimal(0)
statement = Statement(name='001',
journal=journal,
start_balance=Decimal(0))
for i, invoice in enumerate(invoices):
if not invoice.amount_to_pay:
continue
line = statement.lines.new()
line.number = str(i)
line.date = invoice.invoice_date + relativedelta(
days=random.randint(1, 20))
amount = invoice.amount_to_pay
if invoice.type in ('in_invoice', 'out_credit_note'):
amount = - amount
line.amount = amount
line.party = invoice.party
if random.random() < 2. / 3.:
line.related_to = invoice
total_amount += line.amount
statement.end_balance = total_amount
statement.click('validate_statement')
+11
View File
@@ -0,0 +1,11 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
_AVATAR_DIR = os.path.join(os.path.dirname(__file__), 'avatars')
def get(name):
with open(os.path.join(_AVATAR_DIR, name), 'rb') as fp:
return fp.read()
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

+213
View File
@@ -0,0 +1,213 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
from decimal import Decimal
from proteus import Model, Wizard
from . import avatar
def setup(config, modules):
Address = Model.get('party.address')
Company = Model.get('company.company')
Country = Model.get('country.country')
Currency = Model.get('currency.currency')
Party = Model.get('party.party')
Subdivision = Model.get('country.subdivision')
usd, = Currency.find([('code', '=', 'USD')])
rate = usd.rates.new()
rate.date = dt.date(dt.date.today().year, 1, 1)
rate.rate = Decimal('1')
usd.save()
try:
us, = Country.find([('code', '=', 'US')])
except ValueError:
us = None
company_config = Wizard('company.company.config')
company_config.execute('company')
company = company_config.form
party = Party(name="Dunder Mifflin")
address = Address()
party.addresses.append(address)
address.street = "1725 Slough Avenue"
address.city = "Scranton"
address.country = us
try:
address.subdivision, = Subdivision.find([('code', '=', 'US-PA')])
except ValueError:
pass
if 'party_avatar' in modules:
party.avatar = avatar.get('dunder-mifflin.jpg')
party.save()
company.party = party
company.currency = usd
company_config.execute('add')
# Reload context
User = Model.get('res.user')
config._context = User.get_preferences(True, {})
company, = Company.find()
return company
def setup_post(config, modules, company):
Company = Model.get('company.company')
Employee = Model.get('company.employee')
Group = Model.get('res.group')
Party = Model.get('party.party')
User = Model.get('res.user')
party_avatar = 'party_avatar' in modules
party_scott = Party(name="Michael Scott")
if party_avatar:
party_scott.avatar = avatar.get('michael-scott.jpg')
party_scott.save()
employee_scott = Employee(party=party_scott, company=company)
employee_scott.save()
user_scott = User()
user_scott.name = "Michael Scott"
user_scott.login = 'michael'
user_scott.groups.extend(Group.find([
('name', 'not ilike', "%Admin%"),
]))
user_scott.companies.append(Company(company.id))
user_scott.company = company
user_scott.employees.append(employee_scott)
user_scott.employee = employee_scott
user_scott.avatar = avatar.get('michael-scott.jpg')
user_scott.save()
party_beesly = Party(name="Pam Beesly")
if party_avatar:
party_beesly.avatar = avatar.get('pam-beesly.jpg')
party_beesly.save()
employee_beesly = Employee(party=party_beesly, company=company)
employee_beesly.save()
user_beesly = User()
user_beesly.name = "Pam Beesly"
user_beesly.login = 'pam'
user_beesly.groups.extend(Group.find(['OR',
('name', 'ilike', "Party%"),
('name', 'ilike', "Employee%"),
('name', 'ilike', "Timesheet%"),
('name', 'ilike', "Project%"),
]))
user_beesly.companies.append(Company(company.id))
user_beesly.company = company
user_beesly.employees.append(employee_beesly)
user_beesly.employee = employee_beesly
user_beesly.avatar = avatar.get('pam-beesly.jpg')
user_beesly.save()
party_howard = Party(name="Ryan Howard")
if party_avatar:
party_howard.avatar = avatar.get('ryan-howard.jpg')
party_howard.save()
employee_howard = Employee(party=party_howard, company=company)
employee_howard.save()
user_howard = User()
user_howard.name = "Ryan Howard"
user_howard.login = 'ryan'
user_howard.companies.append(Company(company.id))
user_howard.company = company
user_howard.employees.append(employee_howard)
user_howard.employee = employee_howard
user_howard.avatar = avatar.get('ryan-howard.jpg')
user_howard.save()
party_halper = Party(name="Jim Halper")
if party_avatar:
party_halper.avatar = avatar.get('jim-halper.jpg')
party_halper.save()
employee_halper = Employee(party=party_halper, company=company)
employee_halper.save()
user_halper = User()
user_halper.name = "Jim Halper"
user_halper.login = 'jim'
user_halper.groups.extend(Group.find(['OR',
('name', '=', "Sales"),
('name', 'ilike', "Project%"),
]))
user_halper.companies.append(Company(company.id))
user_halper.company = company
user_halper.employees.append(employee_halper)
user_halper.employee = employee_halper
user_halper.avatar = avatar.get('jim-halper.jpg')
user_halper.save()
party_schrute = Party(name="Dwight Schrute")
if party_avatar:
party_schrute.avatar = avatar.get('dwight-schrute.jpg')
party_schrute.save()
employee_schrute = Employee(party=party_schrute, company=company)
employee_schrute.save()
user_schrute = User()
user_schrute.name = "Dwight Schrute"
user_schrute.login = 'dwight'
user_schrute.groups.extend(Group.find(['OR',
('name', '=', "Sales"),
('name', 'ilike', "Project%"),
('name', 'ilike', "Product%"),
]))
user_schrute.companies.append(Company(company.id))
user_schrute.company = company
user_schrute.employees.append(employee_schrute)
user_schrute.employee = employee_schrute
user_schrute.avatar = avatar.get('dwight-schrute.jpg')
user_schrute.save()
party_martin = Party(name="Angela Martin")
if party_avatar:
party_martin.avatar = avatar.get('angela-martin.jpg')
party_martin.save()
employee_martin = Employee(party=party_martin, company=company)
employee_martin.save()
user_martin = User()
user_martin.name = "Angela Martin"
user_martin.login = 'angela'
user_martin.groups.extend(Group.find(['OR',
('name', 'ilike', "Account%"),
('name', 'ilike', "Bank%"),
('name', 'ilike', "Currency%"),
('name', 'ilike', "Payment%"),
('name', 'ilike', "Statement%"),
]))
user_martin.companies.append(Company(company.id))
user_martin.company = company
user_martin.employees.append(employee_martin)
user_martin.employee = employee_martin
user_martin.avatar = avatar.get('angela-martin.jpg')
user_martin.save()
party_philbin = Party(name="Darryl Philbin")
if party_avatar:
party_philbin.avatar = avatar.get('darryl-philbin.jpg')
party_philbin.save()
employee_philbin = Employee(party=party_philbin, company=company)
employee_philbin.save()
user_philbin = User()
user_philbin.name = "Darryl Philbin"
user_philbin.login = 'darryl'
user_philbin.groups.extend(Group.find(['OR',
('name', 'ilike', "Stock%"),
]))
user_philbin.companies.append(Company(company.id))
user_philbin.company = company
user_philbin.employees.append(employee_philbin)
user_philbin.employee = employee_philbin
user_philbin.avatar = avatar.get('darryl-philbin.jpg')
user_philbin.save()
def get():
Company = Model.get('company.company')
company, = Company.find([
('party.name', '=', "Dunder Mifflin"),
])
return company
+10
View File
@@ -0,0 +1,10 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
try:
from trytond.modules.country.scripts.import_countries import do_import
except ImportError:
def do_import(*args, **kwargs):
pass
__all__ = [do_import]
+14
View File
@@ -0,0 +1,14 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from proteus import Model
try:
from trytond.modules.currency.scripts.import_currencies import do_import
except ImportError:
def do_import(*args, **kwargs):
Currency = Model.get('currency.currency')
usd = Currency(name="USD", code='USD')
usd.save()
__all__ = [do_import]
+83
View File
@@ -0,0 +1,83 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from proteus import Model
from . import avatar
def setup(config, modules):
Party = Model.get('party.party')
Address = Model.get('party.address')
Country = Model.get('country.country')
Subdivision = Model.get('country.subdivision')
ContactMechanism = Model.get('party.contact_mechanism')
customers, suppliers = [], []
try:
us, = Country.find([('code', '=', 'US')])
except ValueError:
us = None
try:
pennsylvania, = Subdivision.find([('code', '=', 'US-PA')])
except ValueError:
pennsylvania = None
name = 'Electric City Trolley Museum Association'
try:
party, = Party.find([('name', '=', name)])
except ValueError:
party = Party(name=name)
party.addresses.pop()
party.addresses.append(Address(street='300 Cliff Street',
postal_code='18503', city='Scranton', country=us,
subdivision=pennsylvania))
party.contact_mechanisms.append(ContactMechanism(type='phone',
value='+1 570-963-6590'))
party.contact_mechanisms.append(ContactMechanism(type='website',
value='http://www.ectma.org/'))
party.save()
customers.append(party)
name = 'Albright Memorial Library'
try:
party, = Party.find([('name', '=', name)])
except ValueError:
party = Party(name=name)
party.addresses.pop()
party.addresses.append(Address(street='500 Vine Street',
postal_code='18509', city='Scranton', country=us,
subdivision=pennsylvania))
party.contact_mechanisms.append(ContactMechanism(type='phone',
value='+1 570-348-3000'))
party.contact_mechanisms.append(ContactMechanism(type='website',
value='http://www.albright.org/'))
party.save()
customers.append(party)
name = "Cooper's Seafood House"
try:
party, = Party.find([('name', '=', name)])
except ValueError:
party = Party(name=name)
party.addresses.pop()
party.addresses.append(Address(street='701 North Washington Avenue',
postal_code='18509', city='Scranton', country=us,
subdivision=pennsylvania))
party.contact_mechanisms.append(ContactMechanism(type='phone',
value='+1 570-346-6883'))
party.save()
customers.append(party)
name = "Saber"
try:
party, = Party.find([('name', '=', name)])
except ValueError:
party = Party(name=name)
if 'party_avatar' in modules:
party.avatar = avatar.get('saber.jpg')
party.save()
suppliers.append(party)
return customers, suppliers
+62
View File
@@ -0,0 +1,62 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from decimal import Decimal
from proteus import Model
def setup(config, modules, company=None):
ProductTemplate = Model.get('product.template')
Category = Model.get('product.category')
Uom = Model.get('product.uom')
if 'account_product' in modules:
Account = Model.get('account.account')
expense, = Account.find([
('company', '=', company.id),
('code', '=', '5.1.1'),
])
revenue, = Account.find([
('company', '=', company.id),
('code', '=', '4.1.1'),
])
account_category = Category(name="Papers", accounting=True)
account_category.account_expense = expense
account_category.account_revenue = revenue
account_category.save()
papers = Category(name='Papers')
papers.save()
sizes = {}
for format in ['A5', 'A4', 'A3', 'Letter', 'Legal', 'Ledger']:
size = Category(name=format, parent=papers)
if 'account_product' in modules:
size.account_expense = expense
size.account_revenue = revenue
size.save()
sizes[format] = size
unit, = Uom.find([('name', '=', 'Unit')])
margin = Decimal('1.01')
for quantity in [250, 500]:
for format, category in sizes.items():
paper_template = ProductTemplate(name='%s Paper %s'
% (format, quantity))
paper_template.categories.append(Category(category.id))
if 'account_product' in modules:
paper_template.account_category = account_category
paper_template.default_uom = unit
paper_template.type = 'goods'
paper_template.list_price = (Decimal('0.02') * quantity * margin
).quantize(Decimal('0.0001'))
paper, = paper_template.products
paper.cost_price = Decimal('0.01') * quantity
if 'sale' in modules:
paper_template.salable = True
if 'purchase' in modules:
paper_template.purchasable = True
paper_template.save()
margin *= margin
+216
View File
@@ -0,0 +1,216 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
import random
from decimal import Decimal
from dateutil.relativedelta import relativedelta
from proteus import Model
def setup(config, activated, company):
BOM = Model.get('production.bom')
Production = Model.get('production')
ProductTemplate = Model.get('product.template')
Category = Model.get('product.category')
Uom = Model.get('product.uom')
unit, = Uom.find([('name', '=', 'Unit')])
if 'account_product' in activated:
Account = Model.get('account.account')
expense, = Account.find([
('company', '=', company.id),
('code', '=', '5.1.1'),
])
revenue, = Account.find([
('company', '=', company.id),
('code', '=', '4.1.1'),
])
account_category = Category(name="Computers", accounting=True)
account_category.account_expense = expense
account_category.account_revenue = revenue
account_category.save()
def create_product(name, list_price, cost_price):
template = ProductTemplate(name=name)
template.default_uom = unit
template.type = 'goods'
template.list_price = list_price
template.cost_price = cost_price
if 'account_product' in activated:
template.account_category = account_category
template.save()
return template.products[0]
bom = BOM(name='Computer rev1')
input_ = bom.inputs.new()
tower = create_product('Tower', Decimal(400), Decimal(250))
input_.product = tower
input_.quantity = 1
input_ = bom.inputs.new()
input_.product = create_product('Keyboard', Decimal(30), Decimal(10))
input_.quantity = 1
input_ = bom.inputs.new()
input_.product = create_product('Mouse', Decimal(10), Decimal(5))
input_.quantity = 1
input_ = bom.inputs.new()
input_.product = create_product('Screen', Decimal(300), Decimal(200))
input_.quantity = 1
output = bom.outputs.new()
computer = create_product('Computer', Decimal(750), Decimal(465))
computer.template.producible = True
computer.template.save()
output.product = computer
output.quantity = 1
bom.save()
computer.boms.new(bom=bom)
computer.save()
if 'production_routing' in activated:
setup_routing(config, activated, company)
if 'production_work' in activated:
WorkCenter = Model.get('production.work.center')
WorkCycle = Model.get('production.work.cycle')
setup_production_work(config, activated, company)
work_centers = WorkCenter.find([('parent', '=', None)])
today = dt.date.today()
production_date = today + relativedelta(months=-1)
while production_date <= today + relativedelta(days=20):
for _ in range(random.randint(0, 3)):
production = Production()
production.effective_date = production_date
production.product = computer
production.quantity = random.randint(1, 40)
production.bom = computer.boms[0].bom
if 'production_routing' in activated:
production.routing = computer.boms[0].routing
if 'production_work' in activated:
production.work_center = random.choice(work_centers)
production.save()
if (production_date < today) or (random.random() <= 1. / 3.):
production.click('wait')
if production_date < today:
production.click('assign_force')
production.click('run')
if random.random() <= 2. / 3.:
if 'production_work' in activated:
for work in production.works:
for _ in range(0, random.randint(1, 2)):
cycle = WorkCycle(
work=work,
duration=dt.timedelta(
seconds=random.randint(60, 3600)),
)
cycle.save()
cycle.click('run')
cycle.click('do')
output, = production.outputs
output.unit_price = (production.cost
/ Decimal(production.quantity)
).quantize(Decimal('0.0001'))
production.click('do')
production_date += relativedelta(days=random.randint(1, 3))
def setup_routing(config, activated, company):
Routing = Model.get('production.routing')
Operation = Model.get('production.routing.operation')
Product = Model.get('product.product')
routing = Routing(name='Computer routing rev1')
operation1 = Operation(name='Assemble pieces')
operation1.save()
step1 = routing.steps.new()
step1.operation = operation1
operation2 = Operation(name='Install software')
operation2.save()
step2 = routing.steps.new()
step2.operation = operation2
operation3 = Operation(name='Test')
operation3.save()
step3 = routing.steps.new()
step3.operation = operation3
operation4 = Operation(name='Package')
operation4.save()
step4 = routing.steps.new()
step4.operation = operation4
routing.boms.extend(routing.boms.find([('name', '=', 'Computer rev1')]))
routing.save()
computer, = Product.find([('name', '=', 'Computer')])
bom, = computer.boms
bom.routing = routing
bom.save()
def setup_production_work(config, activated, company):
WorkCenterCategory = Model.get('production.work.center.category')
WorkCenter = Model.get('production.work.center')
Operation = Model.get('production.routing.operation')
assembly = WorkCenterCategory(name='Assembly')
assembly.save()
operation, = Operation.find([('name', '=', 'Assemble pieces')])
operation.work_center_category = assembly
operation.save()
installation = WorkCenterCategory(name='Installation')
installation.save()
operations = Operation.find([
('name', 'in', ['Install software', 'Test']),
])
for operation in operations:
operation.work_center_category = installation
Operation.save(operations)
packaging = WorkCenterCategory(name='Packaging')
packaging.save()
operation, = Operation.find([('name', '=', 'Package')])
operation.work_center_category = packaging
operation.save()
lines = []
for i in range(1, 4):
line = WorkCenter(name='Line %i' % i)
assembly_line = line.children.new()
assembly_line.name = 'Assembly Line %i' % i
assembly_line.category = assembly
assembly_line.cost_method = 'cycle'
assembly_line.cost_price = Decimal(20)
installation_line = line.children.new()
installation_line.name = 'Installation Line %i' % i
installation_line.category = installation
installation_line.cost_method = 'hour'
installation_line.cost_price = Decimal(15)
packaging_line = line.children.new()
packaging_line.name = 'Packaging Line %i' % i
packaging_line.category = packaging
packaging_line.cost_method = 'hour'
packaging_line.cost_price = Decimal(10)
lines.append(line)
WorkCenter.save(lines)
+29
View File
@@ -0,0 +1,29 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
import random
from proteus import Model
def setup(config, activated, company, customers):
Work = Model.get('project.work')
customer_projects = {
'Website': ['analysis', 'design', 'setup'],
'Labels': ['design'],
'Calendar': ['design'],
}
for name, task_names in customer_projects.items():
project = Work(name=name, type='project', timesheet_available=False)
project.party = random.choice(customers)
for task_name in task_names:
task = Work(name=task_name, type='task', timesheet_available=True)
task.effort_duration = dt.timedelta(
days=random.randint(10, 30),
hours=random.randint(1, 5))
task.progress = random.randint(1, 100) // 5 * 5 / 100.
project.children.append(task)
project.save()
+42
View File
@@ -0,0 +1,42 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
import random
from dateutil.relativedelta import relativedelta
from proteus import Model
def setup(config, modules, company, suppliers):
Purchase = Model.get('purchase.purchase')
Product = Model.get('product.product')
all_products = Product.find([
('purchasable', '=', True),
])
today = dt.date.today()
purchase_date = today - relativedelta(days=60)
while purchase_date <= today + relativedelta(days=20):
supplier = random.choice(suppliers)
purchase = Purchase()
purchase.party = supplier
purchase.purchase_date = purchase_date
products = random.sample(
all_products, random.randint(1, len(all_products)))
for product in products:
purchase_line = purchase.lines.new()
purchase_line.product = product
purchase_line.quantity = random.randint(20, 100)
purchase_line.unit_price = product.cost_price
purchase.save()
threshold = 2. / 3.
if random.random() <= threshold:
purchase.click('quote')
if random.random() <= threshold:
purchase.click('confirm')
purchase.click('process')
elif random.choice([True, False]):
purchase.click('cancel')
purchase_date += relativedelta(days=random.randint(5, 10))
+48
View File
@@ -0,0 +1,48 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
import random
from dateutil.relativedelta import relativedelta
from proteus import Model
def setup(config, modules, company, customers):
Sale = Model.get('sale.sale')
Product = Model.get('product.product')
all_products = Product.find([
('salable', '=', True),
])
today = dt.date.today()
sale_date = today + relativedelta(months=-2)
while sale_date <= today + relativedelta(days=10):
for _ in range(random.randint(1, 5)):
customer = random.choice(customers)
sale = Sale()
sale.party = customer
sale.sale_date = sale_date
products = random.sample(
all_products, random.randint(1, len(all_products)))
for product in products:
sale_line = sale.lines.new()
sale_line.product = product
sale_line.quantity = random.randint(1, 50)
sale.save()
if sale_date <= today:
threshold = 2. / 3.
else:
threshold = 1. / 3.
if random.random() <= threshold:
sale.click('quote')
if random.random() <= threshold:
sale.click('confirm')
if random.random() <= threshold:
sale.click('process')
elif random.random() >= threshold:
sale.click('cancel')
elif random.random() >= threshold:
sale.click('cancel')
sale_date += relativedelta(days=random.randint(1, 3))
+32
View File
@@ -0,0 +1,32 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import random
from proteus import Model
def setup(config, activated, company, suppliers):
ShipmentIn = Model.get('stock.shipment.in')
ShipmentOut = Model.get('stock.shipment.out')
for supplier in suppliers:
shipment = ShipmentIn()
shipment.supplier = supplier
all_moves = shipment.incoming_moves.find()
moves = random.sample(all_moves, len(all_moves) * 2 // 3)
while moves:
shipment = ShipmentIn()
shipment.supplier = supplier
for _ in range(random.randint(1, len(moves))):
move = moves.pop()
shipment.incoming_moves.append(move)
shipment.click('receive')
shipment.click('do')
shipments = ShipmentOut.find([('state', '=', 'waiting')])
for shipment in shipments:
if shipment.click('assign_try'):
shipment.click('pick')
shipment.click('pack')
shipment.click('do')
+39
View File
@@ -0,0 +1,39 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
import random
from dateutil.relativedelta import relativedelta
from proteus import Model
def setup(config, activated, company):
Work = Model.get('timesheet.work')
Employee = Model.get('company.employee')
Line = Model.get('timesheet.line')
for name in ['Marketing', 'Accounting', 'Secretary']:
work = Work(name=name)
work.save()
employees = Employee.find([('company', '=', company.id)])
works = Work.find([])
today = dt.date.today()
date = today + relativedelta(months=-1)
day = dt.timedelta(hours=8)
while date <= today:
if date.weekday() < 5:
for employee in employees:
total = dt.timedelta()
while total < day:
if random.random() > 0.8:
break
line = Line(employee=employee, date=date)
line.work = random.choice(works)
duration = dt.timedelta(hours=random.randint(1, 8))
line.duration = min(duration, day - total)
line.save()
date += dt.timedelta(days=1)
+16
View File
@@ -0,0 +1,16 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import hashlib
from proteus import Model
def format_warning(name, records):
key = '|'.join(map(str, records)).encode('utf-8')
return '%s.%s' % (hashlib.md5(key).hexdigest(), name)
def skip_warning(config, name, records):
Warning_ = Model.get('res.user.warning')
Warning_(user=config.user, name=format_warning(name, records)).save()
+171
View File
@@ -0,0 +1,171 @@
:orphan:
.. _index-accounting:
Accounting
==========
:doc:`Account <account:index>`
Fundamentals for most accounting needs.
:doc:`Asset <account_asset:index>`
Depreciate fixed assets.
:doc:`Belgian <account_be:index>`
Belgian accounting.
:doc:`Budget <account_budget:index>`
Budgets for accounts.
:doc:`Cash Rounding <account_cash_rounding:index>`
Round cash amounts.
:doc:`Consolidation <account_consolidation:index>`
Consolidate accounting of multiple companies.
:doc:`Credit Limit <account_credit_limit:index>`
Manage credit limit of parties.
:doc:`Deposit <account_deposit:index>`
Support customer deposits.
:doc:`Dunning <account_dunning:index>`
Manage dunning on receivables.
:doc:`Dunning Email <account_dunning_email:index>`
Send dunning emails.
:doc:`Dunning Fee <account_dunning_fee:index>`
Add fees to dunning.
:doc:`Dunning Letter <account_dunning_letter:index>`
Print dunning letters.
:doc:`Export <account_export:index>`
Export of accounting.
:doc:`Export WinBooks <account_export_winbooks:index>`
Export to WinBooks.
:doc:`Europe <account_eu:index>`
Common European requirements.
:doc:`French <account_fr:index>`
French accounting.
:doc:`French Chorus <account_fr_chorus:index>`
Send invoices via Chorus Pro.
:doc:`Invoice <account_invoice:index>`
Manage customer and supplier invoices.
:doc:`Invoice Correction <account_invoice_correction:index>`
Correct price on posted invoices.
:doc:`Invoice Defer <account_invoice_defer:index>`
Defer expense and revenue.
:doc:`Invoice History <account_invoice_history:index>`
Historize invoice.
:doc:`Invoice Line Standalone <account_invoice_line_standalone:index>`
Support invoice line without invoice.
:doc:`Invoice Secondary Unit <account_invoice_secondary_unit:index>`
Add a secondary unit of measure.
:doc:`Invoice Stock <account_invoice_stock:index>`
Link invoice lines and stock moves.
:doc:`Invoice Watermark <account_invoice_watermark:index>`
Add watermark to printed invoices.
:doc:`Move Line Grouping <account_move_line_grouping:index>`
Show move line grouped.
:doc:`Payment <account_payment:index>`
Manage payments.
:doc:`Payment Braintree <account_payment_braintree:index>`
Receive payment from Braintree.
:doc:`Payment Check <account_payment_check:index>`
Manage and print checks.
:doc:`Payment Clearing <account_payment_clearing:index>`
Use clearing account for payments.
:doc:`Payment SEPA <account_payment_sepa:index>`
Generate SEPA messages for payments.
:doc:`Payment SEPA CFONB <account_payment_sepa_cfonb:index>`
Add CFONB flavors to SEPA.
:doc:`Payment Stripe <account_payment_stripe:index>`
Receive payment from Stripe.
:doc:`Product <account_product:index>`
Add accounting on product and category.
:doc:`Receivable Rule <account_receivable_rule:index>`
Apply rules to receivable.
:doc:`Rule <account_rule:index>`
Apply rules on accounts.
:doc:`Statement <account_statement:index>`
Book bank statement, cash day book etc.
:doc:`Statement AEB43 <account_statement_aeb43:index>`
Import statements in AEB43 format.
:doc:`Statement CODA <account_statement_coda:index>`
Import statements in CODA format.
:doc:`Statement MT940 <account_statement_mt940:index>`
Import statement in MT940 format.
:doc:`Statement OFX <account_statement_ofx:index>`
Import statements in OFX format.
:doc:`Statement Rule <account_statement_rule:index>`
Apply rules on imported statements.
:doc:`Statement SEPA <account_statement_sepa:index>`
Import statements in SEPA format.
:doc:`Stock Anglo-Saxon <account_stock_anglo_saxon:index>`
Value stock using the anglo-saxon method.
:doc:`Stock Continental <account_stock_continental:index>`
Value stock using the continental method.
:doc:`Stock European <account_stock_eu:index>`
Common stock European requirements.
:doc:`Stock European Excise <account_stock_eu_excise:index>`
Common European requirements for excise products.
:doc:`Stock Landed Cost <account_stock_landed_cost:index>`
Allocate landed cost.
:doc:`Stock Landed Cost Weight <account_stock_landed_cost_weight:index>`
Allocate landed cost based on weight.
:doc:`Stock Shipment Cost <account_stock_shipment_cost:index>`
Allocate shipment cost.
:doc:`Stock Shipment Cost Weight <account_stock_shipment_cost_weight:index>`
Allocate shipment cost by weight.
:doc:`SYSCOHADA <account_syscohada:index>`
SYSCOHADA chart of accounts.
:doc:`Tax Cash <account_tax_cash:index>`
Report tax on cash basis.
:doc:`Tax Non-Deductible <account_tax_non_deductible:index>`
Report non-deductible tax.
:doc:`Tax Rule Country <account_tax_rule_country:index>`
Apply taxes per country of origin and destination.
+21
View File
@@ -0,0 +1,21 @@
:orphan:
.. _index-analytic-accounting:
Analytic Accounting
===================
:doc:`Account <analytic_account:index>`
Fundamentals for analytic.
:doc:`Budget <analytic_budget:index>`
Budgets for analytic accounts.
:doc:`Invoice <analytic_invoice:index>`
Add analytic on invoice.
:doc:`Purchase <analytic_purchase:index>`
Add analytic on purchase.
:doc:`Sale <analytic_sale:index>`
Add analytic on sale.
+15
View File
@@ -0,0 +1,15 @@
:orphan:
.. _index-authentication:
Authentication
==============
:doc:`SAML <authentication_saml:index>`
Authentication per SAML.
:doc:`SMS <authentication_sms:index>`
Authentication per SMS.
:doc:`LDAP <ldap_authentication:index>`
Authentication per LDAP.
+21
View File
@@ -0,0 +1,21 @@
:orphan:
.. _index-carrier:
Carrier
=======
:doc:`Carrier <carrier:index>`
Fundamentals to manage carriers.
:doc:`Carriage <carrier_carriage:index>`
Support multiple carriers per document.
:doc:`Percentage <carrier_percentage:index>`
Compute cost based on percentage.
:doc:`Subdivision <carrier_subdivision:index>`
Restrict the usage of a carrier to subdivisions and ZIP codes.
:doc:`Weight <carrier_weight:index>`
Compute cost based on weight.
+12
View File
@@ -0,0 +1,12 @@
:orphan:
.. _index-commission:
Commission
==========
:doc:`Commission <commission:index>`
Fundamentals to commission sale's agents.
:doc:`Waiting <commission_waiting:index>`
Create waiting account moves.
+12
View File
@@ -0,0 +1,12 @@
:orphan:
.. _index-company:
Company
=======
:doc:`Company <company:index>`
Define company and employees.
:doc:`Work Time <company_work_time:index>`
Define work time per company.
+99
View File
@@ -0,0 +1,99 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
base_url = os.environ.get('DOC_BASE_URL')
if base_url:
modules_url = base_url + '/modules-{module}/'
trytond_url = base_url + '/server/'
trytond_gis_url = base_url + '/backend-gis/'
tryton_url = base_url + '/client-desktop/'
proteus_url = base_url + '/client-library/'
naiad_url = base_url + '/client-rest/'
else:
modules_url = (
'https://docs.tryton.org/${series}/modules-{module}/')
trytond_url = 'https://docs.tryton.org/${series}/server/'
trytond_gis_url = 'https://docs.tryton.org/${series}/backend-gis/'
tryton_url = 'https://docs.tryton.org/${series}/client-desktop/'
proteus_url = 'https://docs.tryton.org/${series}/client-library/'
naiad_url = 'https://docs.tryton.org/${series}/client-rest/'
def get_info():
import json
import subprocess
trytond_dir = os.path.join(os.path.dirname(__file__), '../trytond')
info = dict()
metadata_cmd = 'python3 -m build -qq --metadata'
if os.environ.get('DOC_NO_ISOLATION'):
metadata_cmd += ' --no-isolation'
metadata = subprocess.check_output(
metadata_cmd, shell=True, encoding='utf-8', cwd=trytond_dir).strip()
metadata = json.loads(metadata)
major_version, minor_version, _ = metadata['version'].split('.', 2)
major_version = int(major_version)
minor_version = int(minor_version)
if minor_version % 2:
info['series'] = 'latest'
info['branch'] = 'branch/default'
else:
info['series'] = '.'.join(metadata['version'].split('.', 2)[:2])
info['branch'] = 'branch/' + info['series']
info['modules'] = [
e.name for e in os.scandir('../modules') if e.is_dir()]
return info
info = get_info()
html_theme = 'sphinx_book_theme'
html_theme_options = {
'logo': {
'alt_text': "Tryton Documentation",
'image_light': 'https://docs.tryton.org/logo-light.svg',
'image_dark': 'https://docs.tryton.org/logo-dark.svg',
'link': base_url,
},
'home_page_in_toc': True,
'repository_provider': 'gitlab',
'repository_url': 'https://code.tryton.org/tryton',
'repository_branch': info['branch'],
'use_source_button': True,
'use_edit_page_button': True,
'use_repository_button': True,
'use_download_button': False,
'path_to_docs': 'doc',
}
html_title = "Tryton Documentation"
master_doc = 'index'
project = "Tryton Documentation"
release = version = info['series']
default_role = 'ref'
highlight_language = 'none'
extensions = [
'sphinx_copybutton',
'sphinx.ext.intersphinx',
]
intersphinx_mapping = {
'python': ('https://docs.python.org/', None),
'trytond': (trytond_url.format(series=version), None),
'trytond_gis': (trytond_gis_url.format(series=version), None),
'tryton': (tryton_url.format(series=version), None),
'proteus': (proteus_url.format(series=version), None),
'naiad': (naiad_url.format(series=version), None),
}
intersphinx_mapping.update({
m: (modules_url.format(
module=m.replace('_', '-'), series=version), None)
for m in info['modules']
})
linkcheck_ignore = [r'/.*', r'https://demo.tryton.org/*']
del (
get_info, info, base_url, modules_url, trytond_url, trytond_gis_url,
tryton_url, proteus_url, naiad_url)
+15
View File
@@ -0,0 +1,15 @@
:orphan:
.. _index-currency:
Currency
========
:doc:`Currency <currency:index>`
ISO 4217 list of currencies.
:doc:`Romanian <currency_ro:index>`
Exchange rates from the Romanian National Bank.
:doc:`Serbian <currency_rs:index>`
Exchange rates from the Serbian National Bank.
+18
View File
@@ -0,0 +1,18 @@
:orphan:
.. _index-document-incoming:
Document Incoming
=================
:doc:`Document Incoming <document_incoming:index>`
Fundamentals to collect and process incoming documents.
:doc:`Invoice <document_incoming_invoice:index>`
Create supplier invoice.
:doc:`OCR <document_incoming_ocr:index>`
Basis to interact with OCR services.
:doc:`OCR Typless <document_incoming_ocr_typless:index>`
Integrate with Typless services.
+21
View File
@@ -0,0 +1,21 @@
:orphan:
.. _index-edocument:
Electronic Document
===================
:doc:`Peppol <edocument_peppol:index>`
Support for the Peppol network.
:doc:`Peppol Peppyrus <edocument_peppol_peppyrus:index>`
Connect with Peppyrus Peppol access point.
:doc:`UBL <edocument_ubl:index>`
Support UBL format.
:doc:`UN/CEFACT <edocument_uncefact:index>`
Support UN/CEFACT format.
:doc:`UNECE <edocument_unece:index>`
Add UNECE codes.
+138
View File
@@ -0,0 +1,138 @@
====================
Tryton Documentation
====================
Main
====
:doc:`Server <trytond:index>`
The main application.
:ref:`Migration <index-migration>`
Manual step when upgrading between series.
:doc:`Desktop Client <tryton:index>`
The application to connect to the server.
:doc:`Scripting Client <proteus:index>`
The library to access models, wizards and reports like a client.
:doc:`REST Client <naiad:index>`
The library to access REST API.
Backend
=======
:doc:`GIS <trytond_gis:index>`
Adds GIS support.
Modules
=======
Operational
-----------
:ref:`Financial Accounting <index-accounting>`
Reports all transactions of your chart of accounts.
:ref:`Analytic Accounting <index-analytic-accounting>`
Analyze your accounts.
:doc:`Attendance <attendance:index>`
Track presences.
:ref:`Commission <index-commission>`
Commission sale's agents.
:ref:`EDocument <index-edocument>`
Electronic document format.
:ref:`Marketing <index-marketing>`
Communicates with your customers.
:ref:`Production <index-production>`
Transforms raw materials into finished products.
:ref:`Project <index-project>`
Checks the profitability of projects.
:ref:`Purchase <index-purchase>`
Follows your purchases.
:ref:`Quality <index-quality>`
Manage Quality.
:ref:`Sale <index-sale>`
Follows sale orders.
:ref:`Sale Point <index-sale-point>`
Point of Sales.
:ref:`Sale Rental <index-sale-rental>`
Rents assets and services.
:ref:`Sale Subscription <index-sale_subscription>`
Subscribes to recurring service.
:ref:`Stock <index-stock>`
Tracks goods in your warehouses.
:ref:`Timesheet <index-timesheet>`
Tracks time spend.
Referential
-----------
:doc:`Banking <bank:index>`
Adds bank and account.
:ref:`Company <index-company>`
Structure of the company.
:ref:`Carrier <index-carrier>`
To ship.
:doc:`Country <country:index>`
ISO 3166 list of countries and subdivisions.
:ref:`Currency <index-currency>`
Manage currencies
:doc:`Customs <customs:index>`
Defines customs duty per tariff code.
:doc:`Dashboard <dashboard:index>`
Customized dashboard.
:doc:`Incoterm <incoterm:index>`
Defines incoterms.
:ref:`Party <index-party>`
Identify parties.
:ref:`Product <index-product>`
Manages products.
Administration
--------------
:ref:`Document Incoming <index-document-incoming>`
Process incoming document.
:doc:`Inbound Email <inbound_email:index>`
Receive email.
:ref:`Resource <trytond:res>`
Manage users and groups.
:ref:`Authentication <index-authentication>`
Extends authentication mechanism.
:doc:`Notification Email <notification_email:index>`
Sends email.
:doc:`User Role <user_role:index>`
Manage user groups with roles.
:ref:`Web <index-web>`
Manage web features.
+18
View File
@@ -0,0 +1,18 @@
:orphan:
.. _index-marketing:
Marketing
=========
:doc:`Marketing <marketing:index>`
Fundamentals for marketing.
:doc:`Automation <marketing_automation:index>`
Use scenario.
:doc:`Campaign <marketing_campaign:index>`
Manage campaign.
:doc:`Email <marketing_email:index>`
Manage mailing lists.
+258
View File
@@ -0,0 +1,258 @@
:orphan:
.. _index-migration:
Migration
=========
Here are listed the manual actions you need to take before and after upgrading
a database from another series.
.. note::
If you skip a series, all actions between them must be performed.
.. warning::
You cannot skip more than 2 series ending with ``.0``.
.. _migration-8.0:
8.0
---
.. _migration-8.0-before:
Before
~~~~~~
* Remove ``google_maps`` module:
.. code-block:: SQL
DELETE FROM "ir_module" WHERE name = 'google_maps';
* Remove ``account_es`` and ``account_es_sii`` modules if you are not
installing external replacements:
.. code-block:: SQL
DELETE FROM "ir_module" WHERE name in ('account_es', 'account_es_sii');
* Remove ``account_de_skr03`` module if you are not installing external
replacement:
.. code-block:: SQL
DELETE FROM "ir_module" WHERE name = 'account_de_skr03';
.. _migration-7.8:
7.8
---
.. _migration-7.8-before:
Before
~~~~~~
* If ``carrier_carriage`` module is activated, remove ``NOT NULL`` to
``before_carrier`` and ``after_carrier``:
.. code-block:: SQL
ALTER TABLE "incoterm_incoterm" ALTER COLUMN "before_carrier" DROP NOT NULL;
ALTER TABLE "incoterm_incoterm" ALTER COLUMN "after_carrier" DROP NOT NULL;
.. _migration-7.8-after:
After
~~~~~
* If ``account_payment_sepa`` module is activated, fill the address of
validated mandates with default value with the ``trytond-console``:
.. code-block:: python
Mandate = pool.get('account.payment.sepa.mandate')
mandates = Mandate.search([
('state', '=', 'validated'),
('address', '=', None),
])
for mandate in mandates:
mandate.on_change_party()
Mandate.save(mandates)
transaction.commit()
.. _migration-7.6:
7.6
---
.. _migration-7.6-before:
Before
~~~~~~
* Rename columns of ``ir.model`` and ``ir.model.field``:
.. code-block:: SQL
ALTER TABLE IF EXISTS "ir_model" RENAME COLUMN "name" TO "string";
ALTER TABLE IF EXISTS "ir_model" RENAME COLUMN "model" TO "name";
ALTER TABLE IF EXISTS "ir_model_field" RENAME COLUMN "field_description" TO "string";
* ``pbkdf2_sha512`` and ``scrypt`` password hashes are no more supported.
Make sure to enable ``argon2`` and update old passwords by logging in.
.. _migration-7.6-after:
After
~~~~~
* If ``stock`` module is activated with internal shipment using transit
location, fill the internal transit location with the ``trytond-console``:
.. code-block:: python
Shipment = pool.get('stock.shipment.internal')
shipments = Shipment.search([('state', 'not in', ['request', 'draft'])])
for shipment in shipments:
state = shipment.state
shipment.state = 'draft'
shipment.internal_transit_location = shipment.transit_location
shipment.state = state
Shipment.save(shipments)
transaction.commit()
* If ``account_budget`` module is activated, invert amount sign:
.. code-block:: SQL
UPDATE "account_budget_line" SET amount = -amount;
* If ``analytic_budget`` module is activated, invert amount sign:
.. code-block:: SQL
UPDATE "analytic_account_budget_line" SET amount = -amount;
.. _migration-7.4:
7.4
---
.. _migration-7.4-before:
Before
~~~~~~
* If ``product_price_list`` and ``product_price_list_dates`` are activated,
remove ``open_lines`` button:
.. code-block:: SQL
DELETE FROM "ir_model_button" WHERE "name" = 'open_lines' AND "model" = 'product.price_list';
.. _migration-7.2:
7.2
---
.. _migration-7.2-before:
Before
~~~~~~
* Use NULL value for empty foreign key with:
.. code-block:: SQL
UPDATE "ir_ui_view" SET "model" = NULL WHERE "model" = '';
UPDATE "ir_action_act_window" SET "res_model" = NULL WHERE "res_model" = '';
UPDATE "ir_action_wizard" SET "model" = NULL WHERE "model" = '';
UPDATE "ir_action_report" SET "model" = NULL WHERE "model" = '';
UPDATE "ir_action_report" SET "module" = NULL WHERE "module" = '';
UPDATE "ir_translation" SET "module" = NULL WHERE "module" = '';
.. _migration-7.0:
7.0
---
.. _migration-7.0-before:
Before
~~~~~~
* If ``account_payment_clearing`` module is activated, remove ``account`` if ``line`` is
set:
.. code-block:: SQL
UPDATE "account_payment" SET "account" = NULL WHERE "line" IS NOT NULL;
.. _migration-7.0-after:
After
~~~~~
* If ``account_invoice`` module is activated, fill the amount caches with the
``trytond-console``:
.. code-block:: python
Invoice = pool.get('account.invoice')
invoices = Invoice.search([('state', 'in', ['posted', 'paid'])])
for invoice in invoices:
invoice.untaxed_amount_cache = invoice.untaxed_amount
invoice.tax_amount_cache = invoice.tax_amount
invoice.total_amount_cache = invoice.total_amount
Invoice.save(invoices)
transaction.commit()
.. note::
This process may take some time depending on the number of invoices on
your database.
* If ``product_price_list`` module is activated, add a default price list line
if price list does not have one and it was relying on the fallback price.
.. _migration-6.0:
6.0
---
.. _migration-6.0-before:
Before
~~~~~~
* Add access on field:
.. code-block:: SQL
ALTER TABLE IF EXISTS "ir_model_field" ADD COLUMN IF NOT EXISTS "access" BOOLEAN;
* If ``account_invoice`` module is activated, fix ``currency``,
``invoice_type`` and ``party`` on ``account.invoice.line``:
.. code-block:: SQL
UPDATE "account_invoice_line" SET "currency" = (SELECT "currency" FROM "account_invoice" WHERE "id" = "account_invoice_line"."invoice") WHERE "invoice" IS NOT NULL;
UPDATE "account_invoice_line" SET "invoice_type" = (SELECT "type" FROM "account_invoice" WHERE "id" = "account_invoice_line"."invoice") WHERE "invoice_type" IS NOT NULL AND "invoice" IS NOT NULL;
UPDATE "account_invoice_line" SET "party" = (SELECT "party" FROM "account_invoice" WHERE "id" = "account_invoice_line"."invoice") WHERE "party" IS NOT NULL AND "invoice" IS NOT NULL;
.. _migration-6.0-after:
After
~~~~~
* Remove code column on ``ir.sequence.type``:
.. code-block:: SQL
ALTER TABLE IF EXISTS "ir_sequence_type" DROP COLUMN IF EXISTS "code";
+18
View File
@@ -0,0 +1,18 @@
:orphan:
.. _index-party:
Party
=====
:doc:`Party <party:index>`
Fundamentals to store parties.
:doc:`Avatar <party_avatar:index>`
Add avatar.
:doc:`Relationship <party_relationship:index>`
Define relation between parties.
:doc:`SIRET <party_siret:index>`
Add SIRET and SIREN.
+51
View File
@@ -0,0 +1,51 @@
:orphan:
.. _index-product:
Product
=======
:doc:`Product <product:index>`
Fundamentals to manage products.
:doc:`Attribute <product_attribute:index>`
Add attributes to products.
:doc:`Classification <product_classification:index>`
Classify products.
:doc:`Classification Taxonomic <product_classification_taxonomic:index>`
Use Taxonomic classification.
:doc:`Cost FIFO <product_cost_fifo:index>`
Add FIFO cost method.
:doc:`Cost History <product_cost_history:index>`
Historize the cost.
:doc:`Cost Warehouse <product_cost_warehouse:index>`
Calculate cost prices per warehouse.
:doc:`Measurements <product_measurements:index>`
Add measurements to products.
:doc:`Price List <product_price_list:index>`
Compute price.
:doc:`Price List Cache <product_price_list_cache:index>`
Pre-compute prices.
:doc:`Price List Dates <product_price_list_dates:index>`
Set start and end date on price lists.
:doc:`Price List Parent <product_price_list_parent:index>`
Add price list cascading.
:doc:`Image <product_image:index>`
Add images.
:doc:`Image Attribute <product_image_attribute:index>`
Add attributes to product images.
:doc:`Kit <product_kit:index>`
Add support for product kits.
+27
View File
@@ -0,0 +1,27 @@
:orphan:
.. _index-production:
Production
==========
:doc:`Production <production:index>`
Fundamentals for production management.
:doc:`Ethanol <production_ethanol:index>`
Track produced ethanol.
:doc:`Outsourcing <production_outsourcing:index>`
Outsource the production.
:doc:`Routing <production_routing:index>`
Define routings.
:doc:`Split <production_split:index>`
Split production orders.
:doc:`Work <production_work:index>`
Manage work order for each production.
:doc:`Work Timesheet <production_work_timesheet:index>`
Track time per work.
+18
View File
@@ -0,0 +1,18 @@
:orphan:
.. _index-project:
Project
=======
:doc:`Project <project:index>`
Fundamentals for project management.
:doc:`Invoice <project_invoice:index>`
Invoice projects.
:doc:`Plan <project_plan:index>`
Plan projects.
:doc:`Revenue <project_revenue:index>`
Follow cost and revenue of projects.
+42
View File
@@ -0,0 +1,42 @@
:orphan:
.. _index-purchase:
Purchase
========
:doc:`Purchase <purchase:index>`
Fundamentals to follow purchases.
:doc:`Amendment <purchase_amendment:index>`
Amend purchases in processing.
:doc:`Blanket Agreement <purchase_blanket_agreement:index>`
Manage blanket agreements.
:doc:`History <purchase_history:index>`
Manage revisions.
:doc:`Invoice Line Standalone <purchase_invoice_line_standalone:index>`
Generate invoice lines.
:doc:`Price List <purchase_price_list:index>`
Apply price lists.
:doc:`Product Quantity <purchase_product_quantity:index>`
Add constraints on quantity purchased.
:doc:`Request <purchase_request:index>`
Collect purchase requests.
:doc:`Request Quotation <purchase_request_quotation:index>`
Ask quotation for purchase requests.
:doc:`Requisition <purchase_requisition:index>`
Require purchase by employees.
:doc:`Secondary Unit <purchase_secondary_unit:index>`
Add a secondary unit of measure.
:doc:`Shipment Cost <purchase_shipment_cost:index>`
Compute shipment cost.
+9
View File
@@ -0,0 +1,9 @@
:orphan:
.. _index-quality:
Quality
=======
:doc:`Quality <quality:index>`
Fundamentals to manage quality.
+3
View File
@@ -0,0 +1,3 @@
build
sphinx_book_theme
sphinx_copybutton
+99
View File
@@ -0,0 +1,99 @@
:orphan:
.. _index-sale:
Sale
====
:doc:`Sale <sale:index>`
Fundamentals to follow sales.
:doc:`Advance Payment <sale_advance_payment:index>`
Manage advance payment on sale.
:doc:`Amendment <sale_amendment:index>`
Amend sales in processing.
:doc:`Blanket Agreement <sale_blanket_agreement:index>`
Manage sale blanket agreements.
:doc:`Complaint <sale_complaint:index>`
Solve customer complaints.
:doc:`Credit Limit <sale_credit_limit:index>`
Add sales to the credit limit.
:doc:`Discount <sale_discount:index>`
Add discount on lines.
:doc:`Extra <sale_extra:index>`
Add extra lines.
:doc:`Gift Card <sale_gift_card:index>`
Sale gift cards.
:doc:`History <sale_history:index>`
Manage revisions.
:doc:`Invoice Date <sale_invoice_date:index>`
Compute the date of invoice.
:doc:`Invoice Grouping <sale_invoice_grouping:index>`
Group invoices.
:doc:`Opportunity <sale_opportunity:index>`
Track leads and opportunities.
:doc:`Payment <sale_payment:index>`
Pay sales before posting the invoice.
:doc:`Price List <sale_price_list:index>`
Apply price list.
:doc:`Product Customer <sale_product_customer:index>`
Add customer's name and code for product.
:doc:`Product Quantity <sale_product_quantity:index>`
Add constraints on quantity sold.
:doc:`Product Recommendation <sale_product_recommendation:index>`
Recommend products.
:doc:`Product Recommendation Association Rule <sale_product_recommendation_association_rule:index>`
Recommend products based on association rules.
:doc:`Project Task <sale_project_task:index>`
Create tasks for services sold.
:doc:`Promotion <sale_promotion:index>`
Apply promotions.
:doc:`Promotion Coupon <sale_promotion_coupon:index>`
Apply promotions with coupons.
:doc:`Promotion Coupon Payment <sale_promotion_coupon_payment:index>`
Count coupon per identical payment party.
:doc:`Shipment Cost <sale_shipment_cost:index>`
Compute shipment cost.
:doc:`Shipment Grouping <sale_shipment_grouping:index>`
Group shipments.
:doc:`Shipment Tolerance <sale_shipment_tolerance:index>`
Define tolerance for under and over shipment.
:doc:`Secondary Unit <sale_secondary_unit:index>`
Add a secondary unit of measure.
:doc:`Stock Quantity <sale_stock_quantity:index>`
Checks stock level.
:doc:`Supply <sale_supply:index>`
Supply from the sale.
:doc:`Supply Drop Shipment <sale_supply_drop_shipment:index>`
Supply with drop shipment.
:doc:`Supply Production <sale_supply_production:index>`
Supply with production.
+9
View File
@@ -0,0 +1,9 @@
:orphan:
.. _index-sale-point:
Point of Sale
=============
:doc:`Sale Point <sale_point:index>`
Fundamentals for POS.
+12
View File
@@ -0,0 +1,12 @@
:orphan:
.. _index-sale-rental:
Sale Rental
===========
:doc:`Rental <sale_rental:index>`
Fundamentals to manage rental sales.
:doc:`Progress Invoice <sale_rental_progress_invoice:index>`
Generate progress invoice
+12
View File
@@ -0,0 +1,12 @@
:orphan:
.. _index-sale_subscription:
Sale Subscription
=================
:doc:`Subscription <sale_subscription:index>`
Fundamentals to manage subscriptions.
:doc:`Asset <sale_subscription_asset:index>`
Add asset to subscribed service.
+102
View File
@@ -0,0 +1,102 @@
:orphan:
.. _index-stock:
Stock
=====
:doc:`Stock <stock:index>`
Fundamentals to manage warehouses.
:doc:`Assign Manual <stock_assign_manual:index>`
Manually decide where to pick products.
:doc:`Consignment <stock_consignment:index>`
Manage consignment stock from supplier or at customer warehouse.
:doc:`Ethanol <stock_ethanol:index>`
Track ethanol in stock.
:doc:`Forecast <stock_forecast:index>`
Forecast the stock levels.
:doc:`Inventory Location <stock_inventory_location:index>`
Create inventories for many locations.
:doc:`Location Move <stock_location_move:index>`
Make location movable.
:doc:`Location Sequence <stock_location_sequence:index>`
Order locations.
:doc:`Lot <stock_lot:index>`
Track products with lot.
:doc:`Lot Shelf Life Expiration Date <stock_lot_sled:index>`
Manage expiration dates.
:doc:`Lot Unit <stock_lot_unit:index>`
Define unit and quantity per lot.
:doc:`Package <stock_package:index>`
Store packaging on shipments.
:doc:`Package Shipping <stock_package_shipping:index>`
Fundamentals to interact with shipping services.
:doc:`Package Shipping DPD <stock_package_shipping_dpd:index>`
Connect with DPD shipping service.
:doc:`Package Shipping MyGLS <stock_package_shipping_mygls:index>`
Connect with MyGLS shipping service.
:doc:`Package Shipping Sendcloud <stock_package_shipping_sendcloud:index>`
Connect to the Sendcloud shipping service.
:doc:`Package Shipping UPS <stock_package_shipping_ups:index>`
Connect with UPS shipping service.
:doc:`Product Location <stock_product_location:index>`
Define preferred locations for products.
:doc:`Product Location Place <stock_product_location_place:index>`
Defines fixed place of products per location.
:doc:`Quantity Early Planning <stock_quantity_early_planning:index>`
Consume earlier stock.
:doc:`Quantity Issue <stock_quantity_issue:index>`
Report quantity issues.
:doc:`Secondary Unit <stock_secondary_unit:index>`
Add a secondary unit of measure.
:doc:`Shipment Customs <stock_shipment_customs:index>`
Generate commercial invoices.
:doc:`Shipment Cost <stock_shipment_cost:index>`
Add shipment costs to outgoing moves.
:doc:`Shipment Cost Weight <stock_shipment_cost_weight:index>`
Set shipment costs based on weight.
:doc:`Shipment Measurements <stock_shipment_measurements:index>`
Add measurements to shipments.
:doc:`Shipping Point <stock_shipping_point:index>`
Define a shipping point for each shipment.
:doc:`Split <stock_split:index>`
Split moves and shipments.
:doc:`Supply <stock_supply:index>`
Supply warehouses.
:doc:`Supply Forecast <stock_supply_forecast:index>`
Use forecast to supply warehouses.
:doc:`Supply Day <stock_supply_day:index>`
Compute supply date per week day.
:doc:`Supply Production <stock_supply_production:index>`
Supply warehouses with production orders.
+12
View File
@@ -0,0 +1,12 @@
:orphan:
.. _index-timesheet:
Timesheet
=========
:doc:`Timesheet <timesheet:index>`
Fundamentals to track time spend.
:doc:`Cost <timesheet_cost:index>`
Track employee costs.
+27
View File
@@ -0,0 +1,27 @@
:orphan:
.. _index-web:
Web
===
:doc:`Shop <web_shop:index>`
Fundamentals to sale online.
:doc:`Shop Product Data Feed <web_shop_product_data_feed:index>`
Publish product data feed for markets.
:doc:`Shop Shopify <web_shop_shopify:index>`
Integrate with Shopify.
:doc:`Shop Vue Storefront <web_shop_vue_storefront:index>`
Integrate with Vue Storefront.
:doc:`Shop Vue Storefront Stripe <web_shop_vue_storefront_stripe:index>`
Support of Stripe Payment for Vue Storefront.
:doc:`Shortener <web_shortener:index>`
Shorten URL and connects them to actions.
:doc:`User <web_user:index>`
Manage external users.
+85
View File
@@ -0,0 +1,85 @@
# Tryton private mirror and customization operations
## Repository roles
- `tryton-do/tryton-mirror` is a private pull mirror of
`https://github.com/tryton/tryton`. Never develop or create custom references
in this repository.
- `tryton-do/tryton` preserves the upstream history and contains reviewed local
changes.
## Branches
- `8.0`: protected production branch for the 8.0 LTS series.
- `integration/8.0`: protected target for automated upstream proposals.
- `feature/*`: short-lived application changes.
- `translation/*`: short-lived translation changes.
- `8.2`: evaluation branch for the current non-LTS series; it is not deployed.
- `automation/upstream-8.0`: bot-managed, fast-forward-only proposal branch.
Production changes flow through `translation/*` or `feature/*` into
`integration/8.0`, then through a second reviewed pull request into `8.0`.
Direct pushes and force pushes to the protected branches are forbidden.
## Remotes for developers
```console
git remote add origin https://code.unpaismejor.org.do/tryton-do/tryton.git
git remote add mirror https://code.unpaismejor.org.do/tryton-do/tryton-mirror.git
git remote add upstream https://github.com/tryton/tryton.git
```
Gitea Actions uses its short-lived, repository-scoped `GITEA_TOKEN`. The
organization grants that token read-only cross-repository access to
`tryton-mirror`; no long-lived personal access token is stored. The GitHub
`upstream` remote is for diagnostics and disaster recovery.
## Translation workflow
The Tryton server owns `es_DO` as a standalone language; its database record
does not declare `es_419` (or any other locale) as parent. Complete Dominican
translations live beside each package in its regular `locale/es_DO.po`
catalog. The initial catalogs were bootstrapped from `es_419`, but they are now
independent and Dominican terminology is maintained directly in them. There is
no duplicated localization module or runtime dependency on one.
Weblate must push through a dedicated `translation/weblate-8.0` branch and a
reviewed pull request to `integration/8.0`; it must never push directly to a
protected branch. Gitea sends push notifications to
`https://translate.tryton.org.do/hooks/gitea/` so Weblate can pull source
changes promptly. CI validates every PO catalog and the server package before
the pull request can be merged.
When a catalog changes, update the database with:
```console
trytond-admin -d DATABASE --all --activate-dependencies
```
Activate Spanish (Dominican Republic) as a translatable language, then update
the activated modules to import any new `es_DO.po` catalogs delivered by
Weblate. Activating Spanish (Latin American) is not required for `es_DO`.
## Resolving an upstream conflict
1. Fetch `mirror/8.0` and the target branch.
2. Create a new `feature/upstream-conflict-YYYYMMDD` branch from
`integration/8.0`.
3. Merge `mirror/8.0` without rebasing published custom commits.
4. Resolve only the reported paths, run CI locally, and push the branch.
5. Open a reviewed pull request into `integration/8.0`.
6. Close the automation conflict issue only after the pull request is merged.
Never force-push an integration, production, or automation branch.
## Recovery
If the native mirror stops updating, keep `tryton` unchanged, inspect the
mirror synchronization error, and trigger a manual mirror update. If the
mirror repository is unrecoverable, create a new private pull mirror under a
temporary name, verify branches and tags against GitHub, and only then update
the workflow repository URL and cross-repository allowlist. Do not delete the
previous mirror until the replacement is verified.
If an integration proposal is wrong, close its pull request and delete only
its `automation/*` branch. Protected branches and their history remain intact.
-10
View File
@@ -1,10 +0,0 @@
version: 2
build:
os: ubuntu-22.04
tools:
python: "3"
python:
install:
- requirements: modules/account/doc/requirements-doc.txt
sphinx:
configuration: modules/account/doc/conf.py
+51
View File
@@ -1,4 +1,55 @@
Version 8.0.3 - 2026-07-15
--------------------------
* Bug fixes (see mercurial logs for details)
Version 8.0.2 - 2026-07-01
--------------------------
* Bug fixes (see mercurial logs for details)
Version 8.0.1 - 2026-06-18
--------------------------
* Bug fixes (see mercurial logs for details)
Version 8.0.0 - 2026-04-20
--------------------------
* Bug fixes (see mercurial logs for details)
* Add support for Python 3.14
* Remove support for Python 3.9
* Use flat balance for general ledger
* Add cron job to reconcile move lines
Version 7.8.0 - 2025-12-15
--------------------------
* Bug fixes (see mercurial logs for details)
Version 7.6.0 - 2025-04-28
--------------------------
* Bug fixes (see mercurial logs for details)
* Remove support for Python 3.8
* Add support for Python 3.13
* Use strict sequence to number moves
* Rename post number to number
* Remove number on move and its sequence on journal
Version 7.4.0 - 2024-11-04
--------------------------
* Bug fixes (see mercurial logs for details)
* Replace minimal by universal chart of account
* Allow copying move from closed period
* Replace Accounting Party by Accounting group
Version 7.2.0 - 2024-04-29
--------------------------
* Bug fixes (see mercurial logs for details)
* Convert recursive calls of reconcile accounts wizard into loop
* Remove active field on journal - period
* Allow modifying period dates with moves
Version 7.0.0 - 2023-10-30
--------------------------
* Bug fixes (see mercurial logs for details)
+4 -4
View File
@@ -1,7 +1,7 @@
Copyright (C) 2008-2023 Cédric Krier.
Copyright (C) 2008-2013 Bertrand Chenal.
Copyright (C) 2008-2023 B2CK SPRL.
Copyright (C) 2004-2008 Tiny SPRL.
Copyright (C) 2008-2026 Cédric Krier <cedric.krier@b2ck.com>
Copyright (C) 2008-2013 Bertrand Chenal <bertrand.chenal@b2ck.com>
Copyright (C) 2008-2026 B2CK SRL
Copyright (C) 2004-2008 Tiny SPRL
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-6
View File
@@ -1,6 +0,0 @@
include CHANGELOG
include COPYRIGHT
include LICENSE
include README.rst
include icons/LICENSE
graft doc
+6 -119
View File
@@ -1,124 +1,11 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import Pool
from . import (
account, company, configuration, fiscalyear, journal, move, move_template,
party, period, tax)
from .move import MoveLineMixin
__all__ = ['register', 'MoveLineMixin']
__all__ = ['MoveLineMixin']
def register():
Pool.register(
fiscalyear.FiscalYear,
fiscalyear.BalanceNonDeferralStart,
company.Company,
account.TypeTemplate,
account.Type,
account.AccountTemplate,
account.AccountTemplateTaxTemplate,
account.Account,
account.AccountParty,
account.AccountDeferral,
account.AccountTax,
account.AccountContext,
account.GeneralLedgerAccount,
account.GeneralLedgerAccountContext,
account.GeneralLedgerAccountParty,
account.GeneralLedgerLine,
account.GeneralLedgerLineContext,
account.BalanceSheetContext,
account.BalanceSheetComparisionContext,
account.IncomeStatementContext,
account.CreateChartStart,
account.CreateChartAccount,
account.CreateChartProperties,
account.UpdateChartStart,
account.UpdateChartSucceed,
account.AgedBalanceContext,
account.AgedBalance,
configuration.Configuration,
configuration.ConfigurationDefaultAccount,
configuration.DefaultTaxRule,
configuration.Sequence,
configuration.Journal,
period.Period,
journal.Journal,
journal.JournalSequence,
journal.JournalCashContext,
journal.JournalPeriod,
move.Move,
move.Reconciliation,
configuration.ConfigurationTaxRounding,
move.Line,
move.LineReceivablePayableContext,
move.WriteOff,
move.OpenJournalAsk,
move.ReconcileLinesWriteOff,
move.ReconcileStart,
move.ReconcileShow,
move.CancelMovesDefault,
move.GroupLinesStart,
move.RescheduleLinesStart,
move.RescheduleLinesPreview,
move.RescheduleLinesTerm,
move.DelegateLinesStart,
tax.TaxGroup,
tax.TaxCodeTemplate,
tax.TaxCode,
tax.TaxCodeLineTemplate,
tax.TaxCodeLine,
tax.TaxCodeContext,
tax.TaxTemplate,
tax.Tax,
tax.TaxLine,
tax.TaxRuleTemplate,
tax.TaxRule,
tax.TaxRuleLineTemplate,
tax.TaxRuleLine,
tax.TestTaxView,
tax.TestTaxViewResult,
move_template.MoveTemplate,
move_template.MoveTemplateKeyword,
move_template.MoveLineTemplate,
move_template.TaxLineTemplate,
move_template.CreateMoveTemplate,
move_template.CreateMoveKeywords,
party.Party,
party.PartyAccount,
fiscalyear.CreatePeriodsStart,
fiscalyear.RenewFiscalYearStart,
module='account', type_='model')
Pool.register(
account.OpenType,
fiscalyear.BalanceNonDeferral,
account.CreateChart,
account.UpdateChart,
account.OpenGeneralLedgerAccountParty,
move.OpenJournal,
move.OpenAccount,
move.ReconcileLines,
move.UnreconcileLines,
move.Reconcile,
move.CancelMoves,
move.GroupLines,
move.RescheduleLines,
move.DelegateLines,
move_template.CreateMove,
tax.OpenTaxCode,
tax.TestTax,
party.PartyReplace,
party.PartyErase,
fiscalyear.CreatePeriods,
fiscalyear.RenewFiscalYear,
module='account', type_='wizard')
Pool.register(
account.AccountTypeStatement,
account.GeneralLedger,
account.TrialBalance,
account.AgedBalanceReport,
move.GeneralJournal,
module='account', type_='report')
def __getattr__(name):
if name == 'MoveLineMixin':
from .move import MoveLineMixin
return MoveLineMixin
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
+461 -443
View File
File diff suppressed because it is too large Load Diff
+45 -43
View File
@@ -4,24 +4,16 @@ this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="res.group" id="group_account">
<field name="name">Account</field>
</record>
<record model="res.group" id="group_account_party">
<field name="name">Accounting Party</field>
<field name="parent" ref="group_account"/>
<field name="name">Accounting</field>
</record>
<record model="res.group" id="group_account_admin">
<field name="name">Account Administration</field>
<field name="name">Accounting Administration</field>
<field name="parent" ref="group_account"/>
</record>
<record model="res.user-res.group" id="user_admin_group_account">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_account"/>
</record>
<record model="res.user-res.group" id="user_admin_group_account_party">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_account_party"/>
</record>
<record model="res.user-res.group" id="user_admin_group_account_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_account_admin"/>
@@ -198,14 +190,14 @@ this repository contains the full copyright notices and license terms. -->
id="menu_account_type_list"/>
<record model="ir.model.access" id="access_account_type">
<field name="model" search="[('model', '=', 'account.account.type')]"/>
<field name="model">account.account.type</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_account_type_account_admin">
<field name="model" search="[('model', '=', 'account.account.type')]"/>
<field name="model">account.account.type</field>
<field name="group" ref="group_account_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
@@ -214,29 +206,32 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.model.field.access" id="access_account_type_amount">
<field name="field" search="[('model.model', '=', 'account.account.type'), ('name', '=', 'amount')]"/>
<field name="model">account.account.type</field>
<field name="field">amount</field>
<field name="perm_read" eval="False"/>
</record>
<record model="ir.model.field.access" id="access_account_type_amount_account">
<field name="field" search="[('model.model', '=', 'account.account.type'), ('name', '=', 'amount')]"/>
<field name="model">account.account.type</field>
<field name="field">amount</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
</record>
<record model="ir.model.field.access" id="access_account_type_amount_cmp">
<field name="field" search="[('model.model', '=', 'account.account.type'), ('name', '=', 'amount_cmp')]"/>
<field name="model">account.account.type</field>
<field name="field">amount_cmp</field>
<field name="perm_read" eval="False"/>
</record>
<record model="ir.model.field.access" id="access_account_type_amount_cmp_account">
<field name="field" search="[('model.model', '=', 'account.account.type'), ('name', '=', 'amount_cmp')]"/>
<field name="model">account.account.type</field>
<field name="field">amount_cmp</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
</record>
<record model="ir.rule.group" id="rule_group_account_type_companies">
<field name="name">User in companies</field>
<field name="model"
search="[('model', '=', 'account.account.type')]"/>
<field name="model">account.account.type</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_account_type_companies">
@@ -302,7 +297,7 @@ this repository contains the full copyright notices and license terms. -->
sequence="20"
id="menu_account_template_tree"/>
<record model="ir.model.access" id="access_account_template">
<field name="model" search="[('model', '=', 'account.account.template')]"/>
<field name="model">account.account.template</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
@@ -495,14 +490,14 @@ this repository contains the full copyright notices and license terms. -->
id="menu_account_tree_chart"/>
<record model="ir.model.access" id="access_account">
<field name="model" search="[('model', '=', 'account.account')]"/>
<field name="model">account.account</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_account_account_admin">
<field name="model" search="[('model', '=', 'account.account')]"/>
<field name="model">account.account</field>
<field name="group" ref="group_account_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
@@ -511,48 +506,56 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.model.field.access" id="access_account_balance">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'balance')]"/>
<field name="model">account.account</field>
<field name="field">balance</field>
<field name="perm_read" eval="False"/>
</record>
<record model="ir.model.field.access" id="access_account_balance_account">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'balance')]"/>
<field name="model">account.account</field>
<field name="field">balance</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
</record>
<record model="ir.model.field.access" id="access_account_credit">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'credit')]"/>
<field name="model">account.account</field>
<field name="field">credit</field>
<field name="perm_read" eval="False"/>
</record>
<record model="ir.model.field.access" id="access_account_credit_account">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'credit')]"/>
<field name="model">account.account</field>
<field name="field">credit</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
</record>
<record model="ir.model.field.access" id="access_account_debit">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'debit')]"/>
<field name="model">account.account</field>
<field name="field">debit</field>
<field name="perm_read" eval="False"/>
</record>
<record model="ir.model.field.access" id="access_account_debit_account">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'debit')]"/>
<field name="model">account.account</field>
<field name="field">debit</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
</record>
<record model="ir.model.field.access" id="access_account_amount_second_currency">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'amount_second_currency')]"/>
<field name="model">account.account</field>
<field name="field">amount_second_currency</field>
<field name="perm_read" eval="False"/>
</record>
<record model="ir.model.field.access" id="access_account_amount_second_currency_account">
<field name="field" search="[('model.model', '=', 'account.account'), ('name', '=', 'amount_second_currency')]"/>
<field name="model">account.account</field>
<field name="field">amount_second_currency</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
</record>
<record model="ir.rule.group" id="rule_group_account_companies">
<field name="name">User in companies</field>
<field name="model" search="[('model', '=', 'account.account')]"/>
<field name="model">account.account</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_account_companies">
@@ -639,14 +642,14 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.model.access" id="access_general_ledger_account">
<field name="model" search="[('model', '=', 'account.general_ledger.account')]"/>
<field name="model">account.general_ledger.account</field>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_general_ledger_account_account">
<field name="model" search="[('model', '=', 'account.general_ledger.account')]"/>
<field name="model">account.general_ledger.account</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
@@ -656,8 +659,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.rule.group" id="rule_group_general_ledger_account_companies">
<field name="name">User in companies</field>
<field name="model"
search="[('model', '=', 'account.general_ledger.account')]"/>
<field name="model">account.general_ledger.account</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_general_ledger_account_companies">
@@ -679,8 +681,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="context_model">account.general_ledger.account.context</field>
<field
name="domain"
eval="[If(Eval('active_ids', []) == [Eval('active_id')], ('account', '=', Eval('active_id')), ('account', 'in', Eval('active_ids')))]"
eval="[('account', 'in', Eval('active_ids', []))]"
pyson="1"/>
<field name="search_value" eval="[('line_count', '!=', 0)]" pyson="1"/>
</record>
<record model="ir.action.act_window.view" id="act_general_ledger_account_party_form_view1">
<field name="sequence" eval="10"/>
@@ -726,14 +729,14 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.model.access" id="access_general_ledger_account_party">
<field name="model" search="[('model', '=', 'account.general_ledger.account.party')]"/>
<field name="model">account.general_ledger.account.party</field>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_general_ledger_account_account_party">
<field name="model" search="[('model', '=', 'account.general_ledger.account.party')]"/>
<field name="model">account.general_ledger.account.party</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
@@ -743,7 +746,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.rule.group" id="rule_group_general_ledger_account_party_companies">
<field name="name">User in companies</field>
<field name="model" search="[('model', '=', 'account.general_ledger.account.party')]"/>
<field name="model">account.general_ledger.account.party</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_general_ledger_account_party_companies">
@@ -786,8 +789,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.rule.group" id="rule_group_general_ledger_line_companies">
<field name="name">User in companies</field>
<field name="model"
search="[('model', '=', 'account.general_ledger.line')]"/>
<field name="model">account.general_ledger.line</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_general_ledger_line_companies">
@@ -909,14 +911,14 @@ this repository contains the full copyright notices and license terms. -->
id="menu_aged_balance"/>
<record model="ir.model.access" id="access_aged_balance">
<field name="model" search="[('model', '=', 'account.aged_balance')]"/>
<field name="model">account.aged_balance</field>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_aged_balance_account">
<field name="model" search="[('model', '=', 'account.aged_balance')]"/>
<field name="model">account.aged_balance</field>
<field name="group" ref="group_account"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
@@ -926,7 +928,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.rule.group" id="rule_group_aged_balance_companies">
<field name="name">User in companies</field>
<field name="model" search="[('model', '=', 'account.aged_balance')]"/>
<field name="model">account.aged_balance</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_aged_balance_companies">
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More