Daily updates from Odoo
Thursday, April 2, 2026
359 changes
23 changes
Resolved issues and error corrections
This update resolves a technical issue causing excessive memory usage in the account reports module. The fix ensures that report preloading stops when the component is destroyed, preventing a memory buildup that could impact performance. This improves the stability and responsiveness of the account reporting feature.
Original PR description
The preloading of sections would never stop, this is an issue since this would prevent the garbage collector from collecting this big class and all it's objects. We fix this by making sure to stop the reploading when the component is destroyed. It's important to do it this way rather than clearing the timeout as the destruction could happened when the report is loading so the timeout would be unset and a new one would be started. Forward-Port-Of: odoo/enterprise#112810 Forward-Port-Of: odoo/enterprise#112628
This update resolves a technical issue that was causing platform order flow tests to fail due to a missing POS printer in the test environment. The fix ensures that tests can complete successfully without crashing, improving the reliability of our automated testing process.
Original PR description
When running platform order flow tests, calling `mark_platform_prep_order_as_printed` raises a ValueError because the test environment lacks active POS printers (they are unlinked during setup). This commit patches the method to catch the ValueError and return False, allowing the POS tours to complete successfully without crashing. build_error-241260 Forward-Port-Of: odoo/enterprise#111076
This update fixes an issue where Belgian VAT return PDFs were not including essential fields like 'Ask Restitution' and 'Client Nihil'. The fix ensures these fields are correctly generated when submitting a VAT return, guaranteeing accurate reporting for our Belgian customers. This resolves a previous reporting discrepancy.
Original PR description
When submitting a Belgian VAT return, the PDF attachment was generated without 'l10n_be_closing_vat_return', 'ask_restitution', and 'client_nihil' in the options. The wizard called _proceed_with_locking() without options_to_inject, so when export_to_pdf() rebuilt options via get_options(), _custom_options_initializer() read those keys from previous_options as None, making <t t-if="options.get( 'l10n_be_closing_vat_return')"> always False. Steps to reproduce: 1. Create a Belgian company 2. Navigate to Accounting -> Accounting -> Tax Returns 3. Create a VAT Return, fill in "Ask Restitution", and validate it 4. Submit the VAT return 5. Open the generated PDF attachment => "Ask Restitution" and "Client Nihil" fields are missing from the header Ticket [link](https://www.odoo.com/odoo/project.task/5509725) opw-5509725 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#110537
This update fixes an error in the Mod 347 BOE export that was using incorrect indicators for 'Substitutive' and 'Complementary Declarations'. The change ensures the file is correctly recognized by the Spanish tax authority (AEAT), preventing misinterpretation of the data and ensuring accurate reporting. This resolves a potential issue with submitting tax returns.
Original PR description
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the…
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the `ES company` - Navigate to Accounting > Reporting > Tax Report - From the smart button, select `Report: Tax Report (Mod 347) (ES)` - Download the BOE file using the dropdown. - In the wizard: - Enable `Substitutive Declaration` or `Complementary Declaration` - Set `Previous Report Number` (e.g., 123456789) - Click `Generate BOE` - Upload the generated .txt file to the `AEAT portal`. (AEAT credentials are required) **Observation:** AEAT does not recognize 'X' as a valid indicator for substitutive or complementary declarations and interprets the file as a standard return. **Root Cause:** At [1], the BOE Mod 347 generation writes 'X' for both substitute and complementary declarations. **Fix:** This commit ensures the file contains correct indicators: - 'C' for `complementary declarations` - 'S' for `substitute declarations` This aligns Modelo 347 with AEAT specifications and ensures consistency with the implementation of Modelo 349 at [2]. Ref: https://sede.agenciatributaria.gob.es/Sede/en_gb/ayuda/consultas-informaticas/declaraciones-informativas-ayuda-tecnica/modificar-declaracion-informativa-mediante-fichero.html [1]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1061-L1062 [2]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1490-L1491 opw-6048711 Forward-Port-Of: odoo/enterprise#112818 Forward-Port-Of: odoo/enterprise#112566
This update fixes a display issue where subscription product billing periods weren't shown in product snippets on the website. The fix ensures that all subscription products, regardless of where they're displayed (shop page or snippet), accurately show their billing periods. This improves the clarity and accuracy of product information for customers.
Original PR description
Steps to reproduce: 1) Go to the Website app. 2) Add a product snippet to any page using the editor. 3) See product card of any subscription product. Issue: - The billing period is not displayed for subscription products in the product snippet, unlike on the shop page. Cause: - `temporal_unit_display` is not included in the `combination_info`which is passed in data used by the product snippet. Fix: - Include `temporal_unit_display` in `combination_info`. opw-6070943 Forward-Port-Of: odoo/enterprise#112787 Forward-Port-Of: odoo/enterprise#112171
This update resolves a test failure caused by demo data incorrectly influencing article sequence numbers. The test now dynamically calculates the expected sequence number, ensuring consistent results regardless of whether demo data is enabled. This improves test reliability and stability.
Original PR description
In the `test_article_create` test, a new article is created without specifying a parent and sequence number. The test then asserts the sequence number assigned to this article using a constant. When…
In the `test_article_create` test, a new article is created without specifying a parent and sequence number. The test then asserts the sequence number assigned to this article using a constant. When no sequence number is provided, the system automatically assigns one by taking the highest existing sequence among articles with the same parent and incrementing it by 1. When demo data is enabled, additional users are created along with their corresponding onboarding articles. As the onboarding articles does not have any parent, the onboarding article are included in the computation of the sequence number of the new article we create in the test. These extra articles impacts the sequence number of the new article, causing the test assertion to fail. To resolve this, the test computes the expected sequence number dynamically based on the current state of the data. This ensures consistent behavior regardless of whether demo data is present. runbot-error-id~231695 Forward-Port-Of: odoo/enterprise#106326
This update corrects a previous issue where partner totals were incorrectly hidden, regardless of their value. Now, all partners with totals exceeding €3,005.06 are displayed, and insurance operations accurately track sales and purchase journal amounts, providing a more complete financial picture.
Original PR description
Before this PR: - Partners were only shown if their total was positive and above 3,005.06 €. Negative totals were hidden, even if they were lower than -3,005.06 €. - Insurance operations only took Purchase journal amounts into account. Amounts from Sales journals were ignored, and there was no distinction between the two types of operations. After this PR: - The report now uses the absolute value of the total. Partners with amounts exceeding 3,005.06 €, whether positive or negative, are now shown correctly. - Insurance operations are now divided into two distinct sections: Sales and Purchases. Amounts from both Sales and Purchase journals are now correctly taken into account and reported in their respective sections. task-5214023 Forward-Port-Of: odoo/enterprise#112735 Forward-Port-Of: odoo/enterprise#100413
This update resolves an issue where users were incorrectly added as followers of chatter threads, leading to unwanted notifications. The fix ensures the correct user ID is used, preventing this unintended behavior. Additionally, a cron job issue was addressed to ensure all records are processed correctly.
Original PR description
The method call that is supposed to subscribe the current user to the closing entry when posting XBLR used the User id as a Contact id. This caused random contacts to be added as followers of the chatter thread and as a result receiving notifications for it. The fix is simply using the id of the User's Contact instead. Also, as discussed with prro on Discord, fixed the cron clearing its dictionary each loop. opw-5886621 Forward-Port-Of: odoo/enterprise#112709 Forward-Port-Of: odoo/enterprise#107843
This update fixes a previous issue where planned actions (like Dimona/Part Time) were incorrectly triggered for new employees across all countries. Now, these actions are specifically applied only to employees with Belgian contracts, ensuring accurate payroll processing and compliance with Belgian regulations. This change improves the reliability of HR processes for our Belgian clients.
Original PR description
Previously, planned actions (Dimona/Part Time) were triggered for all new employees with a contract start date, regardless of country. Now, the trigger is filtered to only apply to Belgian contracts. task-5942339 Forward-Port-Of: odoo/enterprise#111788
This update resolves an issue where subscription discounts weren't being correctly processed during sales order imports. The change modifies how the system handles subscription discounts, ensuring they are accurately reflected in sales data. This improves the reliability of subscription-based sales reporting.
Original PR description
This is a test for the related community fix and an override of the **isSaleOrderLineNote** method to add the subscription specific **subscription_discount** lines to be treated as a note when importing it from the Sales module. https://github.com/odoo/odoo/pull/247846 opw-5582448 Forward-Port-Of: odoo/enterprise#112326 Forward-Port-Of: odoo/enterprise#107002
This update resolves a problem where the 'Reconcile' button was incorrectly displayed on mobile devices after a bank statement line was fully reconciled, causing errors. The fix ensures that the button is hidden when a line is reconciled, and displays the correct reconciliation information, improving the mobile user experience.
Original PR description
Currently, when a line is fully reconciled, we display all the moves, name of the reconciliation, and we hide the `Reconcile`, `Set Partner`, ... buttons, has the line is reconciled, we don't need the buttons. But in mobile, we still display the buttons (like `Reconcile`), leading to a traceback when clicking on it. Furthermore, instead of showing the moves name, we show a `[object Object]`. This bug was probably introduced here: https://github.com/odoo/enterprise/pull/101692 task-6058911 Forward-Port-Of: odoo/enterprise#111605
This update resolves an issue where adding recurring prices to subscription products with multiple companies resulted in an error and prevented recurring plans with a company set from appearing in the list. The fix ensures that product pricelist items correctly handle company IDs, allowing users to manage recurring plans across different companies without encountering errors.
Original PR description
## Issues When adding a line in the *Recurring prices* tab (`product.pricelist.item`) of a product with a `company_id`, a "company inconsistencies" error appears. Also, recurring plans with their…
## Issues When adding a line in the *Recurring prices* tab (`product.pricelist.item`) of a product with a `company_id`, a "company inconsistencies" error appears. Also, recurring plans with their *Company* field set do not appear in the list of recurring plans when adding a line in the *Recurring prices* tab. ## Steps to reproduce 1. Install *Subscription* (`sale_subscription`) 2. Create a second company 3. Create a subscription product and set a company in the *Company* field (`company_id`). 4. In the *Recurring prices* tab, add a line (any recurring plan, any price) 5. **An _Invalid Operation_ error appears: _"Uh-oh! You’ve got some company inconsistencies here"_** For the second issue, after the same 3 first steps: 1. Create a *Recurring Plan* RP with its *Company* field set to the current company 2. On the *Recurring prices* tab of the subscription product, try to add a line with the Recurring plan RP 3. **The Recurring plan RP is missing from the list of available plans.** ## Cause When adding a line to the *Recurring prices* tab, a new `product.pricelist.item` is created, with no `pricelist_id`. The `ProductPricelistItem._compute_company_id` from `sale_subscription` filters out the items that don't have a `pricelist_id`, which is the case for the line we create. Also, the (potentially new) plan has no `company_id` in most cases. https://github.com/odoo/enterprise/blob/ccab0c261040ed995d12dca891caae9596bbe1eb/sale_subscription/models/product_pricelist_item.py#L18-L26 By filtering the items with no `pricelist_id`, nothing is passed to the `super()._compute_company_id`, even though it would also handle cases where the item has a `product_tmpl_id`: https://github.com/odoo/odoo/blob/9c8112d794af1ba84ade8af124967495c2ff8995/addons/product/models/product_pricelist_item.py#L170-L173 opw-5981629 opw-6051978 Forward-Port-Of: odoo/enterprise#109403
This update resolves an issue where tests for Italian tax reports were failing due to missing data required for XML validation. The changes ensure the tests now properly populate the necessary 'codice fiscale' field, allowing the validation process to complete successfully. This improves the reliability of the tax report generation process.
Original PR description
Description of the issue this commit addresses: Previously, the testing of the xml exports was only done by generating the file and checking its content against a hardcoded one but a fix[^1] changed that so the tests use the real export flow during which an xsd validation is done. As the tests did not expect to go trough the validation, some mandatory values were not present and it now results in a failing validation (caught in except). [^1]: https://github.com/odoo/enterprise/pull/108548 Desired behavior after this commit is merged: The tests set the l10n_it_codice_fiscale field from which are populated the mandatory CodiceFiscaleDichiarante, CodiceFiscale and CFDichiarante for the xsd validation. opw-5707544 Forward-Port-Of: odoo/enterprise#112629
This update resolves an issue where planning users couldn't update customer phone numbers within planning slots. The fix involved implementing security controls – specifically, restricting access and using secure update methods – to prevent errors and ensure data integrity. This ensures planning users can correctly manage customer information.
Original PR description
Steps to Reproduce: - 1. Log in with a user having only "Planning > User" access. 2. Create a new planning slot. 3. Add a customer on the slot whose partner is linked to a res.users account. 4. Access error is raised. Issue: - - Planning users could not update the partner phone on a slot. - An access error appeared when updating the phone number. Cause:- - - When a customer was added to the slot, the partner_phone inverse method was triggered. - This method attempted to write on the partner record. Solution: - - Added a check before writing to avoid unnecessary writes. - Used sudo() to update the partner phone securely. - Added view-level restriction using base.group_partner_manager to control who can edit the phone number. task-5039657 Forward-Port-Of: odoo/enterprise#112650 Forward-Port-Of: odoo/enterprise#93969
This update corrects a bug that allowed users to incorrectly change the 'Recurring' status of subscription products with existing sales orders. The fix ensures that changes are reverted properly, preventing data inconsistencies and maintaining accurate subscription management. This improves data reliability and user trust.
Original PR description
**Problem:** When attempting to change "Recurring" on products in the form view, if there are confirmed SOs, the change should be reverted and a message should appear explaining this. However, there is a bug in how the change is reverted where it takes the current form value of the field. This cannot be trusted as it's possible to trigger another onchange before the first one resolves, so the second onchange is based on the wrong value. **Steps to Reproduce:** - w/Demo Data, go to product "Office Cleaning Service (SUB)" (This is a subscription product which has confirmed SOs) - Quickly click the checkbox for "Recurring" twice -> Two warnings appear, but Recurring is False and can be saved **Solution:** Instead of reading the current form value and setting its opposite, we can revert to the current value on the server. Forward-Port-Of: odoo/enterprise#111725 Forward-Port-Of: odoo/enterprise#110877
This update clarifies the description of the `esg.activity.type` model to explicitly state its use within the ESG reporting framework. Previously, the description was identical to the general `activity.type` model, which could cause confusion. This change ensures clarity and proper tracking of ESG-related activities.
Original PR description
Before this commit, the description of `esg.activity.type` model is the same than the `activity.type` one defined model which could be confusing. This commit updates the description of `esg.activity.type` model to set Activity Type ESG to explicitly mention that model is used in ESG. Forward-Port-Of: odoo/enterprise#112680
This update resolves an issue where confirming quantities of archived products through the barcode app would trigger an error. The fix ensures that archived products are included in search results, allowing users to accurately add and confirm quantities, maintaining consistent functionality.
Original PR description
Currently, when a user confirms the quantity of an archived product using the product selector in the barcode app, a traceback error occurs. ## Steps to replicate: - Install Inventory - Go to…
Currently, when a user confirms the quantity of an archived product using the product selector in the barcode app, a traceback error occurs. ## Steps to replicate: - Install Inventory - Go to Settings and enable Multi-Step Routes > Set Warehouse Routes. - Configure 2 steps for outgoing shipments. - Go to Inventory and create a new delivery with - **Source Location:** WH/Stock - **Product:** [E-COM10] Pedal Bin with demand 1 - Mark as Todo then Archive the Pedal Bin product. - Open that delivery in barcode app - Pencil icon > +1 > Confirm ## Observed behavior: TypeError: Cannot read properties of undefined (reading 'qty_available') ## Root cause: After this [commit], an override was added to the product selector. As a result, when [2] calls the `search_read` method, it only retrieves non-archived products Consequently, if the result is an empty array, attempting to access `qty_available` causes the type error mentioned above. ## Solution: Adding` active_test = false `to the context ensures that archived products are included in search results. This prevents empty results and avoids the error. It also allows quantities to be added and confirmed,maintaining the same behavior as when using the increment button followed by validation, ensuring consistency. [commit]: https://github.com/odoo/enterprise/commit/6aa814f59f8641d7b57af160e38b50d5bdfc8a97 [2]- https://github.com/odoo/enterprise/blob/e13b44b353e734a6533f7d627ed69b6e7b033ee2/stock_barcode/static/src/js/stock_barcode_sml_form.js#L40-L45 opw-5980428 Forward-Port-Of: odoo/enterprise#112616 Forward-Port-Of: odoo/enterprise#109204
This update resolves an issue that prevented the General Ledger consolidation feature from functioning correctly when multiple companies were selected. The fix ensures the consolidation process now works reliably, allowing users to accurately combine financial data across different companies. This improves the stability and usability of a key reporting tool.
Original PR description
### Issue before this commit: When opening the General Ledger consolidation with multiple companies selected, a traceback was displayed with a KeyError: 'account_code'. ### Steps to reproduce the…
### Issue before this commit: When opening the General Ledger consolidation with multiple companies selected, a traceback was displayed with a KeyError: 'account_code'. ### Steps to reproduce the issue: 1. Select two or more companies from multi company menu 2. Accounting / Reporting / Ledgers / General Ledger 3. Posted Entries, Accrual Basis button 4. Pick Consolidation 5. Error ### Cause of the issue: When more than one company is selected, the General Ledger consolidation groups journal entries by multiple parameters in an increasingly strict hierarchy. One of these parameters is account_code, which is required only in a multi-company context (as account_id alone is sufficient when a single company is selected). However, the SQL query was not properly adapted to handle this case. The account_code field was used as a grouping key but was not retrieved from the database, resulting in a KeyError. ### Reason to introduce the fix: To ensure that the General Ledger consolidation can be correctly displayed in a multi-company context and to prevent runtime errors. opw-5933074 Forward-Port-Of: odoo/enterprise#112567 Forward-Port-Of: odoo/enterprise#109036
This update resolves an issue where subscription products with a zero sales price couldn't be added to the cart when the 'Prevent Sale of Zero Priced Product' setting was enabled. The fix ensures the system correctly uses the selected subscription plan to determine if the product can be added, improving the user experience for subscription purchases.
Original PR description
A subscription product that has a price of zero on the product form and the price is set on the pricelist instead cannot be added to the cart when the `Prevent Sale of Zero Priced Product` setting is…
A subscription product that has a price of zero on the product form and the price is set on the pricelist instead cannot be added to the cart when the `Prevent Sale of Zero Priced Product` setting is enabled Steps to reproduce: 1. Install eCommerce and Subscriptions 2. Go to Settings and enable `Prevent Sale of Zero Priced Product` 3. Go to Subscriptions > Products and create a new product "subscription" with Sales Price $0.00 and publish it to the website 4. Go to Subscriptions > Pricelists and edit pricelist "Benelux" 5. In the Recurring Prices tab, create a new entry for product "subscription" with a Fixed Price of $20.00 and a monthly Recurring Plan 6. Log in as portal user, go to the shop and look for "subscription" (pricelist "Benelux" should be selected) 7. Try to add it to the cart 8. Nothing happens and an error is displayed in the log Issue: When we check if a product can be added to the cart https://github.com/odoo/odoo/blob/b1f4647313eb2dbdbbe98b51649604b4e650a8aa/addons/website_sale/controllers/cart.py#L116-L120 we do not use the plan_id specified in kwargs We reach this code https://github.com/odoo/odoo/blob/b1f4647313eb2dbdbbe98b51649604b4e650a8aa/addons/website_sale/models/product_product.py#L146-L147 which will prevent the addition of a product in the cart if the option `prevent_zero_price_sale` is enabled and if `_get_contextual_price` returns zero Calling `_get_contextual_price` tries to find a `product.pricelist.item` by building a domain in `_get_applicable_rules_domain` but calling this method without a plan_id eventually reaches https://github.com/odoo/enterprise/blob/252c5ab78b51d0d2f06178cf92f0489b4a46958f/sale_subscription/models/product_pricelist.py#L69-L72 which restricts the domain to pricelists that are not subscription plans Therefore, we cannot find any pricelist that applies to the product and we consider that the product cannot be added to the cart Solution: We need to use the plan_id selected by the customer in order to correctly check if a product can be added to the cart. Use the plan_id in kwargs to update the request context so we can check if a product can be added to the cart according to the plan_id the user has selected. Use this plan_id in `_get_applicable_rules` in order to correctly select the applicable `product.pricelist.item`. opw-5993614 Forward-Port-Of: odoo/enterprise#111624
A validation error during offer generation was caused by a recent requirement for a 'version_id' field. This update ensures the system correctly processes offer generation by automatically providing the necessary 'version_id' information. This resolves a potential issue preventing successful offer creation.
Original PR description
-**ISSUE**: Since the "version_id" field in hr.payslip.worked.days model became a required field, the validation error exists. -**FIX**: "version_id" is passed inside the salary simulation payslip.
This update corrects a duplicate shortcut issue within the Assets view in the Odoo Enterprise software. The ALT + P shortcut, previously causing a conflict, has been resolved. This ensures users can consistently utilize the intended functionality for managing assets.
Original PR description
This PR (https://github.com/odoo/enterprise/pull/109022) fixed the duplicate ALT + P shortcut in the Assets view. A new one was added in 19.2. opw-5948523
This update resolves an issue where saving a report with an empty XML format in Web Studio would generate an error. The fix prevents the system from attempting to process empty XML data, ensuring a smoother user experience. This improves report creation stability.
Original PR description
Currently an error is generated when the user tries to save a report with an empty XML format. Steps to reproduce: - Install web_studio and sale_management - Sales > Studio > Reports > New > External…
Currently an error is generated when the user tries to save a report with an empty XML format. Steps to reproduce: - Install web_studio and sale_management - Sales > Studio > Reports > New > External > Type Text in report - Save > Edit Sources > Remove full XML > Save Error: `XMLSyntaxError:Document is empty, line 1, column 1 (<string>, line 1)` This error occurs because line [1] in `web_editor` attempts to access nodes by using `etree.fromstring()` with an empty `view.arch`, which is empty, resulting in an error. In earlier versions, this error was already handled by the `_check_xml` constraint, which raised a validation error when an `etree.ParseError` occurred while parsing `etree.fromstring(view.arch)` with an empty `view.arch` (see code reference [2]). However, recent changes introduced in commit [3] allow `view.arch` to be empty. As a result, this error is no longer handled by the constraint. This commit fixes the issue by adding a condition to prevent calling `etree.fromstring()` when `view.arch` is empty, avoiding attempts to access nodes from invalid data. It also updates the logic in the `web_studio` module's `get_xml_editor_resources` method to ensure resources are processed only when a valid view architecture is available. [1]: https://github.com/odoo/odoo/blob/8a88756bed194910bc5a47e93f0e29610dbeee1f/addons/web_editor/models/ir_ui_view.py#L367 [2]: https://github.com/odoo/odoo/blob/75ca0fec9a0d3b1e3a05a8bf3101bbe21846ac7a/odoo/addons/base/models/ir_ui_view.py#L372-L377 [3]: https://github.com/odoo/odoo/commit/8334ea5c777e5a478f12b8bb7a2f54bcae537d0f sentry-6288795955 Forward-Port-Of: odoo/enterprise#112111 Forward-Port-Of: odoo/enterprise#88613
A recent update caused partner names in the approval request report to overflow, making the report visually unclear. This fix addresses this issue by limiting the field width for partner names in the report, ensuring all data is displayed correctly. This improves the report's readability and accuracy.
Original PR description
step to reproduce: - install "approval" with demo data - have a partner with name length > 63 - open one of the approvals and change its type to "general approval" - add this partner in contact field - print approval request report Observation: - the partner overflows out of report Fix: - we limit the partner field with `col-9`. For a safe measure i have added `col-9` for `request_owner_id` and `approver_ids` **Before** <img width="1057" height="326" alt="image" src="https://github.com/user-attachments/assets/a8eea789-5cc7-4658-88b5-78751759d043" /> **After** <img width="994" height="330" alt="image" src="https://github.com/user-attachments/assets/bfbc061b-a6e0-4593-a3cc-c85cb81db6e2" /> opw-6005752 Forward-Port-Of: odoo/enterprise#111130
18 changes
Resolved issues and error corrections
This update resolves a technical issue where report loading wouldn't stop, causing memory problems. The fix ensures the report loading process is properly stopped when the component is destroyed, preventing performance slowdowns and ensuring efficient resource usage.
Original PR description
The preloading of sections would never stop, this is an issue since this would prevent the garbage collector from collecting this big class and all it's objects. We fix this by making sure to stop the reploading when the component is destroyed. It's important to do it this way rather than clearing the timeout as the destruction could happened when the report is loading so the timeout would be unset and a new one would be started. Forward-Port-Of: odoo/enterprise#112810 Forward-Port-Of: odoo/enterprise#112628
This update resolves a technical issue that caused test runs for our POS platform to fail. The fix ensures that test environments can successfully complete the order flow without crashing due to a missing printer configuration. This improves the reliability of our automated testing process.
Original PR description
When running platform order flow tests, calling `mark_platform_prep_order_as_printed` raises a ValueError because the test environment lacks active POS printers (they are unlinked during setup). This commit patches the method to catch the ValueError and return False, allowing the POS tours to complete successfully without crashing. build_error-241260 Forward-Port-Of: odoo/enterprise#111076
This update fixes an issue where Belgian VAT return PDFs were not correctly including key fields like 'Ask Restitution' and 'Client Nihil'. The fix ensures these fields are now present in the generated PDF attachments, accurately reflecting the VAT return data. This improves the accuracy and completeness of VAT reporting for our Belgian customers.
Original PR description
When submitting a Belgian VAT return, the PDF attachment was generated without 'l10n_be_closing_vat_return', 'ask_restitution', and 'client_nihil' in the options. The wizard called _proceed_with_locking() without options_to_inject, so when export_to_pdf() rebuilt options via get_options(), _custom_options_initializer() read those keys from previous_options as None, making <t t-if="options.get( 'l10n_be_closing_vat_return')"> always False. Steps to reproduce: 1. Create a Belgian company 2. Navigate to Accounting -> Accounting -> Tax Returns 3. Create a VAT Return, fill in "Ask Restitution", and validate it 4. Submit the VAT return 5. Open the generated PDF attachment => "Ask Restitution" and "Client Nihil" fields are missing from the header Ticket [link](https://www.odoo.com/odoo/project.task/5509725) opw-5509725 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#110537
This update fixes a display issue where subscription product billing periods weren't shown in product snippets on the website. The fix ensures that all subscription products, regardless of where they're displayed, accurately show their billing cycle. This improves the user experience and provides clearer information for potential customers.
Original PR description
Steps to reproduce: 1) Go to the Website app. 2) Add a product snippet to any page using the editor. 3) See product card of any subscription product. Issue: - The billing period is not displayed for subscription products in the product snippet, unlike on the shop page. Cause: - `temporal_unit_display` is not included in the `combination_info`which is passed in data used by the product snippet. Fix: - Include `temporal_unit_display` in `combination_info`. opw-6070943 Forward-Port-Of: odoo/enterprise#112787 Forward-Port-Of: odoo/enterprise#112171
This update fixes an error in the Mod 347 BOE export, ensuring the correct indicators ('C' and 'S') are used for substitutive and complementary declarations. Previously, the system used 'X', which was rejected by the AEAT, preventing proper submission of tax reports. This ensures compliance with Spanish tax regulations.
Original PR description
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the…
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the `ES company` - Navigate to Accounting > Reporting > Tax Report - From the smart button, select `Report: Tax Report (Mod 347) (ES)` - Download the BOE file using the dropdown. - In the wizard: - Enable `Substitutive Declaration` or `Complementary Declaration` - Set `Previous Report Number` (e.g., 123456789) - Click `Generate BOE` - Upload the generated .txt file to the `AEAT portal`. (AEAT credentials are required) **Observation:** AEAT does not recognize 'X' as a valid indicator for substitutive or complementary declarations and interprets the file as a standard return. **Root Cause:** At [1], the BOE Mod 347 generation writes 'X' for both substitute and complementary declarations. **Fix:** This commit ensures the file contains correct indicators: - 'C' for `complementary declarations` - 'S' for `substitute declarations` This aligns Modelo 347 with AEAT specifications and ensures consistency with the implementation of Modelo 349 at [2]. Ref: https://sede.agenciatributaria.gob.es/Sede/en_gb/ayuda/consultas-informaticas/declaraciones-informativas-ayuda-tecnica/modificar-declaracion-informativa-mediante-fichero.html [1]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1061-L1062 [2]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1490-L1491 opw-6048711 Forward-Port-Of: odoo/enterprise#112566
This update resolves an issue where users were incorrectly added as followers of chatter threads, leading to unwanted notifications. The fix ensures the correct user ID is used to subscribe users to closing entries, improving notification accuracy and reliability. This also includes a minor optimization for the cron job processing submission status.
Original PR description
The method call that is supposed to subscribe the current user to the closing entry when posting XBLR used the User id as a Contact id. This caused random contacts to be added as followers of the chatter thread and as a result receiving notifications for it. The fix is simply using the id of the User's Contact instead. Also, as discussed with prro on Discord, fixed the cron clearing its dictionary each loop. opw-5886621 Forward-Port-Of: odoo/enterprise#112709 Forward-Port-Of: odoo/enterprise#107843
A bug in a test related to article creation was resolved. The test previously failed because demo data (extra user onboarding articles) incorrectly influenced the expected sequence number. This change dynamically calculates the sequence number, ensuring consistent test results regardless of whether demo data is enabled.
Original PR description
In the `test_article_create` test, a new article is created without specifying a parent and sequence number. The test then asserts the sequence number assigned to this article using a constant. When…
In the `test_article_create` test, a new article is created without specifying a parent and sequence number. The test then asserts the sequence number assigned to this article using a constant. When no sequence number is provided, the system automatically assigns one by taking the highest existing sequence among articles with the same parent and incrementing it by 1. When demo data is enabled, additional users are created along with their corresponding onboarding articles. As the onboarding articles does not have any parent, the onboarding article are included in the computation of the sequence number of the new article we create in the test. These extra articles impacts the sequence number of the new article, causing the test assertion to fail. To resolve this, the test computes the expected sequence number dynamically based on the current state of the data. This ensures consistent behavior regardless of whether demo data is present. runbot-error-id~231695 Forward-Port-Of: odoo/enterprise#106326
This update fixes an issue where the barcode scanner was using the wrong company settings, leading to incorrect product identification. Now, the scanner correctly utilizes the current company context, ensuring accurate barcode readings and product matching.
Original PR description
### Issue: The company used in the main barcode menu is the `company_id` of the user rather than the current contextual company of the session. This is problematic as we might endup using the wrong…
### Issue: The company used in the main barcode menu is the `company_id` of the user rather than the current contextual company of the session. This is problematic as we might endup using the wrong barcode nomenclature. ### Steps to reproduce: - Have 2 companies: company 1 and company 2 - Set the barcode nomenclature of company 1: default, company 2: GS1 - Incarnate a user allowed in both companies but with default company 1 - With company 2, create a product and set its barcode to 36939282410106 - From the main menu open the barcode app and scan 0136939282410106 #### > No product was found (even thought it is correct in GS1) ### Cause of the issue: Scanning from the main barcode menu will trigger a call of the `main_menu` method relying on the nomenclature of the contextual company of the request: https://github.com/odoo/enterprise/blob/804ea21c225a7a1e0763bac188f027adeb3ab78f/stock_barcode/static/src/main_menu/main_menu.js#L98-L99 https://github.com/odoo/enterprise/blob/804ea21c225a7a1e0763bac188f027adeb3ab78f/stock_barcode/controllers/stock_barcode.py#L15-L21 However, when opening the main barcode menu from the app menu, no contextual warehouse was set to the view: https://github.com/odoo/enterprise/blob/804ea21c225a7a1e0763bac188f027adeb3ab78f/stock_barcode/views/stock_barcode_views.xml#L6-L11 As such, the environment of the request will be set here: https://github.com/odoo/odoo/blob/9393b0db6791fe5a7f576cff55705e315fb3dd11/odoo/http.py#L2083 based on the company of the user rather than the one of the context: https://github.com/odoo/odoo/blob/9393b0db6791fe5a7f576cff55705e315fb3dd11/odoo/api.py#L694-L722 ### Fix: Setting the company slices the `current_company` in first position of the `allowed_company_ids`: https://github.com/odoo/odoo/blob/260c69ed64f8663b6935b9863c86aac6dbecd961/addons/web/static/src/webclient/switch_company_menu/switch_company_menu.js#L33-L39 https://github.com/odoo/odoo/blob/260c69ed64f8663b6935b9863c86aac6dbecd961/addons/web/static/src/webclient/switch_company_menu/switch_company_menu.js#L68-L81 which can be recovered from the cookies via the `_get_allowed_company_ids`: https://github.com/odoo/enterprise/blob/43f65ff2f3c6177cc69647bbb85bb40a84409457/stock_barcode/controllers/stock_barcode.py#L432-L442 precisely used by the `_get_barcode_nomenclature`: https://github.com/odoo/enterprise/blob/43f65ff2f3c6177cc69647bbb85bb40a84409457/stock_barcode/controllers/stock_barcode.py#L485-L491 Note that passing the context in the arguments of the `main_menu` JSON route will not really solve the issue by it self since the context is no longer shared with the request: c8cd1d4a83de7a5798cbb910a788fbb6fe208d2f ### Additional Issue: The type `dest_location` does not exist on barcode types: https://github.com/odoo/odoo/blob/485a64b6a1e91feb4310f282c6dd1cd021f1780b/addons/barcodes_gs1_nomenclature/models/barcode_rule.py#L16-L20 so that the type used by these lines can not work: https://github.com/odoo/enterprise/blob/1dedc5bbcee43bfd13e55206e3d7364f715ca9be/stock_barcode/controllers/stock_barcode.py#L29-L30 https://github.com/odoo/enterprise/blob/1dedc5bbcee43bfd13e55206e3d7364f715ca9be/stock_barcode/controllers/stock_barcode.py#L52-L56 ### Steps to reproduce: - In the settings enable: Multi-Steps Routes - Set the barcode nomenclature to GS1 - Set your warehouse in receipt in two steps and add a barcode to the WH/Input: 3033710074365 - From the main menu open the barcode app and scan 4133033710074365 #### > No product or picking was found (even thought it is correct in GS1 that should create an internal transfer with WH/INPUT as destination) opw-5847529 Forward-Port-Of: odoo/enterprise#112478 Forward-Port-Of: odoo/enterprise#111662
This update fixes an issue where planned actions (like Dimona/Part Time) were incorrectly triggered for new employees in other countries. Now, these actions are only automatically initiated for employees with Belgian contracts, ensuring accurate payroll processing and compliance with Belgian regulations.
Original PR description
Previously, planned actions (Dimona/Part Time) were triggered for all new employees with a contract start date, regardless of country. Now, the trigger is filtered to only apply to Belgian contracts. task-5942339 Forward-Port-Of: odoo/enterprise#111788
This update corrects a technical issue related to how subscription discounts are handled when importing sales data into the POS system. The change ensures that subscription discounts are correctly identified and processed, preventing potential errors and improving data accuracy. This resolves a previously reported problem impacting subscription-based sales.
Original PR description
This is a test for the related community fix and an override of the **isSaleOrderLineNote** method to add the subscription specific **subscription_discount** lines to be treated as a note when importing it from the Sales module. https://github.com/odoo/odoo/pull/247846 opw-5582448 Forward-Port-Of: odoo/enterprise#112326 Forward-Port-Of: odoo/enterprise#107002
This update resolves a bug that prevented users from successfully undoing rescheduled calendar events. The issue stemmed from an outdated reference to a database field, which caused an error when attempting to revert changes. The fix removes unnecessary data from the system before saving, ensuring smooth operation.
Original PR description
Currently, an error occurs when user tries to undo a calendar event. Steps to replicate: - Install `appointment` with demo data. - Navigate to `Appointments > Schedule > Resource Booking`. - Drag to…
Currently, an error occurs when user tries to undo a calendar event. Steps to replicate: - Install `appointment` with demo data. - Navigate to `Appointments > Schedule > Resource Booking`. - Drag to create a calendar event. - Reschedule the event to a later time (drag and drop forward). - Click Undo on the notification that appears. Error: `ValueError: Invalid field 'originId' in 'calendar.event'` `KeyError: 'originId'` Cause: - The key `originId` was patched in the `getschedule()` [1] and later when user tried to undo the calendar event, the [fallbackschedule] included the key `originId` and made an [orm] call with it. - The [line] tries to write the data into the database where `originId` field doesnt exist and causes the error to occur. Solution: - Remove the `originId` key from `fallbackdata` before the orm call. [1]: https://github.com/odoo/enterprise/blob/e61eef059983bb0cdec4f156fb9283198b379863/appointment/static/src/views/gantt/gantt_renderer.js#L110-L116 [fallbackschedule]: https://github.com/odoo/enterprise/blob/e61eef059983bb0cdec4f156fb9283198b379863/web_gantt/static/src/gantt_renderer.js#L1425 [orm]: https://github.com/odoo/enterprise/blob/e61eef059983bb0cdec4f156fb9283198b379863/web_gantt/static/src/gantt_renderer.js#L1473-L1477 [line]: https://github.com/odoo/enterprise/blob/e61eef059983bb0cdec4f156fb9283198b379863/web_gantt/models/models.py#L248 sentry-7020359653 Forward-Port-Of: odoo/enterprise#112614 Forward-Port-Of: odoo/enterprise#100570
This update resolves an issue where adding recurring prices to subscription products with multiple company setups resulted in an error and prevented recurring plans with a company ID from appearing in the list. The fix ensures that product pricelist items are correctly associated with company IDs, allowing for seamless recurring plan management across multiple companies.
Original PR description
## Issues When adding a line in the *Recurring prices* tab (`product.pricelist.item`) of a product with a `company_id`, a "company inconsistencies" error appears. Also, recurring plans with their…
## Issues When adding a line in the *Recurring prices* tab (`product.pricelist.item`) of a product with a `company_id`, a "company inconsistencies" error appears. Also, recurring plans with their *Company* field set do not appear in the list of recurring plans when adding a line in the *Recurring prices* tab. ## Steps to reproduce 1. Install *Subscription* (`sale_subscription`) 2. Create a second company 3. Create a subscription product and set a company in the *Company* field (`company_id`). 4. In the *Recurring prices* tab, add a line (any recurring plan, any price) 5. **An _Invalid Operation_ error appears: _"Uh-oh! You’ve got some company inconsistencies here"_** For the second issue, after the same 3 first steps: 1. Create a *Recurring Plan* RP with its *Company* field set to the current company 2. On the *Recurring prices* tab of the subscription product, try to add a line with the Recurring plan RP 3. **The Recurring plan RP is missing from the list of available plans.** ## Cause When adding a line to the *Recurring prices* tab, a new `product.pricelist.item` is created, with no `pricelist_id`. The `ProductPricelistItem._compute_company_id` from `sale_subscription` filters out the items that don't have a `pricelist_id`, which is the case for the line we create. Also, the (potentially new) plan has no `company_id` in most cases. https://github.com/odoo/enterprise/blob/ccab0c261040ed995d12dca891caae9596bbe1eb/sale_subscription/models/product_pricelist_item.py#L18-L26 By filtering the items with no `pricelist_id`, nothing is passed to the `super()._compute_company_id`, even though it would also handle cases where the item has a `product_tmpl_id`: https://github.com/odoo/odoo/blob/9c8112d794af1ba84ade8af124967495c2ff8995/addons/product/models/product_pricelist_item.py#L170-L173 opw-5981629 opw-6051978 Forward-Port-Of: odoo/enterprise#109403
This update resolves an issue where tests for Italian tax reports were failing due to missing data required for XML validation. The changes ensure the tests now properly set the necessary 'codice fiscale' field, allowing the validation process to complete successfully. This ensures accurate report generation and compliance.
Original PR description
Description of the issue this commit addresses: Previously, the testing of the xml exports was only done by generating the file and checking its content against a hardcoded one but a fix[^1] changed that so the tests use the real export flow during which an xsd validation is done. As the tests did not expect to go trough the validation, some mandatory values were not present and it now results in a failing validation (caught in except). [^1]: https://github.com/odoo/enterprise/pull/108548 Desired behavior after this commit is merged: The tests set the l10n_it_codice_fiscale field from which are populated the mandatory CodiceFiscaleDichiarante, CodiceFiscale and CFDichiarante for the xsd validation. opw-5707544 Forward-Port-Of: odoo/enterprise#112629
This update corrects a previous issue where partner reports were incorrectly filtered based on negative amounts. Now, all partner totals (positive or negative) exceeding €3,005.06 are included. Additionally, insurance operations now accurately track sales and purchase journal amounts, providing a more complete financial picture.
Original PR description
Before this PR: - Partners were only shown if their total was positive and above 3,005.06 €. Negative totals were hidden, even if they were lower than -3,005.06 €. - Insurance operations only took Purchase journal amounts into account. Amounts from Sales journals were ignored, and there was no distinction between the two types of operations. After this PR: - The report now uses the absolute value of the total. Partners with amounts exceeding 3,005.06 €, whether positive or negative, are now shown correctly. - Insurance operations are now divided into two distinct sections: Sales and Purchases. Amounts from both Sales and Purchase journals are now correctly taken into account and reported in their respective sections. task-5214023 Forward-Port-Of: odoo/enterprise#112321 Forward-Port-Of: odoo/enterprise#100413
This update fixes an error in the Pakistan localization for payroll calculations. Specifically, it corrects a miscalculation of yearly tax when employee salaries exceed a certain threshold (2,200,000 PKR). The change ensures accurate tax deductions are applied, aligning with official Pakistani tax regulations.
Original PR description
Currently, payslip computation for Pakistan localization calculates incorrect tax when the yearly cost exceeds 2,200,000. ### **Steps to Reproduce:** 1) Install…
Currently, payslip computation for Pakistan localization calculates incorrect tax when the yearly cost exceeds 2,200,000. ### **Steps to Reproduce:** 1) Install `l10n_pk_hr_payroll_account`,`hr_contract_salary` with demo data. 2) Switch to PK company. 3) Create an employee and a running contract with yearly cost 2,200,001 4) Create a payslip and compute it from the Salary Computation tab. ### **Observed Behavior:** 'Tax Bracket Yearly' is computed as `122000.24` ### **Expected Behavior:** 'Tax Bracket Yearly' should be `116000.24` ### **Root Cause:** since [commit](https://github.com/odoo/enterprise/pull/98345/commits/62f5e216518d83317618d7dbc0be4db92d1881a3), the tax computation relies on [_l10n_pk_get_tax](https://github.com/odoo/enterprise/blob/a9656336583a4d5c5b12d4d6120ec62ba1cf9151/l10n_pk_hr_payroll/models/hr_payslip.py#L9-L20) , In this method, the `result` is incorrectly accumulated with `fix` when iterating through brackets, leading to an inflated tax value. [official pakistan document](https://download1.fbr.gov.pk/Docs/20258181281745641WHT-RateCard.pdf) ### **Fix:** Use `result = fix` instead of `result += fix` so that the cumulative tax is correctly reset at each bracket. **opw-5979265** Forward-Port-Of: odoo/enterprise#112642 Forward-Port-Of: odoo/enterprise#110939
This update resolves an issue where users couldn't confirm quantities for archived products using the barcode app. The fix ensures that archived products are included in search results, preventing a 'TypeError' and allowing users to accurately manage inventory, just as they would with active products.
Original PR description
Currently, when a user confirms the quantity of an archived product using the product selector in the barcode app, a traceback error occurs. ## Steps to replicate: - Install Inventory - Go to…
Currently, when a user confirms the quantity of an archived product using the product selector in the barcode app, a traceback error occurs. ## Steps to replicate: - Install Inventory - Go to Settings and enable Multi-Step Routes > Set Warehouse Routes. - Configure 2 steps for outgoing shipments. - Go to Inventory and create a new delivery with - **Source Location:** WH/Stock - **Product:** [E-COM10] Pedal Bin with demand 1 - Mark as Todo then Archive the Pedal Bin product. - Open that delivery in barcode app - Pencil icon > +1 > Confirm ## Observed behavior: TypeError: Cannot read properties of undefined (reading 'qty_available') ## Root cause: After this [commit], an override was added to the product selector. As a result, when [2] calls the `search_read` method, it only retrieves non-archived products Consequently, if the result is an empty array, attempting to access `qty_available` causes the type error mentioned above. ## Solution: Adding` active_test = false `to the context ensures that archived products are included in search results. This prevents empty results and avoids the error. It also allows quantities to be added and confirmed,maintaining the same behavior as when using the increment button followed by validation, ensuring consistency. [commit]: https://github.com/odoo/enterprise/commit/6aa814f59f8641d7b57af160e38b50d5bdfc8a97 [2]- https://github.com/odoo/enterprise/blob/e13b44b353e734a6533f7d627ed69b6e7b033ee2/stock_barcode/static/src/js/stock_barcode_sml_form.js#L40-L45 opw-5980428 Forward-Port-Of: odoo/enterprise#112616 Forward-Port-Of: odoo/enterprise#109204
This update resolves an issue where subscription products with a zero sales price wouldn't add to the cart when the 'Prevent Sale of Zero Priced Product' setting was enabled. The fix ensures the system correctly uses the selected subscription plan to determine cart eligibility, allowing users to add these products.
Original PR description
A subscription product that has a price of zero on the product form and the price is set on the pricelist instead cannot be added to the cart when the `Prevent Sale of Zero Priced Product` setting is…
A subscription product that has a price of zero on the product form and the price is set on the pricelist instead cannot be added to the cart when the `Prevent Sale of Zero Priced Product` setting is enabled Steps to reproduce: 1. Install eCommerce and Subscriptions 2. Go to Settings and enable `Prevent Sale of Zero Priced Product` 3. Go to Subscriptions > Products and create a new product "subscription" with Sales Price $0.00 and publish it to the website 4. Go to Subscriptions > Pricelists and edit pricelist "Benelux" 5. In the Recurring Prices tab, create a new entry for product "subscription" with a Fixed Price of $20.00 and a monthly Recurring Plan 6. Log in as portal user, go to the shop and look for "subscription" (pricelist "Benelux" should be selected) 7. Try to add it to the cart 8. Nothing happens and an error is displayed in the log Issue: When we check if a product can be added to the cart https://github.com/odoo/odoo/blob/b1f4647313eb2dbdbbe98b51649604b4e650a8aa/addons/website_sale/controllers/cart.py#L116-L120 we do not use the plan_id specified in kwargs We reach this code https://github.com/odoo/odoo/blob/b1f4647313eb2dbdbbe98b51649604b4e650a8aa/addons/website_sale/models/product_product.py#L146-L147 which will prevent the addition of a product in the cart if the option `prevent_zero_price_sale` is enabled and if `_get_contextual_price` returns zero Calling `_get_contextual_price` tries to find a `product.pricelist.item` by building a domain in `_get_applicable_rules_domain` but calling this method without a plan_id eventually reaches https://github.com/odoo/enterprise/blob/252c5ab78b51d0d2f06178cf92f0489b4a46958f/sale_subscription/models/product_pricelist.py#L69-L72 which restricts the domain to pricelists that are not subscription plans Therefore, we cannot find any pricelist that applies to the product and we consider that the product cannot be added to the cart Solution: We need to use the plan_id selected by the customer in order to correctly check if a product can be added to the cart. Use the plan_id in kwargs to update the request context so we can check if a product can be added to the cart according to the plan_id the user has selected. Use this plan_id in `_get_applicable_rules` in order to correctly select the applicable `product.pricelist.item`. opw-5993614 Forward-Port-Of: odoo/enterprise#111624
This update corrects a display issue in the accounting dashboard where the 'Reconnect Bank' button was incorrectly shown for synchronizations without an expiration date. The change ensures the button only appears when a synchronization has a defined expiration period, aligning with how the system tracks synchronization status.
Original PR description
The aim of this commit is fixing the behavior of Reconnect bank button in accounting dashboard. Before this commit, a synchronization without any expiring date will always show the Reconnect bank button in the accounting dashboard because the expiring due days is set to 0 by default. The sync can only be expired or expiring soon if there is an expiring date. opw-6052451
4 changes
Resolved issues and error corrections
This update fixes an error in the Mod 347 BOE export for Spanish companies, ensuring the correct indicators ('C' and 'S') are used for substitutive and complementary declarations. This prevents the AEAT from misinterpreting the file, ensuring accurate tax reporting and compliance.
Original PR description
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the…
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the `ES company` - Navigate to Accounting > Reporting > Tax Report - From the smart button, select `Report: Tax Report (Mod 347) (ES)` - Download the BOE file using the dropdown. - In the wizard: - Enable `Substitutive Declaration` or `Complementary Declaration` - Set `Previous Report Number` (e.g., 123456789) - Click `Generate BOE` - Upload the generated .txt file to the `AEAT portal`. (AEAT credentials are required) **Observation:** AEAT does not recognize 'X' as a valid indicator for substitutive or complementary declarations and interprets the file as a standard return. **Root Cause:** At [1], the BOE Mod 347 generation writes 'X' for both substitute and complementary declarations. **Fix:** This commit ensures the file contains correct indicators: - 'C' for `complementary declarations` - 'S' for `substitute declarations` This aligns Modelo 347 with AEAT specifications and ensures consistency with the implementation of Modelo 349 at [2]. Ref: https://sede.agenciatributaria.gob.es/Sede/en_gb/ayuda/consultas-informaticas/declaraciones-informativas-ayuda-tecnica/modificar-declaracion-informativa-mediante-fichero.html [1]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1061-L1062 [2]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1490-L1491 opw-6048711 Forward-Port-Of: odoo/enterprise#112566
This update resolves a technical issue where reports were loading indefinitely, consuming excessive memory. The fix ensures reports stop loading when the component is destroyed, preventing memory buildup and improving system performance. This enhances the stability and responsiveness of the reporting feature.
Original PR description
The preloading of sections would never stop, this is an issue since this would prevent the garbage collector from collecting this big class and all it's objects. We fix this by making sure to stop the reploading when the component is destroyed. It's important to do it this way rather than clearing the timeout as the destruction could happened when the report is loading so the timeout would be unset and a new one would be started. Forward-Port-Of: odoo/enterprise#112662 Forward-Port-Of: odoo/enterprise#112628
This update ensures our accounting software accurately reflects the latest Ecuadorian withholding tax regulations (Resolución N.º NAC-DGERCGC26-00000009) for 2026. The changes involve updating internal test procedures to align with these new tax percentages, ensuring accurate reporting and compliance.
Original PR description
In accordance with the implementation of the new withholding tax percentages according to "Resolución N.º NAC-DGERCGC26-00000009" for Ecuador, following internal implementation guidelines by TRESCLOUD. Unit tests are updated to be based on the new withholding percentages. BP #110343 Forward-Port-Of: odoo/enterprise#110879 Forward-Port-Of: odoo/enterprise#110712
This update fixes a confusing issue in Odoo's Web Studio where a purple 'info' pill appeared on action buttons for mobile users. This prevented users from easily clicking the intended buttons, leading to a frustrating experience. The change removes this unnecessary element, streamlining the mobile interface.
Original PR description
Steps: - Install `web_studio` - Add an approval rule to any action in any form view (example preview button) - Open this form view - You will have a purple info pill in every action button in the form view This can be confusing for people wanting to click on the button on mobile but instead, they click on the purple pill + we don't even want this opw-5911667 Forward-Port-Of: odoo/enterprise#111770
4 changes
Resolved issues and error corrections
This update fixes an error in the Mod 347 BOE export for Spanish companies, ensuring the correct indicators ('C' and 'S') are used for substitutive and complementary declarations. This prevents the AEAT from misinterpreting the file, ensuring accurate tax reporting and compliance.
Original PR description
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the…
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the `ES company` - Navigate to Accounting > Reporting > Tax Report - From the smart button, select `Report: Tax Report (Mod 347) (ES)` - Download the BOE file using the dropdown. - In the wizard: - Enable `Substitutive Declaration` or `Complementary Declaration` - Set `Previous Report Number` (e.g., 123456789) - Click `Generate BOE` - Upload the generated .txt file to the `AEAT portal`. (AEAT credentials are required) **Observation:** AEAT does not recognize 'X' as a valid indicator for substitutive or complementary declarations and interprets the file as a standard return. **Root Cause:** At [1], the BOE Mod 347 generation writes 'X' for both substitute and complementary declarations. **Fix:** This commit ensures the file contains correct indicators: - 'C' for `complementary declarations` - 'S' for `substitute declarations` This aligns Modelo 347 with AEAT specifications and ensures consistency with the implementation of Modelo 349 at [2]. Ref: https://sede.agenciatributaria.gob.es/Sede/en_gb/ayuda/consultas-informaticas/declaraciones-informativas-ayuda-tecnica/modificar-declaracion-informativa-mediante-fichero.html [1]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1061-L1062 [2]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1490-L1491 opw-6048711 Forward-Port-Of: odoo/enterprise#112566
This update resolves a technical issue causing excessive memory usage in the account reports module. The fix ensures that report preloading stops when the component is destroyed, preventing a memory buildup that could impact performance. This improves the stability and responsiveness of the account reporting feature.
Original PR description
The preloading of sections would never stop, this is an issue since this would prevent the garbage collector from collecting this big class and all it's objects. We fix this by making sure to stop the reploading when the component is destroyed. It's important to do it this way rather than clearing the timeout as the destruction could happened when the report is loading so the timeout would be unset and a new one would be started. Forward-Port-Of: odoo/enterprise#112662 Forward-Port-Of: odoo/enterprise#112628
This update resolves an issue where the 'Move to Work Center' dialog would sometimes fail with an error. The fix allows the dialog to function correctly regardless of how it's opened – either by fetching work centers or using pre-loaded data. This ensures a smoother experience for users managing work orders.
Original PR description
**Steps to reproduce:** * Install the *Manufacturing (`mrp`)* module. * Enable *developer (debug) mode*. * Open the *Shop Floor* interface. * Select work center as `Assembly 1` * In the bottom-right…
**Steps to reproduce:**
* Install the *Manufacturing (`mrp`)* module.
* Enable *developer (debug) mode*.
* Open the *Shop Floor* interface.
* Select work center as `Assembly 1`
* In the bottom-right corner, click the *gear icon*.
* Select **Move to Work Center** from the *gear icon*.
**Observed behavior:**
* A traceback occurs when opening the *Move to Work Center* dialog.
* The following Owl error is raised:
`OwlError: Invalid props for component 'MrpWorkcenterDialog': 'loadWorkcenters' is missing (should be a function)
Error: Invalid props for component 'MrpWorkcenterDialog': 'loadWorkcenters' is missing (should be a function)`
**Cause:**
* `MrpWorkcenterDialog` is opened in *two different ways*:
https://github.com/odoo/enterprise/blob/7805022e77ff80a74563b7ff0032d8975c00b709/mrp_workorder/static/src/mrp_display/mrp_display.js#L469-L480
* One caller opens the dialog and provides `loadWorkcenters`.
In this flow, the dialog fetches work centers by calling this
function.
https://github.com/odoo/enterprise/blob/7805022e77ff80a74563b7ff0032d8975c00b709/mrp_workorder/static/src/mrp_display/dialog/mrp_menu_dialog.js#L68-L76
* Another caller opens the dialog and directly provides a
`workcenters` list. In this flow, the dialog already has the data
and does not need `loadWorkcenters`.
* Therefore, the real behavior is that `loadWorkcenters` is only
required *sometimes*, not always.
* However, the component props defined it as mandatory:
`loadWorkcenters: { type: Function }`
* In *debug mode*, Owl strictly validates component props by comparing
what the component declares in `static props` with what the caller
provides. When the dialog is opened without `loadWorkcenters`, Owl
detects that a required prop is missing and raises an
*Invalid props* error.
**Fix:**
* Mark `loadWorkcenters` as *optional* in the component props so the
dialog works correctly in both supported flows:
* Lazy loading of work centers via `loadWorkcenters`.
* Using preloaded `workcenters` data.
---
opw-6010261
Forward-Port-Of: odoo/enterprise#110361This update removes a confusing purple button pill that appeared on mobile devices when using Web Studio's approval features. This change improves the user experience for mobile users, preventing them from accidentally clicking on the pill instead of the intended action button. It's a simple fix to enhance usability.
Original PR description
Steps: - Install `web_studio` - Add an approval rule to any action in any form view (example preview button) - Open this form view - You will have a purple info pill in every action button in the form view This can be confusing for people wanting to click on the button on mobile but instead, they click on the purple pill + we don't even want this opw-5911667 Forward-Port-Of: odoo/enterprise#111770
34 changes
Enhancements to existing features
This update ensures each job position is linked to only one company, simplifying job management and reducing potential confusion. When a job position is created, the current company is automatically set. Additionally, demo data has been updated to consistently use 'My Company (San Francisco)' for empty company records.
Original PR description
Purpose A job position cannot be linked to multiple company. 1 JP = 1 company Specifications Remove the "Visible to all" possibility On Jon position At creation set the current company Adapt runbot data: All empty company must be My Company (San Fransisco) Task-6064945
This update strengthens Odoo's dynamic analysis capabilities by providing more granular error handling and optimizing object validation. It improves security by centralizing object checks and enhances performance by leveraging reference-based validation for frequently used objects. This ensures safer execution of dynamic code within Odoo.
Original PR description
[x] add granularity for `UnsafeObjectError` [x] complete auto checked objects [x] add hook for bound object and C descriptors Fixes: [x] add "no-operation" iterators check [x] define module for custom functions [x] centralize object validation in `_SafeWhitelist` Task-6041164
This update simplifies how data is sent to client applications by introducing a more efficient method for converting data to JSON. Previously, versioning complexities caused performance issues and made updates difficult, now data is delivered more smoothly and reliably.
Original PR description
To feed data to the client, discuss uses the Store class, which eventually transforms collected data into a dict using `get_result`. The `@store_version` decorator then injects a version so the client can distinguish stale from new data. This approach has several drawbacks. Each method expecting a versioned result must be decorated, but the version is only correct once all changes are flushed and assigned a transaction id. Returning the raw dict makes overrides cumbersome, and bus notifications require complex logic to enqueue and send them only once the version is available. This commit solves these issues by implementing an `as_dict` method on Store. Both bus notifications and the HTTP stack use this method to convert objects into JSON. The version is now fetched once, at the very end, and the Store instance can be returned, making overrides easier and reducing boilerplate. part of task-5242369 https://github.com/odoo/enterprise/pull/112159
This update improves the RFQ list view by adding key information like receipt status and expected arrival dates. This eliminates the need for users to manually check purchase records, streamlining the procurement process and ensuring data consistency across purchase and purchase order views.
Original PR description
Adding `receipt status` and `expected arrival date` to the RFQ list view, allowing users to avoid opening records manually to check this data and ensure consistency with the Purchase Order list view. TaskID-6013968
This update allows maintenance stages to be assigned to specific teams, providing greater control and organization for maintenance workflows. Previously, all teams shared the same maintenance stages. Now, requests will automatically filter to only show stages authorized for the team assigned to the maintenance request, improving efficiency and accuracy.
Original PR description
Currently, maintenance stages are global and shared across all teams. This improvement allows stages to be restricted to one or more maintenance teams, or left empty to remain available to all teams.…
Currently, maintenance stages are global and shared across all teams. This
improvement allows stages to be restricted to one or more maintenance teams,
or left empty to remain available to all teams.
- Add 'maintenance_teams' M2M field to 'maintenance.stage' model.
- Update tree view to display maintenance teams using many2many_tags.
- Create a new form view for stages to allow team selection.
- Add domain to 'stage_id' on maintenance requests to filter by team.
- Update '_get_default_team_id' to infer the correct team when creating
requests from specific Kanban columns.
- Enhance '_compute_maintenance_team_id' to maintain consistency between
the request team and the equipment's assigned team.
- Add onchange on 'maintenance_team_id' to automatically reset the
stage to the first valid option when the team changes.
- Update '_read_group_stage_ids' to get only the stages that the
maintenance team can work on.
task-5104582
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-prThis update optimizes the way the system checks user group memberships, speeding up the attendance process. By running these checks concurrently, the system responds faster and reduces potential delays. This change improves the overall user experience.
Original PR description
In AttendanceActionHelper, replaced two sequential user.hasGroup() calls with Promise.all() so both requests fire simultaneously, reducing the time window during which the component is vulnerable to destruction. **Task: 5972786** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves product labels by displaying the base unit price alongside the regular product price, ensuring accurate pricing information is printed. This change consolidates label formats and adapts to pricelist settings, enhancing clarity for customers and internal reporting. It also streamlines the process for generating labels.
Original PR description
### redo of #185040 (Part 2) ### Part 1: odoo/odoo#247010 Priced and unpriced product label formats were consolidated to avoid duplicate code. The option to print the price is now a separate option in the view. The pricelist field is hidden from the view if the price isn't set to be printed. Additionally, it is now possible to print the price on every product label format, as well as the base unit price, if enabled and set. NB: The branch is based on odoo/odoo#247010, to be merged thereafter. The duplicate commit will disappear from this PR after a rebase. TODO: ~~Migrate ZPL labels from `stock` to `product`.~~ TODO: ~~Use pricelists for base unit prices too, not just product prices.~~ Task ID: [4277792](https://www.odoo.com/odoo/my-tasks/4277792)
This update optimizes the website's attribute filters, ensuring that only relevant product options are displayed on the shop page. This change improves page loading speed and provides a smoother user experience for customers browsing products. It's a key enhancement to our website's performance.
Original PR description
Change the current behaviour of the Attributes filters by displaying only the values that are relevant on the loaded /shop page. task-4423954 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the Odoo website form builder by allowing users to insert 'Title', 'Text', and 'Separator' snippets between existing form fields. Previously, the '+ Field' button only added fields after the selected one, limiting design flexibility. This change simplifies the process of creating more complex and visually appealing forms.
Original PR description
Currently, the "+ Field" button only supports adding a field after the selected one, making it difficult to insert snippets in between. This commit extends the feature to also allow inserting "Title", "Text", and "Separator" snippets after a selected field. task-5436870
This update allows businesses to specify unique units of measure (UoMs) and packagings for individual product variants. Previously, UoMs were only configurable at the product template level. This change restores a previous functionality, providing greater control over how variants are tracked and sold, particularly for products with diverse packaging options.
Original PR description
This commit enables defining dedicated units of measure, or packagings per product variant. Since 18.1, it was only possible to set UoMs on the template level. However, before 18.1, it was possible to define different packagings on the variant level. This commit partially restores the old behavior, and users can select dedicated UoMs on the variant from the new field `extra_uom_ids`. Task-5152612
Resolved issues and error corrections
This update resolves a critical issue where the inventory valuation report crashed with large product catalogs (300k+). By optimizing how the report accesses product data, it now runs smoothly and efficiently, even with extensive product lists. This ensures the report is usable for all users.
Original PR description
Behavior before: Opening the inventory valuation report on databases with 300k+ products (storable) caused an out-of-memory (OOM) error, making the report completely unusable at this scale. Behavior…
Behavior before: Opening the inventory valuation report on databases with 300k+ products (storable) caused an out-of-memory (OOM) error, making the report completely unusable at this scale. Behavior after: The inventory valuation report loads successfully and efficiently for 300k+ products without any memory errors or RAM spikes. Root Cause: In `_get_accounts_by_product()`, querying all storable products creates a massive recordset. When iterating through this recordset, the call to `_get_product_accounts()` accesses various relational and property fields (like categories and accounts). Because standard ORM prefetching was active, accessing these relational fields on the first loop iteration triggered a massive batch-fetch for all 300k+ products in the recordset simultaneously. This cascading prefetch overloaded the environment cache and caused an immediate OOM crash. Fix: Wrapped the `_get_accounts_by_product()` call in `with_context(prefetch_fields=False)`. This disables the greedy batch-loading behavior across the entire recordset. The ORM now fetches the required relational accounting fields surgically, record-by-record inside the loop, maintaining a minimal memory footprint and preventing the crash. Benchmark: | Products Count | Memory Before | Memory After | Time Before | Time After | |------------------------|-------------------------|----------------------|------------------- |----------------| | 300k+ | Memory Error | 1.1. GB | 46.63 s | 1.9 m | | 200k | Memory Error | 566.4 MB | 1.2 m | 1 m | | 100k | 873.1 MB | 286.8 MB | 36.74 s | 32.15 s | | 50k | 442.1 MB | 145.6 MB | 18.96 s | 17.65 s | opw-5462037 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#253331
This update corrects a display issue in the PEPPOL configuration settings for branch companies. Previously, branches using their parent company's VAT for PEPPOL registration saw a default 'Sending and receiving' role displayed. This has been fixed to ensure branches can only manage sending, improving the system's usability and aligning with business requirements.
Original PR description
In v19.0 -> master, if a branch company used the VAT of the parent company to register for peppol, the peppol participation role would be shown in the configuration settings, with a default value being "Sending and receiving", And since branches in this case should be able to ONLY send, the setting shouldnt be visibile to the user. task-none Forward-Port-Of: odoo/odoo#256820
This update resolves a technical issue where the Bluetooth caliper driver was sending measurement data without a confirmation status. This caused the frontend to incorrectly display a fake disconnection warning. The fix ensures the frontend receives complete measurement data with a status flag, eliminating the warning and improving the user experience.
Original PR description
When a measurement was successfully read via Bluetooth, the driver broadcasted the `value` without the `status` flag. The frontend JavaScript received the `value` but rejected the payload because the `status` was not explicitly marked as successful, leading to a fake disconnection warning. opw-5473691 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256860
This update fixes an issue preventing the successful import of orders with line-level charges (like allowances). The fix ensures quantity keys are correctly applied to both regular order lines and allowance charges, resolving an error that caused import failures. Added tests confirm the import process now works as expected.
Original PR description
When importing orders with line-level charges, the import would fail because the `quantity` key was not being renamed to correct quantity keys (`'product_uom_qty'` for sale order and `'product_qty'` for purchase order) for allowance charge lines. The issue occurred because the key renaming was only applied to the main lines_vals list after calling `_import_lines()`, but not to the `allowance_charges_line_vals` that were created separately. Also the key for taxes returned in `_get_line_vals_list` method in `purchase.order` model is `'taxes_id'` which is not aligned with the `purchase.order.line` model. This fix properly handles the quantity key renaming for both regular lines and allowance charge lines and updates `'taxes_id'` key value to `'tax_ids'`, preventing the AttributeError when accessing the quantity key during order line creation. Forward-Port-Of: odoo/odoo#256466 Forward-Port-Of: odoo/odoo#245411
This update fixes issues where the Click & Collect widget incorrectly displayed product availability, particularly for products without inventory tracking or those excluded by tags. The changes ensure accurate availability information is shown to customers, resolving a potential frustration and improving the shopping experience.
Original PR description
This PR addresses three edge cases in the Click & Collect and Delivery availability widget where incorrect availability states were being shown to the user. Before this PR: * If a product variant had…
This PR addresses three edge cases in the Click & Collect and Delivery availability widget where incorrect availability states were being shown to the user. Before this PR: * If a product variant had a tag excluding it from Click & Collect, the logic bypassed the entire stock preparation block. This resulted in the variant falsely hiding the standard Delivery option and showing C&C as unavailable. * Products that are not tracked in inventory (consumables/services) were not properly displaying the availability widget with all options open (bypassing stock checks). * If a product variant was excluded from standard delivery methods via tags, the delivery portion of the widget would still incorrectly render on the frontend. After this PR: * The C&C `excluded_tag_ids` check is moved further down so it only restricts the generation of `in_store_stock_data`. Standard `delivery_stock_data` is now evaluated independently. * *Untracked products now correctly bypass standard stock checks and display all available widget options as expected. * Standard delivery carriers are now explicitly filtered against the product's tags (`dm.excluded_tag_ids & product_tags`). If all available delivery methods are excluded, the delivery stock data is correctly omitted, hiding the section. opw-5990419
This update fixes a previous issue where tax names were displayed in English for Spanish users. Now, all tax names are correctly shown in Spanish, improving the user experience for Spanish-speaking customers and ensuring compliance with local regulations. This change was made as part of a standard maintenance update.
Original PR description
It was a previous dev in which the fw-port failed. Here is the old [PR](https://github.com/odoo/odoo/pull/238857) The tax names were displayed in English, and it's confusing for the Spanish users. Now, the taxes are displayed in spanish task-6041023 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256706 Forward-Port-Of: odoo/odoo#255074
This update resolves an issue where the meeting panel appeared unreadable in light themes due to an unintended color inversion. The PR removed a conflicting style class, restoring the panel's original design and ensuring optimal visibility for users.
Original PR description
Before this PR, .o-simulateDarkTheme is applied to the panel in meeting mode. This class inverts the text color, making it white on white. This PR removes the class, which seems to have been applied by mistake. task-6054300 Before: <img width="776" height="1009" alt="image" src="https://github.com/user-attachments/assets/6d7ad6c3-6593-43ba-9101-c8960f3e649f" /> After: <img width="766" height="994" alt="image" src="https://github.com/user-attachments/assets/0cf6b3b6-388c-44bc-b697-760132c06ede" /> Forward-Port-Of: odoo/odoo#255284
Archived accounts are also searched when looking for duplicate codes since https://github.com/odoo/odoo/commit/cd8d9718427e48aaa79be21f9a08e89b79b573f9 We need to check archived accounts as well when creating the unaffected earnings account, to avoid triggering the validation if an archived account has the same code. This is failing on upgrades with `l10n_sa` installed where the account `sa_account_999999` has been archived. Forward-Port-Of: odoo/odoo#256112
Original PR description
Archived accounts are also searched when looking for duplicate codes since https://github.com/odoo/odoo/commit/cd8d9718427e48aaa79be21f9a08e89b79b573f9 We need to check archived accounts as well when creating the unaffected earnings account, to avoid triggering the validation if an archived account has the same code. This is failing on upgrades with `l10n_sa` installed where the account `sa_account_999999` has been archived. Forward-Port-Of: odoo/odoo#256112
This update fixes a technical issue where syncing cancelled events from Microsoft Calendar would sometimes cause an error. Now, when a cancelled event is synced, Odoo correctly handles it, preventing errors and ensuring accurate event synchronization. This improves the reliability of our calendar integration.
Original PR description
Before this commit, when syncing events from Microsoft, if there was a cancelled event that was not yet synchronized with Odoo, calling browse on event.odoo_id would raise an error as it would be None. opw-5917677 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256827
This update resolves an issue where Odoo displayed a misleading warning message to users when a password wasn't provided during file uploads. Now, the system correctly checks for a password during saving, eliminating the unnecessary warning and improving the user experience. This ensures consistent behavior and prevents confusion for users.
Original PR description
Before the change, when the user uploads a file, Odoo automatically shown a warning message saying that the content of the file or the password are incorrect. Now the system does not show the warning when a password is not set and checks if the password is set when saving task-6036219 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256759 Forward-Port-Of: odoo/odoo#253834
## Issue When using date_range in a `ir.sequence`, the placeholders `%(...)s` would be based on a different date than the sequence number. ## Steps to reproduce This is one example among other use cases causing this issue. 1. Install *Sales* (`sale_management`) 2. In Settings > Technical > Sequences, select the `sale.order` sequence - Set the Prefix to something containing the current month (e.g. `S%(y)s/%(month)s/`) - Enable *Use subsequences per date_range* (`ir.sequence.use_d
Original PR description
## Issue When using date_range in a `ir.sequence`, the placeholders `%(...)s` would be based on a different date than the sequence number. ## Steps to reproduce This is one example among other use…
## Issue
When using date_range in a `ir.sequence`, the placeholders `%(...)s` would be based on a different date than the sequence number.
## Steps to reproduce
This is one example among other use cases causing this issue.
1. Install *Sales* (`sale_management`)
2. In Settings > Technical > Sequences, select the `sale.order` sequence
- Set the Prefix to something containing the current month (e.g. `S%(y)s/%(month)s/`)
- Enable *Use subsequences per date_range* (`ir.sequence.use_date_range`)
- Add a row for the current month, with *Next Number* set to 1
- Add a row for the next month, with *Next Number* set to 5
3. Create a Sales Order:
- Any Customer
- Any Product
- Set the *Quotation Date* to next month
- Confirm
4. **The resulting Sales Order uses the sequence from next month (= its name ends with 5), but replace the `%(month)s` placeholder by the current month.**
<img width="541" height="130" alt="image" src="https://github.com/user-attachments/assets/6ace81f9-1ce2-4401-a9ba-383673a20981" />
The original issue reported by ticket 5950028 showed a similar issue with dropshipped Purchase Orders, which would use the date of delivery for the sequence number, and the current month for the placeholder in the prefix/suffix.
## Cause
When interpolating the prefix/suffix of a sequence, the date used by default is `datetime.now(self.env.tz)`. If provided, the context keys `ir_sequence_date` and `ir_sequence_date_range` are used instead.
https://github.com/odoo/odoo/blob/877289cf4d9725e12b355f482308150fe170e816/odoo/addons/base/models/ir_sequence.py#L211-L216
In the `IrSequence._next` method, the correct `ir.sequence.date_range` is chosen, based on the sequence date provided (which is the *Quotation Date* in our steps to reproduce) and the `ir_sequence_date_range` is passed as a context key to be used in the `_interpolation_dict` function later.
https://github.com/odoo/odoo/blob/98e6e929bf8e0c34ec77fb9d07ef253e0abf681c/odoo/addons/base/models/ir_sequence.py#L261-L270
**The `ir_sequence_date` is not passed as a context key, which will make `_interpolation_dict` use `datetime.now(...)` to interpolate the placeholders in the prefix/suffix.**
opw-5950028
Forward-Port-Of: odoo/odoo#256449
Forward-Port-Of: odoo/odoo#256320This update corrects a technical issue that prevented the system from properly receiving data from serial scales. The team refactored a key method, and a subsequent change inadvertently removed a necessary connection parameter. This fix ensures accurate data collection from serial scales, improving data reliability.
Original PR description
The `_get_raw_response` method was refactored to be static, but a fw port broke its use by missing to provide the serial connection object as parameter. Forward-Port-Of: odoo/odoo#256816
This update resolves a visual glitch that appeared when formatting tables within the To-Do module. Specifically, applying formatting like bold would create unexpected blank lines above the table. The fix prevents styling of system nodes, ensuring a consistent and correct table layout.
Original PR description
Steps to Reproduce - Go to To-Do - Add a table - Type content inside the table - Select all using Ctrl + A - Apply formatting (e.g., Bold) Description of the issue: An empty line appears above the table and the layout shifts unexpectedly after applying formatting. Cause: `data-selection-placeholder` nodes exist before and after the table. These nodes normally have zero height. When selecting all content, these placeholder nodes are also included in the selection. Applying formatting styles them as well, which changes their height from zero. As a result, they become visible and appear as newly added blank lines, even though no new line was actually inserted. Solution Exclude system nodes, such as selection placeholder elements, from formatting operations. This prevents them from being styled and avoids unintended layout shifts. task-5976361 Forward-Port-Of: odoo/odoo#256235 Forward-Port-Of: odoo/odoo#252416
This update corrects a flaw in how timesheet statistics were calculated, ensuring accurate reporting across multiple projects. The previous method would miss calculations when multiple projects were involved, leading to incomplete data. This fix ensures all projects are correctly accounted for in timesheet reports.
Original PR description
**Description:** The issue is raised in this pr(v19.2) : https://github.com/odoo/odoo/pull/236971 The compute method used a…
**Description:**
The issue is raised in this pr(v19.2) : https://github.com/odoo/odoo/pull/236971
The compute method used a [`return`](https://github.com/odoo/odoo/pull/236971/changes#diff-4e1a18a369f7dd4de264139227676dd818c06612681c88019f43d238bd8a1490R91) statement when a `if condition` was met. While this works correctly for a single record, it causes issues when multiple records are present.
**For example**, if `self` contains records like `project.project(3, 2, 4)`, and the condition **is satisfied** for the first `record (3)`, the method exits early. As a result, the remaining `records (2 and 4)` are **not** processed.
When the compute method is [triggered](https://github.com/odoo/odoo/blob/8c3043b436f8aae295f247341e3ac427fab05474/odoo/orm/fields.py#L1746) this incomplete computation leads to
missing values for some records and can result in errors.
**Solution:**
To resolve this issue, `return` has been replaced with `continue`.
This ensures that:
Only the current record is skipped when the condition is satisfied and the loop continues processing the remaining records.
**Traceback:**
```.py
Traceback (most recent call last):
File "/tmp/tmp2cuqrnuy/migrations/testing.py", line 483, in test_check
self.check(value)
File "/tmp/tmp2cuqrnuy/migrations/base/tests/test_mock_crawl.py", line 228,
in check
self.assertFalse(diff, msg)
AssertionError: [('project.menu_projects', 391, 'Project > Projects', 593)] is
not
false : At least one menu or view working before upgrade is not working after
upgrade.
('project.menu_projects', 391, 'Project > Projects', 593):
Traceback (most recent call last):
File "/tmp/tmp2cuqrnuy/migrations/base/tests/test_mock_crawl.py", line
335, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmp2cuqrnuy/migrations/base/tests/test_mock_crawl.py", line
348, in mock_action
return self.mock_act_window(action)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/tmp2cuqrnuy/migrations/base/tests/test_mock_crawl.py", line
508, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmp2cuqrnuy/migrations/base/tests/test_mock_crawl.py",
line 541, in mock_view_form
[data] = record.read(fields_list)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.2/odoo/orm/models.py", line 2735, in read
return self._read_format(fnames=fields, load=load)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.2/odoo/orm/models.py", line 2991, in
_read_format
vals[name] = convert(record[name], record, use_display_name)
~~~~~~^^^^^^
File "/home/odoo/src/odoo/saas-19.2/odoo/orm/models.py", line 6007, in
__getitem__
return self._fields[key].__get__(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.2/odoo/orm/fields.py", line 1805, in
__get__
raise ValueError(f"Compute method failed to assign {missing_recs}.{self.name}")
ValueError: Compute method failed to assign
project.project(2, 4).stat_timesheet_value
```
opw-6046808
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#256048This update resolves issues related to accessing records and simplifies how Odoo handles relationships between data. Specifically, it ensures previously accessible records are correctly fetched, even if permissions change, and streamlines the way lists of IDs are used in relational queries.
Original PR description
## handle relational x2m 'in' in domain Simplify the `condition_to_sql` implementation of x2many relational fields so that comparisons with a list of ids is translated into an already implemented `any` operator. (test_send_survey fails with access error) ## orm: fetch previously accessible record Given that we have a cache of read permissions, the record may be inaccessible from the query, however it was marked as accessible. In such a case, `Model.fetch` should be executed in sudo and not fail. (test_scheduled_message_model_without_post_right fails) ## mail: res_acces in mail.scheduled.message Reading and searching access is not aligned. Implement a similar logic to what is in the mail.activity module. (ok) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the user experience by adding a zoom feature to product images within the Product, Expenses, and Point of Sale modules. Previously, users couldn't easily examine detailed product information. This change provides a better visual inspection experience for products, particularly in the Point of Sale and Expense tracking workflows.
Original PR description
This PR enables the zoom feature for product images across the **Product**, **Expenses**, and **Point of Sale** modules. Currently, some product views display images without the zoom capability. This makes it difficult for users to inspect smaller details of a product. Enabling the `zoom` option on the `image_1920` widget provides a more consistent UI. ### **Changes** Added zoom to the following modules: **hr_expense** (product variant), **point_of_sale** (product view), and **product** (template and variant views). **Task ID: 6003499** Forward-Port-Of: odoo/odoo#255568
This update fixes issues where the table editor's menu wouldn't appear correctly when hovering over lists within table cells, and where the menu could overflow. It now ensures menus display properly and updates dynamically when the table cell changes, enhancing the user experience and stability of the table editor.
Original PR description
**Current behavior before PR:** - Table menu handlers could overflow into adjacent table areas when the targeted part of the table was only partially visible within the container. - When a table cell contained a list, hovering over the list element did not display the table UI menus, even though the mouse was inside the cell. **Desired behavior after PR is merged:** - Use a local overlay for the table menu to prevent overflow into adjacent cells. - Table UI menus are now correctly displayed when hovering over list elements inside a table cell. task-5353518 Forward-Port-Of: odoo/odoo#254802 Forward-Port-Of: odoo/odoo#240342
This update resolves an issue where journal codes were overlapping in certain languages, like Hebrew, leading to installation problems. The change increases the journal code length to 7 characters, preventing conflicts and ensuring consistent accounting functionality across all supported languages. This improves the stability and reliability of the accounting module.
Original PR description
When generating journals with some languages, such as Hebrew, codes overlap violating the constraint _code_company_uniq. This commit will prevent that from happening by increasing the 5 character constraint to 7. Also removed the "magic number" to be used dynamically. Reproduction steps: - Create a fresh database - Set company language to Hebrew - Attempt to install accounting Enterprise PR: odoo/enterprise#110710 Ticket [link](https://www.odoo.com/odoo/project.task/6001568) opw-6001568
This update resolves an issue where field widgets in settings panels were incorrectly stretching to 100% width, causing layout problems. The fix uses a CSS technique to ensure that module-specific styling (like settings or custom views) takes precedence, restoring the intended 50% width for elements like the helpdesk email alias row.
Original PR description
**Issue:** odoo/odoo#250051 consolidated multiple `width: 100%` rules into a single broad selector: .o_form_view .o_form_sheet .o_field_widget:not(…) { width: 100% } This broadened scope from…
**Issue:**
odoo/odoo#250051 consolidated multiple `width: 100%` rules into a single broad selector:
.o_form_view .o_form_sheet .o_field_widget:not(…) { width: 100% }
This broadened scope from `.o_group/.o_inner_group` to the entire `.o_form_sheet`, which was needed for the new `o_input_box` overlay system. However, the high specificity (0,4,0) now overrides any module-specific rule with lower specificity, such as setting.scss's `width: 50%` rule (0,3,0) for `<setting>` blocks.
This broke settings panels: field widgets stretched to 100% width instead of 50%, causing overflow in layouts like the helpdesk team email alias row.
**Fix:**
wrap the field widget portion of the selector in `:where()`.
The `:where()` CSS pseudo-class works identically to `:is()` in terms of what it matches, but always contributes zero specificity.
(ref: https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity)
(ref: https://developer.mozilla.org/en-US/docs/Web/CSS/:where)
```
Before (A=0, B=4, C=0):
.o_form_view .o_form_sheet .o_field_widget:not(…)
↑(0,1,0) ↑(0,1,0) ↑(0,1,0) ↑(0,1,0)
After (A=0, B=2, C=0):
.o_form_view .o_form_sheet :where(.o_field_widget:not(…))
↑(0,1,0) ↑(0,1,0) ↑(0,0,0) ← :where zeroes this
```
The rule still matches every field widget in the form sheet, but now any component-specific override (settings, helpdesk, custom views) wins naturally without needing specificity hacks.
CSS specificity tiebreaker order:
```
A: inline styles > B: IDs > C: classes/attrs/pseudo-classes
Equal specificity → last rule in source order wins
```
task-6005002
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where POS discounts weren't being applied correctly when orders were modified. By updating the global discount automatically, the system now accurately reflects any changes to order discounts, ensuring accurate pricing and refunds for customers. This improves the reliability of the Point of Sale system.
Original PR description
This commit uses an effect to update the global discount when changing the order. Fix the refound in when global discount since it was handeling only on discoud line where there could be various (one discount line per tax). Task-5421479 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#252194 Forward-Port-Of: odoo/odoo#241605
This update streamlines the settings search by focusing only on key field information like labels and descriptions. Previously, the search was unreliable due to performance limitations, resulting in inconsistent results across different pages. This change ensures a more reliable and predictable search experience for users.
Original PR description
Before this commit, the settings search scanned the inner HTML and text of the current page, including radio widget labels, buttons, and other miscellaneous text. However, due to performance constraints, this deep scanning was not possible on subsequent pages. This led to inconsistent results depending on which page the user was on when they started the search. This commit simplifies the search behavior to ensure consistency across all pages by limiting the search scope to specific field metadata: labels, help text, title text (tooltips), and info text. task-6004912
This update ensures that stored field values in Odoo are consistent and don't rely on contextual information. Previously, these values could be unreliable due to caching issues, particularly with related 'x2m' fields. This change improves data accuracy and stability, especially after recent updates to the x2m field caching system.
Original PR description
Stored values cannot depend on the context because they have a single stored value. We have a few exceptions: - "lang" for translated fields - "company" for company-dependent fields task-2903826 Fix x2m related fields after the cache pollution fix odoo/odoo#254944: the related x2m fields need to be computed in sudo to fill the cache with all values. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Code cleanup and technical improvements
This update ensures Odoo's cron jobs maintain transactional consistency by adding a rollback function. Previously, using these functions outside of cron jobs could disrupt data integrity. This change enhances the reliability of automated processes within Odoo.
Original PR description
For the symmetry of the API, adding `_rollback_progress` to `_commit_progress`. This also allows us to check which commits or rollbacks are used in models, because using them in models outside of cron jobs breaks the transactional behaviour of Odoo. https://github.com/odoo/enterprise/pull/112717 https://github.com/odoo/documentation/pull/17206 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances Odoo's email functionality by improving the efficiency of batch processing and adding comprehensive tests. Specifically, the changes address recent code modifications and incorporate new features like voice trace support, ensuring reliable email delivery and performance. The work also includes cleanup and documentation improvements within the email modules.
17 changes
Enhancements to existing features
This update simplifies the bank account synchronization process. Instead of a multi-step selection process, users can now simply click a card to confirm and initiate the bank sync. This change streamlines the workflow and improves usability for connecting bank accounts.
Original PR description
Description of the issue/feature this PR addresses: We want to change the UX of the bank sync process. Current behavior before PR: The bank sync requires a radio button selection, followed by a second confirmation button. Desired behavior after PR is merged: The bank sync is confirmed upon clicking a card task-6076171 runbot-https://runbot.odoo.com/runbot/bundle/190-account-selection-wizard-andha-455262 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update fixes an issue where the Mod 347 BOE export used incorrect indicators for substitutive and complementary declarations, preventing proper submission to the Spanish tax authority (AEAT). The change ensures the correct 'C' and 'S' indicators are used, aligning with AEAT specifications and avoiding errors in the tax reporting process.
Original PR description
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the…
Currently, the BOE export for `Mod 347` uses incorrect indicators for `Substitutive` and `Complementary declarations`. **Steps to reproduce:** - Install the `l10n_es_reports` module and switch to the `ES company` - Navigate to Accounting > Reporting > Tax Report - From the smart button, select `Report: Tax Report (Mod 347) (ES)` - Download the BOE file using the dropdown. - In the wizard: - Enable `Substitutive Declaration` or `Complementary Declaration` - Set `Previous Report Number` (e.g., 123456789) - Click `Generate BOE` - Upload the generated .txt file to the `AEAT portal`. (AEAT credentials are required) **Observation:** AEAT does not recognize 'X' as a valid indicator for substitutive or complementary declarations and interprets the file as a standard return. **Root Cause:** At [1], the BOE Mod 347 generation writes 'X' for both substitute and complementary declarations. **Fix:** This commit ensures the file contains correct indicators: - 'C' for `complementary declarations` - 'S' for `substitute declarations` This aligns Modelo 347 with AEAT specifications and ensures consistency with the implementation of Modelo 349 at [2]. Ref: https://sede.agenciatributaria.gob.es/Sede/en_gb/ayuda/consultas-informaticas/declaraciones-informativas-ayuda-tecnica/modificar-declaracion-informativa-mediante-fichero.html [1]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1061-L1062 [2]: https://github.com/odoo/enterprise/blob/c5332bef593cc3fa1b5013a0dac56ccd67e4da14/l10n_es_reports/models/aeat_tax_reports.py#L1490-L1491 opw-6048711 Forward-Port-Of: odoo/enterprise#112566
This update resolves a technical issue where reports were consuming excessive memory, potentially slowing down the system. The fix ensures reports stop loading when they're no longer needed, preventing memory buildup and improving performance. This enhances the overall stability and responsiveness of the Enterprise module.
Original PR description
The preloading of sections would never stop, this is an issue since this would prevent the garbage collector from collecting this big class and all it's objects. We fix this by making sure to stop the reploading when the component is destroyed. It's important to do it this way rather than clearing the timeout as the destruction could happened when the report is loading so the timeout would be unset and a new one would be started. Forward-Port-Of: odoo/enterprise#112662 Forward-Port-Of: odoo/enterprise#112628
This update fixes a visual issue where subscription product details weren't showing the billing period in product snippets on the website. The fix ensures that all subscription products, regardless of where they're displayed (shop page or snippet), accurately show their billing period. This improves the clarity and accuracy of product information for customers.
Original PR description
Steps to reproduce: 1) Go to the Website app. 2) Add a product snippet to any page using the editor. 3) See product card of any subscription product. Issue: - The billing period is not displayed for subscription products in the product snippet, unlike on the shop page. Cause: - `temporal_unit_display` is not included in the `combination_info`which is passed in data used by the product snippet. Fix: - Include `temporal_unit_display` in `combination_info`. opw-6070943 Forward-Port-Of: odoo/enterprise#112653 Forward-Port-Of: odoo/enterprise#112171
This update resolves an issue where users were incorrectly added as followers of chatter threads, leading to unwanted notifications. The fix ensures the correct user ID is used, preventing this problem and improving notification accuracy. Additionally, a cron job issue was addressed to ensure all records are processed correctly.
Original PR description
The method call that is supposed to subscribe the current user to the closing entry when posting XBLR used the User id as a Contact id. This caused random contacts to be added as followers of the chatter thread and as a result receiving notifications for it. The fix is simply using the id of the User's Contact instead. Also, as discussed with prro on Discord, fixed the cron clearing its dictionary each loop. opw-5886621 Forward-Port-Of: odoo/enterprise#112709 Forward-Port-Of: odoo/enterprise#107843
This update fixes an issue where the barcode scanner was incorrectly using the user's company instead of the current business context. This resulted in incorrect barcode readings. The fix ensures the scanner uses the correct company settings, resolving the problem of misidentified products and enabling accurate barcode scanning across different company environments.
Original PR description
### Issue: The company used in the main barcode menu is the `company_id` of the user rather than the current contextual company of the session. This is problematic as we might endup using the wrong…
### Issue: The company used in the main barcode menu is the `company_id` of the user rather than the current contextual company of the session. This is problematic as we might endup using the wrong barcode nomenclature. ### Steps to reproduce: - Have 2 companies: company 1 and company 2 - Set the barcode nomenclature of company 1: default, company 2: GS1 - Incarnate a user allowed in both companies but with default company 1 - With company 2, create a product and set its barcode to 36939282410106 - From the main menu open the barcode app and scan 0136939282410106 #### > No product was found (even thought it is correct in GS1) ### Cause of the issue: Scanning from the main barcode menu will trigger a call of the `main_menu` method relying on the nomenclature of the contextual company of the request: https://github.com/odoo/enterprise/blob/804ea21c225a7a1e0763bac188f027adeb3ab78f/stock_barcode/static/src/main_menu/main_menu.js#L98-L99 https://github.com/odoo/enterprise/blob/804ea21c225a7a1e0763bac188f027adeb3ab78f/stock_barcode/controllers/stock_barcode.py#L15-L21 However, when opening the main barcode menu from the app menu, no contextual warehouse was set to the view: https://github.com/odoo/enterprise/blob/804ea21c225a7a1e0763bac188f027adeb3ab78f/stock_barcode/views/stock_barcode_views.xml#L6-L11 As such, the environment of the request will be set here: https://github.com/odoo/odoo/blob/9393b0db6791fe5a7f576cff55705e315fb3dd11/odoo/http.py#L2083 based on the company of the user rather than the one of the context: https://github.com/odoo/odoo/blob/9393b0db6791fe5a7f576cff55705e315fb3dd11/odoo/api.py#L694-L722 ### Fix: Setting the company slices the `current_company` in first position of the `allowed_company_ids`: https://github.com/odoo/odoo/blob/260c69ed64f8663b6935b9863c86aac6dbecd961/addons/web/static/src/webclient/switch_company_menu/switch_company_menu.js#L33-L39 https://github.com/odoo/odoo/blob/260c69ed64f8663b6935b9863c86aac6dbecd961/addons/web/static/src/webclient/switch_company_menu/switch_company_menu.js#L68-L81 which can be recovered from the cookies via the `_get_allowed_company_ids`: https://github.com/odoo/enterprise/blob/43f65ff2f3c6177cc69647bbb85bb40a84409457/stock_barcode/controllers/stock_barcode.py#L432-L442 precisely used by the `_get_barcode_nomenclature`: https://github.com/odoo/enterprise/blob/43f65ff2f3c6177cc69647bbb85bb40a84409457/stock_barcode/controllers/stock_barcode.py#L485-L491 Note that passing the context in the arguments of the `main_menu` JSON route will not really solve the issue by it self since the context is no longer shared with the request: c8cd1d4a83de7a5798cbb910a788fbb6fe208d2f ### Additional Issue: The type `dest_location` does not exist on barcode types: https://github.com/odoo/odoo/blob/485a64b6a1e91feb4310f282c6dd1cd021f1780b/addons/barcodes_gs1_nomenclature/models/barcode_rule.py#L16-L20 so that the type used by these lines can not work: https://github.com/odoo/enterprise/blob/1dedc5bbcee43bfd13e55206e3d7364f715ca9be/stock_barcode/controllers/stock_barcode.py#L29-L30 https://github.com/odoo/enterprise/blob/1dedc5bbcee43bfd13e55206e3d7364f715ca9be/stock_barcode/controllers/stock_barcode.py#L52-L56 ### Steps to reproduce: - In the settings enable: Multi-Steps Routes - Set the barcode nomenclature to GS1 - Set your warehouse in receipt in two steps and add a barcode to the WH/Input: 3033710074365 - From the main menu open the barcode app and scan 4133033710074365 #### > No product or picking was found (even thought it is correct in GS1 that should create an internal transfer with WH/INPUT as destination) opw-5847529 Forward-Port-Of: odoo/enterprise#112478 Forward-Port-Of: odoo/enterprise#111662
This update resolves an issue in Odoo's web_studio module that previously impacted product exports. The change involves adding a necessary context key, allowing for more reliable and accurate product template creation. This ensures consistent and functional product export capabilities.
Original PR description
This commit https://github.com/odoo/odoo/pull/254323 changed the way product( template)s are created, which now decouples the logic into two context attributes instead of one. This commit fixes this by adding the second one.
This update resolves an issue where subscription discounts were causing errors during the import of sales orders into the POS system. The change modifies how the system handles subscription discounts, ensuring a smoother and more reliable process for managing subscriptions through point-of-sale.
Original PR description
This is a test for the related community fix and an override of the **isSaleOrderLineNote** method to add the subscription specific **subscription_discount** lines to be treated as a note when importing it from the Sales module. https://github.com/odoo/odoo/pull/247846 opw-5582448 Forward-Port-Of: odoo/enterprise#112326 Forward-Port-Of: odoo/enterprise#107002
This update fixes an error preventing Odoo from properly connecting to Intervat, a key accounting partner. The issue stemmed from outdated JWK keys being hidden from Intervat's verification process. A simple fix has been implemented to ensure Intervat can successfully verify Odoo's requests.
Original PR description
When we open a connection in intervat, we initialize a JWK on IAP side,
then we use the private key linked with this JWK to sign our requests.
The problem is on IAP, we have a cron who archive JWK older than a week.
As the archived JWK are hidden in our JWKS endpoint, Intervat is no
longer capable of verifying our signatures, leading to this error:
`{"error_description":"JWT is not valid" "error":"invalid_client"}`.
To fix this, we might need to call IAP first to unarchive the JWK first.
no-taskThis update resolves an issue where tests for Italian tax reports were failing due to missing data required for XML validation. The change ensures the tests now properly populate the necessary 'codice fiscale' field, allowing the validation process to complete successfully. This improves the reliability of the tax report generation process.
Original PR description
Description of the issue this commit addresses: Previously, the testing of the xml exports was only done by generating the file and checking its content against a hardcoded one but a fix[^1] changed that so the tests use the real export flow during which an xsd validation is done. As the tests did not expect to go trough the validation, some mandatory values were not present and it now results in a failing validation (caught in except). [^1]: https://github.com/odoo/enterprise/pull/108548 Desired behavior after this commit is merged: The tests set the l10n_it_codice_fiscale field from which are populated the mandatory CodiceFiscaleDichiarante, CodiceFiscale and CFDichiarante for the xsd validation. opw-5707544 Forward-Port-Of: odoo/enterprise#112629
This update resolves a bug that allowed users to incorrectly change the 'Recurring' status of subscription products with existing sales orders. The fix ensures that changes are reverted properly, preventing data inconsistencies and maintaining accurate subscription management. This improves data reliability and user experience.
Original PR description
**Problem:** When attempting to change "Recurring" on products in the form view, if there are confirmed SOs, the change should be reverted and a message should appear explaining this. However, there is a bug in how the change is reverted where it takes the current form value of the field. This cannot be trusted as it's possible to trigger another onchange before the first one resolves, so the second onchange is based on the wrong value. **Steps to Reproduce:** - w/Demo Data, go to product "Office Cleaning Service (SUB)" (This is a subscription product which has confirmed SOs) - Quickly click the checkbox for "Recurring" twice -> Two warnings appear, but Recurring is False and can be saved **Solution:** Instead of reading the current form value and setting its opposite, we can revert to the current value on the server. Forward-Port-Of: odoo/enterprise#111725 Forward-Port-Of: odoo/enterprise#110877
This update fixes an issue related to how dates and times are displayed, specifically restoring the option to show seconds. The change ensures consistent formatting across Odoo's interfaces and corrects a previous bug where the 'showSeconds' option wasn't functioning correctly in numeric date displays.
Original PR description
In this [commit] the short format has been removed from misc methods because there was no more _short format fields in res.lang. But the short format was used to remove seconds from the res.lang format. Now, this behaviour has been restored with the new datetime format system and the unused format 'long' and 'full' has been removed from the doc string to avoid misunderstanding. The formatDateTime from the JS use the format from the res.lang too. So the same behaviour has been implemented there to be able to show seconds through the option 'showSeconds'. It's also fix the fact that this option didn't have any effect when the datetime was shown in numeric mode. [commit]: odoo/odoo@062b140 opw-6030342
This update resolves an issue preventing XML export of Profit & Loss reports when footnotes were enabled. The fix corrects a dependency on an outdated model, ensuring proper report generation and data accuracy. This improves the reliability of financial reporting exports.
Original PR description
**Steps to reproduce:** * Install the **l10n_lu_reports** module. * Go to **Accounting → Reporting → Profit & Loss**. * Add a footnote on a report line (**⋮ → Annotate**). * Click **Export (XML)** to open the export wizard. * Enable **Import notes as references** and export. **Observed behavior:** * Export fails with `KeyError: 'account.report.manager'`. * XML file cannot be generated when references are enabled. **Cause:** * The export logic relied on the deprecated `account.report.manager` model. * This model was removed in v17([commit](https://github.com/odoo/enterprise/pull/33604/changes#diff-5fc5051f5c0211c0eec96b892e7d29e01b68d804417443502d17bccd8333d7ecL41)) and replaced by `account.report.footnote`. * The footnote retrieval code was not migrated accordingly. **Fix:** * Migrate reference retrieval to use `account.report.footnote`. opw-5890630 Forward-Port-Of: odoo/enterprise#111845 Forward-Port-Of: odoo/enterprise#107765
This update resolves an issue where a purple 'info' pill appeared on buttons within the Web Studio form view, particularly on mobile devices. This caused confusion for users trying to click the buttons and has now been removed, improving the user experience.
Original PR description
Steps: - Install `web_studio` - Add an approval rule to any action in any form view (example preview button) - Open this form view - You will have a purple info pill in every action button in the form view This can be confusing for people wanting to click on the button on mobile but instead, they click on the purple pill + we don't even want this opw-5911667 Forward-Port-Of: odoo/enterprise#111770
This update resolves a test environment issue that caused platform order flow tests to fail. The fix prevents a ValueError from occurring when test printers are unavailable, ensuring the tests complete successfully and accurately simulating the order printing process.
Original PR description
When running platform order flow tests, calling `mark_platform_prep_order_as_printed` raises a ValueError because the test environment lacks active POS printers (they are unlinked during setup). This commit patches the method to catch the ValueError and return False, allowing the POS tours to complete successfully without crashing. build_error-241260
This update fixes an issue where Belgian VAT return PDFs were not correctly including essential fields like 'Ask Restitution' and 'Client Nihil'. The fix ensures these fields are now accurately generated, improving the accuracy and completeness of VAT return documentation. This resolves a previous reporting discrepancy.
Original PR description
When submitting a Belgian VAT return, the PDF attachment was generated without 'l10n_be_closing_vat_return', 'ask_restitution', and 'client_nihil' in the options. The wizard called _proceed_with_locking() without options_to_inject, so when export_to_pdf() rebuilt options via get_options(), _custom_options_initializer() read those keys from previous_options as None, making <t t-if="options.get( 'l10n_be_closing_vat_return')"> always False. Steps to reproduce: 1. Create a Belgian company 2. Navigate to Accounting -> Accounting -> Tax Returns 3. Create a VAT Return, fill in "Ask Restitution", and validate it 4. Submit the VAT return 5. Open the generated PDF attachment => "Ask Restitution" and "Client Nihil" fields are missing from the header Ticket [link](https://www.odoo.com/odoo/project.task/5509725) opw-5509725 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an access error within the Frontdesk module that prevented users with limited employee permissions from creating new stations or visitors. The fix involved updating Frontdesk components to inherit from a standard HR module, ensuring proper access controls and preventing the error.
Original PR description
Issue: ---------------------------------------- When a user with administrator rights on frontdesk but no rights on employees try to create a new station or visitor, they get an access error. Steps to reproduce: ---------------------------------------- - Have a user with administrator rights on Frontdesk but no rights on Employees - Switch to this user - Open Frontdesk and try to create a new station - Access Error Cause: ---------------------------------------- Since [this commit](https://github.com/odoo/odoo/commit/71f662b827b58c4f8ed1260728dc5194201ec323) models having a many2many field on `hr.employee` must inherit from `hr.mixin` to avoid an access error. The Frontdesk module was not changed. Solution: ---------------------------------------- Make `frontdesk.visitor` and `frontdesk.frontdesk` inherit `hr.mixin` opw-6000417