Daily updates from Odoo
Monday, November 18, 2024
65 changes
22 changes
Resolved issues and error corrections
The attendance menu now closes immediately after an employee clicks check in or check out, preventing accidental double clicks from creating duplicate attendance actions. This helps keep attendance records more accurate and reduces manual corrections for HR teams.
Original PR description
Before this commit, a user was able to double click on check-in/check-out. To avoid that the pop-up will be automatically closed when the button will be clicked. task-4316077 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
The point of sale lot and serial number dropdown now aligns correctly for users working in right-to-left languages such as Arabic. This improves usability during checkout and inventory tracking without changing behavior for left-to-right languages or mobile users.
Original PR description
The dropdown selection for tracking/lot number is misaligned when the users has a rtl language. Steps to reproduce: ------------------- * Switch the current user to a rtl language (arabic for ex) *…
The dropdown selection for tracking/lot number is misaligned when the users has a rtl language. Steps to reproduce: ------------------- * Switch the current user to a rtl language (arabic for ex) * Open shop session * Select the drawer product > Observation: dropdown selection is misaligned Before vs after fix: ------------------------- RTL computer: * Before:  * After:  RTL mobile: * Before:  * After:  LTR computer: * Before:  * After:  LTR mobile * Before:  * After:  Also works if we move the popup around. opw-4187095
Miscellaneous changes
Description of the issue this PR addresses: Current behavior before PR: I. Pasting content within `blockquote` and `pre` elements resulted in each node being converted into separate `blockquote` or `pre` elements. II. When pasting the clipboard content as plain text (CTRL+SHIFT+V) inside a `PRE` element would convert each line break into a new paragraph. III. When text with a url is pasted within a pre tag the text is converted to a link. Desired behavior after PR is merged: I. `bl
Original PR description
Description of the issue this PR addresses: Current behavior before PR: I. Pasting content within `blockquote` and `pre` elements resulted in each node being converted into separate `blockquote` or…
Description of the issue this PR addresses: Current behavior before PR: I. Pasting content within `blockquote` and `pre` elements resulted in each node being converted into separate `blockquote` or `pre` elements. II. When pasting the clipboard content as plain text (CTRL+SHIFT+V) inside a `PRE` element would convert each line break into a new paragraph. III. When text with a url is pasted within a pre tag the text is converted to a link. Desired behavior after PR is merged: I. `blockquote` and `pre` should be considered like wrappers, allowing paragraph-related elements to be pasted inside them. II. When pasting the clipboard content as plain text within `pre`, every new line should be pasted within the `pre` tag. III. When text with a url is pasted within a pre tag it should not convert it to a link. IV. The `pre` tag does not have automatic word-wrapping or line-breaks as it is intended to keep the formatting of the text. This commit ensures that long text within `pre` tags does not overflow. task-4154465 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187312 Forward-Port-Of: odoo/odoo#178965
The Turkish National Identification Number (NIN) consists of 11 digits in the format NNNNNNNNNNN where the last two digits are check digits. The Vergi Kimlik Numarasi (VKN) is a 10-digit number in the format NNNNNNNNNN. The Vergi Kimlik Numaras is the Turkish tax identification number used for businesses and certain foreign individuals. task: 4282883 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187228 Forward
Original PR description
The Turkish National Identification Number (NIN) consists of 11 digits in the format NNNNNNNNNNN where the last two digits are check digits. The Vergi Kimlik Numarasi (VKN) is a 10-digit number in the format NNNNNNNNNN. The Vergi Kimlik Numaras is the Turkish tax identification number used for businesses and certain foreign individuals. task: 4282883 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187228 Forward-Port-Of: odoo/odoo#185884
Steps to reproduce: - Modify the invoice mail template by adding a default attachment - Create and confirm an invoice - Send and Print: delete the attachment from the wizard Issue: Back to the mail template, you will see that the attachment has been deleted Cause: The attachment is not protected from deletion and is added to list of attahcments to be deleted https://github.com/odoo/odoo/blob/ef424a9dc22a5abbe7b0a6eff61cf113826f04c0/addons/account/static/src/components/mail_attachments
Original PR description
Steps to reproduce: - Modify the invoice mail template by adding a default attachment - Create and confirm an invoice - Send and Print: delete the attachment from the wizard Issue: Back to the mail template, you will see that the attachment has been deleted Cause: The attachment is not protected from deletion and is added to list of attahcments to be deleted https://github.com/odoo/odoo/blob/ef424a9dc22a5abbe7b0a6eff61cf113826f04c0/addons/account/static/src/components/mail_attachments/mail_attachments.js#L59-L63 and is deleted https://github.com/odoo/odoo/blob/ef424a9dc22a5abbe7b0a6eff61cf113826f04c0/addons/account/static/src/components/mail_attachments/mail_attachments.js#L81-L82 Solution: Make sure that attachements from template are protected opw-4295826 Forward-Port-Of: odoo/odoo#187240
Versions -------- - 16.0+ Steps (17.0+) ------------- 1. Create a Sale Order for a new contact without phone number; 2. disable online signature; 3. add a deliverable product to the SO; 4. hit "Send by Email"; 5. open the sent mail (e.g. via Mailhog); 6. copy the payment link; 7. open in Safari on iOS; 8. pay the sales order. Issue ----- > ``` >TypeError: Attempted to assign to readonly property. > extractFilteredSchemaValuesFromMicroData@https... > extractSchemaValuesF
Original PR description
Versions -------- - 16.0+ Steps (17.0+) ------------- 1. Create a Sale Order for a new contact without phone number; 2. disable online signature; 3. add a deliverable product to the SO; 4. hit "Send…
Versions -------- - 16.0+ Steps (17.0+) ------------- 1. Create a Sale Order for a new contact without phone number; 2. disable online signature; 3. add a deliverable product to the SO; 4. hit "Send by Email"; 5. open the sent mail (e.g. via Mailhog); 6. copy the payment link; 7. open in Safari on iOS; 8. pay the sales order. Issue ----- > ``` >TypeError: Attempted to assign to readonly property. > extractFilteredSchemaValuesFromMicroData@https... > extractSchemaValuesFromSchemaOrg@https... > global code@https... > ``` Cause ----- `extractFilteredSchemaValuesFromMicroData` is a function internal to iOS Safari. It is bugged in that it tries to reassign a `const` in some scenarios where no elements with `itemprop="telephone"` attributes are found. More details in this comment: https://github.com/odoo/odoo/pull/187143#issuecomment-2475934797 Solution -------- If the contact doesn't have a mobile or phone number, add an empty `div` with `itemprop="telephone"`. > [!note] > I've also reported the bug to Apple, but who knows when/if they'll fix it. Related issue: https://github.com/odoo/odoo/issues/162145 opw-4072838 Forward-Port-Of: odoo/odoo#187380 Forward-Port-Of: odoo/odoo#187143
Problem: When creating a new e-commerce category, the breadcrumb displays "Unnamed" instead of the actual category name. This happens because the `parents_and_self` field is not recomputed when `parent_path` changes, despite the former depending on the latter. Solution: Ensure that `parents_and_self` is recomputed whenever `parent_path` is updated, so that the correct name is reflected in the breadcrumb. Steps to reproduce: - Open the form to create a new e-commerce category. - After s
Original PR description
Problem: When creating a new e-commerce category, the breadcrumb displays "Unnamed" instead of the actual category name. This happens because the `parents_and_self` field is not recomputed when `parent_path` changes, despite the former depending on the latter. Solution: Ensure that `parents_and_self` is recomputed whenever `parent_path` is updated, so that the correct name is reflected in the breadcrumb. Steps to reproduce: - Open the form to create a new e-commerce category. - After saving, the breadcrumb displays "Unnamed" instead of the actual category name. opw-4267144 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#184423
Before this commit, a user was able to double click on check-in/check-out with the template's reload. To avoid that the pop-up will be automatically closed when the button will be clicked. 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#186407
Original PR description
Before this commit, a user was able to double click on check-in/check-out with the template's reload. To avoid that the pop-up will be automatically closed when the button will be clicked. 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#186407
As so_reference_type can be left empty on the payment.provider, we need to handle the case in the back end and effectively allow an empty payment reference. With no payment reference defined on the sale.order (field reference), we have the possibility to let the invoice define the payment reference itself (field payment_reference) which allows an easier reconciliation of payments and invoices. opw-4282903 Forward-Port-Of: odoo/odoo#187205
Original PR description
As so_reference_type can be left empty on the payment.provider, we need to handle the case in the back end and effectively allow an empty payment reference. With no payment reference defined on the sale.order (field reference), we have the possibility to let the invoice define the payment reference itself (field payment_reference) which allows an easier reconciliation of payments and invoices. opw-4282903 Forward-Port-Of: odoo/odoo#187205
Before this commit, messages sent by OdooBot would remain unread. 1. Log in as demo user 2. Open OdooBot chat, remains unread This happens because the `_set_last_seen_message` method called by the OdooBot reply logic sets the message as seen for the user. This results in the message being marked as read before it is received, preventing it to be marked as read by the client. This commit fixes the issue by preventing the message to be mark as read if the author is not the current user. A
Original PR description
Before this commit, messages sent by OdooBot would remain unread. 1. Log in as demo user 2. Open OdooBot chat, remains unread This happens because the `_set_last_seen_message` method called by the OdooBot reply logic sets the message as seen for the user. This results in the message being marked as read before it is received, preventing it to be marked as read by the client. This commit fixes the issue by preventing the message to be mark as read if the author is not the current user. Also added missing `message_unread_counter_bus_id` from `assignedDefined` that would prevent it to be set by record inserts. task-4295630 opw-4316799 Forward-Port-Of: odoo/odoo#186742
This commit enhances the tax group template in `account.tax.group.pe.csv` and he tax template in `account.tax.pe.csv` to support the free billin functionality by adding a dummy tax group. The related logic is implemented in the enterprise module. Related Enterprise PR: https://github.com/odoo/enterprise/pull/56767 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#174131
Original PR description
This commit enhances the tax group template in `account.tax.group.pe.csv` and he tax template in `account.tax.pe.csv` to support the free billin functionality by adding a dummy tax group. The related logic is implemented in the enterprise module. Related Enterprise PR: https://github.com/odoo/enterprise/pull/56767 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#174131
Steps to reproduce: - Project app > Any project > ':' Menu > Burndown Chart - Add any custom filter > Click Add - Sticky Note 'Domain is invalid. Please corect it' The burndown chart view is dependent on groupby argument 'date', if you try to remove the groupby block from the search bar an error message will appear to stop you. This works properly when passing through `web_read_group` but here we take a slightly different path. When adding a custom domain to the search bar, we validate
Original PR description
Steps to reproduce: - Project app > Any project > ':' Menu > Burndown Chart - Add any custom filter > Click Add - Sticky Note 'Domain is invalid. Please corect it' The burndown chart view is…
Steps to reproduce: - Project app > Any project > ':' Menu > Burndown Chart - Add any custom filter > Click Add - Sticky Note 'Domain is invalid. Please corect it' The burndown chart view is dependent on groupby argument 'date', if you try to remove the groupby block from the search bar an error message will appear to stop you. This works properly when passing through `web_read_group` but here we take a slightly different path. When adding a custom domain to the search bar, we validate that domain by simulating an SQL query using said domain. This request is made independantly of `web_read_group` since it's not intended to be displayed, hence why we don't have the groupby argument. This causes the query building process to fail, so a default value is needed to restore the flow. Since we only want to validate the domain it does not matter what we put in so I used the default search value. opw-4300254 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186402
Steps to reproduce: 1.Add an any image block ( here Text - Image ) 2.Add the URL on the image 3.Now edit the image and add the video to it; you will notice that the URL remains as it is in the toolbar 4.Click on Save Issue: For versions 15.0-16.0, the link and URL both remain. For version 17.0-Master, the video element gets removed unexpectedly. Expected Behavior: When a video is inserted, the URL should be automatically removed to avoid element removal or loss of responsiveness.
Original PR description
Steps to reproduce: 1.Add an any image block ( here Text - Image ) 2.Add the URL on the image 3.Now edit the image and add the video to it; you will notice that the URL remains as it is in the toolbar 4.Click on Save Issue: For versions 15.0-16.0, the link and URL both remain. For version 17.0-Master, the video element gets removed unexpectedly. Expected Behavior: When a video is inserted, the URL should be automatically removed to avoid element removal or loss of responsiveness. Issue: The issue of element getting removed or loss of responsiveness is because we did not remove the url link when we inserted the video. Solution: This PR resolves the issue by removing the URL link when a video is inserted in place of an image, ensuring the video element is retained and options are hidden appropriately. task-4023555 Forward-Port-Of: odoo/odoo#186293 Forward-Port-Of: odoo/odoo#172390
Creating new customers inside a pos session without all fields filled, in the backend those fields would be marked as set Steps to reproduce: ------------------- * Create a new customer in the shop and only fill out its name * In the backend, go in the **Contact** App * Create a filter: Tax Id is not set > Observation: The customer just created does not appear in that filter. It is considered as having a tax id (vat) set. Why the fix: ------------ When we take a look at the record
Original PR description
Creating new customers inside a pos session without all fields filled, in the backend those fields would be marked as set Steps to reproduce: ------------------- * Create a new customer in the shop and only fill out its name * In the backend, go in the **Contact** App * Create a filter: Tax Id is not set > Observation: The customer just created does not appear in that filter. It is considered as having a tax id (vat) set. Why the fix: ------------ When we take a look at the record raw data the vat is set to `""` which is considered as set. Comparing this with a contact created from the contact app, the only fields that are set to `""` are the computed fields relying on data which is set to false. Everything else is just set to false. opw-4276003 Forward-Port-Of: odoo/odoo#187408 Forward-Port-Of: odoo/odoo#186883
Before this PR, query strings were added to the attachment of URL types. This is incorrect since those URLs can already have query strings, and the added query strings don't make sense for non-binary attachments. Forward-Port-Of: odoo/odoo#187522
Original PR description
Before this PR, query strings were added to the attachment of URL types. This is incorrect since those URLs can already have query strings, and the added query strings don't make sense for non-binary attachments. Forward-Port-Of: odoo/odoo#187522
Steps: - Open any list view with more than 1 page - apply a limit if you don't have enough records - Toggle first record checkbox - Click on `o_pager_next` - Shift click on another record - Traceback The problem arises when you change page after using range-selection with the shift key. Indeed, range-selection uses `this.lastCheckedRecord`, which is the last record clicked on to start the selection, except that if you change page (and if you use a filter), thi
Original PR description
Steps:
- Open any list view with more than 1 page
- apply a limit if you don't have enough records
- Toggle first record checkbox
- Click on `o_pager_next`
- Shift click on another record
- Traceback
The problem arises when you change page after using range-selection with the shift key.
Indeed, range-selection uses `this.lastCheckedRecord`, which is the last record clicked on to start the selection, except that if you change page (and if you use a filter), this element may no longer be in the current page.
Currently, the code just checks that this element exists before attempting to create a selection by range.
The fix consists in checking that this element exists in the list of records before attempting anything.
opw-4284708
Forward-Port-Of: odoo/odoo#187244Issue: when we import a data only module with unknown dependencies we allow it to be installed, and in the process we add wrong data to the dependencies table. Example manifest: ``` {'data': ['foo.xml'], 'depends': ['base', 'bar', 'baz']} ``` Will end up with: ``` test_17=> select id,name,latest_version,state from ir_module_module where name in ('base','foo', 'bar', 'baz') +------+------+----------------+-----------+ | id | name | latest_version | state | |------+------+-----
Original PR description
Issue: when we import a data only module with unknown dependencies we allow it to be installed, and in the process we add wrong data to the dependencies table. Example manifest: ``` {'data':…
Issue: when we import a data only module with unknown dependencies we
allow it to be installed, and in the process we add wrong data to the
dependencies table.
Example manifest:
```
{'data': ['foo.xml'], 'depends': ['base', 'bar', 'baz']}
```
Will end up with:
```
test_17=> select id,name,latest_version,state from ir_module_module where name in ('base','foo', 'bar', 'baz')
+------+------+----------------+-----------+
| id | name | latest_version | state |
|------+------+----------------+-----------|
| 84 | base | 17.0.1.3 | installed |
| 1148 | foo | <null> | installed |
+------+------+----------------+-----------+
test_17=> select * from ir_module_module_dependency where module_id=1148
+------+------+-----------+-----------------------+
| id | name | module_id | auto_install_required |
|------+------+-----------+-----------------------|
| 2468 | bar | 1148 | False |
| 2469 | baz | 1148 | False |
| 2470 | base | 1148 | False |
+------+------+-----------+-----------------------+
```
This later causes issues during the upgrade of the DB.
In this patch we reinstate the check for missing dependencies taking
into account only those that cannot be installed --i.e those that are
truly unknown to the ORM. The installation of such data modules with
wrong dependencies will now be blocked with a UserError.
See: odoo/odoo@234590f3
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#187531Steps to reproduce: Install the app l10n_de and switch to a German company Create an invoice Send & Print the Invoice with XRechnung PDF and XML versions are stored as attachments in the record (Chatter). Try to delete them form the chatter. When deleting them, the unlink function only removes the link to account.move fields and saves the attachment with a new name: "document detached by user on date". This works fine for the PDF version but not for XML one. This is because `ir_attachmen
Original PR description
Steps to reproduce: Install the app l10n_de and switch to a German company Create an invoice Send & Print the Invoice with XRechnung PDF and XML versions are stored as attachments in the record (Chatter). Try to delete them form the chatter. When deleting them, the unlink function only removes the link to account.move fields and saves the attachment with a new name: "document detached by user on date". This works fine for the PDF version but not for XML one. This is because `ir_attachment.res_field` is set to `ubl_cii_xml_file` for XML version of the attachment, but when filtering to detach them the filter looks for `ir_attachment.res_field` that are set to `ubl_cii_xml_id`. opw-4273836 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186603
The issue: Before this commit, the product was intended to be set as 'invoice on order', but this wasn't applied. The status was overridden due to the '_compute_invoice_policy' function override in the 'l10n_ke_edi_oscu_stock' module, which caused the test to fail on runbot when this module is installed. The fix: Put the product to 'invoice on order' before creating the sale order runbot-70731 Forward-Port-Of: odoo/odoo#187280
Original PR description
The issue: Before this commit, the product was intended to be set as 'invoice on order', but this wasn't applied. The status was overridden due to the '_compute_invoice_policy' function override in the 'l10n_ke_edi_oscu_stock' module, which caused the test to fail on runbot when this module is installed. The fix: Put the product to 'invoice on order' before creating the sale order runbot-70731 Forward-Port-Of: odoo/odoo#187280
Updated the regex of the youtube videos to accept some of the latest links as shorts and lives, following the same behavior as in web_editor. Specifically the links generated using the share button. Steps to reproduce: 1. Install eLearning and create a course. 2. Add a new content as video. 3. Take the Youtube livestream url from share > copy. 4. Use this link for the video slide in the course. opw-4278811 I confirm I have signed the CLA and read the PR guidelines at www.odoo.co
Original PR description
Updated the regex of the youtube videos to accept some of the latest links as shorts and lives, following the same behavior as in web_editor. Specifically the links generated using the share button. Steps to reproduce: 1. Install eLearning and create a course. 2. Add a new content as video. 3. Take the Youtube livestream url from share > copy. 4. Use this link for the video slide in the course. opw-4278811 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#185518
See https://discord.com/channels/678381219515465750/687338482598674454/1308011546370244628 Forward-Port-Of: odoo/odoo#187545
Original PR description
See https://discord.com/channels/678381219515465750/687338482598674454/1308011546370244628 Forward-Port-Of: odoo/odoo#187545
We have to await for `_initiatePaymentFlow()` completion to ensure we correctly got the result of the transaction route. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187527
Original PR description
We have to await for `_initiatePaymentFlow()` completion to ensure we correctly got the result of the transaction route. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187527
20 changes
Enhancements to existing features
The default payment reminder email has been refined to make follow-up messages clearer and more polished for customers. The template also uses email-compatible styling so reminders display more reliably across email clients.
Original PR description
This commit slightly improves the default followup email message for payment reminder. task-4245024
Payroll will no longer show a payslip duration warning when the selected salary structure is not configured to use worked day lines. This reduces confusing alerts for payroll teams in setups where that warning is not relevant.
Original PR description
If a structure has the setting 'use_worked_day_lines' set to False, we shouldn't show the warning for the payslip duration. Task: 4300660
The product form layout in Intrastat reporting has been adjusted so fields take up space more consistently. This helps keep the interface cleaner and easier to use when reviewing or editing product-related Intrastat information.
Original PR description
Before this commit some fields were taking extra space and ruining the UI by breaking uniformity After this commit uniformity was restored in UI TaskId - 3794896
Resolved issues and error corrections
Belgian payroll time off requests will no longer create an eDRS activity for the person submitting or processing the request when no notified time off officers are configured. This prevents unnecessary or incorrectly assigned follow-up tasks and keeps notifications aligned with the leave type settings.
Original PR description
The eDRS activity on time off request is sent to the current logged in user if there are no `Notified Time Off Officers` specified on the leave type. However, this shouldn't be the case. The activity shouldn't be created if there are no `Notified Time Off Officers`. These changes address this issue. task-4267132
This change reverses a previous behavior where submitting a website helpdesk form could set or change the related customer on a task based on the email entered in the form. This helps avoid incorrect customer associations and keeps helpdesk/task records aligned with the intended contact data.
Original PR description
COM PR: odoo/odoo#186140 UPG PR: odoo/upgrade#6715 task-4295363
Features or functions removed from Odoo
This change removes unused code from the duplicate transactions tool in online bank synchronization. It has no expected effect on daily use, but helps keep the accounting synchronization feature easier to maintain.
Original PR description
The aim of this is removing a small dead code presents in the duplicate transactions tool. The function on line 66 is not existing anymore and the one on line 65 is never used. no task id
Code cleanup and technical improvements
This update reorganizes how message threads and chatter loading are handled, making the underlying messaging code easier to maintain. For business users, the expected impact is smoother long-term reliability in recruitment-related communication areas without changing day-to-day workflows.
Original PR description
This reduces the complexity of thread_service, and encapsulate self-contained code of chatter-specific code of thread and message list loading. https://github.com/odoo/odoo/pull/121090
This draft updates how messaging-related data is organized behind the scenes so it can be stored and found more consistently. The change supports future cleanup and maintenance work, with little expected direct impact on day-to-day users.
Original PR description
https://github.com/odoo/odoo/pull/130602
This change updates several Enterprise modules to align with a behind-the-scenes restructuring of Odoo's messaging framework. It helps keep accounting, approvals, and documents features compatible with the latest internal architecture without changing the user-facing workflow.
Original PR description
https://github.com/odoo/odoo/pull/132442 Adapt enterprise code with moving `insert()` method in the discuss model class, rather than a service coupled with the model.
Miscellaneous changes
When a company is employing partner for construction work a special report mechanism is needed. A Subcontractor is a partner that will do construction work and invoice the Contractor. Construction Industry Scheme add deductions for labour cost on the invoice. The deducted amount must be paid and reported by the contractor through a monthly return. For more informations about CIS, see: https://www.gov.uk/what-is-the-construction-industry-scheme This commit adds: - 6 new taxes for deductio
Original PR description
When a company is employing partner for construction work a special report mechanism is needed. A Subcontractor is a partner that will do construction work and invoice the Contractor. Construction Industry Scheme add deductions for labour cost on the invoice. The deducted amount must be paid and reported by the contractor through a monthly return. For more informations about CIS, see: https://www.gov.uk/what-is-the-construction-industry-scheme This commit adds: - 6 new taxes for deductions 0, 20, 30% in sales and purchase - A CIS report inherited from the tax report - A way to directly send the report to hmrc. This imply a call to IAP - New fields on res.company and res.partner for the HMRC API related: https://github.com/odoo/iap-apps/pull/842 task:3851467 Forward-Port-Of: odoo/enterprise#66766
Before this commit, the buttons "Add By-Product" and "Validate" are both visible when the user is in a by-product move line form view from the Barcode app. This should not happen. Forward-Port-Of: odoo/enterprise#73737 Forward-Port-Of: odoo/enterprise#73242
Original PR description
Before this commit, the buttons "Add By-Product" and "Validate" are both visible when the user is in a by-product move line form view from the Barcode app. This should not happen. Forward-Port-Of: odoo/enterprise#73737 Forward-Port-Of: odoo/enterprise#73242
Sales order created from purchase orders thanks to the inter-company module were assigned the default team of the company, regardless of the customer configuration. This commit makes sure the team is correctly computed in the dedicated compute, ensuring the expected team is assigned to the Sales Order. opw-4166598 Forward-Port-Of: odoo/enterprise#72767
Original PR description
Sales order created from purchase orders thanks to the inter-company module were assigned the default team of the company, regardless of the customer configuration. This commit makes sure the team is correctly computed in the dedicated compute, ensuring the expected team is assigned to the Sales Order. opw-4166598 Forward-Port-Of: odoo/enterprise#72767
This fixes issues that arose since https://github.com/odoo/enterprise/commit/54965c8d62301ba1fa8409709a1a1fd77150f722 It fixes the fact that some tests ordered records using states and those states would be different in invoicing enterprise or accounting. Thus it would not have the same order of records and fail the test. Forward-Port-Of: odoo/enterprise#71059
Original PR description
This fixes issues that arose since https://github.com/odoo/enterprise/commit/54965c8d62301ba1fa8409709a1a1fd77150f722 It fixes the fact that some tests ordered records using states and those states would be different in invoicing enterprise or accounting. Thus it would not have the same order of records and fail the test. Forward-Port-Of: odoo/enterprise#71059
Before this commit: ==================== Only the tracking number was shown on the kitchen card for floating orders. If the user changed the name of a floating order, it could create confusion if the displayed name was different. After this commit: ================== The floating order name will be displayed for floating orders, otherwise, the tracking number will be shown. task- 4274465 Forward-Port-Of: odoo/enterprise#72750
Original PR description
Before this commit: ==================== Only the tracking number was shown on the kitchen card for floating orders. If the user changed the name of a floating order, it could create confusion if the displayed name was different. After this commit: ================== The floating order name will be displayed for floating orders, otherwise, the tracking number will be shown. task- 4274465 Forward-Port-Of: odoo/enterprise#72750
When uploading a CFDI XML invoice containing the `InformacionGlobal` element, the system fails to parse the document correctly and displays an error message. ### Steps to Reproduce 1. Install the `l10n_mx_edi` module. 2. Create a blank invoice. 3. Add a CFDI XML file containing an `InformacionGlobal` as an attachment to the invoice. (You can use the file `enterprise/l10n_mx_edi/tests/test_files/test_global_invoice_year_month_format.xml` for testing.) The chatter displays the following
Original PR description
When uploading a CFDI XML invoice containing the `InformacionGlobal` element, the system fails to parse the document correctly and displays an error message. ### Steps to Reproduce 1. Install the…
When uploading a CFDI XML invoice containing the `InformacionGlobal` element, the system fails to parse the document correctly and displays an error message. ### Steps to Reproduce 1. Install the `l10n_mx_edi` module. 2. Create a blank invoice. 3. Add a CFDI XML file containing an `InformacionGlobal` as an attachment to the invoice. (You can use the file `enterprise/l10n_mx_edi/tests/test_files/test_global_invoice_year_month_format.xml` for testing.) The chatter displays the following error: Error importing attachment 'xml_file_name.xml' as invoice (decoder=_l10n_mx_edi_import_cfdi_invoice) ### Cause The `InformacionGlobal` element in the XML requires an `Año` attribute (note the special character `ñ`). Correct encoding is crucial here to handle special characters accurately. When the XML file is first uploaded, it is parsed with the correct encoding. However, during processing, the XML is converted back to a string, losing its original encoding in the process. This causes issues with special characters like `ñ`, which can no longer be read correctly by the system, resulting in a parsing error. opw-4226968 Forward-Port-Of: odoo/enterprise#73726
If there is no warehouse set on website calculate free_qty in all warehouses. task-4251740 Forward-Port-Of: odoo/enterprise#71213
Original PR description
If there is no warehouse set on website calculate free_qty in all warehouses. task-4251740 Forward-Port-Of: odoo/enterprise#71213
Commit 1: [FIX] documents: avoid crashes on inaccessible targets Reproduce: 1. Create a shortcut for a document you are shared access to. Say it ends up in My Drive 2. Remove your access to the shortcut's target 3. Go to the folder/section (My Drive) where you have the shortcut 4. Experience an Access Error Usually, access rights of a document and its shortcuts is synchronized, so a user can see/edit both or none. This is not the case with ownership as a user can create a shortcut
Original PR description
Commit 1: [FIX] documents: avoid crashes on inaccessible targets Reproduce: 1. Create a shortcut for a document you are shared access to. Say it ends up in My Drive 2. Remove your access to the…
Commit 1: [FIX] documents: avoid crashes on inaccessible targets Reproduce: 1. Create a shortcut for a document you are shared access to. Say it ends up in My Drive 2. Remove your access to the shortcut's target 3. Go to the folder/section (My Drive) where you have the shortcut 4. Experience an Access Error Usually, access rights of a document and its shortcuts is synchronized, so a user can see/edit both or none. This is not the case with ownership as a user can create a shortcut to a document they don't own. If they are allowed to view a shortcut they own when they don't have access to the target anymore, the webclient crashes on loading target data (e.g. to show previews). We tested changing the domain of ownership-related access in user_permission, but it is very costly performance-wise, so this is our best approach in stable as it affects writes but not all reads. Commit 2: Reproduce: 1. Enable Company 1 and 2 2. Create a document with Company 1 3. Create a shortcut for the document. 4. Change document's company to Company 2 6. Only enable Company 1 4. Experience an Access Error See previous commit. Syncing company_id with shortcuts allows to avoid this. A test is included. Task-4236268 Forward-Port-Of: odoo/enterprise#71235
Bug === The "Shared With Me" folder is really slow on next.odoo.com. We used "user_permission != none" in the domain, but it's already added by the access rules, and so, that part is computed too much time in SQL. The web_search_read query, on my personal account takes (build of 4 November) - 3600ms before the change - 490ms after the change Task-4307300 Forward-Port-Of: odoo/enterprise#73269
Original PR description
Bug === The "Shared With Me" folder is really slow on next.odoo.com. We used "user_permission != none" in the domain, but it's already added by the access rules, and so, that part is computed too much time in SQL. The web_search_read query, on my personal account takes (build of 4 November) - 3600ms before the change - 490ms after the change Task-4307300 Forward-Port-Of: odoo/enterprise#73269
Purpose ======= During the migration, the owner can be reset, if the user does not have a write access on the documents (because being owner gives all access on the record). Because of that, the filter "My Documents" does not show most of our files on next.odoo.com. To mitigate that, that filter now uses the contact in addition to the owner, and during the migration, if we reset the owner, and if the contact is False, we will set the contact to the partner of the owner. Task-4310779 For
Original PR description
Purpose ======= During the migration, the owner can be reset, if the user does not have a write access on the documents (because being owner gives all access on the record). Because of that, the filter "My Documents" does not show most of our files on next.odoo.com. To mitigate that, that filter now uses the contact in addition to the owner, and during the migration, if we reset the owner, and if the contact is False, we will set the contact to the partner of the owner. Task-4310779 Forward-Port-Of: odoo/enterprise#73357
Draft for a mixed bag of MRP bugfixes for post-freeze 18.0. 1. Fixed the responsible assignment button for Quality Points in the kanban view. 2. Added tooltips to the BoM and indirect demand fields of MPS wizard. Task ID: [4154879](https://www.odoo.com/odoo/966/tasks/4154879) Forward-Port-Of: odoo/enterprise#70847
Original PR description
Draft for a mixed bag of MRP bugfixes for post-freeze 18.0. 1. Fixed the responsible assignment button for Quality Points in the kanban view. 2. Added tooltips to the BoM and indirect demand fields of MPS wizard. Task ID: [4154879](https://www.odoo.com/odoo/966/tasks/4154879) Forward-Port-Of: odoo/enterprise#70847
17 changes
Enhancements to existing features
The stock search view keeps common nearby-date filters visible so users can quickly find relevant warehouse operations. This makes day-to-day inventory checks easier without needing to dig through hidden search options.
Original PR description
The filters has been added to work with the graph overview. However people asks to not hide everything in the search since it's a basic operation 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
Dragging a signing field from the sidebar now shows a preview that matches the final dropped size. This makes document preparation smoother and avoids confusing size changes when placing signature fields.
Original PR description
Before this commit, when onSidebarDragStart was called to start dragging a sign item from the side bar, the placeholder was not resized the same it it is when it is dropped. Therefore the placeholder would see his change change upon releasing the element. taskid: 4164114
When sending a message about a salary offer, the system now automatically suggests the email address of the related employee or applicant. This helps HR teams send offer communications faster and reduces the chance of choosing the wrong recipient.
Original PR description
Offer "send message" will directly propose the email of the offer's employee/applicant. task-4062860
Resolved issues and error corrections
This update prevents a restaurant point-of-sale automated test from failing when a failed-printing pop-up appears. By closing that pop-up before continuing, the test flow becomes more stable and reduces false failures during quality checks.
Original PR description
In this commit, we ensure to close modal (failed printing) before continue the tour or it can cause failures in tour. 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
The mail GIF picker now handles duplicate category names from external GIF data, which could previously cause a crash in some languages such as Portuguese. This improves reliability for users adding GIFs in discussions without changing the visible feature set.
Original PR description
Before this commit, opening of GIF picker in some languages like Portuguese could lead to following crash: ``` OwlError: Got duplicate key in t-foreach: #irritado ``` This happens because GIF picker categories come from Tenor data and there might be duplicated categories. However in code we use `category.name` for `t-key`, thus there was a crash when 2 categories had the same name. This commit fixes the issue by using `category_index` instead, which is the index of category in the global list of categories, which is necessarily unique for each GIF category. opw-4319241
This change updates documentation links across Odoo so they point to the correct 18.0 documentation instead of older or generic versions. It helps users and administrators reach the right guidance for their current Odoo version, reducing confusion when following help links.
Original PR description
same like https://github.com/odoo/odoo/pull/141406 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
The Trial Balance report now correctly displays ending balance amounts when the "Blank if Zero" option is enabled. This prevents non-zero ending balances from being hidden on lines that only have debit or only have credit activity, improving report accuracy for finance users.
Original PR description
To reproduce: - Edit 'Trial Balance' report and enable the "Blank if Zero" option for both debit and credit lines - Open a 'Trial Balance', observe there is no 'End Balance' values for line where there are only debit or only credit amounts. This commit also update the `is_zero` option for end balance columns value to ensure there are correctly shown when "Blank if Zero" option is enabled.
This fixes an error in Colombian online checkout when customers edit a delivery address that is also used for billing. The checkout now shows the required obligation type information in that case, helping customers complete purchases without interruption.
Original PR description
Steps to reproduce: 1. Create a store with Colombian localization. 2. Go to the shop and select any product. 3. Proceed to checkout and try to edit the delivery address. An error occurs when editing the delivery address because the `obligation_types` field is NULL. The issue is caused by the condition in the template ([link to the condition]), which checks only if `address_type` is 'billing'. However, the address type can be 'delivery' when using the delivery address as the billing address, resulting in a null reference in the DOM for the obligation types element. I Updated the condition to check for `(address_type == 'billing' or use_delivery_as_billing)`, ensuring that the obligation types element is displayed correctly when the delivery address is used as the billing address. opw-4309448
This update prevents an error during checkout for Colombian online stores when customers edit a delivery address that is also used for billing. It ensures the required tax obligation information appears in the right situation, helping customers complete purchases without interruption.
Original PR description
Steps to reproduce: 1. Create a store with Colombian localization. 2. Go to the shop and select any product. 3. Proceed to checkout and try to edit the delivery address. An error occurs when editing the delivery address because the `obligation_types` field is NULL. The issue is caused by the condition in the template ([link to the condition]), which checks only if `address_type` is 'billing'. However, the address type can be 'delivery' when using the delivery address as the billing address, resulting in a null reference in the DOM for the obligation types element. Solution: Updated the condition to check for `(address_type == 'billing' or use_delivery_as_billing)`, ensuring that the obligation types element is displayed correctly when the delivery address is used as the billing address. opw-4309448
This change fixes an automated check for the restaurant preparation display by preventing an unrelated printer error message from appearing during the test. It helps keep quality checks stable so future updates can be validated with fewer false failures.
Original PR description
Fix tour test_03_preparation_display_skip_change by unlink printer config to avoid the appear of modal "printing failed".
This update adjusts an automated restaurant preparation display test so it no longer triggers an unrelated printing failure message. This helps keep quality checks stable and reduces false alarms during development.
Original PR description
Fix tour test_03_preparation_display_skip_change by unlink printer config to avoid the appear of modal "printing failed".
Miscellaneous changes
Versions -------- - saas-17.4+ Steps ----- Try to pay with saved payment method. Issue ----- > The payment has been declined: Authentication required. > The financial institution insists on 3-D Secure. Cause ----- Bank may insist on 3-D Secure authentication, failing the payment transaction, which isn't handled in the `payment_token` flow. Solution -------- If 3-D Secure authentication is requested, reset transaction to draft, and attempt redirect flow. > [!Note] > Doe
Original PR description
Versions -------- - saas-17.4+ Steps ----- Try to pay with saved payment method. Issue ----- > The payment has been declined: Authentication required. > The financial institution insists on 3-D Secure. Cause ----- Bank may insist on 3-D Secure authentication, failing the payment transaction, which isn't handled in the `payment_token` flow. Solution -------- If 3-D Secure authentication is requested, reset transaction to draft, and attempt redirect flow. > [!Note] > Doesn't work for automated payments (subscriptions). opw-4223022 Forward-Port-Of: odoo/odoo#184710
Before this commit, when changing the chart type, the data source was not updated. Which was a problem, because the data returned for different chart types is different (eg. pie charts filter empty points). That meant that when changing the chart type from line => pie we displayed a pie with empty points, but when reloading the page the data would change to the correct one. Task: [4306227](https://www.odoo.com/web#id=4306227&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&
Original PR description
Before this commit, when changing the chart type, the data source was not updated. Which was a problem, because the data returned for different chart types is different (eg. pie charts filter empty points). That meant that when changing the chart type from line => pie we displayed a pie with empty points, but when reloading the page the data would change to the correct one. Task: [4306227](https://www.odoo.com/web#id=4306227&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#186810 Forward-Port-Of: odoo/odoo#186110
A traceback occurs when the user tries to filter stock quants by on-hand, if there is no warehouse. To reproduce this issue: 1) Install stock without demo 2) Archive the warehouse 3) Open physical Inventory from operations 4) Filter it through `On-Hand` through the Toggle Search Panel Error:- ``` AttributeError: 'int' object has no attribute 'startswith' ``` When the user archived the warehouse, we get the `domain_loc` as `[(0, '=', 1)]` at line [2]. This is because there is
Original PR description
A traceback occurs when the user tries to filter stock quants by on-hand, if there is no warehouse. To reproduce this issue: 1) Install stock without demo 2) Archive the warehouse 3) Open physical…
A traceback occurs when the user tries to filter stock quants by on-hand, if there is no warehouse. To reproduce this issue: 1) Install stock without demo 2) Archive the warehouse 3) Open physical Inventory from operations 4) Filter it through `On-Hand` through the Toggle Search Panel Error:- ``` AttributeError: 'int' object has no attribute 'startswith' ``` When the user archived the warehouse, we get the `domain_loc` as `[(0, '=', 1)]` at line [2]. This is because there is no location, as the location is derived from the warehouse. If there is no location, it returns three times of`[(0, '=', 1)]` from [1] [1] https://github.com/odoo/odoo/blob/9ce9c6d0d815dcf8fd97fdab484872a607579bd5/addons/stock/models/product.py#L309-L310 [2] https://github.com/odoo/odoo/blob/9ce9c6d0d815dcf8fd97fdab484872a607579bd5/addons/stock/models/stock_quant.py#L240-L241 This leads to the above traceback when `startswith` is used on the first value of the domain which is an integer. https://github.com/odoo/odoo/blob/9ce9c6d0d815dcf8fd97fdab484872a607579bd5/addons/stock/models/stock_quant.py#L180-L184 sentry-6016230486 Forward-Port-Of: odoo/odoo#185628
Steps: - Create a dynamic attribute with some attribute Lines - Create a product with attributes set to the new attribute - Change cost price and save - Reload the webpage Issue: - Cost price changes back to 0 Cause: - `_compute_template_field_from_variant_field` is called on `_compute_standard_price` which sets the value of field to default (false) for variant_count=0 Fix: - Cost price will be invisible for variant_count=0 (only on saved records, to allow products with non-dynam
Original PR description
Steps: - Create a dynamic attribute with some attribute Lines - Create a product with attributes set to the new attribute - Change cost price and save - Reload the webpage Issue: - Cost price changes back to 0 Cause: - `_compute_template_field_from_variant_field` is called on `_compute_standard_price` which sets the value of field to default (false) for variant_count=0 Fix: - Cost price will be invisible for variant_count=0 (only on saved records, to allow products with non-dynamic attributes to still be configured directly on creation). opw-4054647 Forward-Port-Of: odoo/odoo#187308 Forward-Port-Of: odoo/odoo#181836
Sales order created from purchase orders thanks to the inter-company module were assigned the default team of the company, regardless of the customer configuration. This commit makes sure the team is correctly computed in the dedicated compute, ensuring the expected team is assigned to the Sales Order. opw-4166598 Forward-Port-Of: odoo/enterprise#72767
Original PR description
Sales order created from purchase orders thanks to the inter-company module were assigned the default team of the company, regardless of the customer configuration. This commit makes sure the team is correctly computed in the dedicated compute, ensuring the expected team is assigned to the Sales Order. opw-4166598 Forward-Port-Of: odoo/enterprise#72767
When opening a validated quality check from a MO/WO, if the type of the quality check is 'picture', the QC wizard should show the image taken. Forward-Port-Of: odoo/enterprise#73561
Original PR description
When opening a validated quality check from a MO/WO, if the type of the quality check is 'picture', the QC wizard should show the image taken. Forward-Port-Of: odoo/enterprise#73561
6 changes
Enhancements to existing features
This update streamlines the process of handling spreadsheet data, eliminating redundant encoding and decoding steps. This optimization reduces the time it takes to process spreadsheets, specifically improving performance by approximately 70ms. This change enhances the overall responsiveness of the Enterprise module.
Original PR description
This commit removes unnecessary base64 encoding and decoding operations when computing `spreadsheet_data` which contains the serialised json data. Previously, the binary field `spreadsheet_binary_data` was base64-encoded (as is the case with all binary fields), meaning the file was read, encoded to base64, and assigned to `spreadsheet_binary_data`. To retrieve the serialized JSON, it then had to be decoded again. By avoiding this redundant steps, with a spreadsheet file of 16.7Mb, we optimize the time spent in `_compute_spreadsheet_data`: before: ~100ms after: ~30ms Task: 4256155
This update ensures the redirect button label is always present when a redirect URL is set in Odoo Enterprise. This simplifies the user interface by hiding the 'Close' button when a redirect isn't needed, improving clarity and usability. The change also updates the default redirect URL text from 'Open Link' to 'Close'.
Original PR description
This commits makes the redirect button label mandatory when there is a specified redirect URL. It also improves the hiding of the redirect label field when there is no redirect URL specified. task-4174120
Resolved issues and error corrections
This update corrects a display issue where localization fields from the Uruguay localization (l10n_uy_edi) were incorrectly showing on invoices for other countries. This ensures invoices are presented accurately and consistently, regardless of the selected country setting within Odoo Enterprise. The fix improves the user experience and data integrity.
Original PR description
… other country's invoices
This update enhances the error messages displayed when registering the UY EDI proxy in Odoo. The change provides more detailed information to users, making it easier to troubleshoot issues and resolve registration problems. This improves the overall user experience and reduces potential delays caused by unclear error messages.
This update resolves issues where tests were failing due to reliance on demo data. The changes remove this dependency, making tests more reliable and faster to run, ultimately improving the stability of the Odoo Enterprise platform. Several modules were affected, including stock, accounting, and sales.
Original PR description
Forward-Port-Of: odoo/enterprise#72823
This update corrects missing translations for the Modelo349 tax report specifically for Spanish businesses. Ensuring accurate reporting in Spanish is now a priority, improving compliance and user experience for our Spanish-speaking customers.
Original PR description
This commit fix some missing translations for the modelo349 tax report in spain. no-task