Wednesday, April 23, 2025
28 changes · saas-17.4
Resolved issues and error corrections
The CRM onboarding tour now progresses correctly when users click the company field during quick lead creation. This prevents the guide from getting stuck and adds a clearer step to ensure a company is selected from the dropdown.
Original PR description
Purpose ======= Fix the crm_tour which was stuck on the "Write a few letters to look for a company" step in the quick create. Specification ============= This step requires the user to enter an actual character in the input. Clicking on the input and selecting a record in the dropdown isn't enough. => Making so that a click on the field is enough to get going. => Adding a step to make sure the user correctly selects a value in the dropdown and doesn't come out of the field. related PR: https://github.com/odoo/odoo/pull/158055 Task-4624497 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix just add the error code and error message for IT language. Ref: odoo/odoo#184156 Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4728595) opw-4728595
Original PR description
This fix just add the error code and error message for IT language. Ref: odoo/odoo#184156 Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4728595) opw-4728595
Task bars in the Gantt view now keep a consistent label when users extend or shorten planned work across multiple days. This avoids confusing changes between showing only the task name and showing times plus the task name, making project schedules easier to read.
Original PR description
- saas-17.2 ### Steps to reproduce: - Install project. - Enabled timesheets from configurations -> settings. - Create project. - Create a task and set a planned date: start date: 11-11-2024 10:00:00…
- saas-17.2 ### Steps to reproduce: - Install project. - Enabled timesheets from configurations -> settings. - Create project. - Create a task and set a planned date: start date: 11-11-2024 10:00:00 end date: 11-12-2024 02:00:00 - Go to task Gantt view, and you will see the shift on your allocated date having name 10:00 AM — 02:00 PM - your task name. - Now modify the pill length from the right side by 12 hr., Do it 2-3 times. You will observe that the name of the pill changes. The name changes from '10:00 AM—02:00 PM - your task name' to 'your task name' or vice-versa. ### Issue: Modify the pill length, resulting in a change of the pill name. ### Cause: Due to the change in logic, to display start and end time when the shift is only displayed in 1 day. But it is not checking that the planned date is for one day or more days. ### Solution: Add logic to check that the planned date is for 1 day or more. So, the start and end time will display only when the planned date is for 1 day. task-3969988
The technical name shown in Odoo Studio is now easier to read when using dark mode. This removes a small visibility issue that could make field details harder for users to identify.
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
This update adjusts Canadian CPA005 payment tests so they can create payments using a currency that is active. It helps prevent false test failures and supports smoother validation of payment access rules.
Original PR description
Can't create a payment for an inactive currency. So activate the currency. https://runbot.odoo.com/odoo/error/161659
The Trial Balance report now keeps its total line visible even when zero-value initial or ending balance columns are configured to appear blank. This prevents users from seeing an incorrectly blank total row and improves confidence in financial report readability.
Original PR description
Open Trial Balance report in debug mode Access report options In Column tab, check 'Blank if Zero' for all columns Go back to report Issue: If Initial/End Balance columns are blank, also the total line will be blank. This occurs since f3c230817087d452f810b8473f813add0ead30d0 were the formatting of values has been delayed to improve performances but the exception on 'blank_if_zero' was lost opw-4624006
Miscellaneous changes
In Romania, when sending multiple invoices to e-Factura, if one invoice is rejected, the Send & Print wizard will raise a UserError at https://github.com/odoo/odoo/blob/9416ca8cb63fc53a862aa8533dfa60ba33506191/addons/account/wizard/account_move_send.py#L461 This causes the transaction to get rolled back, and any successfully-sent invoices to be lost. Solution: Commit after each invoice is sent. opw-4630496 Forward-Port-Of: odoo/odoo#205593
Original PR description
In Romania, when sending multiple invoices to e-Factura, if one invoice is rejected, the Send & Print wizard will raise a UserError at https://github.com/odoo/odoo/blob/9416ca8cb63fc53a862aa8533dfa60ba33506191/addons/account/wizard/account_move_send.py#L461 This causes the transaction to get rolled back, and any successfully-sent invoices to be lost. Solution: Commit after each invoice is sent. opw-4630496 Forward-Port-Of: odoo/odoo#205593
Under the current legislation the account 466 must be in the report "Balance Abreviado" https://www.boe.es/buscar/act.php?id=BOE-A-2007-19884&tn=1&p=20210130 https://www.boe.es/buscar/act.php?id=BOE-A-2011-18458 Manual fwport of https://github.com/odoo/odoo/pull/202100 Forward-Port-Of: odoo/odoo#205666
Original PR description
Under the current legislation the account 466 must be in the report "Balance Abreviado" https://www.boe.es/buscar/act.php?id=BOE-A-2007-19884&tn=1&p=20210130 https://www.boe.es/buscar/act.php?id=BOE-A-2011-18458 Manual fwport of https://github.com/odoo/odoo/pull/202100 Forward-Port-Of: odoo/odoo#205666
Before this commit, `couponPointChanges` was not properly remapped, which led to am error when refreshing the browser after applying a reward. Steps to reproduce: 1. Create a promotion program with a free product for orders over $100. 2. In PoS, create an order meeting the $100 and apply the reward. 3. Validate the order and start a new one. 4. Again, make an order over $100 and apply the reward. 5. Refresh the browser at this point. => You will encounter the following error: `Cann
Original PR description
Before this commit, `couponPointChanges` was not properly remapped, which led to am error when refreshing the browser after applying a reward. Steps to reproduce: 1. Create a promotion program with a free product for orders over $100. 2. In PoS, create an order meeting the $100 and apply the reward. 3. Validate the order and start a new one. 4. Again, make an order over $100 and apply the reward. 5. Refresh the browser at this point. => You will encounter the following error: `Cannot read properties of undefined (reading 'appliedRules')` opw-4644333 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202970
The current implementation of deepCopy only supports fully JSON stringifiable objects but its behaviour was modified in later versions to support `undefined` as well. This commit backports that change as it does not break the current behaviour and reduces the chances of an unfortunate error in bugfixes. 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 guidel
Original PR description
The current implementation of deepCopy only supports fully JSON stringifiable objects but its behaviour was modified in later versions to support `undefined` as well. This commit backports that change as it does not break the current behaviour and reduces the chances of an unfortunate error in bugfixes. 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#206609
**Description of the issue/feature this PR addresses:** Introduce a hook method to be able to override the ProductConfiguratorDialog props, as there's no other way to extend it otherwise. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205455
Original PR description
**Description of the issue/feature this PR addresses:** Introduce a hook method to be able to override the ProductConfiguratorDialog props, as there's no other way to extend it otherwise. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205455
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
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
**Current behavior:** With anglo saxon accounting and real-time valuation, purchasing a kit product with a BoM that has components whose costs add up to the exact price of the kit product and that is invoiced on ordered qty and has avg costing, then billing before receiving will prevent the reception from being validate-able. **Expected behavior:** Can validate **Steps to reproduce:** 1. Create a kit product with avg costing, invoiced on ordered qty, and a BoM with 2 components tha
Original PR description
**Current behavior:** With anglo saxon accounting and real-time valuation, purchasing a kit product with a BoM that has components whose costs add up to the exact price of the kit product and that is…
**Current behavior:** With anglo saxon accounting and real-time valuation, purchasing a kit product with a BoM that has components whose costs add up to the exact price of the kit product and that is invoiced on ordered qty and has avg costing, then billing before receiving will prevent the reception from being validate-able. **Expected behavior:** Can validate **Steps to reproduce:** 1. Create a kit product with avg costing, invoiced on ordered qty, and a BoM with 2 components that have a cumulative cost equalling that of the final kit product 2. Make a purchase for it, invoice -> post 3. Try to validate the receipt -> can't due to attempted re-reconicilation **Cause of the issue:** When validating the receipt, we end up here: https://github.com/odoo/odoo/blob/c9ea75efb8e260d6bea5b777f4f950f106ffcfa5/addons/stock_account/models/stock_valuation_layer.py#L81-L90 And attempt to reconcile both the original kit product AML from corresponding to the purchase line as well as the AML for the component in the stock input account. But we only will capture 1 exploded component AML in each loop iteration, so the original kit product AML will not actually be set `reconciled = True`, so we will also add it to be reconciled again: https://github.com/odoo/odoo/blob/c9ea75efb8e260d6bea5b777f4f950f106ffcfa5/addons/stock_account/models/stock_valuation_layer.py#L90 The same thing happens in subsequent calls to `_stock_account_anglo_saxon_reconcile_valuation()`, except on a final call for the last component line- if the components' cumulative cost aligns with the total cost of the kit product (which it should) then the reconciliation attempt will succeed. Then here: https://github.com/odoo/odoo/blob/c9ea75efb8e260d6bea5b777f4f950f106ffcfa5/addons/stock_account/models/stock_valuation_layer.py#L92 `reconcile()` is called on the already-reconciled AML which will cause the re-reconiliation error. **Fix** Reconcile all the resulting kit AMLs (component AMLs + actual kit product AML from the bill) together. opw-4668004 Forward-Port-Of: odoo/odoo#205401
This commit remove the readonly on the tax_ids field, in the expense_split wizard. task-4703493 Forward-Port-Of: odoo/odoo#205940
Original PR description
This commit remove the readonly on the tax_ids field, in the expense_split wizard. task-4703493 Forward-Port-Of: odoo/odoo#205940
Purpose: ------- Following the changes in [1], discarding the changes in a form view when a properties field has a change does not reset the field to its initial value (UI only issue: the change is not applied when reloading the view). This issue arises because after the changes in [1], the properties are not deep copied anymore. Therefore, when a property is updated, the value inside the relational model's record data is updated. The issue is fixed by returning a copy of the properties
Original PR description
Purpose: ------- Following the changes in [1], discarding the changes in a form view when a properties field has a change does not reset the field to its initial value (UI only issue: the change is not applied when reloading the view). This issue arises because after the changes in [1], the properties are not deep copied anymore. Therefore, when a property is updated, the value inside the relational model's record data is updated. The issue is fixed by returning a copy of the properties values again. [1]: https://github.com/odoo/odoo/commit/8723f020c3587a900c811b8cc23f53fe34b98df3#diff-89ec9296feb48614f91829b8b732dca614359831967fa65a2126d6fe68c84450 Forward-Port-Of: odoo/odoo#206824
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#205760There was an issue in the `PropertyDefinition:state.propertyDefinition`, which could sometimes not be updated properly, resulting in a traceback after multiple property definition changes. ### How to reproduce: - Open a CRM Lead form view and add a property of type `tags`. - Save and fully reload the form view. - Change the property type to `separator` - Change the property name to another value. - Click outside the popover to close it. => Traceback ``` Cannot read properties of und
Original PR description
There was an issue in the `PropertyDefinition:state.propertyDefinition`, which could sometimes not be updated properly, resulting in a traceback after multiple property definition changes. ### How to…
There was an issue in the `PropertyDefinition:state.propertyDefinition`, which could sometimes not be updated properly, resulting in a traceback after multiple property definition changes. ### How to reproduce: - Open a CRM Lead form view and add a property of type `tags`. - Save and fully reload the form view. - Change the property type to `separator` - Change the property name to another value. - Click outside the popover to close it. => Traceback ``` Cannot read properties of undefined (reading 'type') at PropertiesField.onPropertyDefinitionChange ``` ### Technical explanation: The `propertyDefinition` argument given to `onChange` props of `PropertyDefinition` component is expected to be modified in place, since it is used as the `propertyDefinition` state value. `pick` function creates a shallow copy, therefore using it on `propertyDefinition` in `PropertiesField:onPropertyDefinitionChange` and applying changes on that copy (i.e. in `_regeneratePropertyName`) will prevent these changes to be registered in the `PropertyDefinition:state.propertyDefinition`, resulting in inconsistent values with `PropertyField:propertyList`, which would manifest at the next definition change, since `_getPropertyIndex` would not be able to find the index of the now obsolete `propertyDefinition`. task-4743860 Forward-Port-Of: odoo/odoo#206871
### Description of the issue/feature this PR addresses: - The `_t` call was used with non-static string (title), which breaks translation extraction since only static strings can be exported to .pot files. - Additionally, the title was directly injected into the DOM without escaping posing an XSS (Cross-Site Scripting) risk. ### Desired behavior after PR is merged: - The `_t` call is removed, as title passed to `_getBannerCommand` is already a translated static string. The value is n
Original PR description
### Description of the issue/feature this PR addresses: - The `_t` call was used with non-static string (title), which breaks translation extraction since only static strings can be exported to .pot files. - Additionally, the title was directly injected into the DOM without escaping posing an XSS (Cross-Site Scripting) risk. ### Desired behavior after PR is merged: - The `_t` call is removed, as title passed to `_getBannerCommand` is already a translated static string. The value is now also passed through `htmlEscape()` before being used in the aria-label attribute, preventing any injected HTML from being rendered or executed. task-4639885 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205322
Fixes an issue in `test_pos_js` when executed in a database without demo data, where missing payment methods cause test failures. This commit adds the necessary payment methods and a required product to the configuration, ensuring proper test execution. Runbot Error: 135208 Forward-Port-Of: odoo/odoo#199913
Original PR description
Fixes an issue in `test_pos_js` when executed in a database without demo data, where missing payment methods cause test failures. This commit adds the necessary payment methods and a required product to the configuration, ensuring proper test execution. Runbot Error: 135208 Forward-Port-Of: odoo/odoo#199913
…ne with tax - Open the bank rec widget - Set a tax on a line - Change the currency to one that is not the journal one nor the transaction one => Traceback '_prepare_counterpart_amounts_using_st_line_rate' wasn't managing this case. opw-4526096 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206848
Original PR description
…ne with tax - Open the bank rec widget - Set a tax on a line - Change the currency to one that is not the journal one nor the transaction one => Traceback '_prepare_counterpart_amounts_using_st_line_rate' wasn't managing this case. opw-4526096 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206848
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
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
…n manual line with tax - Open the bank rec widget - Set a tax on a line - Change the currency to one that is not the journal one nor the transaction one => Traceback '_prepare_counterpart_amounts_using_st_line_rate' wasn't managing this case. opw-4526096 Forward-Port-Of: odoo/enterprise#83809
Original PR description
…n manual line with tax - Open the bank rec widget - Set a tax on a line - Change the currency to one that is not the journal one nor the transaction one => Traceback '_prepare_counterpart_amounts_using_st_line_rate' wasn't managing this case. opw-4526096 Forward-Port-Of: odoo/enterprise#83809
Most tests of the module need to create a sale order, which requires the `group_sale_salesman` at least. Set this group. https://runbot.odoo.com/odoo/error/163649 Forward-Port-Of: odoo/enterprise#83802
Original PR description
Most tests of the module need to create a sale order, which requires the `group_sale_salesman` at least. Set this group. https://runbot.odoo.com/odoo/error/163649 Forward-Port-Of: odoo/enterprise#83802
- Adding 'invoice_received' as an accepted state in account_move.py -> _compute_l10n_mx_edi_cfdi_state_and_attachment to enable SAT status display on vendor bills in 17.0, making SAT status no longer remain None. - Making adjustments to functions updating SAT status related fields for vendor bills. - Adding a test for SAT status for creating and cancelling vendor bills. The change necessary to display 'Update SAT' button was already implemented in 17.0 in https://github.com/odoo/enterpr
Original PR description
- Adding 'invoice_received' as an accepted state in account_move.py -> _compute_l10n_mx_edi_cfdi_state_and_attachment to enable SAT status display on vendor bills in 17.0, making SAT status no longer remain None. - Making adjustments to functions updating SAT status related fields for vendor bills. - Adding a test for SAT status for creating and cancelling vendor bills. The change necessary to display 'Update SAT' button was already implemented in 17.0 in https://github.com/odoo/enterprise/commit/931d7b199f1183acfbb42325025a6b62b2e73de1 but not forward ported yet. task-4368532 Forward-Port-Of: odoo/enterprise#80201
The UAN, PAN and ESIC number fields on the IN employee have a unique constraint. However, they are not set to not being copied upon record duplication, which would cause duplication impossible. This PR fixes the issue by not copying the value of those field upon duplication. task-4708324 Forward-Port-Of: odoo/enterprise#83029
Original PR description
The UAN, PAN and ESIC number fields on the IN employee have a unique constraint. However, they are not set to not being copied upon record duplication, which would cause duplication impossible. This PR fixes the issue by not copying the value of those field upon duplication. task-4708324 Forward-Port-Of: odoo/enterprise#83029
-- 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#83800 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#83800 Forward-Port-Of: odoo/enterprise#83026
Under the current legislation the account 466 must be in the report "Balance Abreviado" https://www.boe.es/buscar/act.php?id=BOE-A-2007-19884&tn=1&p=20210130 https://www.boe.es/buscar/act.php?id=BOE-A-2011-18458 Manual fwport of https://github.com/odoo/enterprise/pull/80749 Forward-Port-Of: odoo/enterprise#83285
Original PR description
Under the current legislation the account 466 must be in the report "Balance Abreviado" https://www.boe.es/buscar/act.php?id=BOE-A-2007-19884&tn=1&p=20210130 https://www.boe.es/buscar/act.php?id=BOE-A-2011-18458 Manual fwport of https://github.com/odoo/enterprise/pull/80749 Forward-Port-Of: odoo/enterprise#83285