Daily updates from Odoo
Tuesday, April 14, 2026
55 changes · saas-19.1
New functionality added to Odoo
This update introduces basic financial reporting capabilities specifically tailored for businesses in Uzbekistan. It includes essential reports like the Balance Sheet and Profit & Loss Report, allowing users to track key financial data relevant to this market. This enhancement supports our growing presence and compliance needs in Uzbekistan.
Original PR description
This commit introduces basic report package for Uzbekistan and includes Balance Sheet and Profit & Loss Report. task-3927927 Community PR - https://github.com/odoo/odoo/pull/241811 Forward-Port-Of: odoo/enterprise#103136
This update adds a basic accounting package specifically tailored for businesses in Uzbekistan. It includes essential features like charts of accounts, tax settings, and demo data, along with Uzbek language support and Uzbekistan state information. This expansion allows Odoo to fully support operations within the Uzbek market.
Original PR description
This **PR** introduces basic accounting package including Demo Data, Chart of Accounts, Account Groups, Taxes and Tax Groups for Uzbekistan. Additionally, it also introduces Uzbek language and Uzbekistan states to support `l10n_uz`. task-3927927 Enterprise PR - https://github.com/odoo/enterprise/pull/103136 Forward-Port-Of: odoo/odoo#241811
This update allows users to split a single production order into multiple serial numbers, addressing a limitation introduced in a previous update. Previously, generating multiple serial numbers was restricted to one order at a time. Now, a new button in the serial number generation wizard enables users to create individual serial numbers for each sub-order, improving traceability and flexibility in managing production runs.
Original PR description
Since 4bb4e08066449, producing multiple serial that have been generated is only doable on one mo. We can split mo. we can generate serial number but we cannot do both at the same time. This commit adds a new button into the generate serial wizard to split the main mo into the number of serial wanted and attribute one for each sub mo. 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#255577
This update allows users to efficiently change the partner associated with multiple invoices or move records directly from a list view. Previously, changing this field required individual updates for each record. This enhancement improves workflow efficiency and data accuracy.
Original PR description
[IMP] account: mass edit partner on move list This commit adds the feature to mass edit the partner field on moves when the user is in a move list view. A widget is created to display either the Many2one `partner_id` field (in case we're editing multiple moves) or the `invoice_partner_display_name` (in case we're displaying without editing) task-5986025
Enhancements to existing features
This update enhances the processing of point-of-sale transactions within Odoo Enterprise, specifically for German tax reporting (l10n_de_pos_cert). It optimizes transaction timing and ensures all active transactions are cleared at the end of each session, improving data accuracy and compliance.
Original PR description
In this commit: ------------------ - The transactions were shown to be processed within 0-1 seconds as we were used to call start and finish transaction calls on validation so in the case of retails it won't give actual data of start and end time so we need to improve this and called now for `start transaction` when first orderline added to a new order, calling `cancelled` if the order is deleted or all the orderlines are removed manually, and `finished` on validation of the order. - Also will delete all active transactions on the fiskaly at the time of closing of session so that no active order remains (if cleared cache) As a lot things are already handled in v19 Handled https://github.com/odoo/enterprise/pull/99216 pr's remaining updates here. Forward-Port-Of: odoo/enterprise#107530
This update enhances the budget reporting feature to now automatically include asset accounts (current, non-current, and fixed) in budget tracking. This provides a more complete view of financial performance and aligns budget reports with a broader range of business expenses.
Original PR description
Expand the scope of budget tracking to include asset accounts. Modified the account filtering logic so that when a budget type is set to "Expenses" or "Both", the query includes 'asset_current', 'asset_non_current', and 'asset_fixed' account types. task-5994048 Forward-Port-Of: odoo/enterprise#112239 Forward-Port-Of: odoo/enterprise#109496
This update enhances the system's ability to detect duplicate accounting moves, providing clearer visual cues for users. The system now highlights identical references in red and different ones in yellow, and warnings are restricted to 'Draft' moves, ensuring accuracy and reducing confusion.
Original PR description
In this commit: - Highlight the reference in red when it is identical and in yellow when references are different. Apply the same logic to the duplicate document warning in the form view. - In the form view duplicate warning, use the Bill Reference if available, then the Move Name, then "Draft". - Yellow warnings are restricted to Draft moves; only red warnings remain visible once Posted. task-5916255 Forward-Port-Of: odoo/odoo#248421
Resolved issues and error corrections
This update resolves an error preventing customers from successfully connecting or refreshing their Shopee accounts within the Odoo Enterprise system. The fix corrects a technical issue within the module's code that was causing errors during the authorization process. New automated tests have been added to ensure this functionality remains stable.
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
This update resolves a problem where embedded PDF previews in XML invoices (like UBL files) were not displaying correctly in the Documents app. The fix restores a key parameter that allows the backend to properly extract and serve the PDF data, ensuring the preview panel functions as intended. This improves the user experience when working with invoices.
Original PR description
Steps to reproduce: 1. Upload an XML invoice (e.g., UBL) containing an embedded PDF into the Documents app. 2. Select the document to open the preview panel. 3. The viewer opens but shows a…
Steps to reproduce: 1. Upload an XML invoice (e.g., UBL) containing an embedded PDF into the Documents app. 2. Select the document to open the preview panel. 3. The viewer opens but shows a grey/empty PDF viewer. Context: Commit odoo/odoo@5035107e introduced an updated PDF viewer.js. Subsequently, commit d3481a5e removed the `download=0` query parameter from the viewer route to prevent `new URL()` parsing errors on relative paths. However, the backend specifically relies on the `download=0` flag to intercept the request, extract the Base64 data, and serve the raw PDF binary. Without this parameter, the backend serves the raw XML string directly to the PDF viewer, causing the parser to crash. Fix: Restore the `download=0` parameter by using the core `url` utility to construct a safe, absolute URL before encoding it for the viewer. This satisfies the strict `new URL()` parsing in the updated PDF viewer while ensuring the backend correctly triggers the PDF extraction. Task-6065246
This update creates a direct connection between Documents and Project Tasks, resolving a previous issue where attachments and saved documents weren't automatically linked. Now, documents created from Project Tasks will automatically include a link back to the task, improving workflow and organization.
Original PR description
Previously, there was no connection between the Documents app and Project Tasks (`project.task`). Attachments added to a task via the chatter were not synced to the Documents app, and documents manually saved from the chatter lacked a link back to the corresponding task. This commit introduces a link between them by posting a message in the created document's chatter, linking it back to the task. This solution is specifically for stable versions. On `master`, we introduce a proper bridge. task-5941719 Forward-Port-Of: odoo/enterprise#111996
This update fixes an issue where global invoices generated from customer invoices weren't correctly including the issued address's zip code in the XML export. The change ensures that the correct shipping information is accurately reflected in the required Mexican tax documents. This improves compliance and data accuracy for Mexican VAT reporting.
Original PR description
**STEP TO REPRODUCE** 1. install l10n_mx_edi_extended. 2. Add an issued address on the customer invoice journal, with a zip code. 3. Create invoices, and create a global invoice with them. 4. download the xml, and notice the field LugarExpedicion is not using the zip from the issued address while it should. opw-5956837 Forward-Port-Of: odoo/enterprise#112223 Forward-Port-Of: odoo/enterprise#108732
This update removes a restriction that prevented users from accessing tax returns when the GST e-filing feature was disabled. Previously, users were redirected to enable the feature, which wasn't ideal for all tax return types. Now, users can access all tax returns regardless of the GST e-filing setting.
Original PR description
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests…
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests enabling the gst e-filing feature from the configuration. - Which is not desirable, as there might be some returns that are not related to gst e-filing, which should be accessible by the user. AFTER: - After this commit, removed the RedirectWarning when accessing the tax return view with gst e-filing feature disabled. So now the user can access tax returns without enabling gst e-filing feature. - At the time of setting the fiscal year(generating/refreshing returns automatically), the GSTR returns will not be created. - And at the time of manual GSTR return creation, we are raising UserError to instruct the user about enabling the gst e-filing feature. Related Com PR: https://github.com/odoo/odoo/pull/247216 Task-5486586 Forward-Port-Of: odoo/enterprise#105983
This update resolves an issue where the LU VAT reports were incorrectly showing only the first product with a missing internal reference. Now, the report accurately displays all products that needed this reference set, ensuring accurate VAT reporting for Luxembourg businesses. This addresses a previous reporting error.
Original PR description
This is one of several commits fixing the FAIA xml export. The internal reference must be set for all products reported in the FAIA report. When there are multiple products missing this field, our previous code only reported the first ID to the customer. This commit shows the customer all incorrectly configured products. opw-5427296, opw-6113665 Forward-Port-Of: odoo/enterprise#113563 Forward-Port-Of: odoo/enterprise#113452
This update resolves a crash that occurred when users double-clicked 'Add Custom Field' within Odoo's list views. The fix ensures that opening the web studio is properly protected, preventing the previous instability. This improves the overall stability and usability of the Enterprise edition.
Original PR description
On a list view, open the optional fields dropdown. Click twice on "Add Custom Field" Before this commit there was a crash, because opening studio while it is already opening was not protected. After this commit, there is no crash. Forward-Port-Of: odoo/enterprise#113299
This update corrects a technical issue within the web_studio report editor that was causing unwanted formatting placeholders to appear in generated reports. This prevented reports from printing correctly, and the fix ensures that layouts are properly formatted during the report generation process. The change improves report quality and reliability.
Original PR description
… sections Before this commit, the html_editor automatically put placeholders between hearder, article and footer nodes (identified with classes) This is caused by odoo/odoo@edf7f7bb0c62978640c181eccb4934855d5d872d. This caused issues because at print time those cracks are not printed because of base/ir_actions_report.py:def _prepare_html (which separates header, footer, and articles to pass them to wkhtmltopdf) After this commit, those placeholders are not present in those cracks. opw-6048955 Forward-Port-Of: odoo/enterprise#112458
This update streamlines the loading of data for the self-ordering point-of-sale system. By limiting the fields loaded, we've optimized performance and reduced the load on the system, particularly for self-ordering transactions. This results in a faster and more responsive experience for users.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. X-original-commit: ce78609b368e541a70c17141ee5b51543c73c1d0
This update resolves an issue where submitting helpdesk tickets with emails in different capitalization (e.g., 'partner@mail.com' vs. 'Partner@mail.com') would incorrectly create a new partner. Now, the system correctly identifies and uses the intended partner, preventing duplicate entries and ensuring accurate ticket assignment.
Original PR description
**Steps to reproduce** - Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123"). - Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com"…
**Steps to reproduce**
- Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123").
- Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com" as email (notice the different capitalization) and "456" as phone number.
Behavior without this fix: a new partner is created, but the ticket is assigned to the orignal partner ("partner@mail.com") and its phone number is updated.
Behavior after this fix: no partner is created.
**Causes**
- the partner search was case sensitive
- the created partner was not used as the `partner_id` of the ticket as it was added to the params but needs to be in the kwargs passed to `handle_website_form` in order to be found used by `extract_data`. The original partner was found in `_find_or_create_partner` by the call to
`_mail_find_partner_from_emails` (case-insensitive)
Note: this commit also ensures consistency between the partner's company and the ticket's company (same as in `_find_or_create_partner` of `helpdesk.ticket`).
Also, avoid allowing modifying existing partner's phone via this form.
opw-5914064
Forward-Port-Of: odoo/enterprise#109393This update fixes an issue where search filters applied in the Manufacturing Production Scheduling (MPS) view would disappear when navigating away and returning via the breadcrumb. The fix ensures that the search state is correctly maintained, providing a more consistent and user-friendly experience for users working with MPS reports.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113183 Forward-Port-Of: odoo/enterprise#113125
This update resolves an issue where prompts within email templates weren't being evaluated correctly. The fix ensures that all prompt containers are wrapped in a `<div>` element, preventing errors and guaranteeing prompt evaluation. This improves the functionality of AI-powered email templates.
Original PR description
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to…
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to reproduce: - Create a new email template. - Insert a prompt by using the '/prompt' command. - Type any prompt like 'Say Hello'. - Save the email template. - Click on preview. - The prompt isn't evaluated. The '_eval_ai_prompts' method creates a root element from the passed html content. When the passed content represents a single prompt container html element, the root will become that prompt container. The method will try to evaluate the prompt and replace the prompt container and then return the root. The returned root won't contain the evaluation of the prompt in this case because the whole root should be replaced by the evaluation given that there is no other elements. To fix this, the html content will always be wrapped in a `<div>` to avoid the need for replacing the whole root element. Forward-Port-Of: odoo/enterprise#111645 Forward-Port-Of: odoo/enterprise#110247
This update fixes an issue where appointment booking descriptions were displayed in the user's language instead of the website's language (French). The fix ensures that booking details are shown in the correct website language, regardless of the user's language settings, improving the user experience for international customers. This was a minor inconsistency in the booking presentation.
Original PR description
When booking an appointment, the cart shows the date/time in the partner's language instead of the website's language. `_prepare_order_line_values` uses `self.partner_id.lang`, ignoring the website language and using the user's language instead. Steps to reproduce: 1. Have a website language different than the user's language 2. Go to the website appointment page 3. Book an appointment 4. Check the booking For this case: - Website language: French - User language: English => You will find, "xxx at xx:xx to yyy at yy:yy" instead of "xxx à xx:xx au yyy à yy:yy" Ticket [link](https://www.odoo.com/odoo/action-4043/5931610) opw-5931610 Forward-Port-Of: odoo/enterprise#113208 Forward-Port-Of: odoo/enterprise#107698
This update fixes an issue where vendor bills created in the Documents module defaulted to the company's currency instead of the vendor's. Now, when a vendor is selected in the Documents module, the bill automatically uses the vendor's currency, ensuring accurate financial reporting. This improves the consistency and reliability of our invoicing process.
Original PR description
**Issue:** When creating a vendor bill or vendor refund through the Documents module after selecting a supplier, the currency defaults to the company's currency instead of the vendor's. However, if the supplier is selected later in the Accounting module, the correct supplier currency is applied. **Steps to reproduce:** - In Documents, upload a bill. - Click on the bill and assign a vendor (whose supplier currency is different from the company's currency). - Click on "Create Vendor Bill". The used currency isn't that of the supplier. opw-4406074 Forward-Port-Of: odoo/enterprise#100846 Forward-Port-Of: odoo/enterprise#78380
This update fixes an issue where subscription discounts were incorrectly calculated due to how recurring plan prices were being used. The fix ensures discounts are accurately applied by dividing the base plan price by its unit, leading to more consistent and reliable pricing on the website. This improves the accuracy of subscription offers.
Original PR description
### Steps to reproduce: - Install Subscriptions and eCommerce modules - Create 3 recurring plans (3 months, 6 months, Yearly) - Create a service subscription product with the created recurring plans - Check the product's page on website - Notice each pricing has a discount tag and with incorrect numbers ### Cause: When calculating the discount we normally use the fixed price of the base plan as the price to compare with. This sometimes introduce inconsistencies if the base plan is not just one unit from the period (>1 week/month/year) ### Fix: We divide the base_plan_price by the unit of the plan so we can get the price of just one plan unit. opw-6048278 Forward-Port-Of: odoo/enterprise#112305
This update corrects a problem where overridden group names within the accounting module weren't being properly translated into the Odoo localization files (POT). Previously, the system used the standard 'account' translations, leading to inconsistencies. This fix ensures that accounting group names are now translated correctly, maintaining accurate localization across the system.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently. Forward-Port-Of: odoo/enterprise#113470 Forward-Port-Of: odoo/enterprise#112898
This update resolves a technical issue in the Lu reporting module that caused incorrect debit and credit calculations in exported financial reports (FAIA). The fix ensures that invoice line amounts are accurately represented, preventing validation errors and improving report accuracy. This ensures financial data is reported correctly.
Original PR description
This is one of several commits fixing the FAIA xml export: - #113452 - #113455 - #113846 When an invoice line has a negative `price_unit`, the `Invoice/Line/InvoiceLineAmount/Amount` element has a negative value. This causes validation errors when comparing the total debit or credit values (such as `SalesInvoices/TotalDebit`) to the individual amounts, as the sum of individual "debit" lines will include some credit amounts and vice versa. Solution: record if the line is actually a debit or a credit, then use the absolute value of the balance in the Amount element. opw-5427296 [Link](https://www.odoo.com/odoo/unassigned-tasks/5427296) Forward-Port-Of: odoo/enterprise#113316
This update ensures that when 'Hide Composition' is enabled on a section, the preview view accurately reflects the hidden products, aligning with the PDF report's behavior. The issue was resolved by updating the filtering logic to account for collapsed sections, preventing recurring subscription lines from being displayed.
Original PR description
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still…
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still visible in the portal's 'preview' view, whereas they are correctly hidden in the PDF report. **Expected behavior:** As observed in pdf format, in preview, the hidden section should hide the components and only view the name of the section. **Steps to reproduce:** - Create quotation with One Goods type product - Add section with Hide composition - Add service type product in the section - Preview it and section products will be hidden - Confirm the quotation and now preview the sales order - Now the hidden section products will be visible **Solution:** - We need to separate the logic of displaying lines and invoiceable lines (since _get_invoiceable_lines doesn't necessarily return the sections/subsections) - The filtering in sale subscription module wasn't considering the `collapse_composition` boolean field, which why hidden sections content were displayed. - We need to hide any product with a parent (section or subsection) collapsed, hide any subsection with a parent section collapsed. opw-5868148 Forward-Port-Of: odoo/enterprise#106287
This update fixes an issue where sales orders were incorrectly using the analytic distribution account from Company A instead of Company B when products were assigned to both. The change ensures that the correct company's project and analytic account are used, resolving potential discrepancies in financial reporting across multiple companies.
Original PR description
Pre-requisites: ------------------------------------------ 1. Install `sale_project` and `project_account_budget` modules 2. Have two companies configured in the system 3. Enable Timesheets from the…
Pre-requisites:
------------------------------------------
1. Install `sale_project` and `project_account_budget` modules
2. Have two companies configured in the system
3. Enable Timesheets from the Settings app
4. Create two projects (one for each company)
5. Ensure the following settings are enabled on both projects:
* Timesheets
* Billable
Steps to Reproduce:
------------------------------------------
1. Switched to Company A
2. Create a product with:
* Type: Service
* Create on Order: Task
* No company restriction
3. Set the product's `project_id` to Company A's project
4. Switch to the newly created company (Company B)
5. Set the product's `project_id` to Company B's project
6. Enable Analytic Distribution from SOL Optional
7. Create a sale order with the configured product, and delete the auto-fetched
Analytic Distribution account for the sale order (Company B's project)
8. Now confirm the sale order
Observation:
----------------------------------------
The SOL's analytic distribution uses the analytic account from Company A's project instead of Company B
Issue:
----------------------------------------
The `project_id` field on `product.template` is `company_dependent=True`, meaning it stores different values per company. However, in `_compute_analytic_distribution()`, the code accesses `line.product_id.project_id` without calling `with_company`, so it resolves the field using the wrong company context
Solution:
----------------------------------------
using `with_company()`, the correct company context is applied when accessing
`project_id`, preventing inconsistencies in multi-company environments and
ensuring the appropriate project is used for the corresponding company.
opw-5864452
Forward-Port-Of: odoo/odoo#257776This update resolves an issue preventing the creation of product feeds when only one website is enabled in Odoo. The fix sets a default website ID, addressing a technical limitation related to language settings that was blocking feed creation in single-website configurations. This ensures all users can utilize product feeds effectively.
Original PR description
Issue: --- Due to this issue, we cannot create a `product.feed` record in single website db. Steps to reproduce: 1- Create a fresh db with single website. 2- Enable Google Merchant Center. 3- Try to create a `website.feed` record. It's not possible to create the record due to language field. Cause: --- `website_id` is only shown in `group_multi_website`. When there is only one website set, there is no default value for the website. `lang_id`'s domain is also `website_id.language_ids`, as a result record creation will fail. opw-6110843
This update resolves an issue where spreadsheet pivots were crashing due to incorrect field type support. The team corrected a reliance on a single field property (`field.groupable`) and now properly handles all field types, preventing unexpected errors. This ensures greater stability and reliability for spreadsheet reporting.
Original PR description
Spreadsheet pivots only do not support all field types. But we were relying only on `field.groupable` to determine if a field could be grouped, which is wrong (eg. JSON fields can be groupable but are not supported). It leads to crashes for fields that were groupable, but didn't have an entry in `pivotNormalizationValueRegistry`. Added a test for all of the field types to ensure we have a correct behavior. Task: 6036075 Task: [6036075](https://www.odoo.com/odoo/2328/tasks/6036075) 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#258448 Forward-Port-Of: odoo/odoo#255571
This update fixes a technical error in the l10n_hr_edi module that prevented certain invoice sending constraints from being properly enforced. The issue stemmed from a previous typo that was missed during the update process. This ensures invoices are sent correctly and aligns with accounting regulations.
Original PR description
In 18.0, the `_check_move_constraints()` method contained a typo - `_check_move_constrains()` - and the module was developed with this in mind. The typo was fixed in 19.0, but this was missed during the forward port of this module, leading to additional constraints not triggering properly. ticket-6036500 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257492
A recent update to the MRP module has resolved a test failure that was occurring in automated builds. This change ensures that a key test – `test_basic_flow_with_minimal_access_rigths` – consistently passes, preventing potential disruptions to the system. This fix primarily addresses an internal build issue and doesn't directly impact users.
Original PR description
The test `test_basic_flow_with_minimal_access_rigths` fails in builds without `stock_barcode_mrp` since the `backorder_ids` mrp.production field is introduced in that module: https://github.com/odoo/enterprise/blob/92c584cc1426ac70f6f77aa8216c17004fa42d35/stock_barcode_mrp/models/mrp_production.py#L10 runbot-242465 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258837
This update removes a restriction that prevented users from accessing tax returns when the GST e-filing feature was disabled. Previously, users were redirected to enable the feature, which wasn't suitable for all tax returns. Now, users can access all tax returns regardless of the GST e-filing setting, streamlining the process.
Original PR description
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests enabling the gst e-filing feature from the configuration. - Which is not desirable, as there might be some returns that are not related to gst e-filing, which should be accessible by the user. AFTER: - After this commit, removed the RedirectWarning when accessing the tax return view with gst e-filing feature disabled. So now the user can access tax returns without enabling gst e-filing feature. - At the time of setting the fiscal year(generating/refreshing returns automatically), the GSTR returns will not be created. - And at the time of manual GSTR return creation, we are raising UserError to instruct the user about enabling the gst e-filing feature. Related Ent PR: https://github.com/odoo/enterprise/pull/105983 Task-5486586 Forward-Port-Of: odoo/odoo#247216
This update fixes a bug where countdown snippets weren't visible in the website builder's preview dialog. The change ensures that the necessary interaction code is loaded within the preview environment, allowing countdown timers to display correctly. This improves the user experience when creating website content.
Original PR description
The content of the countdown snippet did not appear in snippets preview dialog, because the interaction that fills it was not loaded for preview. This commit adds the interaction in the registry for loading it inside the iframe of the snippets preview dialog. Steps to reproduce: - Open website builder - Drop a `s_text_image` snippet - Drop a `s_countdown` snippet inside - Save the first one as a custom snippet - Click on "Custom" snippets category - Bug: the countdown does not appear task-6088029 Forward-Port-Of: odoo/odoo#258916 Forward-Port-Of: odoo/odoo#257480
This update fixes an issue where 'View Quotation' buttons in email notifications were not consistently translated for recipients in different languages. The change dynamically adjusts the language context during email creation, ensuring accurate translation of all action buttons. This improves the user experience for international customers.
Original PR description
When sending a quotation or sales order via email to a follower, the action button in the notification (e.g., "View Quotation") was appearing partially translated in the recipient's language. The issue came from the document description being explicitly evaluated using the sender's language context usually English) during the email composition phase, so it could not be correctly re-translated by the mail engine when rendering the final layout for a recipient using a different language. This commit allows the language context to be dynamic when preparing the document description for the email composer, ensuring the action button is fully and accurately translated. --- opw-5976084 Forward-Port-Of: odoo/odoo#257349 Forward-Port-Of: odoo/odoo#256077
This update resolves an issue where clicking on records within the 'Forecasted' report in the product catalog didn't function correctly. The fix allows users to open and view the full details of stock records accessed through this report, improving usability and data access.
Original PR description
Steps to reproduce ================== - Install sale_stock - Go to Products - Open the "Acoustic Bloc Screens" record - Click on the Forecasted smart button - Click on "three quotations" - Click on a record => Nothing happens opw-6095229 Forward-Port-Of: odoo/odoo#258157
This update resolves an issue where multiple employee expenses were incorrectly sharing attachments. The fix ensures that each vendor bill accurately reflects the attachments associated with the specific expense it's linked to, preventing duplicate files in journal entries. This improves data accuracy and simplifies expense reporting.
Original PR description
Steps to reproduce: 1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2). 2. Upload different attachments to each (e.g., 2 files for A, 3 files…
Steps to reproduce:
1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2).
2. Upload different attachments to each (e.g., 2 files for A, 3 files for B).
3. Select both expenses and use the 'Post' action to open the posting wizard.
4. Click 'Post' in the wizard.
5. Check the generated journal entries (vendor bills).
Result: Both vendor bills contain all 5 attachments (copies of A's files and copies of B's files).
Issue:
In `_prepare_bills_vals`, `self.attachment_ids` is collected before the
`grouped('employee_id')` loop (see: https://github.com/odoo/odoo/blob/6b7fff433335edf7459f7a6eb5c274c0f4d5d1df/addons/hr_expense/models/hr_expense.py#L1572-L1578).
Since `self` refers to the full expense recordset, `self.attachment_ids` returns
the union of all attachments across every expense. This combined list is then
assigned to every bill created inside the loop, causing attachments from one
employee's expenses to leak into another employee's journal entry.
opw-6056590
Forward-Port-Of: odoo/odoo#258784
Forward-Port-Of: odoo/odoo#256031This update streamlines the loading of data for the self-ordering point-of-sale system. By only retrieving the necessary information, the system now runs more efficiently, particularly during self-ordering transactions. This change improves the overall responsiveness and performance of the self-ordering feature.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257865
This update fixes an issue where the invoice report header overlapped with data on multi-page PDFs. By conditionally applying a responsive class only to HTML views, the system now correctly repeats the header row across pages, ensuring readability on mobile devices. This improves the user experience for invoices with many lines.
Original PR description
This commit: https://github.com/odoo/odoo/commit/ad6351c Wrapped the invoice line table in a `<div class="table-responsive-sm">` to enable horizontal scrolling on mobile. However, Bootstrap's…
This commit: https://github.com/odoo/odoo/commit/ad6351c Wrapped the invoice line table in a `<div class="table-responsive-sm">` to enable horizontal scrolling on mobile. However, Bootstrap's `table-responsive-sm` sets `overflow-x:auto` on the container, which prevents wkhtmltopdf from repeating the `<thead>` across page breaks. On pages 2+, the header row (Description, Quantity, Unit Price, Amount) renders on top of the first data row instead of appearing as a separate repeated header. Made the `table-responsive-sm` class conditional on `report_type == 'html'` so it only applies in HTML views where mobile scrolling is needed, and is omitted for PDF rendering. This follows the same pattern already used throughout the invoice template for other responsive classes. Steps to reproduce: 1. Create an invoice with enough lines to span multiple pages 2. Print the invoice as PDF => On page 2+, the table header overlaps with the first data row, making both unreadable. Ticket [link](https://www.odoo.com/odoo/action-4043/5867972) opw-5867972 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that all participant answers are consistently included when printing surveys, regardless of the survey type. Previously, certain survey types would omit answers, leading to inaccurate and incomplete reports. This change improves the reliability and usefulness of survey data for analysis and reporting.
Original PR description
Previously, printing surveys of type scoring_without_answers omitted participants' answers, resulting in incomplete and inconsistent reports. This commit ensures answers are always included, regardless of survey type. Task-5407701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258616
This update ensures that stock lot generation accurately reflects the product's packaging (e.g., 'Pack of 6') instead of defaulting to the base unit of measure. Previously, the system incorrectly calculated quantities, leading to inaccurate lot creation. This fix improves inventory accuracy and order fulfillment.
Original PR description
Steps to reproduce the issue:
- Enable "Units of Measure" and "Lots & Serial Numbers" in the inventory settings
- Create a storable product "P1":
- Tracking: Lot
- UoM: Unit
- Sales tab: Packagings > Pack of 6
- Create a receipt with 3 packs of 6 of P1
- Mark it as "To Do"
- Open the detailed operations and click on the "Generate Serials/Lots" button:
- First lot: Lot 1
- Quantity per Lot: 3 packs of 6
- Quantity received: 3 packs of 6
- Click on "Generate"
Problem:
A stock move line is created with 3 units instead of 3 packs of 6, because the UoM is not passed from the JavaScript side to the Python side. As a result, the default product UoM (Unit) is used.
opw-5933277
Forward-Port-Of: odoo/odoo#258392This update corrects a technical issue preventing proper import of Nilvera electronic invoices. The team renamed a method in the core Odoo system to align with a recent change, and this PR ensures the Nilvera module's override reflects that update. This ensures Nilvera invoices are imported correctly.
Original PR description
# Description of the issue/feature this PR addresses The parent class `account.edi.xml.ubl_20` renamed `_import_fill_invoice_form` to `_import_fill_invoice`. The override in `l10n_tr_nilvera_einvoice` was not updated to match, causing the override to be silently ignored. # Current behavior before PR The `_import_fill_invoice_form` override in `l10n_tr_nilvera_einvoice` is never called because the parent method no longer exists under that name. # Desired behavior after PR is merged The override is renamed to `_import_fill_invoice` to match the parent class, restoring correct behaviour for Nilvera invoice imports. task-id: None --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258752 Forward-Port-Of: odoo/odoo#258097
This update resolves an unexpected access rights error that occurred when users created email campaigns with dynamic fields. The issue stemmed from a technical detail in how the system inlined styling within email templates, leading to a false security alert. This change ensures smoother email campaign creation for all users.
Original PR description
This commit fixes an unexpected access rights error when users try to add simple dynamic fields allowed by mail_allowed_qweb_expressions to mass_mailing emails. During the convert_inline process, the…
This commit fixes an unexpected access rights error when users
try to add simple dynamic fields allowed by mail_allowed_qweb_expressions
to mass_mailing emails.
During the convert_inline process, the <t t-out=""/> placeholder element
has its style inlined, and attributed to its style attribute.
This style attribute was not filtered out during the safety
check process, resulting in the templating engine believing a disallowed
directive was used.
Steps to reproduce:
- On a fresh 18.0+ install with demo data, login as Marc Demo
- Access the Email Marketing app
- Create a new mailing campaign
- Set sending to Newsletter or Mailing Contact
- Type /field to add a dynamic value
- Set it to Name
- Save the mailing
- An access rights error is raised due to the user not having
group_mail_template_editor permissions and the dynamic placeholder
node having a style attribute
Fix:
T nodes are no longer granted a style attribute during style inlining.
Forward-Port-Of: odoo/odoo#257992
Forward-Port-Of: odoo/odoo#226111This update fixes an issue where portal users couldn't edit messages within the project chatter. The fix prevents a technical error (a 'null' value issue) that occurred when attempting to edit a message, ensuring portal users have the full functionality to manage their project communications.
Original PR description
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a…
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a Task T 3. In the Setting of Project P, click *Share Project* and select a portal user 4. Logged as a portal user, open Task T, send a message in the chatter, then try to edit it by clicking the *Edit* (pencil) button. 5. **Nothing happens, but a traceback appears in the console: _Caused by: TypeError: Cannot read properties of null (reading 'id')_** ## Cause The condition causing this error is the following: https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L9-L13 where `this.thread` is not defined yet. Other conditions in this patch check for `this.thread` before trying to read its `id` [[1](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L25), [2](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L32)], which leads to believe that the check was simply forgotten in this condition. opw-6072570 Forward-Port-Of: odoo/odoo#258234
This update resolves an issue where searching for tags on tasks in the portal caused a system crash. The fix restricts how domain modifications are applied, ensuring the system correctly handles tag searches within task relational fields. This improves the stability and usability of the task management feature for portal users.
Original PR description
Steps to reproduce: -------------------------- 1. Install Project and create a portal user. 2. Create a project and a task with tags added to it. 3. Share the project with the portal user (Edit…
Steps to reproduce:
--------------------------
1. Install Project and create a portal user.
2. Create a project and a task with tags added to it.
3. Share the project with the portal user (Edit access).
4. Log in as the portal user and open the task.
5. Click on the 'Tags' field and select 'Search More'
Issue:
----------
A traceback occurs:
```ValueError: Invalid field project.tags.display_in_project in condition ('display_in_project', '=', True)```
Cause:
----------
The [ProjectTaskRelationalModel](https://github.com/odoo/odoo/blob/75fd7b05766c6789bf311f6a8257b89ecf4f86de/addons/project/static/src/views/project_task_relational_model.js#L4-L7) calls `_processSearchDomain.`
This method automatically appends a domain when 'showSubtasks' is not enabled.
https://github.com/odoo/odoo/blob/75fd7b05766c6789bf311f6a8257b89ecf4f86de/addons/project/static/src/views/project_task_model_mixin.js#L5-L12
When clicking 'Search More' on the 'Tags' field, the same domain is
applied to the **project.tags** model. However, since **project.tags**
does not have the `display_in_project` field, the ORM raises a ValueError.
In portal, only `project.webclient` assets are loaded, causing
ProjectTaskRelationalModel to be used for all relational fields.
In contrast, internal users use the standard RelationalModel, so the
issue does not occur.
Solution:
-------------
Restrict the domain modification in _processSearchDomain to apply only
when the current model is `project.task` and `report.project.task.user`.
opw-5930427
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#258656
Forward-Port-Of: odoo/odoo#249282This update resolves an issue where Point of Sale users couldn't successfully refresh their Viva.com payment tokens, leading to errors when making payments. The fix ensures that the refreshed token is persistently stored, allowing Viva payments to continue working smoothly even after the initial token expires or is invalidated.
Original PR description
Point of Sale users only have read access on pos.payment.method. When the stored Viva.com bearer token expires or the API returns invalid credentials, _bearer_token() fetches a new token . That write ran as the POS user and raised an AccessError, although the user was only paying—not editing configuration. Steps to reproduce: ------------------- * Configure Viva.com as payment method. * Open the POS as a user with only Point of Sale / User (not Administrator). * Pay with Viva until the OAuth token must be refreshed (e.g. after expiry or after Viva rejects the current token). > Observation: AccessError: You are not allowed to modify 'Point of Sale Payment Methods' (pos.payment.method) records. Why the fix: ------------ Persist the refreshed viva_com_bearer_token with sudo().write() so the ORM does not require write ACL on pos.payment.method for that internal side effect of an already authorized Viva RPC. opw-6078131 Forward-Port-Of: odoo/odoo#257842
This update resolves an issue where the size of images, especially those protected by CORS, was incorrectly displayed in the website builder. The fix accurately determines image size by retrieving information from the server, ensuring correct size representation for all images, regardless of their origin.
Original PR description
[FIX] html_builder, *: hide the size of CORS-protected images *: html_editor Steps to reproduce: - Add an image on the website. - Replace it with a CORS-protected image. -> The image options display…
[FIX] html_builder, *: hide the size of CORS-protected images *: html_editor Steps to reproduce: - Add an image on the website. - Replace it with a CORS-protected image. -> The image options display a size, but it is incorrect. The problem is that it is not the real size of the image but the size of a default image (due to it, if you replace the image by another CORS protected one, you'll see that the size of the image remains the same). Indeed, the size of an image (in bytes) is computed from the length of the raw b64 content of the image, on which a ratio of 3/4 is applied. Because the image is CORS protected, we can not retrieve the raw b64 of the image so the image size should not be displayed. This commit hides the size of CORS protected image as it is impossible to retrieve. Note: example of a CORS protected image: https://tinyjpg.com/images/social/website.jpg task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: correctly determine image mimetype *: html_editor The goal of this commit is to improve the way the mimetype of an image is determined if the information is not in the DOM. Before this commit, the system relied on the extension of the image source to determine its mimetype. This is not really robust and it is easily trickable. For example, in `html_editor`, if an image in a html field comes from an attachment, its `src` attribute will end by the attachment name. If a user changes the attachment name extension, the next time the image is added on the DOM, the extension is changed but the mimetype of the image is unchanged. To solve the problem, the mimetype of the image is determined thanks to the headers of the http request to the `src` of the image. That way, the information comes from the server hosting the image. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, website: enable the quality change on shaped img This commit improves [this one] by adding a test (this commit was created before [this one] was merged). It also improves it; the `mimetypeBeforeConversion` is either retrieved from the dataset or from a `loadImageInfo` if the information is not on the dataset. [this one]: https://github.com/odoo/odoo/commit/738d5fb5ae2154e1f6993817fab5471d2d4384fa task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: hide shape option for CORS-protected images *: website Steps to reproduce the problem: - Add an image on the page. - Replace the image by a CORS protected one. - Try to apply a shape on the image. -> Traceback The goal of this commit is to hide the "Shape" option if the "original image" of an image is not retrievable. Indeed, in this case, the option will fail to apply correctly. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: avoid displaying options that are not compatible *: html_editor, website Few options like filter, quality, format and cropping rely on canvas to work. The problem is that it does not work correctly for mimetypes like `svg` or `gif`. Indeed, if an image modification is done on such images, it will automatically be transformed into a `png` by default. To avoid it, this commit hides the options that rely on a canvas manipulation when clicking on a `svg` or `gif` image. The process image function has also been adapted to not try to transform an image if its mimetype is not compatible with a canvas transformation. Instead, those images are directly transformed into `b64` images without any transformation. Thanks to it, a shape can be applied on a `svg` or a `gif`. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: apply shape on replaced svg and gif images *: website Steps to reproduce the problem: - Add a "Text-Image" snippet on the page and add a shape on the image. - Replace the image by a svg or a gif. -> A shape is displayed on the image options but the shape is not applied on the image. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: avoid copying options on new incompatible images *: html_editor, website Steps to reproduce: - Add an image on the website. - Add a shape on the image. - Replace the image by a CORS-protected one. -> The image still has the shape data attributes on its HTML element while it should not as it does not have the prerequisites to have a shape (it does not have an original source). The same problem exists with the hover effect. This commit moves the logic that transfers the shape and hover effect on replaced images from `html_editor` to the responsible plugins in `html_builder` and `website`. It also adds a check to verify that the replaced image is eligible to have a particular option before transferring its data information. task-5405262 Forward-Port-Of: odoo/odoo#258798 Forward-Port-Of: odoo/odoo#251703
This update fixes an issue where the leave balance report was incorrectly calculating employee leave accruals and usage, particularly with overlapping leave periods. The fix ensures accurate reporting by addressing timezone discrepancies and improving how leave allocations are tracked, leading to more reliable leave data.
Original PR description
__ISSUE__: - FIFO balance miscalculation for non-overlapping allocations. cumulative_allocated_days was partitioned globally by (employee, leave_type), but taken_per_allocation scoped leaves to each…
__ISSUE__:
- FIFO balance miscalculation for non-overlapping allocations. cumulative_allocated_days was partitioned globally by (employee, leave_type), but taken_per_allocation scoped leaves to each allocation's date range. This caused the FIFO formula to silently absorb leaves from one period into another's allocation capacity.
ex:
Alloc A (20 days) 2025, taken leaves 15 days
Alloc B (20 days) 2026, taken leaves 5 days
report: 2025: (15 taken), (5 left)
2026: (7 taken), (20 left)
- Left" rows shifted by one year in non-UTC timezones. Allocation date_from/date_to (Date fields) were cast to timestamp as midnight UTC. In negative-UTC /positive-UTC timezones midnight UTC of Dec 31 renders as the prev/next day.
__FIX__:
- detect overlap groups using a running MAX(date_to) and partition the cumulative sums within each overlap group. This way non-overlapping allocations are treated as independent, while overlapping or open-ended allocations still share FIFO within their group.
- offset allocation dates by 12 hours so no timezone can shift them across a day boundary.
- opw-5169606
- opw-5352114
Forward-Port-Of: odoo/odoo#257873This update resolves an issue where spreadsheet list views were showing technical field names instead of user-friendly labels. The fix ensures that list headers now accurately display the correct field names, improving the user experience when viewing data in spreadsheets. This was necessary due to recent changes in how fields are handled in list formulas.
Original PR description
The `ODOO.LIST.HEADER` formula will display the technical name of the field instead of its albels if there are no `ODOO.LIST` formulas for that same field. Since the introduction of chaining fields in list formulas, the fields we want to fetch should be added to `fieldPathsToFetch` in the data source. But this was only done for the `ODOO.LIST` formula, not for `ODOO.LIST.HEADER`. Task: [5900769](https://www.odoo.com/web#id=5900769&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#258400 Forward-Port-Of: odoo/odoo#257087
This update fixes an issue where sales orders with fully delivered and returned products incorrectly displayed as 'Fully Invoiced'. The fix ensures that the invoice status accurately reflects zero delivered and invoiced quantities after a customer returns a product, preventing incorrect invoicing and improving order accuracy.
Original PR description
### Issue before this commit: When a sales order with a product invoiced on delivered quantities is fully delivered and then completely returned the delivered quantity is reset to zero. In this…
### Issue before this commit: When a sales order with a product invoiced on delivered quantities is fully delivered and then completely returned the delivered quantity is reset to zero. In this situation, where nothing has been invoiced and nothing remains to be invoiced, the invoice status of the sales order line is incorrectly set to "Fully Invoiced" instead of "Nothing to Invoice". ### Steps to reproduce the issue: 1. Create a new quotation for a storable product. 2. Confirm the order. 3. Validate the delivery of the product. 4. Perform a return for the product 5. Validate that return to simulate a customer return. 6. The sales order details correctly reflect that the delivered quantity and invoiced quantity are both zero. Despite these values—which indicate there is nothing to invoice—the invoice status on the quotation erroneously displays as "fully invoiced". ### Cause of the issue: The invoice status computation includes a fallback logic that marks a sales order line as "invoiced" when all related stock moves are either done or cancelled. However, this logic does not verify whether any quantity remains effectively delivered. As a result, after a full return, even when qty_delivered = 0, the condition is still met and the line is incorrectly marked as fully invoiced. ### Reason to introduce the fix: A fully returned sales order line with no delivered and no invoiced quantity should not be considered fully invoiced. The fix ensures that the fallback to "invoiced" only applies when there is a strictly positive delivered quantity, preventing incorrect invoice status after full customer returns. opw-6014772 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258589 Forward-Port-Of: odoo/odoo#254871
This update corrects a previous restriction in how the system identifies Spanish freelancers, specifically for "Comunidades de Bienes" (CBs) with an 'E' VAT prefix. Previously, these entities were incorrectly categorized, leading to potential errors in tax reporting. The change broadens the system's recognition of Spanish freelancers, ensuring accurate fiscal categorization.
Original PR description
In Spain, "Comunidades de Bienes" (VAT starting with 'E') are entities without legal personality that tax via income attribution to their members. For accounting and tax reporting purposes, they must be treated as individuals/freelancers rather than corporations. The current _l10n_es_freelancer logic was too restrictive, only matching standard DNI (8 digits + letter) or NIE (starting with X, Y, Z). This caused CBs to be excluded from freelancer-specific logic, leading to incorrect fiscal categorization in reports and tax modules. The regex has been updated to optionally allow the 'E' prefix while ensuring the rest of the string maintains a valid format, effectively broadening the scope of what the system considers a Spanish freelancer. task-6014192 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258474 Forward-Port-Of: odoo/odoo#253087
This update fixes an issue where discount amounts on POS session reports were calculated incorrectly. The fix ensures that taxes are applied *after* the fiscal position, resulting in accurate discount calculations and reporting. This improves the reliability of financial reports generated from point-of-sale transactions.
Original PR description
Steps: ---- - Create a fiscal position with 2 different taxes - Add a line in POS - Apply fiscal position and add line discount - Finish the order cycle - Download the session report Issue: ---- - The discount amount was calculated incorrectly in the session report Cause: ---- - The discount amount calculation used taxes before applying the fiscal position Fix: ---- - Used `tax_ids_after_fiscal_position` for tax calculation while computing the discount amount task-5421215 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256704 Forward-Port-Of: odoo/odoo#244650
This update resolves an issue where hidden fields within form blocks inside masonry layouts were still visible. The fix involves applying '!'important' to the CSS rule that hides these fields, ensuring they are consistently hidden as intended. This improves the visual consistency of the website editor.
Original PR description
# How to reproduce - Go to the website editor - Add a Masonry block - Add a Form inner block in the Masonry block - Select any fields of the form - Set it's visibility to Hidden - Save # The problem…
# How to reproduce - Go to the website editor - Add a Masonry block - Add a Form inner block in the Masonry block - Select any fields of the form - Set it's visibility to Hidden - Save # The problem The field is still visible. # Cause When a field has its visibility set to hidden, it is applied the `.s_website_form_field_hidden` CSS class which applies `display: none`. https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/snippets/s_website_form/001.scss#L26-L28 But that CSS rule is overriden by the masonry's `.s_masonry_block[data-vcss='001'] .row > div` CSS class. https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/snippets/s_masonry_block/001.scss#L1-L3 https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/scss/website.scss#L3246 # Proposed solution We set `display: none` with `!important` to prevent it from being overidden. We also need to add `!important` to its edit mode counter-part so that the field is still visible in that mode. opw-6038955 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256100
This update fixes an error in how alternative purchase orders are calculated. When using 'Purchase Alternatives,' the system was incorrectly generating a total price of $1360 instead of the expected $1500. The fix ensures accurate price calculations by correctly applying taxes and vendor prices within alternative POs.
Original PR description
[FIX] purchase: set the correct price in alternative PO Steps to reproduce the bug: - Enable "Purchase Alternatives" in settings - Go to Accounting > Configuration > Taxes: - Configure a 15% purchase…
[FIX] purchase: set the correct price in alternative PO
Steps to reproduce the bug:
- Enable "Purchase Alternatives" in settings
- Go to Accounting > Configuration > Taxes:
- Configure a 15% purchase tax:
- Advanced Options tab:
- Included in Price: enabled
- Create a storable product "P1":
- Tax: 15%
- In the Purchase tab, add vendors:
- "Azure Interior": price = $10, min qty = 1
- "Deco Addict": price = $15, min qty = 1
- Create a purchase order for "Azure Interior":
- Order 100 units → total price is automatically computed as $1000
- Create an alternative purchase order:
- Vendor: "Deco Addict"
- Copy products: enabled
Problem:
The price is $1360, instead of $1500
When the alternative purchase order is created and the product is set
on the purchase order line, the required onchange methods are not
triggered:
https://github.com/odoo/odoo/blob/ad253ef4c2cb06536b99bb919a3e01ed980d2e96/addons/purchase/models/purchase.py#L1169
As a result, both the unit price and the taxes are missing on the
purchase order line. When `_compute_price_unit_and_date_planned_and_name`
is triggered, it attempts to compute the `price_unit`.
https://github.com/odoo/odoo/blob/fb24ad03fc47a303fa8719c0795e1afa9a7eb821/addons/purchase/models/purchase_order_line.py#L345-L346
At this point, it checks whether the purchase order has a vendor.
Since "Deco Addict" is set, it calls `_fix_tax_included_price_company`
using:
- the supplier price ($15)
- the supplier tax (15%)
However, since no taxes are yet set on the purchase order line,
`_fix_tax_included_price_company` incorrectly assumes the price is
tax-included and converts it to a tax-excluded price
(~13.04 instead of 15).
https://github.com/odoo/odoo/blob/7076b4f4d0d933d93b24e8e4c7cf21ef0b0008e5/addons/account/models/account_tax.py#L571-L573
Then, a 15% tax is applied on top of this incorrect base price, leading
to the wrong total.
opw-6047004
Forward-Port-Of: odoo/odoo#258154This update ensures that attachments uploaded to cloud storage retain their original file type (mimetype). Previously, the system was incorrectly guessing the mimetype, which could lead to issues with how files were handled. This fix improves the reliability of cloud storage uploads and prevents potential data inconsistencies.
Original PR description
When uploading an attachment to cloud storage via `_post_add_create(cloud_storage=True)`, the attachment's original `mimetype` is guessed even if we specify it. With this commit we explicitly preserve given mimetype Discovered during task-5153790 Forward-Port-Of: odoo/odoo#257979
This update corrects a previous issue where delivery slip prices were incorrectly displayed in the company currency instead of the customer's order currency. This change ensures that commercial invoices and delivery documents accurately reflect the price paid in the order's currency, improving financial reporting and customer invoicing. The fix was triggered by a recent code update.
Original PR description
The product value reported on delivery slips may incorrectly use the company currency instead of the order currency. Steps to reproduce: - Enable multi-currency and create a foreign currency - Create a pricelist in the foreign currency - Create and confirm a Sale Order using that pricelist - Add a delivery via carrier (eg. Fedex) - Confirm the delivery and generate the commercial invoice. Issue: The 'sale_price' on the stock move lines is taken in company currency rather than order currency. opw-6104130 Forward-Port-Of: odoo/odoo#259020 Forward-Port-Of: odoo/odoo#258875
This update resolves an issue where QR codes generated for Swiss bank payments were being rejected. The problem stemmed from unauthorized Unicode characters within the QR code data. The fix ensures that only a specific, approved set of characters (324) are used, aligning with Swiss banking requirements and preventing payment rejections.
Original PR description
**Description of the issue/feature this PR addresses:** QR code is rejected by the bank, when it contains an invalid character `U+202F`. **Current behavior before PR:** Unauthorized Unicode characters are encoded in the QR-Bill, and it is rejected on the receiving part. **Desired behavior after PR is merged:** Any Unicode codepoint which is not in the subset of 324 allowed codepoints has to be filtered out. > spec of QR-bill allows only a subset of characters, a precise list of 324 Unicode codepoints (section 4.1.1, page 30 of the Swiss Implementation Guidelines for the QR-bill) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257961 Forward-Port-Of: odoo/odoo#254980