Daily updates from Odoo
Friday, December 26, 2025
68 changes
19 changes
Resolved issues and error corrections
This update fixes a reporting issue where the Expected Arrival Date wasn't displayed on DIN 5008 Purchase Order reports. The fix adds this crucial information to the report template, aligning with previous versions and confirmed requirements from internal teams. This ensures accurate reporting for DIN 5008 transactions.
Original PR description
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order…
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order report. **Issue:** The Expected Arrival Date does not appear on the DIN 5008 Purchase Order report. Both functional experts and PO (CHKL) confirmed that the Expected Arrival Date should appear by default on the Purchase Order report in DIN 5008. **Cause:** The date_planned (Expected Arrival) field was introduced in standard Purchase Order report in v18.0, but DIN 5008 report template was not updated accordingly **Fix:** Add the Expected Arrival information to the DIN 5008 Purchase Order template. Before: <img width="606" height="162" alt="image" src="https://github.com/user-attachments/assets/e11f5b1f-5898-4ec9-a4f2-087db5dfeced" /> After: <img width="605" height="147" alt="image" src="https://github.com/user-attachments/assets/57419d00-50c9-4508-9bfc-307c0a54dc67" /> **opw-5376176** Forward-Port-Of: odoo/odoo#239619
This update resolves an issue where the 'Select All' button in the document control panel only selected the first 40 files. Now, all selected files are correctly included when performing actions like duplication or moving to the trash. This ensures consistent and reliable functionality for managing large document sets.
Original PR description
Steps to Reproduce =================== 1. Upload more than 40+ files in a folder. (One page displays upto 40 docs) 2. Use the checkbox to select all files on the page (this selects only 40 files) 3.…
Steps to Reproduce =================== 1. Upload more than 40+ files in a folder. (One page displays upto 40 docs) 2. Use the checkbox to select all files on the page (this selects only 40 files) 3. Click the 'Select All' button in the control panel to select all 40+ files. 4. Now, try duplicating or moving them to the trash. => Only the first 40 selected files (on the single page) are considered for action, not all the selected files. Technical ========== For documents control panel action we have custom handling for selecting records and executing action. We use `model.root.selection` which only consider records in current page, case of select all records from other pages is missed here. After this PR ================== - All selected records are considered for the actions - Added custom `getResIds` method to get filtered `resIds` as per domain. Note: `getResIds` in DynamicList doesn't have custom domain feature so create our own as per use case Task-4700841 Forward-Port-Of: odoo/enterprise#101996 Forward-Port-Of: odoo/enterprise#87634
This update corrects a previous error in the Profit & Loss report's Gross Profit calculation, now accurately reflecting the impact of stock levels. Additionally, the report's layout has been simplified for better readability and user experience. This ensures more reliable financial reporting.
Original PR description
Previously, the Gross Profit calculation did not include the stock effect, which resulted in incorrect values. With this PR, the Gross Profit is now computed including the stock effect, ensuring accurate results. In addition, some UI adjustments have been made to simplify and improve the readability of the report. task-5357539 opw-5163207 master PR: https://github.com/odoo/enterprise/pull/101650 Forward-Port-Of: odoo/enterprise#101649
This update enhances security by granting necessary permissions to the account batch payment process. Previously, a restriction prevented non-HR users from accessing employee address information, now addressed by using 'sudo' to ensure proper functionality. This change improves data access and avoids potential issues.
Original PR description
In commit a6ed1bd, new logic for handling employee addresses was introduced. However, the _get_all_addr function requires employee_ids, which implicitly requires access to the Employees model and, therefore, be in HR groups. During the compute process, _get_all_addr is only used to check whether an employee has an address; no address data is exposed. To fix this issue, the call to _get_all_addr should be executed with sudo(). OPW-5428523 Forward-Port-Of: odoo/enterprise#102851
This update allows users to easily copy and paste error messages from the Point of Sale interface. Previously, users couldn't copy these messages, making it difficult to report issues or troubleshoot problems. This change improves usability and support efficiency.
Original PR description
Before this commit, it was not possible to select and copy text from the error popup shown in the POS interface. This limitation hindered users from easily copying error messages for reporting or troubleshooting purposes. task-id: 5411067 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240570
This update fixes an issue preventing payment lines from being printed on Italian POS receipts. The problem was due to a technical error in the system's configuration, which is now resolved. This ensures that all payment information is accurately reflected on the printed receipts for Italian businesses.
Original PR description
Currently payment lines are not sent to the italian printer. Steps to reproduce: ------------------- * Install l10n_it_pos * Switch to italian company * Set up italian printer for a shop * Make an order and pay it * Print italian receipt > Observation: no matter the payment used it is not sent to the italian printer Why the fix: ------------ This condition is currently always true: https://github.com/odoo/enterprise/blob/41e9fcd162cd51f93c98a0f0f6922d5faaf8914d/l10n_it_pos/static/src/app/documents/fiscal_document/body/body.xml#L27-L29 because `this.priceIncl` is always undefined. Therefore we would never use the payment lines: https://github.com/odoo/enterprise/blob/41e9fcd162cd51f93c98a0f0f6922d5faaf8914d/l10n_it_pos/static/src/app/documents/fiscal_document/body/body.xml#L30-L36 opw-5428027 Forward-Port-Of: odoo/enterprise#102793
This update addresses a technical error that prevented some USB printer devices from working correctly within Odoo. The fix handles a device incompatibility issue, ensuring broader printer support and preventing disruptions to printing workflows. This improves the reliability of the IoT drivers.
Original PR description
This PR fixes the exception thrown by the usb devices incompatible with escpos code.
It fixes the following exception:
```
2025-12-22 14:49:59,724 1433 ERROR ? odoo.addons.iot_drivers.exception_logger: File "/home/pi/odoo/addons/iot_drivers/iot_ha
ndlers/drivers/printer_driver_L.py", line 42, in init
self._init_escpos(device)
2025-12-22 14:49:59,724 1433 ERROR ? odoo.addons.iot_drivers.exception_logger: ValueError: The device has no langid (permission issue, no string descriptors supported or device error)
```
Forward-Port-Of: odoo/odoo#240976This update fixes an issue where the survey session link copy button wasn't working correctly, displaying 'Copied!' without actually copying the link. Additionally, repeated clicks on the button caused a system error. The fix ensures the link is reliably copied and prevents errors related to the session management component.
Original PR description
Issue 1: Steps to reproduce =============== 1. Go to the survey. 2. Create a live session for any survey. 3. On the session screen, click the copy button after the url. ------> Popover will show…
Issue 1: Steps to reproduce =============== 1. Go to the survey. 2. Create a live session for any survey. 3. On the session screen, click the copy button after the url. ------> Popover will show `Copied!` but nothing is copied. Issue 2: Steps to reproduce ================ 1, 2: same as issue 1. 3. Click the copy button 2,3 times. 4. Click the button start survey. ------> TypeError: Cannot read properties of null (reading 'closest') Technical ======== Issue 1: The event listener callback `onCopySessionLink` was using `event.target.textContent` to insert into clipboard of the browser. As the event.target is icon with no text content, the empty string is _copied_. Issue 2: At each click of the copy button, we register cleanup to dispose the _same_ instance of `window.Popover` component. Therefore more than one click will register the cleanup each time. While cleaning, the second cleanup will actually dispose the already disposed instance raising an error at this [line] because the instance has `this._element` null. This commit makes the `onCopySessionLink` to copy the text of the element with the url and makes sure the cleanup is registered only once. [line]: https://github.com/odoo/odoo/blob/058212e12b5079eba870bde9775fe98f27928935/addons/web/static/lib/bootstrap/js/dist/tooltip.js#L173 Task-5347197r Forward-Port-Of: odoo/odoo#239621
This update fixes an error in how VAT is calculated for transactions using Reverse Charge taxes, particularly when combined with non-deductible tax configurations. Previously, the output VAT was incorrectly reduced. Now, the full VAT amount (21%) is correctly declared as due, aligning with standard accounting practices for Reverse Charge scenarios.
Original PR description
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable…
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable (Output Tax) was incorrect. Steps to reproduce: 1. Create a Vendor Bill. 2. Use a Tax configured as both Reverse Charge (e.g., 21%) and partially Non-Deductible (e.g., 40% non-deductible). 3. Set the price to 100.00. Observed behavior: - VAT Deductible (Input): 12.60 (Correct: 60% of 21). - Non-Deductible Expense: 8.40 (Correct: 40% of 21). - VAT Payable (Output): 12.60 (Incorrect: it was reduced by the non-deductible part). Expected behavior: - VAT Payable (Output) should be 21.00. In a Reverse Charge mechanism, the full tax amount must be declared as due, regardless of the deductibility on the input side. Solution: Post process the taxes_data in case of professional with reverse-charge so wie will have the Payable part with the hole amount 21 in the previous example task-5418096 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#240955
This update adjusts financial reports for Mexico to correctly handle initial balances when the 'include_initial_balance' setting is disabled. It also simplifies the process of customizing how undistributed lines are handled, making future adjustments easier. This ensures more accurate reporting for Mexican businesses using Odoo Enterprise.
Original PR description
Following the changes introduced in odoo#240742 and in enterprise#95062, this commit adapts the l10n_mx_reports_closing tests, as the equity_unaffected account amounts change if include_initial_balance = False. This commit also moves the domain logic for the Undistributed Line to a dedicated function, making it simpler to customize this behavior if needed. no-task Forward-Port-Of: odoo/enterprise#102549
This update resolves a technical issue causing tracebacks when managing overtime rulesets, specifically related to employee leave and attendance. It also significantly improves the performance of generating overtime attendance lines, ensuring smoother and more reliable attendance tracking for employees.
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 Forward-Port-Of: odoo/odoo#240019
This update enhances the accuracy and speed of calculating overtime hours within the attendance system. The changes address previous testing issues and optimize the generation of overtime lines, ensuring more reliable and efficient payroll processing. This improves the overall user experience for employees and HR staff.
Original PR description
Forward-Port-Of: odoo/enterprise#102125
This update fixes an issue where the displayed price in the Point of Sale system was showing the total price instead of the unit price. The fix ensures that the correct unit price is shown, improving accuracy and clarity for users. This resolves a display discrepancy related to currency calculations.
Original PR description
Steps to reproduce ------------------ 1. Insall `l10n_fr_pos_cert` and set the company to the french one 2. Open PoS, and select a product, it will have a price say X 3. Using the numpad, change the price of that product to Y Observe that the line now says "Old price unit: Y * Qty / Unit", instead of it being "X / Unit". Why it's happening: ------------------- We were displaying the `currencyDisplayPrice`, which is the total amount to be paid, instead. The fix ------- We add a getter on the product model `displayPriceUnit`, it shows the original product unit price. We therefore introduce a new getter that compute the unit price using the original lst price. opw-5365735 opw-5378158 Forward-Port-Of: odoo/odoo#238135
This update resolves an issue where the cursor disappeared when using the VoIP softphone on a mobile device. The fix restores the cursor's functionality and prevents the mobile keyboard from appearing unexpectedly, ensuring a smooth user experience for making calls.
Original PR description
Steps to reproduce: - Open the VoIP softphone on a mobile device - Enter a number - Place the cursor in the middle of the number - Tap on the *odoo* backspace button => The character before the…
Steps to reproduce:
- Open the VoIP softphone on a mobile device
- Enter a number
- Place the cursor in the middle of the number
- Tap on the *odoo* backspace button
=> The character before the cursor is removed but then the cursor jumps
to the end of the input.
Note: this also happens when trying to add a number in the middle of
the typed number, using the softphone buttons, but this message focuses
the explanation on the backspace button.
Commit [1] introduced the bug while revamping VoIP and its keypad.
Before that commit, there was a simple `t-on-click` defined on that
backspace button. After the update, that `t-on-click` is still there but
alongside a weird `t-on-touchend.prevent="(ev) => ev.target.click()"`,
which is actually there to prevent zoom-in behavior on double-tap,
although, retesting it does not seem necessary (at least on Android).
In any case, this is the original cause of the bug.
Since [2], the keypad input is using the mail's `useSelection` hook,
which, among other things, manages what happens on click outside of the
input. Before [1], this happened when clicking on the backspace button:
1. The click is handled during its *capture* phase by the `useSelection`
hook. It checks if clicked location should be considered, the answer
is yes.
2. The next part of the handler is done in the next microtask (as the
check is done asynchronously (?? that looks like a bad idea, but
that's another issue)).
3. That "in the next microtask" part occurs before the event starts
bubbling: the capture handler saves the cursor position as being at
the end of the input (?? not sure why, but that's another issue).
4. The click is handled during its *bubbling* phase by the backspace
button's `t-on-click`, which removes the character before the cursor,
and sets the cursor position accordingly for the `useSelection` hook.
The actual cursor position is untouched since [3] on mobile "because
otherwise it would open the mobile keyboard", but there are other
ways that would have prevented that I think... to confirm later for
master via task-5366961 (this actually causes issues in HOOT tests
but that's another issue).
5. The dialer/numpad component handles the input's focus/cursor. For
that, it forces a focus and ask the `useSelection` hook to "restore
the selection", which "restores" it to what step (4) asked.
After [1], this changed to:
1'. Same as step (1)
2'. Same as step (2)
3'. As the click was simulated instead of being the "natural" one
triggered by the browser touchend handling, the `t-on-click` handler
is called now, before the "in the next microtask" part of the
capture handler is done. That means what step (4) did happens now.
4'. Now what step (3) did happens now.
5'. Same as step (5)... but since step (3) and (4) were basically
swapped, the cursor is now restored as the way it was last saved:
at the end of the input (again don't know why step the
`useSelection` hook would want to save it like that though).
There are multiple solutions to fix this:
A. Remove the `t-on-touchend` handler, letting the browser do what it
naturally does. Although, it might be needed to prevent the mentioned
zoom behaviors on some phones?
B. Review why the `useSelection` hook wants to save the cursor at the
end of the input on external click, the point is valid but I am not
sure that should be this hook's job to enforce it.
C. Review why the `useSelection` hook wants to check if the click has to
be considered asynchronously, there should be a better way.
D. Configure the `useSelection` hook to consider a click on the
backspace button as to be ignored, as handled manually by its own
handlers anyway.
Option (A) should probably be done, by confirming zoom behaviors can be
prevented another way, but it cannot be done in stable anyway. The (B)
and (C) options should be investigated but would also not be stable to
change; also that would modify an exposed hook's behavior so more risky.
Option (D) can probably be done either way and is targeted on fixing the
bug described only, so this is the solution this commit went for.
In master, option (A) will be investigated in the forward-ported version
of this fix.
However... the bug was actually solved 3 months after [1], at [4] thanks
to secret option (E): not removing the `t-on-touchend` but changing it
entirely to call the same handler as the `t-on-click` one. A bit more
stable than option (A) but still not stable.
However... that solution (E) was broken 1 month later, again, by commit
[5] which destroyed step (5) while fixing an unrelated bug. Without that
step, the input cursor is not repositioned after OWL changes the value,
and by default OWL places it back at the end.
The solution is to restore step (5): the problem was that we were
checking if the user was not typing in another input before re-focusing
the keypad input... but the code considered the keypad input itself as
"another input". This commit still adds solution (D) on top of fixing
that, for good measures.
Note that in 19.0+, there is at least another cursor-related bugs,
related to commit [6]. It will be fixed in the forward-port of this one
as they need each other's fix to both work. Really there should be
better ways to handle that cursor position in OWL... might be done in a
future refactoring.
This commit adds a test to hopefully keep the bug fixed, as inspired by
commit [7].
[1]: https://github.com/odoo/enterprise/commit/52b3065993c41c6b7c65dda586a66fdd865b3afd
[2]: https://github.com/odoo/enterprise/commit/2e8f18801156a8069e26fb3d61d4f8d84893e891
[3]: https://github.com/odoo/odoo/commit/adc5448adf863b99b9b2be29985e560f5c12dbd4
[4]: https://github.com/odoo/enterprise/commit/668467678312632b5b9ecf234280690151bf3078
[5]: https://github.com/odoo/enterprise/commit/db82135fd73d5077fc26be7206105192a845c2bc
[6]: https://github.com/odoo/enterprise/commit/a06c02e8e163ed052c1c4d25a56bea9b6409abde
[7]: https://github.com/odoo/enterprise/commit/613ef7332b0d21e947871e9d33b68d069f1412c2
Related to task-5366961
Forward-Port-Of: odoo/enterprise#102728
Forward-Port-Of: odoo/enterprise#101856This update prevents Point of Sale from loading all invoice records to the client, which was causing performance slowdowns in databases with many invoices. This change improves the speed and responsiveness of the Point of Sale module, leading to a better user experience.
Original PR description
Before this commit, when loading the PoS all of the account.move records were loaded to the client side, which could lead to performance issues in databases with a large number of invoices. opw-5409082 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240222
This update resolves an error that occurred when creating invoices with journal items that lacked labels. The fix ensures the code handles missing label values gracefully, preventing a traceback and allowing invoices to be validated correctly. This improves invoice processing reliability.
Original PR description
Creating an invoice containing journal items without a label triggers a traceback because the code unconditionally slices the 'name' field (line.name[:64]) without ensuring it is not False. Since 'name' is not a required field on account.move.line, it must be safely handled.
This commit ensures that the label is always a string by falling back to an empty string when the value is missing.
Steps to reproduce the bug:
- Create a storable product
- Create an invoice:
- Add the product to the invoice
- Set any customer
- Go to the journal items tab
- Remove the label of the journal item corresponding to the product
- Try to validate the invoice
- A traceback is raised
opw-5360602
Forward-Port-Of: odoo/odoo#240150
Forward-Port-Of: odoo/odoo#239188This update fixes an issue where the standard product price wasn't correctly reflecting the exchange rate at the time of receipt validation. Previously, the system used the purchase order date instead, leading to inaccurate currency conversions. Now, the system uses the validation date for currency conversion, ensuring accurate pricing and stock valuation.
Original PR description
Steps to reproduce:
- Go to Accounting / Configuration / Accounting / Currencies
- Enable EUR
- Add two rates:
- Date: December 15 → 1 EUR = 1 USD
- Date: December 23 → 1 EUR = 2 USD
- Create a storable product "P1"
- Costing method: AVCO
- Create a Purchase Order:
- Vendor: any
- Currency: EUR
- Product: 1 unit of P1 at 10 EUR
- Order Deadline / Expected Arrival: December 15
- Confirm the PO
- Validate the receipt on December 23
Problem:
The product standard price is computed as 10 USD instead of 20 USD.
The stock move value is computed using the purchase order date instead of the stock move validation date, causing the currency conversion to use an outdated exchange rate.
Solution:
Use the stock move validation date when converting the purchase price to the company currency.
opw-5402545
Forward-Port-Of: odoo/odoo#241127This update resolves a potential error in the Point of Sale system that could occur when reloading data. Specifically, if certain records were inaccessible due to security restrictions, it would trigger an error. This change prevents these errors, ensuring a smoother and more reliable Point of Sale experience for users.
Original PR description
Before this commit, when reloading the PoS, during the filtering of local data, if some records to be filtered were inaccessible due to record rules, an AccessError was raised. opw-5394929 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239028
This update now displays the full list of industry modules (available through Apps > Industries) instead of a limited selection of 80. The change removes a technical restriction that previously prevented users from seeing all available industry modules, improving navigation and usability.
Original PR description
Before this commit, when displaying the list of industry modules (from Apps > Industries), it is not possible to display more than 80 modules. This is because the override of web_search_read is not handling the full count of modules, as it was relying on the number of modules returned from the appstore, ignoring there is a limit (80 by default). This commit removes the limit on the query to appstore so that all modules are retrieved, allowing the users to navigate through all modules. This solution is acceptable since the number of industry modules is rather limited for now (around 100). Forward-Port-Of: odoo/odoo#241147
13 changes
Resolved issues and error corrections
This update fixes a reporting issue where the Expected Arrival Date wasn't displayed on DIN 5008 Purchase Order reports. The fix adds this crucial information to the report template, aligning with previous versions and confirmed requirements from internal teams. This ensures accurate reporting for DIN 5008 transactions.
Original PR description
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order…
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order report. **Issue:** The Expected Arrival Date does not appear on the DIN 5008 Purchase Order report. Both functional experts and PO (CHKL) confirmed that the Expected Arrival Date should appear by default on the Purchase Order report in DIN 5008. **Cause:** The date_planned (Expected Arrival) field was introduced in standard Purchase Order report in v18.0, but DIN 5008 report template was not updated accordingly **Fix:** Add the Expected Arrival information to the DIN 5008 Purchase Order template. Before: <img width="606" height="162" alt="image" src="https://github.com/user-attachments/assets/e11f5b1f-5898-4ec9-a4f2-087db5dfeced" /> After: <img width="605" height="147" alt="image" src="https://github.com/user-attachments/assets/57419d00-50c9-4508-9bfc-307c0a54dc67" /> **opw-5376176** Forward-Port-Of: odoo/odoo#239619
This update corrects a previous error in the Profit & Loss report's Gross Profit calculation, now accurately reflecting stock effects. Additionally, the report's layout has been simplified for better readability and user experience. This ensures more reliable financial reporting.
Original PR description
Previously, the Gross Profit calculation did not include the stock effect, which resulted in incorrect values. With this PR, the Gross Profit is now computed including the stock effect, ensuring accurate results. In addition, some UI adjustments have been made to simplify and improve the readability of the report. task-5357539 opw-5163207 master PR: https://github.com/odoo/enterprise/pull/101650 Forward-Port-Of: odoo/enterprise#101649
This update resolves an issue where product names with trailing spaces in product records were causing duplicate entries in delivery descriptions. The fix addresses a combination of problems: incorrect handling of newline characters in the sale order line description and a lack of trailing space trimming in the product name input field. This ensures consistent and accurate product information in delivery confirmations.
Original PR description
**Steps to reproduce:** 1. Create a product with a trailing space at the end of its name. 2. Create a quotation and confirm it. 3. Open the delivery through stat button. **Observation:** - The…
**Steps to reproduce:** 1. Create a product with a trailing space at the end of its name. 2. Create a quotation and confirm it. 3. Open the delivery through stat button. **Observation:** - The picking description displays the product name twice when the product name ends with trailing spaces. **Cause:** The duplication occurs due to a combination of two issues: 1. **In sale_stock** https://github.com/odoo/odoo/blob/ac6d4f0211e7680b5f5b41537b1e2eb2c9efb239/addons/sale_stock/models/stock.py#L32 products without attributes, `_get_sale_order_line_multiline_description_variants()` returns an `empty` string, yet the code still prepends a newline before the existing picking description. When the product name contains trailing spaces, this newline `+` trailing-space combination causes Odoo to interpret the description as multiple lines, resulting in the product name being duplicated on the picking. 2. **In web,** the char field with `widget="text"` did not trim trailing spaces when saving the value. This allowed product names such as `"Test "` to be stored. **Fix:** - Trim the value entered in `char` fields using `widget="text"` when the field has `trim=True`, preventing trailing spaces from being saved and ensuring consistent description generation. **opw-5351356**
This update allows users to easily copy and paste error messages from the Point of Sale interface. Previously, users couldn't copy these messages, making it difficult to report issues or troubleshoot problems. This change improves usability and support efficiency.
Original PR description
Before this commit, it was not possible to select and copy text from the error popup shown in the POS interface. This limitation hindered users from easily copying error messages for reporting or troubleshooting purposes. task-id: 5411067 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240570
This update restores the intended behavior for the Knowledge composer by hiding the GIF and canned response actions. These features were previously visible after a recent system update, but this fix ensures they are hidden when composing content, streamlining the Knowledge creation process.
Original PR description
The GIF picker was previously hidden in Knowledge, but became visible again after the composer actions refactor. Commit that introduced the change: https://github.com/odoo/odoo/commit/5e1daafeac231c333ea13369fc208627213d67d4 This commit restores the intended behavior by hiding the GIF action again and also hides the canned response action, as neither feature is relevant when composing content in Knowledge, by applying conditions on the corresponding composer actions. Task-5163888 Forward-Port-Of: odoo/enterprise#102862 Forward-Port-Of: odoo/enterprise#100585
This update ensures that the batch payment process can function correctly for all users, regardless of their HR group membership. Previously, a technical limitation required HR users to access employee data, now the system utilizes sudo to resolve this issue and improve overall functionality.
Original PR description
In commit a6ed1bd, new logic for handling employee addresses was introduced. However, the _get_all_addr function requires employee_ids, which implicitly requires access to the Employees model and, therefore, be in HR groups. During the compute process, _get_all_addr is only used to check whether an employee has an address; no address data is exposed. To fix this issue, the call to _get_all_addr should be executed with sudo(). OPW-5428523 Forward-Port-Of: odoo/enterprise#102851
This update fixes an error in how VAT is calculated for transactions using Reverse Charge taxes, particularly when combined with non-deductible tax configurations. Previously, the output VAT was incorrectly reduced. Now, the full VAT amount (21%) is correctly declared as due, aligning with standard Reverse Charge regulations.
Original PR description
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable…
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable (Output Tax) was incorrect. Steps to reproduce: 1. Create a Vendor Bill. 2. Use a Tax configured as both Reverse Charge (e.g., 21%) and partially Non-Deductible (e.g., 40% non-deductible). 3. Set the price to 100.00. Observed behavior: - VAT Deductible (Input): 12.60 (Correct: 60% of 21). - Non-Deductible Expense: 8.40 (Correct: 40% of 21). - VAT Payable (Output): 12.60 (Incorrect: it was reduced by the non-deductible part). Expected behavior: - VAT Payable (Output) should be 21.00. In a Reverse Charge mechanism, the full tax amount must be declared as due, regardless of the deductibility on the input side. Solution: Post process the taxes_data in case of professional with reverse-charge so wie will have the Payable part with the hole amount 21 in the previous example task-5418096 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#240955
This update fixes an issue where holiday carryover days weren't being calculated correctly, leading to an inaccurate count of expiring days. The change ensures that accrued holiday days are properly added before the expiration date is determined, resolving a discrepancy in the number of days expiring.
Original PR description
To reproduce: ============= - Create an accrual plan: - Carryover date: allocation - One level: - Accrues 2 days. - Accrual date: monthly on 1st of each month - Starts immediately on allocation start…
To reproduce:
=============
- Create an accrual plan:
- Carryover date: allocation
- One level:
- Accrues 2 days.
- Accrual date: monthly on 1st of each month - Starts immediately on allocation start date - Carryover policy: all days carry over - Carried over days validity: 3 months.
- Create an allocation that uses the above accrual plan on 23/09/2025:
- Starts on 01/07/2024
We should have 30 days in total with 24 expiring on 01/10/2025 but we only have 22 expiring on 01/10/2025.
Problem:
========
When `accrued_gain_time` of the accrual plan is 'start', in the `_process_accrual_plans` method, the property `expiring_days` is set when the first accrual still hasn't been added to the `number_of_days` (it is usually added at the [end of the loop](https://github.com/odoo/odoo/blob/18.0/addons/hr_holidays/models/hr_leave_allocation.py#L596)).
Solution:
=========
In the `_process_accrual_plans`, add the accrued days to the `number_of_days` before the `expiring_days` is set.
[opw-4963163](https://www.odoo.com/odoo/all-tasks/4963163)
Forward-Port-Of: odoo/odoo#233424This update resolves a potential issue where printing failed on Windows systems. By adding a safety net to catch printing errors, the system is now more robust and reliable, ensuring print jobs complete successfully. This enhances the overall user experience for Odoo users on Windows.
Original PR description
This commit adds the try/except block around print_raw method of the virtual iot box to allow catching exceptions when printing on Windows Forward-Port-Of: odoo/odoo#238633
This update corrects a potential issue where an Odoo update failure could cause the IoT Box to incorrectly believe it's up-to-date. By retaining the original branch name during updates, the system avoids this misinterpretation and ensures accurate status checks.
Original PR description
We used to renamed the Odoo branch name before running the update script in order to get the target branch name easily inside it. Issue is if for any reason the update fails, when the IoT Box will restart, the branch name will be the target one, so it will assume it's up to date. Task: 5407662 Forward-Port-Of: odoo/odoo#239758 Forward-Port-Of: odoo/odoo#239508
This update corrects a bug where the analytic distribution of expenses wasn't consistently applied when reinvoicing to customers. Now, the analytic account linked to the sales order takes priority, ensuring accurate tracking of costs and revenue across all related documents (expense, invoice, and sales order).
Original PR description
Steps to reproduce the flow: - Create an expensable product “Hotel” that can be reinvoiced to a customer - Create an analytic distribution model that automatically applies the analytic account…
Steps to reproduce the flow: - Create an expensable product “Hotel” that can be reinvoiced to a customer - Create an analytic distribution model that automatically applies the analytic account “Commercial &Marketing” to the previous created product “Hotel” - Create an SO for a customer “Gilles”. The SO is linked to the analytic account “Home Construction” - Create an expense which category is “Hotel”. The analytic distribution is automatically set to “Commercial & Marketing” - Reinvoice this expense to “Gilles”. The analytic distribution automatically changes to “Home Construction”. -> Wrong. We lose part of the information - When posting the expense report, the expense is added in the SO through a dedicated SO line. The analytic account previously set as “Home Construction” is now transformed, for an unknown reason, into “Commercial & Marketing”. -> Wrong. - On the vendor bill, the analytic distribution is “Home Construction” Now: 1. The analytic plans from the expense and from the SO are different. Simply add the analytic account from the SO 2. The analytic plans are the same. There are conflicts. In this case, the analytic distribution set on the SO is prioritary. We ensure that costs incurred or sales generated from the expense are reflected in the SO's analytic plan rather than the generic one. In the previous example, Home Construction is the only analytic account that should be considered on the expense, bill and SO. task-4564463 Forward-Port-Of: odoo/odoo#240762 Forward-Port-Of: odoo/odoo#233794
This update fixes a technical issue where unused sign item roles were accumulating in the database, preventing them from being removed. A temporary 'dummy' sign item is now created for each new role, allowing the system to automatically clean up these orphaned roles and maintain database efficiency. This ensures accurate reporting and avoids unnecessary data storage.
Original PR description
Fixes an issue where sign item roles were created but never deleted if they had no sign items linked to them. These orphaned roles were no longer shown in the app and remained in the database indefinitely. To address this, a dummy sign item is now created for each new sign item role. This allows the autovacuum logic to detect and automatically clean up unused roles and dummy items. Without this dummy item, it would be impossible to determine if a role is truly orphaned. task-4971485 Forward-Port-Of: odoo/enterprise#102722 Forward-Port-Of: odoo/enterprise#91189
This update fixes a bug that caused duplicate work orders to be created when a manufacturing order's Bill of Materials (BoM) and quantity were modified. The fix ensures that work orders are only generated once, streamlining the production process and preventing errors.
Original PR description
Steps to reproduce:
- Create a storable product "P1"
- Create a BoM with one operation
- Create a manufacturing order for product "P1"
- Do not set any BoM
- Save
- In draft state:
- Set the BoM
- Without saving, update the quantity to produce
Problem:
The same operation is added twice, resulting in duplicate work orders.
Cause:
Work orders are recomputed multiple times when BoM and quantity are changed before saving, and existing (not yet saved) work orders linked to the same BoM are not properly filtered out.
Fix:
Ensure that work orders linked to the current BoM are only created once during recomputation.
opw-5404686
Forward-Port-Of: odoo/odoo#241319
Forward-Port-Of: odoo/odoo#24075712 changes
Resolved issues and error corrections
This update fixes a reporting issue where the expected arrival date wasn't displayed on DIN 5008 Purchase Order reports. The fix adds this crucial information, aligning with previous versions and confirmed requirements from internal teams. This ensures accurate reporting for DIN 5008 transactions.
Original PR description
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order…
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order report. **Issue:** The Expected Arrival Date does not appear on the DIN 5008 Purchase Order report. Both functional experts and PO (CHKL) confirmed that the Expected Arrival Date should appear by default on the Purchase Order report in DIN 5008. **Cause:** The date_planned (Expected Arrival) field was introduced in standard Purchase Order report in v18.0, but DIN 5008 report template was not updated accordingly **Fix:** Add the Expected Arrival information to the DIN 5008 Purchase Order template. Before: <img width="606" height="162" alt="image" src="https://github.com/user-attachments/assets/e11f5b1f-5898-4ec9-a4f2-087db5dfeced" /> After: <img width="605" height="147" alt="image" src="https://github.com/user-attachments/assets/57419d00-50c9-4508-9bfc-307c0a54dc67" /> **opw-5376176** Forward-Port-Of: odoo/odoo#239619
This update corrects a previous error in the Profit & Loss report's Gross Profit calculation, now accurately reflecting the impact of stock levels. Additionally, the report's layout has been simplified for better readability and user experience. This ensures more reliable financial reporting.
Original PR description
Previously, the Gross Profit calculation did not include the stock effect, which resulted in incorrect values. With this PR, the Gross Profit is now computed including the stock effect, ensuring accurate results. In addition, some UI adjustments have been made to simplify and improve the readability of the report. task-5357539 opw-5163207 master PR: https://github.com/odoo/enterprise/pull/101650 Forward-Port-Of: odoo/enterprise#101649
This update restores the intended behavior for the Knowledge composer by hiding the GIF and canned response actions. These features were previously visible after a recent update, but this change ensures they are hidden when creating content within Knowledge, streamlining the composing process.
Original PR description
The GIF picker was previously hidden in Knowledge, but became visible again after the composer actions refactor. Commit that introduced the change: https://github.com/odoo/odoo/commit/5e1daafeac231c333ea13369fc208627213d67d4 This commit restores the intended behavior by hiding the GIF action again and also hides the canned response action, as neither feature is relevant when composing content in Knowledge, by applying conditions on the corresponding composer actions. Task-5163888 Forward-Port-Of: odoo/enterprise#100585
This update ensures that the correct analytic account is consistently used when expenses are reinvoiced to customers. Previously, the analytic distribution would shift unexpectedly, leading to inaccurate reporting. Now, the analytic account linked to the sales order takes priority, guaranteeing accurate tracking of costs and revenue across all related documents.
Original PR description
Steps to reproduce the flow: - Create an expensable product “Hotel” that can be reinvoiced to a customer - Create an analytic distribution model that automatically applies the analytic account…
Steps to reproduce the flow: - Create an expensable product “Hotel” that can be reinvoiced to a customer - Create an analytic distribution model that automatically applies the analytic account “Commercial &Marketing” to the previous created product “Hotel” - Create an SO for a customer “Gilles”. The SO is linked to the analytic account “Home Construction” - Create an expense which category is “Hotel”. The analytic distribution is automatically set to “Commercial & Marketing” - Reinvoice this expense to “Gilles”. The analytic distribution automatically changes to “Home Construction”. -> Wrong. We lose part of the information - When posting the expense report, the expense is added in the SO through a dedicated SO line. The analytic account previously set as “Home Construction” is now transformed, for an unknown reason, into “Commercial & Marketing”. -> Wrong. - On the vendor bill, the analytic distribution is “Home Construction” Now: 1. The analytic plans from the expense and from the SO are different. Simply add the analytic account from the SO 2. The analytic plans are the same. There are conflicts. In this case, the analytic distribution set on the SO is prioritary. We ensure that costs incurred or sales generated from the expense are reflected in the SO's analytic plan rather than the generic one. In the previous example, Home Construction is the only analytic account that should be considered on the expense, bill and SO. task-4564463 Forward-Port-Of: odoo/odoo#240267 Forward-Port-Of: odoo/odoo#233794
This update allows users to easily copy and paste error messages from the Point of Sale interface. Previously, users couldn't copy these messages, making it difficult to report issues or troubleshoot problems. This change improves usability and support efficiency.
Original PR description
Before this commit, it was not possible to select and copy text from the error popup shown in the POS interface. This limitation hindered users from easily copying error messages for reporting or troubleshooting purposes. task-id: 5411067 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240570
This update enhances security by granting necessary access to employee data for the account batch payment process. Previously, a restriction prevented non-HR users from correctly processing payments, now the system utilizes sudo to ensure proper functionality. This resolves a potential access issue and improves the reliability of batch payment operations.
Original PR description
In commit a6ed1bd, new logic for handling employee addresses was introduced. However, the _get_all_addr function requires employee_ids, which implicitly requires access to the Employees model and, therefore, be in HR groups. During the compute process, _get_all_addr is only used to check whether an employee has an address; no address data is exposed. To fix this issue, the call to _get_all_addr should be executed with sudo(). OPW-5428523 Forward-Port-Of: odoo/enterprise#102851
This update ensures invoices exported with foreign VAT numbers (used for distance selling) correctly display the appropriate VAT number in the PDF invoice (factur-x file). Previously, the company's VAT was used instead. This fix improves invoice accuracy and compliance with EU regulations.
Original PR description
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1.…
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1. Install a European localization (ex: l10n_at) 2. Enable EU Intra-community Distance Selling. You should now have new OSS fiscal positions. Update the one you want to use with a foreign VAT. 3. Create a valid foreign customer. (within the EU) 4. Create and send an invoice for this customer. 5. In the PDF, there is an embedded factur-x file. Notice how the VAT number under the SellerTradeParty corresponds to the company's VAT, not the foreign VAT number defined on the fiscal position. This is more apparent because we use the correct VAT number in the PDF file but not in the corresponding XML. This commit fixes this issue by first checking if we have a foreign VAT number defined on the fiscal position of the invoice. If so, we use it. opw-5182837 Forward-Port-Of: odoo/odoo#237580 Forward-Port-Of: odoo/odoo#236692
This update fixes an issue where holiday carryover days were not being calculated correctly, leading to an inaccurate count of expiring days. The change ensures that accrued holiday days are properly added to the total, resulting in a more precise calculation of available holidays at the end of the validity period. This improves the accuracy of holiday balances.
Original PR description
To reproduce: ============= - Create an accrual plan: - Carryover date: allocation - One level: - Accrues 2 days. - Accrual date: monthly on 1st of each month - Starts immediately on allocation start…
To reproduce:
=============
- Create an accrual plan:
- Carryover date: allocation
- One level:
- Accrues 2 days.
- Accrual date: monthly on 1st of each month - Starts immediately on allocation start date - Carryover policy: all days carry over - Carried over days validity: 3 months.
- Create an allocation that uses the above accrual plan on 23/09/2025:
- Starts on 01/07/2024
We should have 30 days in total with 24 expiring on 01/10/2025 but we only have 22 expiring on 01/10/2025.
Problem:
========
When `accrued_gain_time` of the accrual plan is 'start', in the `_process_accrual_plans` method, the property `expiring_days` is set when the first accrual still hasn't been added to the `number_of_days` (it is usually added at the [end of the loop](https://github.com/odoo/odoo/blob/18.0/addons/hr_holidays/models/hr_leave_allocation.py#L596)).
Solution:
=========
In the `_process_accrual_plans`, add the accrued days to the `number_of_days` before the `expiring_days` is set.
[opw-4963163](https://www.odoo.com/odoo/all-tasks/4963163)
Forward-Port-Of: odoo/odoo#233424This update fixes an error in how VAT is calculated for transactions using Reverse Charge taxes, particularly when combined with non-deductible expense configurations. Previously, the output VAT was incorrectly reduced. Now, the full VAT amount (21%) is accurately reflected as payable, aligning with standard accounting practices for Reverse Charge scenarios.
Original PR description
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable…
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable (Output Tax) was incorrect. Steps to reproduce: 1. Create a Vendor Bill. 2. Use a Tax configured as both Reverse Charge (e.g., 21%) and partially Non-Deductible (e.g., 40% non-deductible). 3. Set the price to 100.00. Observed behavior: - VAT Deductible (Input): 12.60 (Correct: 60% of 21). - Non-Deductible Expense: 8.40 (Correct: 40% of 21). - VAT Payable (Output): 12.60 (Incorrect: it was reduced by the non-deductible part). Expected behavior: - VAT Payable (Output) should be 21.00. In a Reverse Charge mechanism, the full tax amount must be declared as due, regardless of the deductibility on the input side. Solution: Post process the taxes_data in case of professional with reverse-charge so wie will have the Payable part with the hole amount 21 in the previous example task-5418096 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#240955
This update fixes a minor issue in the self-ordering point-of-sale module by updating how changes to items in the shopping cart are tracked. Previously, a system was in place that was no longer used. This change ensures that cart modifications are correctly recorded, improving the overall shopping experience.
Original PR description
Before this commit, to check line changes the lastChangesSent was used, which doesn't exist anymore. This commit replaces its usage with uiState.lineChanges. opw-5407191 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240197
This update fixes a bug where setting a Bill of Materials (BoM) in a manufacturing order would sometimes create duplicate work orders. The issue stemmed from how the system recomputed work orders when the BoM or quantity changed before saving. Now, work orders are created only once, ensuring accurate order processing.
Original PR description
Steps to reproduce:
- Create a storable product "P1"
- Create a BoM with one operation
- Create a manufacturing order for product "P1"
- Do not set any BoM
- Save
- In draft state:
- Set the BoM
- Without saving, update the quantity to produce
Problem:
The same operation is added twice, resulting in duplicate work orders.
Cause:
Work orders are recomputed multiple times when BoM and quantity are changed before saving, and existing (not yet saved) work orders linked to the same BoM are not properly filtered out.
Fix:
Ensure that work orders linked to the current BoM are only created once during recomputation.
opw-5404686
Forward-Port-Of: odoo/odoo#241319
Forward-Port-Of: odoo/odoo#240757This update fixes an issue where adding the same product multiple times to a Point of Sale order would create duplicate orderlines. The change ensures that prices with varying decimal places are correctly merged, resulting in a more accurate and streamlined order process. This improves the overall reliability of the POS system.
Original PR description
Before this commit, when a product had a price with more decimals than the currency, adding it multiple times to the order would create multiple orderlines instead of merging them. This was due to rounding issue when comparing the prices of the orderlines. opw-5341735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240132 Forward-Port-Of: odoo/odoo#238639
3 changes
Resolved issues and error corrections
This update corrects a previous error in the Profit & Loss report's Gross Profit calculation, now accurately reflecting the impact of stock levels. Additionally, the report's layout has been simplified for better user understanding. These changes ensure more reliable financial reporting.
Original PR description
Previously, the Gross Profit calculation did not include the stock effect, which resulted in incorrect values. With this PR, the Gross Profit is now computed including the stock effect, ensuring accurate results. In addition, some UI adjustments have been made to simplify and improve the readability of the report. task-5357539 opw-5163207 master PR: https://github.com/odoo/enterprise/pull/101650 Forward-Port-Of: odoo/enterprise#101649
This update fixes a discrepancy in payment calculations for UrbanPiper orders. Previously, a small difference was appearing after payment, which has now been resolved to ensure accurate accounting. This ensures all UrbanPiper transactions are correctly reflected in the system.
Original PR description
In this commit, The amount difference should be 0.0 after the Urbanpiper order has been paid. task-5441252 Forward-Port-Of: odoo/enterprise#102872
This update enhances security by granting necessary permissions to non-HR users when processing batch payments. Previously, a function required HR group access, limiting functionality. Adding sudo ensures correct operation without restricting access for other users.
Original PR description
In commit a6ed1bd, new logic for handling employee addresses was introduced. However, the _get_all_addr function requires employee_ids, which implicitly requires access to the Employees model and, therefore, be in HR groups. During the compute process, _get_all_addr is only used to check whether an employee has an address; no address data is exposed. To fix this issue, the call to _get_all_addr should be executed with sudo(). OPW-5428523 Forward-Port-Of: odoo/enterprise#102851
6 changes
Resolved issues and error corrections
This update corrects a previous error in the Gross Profit calculation by now including stock effects, ensuring more accurate financial reporting. Additionally, the Profit & Loss report's layout has been improved for better readability and user experience. This change enhances the reliability and usability of key financial reports.
Original PR description
Previously, the Gross Profit calculation did not include the stock effect, which resulted in incorrect values. With this PR, the Gross Profit is now computed including the stock effect, ensuring accurate results. In addition, some UI adjustments have been made to simplify and improve the readability of the report. task-5357539 opw-5163207 master PR: https://github.com/odoo/enterprise/pull/101650 Forward-Port-Of: odoo/enterprise#101649
This update fixes an issue preventing payment lines from being printed on Italian POS receipts. The problem stemmed from a configuration error that was consistently causing the system to ignore payment information. This change ensures that all payment details are accurately included on the printed receipts for Italian businesses.
Original PR description
Currently payment lines are not sent to the italian printer. Steps to reproduce: ------------------- * Install l10n_it_pos * Switch to italian company * Set up italian printer for a shop * Make an order and pay it * Print italian receipt > Observation: no matter the payment used it is not sent to the italian printer Why the fix: ------------ This condition is currently always true: https://github.com/odoo/enterprise/blob/41e9fcd162cd51f93c98a0f0f6922d5faaf8914d/l10n_it_pos/static/src/app/documents/fiscal_document/body/body.xml#L27-L29 because `this.priceIncl` is always undefined. Therefore we would never use the payment lines: https://github.com/odoo/enterprise/blob/41e9fcd162cd51f93c98a0f0f6922d5faaf8914d/l10n_it_pos/static/src/app/documents/fiscal_document/body/body.xml#L30-L36 opw-5428027 Forward-Port-Of: odoo/enterprise#102793
This update resolves an issue where the employer cost calculation was incorrect when negative wage values were entered or modified. The fix removes a restriction that forced negative wages to zero, allowing the system to properly recompute employer costs and maintain data accuracy. This ensures correct payroll calculations for employees with negative wage adjustments.
Original PR description
Issue: When entering a negative wage value and then modifying it before saving, the employer cost was not being recalculated. Additionally, when wage = 0 and the user changes it to a negative value,…
Issue:
When entering a negative wage value and then modifying it before saving, the
employer cost was not being recalculated. Additionally, when wage = 0 and the
user changes it to a negative value, a validation error is correctly raised.
However, when wage > 0 and the user edits it to a negative value, the system
does not trigger the validation error.
Cause:
A negative wage makes the wage_on_payslip compute method return 0, because
_get_wage_from_yearly_costs applies max(0, value). Once wage and
wage_on_payslip differ, the inherited logic switches the input to
display_wage_on_payslip instead of the actual wage field.
Any further edits are therefore applied only to display_wage_on_payslip while
wage remains unchanged. Since the employer cost compute method depends on wage,
it is never triggered, leaving the employer cost incorrect.
Because wage_on_payslip becomes 0 while wage is negative, the condition:
if abs(version.wage - wage) > 0.10:
evaluates to True, and the inverse method assigns:
version.wage = wage
At this point, wage becomes 0. Since the ORM constraint checks `(wage >= 0)`,
the value is considered valid, so no validation error is raised.
Solution:
Remove the max() call in _get_wage_from_yearly_costs so that negative values
are kept instead of being coerced to zero. Replace:
return max(0, remaining_for_gross / salary_costs_factor)
with:
return remaining_for_gross / salary_costs_factor
This prevents wage_on_payslip from being forced to 0, avoids the UI from
switching to display_wage_on_payslip, allows the employer cost to recompute
correctly, and ensures that when wage and wage_on_payslip do not differ,
the condition `if abs(version.wage - wage) > 0.10` does not execute
`version.wage = wage`, allowing ORM constraints to be properly enforced.
task-5383750This update ensures that the country flag is consistently displayed next to phone numbers on VoIP call activities. Previously, the flag was missing, leading to a less informative view. This improvement simplifies the TabEntry component and ensures accurate display of contact information within the VoIP softphone.
Original PR description
Improve/fix the `TabEntry` and related components, in preparation to https://github.com/odoo/enterprise/pull/102936 task-5404888
This update modifies how equity-related accounts are calculated in financial reports, specifically for Mexican reporting (l10n_mx_reports_closing). The change allows for optional inclusion of initial balances, improving reporting flexibility. Additionally, the logic for handling undistributed lines has been reorganized for easier customization.
Original PR description
Following the changes introduced in odoo#240742 and in enterprise#95062, this commit adapts the l10n_mx_reports_closing tests, as the equity_unaffected account amounts change if include_initial_balance = False. This commit also moves the domain logic for the Undistributed Line to a dedicated function, making it simpler to customize this behavior if needed. no-task Forward-Port-Of: odoo/enterprise#102906 Forward-Port-Of: odoo/enterprise#102549
This update enhances the accuracy and speed of calculating overtime hours within the attendance system. The changes address previous testing issues and optimize the generation of overtime lines, ensuring more reliable and efficient payroll processing. This improves the overall user experience for employees and managers.
Original PR description
Forward-Port-Of: odoo/enterprise#102697 Forward-Port-Of: odoo/enterprise#102125
4 changes
Resolved issues and error corrections
This update enhances security by ensuring that the account batch payment process can access employee address information, even for users without HR permissions. The change uses 'sudo' to grant necessary access, preventing potential restrictions and improving the reliability of the payment calculations. This resolves an internal issue identified as OPW-5428523.
Original PR description
In commit a6ed1bd, new logic for handling employee addresses was introduced. However, the _get_all_addr function requires employee_ids, which implicitly requires access to the Employees model and, therefore, be in HR groups. During the compute process, _get_all_addr is only used to check whether an employee has an address; no address data is exposed. To fix this issue, the call to _get_all_addr should be executed with sudo(). OPW-5428523 Forward-Port-Of: odoo/enterprise#102851
This update corrects a previous error in the Profit & Loss report's Gross Profit calculation, now accurately including stock effects. Additionally, the report's layout has been simplified for better readability and user experience. This ensures more reliable financial reporting.
Original PR description
Previously, the Gross Profit calculation did not include the stock effect, which resulted in incorrect values. With this PR, the Gross Profit is now computed including the stock effect, ensuring accurate results. In addition, some UI adjustments have been made to simplify and improve the readability of the report. task-5357539 opw-5163207 master PR: https://github.com/odoo/enterprise/pull/101650 Forward-Port-Of: odoo/enterprise#101649
This update restores the intended behavior for the Knowledge composer by hiding the GIF and canned response actions. These features were previously visible after a recent system update, but have now been intentionally hidden to streamline the content creation process within Knowledge.
Original PR description
The GIF picker was previously hidden in Knowledge, but became visible again after the composer actions refactor. Commit that introduced the change: https://github.com/odoo/odoo/commit/5e1daafeac231c333ea13369fc208627213d67d4 This commit restores the intended behavior by hiding the GIF action again and also hides the canned response action, as neither feature is relevant when composing content in Knowledge, by applying conditions on the corresponding composer actions. Task-5163888 Forward-Port-Of: odoo/enterprise#102862 Forward-Port-Of: odoo/enterprise#100585
This update ensures that all work entries are consistently set to 'draft' state when the action is triggered. Previously, the system didn't always update work entries correctly, leading to potential inconsistencies. This change improves data accuracy and streamlines payroll processing.
Original PR description
Problem ---------- the `action_set_to_draft` should set any work entry to draft regardless of the situation. Solution ---------- If only the state is write to draft, let the whole vals be written task-5410512
7 changes
Resolved issues and error corrections
This update fixes a bug preventing credit card payment journals from being selectable in the payment provider setup. Previously, only bank journals were displayed, limiting payment options. The change expands the journal domain to include credit card journals, ensuring full compatibility and functionality.
Original PR description
Steps to reproduce: 1. Install account_payment. 2. Go to Payment Providers and install the demo provider. 3. Create a journal with type Credit Card. 4. Open Payment Provider → Demo → Under Payment Follow-up. 5. Try to select a payment journal. Issue: Only journals of type Bank are displayed. Journals with type Credit Card are not selectable in the payment provider. Cause: Since credit card journals share the same posting behavior as bank journals for payments, they should also be allowed. Credit card journals were not selectable in payment providers because the journal domain was restricted to journals of type bank, excluding credit journals. Solution: Extend the journal domain to include journals of type credit, allowing credit card journals to be selected in payment providers. opw-5411748
This update fixes an issue where the cart didn't accurately reflect changes to product quantities. The fix replaces a delayed update mechanism with immediate updates when a user modifies the quantity field, ensuring correct cart calculations and a smoother checkout experience. This improves the reliability of the shopping cart functionality.
Original PR description
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and…
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and directly click `Checkout`. **Issue:** - The cart shows the product with quantity = 1 instead of the edited value. **Root Cause:** - The template uses `t-on-change`, which only triggers when the input loses focus or is explicitly modified. - When the user clicks `Checkout`, both `setQuantity` and `onConfirm` are executed in parallel. - If `onConfirm` runs first, it reads the previously stored quantity (`1` from `this.state.products` initialized in `onWillStart`) before `setQuantity` has updated the value. - Consequently, the checkout process proceeds with the stale quantity instead of the newly entered one. **Solution:** - Replace `t-on-change` with `t-on-input` so that the quantity is updated immediately when the user edits the field. - This ensures the correct quantity is reflected in the cart even if the user proceeds directly to checkout. opw-5435672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the cart didn't accurately reflect quantity changes made within the Field Service module. The fix replaces a trigger mechanism that only updated quantities after losing focus, ensuring the correct quantity is displayed immediately after editing. This improves the user experience and prevents order discrepancies.
Original PR description
**Steps to produce:** - Install `industry_fsm_stock` with demo data. - Open any task in the field service module. - Click on the Products icon on top > Click on `Customizable Desk`. - Change the quantity to 100 and directly go back. **Issue:** - The cart shows the product with quantity = 1 instead of the edited value. **Root cause:** - The template used `t-on-change`, which only triggers when the HTML input loses focus or changes via another interaction. - In this case, clicking "Checkout" directly does not trigger the onchange event, so the updated quantity is ignored. **Solution:** - Replace `t-on-change` with `t-on-input` so that the quantity is updated immediately when the user edits the field. - This ensures the correct quantity is reflected in the cart even if the user proceeds directly to checkout. opw-5435672 ---
This update enhances security by ensuring that the process of checking employee addresses during batch payments is accessible to all users, regardless of their HR group affiliation. Previously, restricted access limited functionality. This change adds sudo access to a specific function to ensure broader access without compromising data security.
Original PR description
In commit a6ed1bd, new logic for handling employee addresses was introduced. However, the _get_all_addr function requires employee_ids, which implicitly requires access to the Employees model and, therefore, be in HR groups. During the compute process, _get_all_addr is only used to check whether an employee has an address; no address data is exposed. To fix this issue, the call to _get_all_addr should be executed with sudo(). OPW-5428523 Forward-Port-Of: odoo/enterprise#102851
This update corrects a bug in the account_edi_ubl_cii module's test invoices. The missing invoice date previously caused incorrect tax calculations. Adding the date ensures accurate tax application during testing, preventing potential issues with fiscal positions.
Original PR description
When merging odoo/odoo#236692, the invoice date was missing on the test invoices. This could lead to issues when there's no qualifying fiscal position. Adding it removes the need to recompute the fiscal position ensuring the correct taxes are applied for the relevant test case. No task ID
This update ensures that changes to product descriptions in Odoo are now correctly reflected in the UrbanPiper system during menu synchronization. Previously, updates to product descriptions weren't consistently propagated, leading to outdated information. This fix improves data accuracy and consistency between Odoo and UrbanPiper.
Original PR description
Before this commit: --- When we sync the menu with the product description and later update the product description, re-syncing the menu does not update the product description in UrbanPiper. After this commit: --- This fix ensures that any change in the product description is properly sent to UrbanPiper during menu synchronization. task-5439271
This update fixes an issue where search suggestions were hidden behind product categories when using the grid layout in the website builder. The fix ensures that search suggestions are always visible, improving the user experience when searching for products within grid-based layouts. This resolves a visual inconsistency and ensures proper functionality.
Original PR description
Steps to reproduce: =================== - Add a product categories block with a search bar in the inner content of the block, like "s_product_list". - Drag a "Search" snippet inside of the block in…
Steps to reproduce: =================== - Add a product categories block with a search bar in the inner content of the block, like "s_product_list". - Drag a "Search" snippet inside of the block in top of products categories - Change the layout to "Grid" & Save. - Type in the search bar to trigger autocomplete suggestions. -> The suggestions appear behind the product categories and are not visible. Cause: ====== When a searchbar snippet is placed inside a section using grid mode, the autocomplete dropdown was hidden behind sibling grid items. This occurred because the grid layout applies inline z-index to each column (via `_placeColumns` `in grid_layout_utils.js` (See [1])), creating stacking contexts that trapped the dropdown. So once you change to grid mode layout `_toggleGridMode` function will be triggered which will call `_placeColumns` that will assign z-index; (See [2]) Solution: ========= Override the inline z-index on grid items containing a searchbar [1]: https://github.com/odoo/odoo/blob/d4411c27b469e5dcc526b5b1f8ea4498f2b08567/addons/web_editor/static/src/js/common/grid_layout_utils.js#L225 [2]: https://github.com/odoo/odoo/blob/d4411c27b469e5dcc526b5b1f8ea4498f2b08567/addons/web_editor/static/src/js/common/grid_layout_utils.js#L138 opw-5392011 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
4 changes
Resolved issues and error corrections
This update corrects a typo in the Vietnamese translation of the 'Back Order of' phrase within the Odoo stock module. This ensures accurate and professional communication for Vietnamese-speaking users. The issue was also present in the newer Odoo 18 version, highlighting a consistent translation concern.
Original PR description
correct Vietnamese translation typo for "Back Order of" This issue is also present in Odoo 18 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures invoices exported with specific European VAT settings (like distance selling) accurately reflect the customer's VAT number in the generated PDF invoices. Previously, the VAT number was incorrectly defaulting to the company's VAT. This fix corrects this issue, ensuring accurate financial reporting and compliance.
Original PR description
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1.…
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1. Install a European localization (e.g. l10n_at) 2. Enable EU Intra-community Distance Selling. You should now have new OSS fiscal positions. Update the one you want to use with a foreign VAT. 3. Create a valid foreign customer. (within the EU) 4. Create and send an invoice for this customer. 5. In the PDF, there is an embedded factur-x file. Notice how the VAT number under the SellerTradeParty corresponds to the company's VAT, not the foreign VAT number defined on the fiscal position. This is more apparent because we use the correct VAT number in the PDF file but not in the corresponding XML. This commit fixes this issue by first checking if we have a foreign VAT number defined on the fiscal position of the invoice. If so, we use it. This is a backport of odoo/odoo#236692. Since this is a general fix, it is needed by customers using 17.0 and therefore necessary to add. opw-5401880 opw-5182837
This pull request updates the core spreadsheet component within Odoo. It addresses several minor bugs and improves the user experience, specifically related to popover behavior and data validation. These changes ensure the spreadsheet functionality remains stable and reliable.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/df7c781aa3 [REL] 17.0.82 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/df7c781aa3 [REL] 17.0.82 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/45a24fdf1e [FIX] grid: close popovers on external clicks [Task: 5418367](https://www.odoo.com/odoo/2328/tasks/5418367) https://github.com/odoo/o-spreadsheet/commit/05e6ca5026 [FIX] data validation: fix date criterion [Task: 5343580](https://www.odoo.com/odoo/2328/tasks/5343580) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update fixes an issue where quotations created from repair orders in the Point of Sale (PoS) system incorrectly displayed a quantity of 0 for products. The fix ensures that the product quantity is accurately reflected when opening a quotation linked to a repair order, resolving a data discrepancy. This improves the accuracy of sales reporting and order fulfillment.
Original PR description
backoprt of : https://github.com/odoo/odoo/pull/186812 When opening a quotation created from a repair order in the PoS the quantity of the products would always be 0. Steps to reproduce: ------------------- * Create a repair order for whatever product * Add some product to the list with the "Add" option * Start and End the reparation * Create a quotation for the repair order * Open the quotation in the PoS > Observation: The quantity of the product in the pos is 0 Why the fix: ------------ If the sale order line has no `valued_move_ids` it means that it's linked to a repair. In this case we take the product_uom_qty into account for the pos order line quantity. opw-4261097