Daily updates from Odoo
Monday, February 2, 2026
25 changes · 18.0
Resolved issues and error corrections
This update resolves a crash that occurred when users selected taxes within journal item dialogs on mobile. The fix replaces a problematic widget with a standard one, ensuring tax changes are saved correctly and preventing the web client from freezing. This improves stability for users entering accounting data.
Original PR description
**Steps to reproduce:** * Install the **Accounting** module. * Open a **Journal Entry** in mobile view. * Add a **Journal Item**, opening it in a form dialog. * Select a tax in the **Taxes Applied**…
**Steps to reproduce:** * Install the **Accounting** module. * Open a **Journal Entry** in mobile view. * Add a **Journal Item**, opening it in a form dialog. * Select a tax in the **Taxes Applied** field. * Click on the **Save and close** button. **Observed behavior:** * The web client crashes with `TypeError: Cannot read properties of undefined (reading 'resId')`. **Cause:** * The `autosave_many2many_tags` widget triggers `model.root.save()` immediately when a tag is selected. * When executing this save from within a transient dialog (common in mobile views), the client fails to correctly handle the record reload/synchronization leading to a crash when accessing `resId`. **Fix:** * Replace the autosave widget with the standard `many2many_tags` widget for **Journal Items** for form. * Tax changes are now kept locally in the dialog and saved only when the user explicitly saves and closes it. **Note:** * The crash happens when `autosave_many2many_tags` calls `model.root.save()` on a **new** `account.move` from within a dialog. * In QUnit tests, the mock server (`mockWebSave`) [1](https://github.com/odoo/odoo/blob/ca4d74c2a5d749ff8d41cd2fff80a73ba550a843/addons/web/static/tests/helpers/mock_server.js#L627). which creates records [2.](https://github.com/odoo/odoo/blob/ca4d74c2a5d749ff8d41cd2fff80a73ba550a843/addons/web/static/tests/helpers/mock_server.js#L1936) in-memory and does not trigger form reloads or component destruction. * As a result, the crash cannot be reproduced in tests. opw-5497342 Forward-Port-Of: odoo/odoo#246084
This update resolves a warning in the Irish tax module (l10n_ie) by moving the update of the Chart of Accounts to an 'end-script'. This ensures the update runs after all Odoo modules have loaded, preventing the warning and maintaining proper system functionality. This change improves stability and avoids potential issues with module loading.
Original PR description
We faced a warning because this update doing a try_loading is called in `post-` scripts (after the module is loaded) and not in `end-` scripts (when all modules are loaded). All l10n_* modules were changed in this PR: https://github.com/odoo/odoo/pull/183359 Regarding the changes in this PR related to Registry: https://github.com/odoo/odoo/pull/186467 see: https://github.com/odoo/odoo/pull/222186 upg-3828301 **Reference Image** <img width="1769" height="39" alt="2026-01-28_18-44" src="https://github.com/user-attachments/assets/8aa5f213-b150-403b-b2a1-0bc9ed4a4ccc" /> Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix resolves an issue where a Sales Order Item was unexpectedly removed from a timesheet after adding a timesheet line to a helpdesk ticket. Previously, the system incorrectly cleared the Sales Order Item field. Now, the Sales Order Item from the quotation is correctly retained within the timesheet, ensuring accurate billing for timesheeted services.
Original PR description
_ ## Short functional explanation of the error Let's say a customer has made 2 sales order of 2 different serives: one service is prepaid, the other one is billed based on timesheets. When we create…
_ ## Short functional explanation of the error Let's say a customer has made 2 sales order of 2 different serives: one service is prepaid, the other one is billed based on timesheets. When we create a ticket related to this customer in the helpdesk app, the ticket automatically fills the Sales Order Item field with the prepaid service. If we remove this Sales Order Item, create a timesheet in which we set the Sales Order Item to be the timesheeted service, and press save, the Sales Order Item of the timesheet will disappear. ## Reproduction Steps 1. Create 2 products: one service based on timesheets and one service prepaid. Make sure that they create an empty project on order. 2. Create 2 quotations for the same partner: one that contains the first product you created and a second one containing the second product. Click on confirm. 3. Go to Helpdesk > Configuration > Helpdesk teams. Click on one team and under Track and Bill time, enable both Timesheets and Time Billing. 4. Create a Helpdesk ticket for the team you setup. Under customer, enter the name of the partner in the quotations. 5. Click on the ticket. The quotation related to the prepaid service should appear as the field Sales Order item on the ticket. Remove it, click on the Timesheet tab, and add a line in which, for the Sales Order Item field of the timesheet, you'd enter the quotation for the timesheeted service. 6. Hit save. ## Expected behavior The quotation entered as Sales Order Item field in the timesheet persists, while the Sales Order Item field of the ticket stays empty. ## Unexpected Behavior the Sales Order Item field in the timesheet tab disappears. ## Origin of the issue The field is_so_line_edited was kept at false as the widget used to update its value wasn't used in the view. _ opw-5384256
This update resolves an issue where users couldn't see all available Starshipit delivery services. The fix ensures Odoo sends complete order details (address, weight) to Starshipit, allowing users to select the correct and full list of services during setup. This improves the user experience and accuracy of delivery options.
Original PR description
Current behaviour: Users are unable to select certain Starshipit delivery services. Delivery methods are configured in Odoo before address or package data is available. Since Starshipit requires this…
Current behaviour: Users are unable to select certain Starshipit delivery services. Delivery methods are configured in Odoo before address or package data is available. Since Starshipit requires this data to determine availability, it returns an incomplete list during setup. Expected behaviour: Users should be able to view and select from the complete list of valid delivery services based on the actual Sales Order details (address, weight, and volume). Steps to reproduce: 1. Create new delivery method 2. Configure Starshipit API credentials. 3. Attempt to select a service. 4. Observe that not all service is shown from the available options. Cause of the issue: Starshipit filters services based on sender, receiver, and package info. Odoo requests the service list during initial configuration without this context, resulting in an incomplete list of methods. Fix: Introduce a mechanism in the Sales Order flow to add delivery methods. Send the complete shipment details (addresses, weight) to Starshipit to retrieve the accurate list of services and allow the user to select them.
This update resolves a payment error occurring when using the Avatax integration with Point of Sale. The issue stemmed from an outdated method that no longer existed, causing a crash during order settlement. The fix permanently removes this unused method, ensuring stable payment processing.
Original PR description
Step to reproduce: - configure pos for Avatax from settings - open pos and settle a order - notice a error message on payment page Cause: - error is due to usage of `replaceDataByKey` which is removed in [1] [1] https://github.com/odoo/odoo/commit/3e94fe90ded58d498f0098cd9ed8679cbe500b8f Fix: - we removed the method as now we do not rely on it. opw-5089351 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a problem with how service products are packaged for EDI reporting in Kenya. The previous packaging type reference was incorrect and causing errors. This fix ensures service products are properly packaged according to local regulations, preventing potential reporting issues.
Original PR description
Update the xmlid for the default packaging type for service products, the previous one `l10n_ke_edi_oscu.packaging_type_ou` seems to have never existed. opw-5220129 Forward-Port-Of: odoo/enterprise#105905
This update resolves a minor rounding error (0.01 cent) that occurred when processing POS downpayments with tax. The fix ensures accurate invoice creation by adjusting how calculations are handled, specifically using higher precision and a single rounding step. This prevents potential discrepancies in financial reporting.
Original PR description
When applying a downpayment in POS with tax-included prices, a rounding error of 0.01 cent could occur, preventing invoice creation. For example, with an 8% tax and a downpayment of exactly 2,117.00:…
When applying a downpayment in POS with tax-included prices, a rounding error of 0.01 cent could occur, preventing invoice creation. For example, with an 8% tax and a downpayment of exactly 2,117.00: - Calculation: 2117 ÷ 1.08 = 1960.185 → rounds to 1960.19 - Recalculation: 1960.19 × 1.08 = 2117.005 → rounds to 2117.01 - Result: 0.01 cent discrepancy Root Cause: ----------- The issue stems from cascading rounding errors when using 'round_per_line' method with standard product price precision (typically 2 decimals). Each intermediate calculation introduces a small rounding error that accumulates. Solution: --------- Apply two specific fixes for downpayment products only: 1. Use higher precision (6 decimals) instead of standard product price precision to maintain accuracy through the calculation chain 2. Force 'round_globally' rounding method instead of 'round_per_line' to ensure rounding happens only once at the final step, not at each intermediate calculation 3. Use raw (unrounded) amounts in tax calculations to preserve full precision until final rounding opw-5040722
This update fixes an issue where the 'Send As Message' button in Knowledge Clipboards was inserting text after the user's signature in emails. The change ensures the clipboard text is inserted correctly before the signature, streamlining the email composition process for users. This improves usability and reduces manual adjustments.
Original PR description
When a user is viewing a page, clicks on the Knowledge Book icon, opens an article, and selects the "Send As Message" button in a Knowledge Clipboard block, the macro system performs several actions:…
When a user is viewing a page, clicks on the Knowledge Book icon, opens an article, and selects the "Send As Message" button in a Knowledge Clipboard block, the macro system performs several actions: it restores the initial view, opens the full mail composer, and inserts the clipboard block's text at the very end of the editor. Recent updates introduced automatic inclusion of the user's signature in the email body when the full mail composer is opened. As a result, the clipboard text is inserted after the user signature, which is undesirable because users must manually adjust the message to position the signature correctly. To insert text before the user signature but after the user text, the clipboard macro will now trigger a "click" event on the button opening the full mail composer and set on that event the text to insert. The chatter will then read that value and insert the text at the right place. Task-4428445 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug that occurred when users copied and then undid planning slots. Specifically, an error would appear if a copied slot was subsequently deleted. The fix ensures the system verifies a record exists before attempting to delete it, preventing the error and improving stability.
Original PR description
### Steps to reproduce: - Install Planning - Navigate to the gantt view for planning slots - Copy previous week's slots - Delete one of the newly copied records - Undo the copying action - Notice an Error is raised that a record doesn't exist ### Cause: When undoing the copy process we unlink all the newly created records but if the user has already deleted one of them it will trigger an error that this record doesn't exist and it has already been deleted ### Fix: We check the existence of the records before deleting them. opw-5490327
This update addresses an issue related to how Odoo handles negative lines in EDI transactions. It backports essential functions from a recent release to ensure accurate processing of these lines, preventing potential errors and disruptions in financial reporting. This improves the reliability of our EDI integrations.
Original PR description
This PR backport helpers functions from 18.3 used to dispatch negatives lines (for EDI refusing negative lines). It also backport a fix on _split_base_line(). opw-5382423
This update resolves rounding issues that were causing Mexican EDI invoices to be rejected. The changes include adjustments to how discounts and taxes are calculated, particularly when combining multiple invoices, and using more precise numerical values to avoid discrepancies. This ensures invoices comply with Mexican regulations and can be successfully processed.
Original PR description
l10n_mx_edi* = l10n_mx_edi, l10n_mx_edi_pos, l10n_mx_edi_extended **STEP TO REPRODUCE** 1. Create a invoice with: - product price = 72.89 - discount = 10% - tax = 16% 2. Duplicate the invoice until…
l10n_mx_edi* = l10n_mx_edi, l10n_mx_edi_pos, l10n_mx_edi_extended
**STEP TO REPRODUCE**
1. Create a invoice with:
- product price = 72.89
- discount = 10%
- tax = 16%
2. Duplicate the invoice until you have 5 of them.
3. Create a global invoice with the 5 invoices, and send it.
4. The invoice will be refused by the EDI due to rounding issue.
This PR is a backport of multiples fixes done in 18.3 in which all rounding errors are fixed.
Each of them iterate upon the previous one, so they are all needed. The most important changes in thoses fixes are:
- for global invoices, deduce the discount on the base line instead of creating a 'descuento' (to avoid any problem with rounding when combining multiples invoices).
- changes in how the negative lines are dispatched.
- using raw values for 'conceptos' and 'impuestos' (5 digit precision) and changing how we compute things to solve rounding issue.
Tests files are modified accordingly, you can launch the tests with the external flag (need to be set in tests/common.py).
Backported PR (non-exhaustive):
https://github.com/odoo/enterprise/pull/92727
https://github.com/odoo/enterprise/pull/99395
https://github.com/odoo/enterprise/pull/90434
opw-5382423This update corrects a bug in the task scheduling feature where tasks were incorrectly planned with shorter durations. Specifically, when a task started on November 25, 2025, it was only scheduled for November 25-26 instead of extending into December. The fix removes previously used scheduling intervals to ensure accurate hour allocation.
Original PR description
Steps to Reproduce: 1- Auto-plan a task starting on 25 November 2025 with 40 allocated hours. 2- The computed end date becomes 26 November, instead of extending into early December. => As a result, the allocated period is shorter than the required hours. Source: When selecting 25/11/2025 as the start date, the system tries to schedule the task within the remaining days of November (25–28). However, these four days are not enough to cover 40 hours. The system then searches for available intervals in the next month. But the intervals from November are still kept in the list, so when the algorithm iterates again, it reuses the previously consumed intervals (25 and 26). This causes the scheduler to allocate the remaining hours to those same days, leading to an incorrect result where the task spans only 25–26 November, instead of continuing from 1 December. Solution: Remove already-used intervals before recomputing the schedule. opw-5364327
This update resolves a visual inconsistency where the background color of nested columns within tabs was being incorrectly overridden. The fix specifically targets a CSS rule that was too broad, now ensuring that background colors are applied correctly to the intended columns. This improves the overall appearance and usability of the tab interface.
Original PR description
Steps to reproduce: =================== 1- Drop the block tab snippet 2- Inside one of the tab panes, drop a Columns snippet. 3- Select background_color for one of the columns 4- Change tab style to…
Steps to reproduce: =================== 1- Drop the block tab snippet 2- Inside one of the tab panes, drop a Columns snippet. 3- Select background_color for one of the columns 4- Change tab style to tab -> The background color of the inner column is overridden. Cause: ====== When the "Tabs" snippet style is set, a `.card` class is added to its container (See [1]) A generic CSS rule, intended to style these tabs, was targeting any `.card` element with a `.card-body` child. (See [2]) However, the Columns snippet also uses a `.card > .card-body` structure (distinguished by a `data-vxml` attribute). This caused the overly broad tab-styling rule to incorrectly cascade and override the background color of the nested column. Solution ======== The SCSS selector has been made more specific so that works if `card-body` class doesn't have any parent class with class `card` and has attribute `data-vxml` [1]: https://github.com/odoo/odoo/blob/4cb3ffc09507fdfdb1aeabb70b2c93105f992700/addons/website/static/src/snippets/s_tabs/options.js#L149 [2]: https://github.com/odoo/odoo/blob/4cb3ffc09507fdfdb1aeabb70b2c93105f992700/addons/web/static/src/scss/bootstrap_review_frontend.scss#L55 opw-5394480 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue identified by our code quality tools. A method was defined twice within the Odoo accounting system, which caused a potential error. This change ensures the system functions correctly and efficiently, preventing future problems.
Original PR description
This commit removes the duplicated method definition for `_get_l10n_hr_fiscal_user_id_domain()` in the account_move model. Reported by pylint 4. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent code update caused automated test builds to fail due to a logging warning. This fix addresses the issue by creating a helper method to manage test data, preventing the repeated triggering of the warning. This ensures the test environment remains stable.
Original PR description
The runbot builds are currently failing after the recent merge of commit [1] due to a triggered documents logger warning. In commit [1], `cls.attachment_txt` is created with invalid `datas` in…
The runbot builds are currently failing after the recent merge of commit [1] due to a triggered documents logger warning. In commit [1], `cls.attachment_txt` is created with invalid `datas` in `setUpClass`, which triggers an error and raises a log warning at code line [2]. We already added `mute_logger` to suppress this log, but it does not work due to caching behavior in setUpClass. The `setUp` method of the `TransactionCase` test class attempts to flush all pending data (see code reference [3]). During this flush, it recomputes the values of `cls.attachment_txt`, which triggers the same logger warning again. Since this occurs outside the mute_logger context, the log is not suppressed, resulting in the runbot failure. This commit fixes the issue by introducing a helper method to create and return `attachment_txt` for use in the test methods. [1]: https://github.com/odoo/enterprise/commit/d4ecf6c75bff3fc29a95c40f86528c6b10870e12 [2]: https://github.com/odoo/enterprise/blob/f3e2de6bae7573ad61429a55ff3769ba7fab58ea/documents/models/documents_document.py#L1355-L1356 [3]: https://github.com/odoo/odoo/blob/8e60084924d390632934b5a9bd82a6954d6484de/odoo/tests/common.py#L1038 runbot-238369
This update fixes a translation issue where warnings on Swiss payroll slips didn't display translated field names. The change ensures that all warning messages are correctly translated into French (CH), improving the user experience for French-speaking Swiss users. This resolves a reported bug impacting data accuracy and usability.
Original PR description
The warnings that appear on a payslip when the employee's form misses information are not fully translated Steps to reproduce: 1. Install module l10n_ch_hr_payroll 2. Switch to "My Swiss Company" and change language to French (CH) 3. Open app "Paie" and create a new employee (only add a name) 4. Click on "Contrats" in the stat button and create a new contract for the employee (only add a name), save it and set it as "En cours" in the status bar 5. Go to "Fiches de paie" > "Toutes les fiches de paie" and create a new payslip 6. Add the newly created employee to the payslip 7. The warnings in the form displaying the missing fields from the employee form do not translate the name of the missing fields Solution: Use `get_description` to get the translated name of the missing fields opw-5403634 Forward-Port-Of: odoo/enterprise#104499
This pull request reverts a recent change that caused public holidays to not display correctly on work schedules without a company assigned. This resulted in time off requests including incorrect holiday durations. The fix is being reverted to allow for a more targeted resolution of the underlying issue in the project module, minimizing impact on HR and Resource modules.
Original PR description
Revert of https://github.com/odoo/odoo/commit/a95af8b78a94a795e05a0adf299837adc0ef2117 and https://github.com/odoo/odoo/commit/f4f9ecb3e4801b3d382abc24c478fe5e533c9bf8 **Steps to reproduce** 1.…
Revert of https://github.com/odoo/odoo/commit/a95af8b78a94a795e05a0adf299837adc0ef2117 and
https://github.com/odoo/odoo/commit/f4f9ecb3e4801b3d382abc24c478fe5e533c9bf8
**Steps to reproduce**
1. Remove the company of the Working Schedule (needs to be done in
a multi-company environment from the UI) used by an employee.
2. Using the company of this employee, create a Public Holiday
(for the employee's schedule or all schedules).
Issues:
- the public holiday doesn't appear in the Time Off dashboard
- when taking a time off on that day, the public holiday is
included in the duration
**Cause**
After the fix in https://github.com/odoo/odoo/commit/a95af8b78a94a795e05a0adf299837adc0ef2117 , it will lead
to a search domain for public holidays of `('company_id', 'in', [False])`
when the working schedule has no company, ignoring any public
holidays with a company set. This is especially problematic since the
company of the public holiday is always forced.
https://github.com/odoo/odoo/blob/7bce5f3f95429a4d4ba034a66c350ee2a5868567/addons/resource/models/resource_calendar_leaves.py#L49-L51
**Solution**
Since the intent of the original fix https://github.com/odoo/odoo/commit/f4f9ecb3e4801b3d382abc24c478fe5e533c9bf8
was to correct an issue related to the computation of some `project.task`
fields calling a resource method (`get_work_duration_data`), we can revert
the fix and later fix the original issue directly in `project`, without
impacting `hr`/`resource` modules.
opw-5496999
opw-5401425This update fixes an issue where subscription invoices were being generated prematurely when a note or section was added to the subscription. The fix ensures that invoice dates align with the expected end-of-period billing, regardless of whether a note is present. This improves invoice accuracy and consistency for our subscription customers.
Original PR description
**Steps to reproduce** - Have a subscription service product with invoicing policy set to "Based on delivered quantity (manual)". - Create a new monhtly subscription with this product and add a section or a note. - Confirm the subscription. Actual: next invoice date is today. Expected: same as without section/note, next invoice date should be at end of the period. **Cause** `_is_postpaid_line` should only be called on actual product lines. Related: https://github.com/odoo/enterprise/commit/d8a7f7cc2d9d11e42ed24db1b0f7a3c08c7fac1c opw-5478394
This update resolves a technical issue within the Mexican EDI module for Point of Sale. Previously, users experienced widget warnings due to missing document state components. This fix ensures proper loading of these components, eliminating the warnings and improving the user experience.
Original PR description
When using the Mexican EDI module in Point of Sale, the document state components were not being loaded properly, leading to missing widget warning. runbotID: 238038
This update resolves an issue preventing single-tenant Odoo apps using Microsoft Calendar from properly renewing their access tokens. The fix ensures Odoo uses the correct, tenant-specific Microsoft endpoint, allowing for reliable calendar synchronization with Outlook. This improves functionality for businesses utilizing single-tenant Azure environments.
Original PR description
Single-tenant Azure applications could synchronize calendar with Outlook, but refresh token renewal fail. Odoo was always using the default Microsoft token endpoint instead of the tenant-specific endpoint required for single-tenant apps. Steps to reproduce: - Create a single-tenant app in the Azure portal - Configure Odoo Microsoft Calendar with this app - Set `microsoft_account.auth_endpoint` and `microsoft_account.token_endpoint` system parameters with the specific endpoints using the tenant ID - Open the Calendar app and sync with Outlook - Wait for access token expiration - Refresh token request fails This commit fixes the issue by using the token endpoint stored in the microsoft_account.token_endpoint system parameter when requesting a refresh token. Forward-Port-Of: odoo/odoo#244371
This update resolves a problem where EU VAT numbers were not being saved correctly during address updates in the Odoo portal. The fix corrects a conversion process that was causing validation errors. This ensures accurate VAT handling for European customers.
Original PR description
### Issue: EU vat fix cause address submission to fail. #### Steps to reproduce: 1- `base_vat` should be installed. 2- In portal contact, set the country to BE and VAT to `0477472701`. 3- Create an invoice for portal user. 4- Navigate to shop and add a product to cart, then checkout. 5- Edit address. 6- After filling, click on save address. Even though the VAT is not modified in form, and it is not modifiable the address fails to save with error: `Changing VAT Number is not allowed.` ### Cause: After address submission The vat is fixed in here: https://github.com/odoo/odoo/blob/82a2c5305d65027ffb263f90c4e00f7e95f98b05/addons/website_sale/controllers/main.py#L1396-L1406 This converts given vat `0477472701` to `BE0477472701`. Which makes `address_values['vat'] != partner_sudo.vat`: https://github.com/odoo/odoo/blob/82a2c5305d65027ffb263f90c4e00f7e95f98b05/addons/website_sale/controllers/main.py#L1472-L1482 opw-5437586
This update resolves an issue where subscriptions with zero-quantity lines would incorrectly set the next invoice date to the subscription start date. The fix ensures accurate invoice date calculation, even when subscriptions have a mix of positive and negative quantities, preventing incorrect invoicing.
Original PR description
### Issue: When creating a subscription with several lines whose quantities add up to zero, the next invoice date is not updated and set to the start date. ### Steps to reproduce: - Install…
### Issue: When creating a subscription with several lines whose quantities add up to zero, the next invoice date is not updated and set to the start date. ### Steps to reproduce: - Install 'sale_subscription' - Create a new Subscription with two lines and a tart data several months in the past - One with a quantity of 1 and a higher price - The other with a quantity of -1 - It can be the same service product with invoicing based on ordered quantity - Confirm the Subscription - Click "Create Invoice" and confirm the invoice - Back to the Subscription, the next invoice date was not updated. ### Cause: In `_get_max_invoiced_date()` to compute the invoiced periods we check the quantity corresponding to this period. But if an invoice has two lines with opposite quantities, they will cancel each other out at this line: https://github.com/odoo/enterprise/blob/c2ac44f492ec53083864f07ff5bfbff9458ddf2a/sale_subscription/models/account_move_line.py#L131 So the method will return not return the date in `invoice_dates`. Later, if `_get_max_invoiced_date()` returns nothing for `last_invoice_end_date` then `next_invoice_date` is set to `start_date`: https://github.com/odoo/enterprise/blob/c2ac44f492ec53083864f07ff5bfbff9458ddf2a/sale_subscription/models/account_move.py#L66-L67 ### Solution: The goal was to not include invoices that were fully refunded for the `last_invoice_end_date`. This is why `_get_max_invoiced_date()` substract the quantities from refunds. To make this work we can take the absolute value of the quantity returned by the compute method before giving it the wanted sign based on if it's an invoice or a refund. opw-5360930
This update fixes a potential issue in the restaurant booking process. The system now waits for the order to fully synchronize with the floor screen before confirming its status. This prevents errors related to checking for the loader or server ID prematurely, ensuring bookings are processed correctly and reliably.
Original PR description
When booking the table we now wait to be back on the floor screen before checking that the loader is gone and that the order has a server ID. If we don't do that we might check that the loader is not there before it appears, and then checking the server ID before it is set. runbot-227652
This update resolves an issue where customers using self-service invoicing through Peppol received duplicate invoices repeatedly. The root cause was a technical glitch in how Odoo handled invoice creation and API calls, leading to unnecessary transmissions. This fix ensures invoices are sent only once, improving efficiency and accuracy for Peppol customers.
Original PR description
Steps to reproduce: - Set up a test company with Peppol enabled - Create a Peppol customer and ensure they can receive invoices - In the POS settings, enable the “Self-service invoicing” option - Create a POS order linked to the Peppol customer - Log in as this customer - Enter the POS order information to access the invoice download view (from /pos/ticket) - Repeatedly click the “Request invoice” button - On the Peppol side, you will notice that the same invoice is sent as many times as the button is clicked Why ? This error is not really Peppol related, it can actually happen with all EDI making API call: the transaction is rolled-back when Odoo tries to create multiple invoices with a serialization error but the API call happened so, in this cas, the invoice is sent over Peppol. opw-5469467
This update fixes an issue where a work center wouldn't be blocked after a work order was deleted, due to a lingering timer. Now, deleting a work order correctly stops the timer and prevents the work center from being blocked, ensuring accurate resource management. This resolves a potential disruption in production scheduling.
Original PR description
Steps to reproduce: - Start the timer on the work order - Delete the work order - Try to block the work center Current behavior: - The work center is not blocked because the latest mrp.workcenter.productivity is still active Expected behavior: - The work center is blocked - mrp.workcenter.productivity is stopped opw-5475227 Forward-Port-Of: odoo/odoo#245815