Wednesday, July 3, 2024
53 changes · saas-17.3
Enhancements to existing features
Partner listings now display the number of references before the company description. This gives visitors a quick signal of each partner’s experience and credibility while browsing.
Original PR description
Before this commit, we don't display the number of reference. Now we show it before the company description.
Resolved issues and error corrections
Event pages now provide more accurate structured information for search engines, while non-event items such as sponsors and talks are no longer incorrectly marked as events. This should reduce warnings in Google Search Console and improve how event content is understood in search results.
Original PR description
Remove schema event from some template: - a sponsor, a track, .. is not an event. We add startDate, endDate, eventStatus, eventAttendanceMode, image ... missing values and fix the organization/location/address structure. After this commit we hope to have less warning into the GSC. Tested with https://search.google.com/test/rich-results
Miscellaneous changes
Currently a country code check on SOs may fail in case there is no country code. After this commit the check will return `False` in case there is no country code. (no task) see e.g.: https://runbot.odoo.com/runbot/build/64900406 Forward-Port-Of: odoo/odoo#171735
Original PR description
Currently a country code check on SOs may fail in case there is no country code. After this commit the check will return `False` in case there is no country code. (no task) see e.g.: https://runbot.odoo.com/runbot/build/64900406 Forward-Port-Of: odoo/odoo#171735
This update corrects how duplicate or conflicting saved filters are prevented in the base system. It ensures the intended validation rule is actually applied, reducing the chance of inconsistent saved filter data.
Original PR description
The constraint added by f983703dfa3c5102fa818523ae419a70cc4b5230 was shadowed by the existing constraint. 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
Fixes an issue where duplicating multiple projects at once could fail with an error. This helps teams copy project templates or existing projects in bulk more reliably without interruption.
Original PR description
'self' could be a recordset, in which case accessing the 'active' field results in ValueError: too many values to unpack. We then need to make the check individually for each copied project. task-4008123 version-17.3 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This commit odoo/odoo@af46b928a18da8e6276c107c5ed07cfd9e87d1bf introduced a fix to ensure submenu pages uniqueness. An issue arises when manual submenu are created and don't have a view_id set. To avoid this issue, we now fallback on the initial page receives if no view is found. Forward-Port-Of: odoo/odoo#171556 Forward-Port-Of: odoo/odoo#171391
Original PR description
This commit odoo/odoo@af46b928a18da8e6276c107c5ed07cfd9e87d1bf introduced a fix to ensure submenu pages uniqueness. An issue arises when manual submenu are created and don't have a view_id set. To avoid this issue, we now fallback on the initial page receives if no view is found. Forward-Port-Of: odoo/odoo#171556 Forward-Port-Of: odoo/odoo#171391
Description of the issue/feature this PR addresses: ------------------- Auto-cancelling Time Offs when editing public holidays was added in Jun 2022 ([see PR](https://github.com/odoo/odoo/pull/81225)) , but the cancellation of Time Offs wasn't updated to also remove the link to timesheets. If the user attempts to manually delete a timesheet linked to a Time Off (`holiday_id` in `hr.leave`), they will be asked to cancel the Time Off which by this point had already been auto-cancelled, and a
Original PR description
Description of the issue/feature this PR addresses: ------------------- Auto-cancelling Time Offs when editing public holidays was added in Jun 2022 ([see…
Description of the issue/feature this PR addresses: ------------------- Auto-cancelling Time Offs when editing public holidays was added in Jun 2022 ([see PR](https://github.com/odoo/odoo/pull/81225)) , but the cancellation of Time Offs wasn't updated to also remove the link to timesheets. If the user attempts to manually delete a timesheet linked to a Time Off (`holiday_id` in `hr.leave`), they will be asked to cancel the Time Off which by this point had already been auto-cancelled, and as long as the link exists (regardless of cancellation) the timesheet cannot be deleted from the user frontend. This PR adds an override call to unlink the timesheets before the leave (the inital validated timeoff) is force canceled. Current behavior before PR: ------------------- Steps to reproduce: 1. Create and validate an arbitrary Time Off, checking that it also creates a timesheet entry. 2. Create a new public holiday spanning the entire duration of the Time Off created in (1) 3. Attempt to delete the timesheet entry created in (1), if it is not already deleted. Although you will be asked to cancel the timeoff first, that is not possible because the timeoff will be auto-cancelled by this point, making the deletion of the timesheet impossible. Desired behavior after PR is merged: ------------------- At step 3, user should be able to delete the timesheet associated to the timeoff. Task-3697074 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168223 Forward-Port-Of: odoo/odoo#154321
SDI does not accept negative lines. But people use it to define flat global discount. We reuse the logic from l10n_mx_edi, so we move it to account. It will now try to create a flat discount for other lines that have the same tax. [Task link](https://www.odoo.com/odoo/project.task/3943357) task-3943357 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168939
Original PR description
SDI does not accept negative lines. But people use it to define flat global discount. We reuse the logic from l10n_mx_edi, so we move it to account. It will now try to create a flat discount for other lines that have the same tax. [Task link](https://www.odoo.com/odoo/project.task/3943357) task-3943357 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168939
Forward-Port-Of: odoo/odoo#171467
Original PR description
Forward-Port-Of: odoo/odoo#171467
Add a domain so deprecated accounts aren't suggested in expenses. task-3974053 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171557 Forward-Port-Of: odoo/odoo#168704
Original PR description
Add a domain so deprecated accounts aren't suggested in expenses. task-3974053 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171557 Forward-Port-Of: odoo/odoo#168704
### Steps to reproduce the issue: 1. Create two Sale Orders with Service Products based on Timesheets 2. Select both Sale Orders in the List view and click on "Create Invoices" 3. Uncheck "Consolidated Billing" and Create Draft Invoice 4. You only create one Invoice, doing the same steps with Storable Products creates two ### Explanation: `sale.order._create_invoices` can receive a `grouped` boolean argument that will determine whether to create one joint Invoice or multiple ones. Wh
Original PR description
### Steps to reproduce the issue: 1. Create two Sale Orders with Service Products based on Timesheets 2. Select both Sale Orders in the List view and click on "Create Invoices" 3. Uncheck "Consolidated Billing" and Create Draft Invoice 4. You only create one Invoice, doing the same steps with Storable Products creates two ### Explanation: `sale.order._create_invoices` can receive a `grouped` boolean argument that will determine whether to create one joint Invoice or multiple ones. When a Service Product based on Timesheets is being evaluated to create an invoice, the call to `sale.order._create_invoices` is missing this `grouped` argument. ### Suggested fix: Adding a `grouped` argument fixes the issue. opw-3915213 Forward-Port-Of: odoo/odoo#171569 Forward-Port-Of: odoo/odoo#170584
This commit addresses an issue where events removed due to changes in their recurrence rules from Google, and those cancelled separately on Google, could be attempted to be cancelled twice in Odoo. opw-3997021 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171240
Original PR description
This commit addresses an issue where events removed due to changes in their recurrence rules from Google, and those cancelled separately on Google, could be attempted to be cancelled twice in Odoo. opw-3997021 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171240
same as: https://github.com/odoo/odoo/pull/159321 opw-3786308 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170972 Forward-Port-Of: odoo/odoo#170807
Original PR description
same as: https://github.com/odoo/odoo/pull/159321 opw-3786308 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170972 Forward-Port-Of: odoo/odoo#170807
The checksum flag does not exists in older Docker versions. Forward-Port-Of: odoo/odoo#171627
Original PR description
The checksum flag does not exists in older Docker versions. Forward-Port-Of: odoo/odoo#171627
## Pull Request HOOT (PRHOOT) - part 19 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4: https://github.com/odoo/odoo/pull/153203 Part 5: https://github.com/odoo/odoo/pull/153425 Part 6: https://github.com/odoo/odoo/pull/153700 Part 7: https://github.com/odoo/odoo/pull/154054 Part 8: https://github.com/odoo/odoo/pull/154579 Part 9: https://github.com/odoo/odoo/pull/155073 Part 10
Original PR description
## Pull Request HOOT (PRHOOT) - part 19 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4:…
## Pull Request HOOT (PRHOOT) - part 19 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4: https://github.com/odoo/odoo/pull/153203 Part 5: https://github.com/odoo/odoo/pull/153425 Part 6: https://github.com/odoo/odoo/pull/153700 Part 7: https://github.com/odoo/odoo/pull/154054 Part 8: https://github.com/odoo/odoo/pull/154579 Part 9: https://github.com/odoo/odoo/pull/155073 Part 10: https://github.com/odoo/odoo/pull/155639 Part 11: https://github.com/odoo/odoo/pull/156255 / https://github.com/odoo/enterprise/pull/58135 Part 12: https://github.com/odoo/odoo/pull/156869 Part 13: https://github.com/odoo/odoo/pull/158384 / https://github.com/odoo/enterprise/pull/59019 Part 14: https://github.com/odoo/odoo/pull/158916 Part 15: https://github.com/odoo/odoo/pull/160292 / https://github.com/odoo/enterprise/pull/59971 Part 15.5: https://github.com/odoo/odoo/pull/166463 Part 16: https://github.com/odoo/odoo/pull/166311 Part 17: https://github.com/odoo/odoo/pull/168328 Part 18: https://github.com/odoo/odoo/pull/171004 / https://github.com/odoo/enterprise/pull/65657 Enterprise: https://github.com/odoo/enterprise/pull/65767 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171242
_compute_contract_reminder is reading 'fleet.vehicle.log.contract' records with null expiration_date, later expiration_date is compared with a date without checking its validity. expiration_date can be null according to this: https://github.com/odoo/odoo/blob/saas-17.2/addons/fleet/models/fleet_vehicle.py#L261 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
Original PR description
_compute_contract_reminder is reading 'fleet.vehicle.log.contract' records with null expiration_date, later expiration_date is compared with a date without checking its validity. expiration_date can be null according to this: https://github.com/odoo/odoo/blob/saas-17.2/addons/fleet/models/fleet_vehicle.py#L261 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#169838
When the grid mode was added in commit [1], the "Padding" grid option was impacting all the grid items at the same time. This was not looking good in the "Masonry" snippet, because the images would have the same padding as the text grid items, while it would look better if they could take the whole space. The padding was therefore forced to 0 px for this snippet images (see commit [2]), preventing this option from having an impact on them. However, the "Padding" option was improved in commit
Original PR description
When the grid mode was added in commit [1], the "Padding" grid option was impacting all the grid items at the same time. This was not looking good in the "Masonry" snippet, because the images would…
When the grid mode was added in commit [1], the "Padding" grid option was impacting all the grid items at the same time. This was not looking good in the "Masonry" snippet, because the images would have the same padding as the text grid items, while it would look better if they could take the whole space. The padding was therefore forced to 0 px for this snippet images (see commit [2]), preventing this option from having an impact on them. However, the "Padding" option was improved in commit [3], allowing the padding to be set on the grid items individually. There is therefore no need to block this option for the "Masonry" images anymore. This commit removes the CSS rules preventing the "Padding" option from being applied on "Masonry" images. Note that the default padding is still set to 0 px, as it looks better, but it can now be modified with the option. Also note that the CSS rule about not showing the padding highlights was not working, as it was forgotten and not adapted when doing commit [3]. [1]: https://github.com/odoo/odoo/commit/cc406afcea7bf5846233a9f97a4a8ac5f618f3ec [2]: https://github.com/odoo/odoo/commit/85b352af319edec84407f2046cf795b4e5503460 [3]: https://github.com/odoo/odoo/commit/11418cc6f0afcc8e14869f4f38ae0d6d462ac712 task-3970022 Forward-Port-Of: odoo/odoo#168013
Problem: When a user creates an automated action to update a float type field to a value, the value does not get converted into a float, and a TypeError occurs. Purpose: Typecast the str value into a float, so no traceback error occurs. Steps to Reproduce on Runbot: 1. Install base_automation, CRM 2. Create an automated action: - Model: Lead/Opportunity - Trigger: On update - Trigger fields: Stage(crm.lead) - Action to do: Update the record - Data to write: {probability(crm.lead), v
Original PR description
Problem: When a user creates an automated action to update a float type field to a value, the value does not get converted into a float, and a TypeError occurs.
Purpose: Typecast the str value into a float, so no traceback error occurs.
Steps to Reproduce on Runbot:
1. Install base_automation, CRM
2. Create an automated action:
- Model: Lead/Opportunity
- Trigger: On update
- Trigger fields: Stage(crm.lead)
- Action to do: Update the record
- Data to write: {probability(crm.lead), value,20}
3. change the stage of a crm opportunity
4. Traceback error occurs TypeError: '>=' not supported between instances of 'str' and 'int'
opw-3962939
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#171311
Forward-Port-Of: odoo/odoo#167918Steps to reproduce: ------------------- - Install `Project` module (for test purpose) - Open any project and create a task - Post a message with multiple attachments - Select "Download Files" in the message options Issue: ------ Traceback Cause: ------ Calling directly the route without starting with `/`. The issue started since the following commit [1] because we changed how the URLs are generated; Before: `localhost/web#id=55&...` After: `localhost/odoo/project/5/tasks
Original PR description
Steps to reproduce: ------------------- - Install `Project` module (for test purpose) - Open any project and create a task - Post a message with multiple attachments - Select "Download Files" in the message options Issue: ------ Traceback Cause: ------ Calling directly the route without starting with `/`. The issue started since the following commit [1] because we changed how the URLs are generated; Before: `localhost/web#id=55&...` After: `localhost/odoo/project/5/tasks/55` With these changes, since the download URL don't start with `/`, the browser will try to download the file from the current URL who, combined with the download URL, is not a real route. [1] https://github.com/odoo/odoo/commit/c63d14a0485a553b74a8457aee158384e9ae6d3f Solution: --------- Add `/` at the beginning of the download URL. opw-4009021 Forward-Port-Of: odoo/odoo#171005
Before this commit, drag-and-drop functionality for groups/records in the kanban view did not work properly if the user lacked write access. Steps to Reproduce: - Log in to Odoo as Marc Demo. - Open the Project module. - Attempt to drag and drop any group/record in the kanban view. Observed Behavior: The group in the kanban view does not reset to its original position if the user lacks the right to reorder the groups/records, rendering the group/record immovable. Expected Behavior
Original PR description
Before this commit, drag-and-drop functionality for groups/records in the kanban view did not work properly if the user lacked write access. Steps to Reproduce: - Log in to Odoo as Marc Demo. - Open the Project module. - Attempt to drag and drop any group/record in the kanban view. Observed Behavior: The group in the kanban view does not reset to its original position if the user lacks the right to reorder the groups/records, rendering the group/record immovable. Expected Behavior: The group in the kanban view should reset to its original position if the user lacks the right to reorder the groups/records. After this commit, drag-and-drop functionality for groups/records in the kanban view now works properly, even if the user does not have write access. Task ID: 3865617 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#166881 Forward-Port-Of: odoo/odoo#164879
Before this PR, a click on an internal link would not trigger the loadState if the click was not directly on the `a` element. This is because the children of `a` don't have a `href` element. This PR fixes the issue by using the closest `a` as a reference for the `href`. Forward-Port-Of: odoo/odoo#171554
Original PR description
Before this PR, a click on an internal link would not trigger the loadState if the click was not directly on the `a` element. This is because the children of `a` don't have a `href` element. This PR fixes the issue by using the closest `a` as a reference for the `href`. Forward-Port-Of: odoo/odoo#171554
Versions -------- - 15.0 - 16.0 - 17.0 - saas-17.1 - saas-17.2 - saas-17.3 Issue ----- Commit 9426ee54b927 introduced the \uFEFF character to web_editor as a zero-width non-breaking whitespace. When this gets added to a HTML node, and processed for translation, it throws an "empty document" error. Cause ----- When passed to the `get_text_content` function, the call to `html.fromstring('\uFEFF').text_content()` throws an error. \uFEFF is not technically classified as whitespace
Original PR description
Versions
--------
- 15.0
- 16.0
- 17.0
- saas-17.1
- saas-17.2
- saas-17.3
Issue
-----
Commit 9426ee54b927 introduced the \uFEFF character to web_editor as a zero-width non-breaking whitespace. When this gets added to a HTML node, and processed for translation, it throws an "empty document" error.
Cause
-----
When passed to the `get_text_content` function, the call to `html.fromstring('\uFEFF').text_content()` throws an error. \uFEFF is not technically classified as whitespace, so the `nonspace` function which attempts to prevent processing empty documents doesn't catch it.
Solution
--------
Instead of the `isspace` method, use a regex which matches on all whitespace as well as \uFEFF.
To be applied on stable versions while the origins of stray ZWNBSPs get tackled on master.
opw-3957259
Forward-Port-Of: odoo/odoo#171578
Forward-Port-Of: odoo/odoo#169122The `isVisible` function did not consider those as visible. This had the side effect that they would be removed when they were the only child of a link since we remove links that do not have visible content. Steps to reproduce: - Go to Email Templates in debug mode - Open the code view and add `<a href="#"><t t-out="object.name"></t></a>` - Save - Notice that the link and the t-out have been lost opw-3990415 Forward-Port-Of: odoo/odoo#171369 Forward-Port-Of: odoo/odoo#171212
Original PR description
The `isVisible` function did not consider those as visible. This had the side effect that they would be removed when they were the only child of a link since we remove links that do not have visible content. Steps to reproduce: - Go to Email Templates in debug mode - Open the code view and add `<a href="#"><t t-out="object.name"></t></a>` - Save - Notice that the link and the t-out have been lost opw-3990415 Forward-Port-Of: odoo/odoo#171369 Forward-Port-Of: odoo/odoo#171212
Problem: For an Italian public company, when sending an invoice there is no warning triggered when the field "Origin Document Type" is empty Steps to reproduce: - Install "Contacts" and "Accounting" apps - Create an Italian company and set its fiscal localization - Create a new Italian contact and fill out the "Destination Code" with a six-digit code - Create an invoice for this contact, in the "Electronic Invoicing" tab, leave the field "Origin Document Type" empty - Confirm the invoic
Original PR description
Problem: For an Italian public company, when sending an invoice there is no warning triggered when the field "Origin Document Type" is empty Steps to reproduce: - Install "Contacts" and "Accounting"…
Problem: For an Italian public company, when sending an invoice there is no warning triggered when the field "Origin Document Type" is empty Steps to reproduce: - Install "Contacts" and "Accounting" apps - Create an Italian company and set its fiscal localization - Create a new Italian contact and fill out the "Destination Code" with a six-digit code - Create an invoice for this contact, in the "Electronic Invoicing" tab, leave the field "Origin Document Type" empty - Confirm the invoice and click on "Send & Print", there is no warning saying that the field "Origin Document Type" must be filled out Cause: Errors in the conditions Note: Modification in the get_records_action because self.id returns an id of type NewId which raise an error (see below) in this fix workflow because it is called in an onchange function. self.ids[0] returns an id of type int Error raised: TypeError: Object of type NewId is not JSON serializable Steps to reproduce: - Do the 4 first steps as above - Create a second invoice with another customer which is not a public italian administration (can be from another country) - Select the invoices and click on "Send & Print" in the "Actions" button opw-3844664 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162776
Steps to reproduce the bug: - Create a storable product “P1” with BoM - Operation: OP1, OP2 - OP2 blocked by OP1 - Navigate to Mrp > Configuration > Operations - Select OP1 and select another BoM - Return to the BoM of “P1” Problem: The OP2 is still linked to OP1, And a traceback when attempting to duplicate the BoM. Solution: Remove the link between OP2 and OP1 opw-3948817 Forward-Port-Of: odoo/odoo#171185 Forward-Port-Of: odoo/odoo#169417
Original PR description
Steps to reproduce the bug: - Create a storable product “P1” with BoM - Operation: OP1, OP2 - OP2 blocked by OP1 - Navigate to Mrp > Configuration > Operations - Select OP1 and select another BoM - Return to the BoM of “P1” Problem: The OP2 is still linked to OP1, And a traceback when attempting to duplicate the BoM. Solution: Remove the link between OP2 and OP1 opw-3948817 Forward-Port-Of: odoo/odoo#171185 Forward-Port-Of: odoo/odoo#169417
**Steps to reproduce the bug:** - Enable multi-step routes in the general settings. - Go to the warehouse settings: - Select 3 steps for Outgoing Shipments. - Create a storable product “P1”. - Create a sales order with the following details: - Customer: Azure Interior - Product: 3 units of P1 - Confirm the sales order - Go to the pick picking - Set the quantity to 1 unit - Validate the pick and create a backorder - Go to the pack step and validate it - Return to the
Original PR description
**Steps to reproduce the bug:** - Enable multi-step routes in the general settings. - Go to the warehouse settings: - Select 3 steps for Outgoing Shipments. - Create a storable product “P1”. - Create…
**Steps to reproduce the bug:**
- Enable multi-step routes in the general settings.
- Go to the warehouse settings:
- Select 3 steps for Outgoing Shipments.
- Create a storable product “P1”.
- Create a sales order with the following details:
- Customer: Azure Interior
- Product: 3 units of P1
- Confirm the sales order
- Go to the pick picking
- Set the quantity to 1 unit
- Validate the pick and create a backorder
- Go to the pack step and validate it
- Return to the pick backorder and validate it for 2 units
- Create a return from this backorder
- Validate the return
- Go back to the sales order
**Problem:**
The delivered quantity is set to -2 instead of 0. When the return is validated, the “_compute_qty_delivered” function is triggered, which uses both outgoing and incoming moves. The “_get_outgoing_incoming_moves” method is called to retrieve these moves. However, for return moves, we only check if the `location_dest` is not set to customer usage and if `move.to_refund` is not false, without verifying that the source location is from the customer.
opw-3962062
Forward-Port-Of: odoo/odoo#170787The German delivery slips only show the company address, not the actual delivery address. ### Steps to reproduce: - Install l10n_de and switch to a German company - Create a delivery address to a company - Create a new SO, select the company as the customer and validate - Go to the created Delivery order, the delivery address should be the one you created before - Validate and print the delivery slip ### Cause: The German document format is DIN 5008 and this format does not include t
Original PR description
The German delivery slips only show the company address, not the actual delivery address. ### Steps to reproduce: - Install l10n_de and switch to a German company - Create a delivery address to a company - Create a new SO, select the company as the customer and validate - Go to the created Delivery order, the delivery address should be the one you created before - Validate and print the delivery slip ### Cause: The German document format is DIN 5008 and this format does not include the delivery address on the slips. ### Solution: Add the delivery address in the additional addresses that should be printed. opw-3961185 Forward-Port-Of: odoo/odoo#170902
- Before Commit: Users were unable to filter moves specifically for debit notes. An `ir.act.window` access error prevented users with invoice access rights from creating debit notes. - After Commit: Users can now directly filter debit notes using the new Debit Note filter over Customer Invoices, Vendor Bills, Journal Entries & Journal items views. And resolved the `ir.act.window` access error by updating the method to retrieve the action dictionary appropriately. **task**-3992112 F
Original PR description
- Before Commit: Users were unable to filter moves specifically for debit notes. An `ir.act.window` access error prevented users with invoice access rights from creating debit notes. - After Commit: Users can now directly filter debit notes using the new Debit Note filter over Customer Invoices, Vendor Bills, Journal Entries & Journal items views. And resolved the `ir.act.window` access error by updating the method to retrieve the action dictionary appropriately. **task**-3992112 Forward-Port-Of: odoo/odoo#169785
**Steps to reproduce:** - Install Invoicing - Go to "Settings / Technical / Email / Email Templates" - Open "Invoicing: Sending" - In "Email Configuration" tab, remove value of "To (Partners)" [partner_to] and add a placeholder for "To (Emails)" [email_to] For example: {{ object.partner_id.email }}) - Create an invoice and open "Send & Print" wizard **Issue:** Recipients field is empty. It should contain customer's email. Same issue with "Cc" [email_cc] field of email template. **Ca
Original PR description
**Steps to reproduce:**
- Install Invoicing
- Go to "Settings / Technical / Email / Email Templates"
- Open "Invoicing: Sending"
- In "Email Configuration" tab, remove value of "To (Partners)" [partner_to] and add a placeholder for "To (Emails)" [email_to] For example: {{ object.partner_id.email }})
- Create an invoice and open "Send & Print" wizard
**Issue:**
Recipients field is empty. It should contain customer's email.
Same issue with "Cc" [email_cc] field of email template.
**Cause:**
When generating the recipients of "Send & Print" wizard, the placeholder defined in email_to field of the email template is not evaluated.
opw-3999260
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#171485This error occurs when the user drag & drop the newly created calendar event and select ``This and Following events`` in ``Edit Recurrent event`` Steps to reproduce: - Install ``Calendar`` module - Create a new event from the Calendar view - Edit event -> Enable ``Recurrent`` - Now click on any day from ``Repeat on`` and remove the day which is selected by default (eg: if Tuesday is the default then select Monday and unselect Tuesday) - Save and Unarchive it and go back to the calend
Original PR description
This error occurs when the user drag & drop the newly created calendar event and select ``This and Following events`` in ``Edit Recurrent event`` Steps to reproduce: - Install ``Calendar`` module -…
This error occurs when the user drag & drop the newly created calendar event and select ``This and Following events`` in ``Edit Recurrent event`` Steps to reproduce: - Install ``Calendar`` module - Create a new event from the Calendar view - Edit event -> Enable ``Recurrent`` - Now click on any day from ``Repeat on`` and remove the day which is selected by default (eg: if Tuesday is the default then select Monday and unselect Tuesday) - Save and Unarchive it and go back to the calendar view - Now drag & drop the newly created event to anywhere and select ``This and Following events`` in ``Edit Recurrent event`` Traceback: ``ValueError: not enough values to unpack (expected 1, got 0)`` The error on line [1] occurs because ``recurrence_id`` is not found in ``self``. This issue stems from a change made in commit [2], where ``recurrency`` was set to ``True``. Consequently, when an event is archived, ``recurrency`` remains ``True``, but the event lacks a ``recurrence_id``. This absence of ``recurrence_id`` in ``self`` at line [1] triggers an error. However, before this commit, the expected behavior was that when an event is archived, ``recurrency`` should be set to ``False``. This commit will fix the error by passing ``false`` for ``update_recurrence`` when ``recurrence_id`` is not present. [1]: https://github.com/odoo/odoo/blob/d7cfef9c51461a595f3f46c7b91e5c56241d4af3/addons/calendar/models/calendar_event.py#L1196 [2]: https://github.com/odoo/odoo/commit/48e3f725a2506ca63336a131661542cacc6f1ab5 sentry-5462902179 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#169040
This PR removes the restriction on invoice lines having negative amounts in the `l10n_in_edi` module, which was introduced in PR https://github.com/odoo/odoo/pull/170736. This fix allows invoice lines with negative amounts to be processed, aligning with the intended functionality and ensuring a smoother invoicing experience. Forward-Port-Of: odoo/odoo#171426
Original PR description
This PR removes the restriction on invoice lines having negative amounts in the `l10n_in_edi` module, which was introduced in PR https://github.com/odoo/odoo/pull/170736. This fix allows invoice lines with negative amounts to be processed, aligning with the intended functionality and ensuring a smoother invoicing experience. Forward-Port-Of: odoo/odoo#171426
Ensure that _setup_main_restaurant_defaults is only called when the main restaurant does not have an active session. This prevents potential errors that could occur if the method is called while a session is active. E.g: https://runbot.odoo.com/runbot/build/64372543 opw-3937178 Forward-Port-Of: odoo/odoo#170936 Forward-Port-Of: odoo/odoo#170507
Original PR description
Ensure that _setup_main_restaurant_defaults is only called when the main restaurant does not have an active session. This prevents potential errors that could occur if the method is called while a session is active. E.g: https://runbot.odoo.com/runbot/build/64372543 opw-3937178 Forward-Port-Of: odoo/odoo#170936 Forward-Port-Of: odoo/odoo#170507
Before this PR, the live chat support page test was sometimes failing. This test ensures all the Odoo modules are successfully loaded on the support page. Until now, the test was waiting 1 second, which might be enough to load Odoo modules but not all the live chat assets. If the live chat assets are still loading when the browser instance is closed, the promise rejects and the test fails. This test now ensures all the live chat assets are loaded beforehand. This change is beneficial becau
Original PR description
Before this PR, the live chat support page test was sometimes failing. This test ensures all the Odoo modules are successfully loaded on the support page. Until now, the test was waiting 1 second, which might be enough to load Odoo modules but not all the live chat assets. If the live chat assets are still loading when the browser instance is closed, the promise rejects and the test fails. This test now ensures all the live chat assets are loaded beforehand. This change is beneficial because it also ensures that runtime assets such as translations, live chat CSS, or fonts are properly loaded as well. This PR fixes this issue. runbot-60514 Forward-Port-Of: odoo/odoo#171372
Forward-Port-Of: odoo/enterprise#65957
Original PR description
Forward-Port-Of: odoo/enterprise#65957
**Traceback:** ```python ('helpdesk.helpdesk_team_menu', 393, 'Helpdesk > Configuration > Helpdesk Teams', 559): Traceback (most recent call last): File "/tmp/tmpkjz256np/migrations/base/tests/test_mock_crawl.py", line 255, in crawl_menu self.mock_action(action_vals) File "/tmp/tmpkjz256np/migrations/base/tests/test_mock_crawl.py", line 412, in mock_action mock_method(model, view, fields_list, domain, group_by) File "/tmp/tmpkjz256np/migrations/base/tests/test_mock_craw
Original PR description
**Traceback:** ```python ('helpdesk.helpdesk_team_menu', 393, 'Helpdesk > Configuration > Helpdesk Teams', 559): Traceback (most recent call last): File…
**Traceback:**
```python
('helpdesk.helpdesk_team_menu', 393, 'Helpdesk > Configuration > Helpdesk Teams', 559):
Traceback (most recent call last):
File "/tmp/tmpkjz256np/migrations/base/tests/test_mock_crawl.py", line 255, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpkjz256np/migrations/base/tests/test_mock_crawl.py", line 412, in mock_action
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpkjz256np/migrations/base/tests/test_mock_crawl.py", line 441, in mock_view_form
[data] = record.read(fields_list)
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3540, in read
return self._read_format(fnames=fields, load=load)
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3751, in _read_format
vals[name] = convert(record[name], record, use_display_name)
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 6631, in __getitem__
return self._fields[key].__get__(self, self.env.registry[self._name])
File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1207, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1389, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/17.0/addons/mail/models/mail_thread.py", line 424, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 4875, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 102, in determine
return needle(*args)
File "/home/odoo/src/enterprise/17.0/helpdesk_timesheet/models/helpdesk_team.py", line 22, in _compute_total_timesheet_time
[('helpdesk_ticket_id', 'in', helpdesk_timesheet_teams.ticket_ids.filtered(lambda x: not x.stage_id.fold).ids)],
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 6110, in filtered
return self.browse([rec.id for rec in self if func(rec)])
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 6110, in <listcomp>
return self.browse([rec.id for rec in self if func(rec)])
File "/home/odoo/src/enterprise/17.0/helpdesk_timesheet/models/helpdesk_team.py", line 22, in <lambda>
[('helpdesk_ticket_id', 'in', helpdesk_timesheet_teams.ticket_ids.filtered(lambda x: not x.stage_id.fold).ids)],
File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 2907, in __get__
return super().__get__(records, owner)
File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1182, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3777, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3827, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3920, in _fetch_query
rows = self.env.cr.fetchall()
MemoryError
```
**Summary of changes:**
Previously, the code `helpdesk_timesheet_teams.ticket_ids.filtered( lambda x: not x.stage_id.fold).ids)` generating O(n) queries leading to a memory error when dealing with large numbers of tickets (e.g., 60k+ for this customer).
This commit refactors the code to use the search method instead. this approach reduces the number of queries to O(1) and significantly improves performance for customers with a large number of helpdesk tickets.
UPG - [1776915](https://upgrade.odoo.com/web#id=1776915&cids=1&menu_id=107&action=150&model=upgrade.request&view_type=form)
TASK - [3995988](https://www.odoo.com/odoo/my-tasks/3995988?cids=2)
Forward-Port-Of: odoo/enterprise#65615Versions -------- - 16.0+ Steps ----- 1. Create a rental product template; 2. add an attribute w/ 2 or more values; 3. go to "Rental prices" and add new pricings for specific variants; 4. copy the product template; 5. go to the "Rental prices" of the copied product. Issue ----- The pricings refer to the products variants of the original template instead of the newly created ones. Cause ----- Default copy logic doesn't link the new pricings to the new products. Solution -
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Create a rental product template; 2. add an attribute w/ 2 or more values; 3. go to "Rental prices" and add new pricings for specific variants; 4. copy the product template; 5. go to the "Rental prices" of the copied product. Issue ----- The pricings refer to the products variants of the original template instead of the newly created ones. Cause ----- Default copy logic doesn't link the new pricings to the new products. Solution -------- Add a `copy` override which creates new pricings for the proper variants. opw-3878124 Forward-Port-Of: odoo/enterprise#65871 Forward-Port-Of: odoo/enterprise#63284
When creating a timesheet from the ticket view form, an access error is raised if the active company is different from the company of its project. Step to reproduce: - install helpdesk_sale_timesheet - open helpdek - open configuration menu -> helpdesk teams - select a team with the visibility set on 'invited portal users' - enable the 'billing' feature, and add a project on this team - select as active company any company other than the one set on the project selected before - select
Original PR description
When creating a timesheet from the ticket view form, an access error is raised if the active company is different from the company of its project. Step to reproduce: - install helpdesk_sale_timesheet…
When creating a timesheet from the ticket view form, an access error is raised if the active company is different from the company of its project. Step to reproduce: - install helpdesk_sale_timesheet - open helpdek - open configuration menu -> helpdesk teams - select a team with the visibility set on 'invited portal users' - enable the 'billing' feature, and add a project on this team - select as active company any company other than the one set on the project selected before - select an existing ticket, or create a new one on the team - try creating a new timesheet Validation error is raised Source of the issue: If no company_id is given in the vals_list, the default company_id used by analytic line model is the active company. The issue is not present on task, because the key 'company_id' is correctly set in the '_timesheet_preprocess' method. This method is overwritten in the helpdesk_sale module and the updates done in it prevent the correct setting of the 'company_id' later on. Solution: Ensure that the 'company_id' key is present and consistent when creating a new timesheet from the ticket form view. version: 16.0 - master task - 3581941 Forward-Port-Of: odoo/enterprise#65835 Forward-Port-Of: odoo/enterprise#50150
Steps to reproduce: - install timesheet module - install project_timesheet_forecast bridge module - open timesheets - click on all timesheets - search an employee name Issue: - employees that are not matching this search are still being displayed Cause: - the conditions that are in domain causes this issue Solution: - if we gave the condition in domain ,that the filter is based on related search then the issue will be solved task-3653034 Forward-Port-Of: odoo/enterprise#533
Original PR description
Steps to reproduce: - install timesheet module - install project_timesheet_forecast bridge module - open timesheets - click on all timesheets - search an employee name Issue: - employees that are not matching this search are still being displayed Cause: - the conditions that are in domain causes this issue Solution: - if we gave the condition in domain ,that the filter is based on related search then the issue will be solved task-3653034 Forward-Port-Of: odoo/enterprise#53376
To allow other localizations to use the same logic for negative lines, we moved the methods in account. We still extend it in the module to add specific logic about taxes and documents. task-3943357 Forward-Port-Of: odoo/enterprise#64379
Original PR description
To allow other localizations to use the same logic for negative lines, we moved the methods in account. We still extend it in the module to add specific logic about taxes and documents. task-3943357 Forward-Port-Of: odoo/enterprise#64379
When renting with deliveries, if it's about a kit with subkit and shared component, the return will not be correct To reproduce the issue: 1. In Settings, enable "Rental Transfers" 2. Create a kit K as follow: - K - C1 - C2 - C3 - C2 3. Confirm a rental with 1 x K Error: in the return, there are two lines for each C2, which makes sense since each line is linked to a different kit. However, the quantity on each line is incorrect: 2 instead of 1 When
Original PR description
When renting with deliveries, if it's about a kit with subkit and shared component, the return will not be correct To reproduce the issue: 1. In Settings, enable "Rental Transfers" 2. Create a kit K…
When renting with deliveries, if it's about a kit with subkit and
shared component, the return will not be correct
To reproduce the issue:
1. In Settings, enable "Rental Transfers"
2. Create a kit K as follow:
- K
- C1
- C2
- C3
- C2
3. Confirm a rental with 1 x K
Error: in the return, there are two lines for each C2, which makes
sense since each line is linked to a different kit. However, the
quantity on each line is incorrect: 2 instead of 1
When generating the SM of the return, we first generate the values
https://github.com/odoo/odoo/blob/8db471e74238481a5429f0fcf8fbce1c0960ff27/addons/stock/models/stock_rule.py#L205-L206
In `_push_prepare_move_copy_values`, at some point, we adapt the
quantity of the returned SM based on the other SM of the SO. To do
so, we only consider the SM with the same product (among other
conditions). This criterion is not strict enough: for instance, when
looking at C2 of K, we take its quantity *and* we also take C2 of C1,
which is incorrect. Of course, we do the same when looking at C2 of
C1, hence the incorrect quantities.
OPW-3996074
Forward-Port-Of: odoo/enterprise#65787
Forward-Port-Of: odoo/enterprise#65758To reproduce the bug: - Have payroll and its l10n-au additional modules installed - Go to payroll -> config -> structure types - Change the first element 'Default Scheduled Pay' to semi-annually - Go to contacts and create click on New A python traceback will show. That's due to giving the PERIODS_PER_YEAR dictionary a non-existent key. As we can see, it lacks 'semi-monthly', 'bi-monthly', and 'semi-annually' periods. opw-4015682 Forward-Port-Of: odoo/enterprise#65618
Original PR description
To reproduce the bug: - Have payroll and its l10n-au additional modules installed - Go to payroll -> config -> structure types - Change the first element 'Default Scheduled Pay' to semi-annually - Go to contacts and create click on New A python traceback will show. That's due to giving the PERIODS_PER_YEAR dictionary a non-existent key. As we can see, it lacks 'semi-monthly', 'bi-monthly', and 'semi-annually' periods. opw-4015682 Forward-Port-Of: odoo/enterprise#65618
### Original issue: When creating a debit note on a bill from a purchase order with the option 'copy_lines', the field 'Purchase Order' in the lines is not populated. ### Steps to reproduce: - Install Purchase, Inventory apps and the l10n_co_edi module - Switch to a Colombian company - Go to Accounting > Configuration > Accounting > Journals - In the Vendor Bill journal > Advanced Settings, uncheck the 'Electronic invoicing UBL 2.1 (Colombia)' option - Go to Purchase > Orders > Purchase
Original PR description
### Original issue: When creating a debit note on a bill from a purchase order with the option 'copy_lines', the field 'Purchase Order' in the lines is not populated. ### Steps to reproduce: -…
### Original issue:
When creating a debit note on a bill from a purchase order with the option 'copy_lines', the field 'Purchase Order' in the lines is not populated.
### Steps to reproduce:
- Install Purchase, Inventory apps and the l10n_co_edi module
- Switch to a Colombian company
- Go to Accounting > Configuration > Accounting > Journals
- In the Vendor Bill journal > Advanced Settings, uncheck the 'Electronic invoicing UBL 2.1 (Colombia)' option
- Go to Purchase > Orders > Purchase Orders, create a new one and confirm it
- 'Receive Products' and 'Validate'
- Go back to the Purchase order
- 'Create Bill' and 'Confirm'
- From actions, choose 'Debit Note'
- In the wizard, tick 'Copy Lines', select a 'Concepto Nota de Débito' and 'Create Debit Note'
- Display the Purchase Order field in the Invoice Line tab is visible, it should not be populated
### Cause:
This bug is due to another fix that have been badly made because no tests were there. Most of the content of enterprise/l10n_co_edi/wizards/account_debit_note.py:_prepare_default_values is not called when it is supposed to and called when it's not.
In the 'Create Debit Note' wizard view there is an option to copy the lines and so, autopopulate them. This option is not displayed for Debit Notes generated from Credit Notes because the lines would be negative.
(https://github.com/odoo/odoo/blob/47eff65afdba3a2a8283342d8b636657f1fac317/addons/account_debit_note/wizard/account_debit_note_view.xml#L16)
The logic of this option is located in the module account_debit_note: https://github.com/odoo/odoo/blob/2a02ba4de1c823bcdef0e8b6b6373fa27b5587a1/addons/account_debit_note/wizard/account_debit_note.py#L64, the line_ids value is filled with a default value if copy_lines is False. If left empty, the lines are copied from the original account.move.
In this commit, https://github.com/odoo/enterprise/commit/c738f14d4ac88d508b6b75747788f5867eb71a68 we are trying to manually populate the lines of a debit note when it is generated from a credit note. But the code is made so that the lines are always copied.
So in this other commit https://github.com/odoo/enterprise/commit/fa65a1ff8cb7333a3339438513d1eeb5d5f9690e there is a correction to take the copy_lines into consideration. But it breaks the precedent fix as Debit Notes of Credit Notes always have copy_lines to False. So the code to copy the lines manually is actually never called for Debit Notes of Credit Notes (which is the only case we want it to be called in). But is called every time copy_lines is set to True therefore ignoring the actual code to copy the lines in the module account_debit_note.
In the context of the bug of this PR, the problem comes from the manual copying of lines that is missing the value purchase_order_id.
### Solution:
Changing the logic of the _prepare_default_values function:
- if not a Colombian company or not a debit note of a credit note, stop here
- we let the logic in account_debit_note copy the lines (or not) depending on copy_lines.
- if the debit note comes from a credit note, we copy the lines and return
With this flow, the lines will not be copied manually so the value purchase_order_id will be populated.
opw-3962301
Forward-Port-Of: odoo/enterprise#65528
Forward-Port-Of: odoo/enterprise#64689## Pull Request HOOT (PRHOOT) - part 19 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4: https://github.com/odoo/odoo/pull/153203 Part 5: https://github.com/odoo/odoo/pull/153425 Part 6: https://github.com/odoo/odoo/pull/153700 Part 7: https://github.com/odoo/odoo/pull/154054 Part 8: https://github.com/odoo/odoo/pull/154579 Part 9: https://github.com/odoo/odoo/pull/155073 Part 10
Original PR description
## Pull Request HOOT (PRHOOT) - part 19 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4:…
## Pull Request HOOT (PRHOOT) - part 19 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4: https://github.com/odoo/odoo/pull/153203 Part 5: https://github.com/odoo/odoo/pull/153425 Part 6: https://github.com/odoo/odoo/pull/153700 Part 7: https://github.com/odoo/odoo/pull/154054 Part 8: https://github.com/odoo/odoo/pull/154579 Part 9: https://github.com/odoo/odoo/pull/155073 Part 10: https://github.com/odoo/odoo/pull/155639 Part 11: https://github.com/odoo/odoo/pull/156255 / https://github.com/odoo/enterprise/pull/58135 Part 12: https://github.com/odoo/odoo/pull/156869 Part 13: https://github.com/odoo/odoo/pull/158384 / https://github.com/odoo/enterprise/pull/59019 Part 14: https://github.com/odoo/odoo/pull/158916 Part 15: https://github.com/odoo/odoo/pull/160292 / https://github.com/odoo/enterprise/pull/59971 Part 15.5: https://github.com/odoo/odoo/pull/166463 Part 16: https://github.com/odoo/odoo/pull/166311 Part 17: https://github.com/odoo/odoo/pull/168328 Part 18: https://github.com/odoo/odoo/pull/171004 / https://github.com/odoo/enterprise/pull/65657 Communtiy: https://github.com/odoo/odoo/pull/171242 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#65767
Versions -------- - 17.0 - saas-17.1 - saas-17.2 - saas-17.3 Steps ----- 1. Go to timesheets; 2. go to list view; 3. edit a timesheet line. Issue ----- `UncaughtPromiseError` Cause ----- Commit bae2e8146d48 added the `onRecordChanged` method, which fixed the issue of the timer not recording time spent on a project. The issue is that this method is also called when changing a row from the list view, and there's no `timesheet` value set by the timer, causing an error when
Original PR description
Versions -------- - 17.0 - saas-17.1 - saas-17.2 - saas-17.3 Steps ----- 1. Go to timesheets; 2. go to list view; 3. edit a timesheet line. Issue ----- `UncaughtPromiseError` Cause ----- Commit bae2e8146d48 added the `onRecordChanged` method, which fixed the issue of the timer not recording time spent on a project. The issue is that this method is also called when changing a row from the list view, and there's no `timesheet` value set by the timer, causing an error when trying to access `this.timesheet.resId`. Solution -------- Check `this.timerState.timesheetId` instead of `this.timesheet.resId`. `this.timerState` is guaranteed to exist, and its `timesheetId` value will be `undefined` if the timer isn't running, skipping the timer-specific logic. Also handle default projects when set. opw-4027099 Forward-Port-Of: odoo/enterprise#65879
Add a currency rates update method using the BCU (Banco Central Uruguayo) webservices for Uruguay (UY). Webservices used: - Get last currency rate update date https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsultimocierre - Get rates https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsbcucotizaciones Latest PDF specification [here](https://drive.google.com/file/d/122UtHhpdYEmbOti0nr0d-brZs65kiLDT/view) Rates can be manually verified [here](https://www.bcu.gub.uy/Esta
Original PR description
Add a currency rates update method using the BCU (Banco Central Uruguayo) webservices for Uruguay (UY). Webservices used: - Get last currency rate update date https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsultimocierre - Get rates https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsbcucotizaciones Latest PDF specification [here](https://drive.google.com/file/d/122UtHhpdYEmbOti0nr0d-brZs65kiLDT/view) Rates can be manually verified [here](https://www.bcu.gub.uy/Estadisticas-e-Indicadores/Paginas/Cotizaciones.aspx) For questions or updated specifcations, please send an email to mesadeayuda@bcu.gub.uy *Note: the `CodigoISO` tag isn't a reliable ISO code, that's why we use their specific `Moneda` currency code instead.* Credits to **Adhoc** for the development. Original PR: odoo/enterprise#49519 Forward-Port-Of: odoo/enterprise#65169
The issue: When there is a validation error happened directly with the DIAN, the error message is DIAN_RESULT, which does not explain much to the client. The Fix: explain to the client what is a DIAN_RESULT error opw-3921726 Forward-Port-Of: odoo/enterprise#65632 Forward-Port-Of: odoo/enterprise#65547
Original PR description
The issue: When there is a validation error happened directly with the DIAN, the error message is DIAN_RESULT, which does not explain much to the client. The Fix: explain to the client what is a DIAN_RESULT error opw-3921726 Forward-Port-Of: odoo/enterprise#65632 Forward-Port-Of: odoo/enterprise#65547
Steps to Reproduce: ------------------- 1. Install hr_contract_salary module, create an advantage. 2. In the advantages 'Display Type' field should be 'Always selected'. 3. Leave the res_field_id field empty. 4. Put this advantage as Mandatory Advantage for another field. 5. Open Recruitement App, create and send an offer. 6. Go to Offers smart button and open the Offer link. 7. There will be an Internal Server Error. To resolve this issue we'll just continue wherever the res
Original PR description
Steps to Reproduce: ------------------- 1. Install hr_contract_salary module, create an advantage. 2. In the advantages 'Display Type' field should be 'Always selected'. 3. Leave the res_field_id…
Steps to Reproduce:
-------------------
1. Install hr_contract_salary module, create an advantage.
2. In the advantages 'Display Type' field should be 'Always selected'.
3. Leave the res_field_id field empty.
4. Put this advantage as Mandatory Advantage for another field.
5. Open Recruitement App, create and send an offer.
6. Go to Offers smart button and open the Offer link.
7. There will be an Internal Server Error.
To resolve this issue we'll just continue wherever the res_field_id is not set. Because
if the res_field_id is not set it'll have no value which in return gives False(bool) which
can't be appended.
Traceback:
```py
Traceback (most recent call last):
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 1770, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/home/odoo/src/odoo/17.0/odoo/service/model.py", line 133, in retrying
result = func()
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 1797, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 1914, in dispatch
return self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/src/odoo/17.0/odoo/addons/base/models/ir_http.py", line 222, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 725, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/enterprise/17.0/hr_contract_salary/controllers/main.py", line 231, in salary_package
values = self._get_default_template_values(contract, offer)
File "/home/odoo/src/enterprise/17.0/hr_contract_salary/controllers/main.py", line 131, in _get_default_template_values
values = self._get_salary_package_values(contract, offer)
File "/home/odoo/src/enterprise/17.0/hr_contract_salary/controllers/main.py", line 411, in _get_salary_package_values
mapped_benefits, mapped_dependent_benefits, mandatory_benefits, mandatory_benefits_names, benefit_types, dropdown_options_2, dropdown_group_options, initial_values_2 = self._get_benefits_values(contract, offer)
File "/home/odoo/src/enterprise/17.0/hr_contract_salary/controllers/main.py", line 397, in _get_benefits_values
dependent_name = dependent_benefit.field + '_' + dependent_benefit.display_type
TypeError: unsupported operand type(s) for +: 'bool' and 'str'
```
Forward-Port-Of: odoo/enterprise#62255Problem --------- `_get_digital_signature` currently returns a sudo certificate. This is not safe. Objective --------- Don't return a sudo certificate to anyone having access to this company. Forward-Port-Of: odoo/enterprise#65874 Forward-Port-Of: odoo/enterprise#65607
Original PR description
Problem --------- `_get_digital_signature` currently returns a sudo certificate. This is not safe. Objective --------- Don't return a sudo certificate to anyone having access to this company. Forward-Port-Of: odoo/enterprise#65874 Forward-Port-Of: odoo/enterprise#65607
PR #62452 (15.0+) added extra IAP calls that retry requesting the cancellation status in case the cancellation was not processed yet. In odoo/odoo#122663 (17.0+), IAP calls were disabled in tests. When fw-porting the first PR above, this change of behaviour in 17.0 was not taken into account meaning that the tests kept failing in 17.0+. We fix this by applying the same strategy as #62452 - patch the thread to remove the testing attribute during IAP calls. runbot-64793 Forward-Port-O
Original PR description
PR #62452 (15.0+) added extra IAP calls that retry requesting the cancellation status in case the cancellation was not processed yet. In odoo/odoo#122663 (17.0+), IAP calls were disabled in tests. When fw-porting the first PR above, this change of behaviour in 17.0 was not taken into account meaning that the tests kept failing in 17.0+. We fix this by applying the same strategy as #62452 - patch the thread to remove the testing attribute during IAP calls. runbot-64793 Forward-Port-Of: odoo/enterprise#65867
The coverage reports do not print the right account ids when searching for the ones that are not used. ### Steps to reproduce: - Install the 'l10n_de' module and switch to a German company - Go in Accounting > Configuration > Management > Accounting Reports - Go in the German Profit and Loss report - Click on the button 'Accounts Coverage Report' - In the downloaded report the yellow lines should not appear as they are linked ### Cause: When searching for the ids that are not linked,
Original PR description
The coverage reports do not print the right account ids when searching for the ones that are not used. ### Steps to reproduce: - Install the 'l10n_de' module and switch to a German company - Go in Accounting > Configuration > Management > Accounting Reports - Go in the German Profit and Loss report - Click on the button 'Accounts Coverage Report' - In the downloaded report the yellow lines should not appear as they are linked ### Cause: When searching for the ids that are not linked, the code actually only look up the ones that are linked to an account. ### Solution: Fix the condition on the ids. opw-3993835 Forward-Port-Of: odoo/enterprise#65628
With https://github.com/odoo/enterprise/pull/45256/files we broke the left scroll bar of the transactions. Both sides of the bank rec widget should have their own. Before the fix:  After the fix:  opw-4029287 Forward-Port-Of: odoo/enterprise#65901
Original PR description
With https://github.com/odoo/enterprise/pull/45256/files we broke the left scroll bar of the transactions. Both sides of the bank rec widget should have their own. Before the fix:  After the fix:  opw-4029287 Forward-Port-Of: odoo/enterprise#65901
The module depends on documents_spreadsheet and crm in the manifest but contains references for [fields](https://github.com/odoo/enterprise/blob/a935055b1ea60b799e5c61c46a09231c4d210095/documents_spreadsheet_crm/data/files/pipeline_revenue_report_template.json#L280) defined in [crm_enterprise](https://github.com/odoo/enterprise/blob/a935055b1ea60b799e5c61c46a09231c4d210095/crm_enterprise/models/crm_lead.py#L10) and relies on the autoinstall of the enterprise module. The dependency should be expl
Original PR description
The module depends on documents_spreadsheet and crm in the manifest but contains references for [fields](https://github.com/odoo/enterprise/blob/a935055b1ea60b799e5c61c46a09231c4d210095/documents_spreadsheet_crm/data/files/pipeline_revenue_report_template.json#L280) defined in [crm_enterprise](https://github.com/odoo/enterprise/blob/a935055b1ea60b799e5c61c46a09231c4d210095/crm_enterprise/models/crm_lead.py#L10) and relies on the autoinstall of the enterprise module. The dependency should be explicit because crm_enterprise can be uninstalled by users and the documents would still be there with missing fields. Forward-Port-Of: odoo/enterprise#64549
To reproduce the issue: 1. Go to the wire transfer provider and enable it 2. Make sure there is a “Pending Message", if not click “Reload Pending Message” 3. Create a quotation in USD 4. Send by Email 5. Preview 6. Accept & Sign 7. Pay Now 8. Select Wire Transfer and Pay The amount will show under communication with as EUR. To fix it, only show this when the SEPA provider is used. opw-4006206 PS: I targeted 17 because it's the closest stable release to odoo.com (where we ex
Original PR description
To reproduce the issue: 1. Go to the wire transfer provider and enable it 2. Make sure there is a “Pending Message", if not click “Reload Pending Message” 3. Create a quotation in USD 4. Send by Email 5. Preview 6. Accept & Sign 7. Pay Now 8. Select Wire Transfer and Pay The amount will show under communication with as EUR. To fix it, only show this when the SEPA provider is used. opw-4006206 PS: I targeted 17 because it's the closest stable release to odoo.com (where we experience the issue). Seemingly no one else has run into this over the years so I didn't want to change previous versions needlessly. Forward-Port-Of: odoo/enterprise#65291 Forward-Port-Of: odoo/enterprise#65256