Monday, September 15, 2025
16 changes · 19.0
New functionality added to Odoo
Odoo now supports creating compressed database-only backups without including the filestore, making large exports faster and easier to handle. Administrators can also choose the dump format from the command line, improving flexibility for backup workflows.
Original PR description
### Before this PR If you have a big database and you want to dump only the database in sql and compressed there is not a way on the database manager. Sometimes you can't use the pg_dump version because it needs that the postgres version should be the same ### After this PR You can dump a zipped format of database without the filestore --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enhancements to existing features
Product descriptions in the shopping cart are no longer shortened, so customers can see all important details before checkout. This reduces the risk of missing key information that may affect purchasing decisions.
Original PR description
In the `/cart` we were truncating the description to avoid it being to long. The issue is that the truncation might happen on a very important information in the description. Thus we decided to take the tradeoff and always show the full description. task-5026288 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Manufacturing orders now prefill the first serial number from the product's custom lot/serial setting when generating serial numbers. Duplicated manufacturing orders also continue from the correct next serial number instead of restarting at 1, reducing manual corrections and duplicate tracking risks.
Original PR description
Back port of https://github.com/odoo/odoo/pull/226046 intended to target 19.0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Adds US-specific Profit & Loss and Balance Sheet reports that follow GAAP expectations instead of the generic IFRS-based format. This helps US companies produce financial statements that better match local accounting standards, with supporting test updates to keep reporting checks stable.
Original PR description
The generic reports are based on International Financial Reporting Standards (IFRS) whereas the US expects reports based on Generally Accepted Accounting Principles (GAAP). This also includes some changes to the account_reports tests to avoid _init_options_variants() from automatically picking these new reports in the tour tests. task-5068369
Stock forecasts now calculate and show subscription-related quantities and orders per product. This gives teams a clearer view of expected demand from subscriptions, helping them plan inventory more accurately.
Original PR description
Update the stock forecast backend and frontend to support per-product computation and display of subscription quantities and orders. Task [4763124](https://www.odoo.com/odoo/project/966/tasks/4763124) odoo/odoo#212774
This fix prevents Indonesian e-Faktur downloads from crashing when an invoice line has more than one regular tax applied. Users can complete compliant tax document downloads more reliably instead of encountering an error during invoice processing.
Original PR description
The system crashes with an error when a user tries to `download the e-Faktur` document. **Steps to produce:-** - Install `Accounting` and switch to `ID Company`(with demo data). - Create a `new…
The system crashes with an error when a user tries to `download the e-Faktur` document.
**Steps to produce:-**
- Install `Accounting` and switch to `ID Company`(with demo data).
- Create a `new invoice` and select customer as `ID Company`.
- Add the product and in `taxes add 11% and 0% (2 non-luxury taxes)` and confirm the invoice.
- Click on gear icon and click on `Download e-Faktur` button.
**Error:-**
`ValueError: ValueError('Expected singleton: account.tax(5, 15)') while
evaluating 'action = records.download_efaktur()'`
**Root cause:-**
- When more than one non-luxury tax is applied and the e-Faktur document is downloading, the code at [1] expects a single tax record, but multiple non-luxury taxes are found.
**Solution:-**
- Since luxury tax is already excluded from the regular tax computation at [2], I think we can directly sum all non-luxury taxes.
[1]: https://github.com/odoo/odoo/blob/52aa6231130ea165fdb44e6370ec3e396b7603cc/addons/l10n_id_efaktur_coretax/models/account_move_line.py#L52
[2]: https://github.com/odoo/odoo/blob/52aa6231130ea165fdb44e6370ec3e396b7603cc/addons/l10n_id_efaktur_coretax/models/account_move_line.py#L24-L25
**sentry-6837559933**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#224419Manufacturing orders now prefill the first serial number from the product’s custom lot or serial value when generating serial numbers. Duplicated manufacturing orders also continue from the correct next serial number instead of restarting, reducing manual corrections and duplicate serial risks.
Original PR description
Steps to reproduce Bug #1: - Add Custom Lot/Serial to a product - Create a manufactoring order with a quantity > 1 - Confirm and Generate Serial Problem: First SN is not prefilled by the Custom Lot/Serial added. Steps to reproduce Bug #2: - Create a duplicate from the previous MO - Generate Serial Numbers Problem: First SN is not updated and generates serial numbers starting with "1" again rather than incrementing the previous serial number. Note: On adding new serial numbers different than the custom (changing the prefilled First SN), it will only be applied on that specfic MO only. To apply it to any new MO, it must be added to the Custom Lot/Serial field in the product form. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Payroll salary input default values are now applied when users select salary rules on employee records or payslips. This helps payroll teams avoid missing or incorrect input amounts and reduces manual corrections during payroll processing.
Original PR description
## Steps to reproduce 1. Make a new salary rule with condition based on 'salary input'. 2. Enable 'Input on' employee and payslip both and set a default value. 3. Go to employees 'Payroll tab' and 'add inputs', then select the rule. 4. Similary in 'Payslip' on 'Salary inputs' tab, 'add inputs' and select the rule. ## Issue - The default values on the employee and payslips were not being reflected on selection of the rule. ## Fix - Modified '_update_payroll_properties'. It now fetches active_id and updates properties based on the default values of input rules. - Updated '_compute_payslip_properties'. Ensures that payslips without common payroll properties fall back to the default values of the related input rules. task-5072646
Fixes Swiss ISO20022 payment exports so bank clearing numbers are placed in the expected XML sub-field. This helps generated payment files better match banking standards and reduces the risk of rejection during payment processing.
Original PR description
### Steps to reproduce: - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor…
### Steps to reproduce: - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor bill for a Swiss partner - Pay with "Swiss ISO20022" - Create a batch payment with that payment and validate - In the XML the field `ClrSysMmbId` contains the clearing number, but it should be in a nested field ([src](https://www.mx-message.com/m/pacs-010-001-05/FIDrctDbt/CdtInstr/Cdtr/FinInstnId/ClrSysMmbId)) ### Cause: The code directly inputs the value of `clearing_number` in `ClrSysMmbId`. ### Solution: Add `MmbId` to contain the clearing number. ### Note: The field `MmbId` when alone is supposed to contain the country's payment system prefix and the clearing number. This commit only input the value of the field `clearing_number` in `MmbId`, so it may be invalid, but at least the architecture is valid. See [this link](https://knowledge.xmldation.com/support/iso20022/general_rules/clearing_codes) for the documentation of `ClrSysMmbId`. This [commit](https://github.com/odoo/enterprise/commit/c277ffa81644b79d95e67a70f7170f5f39c30898#diff-568a46f66108a66d58d845c0e1e00b22db21507ac52576f75b83398112ad10f5) implemented the correct way to set up `ClrSysMmbId` for the Swedish localization. To be always valid, we would need to implement this on all localizations. opw-4872507 Forward-Port-Of: odoo/enterprise#94460
This fixes an issue where tapping Send in Odoo's iOS progressive web app could sometimes fail while writing messages in Discuss or chatter. The message composer no longer shifts at the moment of tapping, making message sending more dependable for mobile users.
Original PR description
Before this commit, when using IOS PWA, pressing 'Send' button of in composer in discuss or chatter would sometimes not register the send. This happens because in IOS PWA, the composer has a bottom margin as this is close to iOS persistent swipe bar. However, the margin should not be present when there's the soft-keyboard. Because of this dynamic margin based on input focus, when composing textual message and pressing "Send" button, the textarea looses focus and a fraction of second the margin-bottom is increased and moves the "Send" button. This leads to mis-clicking the "Send" button. This commit removes the margin-bottom rule on non-focusin of textarea with iOS PWA. The composer is close to swipe bar so that's not as elegant as before, but at least this doesn't add the problem of non- working "Send" button. opw-5028809 Forward-Port-Of: odoo/odoo#226881 Forward-Port-Of: odoo/odoo#226546
The time off request dialog now shows the Submit Request button when no warning message is available. This lets employees continue creating absence requests in affected payroll setups while keeping the normal validation after submission.
Original PR description
**Steps to reproduce** 1. Install l10n_ch_hr_payroll_elm_transmission 2. Go to an employee's profile 3. Click on "Absences" smart button 4. Create a new Time Off request Issue: the form view dialog is missing a button to confirm the request. Cause: the dashboard warning message is not part of the l10n_ch_hr_payroll_elm_transmission view. Solution: display the "Submit Request" button if we don't have any dashboard warning message. There will still be a validation after the request is submitted. opw-4972467 Forward-Port-Of: odoo/odoo#221427
The bank reconciliation process now better matches imported bank transactions with payments created in Odoo, even when payment provider memos differ slightly. This helps reduce missed matches and keeps reconciliation smoother for accounting teams.
Original PR description
Commit 4c23de148eb3689842a48df81a5ced772c214861 introduced another query to look for outstanding payments to match in the bank reco widget, aiming to reduce the number of wrong matches found by the algorithm. Doing so, limiting the match between account.payment initiated in odoo and their matching bank transaction imported (through stripe for example), on an exact match of the memo seemed like a good idea. But for obscure reasons, the memo we're sending is not guaranteed to be found back, depending on the payment provider and the import flow. Also, for backward compatibility, it now appears important to allow the match to be on a part of the memo, like we used to do. So we're back on a solution that splits the memo using ' - '. Forward-Port-Of: odoo/enterprise#93237
This fix ensures the point of sale receives cancellation updates from Worldline payment terminals even after the browser page is refreshed. This prevents orders from getting stuck during cancelled card payments and adds clearer terminal error messages for staff.
Original PR description
This PR fixes a bug where the point of sale didn't receive notifications from the Worldline payment terminal for the cancellations if the browser webpage was refreshed How to reproduce: 1. Open a POS session with Worldline terminal 2. Send a transaction to the terminal 3. Refresh the browser webpage before paying 4. Click on "Cancel" on the POS screen --> your order will be stuck and never receive the confirmation This PR removes the check for the iot longpolling action identifier which changes on refresh of the webpage + adds more error messages for Worldline terminals Related PR in v17 -> saas-18.2: https://github.com/odoo/enterprise/pull/94635 task-5075860 Forward-Port-Of: odoo/enterprise#94629
This fixes imported sales orders so lines for products that cannot be matched no longer have their price reset to zero. It helps preserve the original RFQ/order values when exchanging documents between databases with different product catalogs.
Original PR description
Steps: - Install Purchase in first db and sale in second db. - Ensure RFQ contain product which does not exist in second db. - Export RFQ and import it in sale order view. Issue: - Price is always 0 on sol if it didn't find related product. Cause: - In [this] PR we always recompute price on all sol instead sol with product Fix: - Recompute price and discount only on sol with product. [this]: https://github.com/odoo/odoo/pull/190310 Forward-Port-Of: odoo/odoo#226859
Quicksign now behaves consistently with regular signing by showing the completed signature in document previews and recording the signing activity in the related discussion history. This helps users trust that signed documents are complete and keeps document records easier to audit.
Original PR description
### Issues: - PDF preview mismatch: - Regular sign updates the preview in Documents with the actual signature. - Quicksign only shows placeholders in the preview. - Missing chatter logs: - Regular sign from chatter creates a 'Signature Request' log and stores the signed certificate in Documents. - Quicksign skips chatter logs and only displays in Sign app. ### Cause: - Request is fully signed but the sign request item state is not set as completed that's why the value was not shown. - The function to sign and create log is not called when reference doc is set. ### Fix: - Sign request item state is set to completed. - Called the function to throw log note when the reference doc is set. ### Impact: - Quicksign now provides consistent PDF previews. - Chatter history and document logging are aligned between regular signing and quicksign. --- task-5082925
This fixes calendar quick editing so that when a meeting start time is changed, the end time is recalculated using the intended duration. It prevents appointment lengths from being unexpectedly recomputed or changed during quick creation and editing.
Original PR description
`CalendarEvent._compute_stop` relies on "duration" being somehow available when "start" is changed. In quick-create, where the duration is not stored we need to "store" it in the front-end between onchange calls. For this reason "duration" needs to be force_save and invisible on the view so that it is not recomputed each time. Which otherwise defeats the purpose of the feature. In appointment duration is also used in default_get hence fetching a default value for it by having it in view actually changes the behavior of the default values. Though this can be mitigated in other, more reliable ways, this fix is sufficient for that case too. The field was removed during view refactoring in odoo/enterprise@c8eb4fe4ba9938b1c7e07034e6ca7c08a0d6f215 and 81e51985f2e01ee3ff115477ab324e2ad75a1b77 task-5081903