Thursday, April 24, 2025
45 changes · saas-18.2
Resolved issues and error corrections
This update adjusts automated checks for UrbanPiper point-of-sale orders so they look for order text more reliably. It helps reduce false test failures without changing the customer-facing ordering experience.
Original PR description
In this commit: === - Replaced all occurrences of `TicketScreen.nthRowContains()` with `UrbanPiper.orderHasText()` in test tours. task-4712861 runbot-115061
Portal users will no longer see a Share button that they cannot use in Documents. This removes confusion and keeps the portal view aligned with the actions actually available to those users.
Original PR description
**Before this PR:** The Share panel is not accessible to portal users, but the Share button is still visible to them. **After this PR:** The Share button will no longer be visible in the portal view. Task-4717553
Double-clicking a table border in the HTML editor no longer selects an entire column or triggers an error when the cursor is outside the table. This makes table editing more predictable and prevents a disruptive crash scenario for users editing content.
Original PR description
**Current behavior before PR:** - Double-clicking on a table border would select the table column if the selection was inside a table cell. - If the selection was outside the table, a traceback will occur. **Desired behavior after PR is merged:** - Now, a table cell is now only selected when the double-click is performed inside the cell, not on its border. task:4730234
Miscellaneous changes
Some of the tests are not deterministic on the runbot. Avoid raising errors in these cases. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206812 Forward-Port-Of: odoo/odoo#206669
Original PR description
Some of the tests are not deterministic on the runbot. Avoid raising errors in these cases. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206812 Forward-Port-Of: odoo/odoo#206669
Changing the syntax of the product code line in the invoice to not have a space before the colon. Example: `VTSZ : 8604000` -> `VTSZ: 8604000` task-4707459 Forward-Port-Of: odoo/odoo#206602
Original PR description
Changing the syntax of the product code line in the invoice to not have a space before the colon. Example: `VTSZ : 8604000` -> `VTSZ: 8604000` task-4707459 Forward-Port-Of: odoo/odoo#206602
Another check on the object received by the IoT Box containing certificate keys was always returning False, resulting in the certificate never being applied to the box. The object returned by odoo.com is a dictionary containing either: - 'error': 'an error message', - 'result': False (always False), or: - 'private_key_pem', - 'x509_pem', - 'subject_cn'. So checking `response.get("result")` would always return `False`, even if the server returned a certificate. Forward-Port-Of: odoo
Original PR description
Another check on the object received by the IoT Box containing certificate keys was always returning False,
resulting in the certificate never being applied to the box.
The object returned by odoo.com is a dictionary containing either:
- 'error': 'an error message',
- 'result': False (always False),
or:
- 'private_key_pem',
- 'x509_pem',
- 'subject_cn'.
So checking `response.get("result")` would always return `False`, even if the server returned a certificate.
Forward-Port-Of: odoo/odoo#206715
Forward-Port-Of: odoo/odoo#206499Since Chrome 135, the "Keep scrollTop when loading records with load more" unit test fails with a scrolling value way higher than expected. In practice, the scroll in the test goes down to the "Load more" button after it has been clicked instead of keeping scroll to the same value as before the loading of the "more" items. Weirdly, it doesn't look to be an actual issue when performed by the user, but only in the test suite. This commit works around that issue by using `element.click()` f
Original PR description
Since Chrome 135, the "Keep scrollTop when loading records with load more" unit test fails with a scrolling value way higher than expected. In practice, the scroll in the test goes down to the "Load more" button after it has been clicked instead of keeping scroll to the same value as before the loading of the "more" items. Weirdly, it doesn't look to be an actual issue when performed by the user, but only in the test suite. This commit works around that issue by using `element.click()` followed by waiting for an animation frame instead of using `contains().click()`, because... well, the two helpers behave slightly differently. 🤷 Forward-Port-Of: odoo/odoo#206956
Unbuilding a returned product will break the stock valuations. To reproduce the issue: 1. Create a FIFO product 2. Produce 3. Deliver 4. Return 5. Unbuild Issue: Looking at the remaining qties of the SVL, we see that the layer of the unbuild didn't consume the quantity of the return. This may lead to more important issues in the stock valuation. When processing the unbuild, we `_run_fifo` to consume the existing SVLs. To do so, we first try to find the candidates. Here is the p
Original PR description
Unbuilding a returned product will break the stock valuations. To reproduce the issue: 1. Create a FIFO product 2. Produce 3. Deliver 4. Return 5. Unbuild Issue: Looking at the remaining qties of the…
Unbuilding a returned product will break the stock valuations. To reproduce the issue: 1. Create a FIFO product 2. Produce 3. Deliver 4. Return 5. Unbuild Issue: Looking at the remaining qties of the SVL, we see that the layer of the unbuild didn't consume the quantity of the return. This may lead to more important issues in the stock valuation. When processing the unbuild, we `_run_fifo` to consume the existing SVLs. To do so, we first try to find the candidates. Here is the problem: since [1], in case of an unbuild, we force to use the SVL of the MO only. This will not work with the above use case: the SVL of the MO has been consumed by the delivery. Therefore, we don't find any candidate. This is the reason why we have some inconsistencies on the layers. Instead of getting the SVL of the MO only, we should simply give it the priority and be able to find some other candidates. [1] https://github.com/odoo/odoo/commit/49565cdd9007ac66a3b835dc073777e2e6c48f2c OPW-4683083 Forward-Port-Of: odoo/odoo#206659 Forward-Port-Of: odoo/odoo#206450
Even though uploaded image was .png it gives such error, reason behind this was `DecompressionBombWarning` occurred in `PIL (Pillow)`  Before this PR: - When uploading an image that is too large, the error message notification was showing wrong message. After this PR: - The error message notification will show the correct message. task-4606136 --- I confirm I have signed the CLA and
Original PR description
Even though uploaded image was .png it gives such error, reason behind this was `DecompressionBombWarning` occurred in `PIL (Pillow)`  Before this PR: - When uploading an image that is too large, the error message notification was showing wrong message. After this PR: - The error message notification will show the correct message. task-4606136 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206059 Forward-Port-Of: odoo/odoo#199564
When changing the journal on a draft payment, the linked journal entry was not updated. This caused two issues: The journal entry kept the old journal. The sequence (move name) was not updated to match the new journal. Now, when the journal is changed on a draft payment, both the journal and its sequence are correctly updated. task-4688823 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I conf
Original PR description
When changing the journal on a draft payment, the linked journal entry was not updated. This caused two issues: The journal entry kept the old journal. The sequence (move name) was not updated to match the new journal. Now, when the journal is changed on a draft payment, both the journal and its sequence are correctly updated. task-4688823 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#204507
We get an Access Error when trying to print check from a journal that is shared between branches. Steps: - Have a company X and a branch Y - Make a vendor payment with only X selected in company selector, set payment method as 'Checks' - Confirm and print check - Now select only branch Y in company selector - Create a vendor payment with same config as previous one - Condirm, and try to print check -> Access Error This is because we try to get the previous check number from the last payment
Original PR description
We get an Access Error when trying to print check from a journal that is shared between branches. Steps: - Have a company X and a branch Y - Make a vendor payment with only X selected in company selector, set payment method as 'Checks' - Confirm and print check - Now select only branch Y in company selector - Create a vendor payment with same config as previous one - Condirm, and try to print check -> Access Error This is because we try to get the previous check number from the last payment of the journal, but even if the record shares the same journal, we don't necessary have access to it. Fix: Get `check_number` directly from the SQL query instead of a record opw-4520708 Forward-Port-Of: odoo/odoo#206304
This corrects 9f96aa7648ed4320849c6736e85b9cb6c988232c that was impacting all xml files whereas it should only have had an impact on the invoice report. opw-4661577 Forward-Port-Of: odoo/odoo#206877 Forward-Port-Of: odoo/odoo#206811
Original PR description
This corrects 9f96aa7648ed4320849c6736e85b9cb6c988232c that was impacting all xml files whereas it should only have had an impact on the invoice report. opw-4661577 Forward-Port-Of: odoo/odoo#206877 Forward-Port-Of: odoo/odoo#206811
This PR adapts to the new way of registering and detecting IoT Boxes. It also refactors the connection manager to remove some now unnecesary features and simplify the code This PR is done in saas-18.1 (as opposed to its enterprise counterpart in master) because the IoT Box image is based on saas-18.1 Related internal PR: odoo/internal#3462 Related enterprise PRs: 1) https://github.com/odoo/enterprise/pull/82905 2) https://github.com/odoo/enterprise/pull/83066 Related upgrade PR (
Original PR description
This PR adapts to the new way of registering and detecting IoT Boxes. It also refactors the connection manager to remove some now unnecesary features and simplify the code This PR is done in saas-18.1 (as opposed to its enterprise counterpart in master) because the IoT Box image is based on saas-18.1 Related internal PR: odoo/internal#3462 Related enterprise PRs: 1) https://github.com/odoo/enterprise/pull/82905 2) https://github.com/odoo/enterprise/pull/83066 Related upgrade PR (for the related enterprise PR in master): https://github.com/odoo/upgrade/pull/7533 Forward-Port-Of: odoo/odoo#204629
**Current behavior:** In the *Contacts* application, with a partner record open, you can view the lots associated with that customer (used in orders for that partner(?)). Lots that were delivered to that partner via dropship transfers do not appear here. **Expected behavior:** Dropship lots are there. **Steps to reproduce:** 1. Create a dropship product (route, vendor, ..) tracked by lot 2. Sell 1 of that product to some partner, confirm the ensuing purchase & dropship transfer
Original PR description
**Current behavior:** In the *Contacts* application, with a partner record open, you can view the lots associated with that customer (used in orders for that partner(?)). Lots that were delivered to that partner via dropship transfers do not appear here. **Expected behavior:** Dropship lots are there. **Steps to reproduce:** 1. Create a dropship product (route, vendor, ..) tracked by lot 2. Sell 1 of that product to some partner, confirm the ensuing purchase & dropship transfer 3. Go to *Contact* -> open the customer -> `Lot/Serial Numbers` smart button -> lot is not there **Cause of the issue:** `StockLotReport` only looks for `outgoing` (delivery) picking type pickings. **Fix:** Override the join on `PickingType` and `ResPartner` such that dropship pickings can also be collected here. opw-4559129 Forward-Port-Of: odoo/odoo#204250
Explanation: Includes previously missing supported payment methods for AsiaPay, such as Alipay (distinct from AlipayHK). Forward-Port-Of: odoo/odoo#206836
Original PR description
Explanation: Includes previously missing supported payment methods for AsiaPay, such as Alipay (distinct from AlipayHK). Forward-Port-Of: odoo/odoo#206836
Steps to reproduce: 1. Drag and drop a popup snippet. 2. Add a banner inside the popup snippet. 3. Set the banner to be invisible on desktop by selecting `no_desktop` visibility on the `Block` element. Issue: The popup remains open, but the element is incorrectly marked as hidden in the invisibility elements list. Solution: This PR ensures that the element's visibility is toggled correctly and triggers the snippet activation to false. task-4337481 Forward-Port-Of: odoo/odoo#206893
Original PR description
Steps to reproduce: 1. Drag and drop a popup snippet. 2. Add a banner inside the popup snippet. 3. Set the banner to be invisible on desktop by selecting `no_desktop` visibility on the `Block` element. Issue: The popup remains open, but the element is incorrectly marked as hidden in the invisibility elements list. Solution: This PR ensures that the element's visibility is toggled correctly and triggers the snippet activation to false. task-4337481 Forward-Port-Of: odoo/odoo#206893 Forward-Port-Of: odoo/odoo#187233
the xmlid `hr_expense.mail_alias_expense` can be deleted by the user, don't raise error if xmlid is not found. 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#203152 Forward-Port-Of: odoo/odoo#203002
Original PR description
the xmlid `hr_expense.mail_alias_expense` can be deleted by the user, don't raise error if xmlid is not found. 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#203152 Forward-Port-Of: odoo/odoo#203002
<b>Steps to reproduce:</b> 1. Go to website > Shop > Scroll to tags filter (If tags aren't visible in the sidebar, go to Sales > Configuration > Product Tags > create tags) 2. Notice that Tags filter cannot be collapsed unlike other filters 3. Observe that margins and spacing don't match other filter components <b>Issue:</b> The "Tags" filter on the website shop sidebar lacked a collapsible header, unlike other filters such as "Price Range". This caused UI inconsistency. Additionally, t
Original PR description
<b>Steps to reproduce:</b> 1. Go to website > Shop > Scroll to tags filter (If tags aren't visible in the sidebar, go to Sales > Configuration > Product Tags > create tags) 2. Notice that Tags filter cannot be collapsed unlike other filters 3. Observe that margins and spacing don't match other filter components <b>Issue:</b> The "Tags" filter on the website shop sidebar lacked a collapsible header, unlike other filters such as "Price Range". This caused UI inconsistency. Additionally, the margin and spacing did not align visually with other filter components. <b>Solution:</b> Applied Bootstrap collapse classes to the Tags filter to enable accordion-style toggling. Adjusted margin and structure to match the layout of other sidebar filters for visual consistency. opw-4702463 Forward-Port-Of: odoo/odoo#205709
The view `digest.res_config_settings_view_form` uses the field `restrict_template_rendering_setting` from the [mail](https://github.com/odoo/odoo/blob/2987eea19f375191250ac9306f6b9d3b831ade08/addons/mail/views/res_config_settings_views.xml#L58) module in an xpath, while it inherits the view in `base_setup`. The order of the inheritence can load the digest view before the mail view and the field in the xpath will not be found. affects many upgrades --- I confirm I have signed the CLA and r
Original PR description
The view `digest.res_config_settings_view_form` uses the field `restrict_template_rendering_setting` from the [mail](https://github.com/odoo/odoo/blob/2987eea19f375191250ac9306f6b9d3b831ade08/addons/mail/views/res_config_settings_views.xml#L58) module in an xpath, while it inherits the view in `base_setup`. The order of the inheritence can load the digest view before the mail view and the field in the xpath will not be found. affects many upgrades --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206841
Steps: - Install hr_timesheet_attendance. - Set the timezone (for both user and calendar) to Europe/Zurich. - Create Attendance records: [03/01/2025: 00:25:36, 03/01/2025: 10:25:59] - Create a Timesheet for 03/01/2025. - Open the Timesheet Attendance Report and group by day. - Check Attendance Hours and Timesheet Hours: Attendance Hours : Timesheet Hours 02/01/2025: 10 : 00 03/01/2025: 00 : 08 Issue: Attendance was shown as one day earlier
Original PR description
Steps: - Install hr_timesheet_attendance. - Set the timezone (for both user and calendar) to Europe/Zurich. - Create Attendance records: [03/01/2025: 00:25:36, 03/01/2025: 10:25:59] - Create a Timesheet for 03/01/2025. - Open the Timesheet Attendance Report and group by day. - Check Attendance Hours and Timesheet Hours: Attendance Hours : Timesheet Hours 02/01/2025: 10 : 00 03/01/2025: 00 : 08 Issue: Attendance was shown as one day earlier than expected. Reason: The check_in date was incorrect because it was using UTC instead of the employee's local time zone. Fix: Converted check_in to the employee's local time zone before extracting the date. issue:https://github.com/odoo/odoo/issues/169592 task-4320477 Forward-Port-Of: odoo/odoo#206713 Forward-Port-Of: odoo/odoo#192434
Add a placeholder for eInvoice format. task-4544834 (Part-of) Forward-Port-Of: odoo/odoo#206567 Forward-Port-Of: odoo/odoo#206498
Original PR description
Add a placeholder for eInvoice format. task-4544834 (Part-of) Forward-Port-Of: odoo/odoo#206567 Forward-Port-Of: odoo/odoo#206498
Before this commit, when the user enables the task dependencies feature globally, all basic projects (that is, non fsm ones) will get the feature. By doing that, the open tasks state will be recomputed to set `Waiting` state on tasks with blocking tasks linked to them. The problem is the compute method of the task state will also reset the state instead of keeping the one set on those open tasks when there is no blocking task linked. This commit makes sure the compute method of task state fie
Original PR description
Before this commit, when the user enables the task dependencies feature globally, all basic projects (that is, non fsm ones) will get the feature. By doing that, the open tasks state will be…
Before this commit, when the user enables the task dependencies feature globally, all basic projects (that is, non fsm ones) will get the feature. By doing that, the open tasks state will be recomputed to set `Waiting` state on tasks with blocking tasks linked to them. The problem is the compute method of the task state will also reset the state instead of keeping the one set on those open tasks when there is no blocking task linked. This commit makes sure the compute method of task state field is no longer called when the task dependencies feature changes. Instead, a inverse method is added on allow_task_dependencies field on `project.project` model to correctly update the state of the tasks linked to the project in which the task dependencies feature changed. Steps to reproduce the issue: ---------------------------- 0. install project 1. Create a project 2. Create some tasks inside that project and changes the state to some tasks 3. Enable the task dependencies feature in `Project > Configuration > Settings` menu. 4. Go back to the tasks kanban view of that project. Current Behavior: ---------------- The state of those tasks is reset to `In progress` (if those tasks did not have a state equals to `Done` or `Canceled`). Expected Behavior: ----------------- The state of those tasks should not be altered since no dependencies are added in those tasks yet. task-4487922 Forward-Port-Of: odoo/odoo#206560 Forward-Port-Of: odoo/odoo#198952
Steps to reproduce the issue: - Create a storable product “P1” - Create a Bill of Materials: - Finished product: 1 unit of P1 - Components: - 1 unit of C1 - Create a manufacturing order to produce 10 units of P1 - Confirm the MO - Split the MO into two: - This creates two new MOs, each for 5 units: - “WH-MO-001” - ”WH-MO-002” - For the first MO (WH-MO-001): - Set Quantity Produced to 1. - Validate it and choose to create a backorder. Problem: - The b
Original PR description
Steps to reproduce the issue: - Create a storable product “P1” - Create a Bill of Materials: - Finished product: 1 unit of P1 - Components: - 1 unit of C1 - Create a manufacturing order to produce 10…
Steps to reproduce the issue:
- Create a storable product “P1”
- Create a Bill of Materials:
- Finished product: 1 unit of P1
- Components:
- 1 unit of C1
- Create a manufacturing order to produce 10 units of P1
- Confirm the MO
- Split the MO into two:
- This creates two new MOs, each for 5 units: - “WH-MO-001” - ”WH-MO-002”
- For the first MO (WH-MO-001):
- Set Quantity Produced to 1.
- Validate it and choose to create a backorder.
Problem:
- The backorder is incorrectly named “WH-MO-001-003” instead of the expected WH-MO-003.
- Additionally, the original MO is renamed “WH-MO-001-001”, which is unexpected.
- However, if you perform the same steps on the second MO (WH-MO-002), the backorder is correctly named “WH-MO-003”, and the original name remains unchanged.
Root cause:
- When the original MO is first split, each resulting MO receives a backorder sequence:
- First split MO (WH-MO-001): backorder_sequence = 1
- Second split MO (WH-MO-002): backorder_sequence = 2
- When creating a backorder from an MO with backorder_sequence = 1, the following logic is triggered:
- https://github.com/odoo/odoo/blob/18.0/addons/mrp/models/mrp_production.py#L1844
- Since the condition if backorder_sequence > 1 is false for WH-MO-001:
- https://github.com/odoo/odoo/blob/18.0/addons/mrp/models/mrp_production.py#L1782
- So the name + seq_back is added:
https://github.com/odoo/odoo/blob/18.0/addons/mrp/models/mrp_production.py#L1784
opw-4686959
Forward-Port-Of: odoo/odoo#205760The text color in the input is purple and not clearly visible with the dark input background. Steps to reproduce: ------------------- * Go to edit mode. * Drag and drop a "countdown" block. * Open the date picker by clicking the "Due Date" input in the options. * Click on a date. > Observation: Why the fix: ------------ Make it visible opw-4589158 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205040
Original PR description
The text color in the input is purple and not clearly visible with the dark input background. Steps to reproduce: ------------------- * Go to edit mode. * Drag and drop a "countdown" block. * Open the date picker by clicking the "Due Date" input in the options. * Click on a date. > Observation: Why the fix: ------------ Make it visible opw-4589158 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205040
Before this fix, when a product had multiple attributes with extra prices and differing creation modes (e.g. pills with instant creation and checkboxes with never creation), the extra price of attributes created instantly (like "pills") was not taken into account in the PoS. To reproduce: - Create two attribute lines with extra prices: 1. Display = Pills (creation = instantly) 2. Display = Multi-checkbox (creation = never) - Make the product available in the PoS and select it. Only
Original PR description
Before this fix, when a product had multiple attributes with extra prices and differing creation modes (e.g. pills with instant creation and checkboxes with never creation), the extra price of attributes created instantly (like "pills") was not taken into account in the PoS. To reproduce: - Create two attribute lines with extra prices: 1. Display = Pills (creation = instantly) 2. Display = Multi-checkbox (creation = never) - Make the product available in the PoS and select it. Only the extra price from the multi-checkbox attribute was applied, leading to an incorrect total. opw-4684979 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206274
Before this commit, if the tour steps was "edit input" then "click second element dropdown", the tour was stuck and was backwarding to the "edit input" because during a moment the dropdown had only one element (the loading). Now, the loading will be taken in account to wait for the next mutation observer for the case of a dropdown TASK-ID: 4623449 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205874
Original PR description
Before this commit, if the tour steps was "edit input" then "click second element dropdown", the tour was stuck and was backwarding to the "edit input" because during a moment the dropdown had only one element (the loading). Now, the loading will be taken in account to wait for the next mutation observer for the case of a dropdown TASK-ID: 4623449 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205874
Adding a condition to match contry to CO when looking for NIT latam ID type. therwise, adding another ID type named 'NIT' for a different country causes the search to return both, resulting in a traceback. task-4318265 Forward-Port-Of: odoo/enterprise#83859 Forward-Port-Of: odoo/enterprise#81216
Original PR description
Adding a condition to match contry to CO when looking for NIT latam ID type. therwise, adding another ID type named 'NIT' for a different country causes the search to return both, resulting in a traceback. task-4318265 Forward-Port-Of: odoo/enterprise#83859 Forward-Port-Of: odoo/enterprise#81216
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. Forward-Port-Of: odoo/enterprise#83256 Forward-Port-Of: odoo/enterprise#83217
Original PR description
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. Forward-Port-Of: odoo/enterprise#83256 Forward-Port-Of: odoo/enterprise#83217
Currently, the “Unpaid” and “Late” buttons in the sale journal dashboard used the total invoice amount instead of the remaining due amount when account_3way_match was installed. Steps to reproduce: - Install account_3way_match - Create and partially pay an invoice - Go to the dashboard - The displayed amount should reflect the residual, but it shows the full amount This fix restores the expected behavior by using the same logic as the original `_get_open_sale_purchase_query` to compute
Original PR description
Currently, the “Unpaid” and “Late” buttons in the sale journal dashboard used the total invoice amount instead of the remaining due amount when account_3way_match was installed. Steps to reproduce: - Install account_3way_match - Create and partially pay an invoice - Go to the dashboard - The displayed amount should reflect the residual, but it shows the full amount This fix restores the expected behavior by using the same logic as the original `_get_open_sale_purchase_query` to compute `amount_total` and `amount_total_company`. opw-4731478 Forward-Port-Of: odoo/enterprise#83823
steps to reproduce: - set up ONSS data about the company in Payroll settings / BE L10N (where ONSS number is consisting of special characters - dots or dashes) - go to Payroll / Reporting / DMFA - create a new DMFA and generate an XML report - it should throw error saying expected `int` (since ONSS is a Char field) fix: - while performing the export, filtered the digits only from these fields task-4502689 Forward-Port-Of: odoo/enterprise#80876
Original PR description
steps to reproduce: - set up ONSS data about the company in Payroll settings / BE L10N (where ONSS number is consisting of special characters - dots or dashes) - go to Payroll / Reporting / DMFA - create a new DMFA and generate an XML report - it should throw error saying expected `int` (since ONSS is a Char field) fix: - while performing the export, filtered the digits only from these fields task-4502689 Forward-Port-Of: odoo/enterprise#80876
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question an dopen the generated PDF - All current companies show in the header and other currencies are present ### Cause: When sending to multiple partners, the action is dispatched with to cron_threads so a new `env` is created. This `env` has a key `companies` containing all companies that exist in the
Original PR description
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question an…
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question an dopen the generated PDF - All current companies show in the header and other currencies are present ### Cause: When sending to multiple partners, the action is dispatched with to cron_threads so a new `env` is created. This `env` has a key `companies` containing all companies that exist in the DB. When the `_init_options_companies` is called for the report it adds `self.env.companies` to the option ([code](https://github.com/odoo/enterprise/blob/4ef74fd9527a28616bf81c9716d6000aa25b839e/account_reports/models/account_report.py#L1276)). So in the end all companies appear on the report. ### Solution: Add 'forced_companies' in the options before calling the `cron`. The format of 'forced_companies' had to be changed to only contain ids because fields cannot be added in `send_and_print_values` as it's a JSON fields. opw-4635283 Forward-Port-Of: odoo/enterprise#83862 Forward-Port-Of: odoo/enterprise#82320
This reverts commit cbcff76a94750a6759fd72d9c952d785e603a974. Fix in community was changing all the xml files generated, whereas it should only have had an impact on the invoice report. opw-4661577 Forward-Port-Of: odoo/enterprise#83827 Forward-Port-Of: odoo/enterprise#83783
Original PR description
This reverts commit cbcff76a94750a6759fd72d9c952d785e603a974. Fix in community was changing all the xml files generated, whereas it should only have had an impact on the invoice report. opw-4661577 Forward-Port-Of: odoo/enterprise#83827 Forward-Port-Of: odoo/enterprise#83783
Steps to reproduce: - insert a pivot into a spreadsheet - add the dynamic pivot somewhere with the formula =PIVOT(1) - right click on the values and sort them - open the side panel - update anything (e.g. the domain) => the sorting is dropped. Since commit 93ffeeefe86, measures are identified with the `id` property, not the name. Task: 4746057 opw-4741934 Forward-Port-Of: odoo/enterprise#83903
Original PR description
Steps to reproduce: - insert a pivot into a spreadsheet - add the dynamic pivot somewhere with the formula =PIVOT(1) - right click on the values and sort them - open the side panel - update anything (e.g. the domain) => the sorting is dropped. Since commit 93ffeeefe86, measures are identified with the `id` property, not the name. Task: 4746057 opw-4741934 Forward-Port-Of: odoo/enterprise#83903
**Steps to reproduce:** - Install Accounting - Activate a foreign currency (e.g. EUR) - Make sure there are several rates with today rate different than others - Go to "Accounting / Configuration / Accounting / Chart of Accounts" - Add a default tax to "Expenses" account - Create an invoice: * Customer: [any] * Currency: [EUR] (i.e. the foreign currency) * Invoice Date: [a date in the past where the currency rate is different than today] * Invoice Lines: [any] - Confirm th
Original PR description
**Steps to reproduce:** - Install Accounting - Activate a foreign currency (e.g. EUR) - Make sure there are several rates with today rate different than others - Go to "Accounting / Configuration /…
**Steps to reproduce:** - Install Accounting - Activate a foreign currency (e.g. EUR) - Make sure there are several rates with today rate different than others - Go to "Accounting / Configuration / Accounting / Chart of Accounts" - Add a default tax to "Expenses" account - Create an invoice: * Customer: [any] * Currency: [EUR] (i.e. the foreign currency) * Invoice Date: [a date in the past where the currency rate is different than today] * Invoice Lines: [any] - Confirm the invoice - Go to "Accounting / Reporting / Management / Unrealized Currency Gains/Losses" - Set date filter to "Today" - If there is no adjustement to do, check if the following message is displayed: "You are using custom exchange rates. => Reset to Odoo’s Rate" If it's the case, reset to Odoo's rate (i.e. Today's rate) - Click on "Adjustement Entry" button: * Journal: Miscellaneous Operations * Expense Account: Expenses * Income Account: [any] - Create Entry **Issue:** The values (debit/credit) of the created entry are 0, which is not the case when there is no default tax on the expense account. **Cause:** "_sync_dynamic_lines" is executed on the created entry. If a default tax is set on the expense account, "_sync_tax_lines" is also executed. As only debit and credit values are set on the invoice lines of the entry (neither balance nor amount_currency), the sync method messes up with the value of debit and credit, resetting them to 0 (via multiple recompute). **Solution:** Skip invoice sync. The values computed in "Multicurrency Revaluation Wizard" should be the ones that are used. opw-4664255 Forward-Port-Of: odoo/enterprise#83570
Steps: - duplicate a worksheet template - add a field on the new template - print the original template --> error : field doesn't exist on original worksheet model Current behaviour: Duplicating a worksheet template creates a new model, but the _generate_qweb_report_template method doesn't create a new view for the new template because we copied the original one. It also removes the customizations on the original template's view New behaviour: A new view is created for the dupli
Original PR description
Steps: - duplicate a worksheet template - add a field on the new template - print the original template --> error : field doesn't exist on original worksheet model Current behaviour: Duplicating a worksheet template creates a new model, but the _generate_qweb_report_template method doesn't create a new view for the new template because we copied the original one. It also removes the customizations on the original template's view New behaviour: A new view is created for the duplicated template and remove the duplicate option from the list view, as it is already hidden in form view opw-4664600 opw-4656835 Forward-Port-Of: odoo/enterprise#83529 Forward-Port-Of: odoo/enterprise#83166
The lack of a wait on the pdf's iframe causes a race condition in `sign/static/src/components/sign_request/document_signable.js`, which *can* cause the PDFIframe's `contentDocument` to be reset in the setTimeout(() => this.initializeIframe(), 1); interval as the document ?gets reinitialised?, leading to an error in `initializeIframe`. I assumed it would be necessary to wait for the iframe's `readyState` to be `"complete"`, however after the iframe triggers I was not able to "see" th
Original PR description
The lack of a wait on the pdf's iframe causes a race condition in `sign/static/src/components/sign_request/document_signable.js`, which *can* cause the PDFIframe's `contentDocument` to be reset in the
setTimeout(() => this.initializeIframe(), 1);
interval as the document ?gets reinitialised?, leading to an error in `initializeIframe`.
I assumed it would be necessary to wait for the iframe's `readyState` to be `"complete"`, however after the iframe triggers I was not able to "see" the frame in any other `readyState`, so seems like an unnecessary complexity after all. Hopefully this doesn't come back to bite...
https://runbot.odoo.com/odoo/error/181583
Forward-Port-Of: odoo/enterprise#83937Before this commit: The technical name was not clearly visible in dark mode, making it difficult for users to read. After this commit: The technical name is now clearly visible in dark mode. Task-4680365 Forward-Port-Of: odoo/enterprise#82429
Original PR description
Before this commit: The technical name was not clearly visible in dark mode, making it difficult for users to read. After this commit: The technical name is now clearly visible in dark mode. Task-4680365 Forward-Port-Of: odoo/enterprise#82429
In this PR we add the following wage types: - Complementary LPP - Alimony Deduction - Deduction for prosecution office Forward-Port-Of: odoo/enterprise#83885
Original PR description
In this PR we add the following wage types: - Complementary LPP - Alimony Deduction - Deduction for prosecution office Forward-Port-Of: odoo/enterprise#83885
Coming From: https://github.com/odoo/enterprise/pull/69708 Forward-Port-Of: odoo/enterprise#83789
Original PR description
Coming From: https://github.com/odoo/enterprise/pull/69708 Forward-Port-Of: odoo/enterprise#83789
-- How to reproduce -- Duplicate two or more belgian employees. -- Reason -- The sdworx code check constraint was wrongly single record. -- Fix -- This commit fixes the issue by converting the check to multi records. task-4708324 Forward-Port-Of: odoo/enterprise#83852 Forward-Port-Of: odoo/enterprise#83026
Original PR description
-- How to reproduce -- Duplicate two or more belgian employees. -- Reason -- The sdworx code check constraint was wrongly single record. -- Fix -- This commit fixes the issue by converting the check to multi records. task-4708324 Forward-Port-Of: odoo/enterprise#83852 Forward-Port-Of: odoo/enterprise#83026
-- Context -- When no seller is defined on the product that is included in the approval request, you cannot generate an RFQ. Adding a seller in the product should allow creating the RFQ without re-setting the request to draft. -- Behavior before the fix -- You had to reset the request to draft before being able to generate the RFQ when a seller has been added to the product. -- Behavior after the fix -- You can. There was a missing field in the depends of the compute method for the sell
Original PR description
-- Context -- When no seller is defined on the product that is included in the approval request, you cannot generate an RFQ. Adding a seller in the product should allow creating the RFQ without re-setting the request to draft. -- Behavior before the fix -- You had to reset the request to draft before being able to generate the RFQ when a seller has been added to the product. -- Behavior after the fix -- You can. There was a missing field in the depends of the compute method for the seller ids. task-4680780 Forward-Port-Of: odoo/enterprise#82874
**Steps to reproduce:** - Install Accounting - In Bank journal settings, make sure that there's no Outstanding Payments account - Create a bill for a customer - Confirm it - Create a second bill for the same customer - Confirm it - Go to the bills list - Select the 2 created bills - Create a payment via "Pay" button: * Journal: Bank * Payment Method: Manual Payment * Group Payments: [checked] - Do not validate the payment - Go to "Accounting / Vendors / Payments" - Selec
Original PR description
**Steps to reproduce:** - Install Accounting - In Bank journal settings, make sure that there's no Outstanding Payments account - Create a bill for a customer - Confirm it - Create a second bill for…
**Steps to reproduce:** - Install Accounting - In Bank journal settings, make sure that there's no Outstanding Payments account - Create a bill for a customer - Confirm it - Create a second bill for the same customer - Confirm it - Go to the bills list - Select the 2 created bills - Create a payment via "Pay" button: * Journal: Bank * Payment Method: Manual Payment * Group Payments: [checked] - Do not validate the payment - Go to "Accounting / Vendors / Payments" - Select the created payment and create a batch - Validate the batch payment => The payment status of both bills is "In Payment" - From Accounting dashboard, go to transactions of Bank journal (reconciliation widget) - Create a new transaction for the previous customer with the amount of the batch payment - In the reconciliation widget, go to "Batch Payments" tab - Select the created batch payment - Validate to reconcile - Check the bills list **Issue:** Only one of the bills has its payment status set to "Paid", the other one staying in "In Payment" status. **Cause:** In the method that checks which account move lines are included in the batch payment, we loop on each linked move line and take the "min" between the remaining amount of the batch payment and the amount of the move line until the remaining amount reaches 0. However, for vendor bills, these amounts are negative and taking the "min" amount returns the remaining amount directly, resulting in only having 1 move line set to reconcile. opw-4595006 Forward-Port-Of: odoo/enterprise#83634
Can't create a payment for an inactive currency. So activate the currency. https://runbot.odoo.com/odoo/error/161659 Forward-Port-Of: odoo/enterprise#83812
Original PR description
Can't create a payment for an inactive currency. So activate the currency. https://runbot.odoo.com/odoo/error/161659 Forward-Port-Of: odoo/enterprise#83812
According to [last update from PGCE](https://www.boe.es/buscar/act.php?id=BOE-A-2007-19884&tn=1&p=20241221) and the accounting standards inside it: >3.º Principios contables La contabilidad de la empresa y, en especial, el registro y la valoración de los elementos de las cuentas anuales, se desarrollarán aplicando obligatoriamente los principios contables que se indican a continuación: > >1. Empresa en funcionamiento. Se considerará, salvo prueba en contrario, que la gestión de la empresa
Original PR description
According to [last update from PGCE](https://www.boe.es/buscar/act.php?id=BOE-A-2007-19884&tn=1&p=20241221) and the accounting standards inside it: >3.º Principios contables La contabilidad de la…
According to [last update from PGCE](https://www.boe.es/buscar/act.php?id=BOE-A-2007-19884&tn=1&p=20241221) and the accounting standards inside it: >3.º Principios contables La contabilidad de la empresa y, en especial, el registro y la valoración de los elementos de las cuentas anuales, se desarrollarán aplicando obligatoriamente los principios contables que se indican a continuación: > >1. Empresa en funcionamiento. Se considerará, salvo prueba en contrario, que la gestión de la empresa continuará en un futuro previsible, por lo que la aplicación de los principios y criterios contables no tiene el propósito de determinar el valor del patrimonio neto a efectos de su transmisión global o parcial, ni el importe resultante en caso de liquidación. > >En aquellos casos en que no resulte de aplicación este principio, en los términos que se determinen en las normas de desarrollo de este Plan General de Contabilidad, la empresa aplicará las normas de valoración que resulten más adecuadas para reflejar la imagen fiel de las operaciones tendentes a realizar el activo, cancelar las deudas y, en su caso, repartir el patrimonio neto resultante, debiendo suministrar en la memoria de las cuentas anuales toda la información significativa sobre los criterios aplicados. > >2. Devengo. Los efectos de las transacciones o hechos económicos se registrarán cuando ocurran, imputándose al ejercicio al que las cuentas anuales se refieran, los gastos y los ingresos que afecten al mismo, con independencia de la fecha de su pago o de su cobro. > >3. Uniformidad. Adoptado un criterio dentro de las alternativas que, en su caso, se permitan, deberá mantenerse en el tiempo y aplicarse de manera uniforme para transacciones, otros eventos y condiciones que sean similares, en tanto no se alteren los supuestos que motivaron su elección. De alterarse estos supuestos podrá modificarse el criterio adoptado en su día; en tal caso, estas circunstancias se harán constar en la memoria, indicando la incidencia cuantitativa y cualitativa de la variación sobre las cuentas anuales. > > 4. Prudencia. Se deberá ser prudente en las estimaciones y valoraciones a realizar en condiciones de incertidumbre. La prudencia no justifica que la valoración de los elementos patrimoniales no responda a la imagen fiel que deben reflejar las cuentas anuales. > > Asimismo, sin perjuicio de lo dispuesto en el artículo 38 bis del Código de Comercio, únicamente se contabilizarán los beneficios obtenidos hasta la fecha de cierre del ejercicio. Por el contrario, se deberán tener en cuenta todos los riesgos, con origen en el ejercicio o en otro anterior, tan pronto sean conocidos, incluso si sólo se conocieran entre la fecha de cierre de las cuentas anuales y la fecha en que éstas se formulen. En tales casos se dará cumplida información en la memoria, sin perjuicio de su reflejo, cuando se haya generado un pasivo y un gasto, en otros documentos integrantes de las cuentas anuales. Excepcionalmente, si los riesgos se conocieran entre la formulación y antes de la aprobación de las cuentas anuales y afectaran de forma muy significativa a la imagen fiel, las cuentas anuales deberán ser reformuladas. > > Deberán tenerse en cuenta las amortizaciones y correcciones de valor por deterioro de los activos, tanto si el ejercicio se salda con beneficio como con pérdida. > > 5. No compensación. Salvo que una norma disponga de forma expresa lo contrario, no podrán compensarse las partidas del activo y del pasivo o las de gastos e ingresos, y se valorarán separadamente los elementos integrantes de las cuentas anuales. > > 6. Importancia relativa. Se admitirá la no aplicación estricta de algunos de los principios y criterios contables cuando la importancia relativa en términos cuantitativos o cualitativos de la variación que tal hecho produzca sea escasamente significativa y, en consecuencia, no altere la expresión de la imagen fiel. Las partidas o importes cuya importancia relativa sea escasamente significativa podrán aparecer agrupados con otros de similar naturaleza o función. > > En los casos de conflicto entre principios contables, deberá prevalecer el que mejor conduzca a que las cuentas anuales expresen la imagen fiel del patrimonio, de la situación financiera y de los resultados de la empresa. For item 5, assets and liabilities, income and expenses shall not be offset, unless required or permitted by a standard. Therefore, group 55 accounts should be presented: - On the assets side if they have a debit balance. - On the liabilities side if they have a credit balance. - Without offsetting each other. @moduon MT-9820 @chklop @jco-odoo @rafaelbn Forward-Port-Of: odoo/enterprise#82976
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. 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#205606 Forward-Port-Of: odoo/odoo#205524
Original PR description
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. 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#205606 Forward-Port-Of: odoo/odoo#205524