Daily updates from Odoo
Friday, December 12, 2025
36 changes · saas-18.4
Resolved issues and error corrections
This update resolves a problem that prevented users from correctly configuring their tax returns within the Accounting module. Previously, a step was skipped during installation, leading to an error. Now, the necessary setup is completed, ensuring a smooth experience when setting accounting periods for tax returns.
Original PR description
From **saas-18.3**, when installing the accountant module, after [this PR](https://github.com/odoo/enterprise/commit/49aca723c2422fedcc8bda963a6346a172825617#diff-c703c688dc3f80644a43c96657cb2db0122b83cee9bcfa417554b0c7f1e4f550L22) the `_initiate_account_onboardings()` was not called anymore for companies that already had a chart template. This caused a traceback while configuring the Accounting Period on the Tax Returns journal: `ValueError - Expected singleton: onboarding.progress()` We now fix this behavior by ensuring that `_initiate_account_onboardings()` is called when installing the chart_template, filling the gap that was introduced. **Steps to Reproduce:** 1. Install `accountant` module without demo data. 2. Accounting > Dashboard > _Tax Returns_ Journal, click on the **"Tax Returns"** button. 3. Set an **Opening Date** in the wizard and try to apply the **Accounting Periods**. sentry-7064593163 Forward-Port-Of: odoo/enterprise#101442
This update ensures that the Brazil E-Invoice status accurately reflects cancellations after an e-invoice is requested to be cancelled. Previously, the status field was left blank, but this fix correctly sets the status to 'Cancelled' ensuring accurate tracking of e-invoice processing. This improves the reliability of our Brazilian e-invoice reporting.
Original PR description
**Steps to reproduce:** * Install the **Accounting** and **l10n_br_edi** modules. * Create and post a Brazilian customer invoice using an **Avatax fiscal position** * [Guide to setup EDI for…
**Steps to reproduce:** * Install the **Accounting** and **l10n_br_edi** modules. * Create and post a Brazilian customer invoice using an **Avatax fiscal position** * [Guide to setup EDI for l10n_br](https://docs.google.com/document/d/1CSUKpnyhty5WBqUDBE-7dGvu0qxaC5vQ0loz0fYNg04/edit?tab=t.0) * Confirm the invoice and **send it to e-invoice (Brazil)**. * Confirm the **Brazil E-Invoice Status** shows **'Accepted'**. * Click **Request Cancellation**, enter a cancellation reason, and submit the request. **Observed behavior:** * The invoice moves to **Cancelled** state. * The cancellation XML is generated and attached in the chatter. * SEFAZ returns a successful cancellation response. * However, the **BR EDI Status** becomes **empty**, instead of reflecting **'Cancelled'**. **Cause:** * In the wizard `l10n_br_edi.invoice.update`, both `_finalize_update()` and `_submit_services()` assign `l10n_br_last_edi_status = 'cancelled'` **before** calling `button_cancel()`. * `button_cancel()` internally triggers `button_draft()` for posted invoices. * The Brazil EDI override of `button_draft()` resets `l10n_br_last_edi_status = False`. * This clears the status that was just set, leaving the field blank. **Fix:** * move `l10n_br_last_edi_status = "cancelled"` to `button_cancel()` method. opw-5378542 Forward-Port-Of: odoo/enterprise#101438
This update fixes inconsistencies in how nested s_card snippets are edited, specifically related to cover images. Previously, changes to one snippet would unintentionally affect others. The fix ensures that image settings are applied correctly only to the currently edited snippet, improving the user experience and preventing unexpected visual changes.
Original PR description
This commit fixes three issues occurring when editing nested s_card snippets. **Problem 1 - Incorrect cover image detection** Issue: An `s_card` without a cover image displayed the cover-image option…
This commit fixes three issues occurring when editing nested s_card snippets. **Problem 1 - Incorrect cover image detection** Issue: An `s_card` without a cover image displayed the cover-image option if it contained a child `s_card` with a cover image. Cause: `CardImageOption` and `CardImageAlignmentOption` relied on `querySelector`, which could detect images inside child snippets. Fix: The cover image detection now checks that the closest `s_card` element corresponds to the snippet being edited. **Problem 2 - Ratio settings applied to all child cards** Issue: Changing the cover image ratio on an `s_card` applied the setting to all nested `s_card` elements. Cause: The `BuilderSelect` in `CardImageOption` targeted `.o_card_img_wrapper`, causing `classAction` to apply to all descendants. Fix: The selector is now `:scope > .o_card_img_wrapper`, ensuring the option acts only on the current snippet. **Problem 3 - Parent image positioning leaking to children** Issue: Adjusting the cover image position on a parent `s_card` affected the rendering of all child card images. Cause: CSS rules for `.o_card_img_horizontal` applied to all descendant elements mathcing `.o_card_img_wrapper`. Fix: The rules now apply only to direct children of `.o_card_img_horizontal`. The same correction was applied to `.o_card_img_ratio_custom`. task-5349540
Previously, the documents control panel only processed the first 40 files selected, regardless of the total number uploaded. This update ensures that all selected files (40+), when actions like duplication or deletion are initiated, are correctly processed. This resolves a limitation impacting user workflow.
Original PR description
Steps to Reproduce =================== 1. Upload more than 40+ files in a folder. (One page displays upto 40 docs) 2. Use the checkbox to select all files on the page (this selects only 40 files) 3.…
Steps to Reproduce =================== 1. Upload more than 40+ files in a folder. (One page displays upto 40 docs) 2. Use the checkbox to select all files on the page (this selects only 40 files) 3. Click the 'Select All' button in the control panel to select all 40+ files. 4. Now, try duplicating or moving them to the trash. => Only the first 40 selected files (on the single page) are considered for action, not all the selected files. Technical ========== For documents control panel action we have custom handling for selecting records and executing action. We use `model.root.selection` which only consider records in current page, case of select all records from other pages is missed here. After this PR ================== - All selected records are considered for the actions - Added custom `getResIds` method to get filtered `resIds` as per domain. Note: `getResIds` in DynamicList doesn't have custom domain feature so create our own as per use case Task-4700841 Forward-Port-Of: odoo/enterprise#100791 Forward-Port-Of: odoo/enterprise#87634
This update fixes an issue where invoices generated from Point of Sale (POS) orders were incorrectly defaulting to the customer's first delivery address instead of the address selected during order creation. The fix ensures that invoices accurately reflect the customer's chosen shipping address, aligning with the standard behavior of the 'sale' module. This improves order accuracy and customer satisfaction.
Original PR description
Currently, an incorrect shipping address is assigned to invoices generated from POS orders when the customer has multiple delivery addresses. **Steps to reproduce:** - Install the `point_of_sale` and…
Currently, an incorrect shipping address is assigned to invoices generated from POS orders when the customer has multiple delivery addresses. **Steps to reproduce:** - Install the `point_of_sale` and `contacts` modules. - Enable `Customer Addresses` from the settings. - Create a contact with `two` delivery addresses. - Open POS and create an order using the `second delivery address` as the customer. - Confirm the order with the `invoice`. - Observe the `shipping address` on the invoice. **Observation:** The invoice incorrectly shows the first delivery address instead of the second delivery address. **Cause:** At invoice creation in POS, only `partner_id` is set and `partner_shipping_id` is missing at [1]. As a result, the invoice defaults to the customer's first delivery address instead of the delivery address selected in POS. **Fix:** This commit adds `partner_shipping_id` to the invoice values to ensure the POS invoice uses the exact delivery address selected during order creation. same as the `sale` module behaviour. [1]: https://github.com/odoo/odoo/blob/1d1cd8648ed1c3f13febbde8d48e28928e18583f/addons/point_of_sale/models/pos_order.py#L667-L684 opw-5350137 Forward-Port-Of: odoo/odoo#239663 Forward-Port-Of: odoo/odoo#238055
This update resolves an error that occurred when users edited combo configurations on order lines. Specifically, removing the combo name and clicking the 'Edit Configuration' button triggered a technical issue. The fix ensures the configuration option is only displayed when a product template is associated with the combo, improving usability.
Original PR description
Currently, when a user adds a combo to an order line, and remove the name of combo and click on Edit Configuration (pencil icon) error is encountered. Steps to replicate: - Install `sale_management`…
Currently, when a user adds a combo to an order line, and remove the name of combo and click on Edit Configuration (pencil icon) error is encountered. Steps to replicate: - Install `sale_management` with demo and create a new SO. - Add a combo product and remove the combo name and click Edit Configuration (pencil icon). Error: `TypeError: SaleProductConfiguratorController.sale_combo_configurator_get_data() missing 1 required positional argument: 'product_template_id'` Cause: - When a user clicks on Edit configuration, the client-side JavaScript makes an RPC call to the server, targeting the `sale_combo_configurator_get_data()` which expects `product_template_id` at [1] and since it is removed from order line the error is encountered. Solution: - Changed the content of method `isCombo()` to use the product_template_id to make sure the Edit Configuration is only visible when product template is present. Similar PR for reference: https://github.com/odoo/odoo/pull/217464 [1]: https://github.com/odoo/odoo/blob/fa4307b9758800f26c9ee87cf3698fd60bfd1ab5/addons/sale/controllers/combo_configurator.py#L12-L14 No ID --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238536
This update fixes an issue where tax calculations were incorrectly distributing negative amounts, particularly in scenarios involving multiple line items. The change ensures that tax factors are assigned to the correct base lines, resolving a problem that previously resulted in inaccurate tax totals, specifically impacting Mexican currency calculations.
Original PR description
The factors are sorted so zipping them with base_lines won't assign the factor to the correct base_line. We need to use the index in it instead to reorder them as previously. Before this commit, in Mexico, when having lines with price_unit set as l1=326.4, l2=24.0, l3=172.8, l4=691.2 and a negative line of 1149.6, this last line was distributed accross the positive lines. However, the negative amount of l4 was wrongly assigned to l1 making this line negative at the end because of the reordering of lines in _split_base_lines. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239583
This update ensures Odoo correctly handles negative invoice lines in Mexico's CFDI e-invoicing format. Previously, the system struggled when negative line amounts exceeded the total of positive lines. This change adds a test to verify proper distribution of these negative amounts, maintaining compliance with Mexican regulations.
Original PR description
In mexico, you cannot send any negative lines in the CFDI (Mexican e-invoicing). The negative lines are distributed accross the positive ones in _dispatch_global_discount_lines. This test ensures the negative line is well distributed when its amount is higher than the sum of multiple positive lines. Forward-Port-Of: odoo/enterprise#101888
This update fixes a bug in Odoo's logging system that caused errors when handling complex log messages, specifically those containing mappings. The fix moves the message formatting logic to a more robust location, ensuring consistent and reliable logging across the system. This improves overall system stability and reduces the risk of unexpected errors.
Original PR description
When `lower_logging` encounters a `LogRecord.args: Mapping`, it fucks up and strips out all the values keeping only the mapping keys (as a tuple), which then breaks when trying to format it in `LogRecord.msg`. Fix the issue by moving the entire message munging into, appropriately, the formatter: `getMessage` will do the `str.__mod__` call at which point we don't need to deal with the args at all, then `formatMessage` generates the full message line (not including the stack traces from `exc_info` and `stack_info`, those are added in the second half of `Formatter.format`). https://runbot.odoo.com/odoo/error/234669 Forward-Port-Of: odoo/odoo#239560 Forward-Port-Of: odoo/odoo#239410
This update corrects an issue where customer addresses were duplicated when printing Sale Orders using the DIN5008 document layout. This occurred when the 'Customer Addresses' setting was disabled. The fix ensures addresses are only displayed once, improving the clarity and accuracy of printed documents.
Original PR description
## Issue: When DIN5008 is selected as the document layout, printing a Sale Order may show the customer address twice ## Cause: The address is first added by `external_layout_din5008`, then again by `report_saleorder_document` This duplication only makes sense when the partner address differs from the invoice or delivery address If the Customer Addresses setting is disabled, displaying it multiple times is unnecessary ## Steps to reproduce: - Install a company using DIN 5008 (e.g., l10n_de) - Select the DE company and go to Settings - Disable `Customer addresses` and ensure the document layout is set to DIN 5008 - Create a Quotation with any customer and product - Print the PDF → the address appears twice before the fix opw-5176593 Forward-Port-Of: odoo/odoo#235441
This update resolves an issue where users couldn't complete registration for events if the standard 'Name' question was removed. The fix ensures that the system handles missing event names gracefully, preventing an error and allowing users to proceed to the payment stage.
Original PR description
When registering to an event, customers are asked questions before reaching the payment page. By default, a *Name* question is included, but it can be removed by the organizer of the event. If the…
When registering to an event, customers are asked questions before reaching the payment page. By default, a *Name* question is included, but it can be removed by the organizer of the event. If the *Name* question is removed, but a name is asked in the delivery form, Odoo will try to compare the (missing) name from the event's questions with the (required) name from the delivery form.
https://github.com/odoo/odoo/blob/828a9504c7d43aa35ed91141268d04e0a55782c3/addons/portal/controllers/portal.py#L551
The issue is that if there's no *Name* question among the event's questions, a `res.partner` with its `name` field set to `False` is created. When attempting to call `.strip()` on its name, an `AttributeError` is raised (*'bool' object has no attribut 'strip'*).
This fix prevents the error by considering the name field as an empty string in case no name is provided.
### Steps to reproduce:
1. Install *Online Event Ticketing* (`website_event_sale`)
2. In Settings > Website, set *Sign in/up at checkout* to *Disabled (buy as guest)*
3. In Events, create a new Event
- Give it any name
- Add a product line for the Event Registration with a price greater than 0
- In the *Questions* tab, remove the *Name* question
- Click the *Go to website* smart button and publish the event
4. On the website, in incognito mode:
- Click *Events*
- Click the new event we created in Step 3
- Click *Register*, (set the quantity to one ticket,) click *register*
- Answer the questions (there should **not** be a *Name* question) and click *Confirm Registration*
- Fill out the required fields of the delivery form (there **should** be a *Name* field)
- Open the console, then click *Confirm* in the delivery form: An error appears, and the Payment page does not appear
opw-5259781
Forward-Port-Of: odoo/odoo#237154This update ensures the tests within the Web Studio module accurately reflect a recent change in how suggested recipients are handled. The change allows the method to return the recipient's display name under specific conditions. This update maintains the stability and reliability of the Web Studio functionality.
Original PR description
From the related community commit, the _message_add_suggested_recipient method is modified to also return display name under certain condition. This commit adapts the test inside web_studio to align with the method's change. Task-4812554 Forward-Port-Of: odoo/enterprise#96219 Forward-Port-Of: odoo/enterprise#91003
This update ensures that a 'partner ID' is always provided when creating SEPA payments. Previously, missing this ID caused errors during batch payment creation, potentially disrupting payment processing. This change improves the reliability and stability of our payment system.
Original PR description
When doing a payment with SEPA as the payment method, and then create a batch payment out of it. It could happen that the partner_id of the payment was not set. That would cause a traceback because in the _get_CdtTrfTxInf we do a browse on the partner to use it later on. But since the partner is False, we have an empty record set. task-5213880 Forward-Port-Of: odoo/enterprise#98249
This update resolves an issue where adding a second tax to a bank reconciliation line would remove the first. Previously, the system couldn't handle multiple taxes on a single line, leading to data inconsistencies. This change ensures accurate tax calculations for bank reconciliation reports.
Original PR description
This commit will allow to add multiple taxes on a move line in the bank rec widget. For the moment, when having a line with a tax, and then add one more. The previous tax get deleted. task-5081786 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226867
This update enhances the accuracy of tax calculations within the bank reconciliation widget. It prevents accidental tax line deletions, automatically creates tax lines when default taxes are added, and ensures correct tax recomputation across various scenarios. This improves the reliability of financial reporting.
Original PR description
This commit will do multiple things: - Prevent users from deleting a tax line - Adding default taxes on an account will create a tax line for it - Removing a taxes from a line will recompute the taxes correctly - Removing and adding new taxes will recompute the taxes correctly - Removing a base line that has a tax linked to it will recompute the taxes correctly - Add a simple way for users to delete the tax directly from the ui without going to the edit line button task: 5081786 Forward-Port-Of: odoo/enterprise#94552
This update corrects a bug that prevented multiple gift cards from being created correctly when sold in a single POS order. Previously, only one gift card with the total amount was generated. This fix ensures that multiple gift cards are created with the correct individual amounts, improving the accuracy of gift card transactions.
Original PR description
This fix addresses an issue where selling multiple gift cards in a single POS order results in only one gift card being created with the total amount, instead of multiple gift cards with the correct…
This fix addresses an issue where selling multiple gift cards in a single POS order results in only one gift card being created with the total amount, instead of multiple gift cards with the correct individual amounts. Step to reproduce: - Create a new gift card and enable the option to sell this card in the POS - Open the POS and try to sell multiple gift cards in the same order - Validate the order - Check the generated gift cards, only one gift card will be created with the total amount instead of multiple gift cards with the correct individual amounts This issue occurs because the field `reward_point_split` is missing from the kanban view of loyalty rules. So, when creating a new gift card, this field value, which should be True for gift cards, is not returned by the onchange method, and since nothing triggers a new computation unless the program type is changed, the field remains False. This fix simply restores this field in the kanban view (like before https://github.com/odoo/odoo/pull/172561) so that its value is correctly taken into account when creating a new gift card. opw-5103652 Forward-Port-Of: odoo/odoo#238993
This update fixes an issue where customer coupon emails were sending expiration dates in a technical format instead of the localized date format for the customer's language. The change ensures that customers receive coupon information with dates displayed in their preferred format, improving the user experience. This was achieved by updating the email template to use the customer's language settings for date formatting.
Original PR description
Steps to reproduce: 1. Install `loyalty` and `sale_management` 2. Activate another language with another date format, eg. English (AU) 3. Set that language on a contact 4. Sales > Product > Discount…
Steps to reproduce: 1. Install `loyalty` and `sale_management` 2. Activate another language with another date format, eg. English (AU) 3. Set that language on a contact 4. Sales > Product > Discount & loyalty 5. Create a record with program type coupons 6. Generate a coupon for that AU contact with an expiration date Issue: The coupon email received by the customer shows the expiration date using the yyyy-MM-dd format, and the attachment shows the same technical format instead of the customer’s localized date format. Cause: We are not using a formatted date according to the customer before: Customer with English AU language <img width="601" height="563" alt="image" src="https://github.com/user-attachments/assets/faea2840-aca6-4850-bfc9-b0d24da65a3b" /> <img width="1510" height="883" alt="image" src="https://github.com/user-attachments/assets/b0ebc0cc-6243-450d-ad12-cecda4858e26" /> After: <img width="603" height="543" alt="image" src="https://github.com/user-attachments/assets/5be2332b-3237-4ce5-8122-0766cd274650" /> <img width="1482" height="886" alt="image" src="https://github.com/user-attachments/assets/99d31b4c-33fa-4f92-9970-56720181911e" /> opw-5247621 Forward-Port-Of: odoo/odoo#237880
This update resolves a limitation preventing non-administrator users from utilizing the delivery_usps_rest module. By implementing sudo() calls, the module now grants necessary access to the USPS Rest API, expanding functionality without requiring elevated user permissions. This improves usability for a wider range of users.
Original PR description
Non-admin users are currently unable to use the delivery_usps_rest module because several fields are limited to the "base.group_system" group. It's obviously not feasible to give everyone the "Role / Administrator" role. This PR makes necessary sudo() calls the same way that delivery_ups_rest does. Forward-Port-Of: odoo/enterprise#101163
This update fixes an issue where by-products weren't correctly registered during multi-step manufacturing processes. The change ensures that by-product lines are created with the correct pre-production and production locations, streamlining the manufacturing workflow. This issue is now resolved and no longer present in version 18.4.
Original PR description
### Steps to reproduce: - In the settings enable By-Products an Multi-step routes - Put your warehouse in manufacturing in 3 steps - Create two storable products: - Final Product (FP) with an empty…
### Steps to reproduce:
- In the settings enable By-Products an Multi-step routes
- Put your warehouse in manufacturing in 3 steps
- Create two storable products:
- Final Product (FP) with an empty bom
- By Product (BP)
- Go to the barcode app > Operations > Manufacturing > New
- Scan FP > Register By-Products
- Scan BP
#### > The line is created with pre-prod as location and prod as destination
### Cause of the issue:
Since no existing line refers to the by product, a new line is created and its `location_id` and `location_dest_id` are provided by the `_getNewLineDefaultValues`:
https://github.com/odoo/enterprise/blob/17fd46b04d87585b7ed46c00d9559414daa17384/stock_barcode/static/src/models/barcode_model.js#L562-L566 However, at this point nothing had set the `params.newByProduct` in the `processBarcode`:
https://github.com/odoo/enterprise/blob/17fd46b04d87585b7ed46c00d9559414daa17384/stock_barcode_mrp/static/src/models/barcode_mrp_model.js#L375-L383 In fact, the only thing indicating that we are creating a by prodcut line at this point is the `displayByProduct`.
### Note:
The issue is no longer reproducible in 18.0+ as this change has already been applied in 2d5dbb93e6b33c2be786f9b2361c993f715d1a7f
opw-5350222
Forward-Port-Of: odoo/enterprise#101736
Forward-Port-Of: odoo/enterprise#101087This update resolves an issue where users were encountering an error when adding an XML encoding declaration in the studio XML editor. The fix prevents this error by displaying a clearer error message, improving the user experience. This change ensures consistent XML editing within Odoo.
Original PR description
Currently, an error occurs when a user includes an XML encoding declaration in the studio XML editor. **Steps to produce:** - Install the `web_studio` module and enable `developer mode` - Open `Apps`…
Currently, an error occurs when a user includes an XML encoding declaration in the studio XML editor. **Steps to produce:** - Install the `web_studio` module and enable `developer mode` - Open `Apps` > `studio` > `view` > `</> xml` - Declare encoding as: `<?xml version='1.0' encoding='utf-8'?>` and click `save` **Error:** `ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.` **Root cause:** At [1], an error is raised when the XML declaration contains an `encoding` attribute, as encoding declarations are invalid in Unicode strings. **Fix:** This commit ensures that a `UserError` is raised, improving the error message clarity. A similar fix was applied in https://github.com/odoo/odoo/pull/205324. [1]: https://github.com/odoo/odoo/blob/8a22b6ca09e1da3ccba3540bc4851a5174e035cc/odoo/tools/translate.py#L316 sentry-6981234548 Forward-Port-Of: odoo/odoo#239743 Forward-Port-Of: odoo/odoo#233571
This update fixes an issue where tax calculations were incorrectly using the transaction currency instead of the company's currency. This resulted in potential inaccuracies in tax amounts. The change ensures tax calculations are now accurate and reliable, improving financial reporting.
Original PR description
Before this commit, the rounding of tax amounts in the company currency was incorrectly done using the currency of the transaction. This could lead to discrepancies in tax calculations. opw-5342628 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238170
This update fixes a potential issue where users wouldn't receive a clear notification when attempting to close a POS session without selecting a cashier. Now, a notification will appear, preventing confusion and ensuring a smoother user experience. This enhances the reliability of the POS system.
Original PR description
After this commit, when attempting to close a POS session, if the logged-in employee is not selected, a notification will inform the user. This prevents confusion. opw-5244818 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234741
This update resolves an issue preventing non-Point of Sale users from archiving products. Previously, a lack of POS access rights triggered an error, even if the product wasn't linked to any sales. This change ensures all users can archive products, improving workflow flexibility and testability.
Original PR description
### Steps to reproduce: - With Admin open a pos session - With an other user without pos access rights archive a product unrelated to pos (e.g. not used in the session) #### > Access error: You are…
### Steps to reproduce: - With Admin open a pos session - With an other user without pos access rights archive a product unrelated to pos (e.g. not used in the session) #### > Access error: You are not allowed to access 'Point of Sale Session' (pos.session) records. This operation is allowed for the following groups: - Point of Sale/User ### Cause of the issue: Since 985fd5821fe1e8633503d713f1f1c3650bcf0c91 the `action_archive` of products, check that the product is not used by an order of any opened `pos.session` before allowing the user to archive it: https://github.com/odoo/odoo/blob/2011885246f5473ddc16fe5bd17db98ebff712f3/addons/point_of_sale/models/product_product.py#L51-L53 https://github.com/odoo/odoo/blob/2011885246f5473ddc16fe5bd17db98ebff712f3/addons/point_of_sale/models/product_template.py#L313-L320 However, if the user does not have any pos access rights he can not access the pos session to check if the product is used which raises an access error even if the product is un-used. ### Note: This is notably problematic as it makes it impossible to archive products via the `action_archive` in unrelated stock tests relying on a non-admin user. opw-stock-tests --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239490
This update corrects a VAT calculation issue related to RA Agenti withholding tax in Italy. The system now accurately applies a 23% rate on 20% of the base amount, ensuring compliance with Italian tax regulations. This change impacts how VAT is exported for Italian invoices.
Original PR description
This commit adds a new RA Agenti withholding tax for the case where 23% is applied on 20% of the base (effective –4.6%) and ensure it is exported using the 23% rate. Key changes: - Added new tax: –4.6% (23% su 20% RA Agenti) - Updated name and invoice label of the existing –11.5% tax - Updated EDI export logic to map –11.5% → 23% and –4.6% → 23% task-5258180 Forward-Port-Of: odoo/odoo#239489 Forward-Port-Of: odoo/odoo#236195
This update resolves an issue where setting the 'Invoice to Public' option in the Mexican POS incorrectly triggered an error. The fix ensures the necessary data is correctly shared with the underlying database, allowing users to properly set invoices to public status without encountering the error. This improves the functionality for Mexican businesses using the Point of Sale app.
Original PR description
In the POS of a Mexican company, when requesting an invoice, the user is asked to set the invoice to public or not. If the customer does not have a recognized ZIP code or country, setting the invoice…
In the POS of a Mexican company, when requesting an invoice, the user is asked to set the invoice to public or not. If the customer does not have a recognized ZIP code or country, setting the invoice to public **should not** raise an error, but it does. This is because the `l10n_mx_edi_cfdi_to_public` field is not correctly updated in the ORM, which leads to the UserError below being triggered, as `l10n_mx_edi_cfdi_to_public` is always set to `False` if it's not updated by its `_compute` method.
https://github.com/odoo/enterprise/blob/dd89c2c72039c9910cc0a303bca332f4103c08f6/l10n_mx_edi/models/account_move_send.py#L54-L55
The said field is not properly updated because it is a compute field.
Such fields are not transferred to the ORM because of the two following
conditions from the POS: [[1](https://github.com/odoo/odoo/blob/5c2280d089f248dff67df980bee1ce6a4156f2c9/addons/point_of_sale/static/src/app/models/related_models.js#L205-L206), [2](https://github.com/odoo/odoo/blob/5c2280d089f248dff67df980bee1ce6a4156f2c9/addons/point_of_sale/static/src/app/models/related_models.js#L895-L896)]
To minimize behavioral changes, the required field (`l10n_mx_edi_cfdi_to_public`) is simply added at the end of the serialization process.
Once this field is correctly shared with the ORM, the UserError is not longer raised when the *Invoice to Public* field is set to "Yes" in the POS.
Steps to reproduce the initial error:
1. Install the following app and module:
- Point of Sale (`point_of_sale`)
- Mexican Localization for the Point of Sale (`l10n_mx_edi_pos`)
2. Set the company to a Mexican one (e.g., *ESCUELA KEMPER URGATE*)
3. Open the POS app
4. Open a register
5. Select a product and click *Add*
6. Click *Payment*
7. Set the Customer to a new customer with only a name (no Country/ZIP Code)
- Click "Cash" to set the Remaining to 0
8. Toggle the *Invoice* button, set the *Invoice to Public* to *"Yes"* and click *Ok*
9. Click *Validate*.
10. An error *"Invalid Operation, CFDI not set to Public"* appears.
opw-5171035
Forward-Port-Of: odoo/enterprise#101275
Forward-Port-Of: odoo/enterprise#99871This update fixes an issue where the Partena export file incorrectly used the active company's code when generating reports for inactive companies. The change ensures the correct Partena code is included in the export file, resolving a potential reporting discrepancy. Tests have been added to verify this fix.
Original PR description
### Issue: In multicompany, when we generate the Partena export file of the 'not active' company, the partena code of the active company is inputted in the file. ### Steps to reproduce: - Install…
### Issue: In multicompany, when we generate the Partena export file of the 'not active' company, the partena code of the active company is inputted in the file. ### Steps to reproduce: - Install 'l10n_be_hr_payroll_partena' and switch to a Belgian company - Make sure the company has a "Partena Affiliation Number" - Create an employee for this company, with a "Partena code" - Create a contract for this employee, set it a running - Create a new Belgian company with a different "Partena Affiliation Number" - Activate both Belgian companies, but set the second one as active - Payroll > Reporting > Export work entries to Partena - Create a new one, populate it with the employee just created - Click "Generate Export File" ### Cause: When getting the data for the CSV file, we use `self.env.company` which is the active company. So when this company is not the one of the export record, we input the wrong code values. ### Solution: Use `self.company_id` instead of `self.env.company_id`. Also adds the test class with basic tests. opw-5345786 Forward-Port-Of: odoo/enterprise#101110
This update fixes a minor issue where the website's interactive tour wouldn't always function correctly after a page redirect. Now, the tour automatically hides the menu after each step, providing a smoother and more intuitive user experience. This ensures new users can easily navigate the website's features.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a visual issue where the reschedule button remained visible in projects with task dependencies disabled. The fix ensures the button is hidden when dependencies are turned off, providing a cleaner and more consistent user experience. This improves project management clarity.
Original PR description
Steps to reproduce: - Install the project_enterprise module. - Go to project configuration and enable task dependencies. - Open project settings and disable task dependencies. Issue: The reschedule button remains visible even when task dependencies are disabled for the project. Cause: The visibility check for the reschedule control did not consider the project’s task dependency. Fix: Hide the reschedule button when task dependencies are disabled at the project. task-5150621
This update ensures that rental product availability in our eCommerce system accurately reflects when employees are on time off. Previously, the system didn't account for employee absences, leading to incorrect availability displays. This fix now correctly considers employee time off periods, providing a more reliable view of product availability for customers.
Original PR description
…navailabilties Before this commit, when an human resource is linked to rental product thanks to his role and take a time off at a certain day. The user inside ECommerce should be able to add that product when the resource is off (since there is no resource available) at the period chosen. However, that check does not take into account the time off taken by the resources linked to that service rental product. This commit makes sure the time off of the resources linked to the product are correctly taken into account to know if the service rental product is available at a specific period. task-5075698
This update ensures users are prevented from adding unavailable rental resources to their cart. Previously, the system didn't check availability during rental periods, even when the related module wasn't installed. This change moves the necessary code to the main website rental module, ensuring accurate blocking of unavailable rentals.
Original PR description
Before this commit, when the user goes to the webshop to take a rental service with rental service unavailable at a certain period, the system does not block the user when the resource is not available during 2 hours in the period chosen by the user. The reason is because the hours are not checked when website_sale_renting_stock is not installed. This commit moves the code checking the time of the rental period made in website_sale_renting_stock in website_sale_renting to be able to have that verification for rental service used with planning to make sure the system will prevent the user to add the product in his cart when the resource is unavailable. task-5123239
This update resolves an issue where long text inputs within the Odoo Web Studio editor would overflow, causing display problems. Now, long text is automatically truncated, ensuring a clean and functional user experience. This improves usability and prevents data loss.
Original PR description
**Before this commit:** Long input text overflowed and was not truncated. **After this commit:** Long input text is now properly truncated, preventing overflow. task-5240113 Forward-Port-Of: odoo/enterprise#99535
This update fixes an issue where increasing stock move quantities didn't correctly reserve stock. Now, the system accurately mimics the reservation process by first checking available quantities before creating the move line, ensuring stock levels are managed correctly. This improves the reliability of stock tracking and order fulfillment.
Original PR description
Increasing the quantity of a stock move will create a move line with the same data as the stock move (location and product), no lot, nor package. This commit make the increase of quantity mimic the reservation process by getting first the available quants. The move line are then created accordingly. Backport of odoo/odoo#230344 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#237335 Forward-Port-Of: odoo/odoo#236699
This update fixes an issue where users without assigned tasks were not visible in the Gantt view when searching or filtering. The fix simplifies a conditional check within the project task search logic, ensuring the Gantt view accurately displays all users, regardless of task assignments. This improves the user experience and data visibility.
Original PR description
**Steps to reproduce:** Go to Project Go to All Tasks. Switch to the Gantt view. Search for an assignee who has no tasks assigned. **Cause:** The method was adding multiple conditions for the same field because both if statements were being applied. This made the domain incorrect when searching for users or custom filter on user **Issue:** The searched user’s row did not appear in the gantt view if they had no tasks. **Fix:** Changed the second if to elif so only one condition is applied at a time, ensuring the correct domain is used and the user row is visible. Task-5076701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239541 Forward-Port-Of: odoo/odoo#230319
This update ensures that user rows are always visible in the Gantt view, even when they have no assigned tasks. Previously, users without tasks were hidden. Now, searching by assignee correctly displays all tasks, including unassigned ones within a specific project, improving task management clarity.
Original PR description
**Before this commit:** When searching for an assignee in the gantt view, the corresponding row was not displayed if the user had no tasks assigned. Similarly, when applying a custom filter on the assignee also not working properly. **After this commit:** When searching or filtering by an assignee, the corresponding user row is now always visible in the gantt view, even if the user has no assigned tasks. Custom filters on assignee also work properly. task-5076701 Forward-Port-Of: odoo/enterprise#101855 Forward-Port-Of: odoo/enterprise#96531
This update resolves an issue where unscheduled shifts weren't immediately reflected in the Gantt view, requiring a page refresh. The fix ensures that shifts are updated in real-time after being unscheduled, improving scheduling accuracy and reducing user frustration. This enhances the overall planning process.
Original PR description
**Steps to reproduce:** Go to planning gantt view. Click on shift. Click on unschedule button on popover. **Issue:** When clicking on Unschedule button on a shift popover, sometimes the shift still appears and again clicking on that it cause missing error occured until the page is refreshed. **Cause:** The record wasn’t updating in the view after a shift was unscheduled, so the unscheduled shift was still showing. **Fix:** Modified the method to reload the model and notify the view immediately after calling action_unschedule, ensuring shifts reflect the latest server state without requiring a manual refresh. task-5075381 Forward-Port-Of: odoo/enterprise#97108
A small bug was causing the debugger to display incorrectly in some JavaScript files. This update ensures that whitespace is correctly preserved during the process of converting JavaScript code, preventing this visual discrepancy. This improves the consistency and reliability of our development tools.
Original PR description
Steps to reproduce
==================
- Create a js file with a blank line followed by an unnamed import
```js
import { mailModels } from "@mail/../tests/mail_test_helpers";
import "@account_accountant/components/bank_reconciliation/list_view/list_view_many2one_multi_edit";
import "@account_accountant/components/bank_reconciliation/list_view/list";
debugger;
```
- Open the devtools
=> The debugger will be off by one line
Cause of the issue
==================
When remplacing unnamed imports by a require statement, the leading whitespace was not preserved.
Solution
========
We add back the captured space. This is done for every other replacement.
Forward-Port-Of: odoo/odoo#239531