Daily updates from Odoo
Thursday, September 4, 2025
19 changes
Resolved issues and error corrections
This update fixes rental planning so order dates, planned shifts, and online availability are kept aligned when users reschedule slots or change rental periods. It also improves the planning workflow with clearer confirmations, better filtering of rentable products in the shop, and fewer incorrect or duplicate planning actions.
Original PR description
Forward-Port-Of: odoo/enterprise#91801
The barcode transfer workflow now avoids automatically placing newly added product lines into a new package by mistake. The setting for showing complete packs has also been moved to the Barcode App area, making it clearer that it controls barcode display behavior.
Original PR description
Various fixes following the pack in pack introduced in odoo/odoo#203987 Summary of the changes: - Move the `Show entire packs` in the 'Barcode App' tab in the Picking Type form - Fix an issue where creating a move line through the barcode app would automatically put that line in a new package.app. Task-4314600 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The signature dialog no longer shows the typed and drawn signatures on top of each other. This prevents visual confusion when users sign documents and makes the signing experience clearer and more reliable.
Original PR description
Fixed an issue where both the auto-generated and drawn signatures overlapped in the signature dialog. This was caused by the system automatically setting the user's default signature to the drawn one when opening the dialog. Now, the dialog no longer defaults to the drawn signature, preventing visual overlap and ensuring a cleaner user experience. Forward-Port-Of: odoo/enterprise#93750
Tax return checks are refreshed when users open them, so outdated warnings such as draft entries no longer remain after those entries are changed. This gives users a more accurate view while avoiding unnecessary performance impact in the Tax Returns overview.
Original PR description
Before, when opening a Return that had bypassed checks such as Draft Entries, and we had deleted or confirmed those entries it wouldn't have refreshed the check number and would still display that there are draft entries. Now, we are forcing the check to be refreshed when someone wants to see them as to not crash the performances when someone opens the Tax Returns Kanban view. task-4850581 Forward-Port-Of: odoo/enterprise#93664 Forward-Port-Of: odoo/enterprise#90187
The project budget display now shows the correct warning color when an expense budget is exceeded. This helps users quickly spot overspending risks instead of seeing a misleading green status.
Original PR description
**Step to reproduce:** - install "project_account_budget" - go to accounting > accounting > Analytic Budget - create a budget of type expense,say test budget - select analytic account `Asustek - Wood…
**Step to reproduce:**
- install "project_account_budget"
- go to accounting > accounting > Analytic Budget
- create a budget of type expense,say test budget
- select analytic account `Asustek - Wood Corner`
- set budget amount => 500. open the budget
- create a new project 'test project"> open setting > Analytic Page
- add `Asustek - Wood Corner` analytic account in project field
- create a PO with amount > 500
- in analytic distribution column, add `Asustek - Wood Corner` in project column
- confirm PO and create Bill
- Go to `test project` settings > Dashboard smart button
**Observation:**
- For exceeding expense budget, we have green color in budget section
- It should be red
**Cause:**
The conditional class for budget progress was incorrectly evaluated due to missing parentheses around the `and` condition.
In expressions like:
`(true and (1 == 1 ? 'a' : 'c')) or (1 == 1 ? 'b' : 'd') → 'a'` ✅
`true and 1 == 1 ? 'a' : 'c' or 1 == 1 ? 'b' : 'd' → 'b'` ❌
Without parenthesis, the `or` clause is evaluated unexpectedly, even when the `and` branch is intended to take precedence.
This commit wraps the `and` condition in parentheses to ensure the correct evaluation order and consistent class assignment.
Budget:
<img width="1203" height="291" alt="budget 4968162" src="https://github.com/user-attachments/assets/2d8223d5-0344-4ad0-b33c-2598ea167f2d" />
Before fix:
<img width="623" height="195" alt="before fix 4968162" src="https://github.com/user-attachments/assets/4ac749bf-fa93-4835-963a-5dfbdd05559d" />
After fix:
<img width="643" height="225" alt="after fix 4968162 " src="https://github.com/user-attachments/assets/4fd228f9-e32f-48d9-b6ef-55251b21d601" />
opw-4968162
Forward-Port-Of: odoo/enterprise#93243
Forward-Port-Of: odoo/enterprise#91617A missing web address is now included when sending Aadhaar signing requests. This helps the testing service receive the information it needs, making Aadhaar signing easier to validate before use.
Original PR description
Before this change, the request didn’t include the URL, so during testing the IAP was missing it. Now the URL is added to the request, which makes it easier to test Aadhaar sign.
This update adjusts an automated appointment test to match a recent change in how editable selections behave. It helps keep quality checks accurate and reduces the risk of false test failures during future updates.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/224818 task-4585835
This change updates an internal appointment test so it matches the latest behavior when editing selections. It helps keep automated quality checks reliable without changing the customer-facing appointment experience.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/213300 task-4585835
This fix prevents portal users from becoming owners of Documents spreadsheets because they cannot use spreadsheets in edit mode. It helps keep spreadsheet ownership aligned with users who have the necessary internal access, reducing permission-related confusion.
Original PR description
Following the discussion I had with @flch-odoo regarding https://github.com/odoo/enterprise/pull/92134 , Since Spreadsheets can not be shared in edit mode to non-internal users, we prevent them from becoming owners. opw-4753670 Forward-Port-Of: odoo/enterprise#93800 Forward-Port-Of: odoo/enterprise#92409
The PLM dashboard now counts only engineering change orders that are actually waiting for the current user's approval. This prevents inflated or misleading personal approval counts when another approver still needs to act or when the user already approved earlier.
Original PR description
The dashboard of PLM displays for each ECO type the number of validations pending in general, and the validations waiting for me specifically. The latter has been incorrectly computed for quite some time, as it computes how many ECOs exists where I am an approver and an approval is waiting - but there is no guarantee that the waiting approval is one of mine; it might be that I am a past approver of the ECO and that another approval (waiting for somebody else than me) exists, or that two approval are required on the same stage (one by me, one by somebody else) and I already approved. This commit switches the computation around by looking for pending approvals waiting for me, and then get the number of (non-archived) ECOs bound to them. Forward-Port-Of: odoo/enterprise#93728 Forward-Port-Of: odoo/enterprise#92348
Danish Intrastat and EC sales list reports now round figures to whole units by default, matching government reporting requirements. Users can still view decimal values in the interface when needed, but official export files are always rounded for compliant submission.
Original PR description
This commit will change the options of the reports so that we have a rounding in units since the intrastat and ec sales list report must be rounded. This solution still allows people to have the report with decimals if needed task-4948271 Forward-Port-Of: odoo/enterprise#93783 Forward-Port-Of: odoo/enterprise#91268
Users can no longer trigger an error when trying to link a document to a vehicle if no vehicles have been created yet. The system now blocks that unsupported action gracefully, avoiding a confusing crash in the Documents app.
Original PR description
*= documents_fleet Currently, when user tries to link a document with a vehicle and if there is no vehicle exists an error is raised. **Steps to Reproduce:** 1) Install `documents_fleet`…
*= documents_fleet Currently, when user tries to link a document with a vehicle and if there is no vehicle exists an error is raised. **Steps to Reproduce:** 1) Install `documents_fleet` module(without Demo Data). 2) Open Documents App. 3) Upload a file in `Fleet` folder. 4) Select the uploaded file and click on `'Link to a vehicle'` button. Error: `ValueError: invalid literal for int() with base 10: 'False'` Root Cause: The `link_to_record` method attempts to find the first record of the target model to use as a default value when opening the linking wizard. If no records exist, the search returns an empty recordset, and accessing `.id` at [1], on it results in the value `False`. The code then incorrectly constructs a default reference string like `fleet.vehicle,False`. The wizard crashes when it tries to parse this string and convert the `False` part to an integer. Solution: This commit prevents error by ensuring that the user cannot link a document to a model without existing records. [1]- https://github.com/odoo/enterprise/blob/83640d21b2c31ed9d572c48e02a9aeea9eb1607b/documents/models/documents_workflow_rule.py#L113 sentry-6792079496 Forward-Port-Of: odoo/enterprise#93843 Forward-Port-Of: odoo/enterprise#91888
Bank transaction matching now avoids treating foreign exchange fees or similar bank charges as partial payments. It also requires closer matches between payment references and invoices, reducing incorrect reconciliations and helping accounting teams process bank statements more reliably.
Original PR description
In case of foreign payment using a bank account in another currency, banks can reflect the foreign currency exchange fee on another bank account belonging to the company and in its main currency. Fr…
In case of foreign payment using a bank account in another currency, banks can reflect the foreign currency exchange fee on another bank account belonging to the company and in its main currency.
Fr example: in a EUR company having in the same bank (e.g ING) both an USD and a EUR account, making a payment using the USD bank account gets you effectively 2 bank transactions while you initiated only one:
- the payment in the USD account and
- the currency diff fee in the EUR account.
In this particular use case, the communication on the currency diff fee reflects the one from the payment and, depending on the reconciliation order, that currency diff could be taken as a partial payment
because we were matching on the words in payment_ref regardless of the currency used, while it shouldn't and must be processed as a bank fee.
The outstanging payments are now only matched when the account.payment memo and the statement line payment_ref exactly match, and if the journal is the same. The algorithm for invoices matching doesn't change except we explictly remove the outstanding accounts from the list of reconcilable accounts to search on.
Previously, a match between an invoice ref and a transaction payment_ref could occure even if the matching word wasn't complete.
E.g: invoice ref: INV/2025/01/10
transaction payment_ref: INV/2025/01/100
To be sure this isn't the case anymore, we check that the matching words are properly surrounded by a "finishing character".
task-5023163
Forward-Port-Of: odoo/enterprise#93016
Forward-Port-Of: odoo/enterprise#92950Odoo Studio now correctly handles the special technical access group when setting field visibility. This prevents fields from unexpectedly disappearing and lets users manage these visibility settings consistently in and out of debug mode.
Original PR description
Steps to reproduce ================== - In debug mode - Go to Contacts - Open any record - Open studio - Click on any field - Add the "Extra rights / Technical Features" group to "Allow visibility to…
Steps to reproduce ================== - In debug mode - Go to Contacts - Open any record - Open studio - Click on any field - Add the "Extra rights / Technical Features" group to "Allow visibility to groups" => The group is not displayed as a tag - Restore the view - Now without debug mode (?debug=0), repeat the same steps => The field disappears, we need to toggle "Show Invisible Elements" to see it again Cause of the issue ================== https://github.com/odoo/odoo/pull/179354/commits/15aeaf88c268f047b8b83a5aa66f5da246c2b675 When calling get_views, the "base.group_no_one" is removed from the groups attribute and "invisible" is set to true if we are in debug mode. Solution ======== Adding "base.group_no_one" is still the way to have the expected behavior for now. We override some ir.ui.view functions when in studio to be able to edit it. According to the docstring of _postprocess_debug_to_cache, this feature is temporary. Another solution will be needed in the future. opw-4969262 Forward-Port-Of: odoo/enterprise#93435 Forward-Port-Of: odoo/enterprise#91647
The payslip list now shows the correct action buttons depending on the payroll context, fixing a confusing “New/Off-Cycle” button display. This helps payroll users choose the right action and reduces mistakes when creating or managing payslips.
Original PR description
Fix the "NewOff-Cycle" Add test to be sure that depending on the context, good control panel buttons are shown.
Odoo Sign now validates uploaded PDFs more reliably so unsupported encrypted files are rejected before signing. This prevents users from reaching a server error when completing a signature flow, improving reliability for document signing.
Original PR description
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following…
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following [pdf](https://drive.google.com/file/d/1M0_VzWLzv-lSZ-IlI9Zmx-M7jFGvtJJj/view?usp=sharing)> Sign the document using `Sign now` * Validate and send completed document `AttributeError: 'NoneType' object has no attribute 'seek'` **Cause:** This occurs because [1] returns `None` to the variable `output` at [2] which in turn passes the `None` value to [3] causing the error. Error occurs in python 3.12+, because it does not throw an exception in `_check_pdf_data_validity`. **Solution:** * Add a validation to prevent upload of unsupported files. [1]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_document.py#L242-L243 [2]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_completed_document.py#L33-L34 [3]: https://github.com/odoo/odoo/blob/033c7a63bdf3d10d9d2c5084959fd34f52011bea/odoo/tools/pdf/signature.py#L51 **Sentry-6784800544,6802557168** Forward-Port-Of: odoo/enterprise#91766
This update fixes how the eMsigner signing service retrieves the system URL. It helps prevent connection or redirection issues when users access e-signature features through the controller.
Original PR description
in this commit, get the url from request.env['iap.account'] instead of self as in controller we don't have access to get_base_url.
The ESG employee commuting report now keeps its internal report entries in a stable order. This prevents records from appearing to change between views or refreshes, improving consistency for users reviewing commuting data.
Original PR description
The esg commuting report uses ROW_NUMBER to generate record ids, which is apparently reevaluated in each query, which can lead to unstable ids. This PR adds an ORDER BY clause to ensure a deterministic behavior.
The Dutch tax closing process now uses the updated report label when calculating rounding. This prevents tax closing entries from incorrectly reducing the amount to pay or receive to zero, helping businesses keep accurate tax balances.
Original PR description
In this commit[^1] they reformatted the Dutch tax report, renaming the expression labels of the lines. The functionality that does the rounding of the amount to pay/receive depends on that label to compute the correct rounding amount. Currently the Dutch tax closing entry will always end up with a balance to pay/receive of 0.0 because of that (the whole balance is "rounded"). This commit fixes that by pointing the rounding logic to the new expression label used on the total line. [^1]: https://github.com/odoo/odoo/commit/6078dafa68db120a3bf20e0c3e33b3886798985d