Daily updates from Odoo
Tuesday, January 20, 2026
44 changes · master
Enhancements to existing features
This update expands Odoo's ability to handle Ukrainian Tax Identification Numbers (TINs). Previously, the system only accepted 12-digit numbers. Now, it supports 8-digit numbers for Ukrainian companies and 12 or 10-digit numbers for individuals, resolving an issue where Ukrainian TINs were incorrectly rejected.
Original PR description
with this commit:- - We are adding support for Ukrainian Tax ID numbers of 8 digits, which was 12 previously. - The following formats are now accepted: - National company numbers: 8 digits (e.g., 12345678) - European company numbers: 8 digits prefixed with 'UA' (e.g., UA12345678) - Individual numbers: 12 or 10 digits (e.g., 123456789012) - This change allows users to enter Ukrainian TINs that were previously incorrectly rejected due to length restrictions. task-5414806 opw-5373469 Forward-Port-Of: odoo/odoo#243258
This update makes the 'Open Cashbox' button in the Point of Sale (PoS) interface more visually prominent and easier to find. This small UI change enhances the user experience for staff managing transactions and improving efficiency. It's a minor aesthetic improvement.
Original PR description
Little UI changes on the Open Cashbox button in the PoS. task: 5441682 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244084 Forward-Port-Of: odoo/odoo#243224
Resolved issues and error corrections
This update fixes an issue where products created through the website automatically appeared as published without a category assigned. The fix removes code that forced publishing and ensures products remain unpublished until a category is selected, aligning with the user's expected experience. This improves consistency and prevents accidental product listings.
Original PR description
**Description:** Products created from the website frontend were automatically published even without a category assigned, contradicting the "Unpublished" placeholder expectation. The issue had three root causes: 1. JavaScript (new_content.js) forced default_is_published: true 2. XML action context contained website_published: True 3. Both caused products to be published regardless of category **Fixed by:** - Removed default_is_published from JS product creation handler - Removed website_published from action context. **After this PR:** Now products remain unpublished until a category is assigned, matching the intended UX indicated by the placeholder text. opw-5408903 SEE ALSO: Enterprise PR:https://github.com/odoo/enterprise/pull/103778 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244414 Forward-Port-Of: odoo/odoo#242779
This update ensures the website's product barcode lookup functionality aligns with a recent community change. Previously, products created through the website weren't automatically published if a category wasn't selected. This fix corrects the test to accurately reflect this behavior, preventing potential issues with product visibility.
Original PR description
Align barcodelookup website test with the community change where products created from the website are not auto-published when no category is selected. opw:5408903 SEE ALSO: Community PR:https://github.com/odoo/odoo/pull/242779 Forward-Port-Of: odoo/enterprise#104709 Forward-Port-Of: odoo/enterprise#103778
This update fixes an issue where newly created appraisal templates weren't showing up in the selection list during campaign setup. The problem stemmed from a technical detail in how the system filtered templates, now it correctly includes templates created within a campaign, ensuring a smoother workflow for performance reviews.
Original PR description
**Version:** - 19.-0 **Steps to reproduce:** - Install the Appraisal module. - Click the Launch Campaign button. - Open the wizard and create a new appraisal template. **Issue:** - Newly created appraisal templates do not appear in the selection list. **cause:** - When a new template is created, the company field is automatically set by default. - However, the domain used to fetch templates does not include the company condition, causing the newly created template to be excluded from the results. **Solution:** - remove domain and use check_company=True to get the company. Task-5416593 Forward-Port-Of: odoo/enterprise#102108
This update resolves an issue where the link popover remained open after a snippet was removed from the website builder. The fix ensures the popover closes automatically when a snippet is deleted, improving the user experience and preventing visual clutter. This change was made to enhance the stability and usability of the website editing tool.
Original PR description
Description of the issue this PR addresses:
- When removing a snippet, the link popover stayed open because its pointerdown handler didn’t trigger, leaving the popover visible even after its selected content element was removed.
- A previous fix used { capture: true } on the document pointerdown listener, but this also triggered when interacting with the link type dropdown and color picker, closing the popover triggers applyCallback and causing nested links to be created.
After this commit:
- Close the link popover from on_will_remove_handlers before the target element is removed from the DOM.
- This ensures the popover closes when removing the snippet.
task-5359000
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#243556
Forward-Port-Of: odoo/odoo#237679This update resolves an issue that occurred when users attempted to 'Show', 'Force CFDI', or 'Retry' actions on MX electronic invoices. The problem stemmed from a system error when payments were cancelled, leading to incorrect data. This fix ensures these actions function correctly without causing errors.
Original PR description
When user is clicking any of the `Show`, `Force CFDI`, or `Retry` buttons in l10n_mx_edi.document error occurs. Steps to reproduce: - Install `l10n_mx_edi` module > Switch to `MX Company` - Setup `MX Electronic invoicing` in settings - Create a New Invoice > Send > Select `CFDI` > `Pay` > `Update Payments` - Payment > Cancel that Payment > Back to Invoice > CFDI(Notebook page) > Click on `Show` or `Force CFDI` or `Retry` Traceback: `ValueError: Expected singleton: account.move()` This error occurs when a payment is created and later deleted or cancelled, which results in an empty `move_id` in l10n_mx_edi.document. sentry-7113267386 Forward-Port-Of: odoo/enterprise#102248
This update prevents Attendance Officer/Admin users from accessing the employee onboarding feature within the Attendances module. Previously, users with limited access could trigger a traceback when attempting to set badges. This change ensures that only users with full Employee rights can access this functionality, improving stability and security.
Original PR description
# Issue Getting a traceback when trying to access the onboarding menu with just Attendance: Officer access right. # Steps to reproduce 1. Log in with a demo user, with just Attendance: Officer access right. 2. Navigate to Attendances app, and yes, you don't see Configuration, but still you can access the Onboarding menu by typing some random text on search. 3. Now, navigate to the Onboarding menu, and try setting a badge of an employee 4. You get a traceback. # Fix Attendance: Officer/Admin without Employee rights (either Officer/Admin) will not be able to access the Attendances Onboarding menu. Only the user with both the rights can access it. task-5267189 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235965
This update resolves a test failure in the live chat module. The issue stemmed from a mismatch between the demo data's time zone setting and the test's expectations. The fix ensures the test accurately reflects the OdooBot's time zone, improving the reliability of the live chat testing process.
Original PR description
This PR fixes a failing assertion in `test_channel_get_livechat_visitor_info`. The test fails since [*] because the demo data sets the OdooBot time zone to 'Europe/Brussels', while the test was asserting it to be False. This PR explicitly sets the time zone of the OdooBot partner record and updates assertions accordingly. [*] https://github.com/odoo/odoo/pull/210094 runbot-237778 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244422
This update resolves a sporadic failure in the 'Copy Message Link' test within Odoo. The previous test relied on unreliable keyboard shortcuts, leading to inconsistent results. The updated test uses a more robust method to ensure the copy functionality works correctly and reliably.
Original PR description
Before this commit, the "Copy Message Link" test was sometimes failing. It happens for two reasons: - It presses "ctrl+v" with the intent of copying the message link in the composer but doesn't check if the composer is focused (it should not be as the test clicks away to copy the link). - It then presses "enter" with the intent of posting the message, without checking if the composer is filled or even ready to send. This test replaces the "press" steps: - "ctrl+v" is replaced by `insertText`: we already check that the copy works and "press" is less reliable. - We click on the send button when enabled. runbot-237538 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 Forward-Port-Of: odoo/odoo#244547
This update corrects a test failure related to user access permissions within the Odoo Enterprise payroll system. A change was made to allow specific group access to the GOSI API, resolving a technical issue that prevented automated testing. This ensures consistent and reliable payroll testing.
Original PR description
The test_employee_fields_groups unit test from hr/tests/test_self_user_access.py was not successful on the runbot due to access restriction. I added the groups parameters to the l10n_sa_gosi_api_is_available field definition in the hr_employee extension from the l10n_sa_hr_payroll_gosi module. Runbot error: 233954
This update resolves an error that occurred when users deleted the 'Balance' line in the General Ledger Report. The fix prevents the report from crashing when a balance isn't present, ensuring a smoother user experience. This improves the reliability of a core accounting function.
Original PR description
Currently an error is generated when the user deletes the `Balance` line of `Column` tab from the General Ledger Report as in the below steps: - Install accountant with demo data - Go to Accounting >…
Currently an error is generated when the user deletes the `Balance` line of `Column` tab from the General Ledger Report as in the below steps: - Install accountant with demo data - Go to Accounting > Configuration > Accounting (section) > Accounting Reports - Open the General Ledger report - Delete the balance line from the Column tab - Go to Reporting > General ledger >> Error occurs (If an error does not occur, try opening the detailed view of the journal in the report.) Error: `KeyError: 'balance'` This issue was generated because at code line [1] tries to access `balance` key from the `colname_to_idx[col_group_key]` but since the user deleted `balance` it will not fount there and we got an error. This commit fixes the issue by preventing the processing of `line_balance` when the balance key is not present in `colname_to_idx[col_group_key]`. [1]: https://github.com/odoo/enterprise/blob/340abdc1b00df4d3d6130b26650519ae8354d199/account_reports/models/account_general_ledger.py#L326 sentry-7105657812 Forward-Port-Of: odoo/enterprise#104170 Forward-Port-Of: odoo/enterprise#102113
This update fixes a minor issue where the employee onboarding tour sometimes finished prematurely, leaving the form in an incomplete state. This prevented users from properly completing the tour and accessing related features. The fix ensures the tour waits for form autosaves, guaranteeing a clean and functional experience.
Original PR description
This commit fixes an indeterministic error in the hr_salary_calculator_tour where, sometimes, the last tour's steps finish too quickly and doesn't wait for the form's autosave (triggered by the employee autocomplete selection) to complete, leading to a "Tour finished with a dirty form view being open" error. This is kind of a follow-up of https://github.com/odoo/enterprise/commit/5497e947cdfa242c090a3d77d900375bfb067b0f runbot-237794 Forward-Port-Of: odoo/enterprise#104725
This update fixes a problem that occurred when Odoo servers stopped, causing errors related to database connections. The fix ensures these errors are ignored during shutdown, preventing disruptions and maintaining stability. This improves the overall reliability of the Odoo platform.
Original PR description
When the server stops, pool errors can occur. It's due to the server stop function calling `sql_db.py@close_all()`. If this occurs before the dispatcher loop wakes up, the `__exit__` function of the cursor context manager will raise an error, because the connection has already been popped from the pool. As for interface errors in [1], pool errors should be ignored during server shutodwn. runbot-229800 [1]: https://github.com/odoo/odoo/pull/99849 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 Forward-Port-Of: odoo/odoo#244481
This update resolves an issue that prevented users from exporting SAFT reports for Austrian companies without defined contacts. The fix eliminates a redundant check, ensuring the system correctly validates the presence of at least one contact for the company partner. This improves the reliability of SAFT report generation.
Original PR description
[FIX] l10n_at_saft: saft export traceback When no contacts is defined on the company and the user tries to download the SAFT to XML, a traceback is shown Steps to reproduce the traceback: - Install l10n_at_saft module and create an Austrian company with no contacts - Create a few invoices for this company - Open the General Ledger report and export SAFT to XML, the traceback should appear no-task Forward-Port-Of: odoo/enterprise#104633 Forward-Port-Of: odoo/enterprise#104144
This update resolves a technical issue preventing a key test for embedded actions in the Odoo web interface. The fix ensures the test correctly handles the opening of dropdown menus, improving the reliability of our action testing process. This contributes to a more stable and functional Odoo experience.
Original PR description
In this commit, we fix an embedded action test that failed because when clicking on the sliders to show the top bar, the dropdown was directly opened as there is only one visible action (since this commit: https://github.com/odoo/odoo/pull/208005/commits/a5709e870e033b83d50a2f581c81cceb2a98d91b). We then adapt the test to wait for the dropdown to open automatically, and then when it's the case, create the new custom embedded action. runbot error~237752 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244508
This update fixes a performance issue in the translation sidebar. By preloading translated elements, the sidebar now renders fully before tests begin, preventing delays and ensuring tests pass consistently. This improves the reliability of our translation testing process.
Original PR description
When opening the sidebar in translation mode, translated elements must be preloaded before the sidebar renders. Without preloading, the fetch requires an extra tick to complete, causing tests that immediately check sidebar content to fail because the sidebar isn't fully open yet. runbot-237540 Forward-Port-Of: odoo/odoo#244519 Forward-Port-Of: odoo/odoo#242490
This update corrects a bug where free product reward lines incorrectly displayed a non-zero price in the shopping cart. The issue stemmed from an override in the `sale_subscription` module that was causing unnecessary discount calculations. The fix filters reward lines within the discount computation, ensuring accurate pricing for free products.
Original PR description
### Issue: Due to this issue, the free product reward line might have a non-zero price. #### To reproduce: 1- Install `website_sale_loyalty` and `sale_subscription`. 2- Enable `Discounts` on…
### Issue: Due to this issue, the free product reward line might have a non-zero price. #### To reproduce: 1- Install `website_sale_loyalty` and `sale_subscription`. 2- Enable `Discounts` on configuration. 3- Create a `promotion`: - rule: minimum quantity: 0, minimum purchase: 10 - reward: free product, quantity: 1 4- Set a non-zero price on reward product from product page. 5- Create a product with price of 6 and publish it on the website. 6- On website, add 1 unit of created product to cart. 7- Open cart, and increase the quantity. 8- As you see the free product is added to cart but the price is non-zero. ### Cause: Based on #89397, the reward line have the discount of 100. In the `_compute_discount` this discount is set to 0: https://github.com/odoo/odoo/blob/e48a7f1b03f23a4c96e35ee4350029439ec73e47/addons/sale/models/sale_order_line.py#L797 As `compute_discount` only depends on `product_id`, `product_uom_id`, `product_uom_qty` this shouldn't cause issue. However, in `sale_subscription` its override includes `sale_order.plan_id` as dependency: https://github.com/odoo/enterprise/blob/d0375627c6f8de6098dfe93a80f522f31e3a4174/sale_subscription/models/sale_order_line.py#L86-L90 Which setting `plan_id` to `False` here makes discount to be recomputed: https://github.com/odoo/enterprise/blob/d0375627c6f8de6098dfe93a80f522f31e3a4174/website_sale_subscription/models/sale_order.py#L27-L30 ### Fix: This can be avoided by filtering reward lines in a `_compute_discount` override. As none of reward lines regardless of reward type are expected to have a discount calculated this fix will not break any other flows. It's noteworthy to mention that in the test, `_compute_discount` is directly called in order to mimic the flow without the need to install `sale_subscription`, as the `sale_subscription` is not root cause of the issue and the same issue could reproduced by any other modules overriding `_compute_discount`. opw-5485796 Forward-Port-Of: odoo/odoo#243827
This update removes a recent change that was causing performance issues and instability within our spreadsheet dashboards. The previous attempt to use ETags for efficiency wasn't delivering the expected benefits and was creating more problems than it solved. This reversion ensures a stable and reliable experience for users.
Original PR description
This reverts commit 3b014027cb785a2c567ec94fd14ae24f39f92783. We already had many issues (and probably a lot more to come) with etag computation in spreadsheets, the ratio cost/benefit is not worth it. This reverts the etag computation in spreadsheet dashboards. Task: 5504270 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 Forward-Port-Of: odoo/odoo#244274
This change removes a recent update that was causing issues with spreadsheet functionality. The effort to implement etag computation in spreadsheets was deemed too costly compared to the benefits, so this reversion restores the previous spreadsheet behavior. This resolves existing problems and prevents future complications.
Original PR description
This reverts commit 60fc64d0fd2458f60b5d922fe12c0d09dc2bcde0, 67ba628326b4eb0336095b912f40d0f320a848aa and 8f3e242e197b2f269827499b0d89b2e9080f5d09. We already had many issues (and probably a lot more to come) with etag computation in spreadsheets, the ratio cost/benefit is not worth it. This reverts the etag computation for spreadsheets. Task: 5504270 Forward-Port-Of: odoo/enterprise#104615
This update fixes a minor usability issue in the contact view of delivery addresses. The GLN field was awkwardly positioned and lacked a label, making it difficult to find. The change repositions the label before the notes field for better clarity and ease of use.
Original PR description
The field is placed weirdly in the view when opening the contact view of the delivery address. There is no label, making it almost impossible to discover, and it is in the middle of everything. Let's put it down before the notes field. Before: <img width="971" height="510" alt="image" src="https://github.com/user-attachments/assets/2e0e7d96-1a7f-4fe5-b17d-4c5b25a3e7bf" /> After: <img width="824" height="554" alt="image" src="https://github.com/user-attachments/assets/3bc47f20-72a9-4247-8dd3-9e939046c6d7" /> task-none Forward-Port-Of: odoo/odoo#244554
This update corrects a technical issue that prevented test cases from running correctly. The team moved fields related to rental agreements from one Odoo module to another, but some related code wasn't updated. This fix ensures all test cases now run smoothly.
Original PR description
During the development of odoo/enterprise#102625, the fields `pickup_time` and `return_time` were first defined in `sale_renting`, as they were prior to the PR, but during development it was decided to move the fields into `website_sale_renting`, where they are actually used. Unfortunately, some remaining code in `sale_renting` was not updated accordingly, which caused the setup of test cases to fail when `website_sale_renting` was not installed along with `sale_renting`. runbot-237987 Forward-Port-Of: odoo/enterprise#104817
This update resolves an issue where the Amazon connector wasn't correctly identifying key delivery modules for UPS, FedEx, USPS, and DHL. By mapping these modules, the connector now functions properly with these major shipping carriers, ensuring accurate order processing and fulfillment.
Original PR description
Amazon connector did not recognize the _rest delivery modules (ups_rest, fedex_rest, usps_rest, dhl_rest). This maps them to the correct carrier names, consistent with existing mappings. Forward-Port-Of: odoo/enterprise#102606
This update clarifies the reasons why Stripe might reject an expense authorization request. It now includes a specific 'authorization_controls' reason, translating it into a user-friendly explanation for better expense reporting and reconciliation. This ensures accurate tracking of Stripe authorization issues.
Original PR description
When Stripe refuses an authorization due to the maximum allowed being reached, there is a specific technical reason "authorization_controls" that wasn't mentioned in their documentation. This adds the reason with a user-friendly translation See [doc](https://docs.stripe.com/api/issuing/authorizations/object?api-version=2025-01-27.acacia#issuing_authorization_object-request_history-reason) Forward-Port-Of: odoo/enterprise#104744
This update resolves an issue where copying headings caused URL redirection problems due to duplicate IDs. It also optimizes the heading link button's behavior, preventing unnecessary layout adjustments triggered by mouse movements. These changes ensure a smoother and more reliable experience when working with headings in the knowledge editor.
Original PR description
### [FIX] knowledge: prevent heading link id duplication on copy/paste Prior to this commit, copy/pasting a heading would preserve its `data-heading-link-id` resulting in mismatches for URL redirections. After this commit, such ids are always reset to guarantee unicity. ### [FIX] knowledge: throttle mousemove for heading link button Prior to this commit, every `mousemove` event could cause a layout trashing to reposition the heading link button. After this commit, the repositioning is debounced at a more reasonable rate. task-5384684 Forward-Port-Of: odoo/enterprise#104530 Forward-Port-Of: odoo/enterprise#101445
This update resolves an issue where embedded buttons in the control panel were getting cropped due to incorrect height calculations during dragging. The fix ensures that the buttons display their actual size, preventing visual distortion and improving the user experience. This change improves the appearance and usability of the control panel.
Original PR description
The `o_embedded_actions` buttons are getting cropped when they are long enough. This is due to the `overflow-hidden` property which is now applied when no element are actively dragged. When an element is dragged after a css transformation, eg. the `o_dragged_embedded_action`, `getBoundingClientRect()` is returning the element height with the transformation. This creates an excess height on the `o_embedded_actions` due to the placeholder button having it's transformed height instead of the button height. Using offsetHeight returns the element size without the transform. Note this is not done on the width, because the width without the transform can lead to text-truncation. task-5225696 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234120
This update resolves an issue where URLs were appearing twice in WhatsApp messages due to a technical formatting error. The fix prevents the duplication of URLs by adjusting how the Odoo UI's HTML is converted to plain text for WhatsApp messaging, ensuring a cleaner and more accurate message experience for users.
Original PR description
Steps to reproduce: 1. Set up whatsapp integration. 2. Send a direct message containing a URL. 3. Observe that the URL appears twice in the message received in whatsapp. Issue: This issue arises…
Steps to reproduce: 1. Set up whatsapp integration. 2. Send a direct message containing a URL. 3. Observe that the URL appears twice in the message received in whatsapp. Issue: This issue arises within the `_send_message` method, where we are taking the Markup body that we use within the Odoo UI to have a clickable URL, like `<a href="https://example.com">https://example.com</a>`. Then, the html2plaintext function duplicates by adding the footnote for the anchor tag, which "duplicates" the URL since the text within the anchor tag is the same as the URL itself. This results in a message body that contains the URL twice, leading to confusion for the user. Solution: This commit addresses the issue by backporting the solution to this problem introduced in odoo/odoo@a152910 and using the `include_references` parameter of the `html2plaintext` function to exclude footnotes from the conversion. opw-4936400 Forward-Port-Of: odoo/enterprise#104252 Forward-Port-Of: odoo/enterprise#101083
This update removes an unnecessary credit note warning from the GSTR report, streamlining the reporting process. Previously, the warning conflicted with credit note confirmation, requiring manual intervention. Now, the warning disappears automatically when the credit note is fully processed and checked.
Original PR description
This **PR** removes the credit note warning from the GSTR report, as it is not required at the report level. Additionally, when this warning is present on an invoice and the credit note is confirmed, the credit note is set to not checked. The warning will only be cleared once the credit note is posted and checked task-5469000 Forward-Port-Of: odoo/enterprise#104752 Forward-Port-Of: odoo/enterprise#102106
This update resolves a technical error in the l10n_ae_hr_payroll module's testing process. Specifically, a test was incorrectly creating bank records, which has now been corrected to ensure accurate reporting. This ensures the integrity of financial data within the system.
Original PR description
The test was creating a res.partner.bank with the id of company passed as partner_id. This commit fixes this issue by passing the partner_id of the company instead. build_error-237562 Forward-Port-Of: odoo/enterprise#104797
This update resolves a compatibility issue with an older version of Odoo's spreadsheet functionality. Specifically, it ensures the spreadsheet feature continues to work correctly with older Odoo releases. This prevents disruptions for users who haven't yet upgraded to the latest Odoo version, maintaining a smoother experience.
Original PR description
Task-5477426 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 Forward-Port-Of: odoo/odoo#244218
This update resolves an issue where the 1099 report incorrectly assigned the payer company when generating reports with multiple companies. The fix ensures that each line item in the 1099 report accurately reflects the correct payer company, improving the accuracy of tax reporting. This impacts users utilizing the multi-company accounting setup.
Original PR description
When generating 1099 report with multicompany setup, the payer company is wrongly assigned in the csv file. Steps: - Have 2 companies - Make one bill per company with one different 1099 vendor for each one - With both companies selected, generate the 1099 report - open the csv file -> Payer name is the same for both line opw-5442190 Forward-Port-Of: odoo/enterprise#104660 Forward-Port-Of: odoo/enterprise#103805
This update fixes a validation error that occurred when users attempted to unbuild tracked products. The issue stemmed from the system incorrectly reusing previously consumed serial numbers within the same manufacturing order. This change ensures accurate inventory tracking by preventing the re-assignment of serial numbers, improving order processing reliability.
Original PR description
Steps to reproduce the bug: - Create a storable product P1 - Tracking: Serial Number - BoM: Component: 1 unit of C1, tracked by Serial Number - Update the inventory of C1 - 1 unit with SN1 - 1 unit…
Steps to reproduce the bug:
- Create a storable product P1
- Tracking: Serial Number
- BoM: Component: 1 unit of C1, tracked by Serial Number
- Update the inventory of C1
- 1 unit with SN1
- 1 unit with SN2
- Create a Manufacturing Order to produce 2 units of P1
- Confirm and validate the MO using serials SN1-P1 and SN2-P1
- SN1 and SN2 of C1 are consumed
- Unbuild 1 unit of P1 with serial SN1-P1 Result: SN1 of C1 is correctly restored
- Unbuild 1 unit of P1 with serial SN2-P1
- Try to validate the unbuild
Problem:
A user error is raised:
"The serial number SN1 has already been assigned"
This happens because _action_unbuild attempts to reuse the same component serial number (SN1 of C1) without checking whether it has already been consumed by a previous unbuild operation on the same Manufacturing Order.
Solution:
This fix ensures that, when unbuilding tracked products, component serial numbers already used by previous unbuilds of the same MO are excluded from the candidate move lines.
This prevents reassigning the same serial number multiple times and avoids the validation error.
opw-5441256
Forward-Port-Of: odoo/odoo#242882This update simplifies the logging from our IoT drivers to improve readability and reduce unnecessary data. We've removed irrelevant details like process IDs and database names, and now securely identify the IoT Box using a shared token. This enhances log analysis and troubleshooting.
Original PR description
To ease readability in db's logs, we removed PID number and useless database name (as we don't have a db on the IoT Box) from the logs sent to the db. In addition, we now ensure IoT Box identity using the shared token, provided as an authorization header. see odoo/enterprise#102890
This update fixes a technical error that prevented users from correctly scheduling resource appointments within the Odoo system. The change adjusts how appointment availability is calculated, ensuring compatibility with the latest data format and preventing a 'ValueError' from occurring. This improves the reliability of the appointment scheduling process.
Original PR description
Steps to reproduce =================== 1. Open appointment app. 2. Click on resource appointment to open gantt view. => ValueError: too many values to unpack With commit [1], `_get_unavailable_intervals` now returns an interval object instead of a list of datetime ranges. However, the gantt resource unavailability logic was still expecting a list and unpacking start/stop values. This commit updates the logic to handle interval objects and extract the expected start and stop dates correctly. [1] https://github.com/odoo/odoo/commit/2dff65ab8b5a9db21d5b476065a72755cc4625be Task-5785529
This update adjusts the location of the GCC format checkbox within the Odoo settings, placing it within the 'Customer Invoices' section. This ensures users can always access this important setting, even when the broader Fiscal Localization section is hidden, streamlining the invoicing process.
Original PR description
This fix moves the GCC Format checkbox under the 'Customer Invoices' block so it remains accessible in branches where the Fiscal Localization section is hidden. task-5723793 Forward-Port-Of: odoo/odoo#244652
This update resolves an issue where outdated tests were lingering after a change to the canned response shortcut. The tests were removed to streamline the suite and ensure accurate results moving forward. This change improves the stability and reliability of the live chat feature.
Original PR description
In [1], auto focus was removed for canned responses in the navigable list. The intent was to avoid conflicts with emojis. In [2], the shortcut for canned response was changed to `::` and the auto focus behavior was restored. However, tests added in [1] were not removed. Since they were fragile (negative assertion), they are passing most of the time. This PR removes the tests that are now outdated. runbot-233358 [1]: https://github.com/odoo/odoo/pull/170900 [2]: https://github.com/odoo/odoo/pull/192953 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 Forward-Port-Of: odoo/odoo#244655 Forward-Port-Of: odoo/odoo#244472
This update corrects a technical issue preventing access to certain payroll features for specific user groups. The change adds group permission controls within the HR employee configuration, ensuring proper access rights are enforced. This resolves a test failure and improves the stability of the payroll system.
Original PR description
The test_employee_fields_groups unit test from hr/tests/test_self_user_access.py was not successful on the runbot due to access restriction. I added the groups parameters to the l10n_sa_gosi_api_is_available field definition in the hr_employee extension from the l10n_sa_hr_payroll_gosi module. Runbot error: 233954 Forward-Port-Of: odoo/enterprise#104883
This update resolves an issue where changing a tax lock date to a past date would trigger an error. The fix prevents the system from generating default external values when the lock date is set in the past, ensuring smoother operation and preventing unexpected errors.
Original PR description
To reproduce the issue, on a company in Luxembourg: 1) Set a tax lock date to November 30th 2) Attempt to change the tax lock date to November 15th ===> Lock date violation error. This happens because _generate_default_external_values still gets called in case the lock date is set back in the past (since _get_current_period_dates call in _create_default_report_external_values returns a tuple basically containing (former lock date + 1 day, new lock date)). Doing so, it tries generating a default external value with a value of 0 (because no data will ever be available in such an impossible date interval), but the previously set lock date prevents it, and raises the error. opw-5383010 Forward-Port-Of: odoo/enterprise#102756
This update fixes a previous issue where the Apps application incorrectly showed zero industry module counts. By adding version information to the route arguments, the system now accurately displays the exact number of modules by category, aligning with changes in the apps.odoo.com API.
Original PR description
Before this commit, the count of industry modules by category in Apps application was always 0. With the change of API of apps.odoo.com, there is a possibility to display the exact count by category. In this aim, this commit adds the version to the route arguments such that the count is correctly displayed. task-5222706 Forward-Port-Of: odoo/odoo#243482
This update fixes a technical issue where a new fiscal reform field was incorrectly used in the Point of Sale module. The change was identified late due to legal requirements and automatic installation. The fix moves the necessary logic to the correct module for proper functionality and ensures compliance with the latest regulations.
Original PR description
`l10n_br_operation_type_pos_id` is a new field introduced in the fiscal reform [1] in saas-18.4. It's added in `l10n_br_edi_pos_fiscal_reform`, but is mistakenly used in `l10n_br_edi_pos`. Because the modules are legally required since the beginning of January and auto-installed it wasn't notice until now. This reverts the change to `l10n_br_edi_pos` and moves the logic to an override in `l10n_br_edi_pos_fiscal_reform`. Additionally, we only do it if the fiscal reform is enabled on the database with `l10n_br_is_icbs`, like we do for all other fiscal reform features. Thanks to ANDG for pointing it out. [1] odoo/enterprise#102835 Forward-Port-Of: odoo/enterprise#104671
This update resolves an issue where user avatars in the Chat UI were appearing distorted or incorrectly sized. The change ensures avatars are displayed correctly using the 'object-fit: cover' style, providing a consistent and professional user experience. This improves the visual quality of user profiles.
Original PR description
Before this commit, user avatars in the Chater UI were not displayed using the object-fit: cover style, causing distorted or improperly scaled images. Current behavior before PR: <img width="671" height="380" alt="image" src="https://github.com/user-attachments/assets/a4b7ef3a-0c69-4fec-bf2a-70c9bd89236e" /> Desired behavior after PR is merged: <img width="663" height="384" alt="image" src="https://github.com/user-attachments/assets/479586c8-a01c-45fb-9e46-9246616e1329" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243434 Forward-Port-Of: odoo/odoo#242320
This update reverts a recent change that introduced new features to the mobile dashboards. It now returns the dashboards to display only charts, simplifying the user experience. Some adjustments were made to ensure existing features like the carousel and granularity selector continue to function correctly.
Original PR description
### [REV] spreadsheet_dashboard: go back to chart-only mobile dashboard This commit reverts 5cde5114d971a9edc12c9708ae0ea86bfb6db3b2, so the mobile dashboards go back to showing only the figures. Some adaptations were necessary to make the new features (carousel, granularity selector, ...) work. Task: [5447027](https://www.odoo.com/web#id=5447027&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242288
This update fixes an issue where product names on invoices were being incorrectly concatenated, leading to unreadable output. The change replaces newlines with spaces, ensuring names and descriptions remain separate and adhere to API specifications, improving invoice clarity and compliance.
Original PR description
Before: SInvoice was stripping newlines from the `itemName` field. Since we were directly using `line.name` (which contains a `\n` between product name and description), the content ended up concatenated without any separation. After: Now we replace the newline with a space before sending the value, so the name and description remain readable once processed by SInvoice and set limit to 500 characters as per API specs. task-5498120 Forward-Port-Of: odoo/odoo#243994
Code cleanup and technical improvements
This update simplifies the backend of our IoT server logger, aligning with a previous improvement. The controller has been reorganized for better clarity and now securely verifies IoT Box identities using a shared token. This enhances the stability and security of our IoT integration.
Original PR description
Following the odoo/odoo#238740, we now simplify the db's side of the IoT server logger. We also moved the logger controller to it's own file for improved readability. In addition, we now ensure IoT Box identity using the shared token, provided as an authorization header. see odoo/odoo#241355