Daily updates from Odoo
Thursday, March 19, 2026
53 changes · saas-19.2
Resolved issues and error corrections
This update corrects a technical issue in the Account Avatax module, ensuring it correctly identifies the company it's associated with within the system's settings. Previously, a key piece of information was missing, which has now been added to improve data accuracy and functionality. This ensures proper tax calculations and reporting.
Original PR description
Since the beginning `account_avatax` has had all of it's data stored on the company, however, it missed the company_dependent key in settings to mark it as such. This commit fixes that. Followup of odoo/odoo#254242 task-none Forward-Port-Of: odoo/enterprise#110983
This update resolves an error that prevented users from accessing the Timesheets Assistant feature. The issue stemmed from a missing employee record, causing a technical error. This fix ensures the Timesheets Assistant functions correctly for all users, regardless of whether they have linked employee records.
Original PR description
Currently, an error occurs when user opens the Timesheets Assistant. **Steps to Reproduce:** - Install the `timesheet_grid` module without demo data. - Go to `Settings` > Enable `Timesheets Assistant (BETA)`. - Now go to `Timesheets` > `Assistance`. **Error:** `KeyError: False` This error occurs because the current user does not have any linked employee record. As a result, the employee is empty [1], and accessing False in the work days data batch [2] raises the error. This commit ensures that if no employee record is linked to the user, working_hours is set to False. [1]: https://github.com/odoo/enterprise/blob/9d4424088bfda7e89d454a8bd642715a9281913d/timesheet_grid/models/account_analytic_line.py#L392 [2]: https://github.com/odoo/enterprise/blob/9d4424088bfda7e89d454a8bd642715a9281913d/timesheet_grid/models/account_analytic_line.py#L399 sentry-7323160235
A recent update to the document layout, including VAT information, caused a test to fail. This fix addresses a problem where the test's selection process was disrupted by the layout change. The update now correctly resets the editor selection, ensuring the test runs successfully.
Original PR description
Issue The test `test_edit_header_only_company` was failing after updating the document layout to include the VAT block in the company address section. Cause Adding the VAT line modified the DOM structure of the header layout. The tour step inserting the placeholder span no longer correctly set the editor selection, preventing the powerbox from opening and causing the test to fail. Solution Update the tour to explicitly reset the editor selection after inserting the span so that the powerbox can open correctly. opw-5373374 Related Community PR : https://github.com/odoo/odoo/pull/249225 Forward-Port-Of: odoo/enterprise#109924
This update fixes a bug preventing the upload of call recordings with transcriptions. The original code bypassed Odoo's data management system, leading to incorrect data values and a security error. The fix ensures correct data handling and allows recordings with transcriptions to be successfully uploaded.
Original PR description
Diagnosis --- Incoming calls use a raw SQL INSERT in 'get_or_create' to create voip calls Since this bypasses the Odoo ORM, fields added by other modules like 'transcription_status' in voip_ai don't get their Python-level default values. Instead, they are stored as NULL in the database, which is read as False in Python. When the softphone tries to upload the recording at the end of the call, the controller's security check for 'no_audio' fails because it finds False instead, triggering a 403 Forbidden error and preventing the transcription. Solution --- This fix overrides 'get_or_create' in voip_ai to manually apply the 'no_audio' default if the field is empty. It also relaxes the controller check to accept both 'no_audio' and False to handle any existing records defenfively. task-6036473
This update ensures that PIN codes are now displayed for both physical and virtual expense cards. Previously, users were blocked from completing transactions using virtual cards (through digital wallets) because they couldn't access their PIN. This change improves the user experience and allows for seamless transactions using all card types.
Original PR description
Before this commit: - Currently, we show the PIN code for physical expense cards only, not for virtual cards. - In some case transactions are made via virtual cards (through digital wallets) also requires a PIN. The users will be blocked because they currently can't access this information. After this commit: - Now we show the PIN code for both physical and virtual cards. task-5926462 Forward-Port-Of: odoo/enterprise#107231
This update fixes a potential issue with portal messages. Specifically, it adds a test case to ensure that avatar access tokens are correctly handled when a user who authored a message is deleted. This prevents incorrect message formatting and improves data consistency.
Original PR description
For PR https://github.com/odoo/odoo/pull/254175; This commit adds a test case to verify that the portal message formatting behaves correctly when the message author is deleted. The test ensures that the avatar access token is returned when the author exists, and is omitted when the related user and partner are deleted. Error: `ValueError - Expected singleton: res.partner()` sentry-7337698605
This update resolves an issue that prevented Dutch companies from correctly setting accounting periods. The fix corrects a mistake in how tax reporting data was accessed, which was causing a technical error. This ensures that users can now reliably create and manage accounting periods for their Dutch clients.
Original PR description
Creating an accounting period for a Dutch company raises a traceback. Steps to reproduce the error: - Install ``l10n_nl_reports`` and ``accountant`` module with demo data - Switch to NL Company - Go to Accounting > In Tax Returns > Click Set Periods > Set Opening Date > Apply Traceback: ```py 'l10n_nl_reports.ec.sales.report.handler' object has no attribute '_get_tax_tags_for_nl_sales_report' ``` https://github.com/odoo/enterprise/blob/f23c592a933d7e5e5745aea60d0dcc5738249580/l10n_nl_reports/models/account_return.py#L20 In commit [1], Here, ``_get_tax_tags_for_nl_sales_report()`` method is called instead of ``_get_ec_sales_tax_tags()``. which leads to the above traceback. [1]:https://github.com/odoo/enterprise/commit/0a0fa0dae918ec5198a019a3e5be71a919f0e7c6 sentry-7340518330
This update resolves a problem where the system incorrectly flagged invoices for EC Sales List compliance when customers were located within the EU. The fix ensures that the 'Only intra-EU customers' check accurately identifies invoices that violate EU regulations, improving data accuracy for tax reporting.
Original PR description
The EC Sales List return check "Only intra-EU customers" is reviewed when an invoice that match the condition for the warning same_country is present. To Reproduce: - Create a company in Belgium - Create a customer in Belgium with "Intra-Community" as a Fiscal Position - Create an invoice with this customer (in the previous month of the current month, for example February if the current date is in March - Open the Tax Returns - Open the EC Sales List Return - The Only intra-EU customers check is reviewed when it should show an anomaly. Forward-Port-Of: odoo/enterprise#107137
This update fixes an issue where cancelled vendor bills were incorrectly included in the Sweden accounting SIE export. The fix ensures that cancelled transactions are properly excluded, aligning the export with the general ledger's balance. This prevents inaccurate reporting and maintains data integrity.
Original PR description
Steps to reproduce: - Install l10n_se (Sweden - Accounting). - Create a Vendor Bill with a line using Account 4000 (Cost of goods) for any amount (e.g., 10,000 SEK). - Confirm/Post the bill. - Cancel the bill. - Go to Accounting > Reporting > SIE Export and generate the export for the current year. - Open the downloaded .se file and locate the #RES line for Account 4000. Expected: The balance should be 0.00 (cancelled entries must be ignored, matching the GL). Actual: The cancelled amount (10,000) is incorrectly summed into the exported balance. opw-5901999 Forward-Port-Of: odoo/enterprise#110612 Forward-Port-Of: odoo/enterprise#108767
This update corrects a technical issue that caused incorrect decimal values to be generated in intrastat XML reports for French companies. The fix resolves a problem with how the system processed invoice data, ensuring accurate reporting of intrastat transactions. This improves the reliability of our international trade reporting.
Original PR description
Steps to reproduce: - Select a French company and activate intrastat - Create an invoice with a 100% discount to a european partner and provide intrastat values such as intrastat code, product commodity code, ... and most importantly a weight with a decimal amount. - Create at least one other invoice to a european partner that has a date earlier than the first one (but on the same month) - Go to intrastat report and export the XML (DEBWEB2) and select EMEBI and then Departures. -> Issue: The line that got processed after the one with a 0 value is not properly post-process regarding the integer conversion because we used to iterate on a list that was modified at the same time. opw-5973832 Forward-Port-Of: odoo/enterprise#110971
This update resolves a problem with the tour (guided tutorial) feature within the industry_fsm_report module. The fix ensures that the tour is correctly displayed and functioning as intended, improving the user experience for accessing and understanding this specific reporting functionality. This addresses a minor usability issue.
Original PR description
task-4489657 Forward-Port-Of: odoo/enterprise#111099 Forward-Port-Of: odoo/enterprise#81823
This update fixes a problem where users only installing the Mexico payroll module (l10n_mx_hr_payroll) would encounter errors due to a missing field. The fix ensures salary rules are correctly applied by utilizing the 'zsmg' value and resolving potential tracebacks when the related EDI module is not present. This improves the stability and functionality of payroll calculations for Mexican businesses.
Original PR description
The `l10n_mx_min_wage_zone` field is used in `l10n_mx_hr_payroll`, but it was originally defined in `l10n_mx_hr_payroll_account_edi`. This causes errors when a user only installs the `l10n_mx_hr_payroll` module, as the field is missing. Fix salary rules in `l10n_mx_hr_payroll` to use the `zsmg` value and avoid tracebacks when the EDI module is missing. In `l10n_mx_hr_payroll_account_edi`, override these rules to use the `l10n_mx_min_wage_zone` field instead. Related commit: https://github.com/odoo/enterprise/commit/11bb6db4884083b3f48582b749c01ae75a09cf66 target: saas-19.2 task-6047772
This update resolves a bug where subscriptions were incorrectly reopened after a credit note payment. The fix prevents the system from reopening subscriptions when a credit note payment (specifically 'out_refund' moves) is processed, ensuring subscriptions remain in the correct churned state. This improves subscription management accuracy.
Original PR description
Steps to reproduce: ------------------------------ 1. Install Subscription module 2. Create a new subscription and confirm it 3. Create an invoice from the subscription. * Register a payment and…
Steps to reproduce: ------------------------------ 1. Install Subscription module 2. Create a new subscription and confirm it 3. Create an invoice from the subscription. * Register a payment and ensure the invoice is in the Paid state. 4. Go back to the subscription and close it with any reason 5. Open the related invoice. * Create and Confirm Credit Note. * Register a payment for the credit note. 6. Go back to subscription Observation: ------------------------------ The subscription is automatically set back to `In Progress` even though it was previously churned. Issue: ------------------------------ The method `_reopen_paid_churned_subscription` reopens churned subscriptions when an invoice is set to `in_payment` or `paid`. There was no check to exclude refund moves (`move_type = 'out_refund'`), causing the subscription to be reopened when a credit note is paid. Solution: ------------------------------ Add a condition to exclude refund invoices from the reopening logic opw-5947999 Forward-Port-Of: odoo/enterprise#108487
This update corrects a bug that caused incorrect currency conversions during batch payment reconciliation in foreign currency journals. Specifically, the system was using the wrong currency for balance calculations, leading to inaccurate bank statement line amounts. This ensures accurate financial reporting and reconciliation processes.
Original PR description
When reconciling a batch payment in a foreign currency journal where payments do not have outstanding accounts, the resulting bank statement lines could use the wrong currency for balance conversion. Steps to reproduce: - Create a journal in a foreign currency (e.g., CHF) - Create two invoices in company currency (e.g., EUR) - Pay both invoices using the foreign journal - Create a batch payment for these payments. - Reconcile a bank statement line against this batch payment. Issue: Reconciliation make use of the payments amount in the wrong currency. Analysis: During the reconciliation of a batch payment, the system creates new amls from the payment values. However, the currency of the computed amount should be the source payment currency, and not the invoice line currency. opw-5887218 Forward-Port-Of: odoo/enterprise#110381 Forward-Port-Of: odoo/enterprise#108745
This update corrects a problem where text fields in Odoo Sign PDF forms were incorrectly displayed as checkmarks instead of the entered text. The issue stemmed from a misinterpretation of Appearance State tags in PDF fields, and this fix ensures text fields accurately reflect the user's input when flattening PDFs for signature.
Original PR description
Create an interactive PDF form in Adobe Acrobat containing a standard Text Field (/FT /Tx). - Fill the text field with a value (e.g., "John Doe") and save the PDF. - (Note: Adobe Acrobat will often…
Create an interactive PDF form in Adobe Acrobat containing a standard Text Field (/FT /Tx). - Fill the text field with a value (e.g., "John Doe") and save the PDF. - (Note: Adobe Acrobat will often automatically assign an Appearance State (/AS /N) to this text field). - Upload this PDF to the Sign app. **Current behavior:** The text field's string value is ignored and replaced with a checkmark (✓). **Expected behavior:** The text field should correctly render the string value that the user entered. **Cause of the issue:** In the _draw_field_value function, the parser checks if an /AS (Appearance State) tag exists and is not set to /Off. If true, it assumes the field is a checked box and draws a chr(0x2713). However, it fails to check the Field Type (/FT) first. Because Adobe Acrobat sometimes assigns /AS tags to standard Text Fields (/FT /Tx), we misinterprets these populated text fields as checked buttons. **Solution:** This PR fixes the issue safely for stable versions across two commits: [REF]: Extracts the value extraction logic into a dedicated _get_field_value helper method to allow isolated unit testing without requiring a canvas or physical PDF files. No behavioral changes in this commit. [FIX]: Wraps the /AS check within an if field_type == "/Btn": condition. This ensures only actual Checkboxes and Radio Buttons render as checkmarks, allowing Text Fields to fall through and properly return their /V string values. Task: 6018260 Forward-Port-Of: odoo/enterprise#110292
This update clarifies error messages when payments are declined for vendors outside of Belgium. Previously, the message "Country not allowed" was confusing for users. The change now incorporates payment data to provide a more accurate and helpful message, ensuring a better user experience when dealing with international vendors.
Original PR description
A company in belgium creates a card, it's "allowed countries" is set to Belgium by default. If said card is used to pay online on a website ending with .be, it is understandable that the user believes the vendor to be located in Belgium If it is not the case (the vendor is actually in Luxembourg), the payment is refused but the message on the refused expense is unclear "Country not allowed" The change adds the data received to make the decision in the error message task: 5478443 Forward-Port-Of: odoo/enterprise#103974
This update resolves an issue where GS1 barcode filtering would fail due to an incorrect date interpretation. The system now gracefully handles these errors, ensuring that products can be correctly filtered by their barcodes, improving internal transfer accuracy.
Original PR description
Steps to reproduce: - Activate the GS1 nomenclature - Create a product "P1" with the barcode: 15099590225865 - Create an internal transfer with one unit of P1 - Go to Barcode > Operations > Internal…
Steps to reproduce: - Activate the GS1 nomenclature - Create a product "P1" with the barcode: 15099590225865 - Create an internal transfer with one unit of P1 - Go to Barcode > Operations > Internal Transfers - Scan the barcode: 15099590225865 to filter transfers by this product barcode Problem: An validation error is raised: A ValidationError is raised: "A GS1 barcode nomenclature pattern was matched. However, the barcode failed to be converted to a valid date." Explanation: GS1 barcodes must follow a strict nomenclature based on well-defined rules. For example, a GS1 product barcode should start with the Application Identifier 01 followed by 14 digits. The GS1 parser processes the barcode rule by rule and applies the first matching rule. In this case, the barcode 15099590483921 is interpreted as a date because it starts with "15", which corresponds to a GS1 Application Identifier for a date. As a result, the parser attempts to convert the first six digits into a date and raises a ValidationError. Solution: Catch the ValidationError raised during GS1 date parsing in filter_on_barcode and explicitly reset parsed_results to False, allowing the normal filter on product resolution logic to continue. This prevents GS1 parsing errors from blocking valid barcodes and ensures that product is correctly filtered opw-5929064 Forward-Port-Of: odoo/enterprise#110679 Forward-Port-Of: odoo/enterprise#110636
This fix addresses an issue where multiple email addresses associated with a contact were being overwritten when creating a Helpdesk ticket. The update ensures that all email addresses linked to a contact are correctly captured, improving the reliability of ticket creation. This resolves a potential data loss scenario.
Original PR description
Prerequisites: ------------------------------ 1. Set up incoming mail server with Create a New Record set to Helpdesk Ticket 2. From Settings, create one Alias Domain Steps to reproduce:…
Prerequisites: ------------------------------ 1. Set up incoming mail server with Create a New Record set to Helpdesk Ticket 2. From Settings, create one Alias Domain Steps to reproduce: ------------------------------ 1. Install Helpdesk module 2. Open Helpdesk Team > Settings 3. Inside Channels, Set the mail used for the incoming server and the alias created 4. Set Accept Emails From to Everyone 5. Create a new contact with multiple emails (eg: `a@b.com`, `c@d.com`) 6. From Fiest mail (eg: `a@b.com`), Send one mail to mail set in the helpdesk team alias mail. 7. Open Incoming mail sever > Click on Fetch Now 8. Open Created Contact Observation: ------------------------------ The contact's email field is overwritten. The second email address (e.g. `c@d.com`) is lost Issue: ------------------------------ After `create`, since `partner_email` was stored with a value that differs from `partner_id.email`, the inverse method `_inverse_partner_email` kicks in. This is where `_get_partner_email_update()` is called. In `_get_partner_email_update()` `tools.email_normalize()` only handles a single email. When the partner has multiple email, the normalization keeps both, while the ticket email normalizes to just have one mail. The strict `!=` comparison fails, triggering the unwanted update. https://github.com/odoo/enterprise/blob/7c23efafe368787c858db31cec075f642ae6715b/helpdesk/models/helpdesk_ticket.py#L363-L369 Solution: ------------------------------ Instead of comparing the full normalized strings, we should check whether the ticket's normalized email is contained within the set of the partner's normalized emails Note for reviewer ----------------------------- After discussion with the PO (LNA), his opinion is that having multiple email addresses in a single field is not a good practice. This use case is only semi-supported in Odoo, it may work in some cases, but it is not reliable. The recommended approach is to create separate contacts for each email address. That said, we should also avoid automatically clearing or altering the existing value in the field. Based on this, I have implemented a minimal fix that prevents altering the existing value in the field. I am leaving it up to the review to decide whether this fix is worth keeping from a technical standpoint. opw-5478067 Forward-Port-Of: odoo/enterprise#107808
This update corrects a recent change that disabled a feature (showSeconds) in the MRP modules. Enabling this feature ensures that MRP modules now accurately display the time remaining on work orders and production schedules. This improves visibility and scheduling accuracy for operations.
Original PR description
Previously, showSeconds was True by default. It has now been set to False by default so we need to enable it for MRP modules.
This update simplifies how emoji data is loaded and managed within Odoo, leading to faster test runs and improved performance. The change reorganizes code to allow for better caching and reuse of emoji assets, addressing a previous performance bottleneck. This ultimately contributes to more stable and efficient nightly builds.
Original PR description
Feature that is aimed to ease and centralize the loading and management of emoji data. Follow-up of https://github.com/odoo/odoo/pull/253344 in the same effort to reduce overall memory consumption and increase performance in tests to restore (some) nightly builds. - Community: https://github.com/odoo/odoo/pull/253078
This update fixes a visual issue in the Partner Ledger report where overdue dates weren't highlighted in red and negative amounts weren't displayed in blue. The change ensures that key financial information is clearly visible, improving the accuracy and readability of financial reports. This enhances the user experience for managing accounts.
Original PR description
commit introducing the issue: https://github.com/odoo/enterprise/commit/6608d5c21a7fb9d57786c2a7618b878e244bd420 Steps to reproduce: - open the partner ledger with some one overdue invoice -> The expected result should be to see the due date in red. -> Negative amounts in the partner ledger should be displayed in blue as well.
This update ensures that follow-up emails for invoices now send the actual invoice PDF attachment, rather than relying on the main attachment. This prevents issues where users might have uploaded alternative PDF documents, ensuring accurate and complete invoice information is sent to customers. This resolves a previous bug related to attachment selection.
Original PR description
Before, the followup emails used the Invoice's main attachment. This is not correct because a user might have uploaded an arb PDF. Only the actual PDF should be sent. Use `invoice_pdf_report_id` instead of `message_main_attachment_id`. opw-5126420 Forward-Port-Of: odoo/enterprise#110894 Forward-Port-Of: odoo/enterprise#98820
This update fixes an issue where subscription products weren't displaying prices with tax, even when the website setting was enabled to show tax-inclusive prices. The fix ensures that the correct tax rates are applied based on the customer's company, resolving a discrepancy in how product company IDs were being evaluated. This ensures accurate pricing is shown to customers.
Original PR description
subscriptions Despite enabling the website setting to display tax-inclusive prices, subscription products show prices without tax when a recurring pricelist is configured. In `_get_sales_prices`, the product’s company ID is compared to the website’s company, but products visible to all have a false company ID, and products assigned to a parent company retain the parent’s company ID. As a result, when the product’s company ID does not match the website’s company ID, no taxes are applied.Instead, _filter_taxes_by_company should be used to determine whether the company can access the product’s tax_id. opw-5222411 Forward-Port-Of: odoo/enterprise#102102 Forward-Port-Of: odoo/enterprise#100662
This update corrects an issue where incorrect folio numbering occurred when a Customer Accounting File (CAF) wasn't set up. The fix ensures folios are generated correctly, preventing errors and maintaining accurate accounting records. This resolves a potential problem with sequence management and avoids unnecessary system retries.
Original PR description
`l10n_cl_edi` overrides `account.move._get_last_sequence()` to ensure the folio belongs to an available in-use CAF. When no CAF exists at all, `l10n_latam.document.type._get_start_number()` returns 0 and the fallback builds a previous sequence using start_nb - 1. Formatting -1 as `:06d` yields “-00001”, which then propagates to “FAC -00002”, “-00003” and corrupts the sequence chain. In addition, returning an invalid “last sequence” may force `sequence.mixin` to search for a free number under the UNIQUE constraint by retrying increments inside a savepoint and rolling back on UniqueViolation, which is costly when many values are already taken see [ _locked_increment()](https://github.com/odoo/odoo/blob/18.0/addons/account/models/sequence_mixin.py#L352). Now we only reset to the CAF start when an in-use CAF actually exists (start_nb > 0). opw-5918758 Forward-Port-Of: odoo/enterprise#108909
This update optimizes the database by removing unnecessary default values from company and partner records. Specifically, the automatic setting of branch codes and purchase date defaults has been streamlined, reducing data storage and improving performance for businesses using multiple companies. This change ensures a more efficient and responsive system.
Original PR description
On multi-company databases, having the defaults value on res.partner fields can unnecessary bloat the database for other companies with different fiscal package (localization). This commit remove the `l10n_ke_branch_code` field default on `res.partner` - the related field on `res.company` has been converted to a stored-compute + inverse so that partner related to a company automatically get the default value `00` whithout needing to touch other partner records. The `l10n_ke_oscu_last_fetch_purchase_date` default on `res.company` has also been removed, cron already fallback to the same default value when none are provided and will update it anyway after it ran. opw-5220129 Forward-Port-Of: odoo/enterprise#105917
This update resolves an issue where generating financial reports (FAIA) for Luxembourg companies using multi-currency transactions resulted in errors. The fix ensures the necessary currency information is included in the report template, preventing rendering problems and ensuring accurate reporting for Luxembourg VAT compliance.
Original PR description
Steps to reproduce 1/ setup a LU company. The default company currency will be EUR. 2/ create a vendor bill in another currecy (e.g. USD) 3/ take note of the bill date and accounting date (ideally set them in the past, like 1 month) 4/ generate the FAIA report for the period containing the created bill => error while rendering the qweb template The core of the error is when rendering the l10n_lu saft template. Sales invoices and purchase invoices reuse the standard `account_saft.tax_information` report, which expects to find `currency_code` in the object's fields. This commit explicitly re-adds it when creating the document's tax summary. opw-5216057 Forward-Port-Of: odoo/enterprise#110660 Forward-Port-Of: odoo/enterprise#106902
Previously, when users uploaded multiple attachments to a WhatsApp Discuss channel, only the first attachment was delivered. This update corrects this issue by implementing a new validation process that prevents sending more than one attachment per message, ensuring all files are successfully transmitted. This improves the reliability of WhatsApp communication within Odoo.
Original PR description
Multiple attachments uploaded simultaneously to a WhatsApp Discuss channel result in only the first being delivered to the recipient. ### Steps to reproduce 1. Drag and drop multiple files into a…
Multiple attachments uploaded simultaneously to a WhatsApp Discuss channel result in only the first being delivered to the recipient. ### Steps to reproduce 1. Drag and drop multiple files into a WhatsApp Discuss channel. 2. Send the message. -> Odoo shows all files, but only the first reaches the destination. ### Cause WhatsApp's API permits only one media object per message. Odoo's "Composer" enforces this by blocking uploads if an attachment is already present. However, it only evaluates the *current* state; dropping multiple files into an empty composer passes the check because the count is zero. On the server, the WhatsApp backend (constrained by the API) is hardcoded to send only the first attachment, silently discarding the rest. ### Fix Updated frontend validation to inspect the incoming file list during drop and paste actions. The process is now blocked if the total of existing plus incoming files exceeds one, ensuring the user is notified and preventing silent data loss. opw-5889035 Forward-Port-Of: odoo/enterprise#111001 Forward-Port-Of: odoo/enterprise#107424
This update corrects a technical issue that prevented users from opening expenses linked to multiple payments. The fix ensures the system handles expenses correctly, regardless of how many payments are associated with them. This resolves a potential error that could occur during upgrades.
Original PR description
**Description:** In previous versions, a single move could have multiple payments linked to it, and that move could also be linked to multiple expenses. When opening expenses from the payment action,…
**Description:**
In previous versions, a single move could have multiple payments linked to it, and that move could also be linked to multiple
expenses. When opening expenses from the payment action, which caused a singleton error when multiple expenses were linked.
This situation can occur during upgrades because older versions https://github.com/odoo/upgrade/pull/9685/changes here is identified allowed creating such records. However, after the removal of expense reports [^1], this type of record can no longer be created in newer versions.
**To fix the issue**
the code now handles multiple expenses instead of assuming a singleton.
```
Traceback (most recent call last):
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 2283, in _serve_db
return service_model.retrying(serve_func, env=self.env)
File "/home/odoo/src/odoo/19.0/odoo/service/model.py", line 185, in retrying
result = func()
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 2338, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 2553, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/src/odoo/19.0/odoo/addons/base/models/ir_http.py", line 355, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 794, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/odoo/19.0/addons/web/controllers/dataset.py", line 38, in call_button
action = call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/src/odoo/19.0/odoo/service/model.py", line 94, in call_kw
result = method(recs, *args, **kwargs)
File "/home/odoo/src/odoo/19.0/addons/hr_expense/models/account_payment.py", line 37, in action_open_expense
'name': self.expense_ids.name,
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1659, in __get__
record.ensure_one()
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 5940, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: hr.expense(22, 21)
```
opw-5494047
upg-3974547
[^1]: https://github.com/odoo/odoo/pull/189701
Forward-Port-Of: odoo/odoo#254167Portal users were experiencing errors when submitting website forms that created tasks. This update resolves a restriction in how the system accesses task details, preventing a 'permission denied' error. The fix uses a special system command to allow access to the necessary data, ensuring smooth task creation for all users.
Original PR description
Currently, submitting a website form that creates a task crash for portal users on the confirmation page. ### **Steps to reproduce:** 1) Install website_project with demo data 2) Create a website…
Currently, submitting a website form that creates a task crash for portal users on the confirmation page. ### **Steps to reproduce:** 1) Install website_project with demo data 2) Create a website form that creates a task 3) Set a project on the form 4) Submit the form as a portal user ### **Error:** `AccessError: You do not have enough rights to access the field project_privacy_visibility on Task (project.task)` ### **Root Cause:** The confirmation template evaluates `task.project_privacy_visibility` in a t-if condition at [1]. since [commit](https://github.com/odoo/odoo/pull/203891/changes/17664b3f118491f954dd6a810521ce5865d51a43), project task restricts portal users to a whitelist of fields defined by [_portal_accessible_fields()](https://github.com/odoo/odoo/blob/b9e3ca44ceb2b0b35b5e91a06f2905e042aa7f89/addons/project/models/project_task.py#L1015-L1019). Field access is then validated in [_has_field_access()](https://github.com/odoo/odoo/blob/b9e3ca44ceb2b0b35b5e91a06f2905e042aa7f89/addons/project/models/project_task.py#L1021-L1031), which denies read access to fields not present in this whitelist. `project_privacy_visibility` is not part of the portal readable fields list. When the template tries to read it, _has_field_access() rejects the operation and raises an AccessError. [1]- https://github.com/odoo/odoo/blob/b9e3ca44ceb2b0b35b5e91a06f2905e042aa7f89/addons/website_project/views/project_portal_project_task_template.xml#L13-L16 ### **Fix:** Use `sudo()` when reading `project_privacy_visibility` in the template to avoid the portal field access restriction. **opw-6010622** Forward-Port-Of: odoo/odoo#254326 Forward-Port-Of: odoo/odoo#254099
This update fixes a bug where the VAT (Tax ID) was not correctly displayed in document layouts like invoices and previews. The issue stemmed from a missing piece of code in the document template. Now, VAT information is accurately reflected in generated documents, ensuring compliance and accurate reporting.
Original PR description
Steps to reproduce 1. Install `account`. 2. Go to Settings → Configure Document Layout. 3. Enter a value in the Tax ID field. 4. Generate a document (invoice / preview document). Issue Unlike other fields in the document layout, the `Tax ID` value is not updated and does not appear in the document preview. Cause The VAT (Tax ID) rendering logic was missing from the document layout template XML. Solution Add proper logic to display the Tax ID using the company VAT Before: <img width="1089" height="750" alt="image" src="https://github.com/user-attachments/assets/8d27808f-d605-447c-807a-d5f3450eef36" /> After: <img width="1080" height="722" alt="image" src="https://github.com/user-attachments/assets/0af04d77-a318-4e39-9a4b-0911f2446e60" /> opw-5373374 Forward-Port-Of: odoo/odoo#249225 Forward-Port-Of: odoo/odoo#240234
This update corrects a technical error in how images are displayed within Odoo's user interface. The fix ensures that images are rendered correctly, resolving a visual issue that may have affected some users. This improves the overall user experience and prevents potential display problems.
Original PR description
Forward-Port-Of: odoo/odoo#254633
This update fixes a visual issue in the table picker component of the Odoo interface. Previously, non-active cells in dark mode didn't have the correct background color. This change ensures a consistent and visually appealing experience across both light and dark modes, improving the overall user experience.
Original PR description
Currently in dark mode, we don't display the right bg color for (non active) cells in table picker. This PR uses the right variable for the bg color of non active cell that is more suitable for both light and dark mode. task-6009282 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252378
This update ensures that phone numbers entered through the takeaway preset in the Odoo POS system are now correctly recorded on the order itself. Previously, this information was lost, making it difficult to contact customers. This fix improves order accuracy and customer service.
Original PR description
Currently, when using the takeaway preset, the phone information filled in is not registered on the order. Steps to reproduce: ------------------- * Change restaurant setting to enable self order * Open mobile menu (make sure session is opened prior) * Select takeout preset * Place an order * Fill in all information, time, name, email & phone * Validate order * Go to the orders in the backend > Observe that the contact info does not register the phone (mobile) Why the fix: ------------ Nothing was done with the phone information so we now register it on the order. opw-6014340 Forward-Port-Of: odoo/odoo#253610
This update resolves a memory issue that occurred when propagating deliveries across multiple lots, particularly when dealing with large numbers of picking IDs. The fix ensures the system handles large datasets efficiently, preventing crashes and improving performance for users with extensive inventory.
Original PR description
- Some lots were found to contain very large delivery sets (7k+ picking IDs) with multiple parents. - Updating parent sets in a single operation caused a MemoryError for large datasets. ```sql…
- Some lots were found to contain very large delivery sets (7k+ picking IDs) with multiple parents.
- Updating parent sets in a single operation caused a MemoryError for large datasets.
```sql
Traceback (most recent call last):
File "/tmp/tmpe5fq5baf/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpe5fq5baf/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpe5fq5baf/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpe5fq5baf/migrations/base/tests/test_mock_crawl.py", line 539, in mock_view_form
[data] = record.read(fields_list)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 3858, in read
return self._read_format(fnames=fields, load=load)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 4089, in _read_format
vals[name] = convert(record[name], record, use_display_name)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 7078, in __getitem__
return self._fields[key].__get__(self)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 1311, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 1493, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/18.0/addons/mail/models/mail_thread.py", line 442, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 5297, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 110, in determine
return needle(*args)
File "/home/odoo/src/odoo/18.0/addons/stock/models/stock_lot.py", line 149, in _compute_delivery_ids
delivery_ids_by_lot = self._find_delivery_ids_by_lot_iterative()
File "/home/odoo/src/odoo/18.0/addons/stock/models/stock_lot.py", line 385, in _find_delivery_ids_by_lot_iterative
delivery_by_lot[parent_id].update(delivery_by_lot[lot_id])
MemoryError
(Pdb)len(all_lot_ids)
22166
(Pdb)len(barren_lines)
9682
(Pdb)len(lots_to_propagate)
9682
Lot_id 11412: delivery_by_lot size = 7420, parents = 3
Lot_id 11753: delivery_by_lot size = 0, parents = 7
Lot_id 12845: delivery_by_lot size = 11, parents = 5
Lot_id 14646: delivery_by_lot size = 12, parents = 2
Lot_id 15801: delivery_by_lot size = 1700, parents = 3
Lot_id 19817: delivery_by_lot size = 0, parents = 4
Lot_id 22370: delivery_by_lot size = 0, parents = 1
Lot_id 25072: delivery_by_lot size = 6827, parents = 2
Lot_id 25134: delivery_by_lot size = 3, parents = 2
Lot_id 25135: delivery_by_lot size = 1, parents = 2
```
- Previous fix adds all child deliveries, even if some already exist, but this new patch adds only the missing ones
UPG - 3869661
OPW - 5900313
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#248826This update resolves a potential issue where forum URL title requests could hang indefinitely, causing performance problems. By adding a timeout, the system now responds more reliably and quickly, ensuring a smoother user experience for forum visitors. This improves overall forum stability and responsiveness.
Original PR description
Add a timeout to the requests done by /forum/get_url_title to avoid blocking indefinitely Forward-Port-Of: odoo/odoo#254607
This update resolves a crash that occurred when users clicked directly on images within the To-Do app's image transformation feature. The issue stemmed from a change in how transformation types were handled, leading to an undefined type being created. This fix ensures stable image transformations.
Original PR description
### Steps to Reproduce: - Open the To-Do app. - Insert an image (e.g. using /media). - Select the image. - Click on Image Transformation from the toolbar. - Click directly on the image instead of a transformation handle. - A traceback occurs. ### Purpose of this commit: - Since [commit](https://github.com/odoo/odoo/commit/633267efef54bc6f88d2d6b5517e2dd56ec135f0#diff-7611cc3ab11e330827e96b643deb9605c42512e004f50b1ea12dded7ca6bd63e), the default transformation type value was removed. When clicking directly on the image (instead of a handle), a transformation state could still be created with an undefined type, which later caused a crash in mouseUp. task-5998153 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents a traceback error that occurred when internal users initiated live chat conversations, specifically when the `hr_holidays` module was active. The fix addresses a discrepancy between the user's active company and the information available in the frontend session, ensuring a smoother live chat experience.
Original PR description
...when the `hr_holidays` module is installed. Before this commit, starting a live chat conversation as an internal user would produce a traceback. Steps to reproduce: - Log in as internal user and navigate to the website. - Start a live chat by sending a message -> traceback. This is because since [1] the "back on" banner is loaded in the embed bundle, causing the `employee_id` field to get accessed. The `employee_id` field is computed based on the user active company, which is not present in the frontend session, causing the traceback. This commit fixes the issue by guarding the access to `user.activeCompany`. [1]: https://github.com/odoo/odoo/pull/247141 task-6003634
This update corrects a bug where unbuilding a manufacturing order resulted in invalid stock moves. The issue stemmed from inconsistencies in quantity calculations during the unbuild process, specifically when requesting to unbuild more product than was initially manufactured. This fix ensures stock moves are validated correctly, preventing disruptions to inventory management.
Original PR description
# How to reproduce - Create a BOM for a product - Create a MO for a set quantity (Exemple: 1) for that product - Unbuild that MO and ask to unbuild more than what was manufactured (Exemple: 3) -…
# How to reproduce - Create a BOM for a product - Create a MO for a set quantity (Exemple: 1) for that product - Unbuild that MO and ask to unbuild more than what was manufactured (Exemple: 3) - Confirm the unbuild - Go to the stock moves of that unbuild via the smart button # The problem 3 stock move lines are created, 2 in the 'Done' state and 1 in the 'Available' state. This last move line is stuck and cannot be validated # Why The cause of this issue is due to a discrepency between the quantity set for the move lines and the quantity set for their respective moves. When creating the move lines for the produce move, we use the original move of the MO (this is done to keep Lots consistent). If the quantity of product to unbuild is more than the quantity of product built by the MO, the quantity of the move lines will be less than expected. This will then create a backorder when the produce move is set to done. This backorder will then be unvalidatable because the unbuild it is linked to will be set to 'Done'. opw-5915981 opw-5449109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254016 Forward-Port-Of: odoo/odoo#248056
This update resolves an issue where large bank statement imports could overload the database, leading to performance problems. By preventing unnecessary savepoint creation during the import process, the system now handles imports more efficiently and reliably. This enhances the stability of the Odoo platform when importing large datasets.
Original PR description
## [FIX] account: sequence mixin cache on cr.cache instead of precommit The aim of this commit is to prevent the creation of Savepoint in chain. This is achieved by preventing the `sequence.mixin`…
## [FIX] account: sequence mixin cache on cr.cache instead of precommit The aim of this commit is to prevent the creation of Savepoint in chain. This is achieved by preventing the `sequence.mixin` cache to be cleared as soon as a flush happens and to prevent the `bank.statement.line` creation to clear the cache. ### Context: During an import of document, like a big CSV of bank statement for example, if any issue arises, the ORM rollback to the savepoint of import and retry to import one record at a time and rollback again later on to collect the errors and show the faulting line to the customer. ### Cause: 1) As we flush for every single record, the `precommit.data.cache` gets cleared during the flush and the `sequence.mixin` cache gets wiped out. 2) The creation of bank statement set the name of its move_id to False which results in the `sequence.mixin` code to clear its own cache by itself. [name set to False](https://github.com/odoo/odoo/blob/1361c0bc98c91f1e601b0fc3beaa948df3a3bfcd/addons/account/models/account_bank_statement_line.py#L410-L412) Both (1) and (2) results in the sequence.mixin code to recreate the cache and, for that, to create a new Savepoint. This is done at each iteration of the import loop which could results in this case in 300+ savepoints existing at the same time eating all Postgres shared buffers memory putting the whole production database on its knees. task-id: None (investigated for odoo.com) Forward-Port-Of: odoo/odoo#250827
This update resolves an issue where downpayment invoices generated with fixed taxes incorrectly lacked tax line items. This prevented proper invoice processing for Peppol, leading to errors. The fix removes the problematic downpayment calculation for fixed taxes, ensuring accurate invoice generation and compliance.
Original PR description
When making a downpayment for an order containing product using fixed taxes, the downpayment invoice would contain line without tax associated This is an issue when sending these invoices to Peppol. Steps to reproduce: ------------------- * Create a fixed tax of 5€ * Set this tax on any product along another tax * Create a sale order for this product * Make a downpayment of 10% * The invoice created has a line without any tax set > Observation: When sending to Peppol we get an error Why the fix: ------------ We remove the downpayment part that concerns fixed tax to avoid having lines without tax set. opw-5853070 Forward-Port-Of: odoo/odoo#252039
This update now displays the reason provided by a Public Administrator when an invoice is refused, as required by Italian tax regulations (PA). Previously, this important message was ignored. This ensures accurate invoice processing and compliance with legal requirements.
Original PR description
When a Public Administrator business refuses an invoice, they also give a reason message (EsitoCommittente/Descrizione), which comes through the IAP to Odoo as an XML tag aside the Outcome code (EsitoCommittente/Esito). Before this PR, the message was ignored, now we show it in the invoice's header. ref: https://www.fatturapa.gov.it/export/documenti/messaggi/v1.1/MessaggiTypes_v1.1.xsd <img width="823" height="232" alt="image" src="https://github.com/user-attachments/assets/8f222f6b-1615-4dd2-a5dd-25e0991ea037" /> <img width="942" height="206" alt="image" src="https://github.com/user-attachments/assets/cdf109ff-40d0-4c50-bdc7-51fb4ea15c98" /> Ticket [link](https://www.odoo.com/odoo/project.task/6041276) opw-6041276 Forward-Port-Of: odoo/odoo#254481
This update fixes an issue where manually set prices in point-of-sale (POS) settlements were being incorrectly reverted to the base price. Previously, when settling a quotation with tracked products, the system would reset prices to the original base value. Now, the system correctly preserves user-defined prices during settlement, ensuring accurate transactions.
Original PR description
**Steps to reproduce:** - Create a product tracked by lot, set it's price to 1000 - Create a quotation add a line with the created product and change the price to 1200 - Add another line with the…
**Steps to reproduce:** - Create a product tracked by lot, set it's price to 1000 - Create a quotation add a line with the created product and change the price to 1200 - Add another line with the same product and change it's price to 600 - Go to PoS and settle this quotation - The lines' prices will be 1000 and 600 instead of 1200 and 600 **Why the fix:** In the event of a settle with a product tracked by lots, we are setting the price of all *related_lines* (lines with the same product in this case) to it's base price, not taking into account the fact that this price has been modified by the user when making the quotation. This only happens for related lines, which explains why one line's price is still 600 while the other was reverted to the base price of 1000 instead of being 1200 as it was previously set. To avoid this, we now set the price_unit back to the base one only if the price hasn't been changed manually. opw-5223463 Forward-Port-Of: odoo/odoo#254260 Forward-Port-Of: odoo/odoo#238295
This update corrects a problem where duplicate entries were being created for work entry types. This fix ensures data integrity within the HR module, preventing errors and streamlining the management of employee work schedules. It's a routine maintenance update to improve the reliability of our core HR functionality.
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 resolves an issue preventing users from creating new journals when a previously archived default account was linked to a journal. Previously, the system blocked new journal creation due to a uniqueness check that included archived accounts. Now, users can create new journals seamlessly, even with archived accounts, improving workflow efficiency.
Original PR description
Backport of https://github.com/odoo/odoo/pull/249869 Description This PR addresses a critical validation issue in the accounting module where the system blocks the creation of new journals if a…
Backport of https://github.com/odoo/odoo/pull/249869 Description This PR addresses a critical validation issue in the accounting module where the system blocks the creation of new journals if a default account linked to an existing journal has been archived. Current Behavior Currently, when a user creates a new journal (e.g., a "Bank" type journal), the system automatically generates or assigns a default account. If the user subsequently archives that default account, any future attempt to create a new journal of the same type results in a Validation Error: "Account codes must be unique. You can't create accounts with these duplicate codes: [XXXXXX]" This happens because the system's uniqueness check for account codes includes archived accounts, but the automated journal setup logic fails to account for this state, effectively locking the user out from creating new journals until the archived account is manually renamed or unarchived. Desired Behavior After this PR is merged, users should be able to create new journals seamlessly, even if previous journals have archived default accounts. video https://drive.google.com/file/d/1VzAskdTwF7lNc1y8PIpvN0T2zzKTMtdJ/view 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#251025
This update ensures that users are always notified when a vendor bill is sent to the 'Purchases' journal, regardless of whether the bill was digitized. Previously, the system wouldn't send notifications if the digitization process failed. This prevents delays in receiving important invoice information.
Original PR description
When vendor bills digitization is deactivated, subscribers to the "Purchases" journal are not notified when a vendor bill is sent to the email alias set on the "Purchases" journal Steps to reproduce:…
When vendor bills digitization is deactivated, subscribers to the "Purchases" journal are not notified when a vendor bill is sent to the email alias set on the "Purchases" journal Steps to reproduce: 1. Install Accounting 2. Go to Settings > Accounting > Digitization and set Vendor Bills to "Do not digitize" 3. Go to Settings > Technical > Email > Alias Domains and create a new alias domain (e.g. "odoo.com") 4. Go to Settings > Technical > Email > Incoming Mail Servers and create a new incoming mail server (e.g. "megu@odoo.com", you may need to setup POP access on your email address and create an app password, see https://support.google.com/mail/answer/7104828) 5. Go to Accounting > Configuration > Journals and open journal "Purchases" 6. Go to Advanced Settings tab and set the Email Alias and the Send Copy To fields (e.g. "megu@odoo.com" for both) 7. Send a mail with an attachment to the email alias set on the "Purchases" journal 8. Go to the previously created incoming mail server and click on Fetch Now 9. Go to Settings > Email > Technical > Emails 10. No email has been sent to the subscriber of the "Purchases" journal Issue: `_extend_with_attachments` returns None if the OCR import failed https://github.com/odoo/odoo/blob/b44295bb6ce621ff87cbc96860492650d90d0ad7/addons/account/models/account_document_import_mixin.py#L340-L349 which prevents the call to method `_notify_invoice_subscribers` Solution: Send an email regardless of the result of the OCR import opw-5914096 Forward-Port-Of: odoo/odoo#252442
This update resolves an issue where adding attributes to archived product templates caused errors. The fix ensures all variants (active and archived) are counted, preventing template deletion and maintaining archived product variants when their template is archived.
Original PR description
When adding attributes to an archived product template, an error was raised because the template was incorrectly deleted. This happened because variant counting only considered active variants. Now counts all variants (active and archived) to prevent template deletion, and filters variants before activation to keep them archived when their template is archived. @qrtl QT6449 Forward-Port-Of: odoo/odoo#254137 Forward-Port-Of: odoo/odoo#252927
This update resolves an issue where users with limited accounting access couldn't successfully import vendor bills via XML. The fix adjusts how system settings are applied, ensuring that restricted users receive the expected error message when attempting to import. This prevents potential data import issues for users with restricted permissions.
Original PR description
[FIX] account_edi_ubl_cii: restricted access user cannot import bill To reproduce: - create a user that has readonly access in Accounting - try to import a XML in vendor bills -> should traceback This commit modifies the `res_field` assignation by setting both `res_model` and `res_id` at the same time Forward-Port-Of: odoo/odoo#254698
This update fixes a blank page issue when printing the Discuss app, which was caused by overlapping print styles. It also addresses several layout problems like a persistent sidebar and unnecessary UI elements, resulting in a cleaner and more functional print experience for users.
Original PR description
Before this commit, using the brower's print feature without knowledge installed would show a blank page. This occurs because knowledge print assets add an overflow visible rules to a bunch of DOM elements. This commit fixes the issue by doing something similar for the discuss app. Additionally, the print discuss layout has several issues: - The sidebar is hidden but still takes space. - The composer is displayed and takes up space, even though only the conversation content matters. - Thread actions are shown in the discuss header. - Visitor offline banner is shown. This PR fixes these issues. task-6008968 | | | |--|--| |Before|<img width="611" height="385" alt="image" src="https://github.com/user-attachments/assets/d8060268-ed04-45f2-b152-04c7c50a03c2" />| |After|<img width="624" height="407" alt="image" src="https://github.com/user-attachments/assets/41fa26ee-e25d-4495-8d22-088782d9e8e1" />|
This update corrects a recent change that disabled 'showSeconds' in the default Odoo settings. Previously, this setting was enabled by default for MRP reports, but it was unintentionally set to false. This fix re-enables 'showSeconds' specifically for MRP modules, ensuring accurate and complete reporting of production schedules and work orders.
Original PR description
Previously, showSeconds was True by default. It has now been set to False by default so we need to enable it for MRP modules. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where changing the lot number of a combo product in Point of Sale (POS) would reset the order total back to the base product price. The fix ensures that combo pricing is maintained when lot numbers are updated, providing accurate order totals for users. This improves the reliability of POS transactions.
Original PR description
Step to reproduce: - have a lot tracked product, product 1 (price = 10) - create a combo product with product 1, with price (100) - start a pos, add combo product in order, - notice total price is 100 - change lot number of product 1, - notice order price reset to 10. Cause: - When the lot number is changed, `set_quantity_by_lot` is triggered. - This calls `set_quantity`, which resets the price and loses the combo pricing. Fix: - use `keep_price` = true parameter when calling `set_quantity` if orderline has combo_parent_id opw-5495409 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254278 Forward-Port-Of: odoo/odoo#246252
This update resolves a visual issue in the mobile version of Odoo where incorrect time off balances were displayed and leave types without limits lacked the 'Available' label. This ensures users see accurate time off information and a consistent mobile experience, improving usability.
Original PR description
This change fixes 2 problems in the mobile UX side panel: - Time off types with zero allocations were shown. - Leave types without a max leave amount didn't show the "Available” label. task-6030539 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253357
This update fixes an issue where group leave durations were incorrectly calculated when overlapping with existing approved leave requests. The fix ensures that group leave durations accurately reflect all allocated time off, resolving a discrepancy in how the system processed conflicting leave types. This improves the reliability of time off scheduling.
Original PR description
Problem ------------------------ When an employee has approved leaves, and a group leave is created that overlaps with the approved leave and overrides it, the duration of the new group leave is not…
Problem ------------------------ When an employee has approved leaves, and a group leave is created that overlaps with the approved leave and overrides it, the duration of the new group leave is not computed correctly. The duration does not include the overridden days. To reproduce: 1. Create allocated leave for employee and approve and validate it. 2. Go to Management > Time Off and create a group leave for the employee that includes the approved time off dates. The dates of all leaves are updated correctly, but the duration of the group leave is incorrect. Objective --------------------------- Even though conflicting leaves were correctly split in the multi leave generation wizard, the resource.calendar.leaves table was not synchronized within the same transaction. Because the leave types required allocation, the duration was computed by subtracting the old time off days from the new leave's duration, since they were treated as unavailable. Solution -------------------------- Manually unlink the resource.calendar.leaves records associated with the conflicting leaves before calculating the new duration. The clears the employee's schedule in the database so that the dates are correctly processed as available. The calendar blocks for the remaining days of the approved time off and the new group leave are generated when the leaves are created. Task: 5911074 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253837 Forward-Port-Of: odoo/odoo#249527
This update fixes an error in how credit notes calculate cost of goods sold (COGS). Previously, the calculation was incorrect when the invoice's unit of measure differed from the product's. This change ensures accurate COGS reporting for returns and credit notes, improving financial reporting reliability.
Original PR description
…f uom **Problem:** partial cogs are computed incorrectly when the uom of the invoice is different than the one of the product **Steps to reproduce:** -1) created a stored product with category std…
…f uom **Problem:** partial cogs are computed incorrectly when the uom of the invoice is different than the one of the product **Steps to reproduce:** -1) created a stored product with category std price perpetual -2) set a cost of 1 and an on hand quantity of 12 -3) for the invoicing policy select 'delivered quantities' -4) in the sales tab add the packaging 'pack of 6' -5) confirm a sale order for 2 packs of 6 Problem A: -6a) validate the delivery -7a) create and confirm an invoice for all the quanity -8b) on the delivery create a return for a quantity of 6 and validate -9b) select 'create invoice' on the sale order -10b) confirm the credit note Problem B: -6b) change the quantity to 6 units on the delivery -7b) validate with backorder -8b) create and confirm an invoice for the delivered quantity (1 pack of 6) -9b) validate the back order -10b) create and confirm an invoice for the remaining (1 pack of 6) **Current behavior:** Problem A : the cogs lines are : - crediting stock valuation of 54$ - debiting expenses of 54$ Problem B: the cogs lines are: - debiting stock valuation of 24 - crediting expenses of 24 **Expected behavior:** Problem A: the cogs lines should be: - debiting stock valuation of 6 - crediting expenses of 6 Problem B: the cogs lines should be: - crediting stock valuation of 6 - debiting expenses of 6 **Cause of the issue:** Both problems have the same cause. To compute the price unit for the cogs we call _get_cogs_value() https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move.py#L122 Inside _get_cogs_value, in the computation of the return value: https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L74 - price_unit is computed (in both use cases) using _get_cogs_price_unit https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L68 and is expressed in the uom of the product https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/stock_move.py#L238-L240 - self.quantity is expressed in the uom of the invoice (pack of 6) - cogs_qty is computed using _get_cogs_qty() https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L66 and is expressed in the uom of the invoices (pack of 6) Because of this, in both use cases, the computation is incorrect. **fix:** we use the uom of the product everywhere because _get_cogs_value() should return the price unit in the products uom https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L51-L52 opw-5901706 Forward-Port-Of: odoo/odoo#253938 Forward-Port-Of: odoo/odoo#250154