Daily updates from Odoo
Navigate
Branch
Tuesday, January 7, 2025
94 changes
16 changes
Enhancements to existing features
Point of Sale now caches repeated price calculations when products are added to an order, reducing delays that grew as carts became larger. This makes adding order lines much faster and improves cashier responsiveness during sales.
Original PR description
**Problem:** A customer experiences a noticeable delay (1 to 2 sec) when adding product in the cart because of lack of caching computations. It gets worse the more orderlines are added in the cart.…
**Problem:**
A customer experiences a noticeable delay (1 to 2 sec) when adding product in
the cart because of lack of caching computations. It gets worse the more
orderlines are added in the cart.
**Solution:**
This commit introduces an implementation of lazy reactive computed value that is
pull-based -- it only recomputes when it's needed. Check the following PR in
odoo/owl for its origin: [odoo/owl#1499](https://github.com/odoo/owl/pull/1499)
This can be used for smart-caching selected getters. In this PR, we made a
getter for the `get_all_prices` method and instead of normal getter access, we
get the result of the getter using the `get` method introduced in the wrapper
class.
This means that in one call stack, calling `get('allPrices')` will only run once
and it will keep returning the cached value until a dependency in its
dependency (calculation) graph changed.
With this patch, adding an orderline is now 300ms -- approximate 5 times faster
than without caching.
Related: https://github.com/odoo/enterprise/pull/67382Resolved issues and error corrections
This update prevents website live chat from crashing on mobile or small screens when an operator has a custom chat display name. Customers can now start and continue live chat conversations reliably in that scenario.
Original PR description
On small displays, starting a new website livechat with an operator that has an `user_livechat_username` crashes when rendering the username.
Steps to reproduce
-----
1. Select User Menu Icon > My Profile / Preferences > enter an Online Chat Name
2. On a mobile device or small window, open the livechat on the website
3. Send any new message
4. The following traceback occurs
```
Caused by: TypeError: Cannot read properties of undefined (reading 'channel_type')
at get authorName
```
Cause
-----
On small displays, `thread` for the default operator message becomes undefined when it is reassigned to the new thread. This causes an error in `get authorName()` when the undefined `thread` is accessed directly to detemine the displayed username.
Solution
-----
Add an optional chain (?) when accessing `this.message.thread` to handle the possible nullish value.
opw-4446208
Backport of odoo/odoo#192605Miscellaneous changes
**Problem**: When selecting all content (`Ctrl+A`) in an empty editable area, the selection includes only a `<br>` element. This causes issues when interacting with non-selectable content inside the selection, leading to unexpected behavior. **Solution**: If the selection contains only on `br` element, reset the selection on click to avoid inconsistent states. **Steps to Reproduce**: 1. Open the editor. 2. Press `Ctrl+A` to select all. 3. Click anywhere within the editable area to hid
Original PR description
**Problem**: When selecting all content (`Ctrl+A`) in an empty editable area, the selection includes only a `<br>` element. This causes issues when interacting with non-selectable content inside the selection, leading to unexpected behavior. **Solution**: If the selection contains only on `br` element, reset the selection on click to avoid inconsistent states. **Steps to Reproduce**: 1. Open the editor. 2. Press `Ctrl+A` to select all. 3. Click anywhere within the editable area to hide the toolbar. 4. Observe that the toolbar remains visible, and the selection state does not update. opw-4438513 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192084
Issue: In Czech Republic, the rate of the 15% tax has changed to 12%. The new rate has already been handled in l10n_cz, but the OSS mapping still uses the old rate. opw-4310264 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192458
Original PR description
Issue: In Czech Republic, the rate of the 15% tax has changed to 12%. The new rate has already been handled in l10n_cz, but the OSS mapping still uses the old rate. opw-4310264 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192458
In 862ede43e5910ae6954f3574f45c213e5d3a1886 the added test depended on being in year 2024, so it failed in eg. 2025. With this change we don't harcode the invoice name in assert data. runbot-error-111390 opw-4050777 Forward-Port-Of: odoo/odoo#192451 Forward-Port-Of: odoo/odoo#192192
Original PR description
In 862ede43e5910ae6954f3574f45c213e5d3a1886 the added test depended on being in year 2024, so it failed in eg. 2025. With this change we don't harcode the invoice name in assert data. runbot-error-111390 opw-4050777 Forward-Port-Of: odoo/odoo#192451 Forward-Port-Of: odoo/odoo#192192
Problem --------- Currently, powerpoints attachments received by a mail alias are deleted. We want to allow them. Solution --------- Add the relevant mimetypes to the white list. no-task no-opw --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192221
Original PR description
Problem --------- Currently, powerpoints attachments received by a mail alias are deleted. We want to allow them. Solution --------- Add the relevant mimetypes to the white list. no-task no-opw --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192221
**Steps to reproduce:** - Install hr_expense - Create 2 alias domains - Go to "Settings / Technical / Email / Aliases" - Check the values for Expense model - Go to Expenses settings - Change the prefix and the domain of the alias - Save - Go to "Settings / Technical / Email / Aliases" - Check the values for Expense model again **Issue:** The prefix has correctly been modified but not the domain. The domain from Expenses settings and the domain of the Expense alias are different.
Original PR description
**Steps to reproduce:** - Install hr_expense - Create 2 alias domains - Go to "Settings / Technical / Email / Aliases" - Check the values for Expense model - Go to Expenses settings - Change the…
**Steps to reproduce:** - Install hr_expense - Create 2 alias domains - Go to "Settings / Technical / Email / Aliases" - Check the values for Expense model - Go to Expenses settings - Change the prefix and the domain of the alias - Save - Go to "Settings / Technical / Email / Aliases" - Check the values for Expense model again **Issue:** The prefix has correctly been modified but not the domain. The domain from Expenses settings and the domain of the Expense alias are different. **Cause:** The domain field in Expenses settings is in fact the Email Domain (alias_domain_id) of the company, which makes no sense to combine the prefix and the domain from 2 different sources. **Solution:** Add a non-stored computed field to map the domain displayed in Expenses settings with the domain of the Expense alias. Not great in stable, but there is no other way if we want to keep the option. opw-4293936 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190252
Purpose of this PR: Enhance the UI styling to address issues caused by the absence of the `o_livechat_no_rating` and `o_livechat_operator_avatar` classes,might removed by other PR's. before:  after:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: o
Original PR description
Purpose of this PR: Enhance the UI styling to address issues caused by the absence of the `o_livechat_no_rating` and `o_livechat_operator_avatar` classes,might removed by other PR's. before:  after:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188754
**Behavior before PR:** In web_studio video command is not allowed in report. However, user can still upload video from media dialog using video tab. **Behavior after PR is merged:** This commit aims to remove videos tab from media dialog if video command is disabled. task-4285231 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187251
Original PR description
**Behavior before PR:** In web_studio video command is not allowed in report. However, user can still upload video from media dialog using video tab. **Behavior after PR is merged:** This commit aims to remove videos tab from media dialog if video command is disabled. task-4285231 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187251
Description of the issue this PR addresses: Current behavior before PR: Triple-clicking to select text, with a nextSibling set as contenteditable false, would reset the selection to its previous state. Desired behavior after PR is merged: Correct the triple click selection when applying font-size. task-4440354 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192139
Original PR description
Description of the issue this PR addresses: Current behavior before PR: Triple-clicking to select text, with a nextSibling set as contenteditable false, would reset the selection to its previous state. Desired behavior after PR is merged: Correct the triple click selection when applying font-size. task-4440354 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192139
**Current behaviour before PR:** In website, when trying to apply color or any style on a link from toolbar whole link gets selected. This happens because in `wysiwyg.js` `destroyLinkTools` method gets called when user clicks on toolbar to apply color. **Behaviour after PR:** Now, any style can be applied on a link without selecting whole link. task-4072867 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#1
Original PR description
**Current behaviour before PR:** In website, when trying to apply color or any style on a link from toolbar whole link gets selected. This happens because in `wysiwyg.js` `destroyLinkTools` method gets called when user clicks on toolbar to apply color. **Behaviour after PR:** Now, any style can be applied on a link without selecting whole link. task-4072867 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191890 Forward-Port-Of: odoo/odoo#180616
**Issue:** When converting a PDF file into a PDF/A compliant file, the result may generate the following error message when parsing it by a PDF/A-3 validator: `The aforementioned EOL marker shall be immediately followed by a % (25h) character followed by at least four bytes, each of whose encoded byte values shall have a decimal value greater than 127 ` **Cause:** A previous fix has moved the four bytes in a conditional operation, but the `%` character has been forgotten. opw-4353108
Original PR description
**Issue:** When converting a PDF file into a PDF/A compliant file, the result may generate the following error message when parsing it by a PDF/A-3 validator: `The aforementioned EOL marker shall be immediately followed by a % (25h) character followed by at least four bytes, each of whose encoded byte values shall have a decimal value greater than 127 ` **Cause:** A previous fix has moved the four bytes in a conditional operation, but the `%` character has been forgotten. opw-4353108 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191326
Description of the issue this PR addresses: I. Commit [1] handled cases of pressing enter at the edge of an anchor, which is a child of an unbreakable element. The commit inserted the `br`'s after anchors; however, it missed the situation where the anchor tags are block elements nested inside an unbreakable element inside a `li`. In this specific case, inserting two `br` tags after a anchor block resulted in the creation of two new lines. This PR handles that case by only inserting one `
Original PR description
Description of the issue this PR addresses: I. Commit [1] handled cases of pressing enter at the edge of an anchor, which is a child of an unbreakable element. The commit inserted the `br`'s after…
Description of the issue this PR addresses: I. Commit [1] handled cases of pressing enter at the edge of an anchor, which is a child of an unbreakable element. The commit inserted the `br`'s after anchors; however, it missed the situation where the anchor tags are block elements nested inside an unbreakable element inside a `li`. In this specific case, inserting two `br` tags after a anchor block resulted in the creation of two new lines. This PR handles that case by only inserting one `br` tag after the anchor, rather than both. II. Previously when changing selection between links in website, when clicking on a link the previous link used to get selected. This commit makes sure that when changing selection in between links it selects the correct link. III. This PR ensures that the link popover closes when the cursor moves outside the link. [1]: https://github.com/odoo/odoo/commit/df6f8dd0c54c40ea7edbd3821ae068d79b1b7af7 task-3631910 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191889 Forward-Port-Of: odoo/odoo#171469
When printing long product names with long variants, the lines were overlapping. Steps to reproduce: ------------------- * Create a product with some long variant names * Setup a kitchen printer * Add the order to a PoS order * Print the order on the kitchen printer > Observation: The product name and variant name are overlapping Before:  After:  After:  opw-4414311 Forward-Port-Of: odoo/odoo#192544
STEPS ----------- 1. Install Contact and 'base_vat' 2. Create a new Indonasian contact with VAT as ID1234567890123456 3. Save -> Connot save whilst the VAT is correct PROBLEM ----------- VAT could be 15 (old numbers) or 16 digits. If there are 15 digits long, the 10th digit is a luhn checksum. In some cases, the 15 digits can be transformed into a 16-digit by adding a 0 in front. In such case, we can verify the luhn checksum like for the 15 digits by removing the 0. However, for newl
Original PR description
STEPS ----------- 1. Install Contact and 'base_vat' 2. Create a new Indonasian contact with VAT as ID1234567890123456 3. Save -> Connot save whilst the VAT is correct PROBLEM ----------- VAT could be 15 (old numbers) or 16 digits. If there are 15 digits long, the 10th digit is a luhn checksum. In some cases, the 15 digits can be transformed into a 16-digit by adding a 0 in front. In such case, we can verify the luhn checksum like for the 15 digits by removing the 0. However, for newly created VAT 16-digits VAT number, there is no checksum. SOLUTION ----------- Allow 16-digit VAT that only contains numbers and does not start with a 0. opw-4402514 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192543
On Virtual IoT Boxes, a landscape report was still printed in portrait. We added the argument required to handle landscape printing. opw-4081884 Forward-Port-Of: odoo/odoo#192634
Original PR description
On Virtual IoT Boxes, a landscape report was still printed in portrait. We added the argument required to handle landscape printing. opw-4081884 Forward-Port-Of: odoo/odoo#192634
30 changes
Enhancements to existing features
Users can now open spreadsheet attachments directly in the spreadsheet application from the attachment list. This makes it faster to access and edit spreadsheet files without extra steps, improving day-to-day document workflows.
Original PR description
This commit makes it possible to open spreadsheet attachments directly in the spreadsheet application, facilitating the process of accessing and editing spreadsheet documents from the attachment list. task-3829519
This update modernizes internal filtering logic used in data cleaning and project task features. It should preserve existing behavior while making the code easier to maintain and align with current platform practices.
Original PR description
task-4280707 odoo/odoo#191784
Standard project users will no longer see certain field service report actions or a map alert that could lead to access errors. This makes the project and field service experience clearer by only showing options users can actually use.
Original PR description
_*=industry_fsm_report Purpose: ==== Enhance user experience preventing access errors,by hiding specific actions and bootstrap map view alert for project users. Changes: ======= Hide actions for group project user - Hide the bootstrap alert in the map view - Hide the Send Report action - Hide the Field Service Report action task-3814575
Helpdesk learning content links now use the correct website address format, reducing the chance that users are sent to the homepage instead of the intended page. This improves navigation from helpdesk pages and related communications without changing the visible user experience.
Original PR description
In version 16.0, we have fixed the issue of the button “Go to website” that was redirecting users to the home page instead of the intended URL for record with no website (see odoo/odoo#148103). However, this fix didn't solve the underlying problem which is that the website_url is an absolute URL instead of relative one in some model (slide_channel, slide_slide, ...). We solve here the root cause by making the website_url relative and add a new field website_absolute_url. This field replaces website_url in the modified projects (mails, views, ...). Of course, we leave website_url untouched in other modules where it must be relative. Especially for the method open_website_url of website.published.mixin. Note that in some places the absolute URL could be replaced by a relative one (when a link is displayed on the same website) but as it is functionally equivalent, we keep them absolute to keep the changes simple. Task-3844851
Mexican CFDI information is now visible in account move lists beyond outgoing invoices, helping teams review vendor and other accounting documents more easily. Payments also show the fiscal folio, making it simpler to identify and reconcile CFDI-related payment records.
Original PR description
Allow viewing CFDI information in the list view for all account moves, not only outgoing invoices. Also, display the fiscal folio as part of the CFDI information in payments.
This update standardizes the loading spinner icon used across several Odoo applications. It creates a more consistent visual experience when users wait for refreshes, syncing, reports, or other background actions to complete.
Original PR description
*:account_online_payment,account_online_synchronization,appointment,hr_contract_salary,hr_payroll,knowledge,l10n_in_reports_gstr,sale_subscription,social_youtube,spreadsheet_edition,website_appointment Our spinner icons are inconsistent, sometimes using `fa-refresh` or `fa-spinner` this commit replaces the inconsistent icons to use `fa-circle-o-notch` instead. task-3861323 Community PR: https://github.com/odoo/odoo/pull/190733
This update consolidates how products are added to the shopping cart across rental, subscription, delivery, and website sales flows. It makes future changes easier to maintain and helps provide a more consistent checkout experience for customers.
Original PR description
*: sale_renting, sale_subscription, website_delivery_sendcloud, website_sale_renting, website_sale_stock_renting, website_sale_subscription. Adapt to community changes: Cart updates were scattered…
*: sale_renting, sale_subscription, website_delivery_sendcloud, website_sale_renting, website_sale_stock_renting, website_sale_subscription. Adapt to community changes: Cart updates were scattered across multiple areas, with the most advanced implementation residing in the WebsiteSale widget. This fragmented approach made it challenging to override or extend functionality, as developers had to implement changes in various locations and consider multiple dependent processes, such as triggering configurators or handling notifications. Additionally, snippets often required extending the entire WebsiteSale widget logic instead of just public widget's, leading to heavier load times and unnecessary complexity. To address this, the 'Add to Cart' logic has been extracted into a dedicated, easily overridable service. This new tool can be invoked from any public widgets or OWL components, streamlining and centralizing the cart update process. <details> <summary>CLOC</summary> ``` cloc-2.02.pl --include-lang="Python,Javascript,xml" --git --diff master master-website_sale-poc_add_to_cart-vcr ``` ``` ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- JavaScript same 0 0 83 674 modified 14 0 4 40 added 0 1 21 19 removed 3 5 5 61 Python same 0 0 33 433 modified 7 0 0 1 added 1 7 3 53 removed 0 7 6 51 XML same 0 0 3 460 modified 1 0 0 1 added 0 0 0 0 removed 0 0 0 0 ------------------------------------------------------------------------------- SUM: same 0 0 119 1567 modified 22 0 4 42 added 1 8 24 72 removed 3 12 11 112 ------------------------------------------------------------------------------- ``` </details> Related PRs: - https://github.com/odoo/odoo/pull/158473 - https://github.com/odoo/upgrade/pull/6923 task-3820946
Features or functions removed from Odoo
Unused test-related code was removed from the Planning and Planning Contract areas. This cleanup reduces maintenance overhead without changing business features or user workflows.
Original PR description
Removed all the unused functionality of qunit test cases. task-4354323
Code cleanup and technical improvements
This update standardizes how several business modules run database queries, replacing older iteration patterns with a newer shared approach. It should not change day-to-day workflows, but helps keep accounting, payroll, and tax reporting code easier to maintain and less prone to future issues.
Original PR description
odoo/odoo#192680
Miscellaneous changes
When the scale precision is half or quarter, the number of grid columns is this.columnCount * this.model.metaData.scale.cellPart + 1 and not this.columnCount + 1 as was assumed in aggregatePills. This led to a bad computation of aggregates in columns sufficiently far on the right of the gantt view in precision half or quarter. Note that this error was not detected before because many gantt views do not use that precisions or split groups anyway (via shouldMergeGroups). Forward-Port-Of: odoo/en
Original PR description
When the scale precision is half or quarter, the number of grid columns is this.columnCount * this.model.metaData.scale.cellPart + 1 and not this.columnCount + 1 as was assumed in aggregatePills. This led to a bad computation of aggregates in columns sufficiently far on the right of the gantt view in precision half or quarter. Note that this error was not detected before because many gantt views do not use that precisions or split groups anyway (via shouldMergeGroups). Forward-Port-Of: odoo/enterprise#76610
task-4418589 Forward-Port-Of: odoo/enterprise#76451 Forward-Port-Of: odoo/enterprise#76089
Original PR description
task-4418589 Forward-Port-Of: odoo/enterprise#76451 Forward-Port-Of: odoo/enterprise#76089
Before this commit, spans with no attribute and no special style were unwrapped by the OdooEditor, meaning the span itself disappeared, leaving its content in the parent element. This behavior breaks translations, as the whole span is used as a key to match translations After this commit, those spans are not removed. opw-3746922 opw-4318712 [++] Forward-Port-Of: odoo/enterprise#76551 Forward-Port-Of: odoo/enterprise#75962
Original PR description
Before this commit, spans with no attribute and no special style were unwrapped by the OdooEditor, meaning the span itself disappeared, leaving its content in the parent element. This behavior breaks translations, as the whole span is used as a key to match translations After this commit, those spans are not removed. opw-3746922 opw-4318712 [++] Forward-Port-Of: odoo/enterprise#76551 Forward-Port-Of: odoo/enterprise#75962
Before this PR, the upload button was hidden in the document view due to an incorrectly set context. After this PR, the context is properly set, and the condition to hide the button is updated to apply only in the activity view. Forward-Port-Of: odoo/enterprise#75835
Original PR description
Before this PR, the upload button was hidden in the document view due to an incorrectly set context. After this PR, the context is properly set, and the condition to hide the button is updated to apply only in the activity view. Forward-Port-Of: odoo/enterprise#75835
When a customer creates a global invoice, a traceback will appear. Steps to reproduce the error: - Install ``l10n_mx_edi`` module > Switch to Mexican company - Create an invoice without customer and product > Save - Go back to List view of invoices - Select that invoice > Actions > Create Global Invoice Traceback: ``` File "home/odoo/src/enterprise/18.0/l10n_mx_edi/wizard/l10n_mx_edi_global_invoice_create.py", line 23, in default_get invoices = source_invoices._l10n_mx_edi_check
Original PR description
When a customer creates a global invoice, a traceback will appear. Steps to reproduce the error: - Install ``l10n_mx_edi`` module > Switch to Mexican company - Create an invoice without customer and…
When a customer creates a global invoice, a traceback will appear.
Steps to reproduce the error:
- Install ``l10n_mx_edi`` module > Switch to Mexican company
- Create an invoice without customer and product > Save
- Go back to List view of invoices
- Select that invoice > Actions > Create Global Invoice
Traceback:
```
File "home/odoo/src/enterprise/18.0/l10n_mx_edi/wizard/l10n_mx_edi_global_invoice_create.py", line 23, in default_get
invoices = source_invoices._l10n_mx_edi_check_invoices_for_global_invoice()
File "home/odoo/src/enterprise/18.0/l10n_mx_edi/models/account_move.py", line 306, in _l10n_mx_edi_check_invoices_for_global_invoice
invoices_str = ", ".join(failed_invoices.mapped('name'))
TypeError: sequence item 0: expected str instance, bool found
```
https://github.com/odoo/enterprise/blob/01f749f40fc4b5f9708696dc42eab7125e790b28/l10n_mx_edi/models/account_move.py#L306 When a customer creates a new invoice, ``name`` will be False,
When the customer tries to create global invoice,
So it will lead to the above traceback.
sentry-6197401330
Forward-Port-Of: odoo/enterprise#76515In this commit, we fix 4 tours by being more precise on the triggers and/or adding intermediate steps to ensure the proper conduct of the tour. We take advantage of this commit to linter the tour files. Forward-Port-Of: odoo/enterprise#76339 Forward-Port-Of: odoo/enterprise#75732
Original PR description
In this commit, we fix 4 tours by being more precise on the triggers and/or adding intermediate steps to ensure the proper conduct of the tour. We take advantage of this commit to linter the tour files. Forward-Port-Of: odoo/enterprise#76339 Forward-Port-Of: odoo/enterprise#75732
Versions -------- - 18.0+ Community: https://github.com/odoo/odoo/pull/190096 Steps ----- 1. In eCommerce, enable extra step during checkout; 2. modify extra step form by adding another field; 3. save changes; 4. as a public or portal user, add item cart; 5. go to checkout; 6. upload file in extra step; 7. go to payment. Issue ----- Form cannot be submitted due to error. Cause ----- eCommerce uses the `extract_data` method from the `WebsiteForm` controller. Several othe
Original PR description
Versions -------- - 18.0+ Community: https://github.com/odoo/odoo/pull/190096 Steps ----- 1. In eCommerce, enable extra step during checkout; 2. modify extra step form by adding another field; 3.…
Versions -------- - 18.0+ Community: https://github.com/odoo/odoo/pull/190096 Steps ----- 1. In eCommerce, enable extra step during checkout; 2. modify extra step form by adding another field; 3. save changes; 4. as a public or portal user, add item cart; 5. go to checkout; 6. upload file in extra step; 7. go to payment. Issue ----- Form cannot be submitted due to error. Cause ----- eCommerce uses the `extract_data` method from the `WebsiteForm` controller. Several other modules also have overrides that may get called on checkout via super, but don't use `sudo` to check the `model` name for their module-specific logic, leading to access errors. This isn't always an issue, depending on the order they're called in. If the model name is read once into cache using `sudo`, access rights are no longer checked. Commit [1] combined with commit [2] added an `extract_data` override to website_hr_recruitment which checks `model.model` before calling `super`, which means the `model.model` value hasn't been cached yet, and an access error is thrown when called as Public User. Solution -------- Add `sudo` to any `model.model` check in `WebsiteForm` overrides to make the `sudo` requirement explicit (and not rely on ORM caching behavior). [1]: https://github.com/odoo/odoo/commit/75b385b [2]: https://github.com/odoo/odoo/commit/05f9f43 opw-4376165 Forward-Port-Of: odoo/enterprise#75382
After importing a website, it was not possible to drag and drop new blocks. You could still edit them but not add new ones. Fixed it by changing the way the snippets are added into the view. Forward-Port-Of: odoo/enterprise#75849
Original PR description
After importing a website, it was not possible to drag and drop new blocks. You could still edit them but not add new ones. Fixed it by changing the way the snippets are added into the view. Forward-Port-Of: odoo/enterprise#75849
This commit add a new way to deal with eTIms in the pos application. Before this commit, the only way of sending sales to etims was to generate the invoice while creating the pos order, then deal with the invoice later on. Now, everything is automated in the pos order directly, that means when the user post a pos order, she's directly send to etims and all the information returned are displayed on the receipt and the order view. In case the eTims process got an error, the user can still se
Original PR description
This commit add a new way to deal with eTIms in the pos application. Before this commit, the only way of sending sales to etims was to generate the invoice while creating the pos order, then deal with the invoice later on. Now, everything is automated in the pos order directly, that means when the user post a pos order, she's directly send to etims and all the information returned are displayed on the receipt and the order view. In case the eTims process got an error, the user can still send the order to eTims from the pos_order view. Stock moves are also send at the same time thanks to the l10n_ke_edi_oscu_stock module. task-3876855 Forward-Port-Of: odoo/enterprise#76499 Forward-Port-Of: odoo/enterprise#76247
Purpose ======= Rename Share Availabilities's Dropdown Menus as following: - Select Dates → Propose Slots - Any Time → Share Calendar Rename Appointment Categories Values as following: - Custom → Specific Slots - Recurring → Regular - Any Time → Shared Calendar Add a 'Share' button on Appointment Type Kanban View, that opens a Custom Link modal to share a appointment link -> Remove 'More Options' button in 'Share Availabilities' form view, as it will covered via a generic bu
Original PR description
Purpose ======= Rename Share Availabilities's Dropdown Menus as following: - Select Dates → Propose Slots - Any Time → Share Calendar Rename Appointment Categories Values as following: - Custom → Specific Slots - Recurring → Regular - Any Time → Shared Calendar Add a 'Share' button on Appointment Type Kanban View, that opens a Custom Link modal to share a appointment link -> Remove 'More Options' button in 'Share Availabilities' form view, as it will covered via a generic button. Task-4221267 Forward-Port-Of: odoo/enterprise#76553 Forward-Port-Of: odoo/enterprise#71461
task-4452840 Related to odoo/odoo#192540 Forward-Port-Of: odoo/enterprise#76559
Original PR description
task-4452840 Related to odoo/odoo#192540 Forward-Port-Of: odoo/enterprise#76559
Following 044da127dc977f124c3d0d105dbe3712113f14fb, the populate tool was refactored and doesn't use specific scripts by modules anymore. It seems the populate scripts for the whatsapp module cd7dfa8828cb6b2fb4aa5c35564210e7f4f876da were introduced around the same time the refactoring of the populate itself. Forward-Port-Of: odoo/enterprise#76550 Forward-Port-Of: odoo/enterprise#76484
Original PR description
Following 044da127dc977f124c3d0d105dbe3712113f14fb, the populate tool was refactored and doesn't use specific scripts by modules anymore. It seems the populate scripts for the whatsapp module cd7dfa8828cb6b2fb4aa5c35564210e7f4f876da were introduced around the same time the refactoring of the populate itself. Forward-Port-Of: odoo/enterprise#76550 Forward-Port-Of: odoo/enterprise#76484
Base users do not have access to the model `spreadsheet.revision` which is directly affected in a collaborative context. The usual flow consists to give access to the revisions once we check the access rights on the related spreadsheet. The code that handled the restoration of previous versions did not follow this flow and base users would face access errors. Task-4397512 Forward-Port-Of: odoo/enterprise#76525 Forward-Port-Of: odoo/enterprise#75474
Original PR description
Base users do not have access to the model `spreadsheet.revision` which is directly affected in a collaborative context. The usual flow consists to give access to the revisions once we check the access rights on the related spreadsheet. The code that handled the restoration of previous versions did not follow this flow and base users would face access errors. Task-4397512 Forward-Port-Of: odoo/enterprise#76525 Forward-Port-Of: odoo/enterprise#75474
Steps to reproduce: 1. Go to a folder and open its chatter 2. Use the attachment button to upload a document 3. It renames the existing folder with the uploading attachment. Technical Reason: The issue occurs because, starting from version 18.0, folders are treated as documents but have an empty 'attachment_id'. Without distinguishing folders from other documents, the logic incorrectly assigns 'attachment_id' to folders when uploading documents. Adding a condition to exclude folders (doc
Original PR description
Steps to reproduce: 1. Go to a folder and open its chatter 2. Use the attachment button to upload a document 3. It renames the existing folder with the uploading attachment. Technical Reason: The issue occurs because, starting from version 18.0, folders are treated as documents but have an empty 'attachment_id'. Without distinguishing folders from other documents, the logic incorrectly assigns 'attachment_id' to folders when uploading documents. Adding a condition to exclude folders (document.type != 'folder') ensures folder metadata remains unaffected. After this commit: folder name will not be affected by uploading the attachment from chatter. Task-4368920 Forward-Port-Of: odoo/enterprise#75098
Steps to reproduce: - Activate debug mode - Go to Accounting/Configuration/Accounting Reports/Depreciation Schedule - Deactivate the journals filter - open the depreciation schedule -> Traceback because it can't iterate on None Type object opw-4364589 Forward-Port-Of: odoo/enterprise#76514
Original PR description
Steps to reproduce: - Activate debug mode - Go to Accounting/Configuration/Accounting Reports/Depreciation Schedule - Deactivate the journals filter - open the depreciation schedule -> Traceback because it can't iterate on None Type object opw-4364589 Forward-Port-Of: odoo/enterprise#76514
**: enhancements, ubereats This commit introduces several enhancements to the Point of Sale UrbanPiper module to meet the specific requirements for the US and UK regions. In this commit: === - Added store timing configuration for `pos.config` to enable flexible operational hours. - Implemented handling of the option toggle. - Added the access code in order information for Uber Eats to streamline order identification. - Included delivery address on the receipt. - Added a delivery ide
Original PR description
**: enhancements, ubereats This commit introduces several enhancements to the Point of Sale UrbanPiper module to meet the specific requirements for the US and UK regions. In this commit: === - Added…
**: enhancements, ubereats This commit introduces several enhancements to the Point of Sale UrbanPiper module to meet the specific requirements for the US and UK regions. In this commit: === - Added store timing configuration for `pos.config` to enable flexible operational hours. - Implemented handling of the option toggle. - Added the access code in order information for Uber Eats to streamline order identification. - Included delivery address on the receipt. - Added a delivery identifier in the POS order backend view. - Introduced functionality to handle scheduled (future) orders. - Include the order number in the invoice as it is essential for accurately locating and referencing order details. - Implemented functionality for self-delivery orders, allowing shop/restaurant to update the order status as dispatched and completed to ensure accurate tracking and status updates. - Implemented functionality to send updates for the external order reference, ensuring seamless synchronization and accurate tracking across systems. - For the US & UK region, addressed an issue with UrbanPiper requiring the entire product catalog. Added logic to differentiate between regions and ensure the entire product catalog is sent when necessary. For the US and UK regions, these features are mandatory before going live. Implementing them in 18.0 ensures that the module meets regional requirements, avoids delays in deployment, and maintains compatibility with existing stable releases. task-4361079 Related: https://github.com/odoo/odoo/pull/188563 Forward-Port-Of: odoo/enterprise#76444 Forward-Port-Of: odoo/enterprise#74555
Some 2024 years were encoded in test files. Forward-Port-Of: odoo/enterprise#76393
Original PR description
Some 2024 years were encoded in test files. Forward-Port-Of: odoo/enterprise#76393
Before this commit, one tour searched in a dropdown and clicked on an item representing a field of a model, without waiting for the dropdown to update. Because tours' behavior change rapidly in an effort to strengthen them, this undeterminism was not detected before. runbot-error-111417 runbot-error-111192 Forward-Port-Of: odoo/enterprise#76539
Original PR description
Before this commit, one tour searched in a dropdown and clicked on an item representing a field of a model, without waiting for the dropdown to update. Because tours' behavior change rapidly in an effort to strengthen them, this undeterminism was not detected before. runbot-error-111417 runbot-error-111192 Forward-Port-Of: odoo/enterprise#76539
In this commit, we add few steps that wait communication shadow root is in DOM before to continue the tour to avoid rerendering just before clicking on items. Forward-Port-Of: odoo/enterprise#76466 Forward-Port-Of: odoo/enterprise#76429
Original PR description
In this commit, we add few steps that wait communication shadow root is in DOM before to continue the tour to avoid rerendering just before clicking on items. Forward-Port-Of: odoo/enterprise#76466 Forward-Port-Of: odoo/enterprise#76429
Add missing english labels for the `l10n_mx_nationality` and `l10n_mx_type_of_operation`fields.  task-no Forward-Port-Of: odoo/enterprise#76151 Forward-Port-Of: odoo/enterprise#76038
Original PR description
Add missing english labels for the `l10n_mx_nationality` and `l10n_mx_type_of_operation`fields.  task-no Forward-Port-Of: odoo/enterprise#76151 Forward-Port-Of: odoo/enterprise#76038
Steps to reproduce: 1. Install accounting app 2. Install l10n_nl 3. Select the nl company 4. From settings, under "Default Accounts", the "Dutch VAT Rounding {Profit|Loss} Account" are readonly. Fix: Adding `readonly=False` to the `l10n_nl_rounding_difference_loss_account_id` and `l10n_nl_rounding_difference_profit_account_id` fields. opw-4380635 Forward-Port-Of: odoo/enterprise#76010
Original PR description
Steps to reproduce:
1. Install accounting app
2. Install l10n_nl
3. Select the nl company
4. From settings, under "Default Accounts", the "Dutch VAT Rounding {Profit|Loss} Account" are readonly.
Fix:
Adding `readonly=False` to the `l10n_nl_rounding_difference_loss_account_id` and `l10n_nl_rounding_difference_profit_account_id` fields.
opw-4380635
Forward-Port-Of: odoo/enterprise#7601047 changes
Enhancements to existing features
The Israeli localization now loads Hebrew translations for tax account tag names such as VAT Sale and VAT Input. This improves compliance with local conventions and makes accounting labels clearer for Hebrew-speaking users.
Original PR description
Labels such as 'Vat Sale' or 'Vat Input' have to be translated for the israely conventions. Change: - Load the hebrew translation for the account tags name field in the try_loading function --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Event registration confirmation emails are now pushed through the email queue immediately when asynchronous sending is used. This reduces delays for attendees and makes confirmations arrive closer to the timing users expect.
Original PR description
In async mode, trigger both the Mail Scheduler and the Email Queue Manager. Rationale ========= By default, the Email Queue Manager is run once an hour. In case of the event registration confirmation, it can lead to a lag between the confirmation and the email received. However, end users tend to expect a confirmation email incoming within a few minutes. By triggering the email queue, it leads to a behavior which is closer to the synchronous configuration.
Kanban app cards now keep their action buttons aligned at the bottom, even when descriptions have different lengths. Description text is also easier to read thanks to improved line spacing, creating a more consistent and polished app list experience.
Original PR description
Before this commit, there was a misalignment issue with the buttons in the cards due to varying text lengths in the description. This caused the buttons to appear at different vertical positions, disrupting visual consistency. Now, the layout ensures that all buttons are aligned at the bottom of the cards regardless of the description length, and also the desc is a bit more readable with improved line spacing. | Before | After | |--------|--------| |  |  | task-4357026 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This fixes an issue in the HTML editor where hidden collaborator avatars could still be selected and prevent users from moving content blocks. The change makes those avatars truly non-selectable when hidden, improving collaborative editing reliability.
Original PR description
Description of the issue this PR addresses: Current behavior before PR: It was not possible to use the move node handler when the collaborator is on the same node, because the collaboration avatar is hidden using opacity 0 which still allowed the avatar to be selectable. Desired behavior after PR is merged: Hide the collaboration avatar using visibility hidden, ensuring it is not selectable. task-4348275 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Tests now keep Peppol in demo mode by default, so they use mocked behavior instead of contacting real or sandbox Peppol services. This makes automated testing safer and more reliable when Peppol is installed alongside other accounting modules.
Original PR description
Context: In Peppol, we have multiple EDI mode: - `production` that will call the real Peppol infrastructure, - `test` that will call the sandbox Peppol, - `demo` that makes no call at all, everything is mocked. By default, runbots and demo data are set to `demo`. In tests, the value is therefore also `demo`, which is what we want: No call to external services. Before this commit, we were doing some weird and useless override in the handling of demo functions, which is useless: if you want to test Odoo in a particular mode, just set it (this is what we do in Peppol tests' `setUpClass`), for all other tests, keeping the default demo mode should be preferred. This was a problem because tests ran by other modules with Peppol installed were trying to make external calls. task-no
Product margin reporting no longer triggers unnecessary database updates when grouping or aggregating product margin fields. This prevents misleading modification timestamps and reduces avoidable background work, without changing the reported business values.
Original PR description
When we aggregate one of the field of "product.product" introduced by 'product_margin' module, it will generate a SQL update on all records read. It is because we call the compute method manually without protecting computed fields, which will lead to call BaseModel.write() that update write_date/write_uid. Fix it by calling `compute_value` of one of the field. ### Notes - Should we backport it in 17.0 but then we need to backport https://github.com/odoo/odoo/pull/155585 too ? Also for the 16.0 ? - For master: remove the return of `_compute_product_margin_fields_values`, people shouldn't call that manually too avoid the issue mention in the commit message.
This change separates invoice-specific processing from shared EDI import logic so purchase orders no longer receive invoice-only fields. It prevents errors when importing orders from EDI data while keeping invoice imports unaffected.
Original PR description
Steps: - Install sale app. - Upload PO field which contain EDI data. Issue: - Order is not imported properly and giving error. Cause: - When `_retrieve_line_vals` call from order edi it should not contain invoice related values but when `account.move.line` has `deferred_start_date` and `deferred_end_date` it return those field even it called from order edi and SOL does not contain those fields Fix: - Move invoice related specific code in other method and only keep generic code which can be used in both invoice and order in generic method to ensure there is no invoice flow impacted by order edi and vice versa. Issued PR: https://github.com/odoo/odoo/pull/191487
This update prevents the website editor from accidentally removing spaces between inline content and avoids errors when users outdent list items that contain only empty content. It helps make editing formatted text more reliable and reduces interruptions for users working with lists.
Original PR description
[FIX] html_editor: space removal by wrapInlinesInBlocks <- fix required for the following one [FIX] html_editor: outdent list item with empty nodes task-4398327
This fix ensures sales order lines still calculate the correct price when the unit price field is made read-only through customization. It prevents affected orders from accidentally showing zero-priced amounts, reducing billing and quotation errors.
Original PR description
The new `technical_price_unit` logic was introduced to reduce/prevent unexpected price recomputations when the price is manually updated on sale order lines. Nevertheless, if the price_unit field is made readonly (through studio or any custom view ...), the price would stop being sent to the server by the client, resulting in zero-priced amounts because the presence of the technical price discarded the price recomputation, leading to the default 0 value. This commit makes sure that in this situation, the technical price sent by the client is dropped, ensuring that the price is correctly computed. opw-4319211
Users downloading a PDF from the bank statement list will now receive the selected bank statement instead of an unrelated accounting document or an error. This removes a confusing duplicate download option and helps accounting teams access the right statement reliably.
Original PR description
In Bank Statement list view users may select a statement and download a pdf report. However, currently, users have 2 download action, one of which is downloading a seemingly random account move Steps to reproduce: - In Accounting Dashboard, from a bank journal card, 3 dots > Statements - Select a line - Download > PDF Issue: PDF target is loaded via the `loadExtraPrintItems` method However, the request is done to the `account.move` model using the id of the bank statement, so it may retrieve an invoice, or fail Note: Download > Statement is working properly A solution is to avoid loading extra print item with loadExtraPrintItems if we are not in the `account.move` model opw-4388554
This fixes a point of sale issue where the product search bar disappeared after navigating back from the payment screen. Cashiers can now resume searching products immediately, reducing checkout friction.
Original PR description
Before this commit, when going back from the payment screen to the product screen, the search bar wasn't visible. opw-4318710 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Importing a price list rule with only a product variant will now automatically fill in the related product template. This prevents imported rules from appearing incomplete or behaving unexpectedly, helping pricing data stay reliable.
Original PR description
Since recent changes to the pricelists rules, importing a rule with the 'Product Variant' field value specified but not the template field value led to incomplete rules not being displayed (and maybe not even behaving) as expected. This commit makes sure that if the template was forgotten in the create values, it's correctly deduced from the given product.product record. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Hungarian electronic invoice reports now display the invoice number correctly when using newer document layouts. This prevents missing invoice identifiers on printed or PDF invoices, reducing confusion and compliance risk for Hungarian customers.
Original PR description
Since the introduction of new layouts (e.g. folder), the invoice number is not displayed in Hungary. This is because the xpath is incorrect because the new layouts now have two children instead of…
Since the introduction of new layouts (e.g. folder), the invoice number is not displayed in Hungary. This is because the xpath is incorrect because the new layouts now have two children instead of one. The old ones only had one child node: https://github.com/odoo/odoo/blob/4dad76c045f94861632929189baa96d69f662275/addons/web/views/report_templates.xml#L478-L506 Whereas the new ones have two: https://github.com/odoo/odoo/blob/4dad76c045f94861632929189baa96d69f662275/addons/web/views/report_templates.xml#L535-L550 https://github.com/odoo/odoo/blob/4dad76c045f94861632929189baa96d69f662275/addons/web/views/report_templates.xml#L551-L579 So the problem with the current xpath is that it's replacing both children, even though only the second one should be. By 'replacing' the first one (by iffing it), `layout_document_title` is not displayed anymore and therefore no invoice number appears on the invoice. To fix this, we use a different xpath on the `img` parent. For consistency and maintainability reasons, we apply this new xpath on all the layouts and not just the new ones. opw-4397438
Adding rows or columns in the HTML editor no longer forces tables to adopt fixed widths or heights when they were originally flexible. This preserves the intended layout behavior and reduces unwanted formatting changes for users editing website or document content.
Original PR description
### Steps to reproduce: - Insert a table. - Observe the HTML, noticing that the table does not have a fixed width or height. - Insert a new column or row. - Observe the HTML, noticing that the width and/or height of the table has been fixed. ### Description of the issue/feature this PR addresses: - When a new column is inserted into the table, the table's width is fixed, and the widths of the first row/column cells (TDs and THs) are also fixed. - When a new row is inserted, the height is added to the table rows (TRs), even if the table initially did not have fixed dimensions. ### Desired behavior after PR is merged: - The width and height of the table will not be fixed when a new column or row is added, as long as the table did not have fixed dimensions (width/height) to begin with. task-4402552
This fixes how Point of Sale reports changes when a note is added or edited on an existing order line. Preparation screens and kitchen tools will no longer mistake a note update for an entirely new item, reducing confusion and duplicate preparation work.
Original PR description
The return value of [`changesToOrder`](https://github.com/abichinger/odoo/blob/74273fea6a9c7f57da95aa120fd2767443822c46/addons/point_of_sale/static/src/app/models/utils/order_change.js#L1) is missing…
The return value of [`changesToOrder`](https://github.com/abichinger/odoo/blob/74273fea6a9c7f57da95aa120fd2767443822c46/addons/point_of_sale/static/src/app/models/utils/order_change.js#L1) is missing a line inside the `cancelled` array, while updating the note of an existing order line. From the POV of a preperation tool, this makes it look like a new item has been added to the order.
https://github.com/user-attachments/assets/618263ac-0a61-42f2-b662-10e1ae63e39f
While recording the video I captured the following values from `changesToOrder`
```jsonc
// 1st output after the orderline was created
{
"new": [
{
"uuid": "db47ade6-c8e1-47e1-8dcc-8c43ef67de8a",
"name": "Coca-Cola",
"product_id": 100,
"attribute_value_ids": [],
"quantity": 1,
"note": "",
"pos_categ_id": 10,
"pos_categ_sequence": 0
}
],
"cancelled": []
}
// 2nd output after the note was added
{
"new": [
{
"uuid": "db47ade6-c8e1-47e1-8dcc-8c43ef67de8a",
"name": "Coca-Cola",
"product_id": 100,
"attribute_value_ids": [],
"quantity": 1,
"note": "Zero",
"pos_categ_id": 10,
"pos_categ_sequence": 0
}
],
"cancelled": []
}
```
I would expect the second output to look like this
```jsonc
{
"new": [
{
"uuid": "db47ade6-c8e1-47e1-8dcc-8c43ef67de8a",
"name": "Coca-Cola",
"product_id": 100,
"attribute_value_ids": [],
"quantity": 1,
"note": "Zero",
"pos_categ_id": 10,
"pos_categ_sequence": 0
}
],
"cancelled": [
{
"uuid": "db47ade6-c8e1-47e1-8dcc-8c43ef67de8a",
"name": "Coca-Cola",
"product_id": 100,
"attribute_value_ids": [],
"quantity": 1,
"note": "",
"pos_categ_id": 10,
"pos_categ_sequence": 0
}
]
}
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prRestaurant staff using an open point-of-sale screen will now see new unpaid self-orders appear automatically, without needing to manually open the orders list. This helps teams respond faster to mobile orders and keeps multiple restaurant stations better synchronized.
This fixes demo mode for Peppol electronic invoicing after a previous internal change left some connection calls using an outdated path. Demo environments should no longer hit errors when testing Peppol flows, making demonstrations and trials more reliable.
Original PR description
With previous refactor, we simplified the demo mode by trying to mock the fewer methods possible. In particular, we are aligning all calls to proxy to go through the `_call_peppol_proxy(...)`. This should simplify future refactoring work to get rid of account_edi_x models. Some calls to make_request were still existing, since it's no longer mocked in demo mode, an error is raised. Replace all those calls to use the `_call_peppol_proxy` method. task-no
This fix makes automated website tours wait until popup windows are fully displayed before continuing. It reduces false test failures caused by tours trying to interact with popup content too early, improving reliability for event, forum, and newsletter website flows.
Original PR description
In this commit, we wait the modal is shown (managed by jQuery) before to continue the tour. In these modals, if we don't wait for the modal is shown, as the tour engine can be too much fast, element in modal can be not focusable when we try to target it. This fix add classes to ensure modal is shown before continuing the 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
This fix ensures Danish businesses using the 0184 identifier scheme send the VAT number in the format required by PEPPOL rules. It helps prevent electronic invoices from being rejected due to non-compliant company identifiers.
Original PR description
Based on PEPPOL-COMMON-R042 (https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-COMMON-R042/) when using the 0184 scheme the VAT number should be used (CVR number prefixed by the country code) @JulienVR @smetl --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures that when users create a new bank statement from the transaction list and enter a custom name, Odoo keeps that name instead of replacing it automatically. It prevents confusion and rework during bank reconciliation workflows.
Original PR description
Step to reproduce * open the reconcilation widget and toggle the list view * multi edit bank statement lines and assign them a new bank statement with name 'BLABLA 1' * click save and see how Odoo just didn't keep your name at all The reason is that during the initial creation of the statement, a value is given to end_date which triggers to recomputation of the name, regardless of if the statement already had a name or not. So to fix that, we simply only try to compute the name for statements that don't have one yet ticket-4424021 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
Uploading or generating Factur-X invoices without currency information no longer causes an error. The system now uses the company's default currency when no currency is provided, helping invoice processing continue smoothly.
Original PR description
This error occurs when uploading a ``factur-x.xml`` file that lacks currency information or when the ``factur-x.xml`` file we generate does not include any currency. Steps to reproduce: --- - Install…
This error occurs when uploading a ``factur-x.xml`` file that lacks currency information or when the ``factur-x.xml`` file we generate does not include any currency. Steps to reproduce: --- - Install ``account_edi_ubl_cii`` module - Invoicing > Customers > Invoices - Click ``Upload`` button and upload [file](https://drive.google.com/drive/u/0/folders/1TrG7xBUdwdq04KueZi0WdxHxm_g0vfW_) Traceback: --- NotNullViolation: null value in column "currency_id" of relation "account_move_line" violates not-null constraint DETAIL: Failing row contains (50, 50, 9, 1, 125, 100, 205, null, 56, null, null, null, null, null, null, null, null, null, null, null, 2, 2, null, null, null, NEWS9141525, null, product, null, null, null, null, null, 0.00, 0.00, 0.00, 0.0, null, null, null, 1.00, 109.72, null, null, 0.00000000000000000000000000000000000000000000000000000000000000..., null, null, null, null, null, 2025-01-02 01:03:08.880424, 2025-01-02 01:03:08.880424, null, null, null, null, null, null, null, null, null). This commit resolves the issue by adding the default company currency when no currency is found in the file. sentry-6056586239 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When users create warehouse transfers from the Project topbar, Odoo now preselects the appropriate transfer type based on their default warehouse. This prevents extra manual setup and reduces the chance of creating transfers with missing information.
Original PR description
Steps to reproduce: - Set default Warehouse in the profile. - From Project topbar open either "From WH" or "To WH". - Create a new stock picking Issue: - The stock picking type is not set by default Reason: - Non existence of supplied values. Solution: - Supply default picking type if user has a default warehouse. task-4207753
Creating an analytic account from a project now uses the project's company by default instead of the user's current company. This prevents company mismatches when projects have no company or belong to a different company, reducing accounting inconsistencies.
Original PR description
Before this commit, when creating a new analytic account in any plan from the project form, the default company of the account was set to the current company of the user. The problem that arises is when the project has no company, and the account is set to a company. Which creates inconsistency between the project and the account. After this commit, we set the company of the created account to the company of the project by default. task-4438410 version-18.0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents website livechat from crashing on mobile or narrow screens when an operator has a custom chat name. Visitors can start and continue chats reliably, improving the customer support experience.
Original PR description
On small displays, starting a new website livechat with an operator that has an `user_livechat_username` crashes when rendering the username.
Steps to reproduce
-----
1. Select User Menu Icon > My Profile / Preferences > enter an Online Chat Name
2. On a mobile device or small window, open the livechat on the website
3. Send any new message
4. The following traceback occurs
```
Caused by: TypeError: Cannot read properties of undefined (reading 'channel_type')
at get authorName
```
Cause
-----
On small displays, `thread` for the default operator message becomes undefined when it is reassigned to the new thread. This causes an error in `get authorName()` when the undefined `thread` is accessed directly to detemine the displayed username.
Solution
-----
Add an optional chain (?) when accessing `this.message.thread` to handle the possible nullish value.
opw-4446208This fix prevents Odoo from reloading the same view unnecessarily when users schedule activities from different contact cards. It reduces avoidable background requests, making the interface more efficient and potentially more responsive.
Original PR description
Steps to reproduce (a bit technical): 1. Navigate to the "Contacts" kanban view. 2. Open the Network tab in the browser's developer tools. 3. Click on the first contact activities and "Schedule a new…
Steps to reproduce (a bit technical): 1. Navigate to the "Contacts" kanban view. 2. Open the Network tab in the browser's developer tools. 3. Click on the first contact activities and "Schedule a new activity". 4. Notice a call to `get_views` in the Network tab. 5. Click on a different contact activities, and "Schedule a new activity". 6. Notice a new call to `get_views` in the Network tab. Expected: The view is already cached, so the webclient should not attempt to load it. Explanation: This is likely a regression since f983703d, when the embedded actions were introduced. Now, the `embeddedParentResId` is part of the views cache key, and so we get much fewer cache hits. For most views, there isn't really an `embeddedActionId` set, and yet the `embeddedParentResId` was always set. The later is only used in combination with `embeddedActionId`, so it causes a lot of avoidable cache misses. The solution is to simply set the `embeddedParentResId` only if there's an `embeddedActionId`. Closes odoo/odoo#192261 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
This fix ensures that when a receipt is partially validated and a backorder is created, the original quality check stays linked to the correct receipt. This prevents quality records from being incorrectly attached to the backorder, improving traceability and reducing confusion in warehouse quality control.
Original PR description
Steps to Reproduce the Bug: - Create a storable product “P1”. - Create a Quality Point with the following settings: - Product: P1 - Operation Type: Receipt - Control Per: Product - Type: Pass-Fail - Create a receipt for 10 units of P1. - Mark it as "To Do". - Set the field "Quantity" to 5 units. - Validate. - A wizard to create a backorder is triggered -> Validate the creation. - A wizard for the quality check is triggered. - Pass the quality check. Problem: A backorder is created, but the first quality check is incorrectly linked to this new picking instead of creating new one, because the `default_quality_check` was set in the context and not cleared. Before this commit, the picking was not validated after confirming the quality check wizard: https://github.com/odoo/enterprise/commit/936e8f84a3a70a26692cc4620f146539bde81a17#diff-56e04e66113804374104e1d1ccf225cb88ab2040c65743e0eb01a970351cdb7fR106-R107 **Opw-4428051**
The guided website helpdesk forum flow now waits until pop-up windows are fully ready before continuing. This helps prevent intermittent failures in automated checks, making releases more stable without changing the customer-facing experience.
Original PR description
In this commit, we wait the modal is shown (managed by jQuery) before to continue the tour. In these modals, if we don't wait for the modal is shown, as the tour engine can be too much fast, element in modal can be not focusable when we try to target it.
In odoo/addons/website/static/src/js/content/website_root.js the class modal_show is added in _onModalShown:
```javascript
_onModalShown: function (ev) {
$(ev.target).addClass('modal_shown');
},
```
This fix add classes in triggers to ensure modal is shown before continuing the tour.This fix prevents an error when creating a Mexican global invoice from a draft invoice that has no assigned number yet. Users now avoid a blocking crash and can receive the intended validation message instead.
Original PR description
When a customer creates a global invoice, a traceback will appear. Steps to reproduce the error: - Install ``l10n_mx_edi`` module > Switch to Mexican company - Create an invoice without customer and…
When a customer creates a global invoice, a traceback will appear.
Steps to reproduce the error:
- Install ``l10n_mx_edi`` module > Switch to Mexican company
- Create an invoice without customer and product > Save
- Go back to List view of invoices
- Select that invoice > Actions > Create Global Invoice
Traceback:
```
File "home/odoo/src/enterprise/18.0/l10n_mx_edi/wizard/l10n_mx_edi_global_invoice_create.py", line 23, in default_get
invoices = source_invoices._l10n_mx_edi_check_invoices_for_global_invoice()
File "home/odoo/src/enterprise/18.0/l10n_mx_edi/models/account_move.py", line 306, in _l10n_mx_edi_check_invoices_for_global_invoice
invoices_str = ", ".join(failed_invoices.mapped('name'))
TypeError: sequence item 0: expected str instance, bool found
```
https://github.com/odoo/enterprise/blob/01f749f40fc4b5f9708696dc42eab7125e790b28/l10n_mx_edi/models/account_move.py#L306 When a customer creates a new invoice, ``name`` will be False,
When the customer tries to create global invoice,
So it will lead to the above traceback.
sentry-6197401330Miscellaneous changes
On Virtual IoT Boxes, a landscape report was still printed in portrait. We added the argument required to handle landscape printing. opw-4081884 Forward-Port-Of: odoo/odoo#192634
Original PR description
On Virtual IoT Boxes, a landscape report was still printed in portrait. We added the argument required to handle landscape printing. opw-4081884 Forward-Port-Of: odoo/odoo#192634
STEPS ----------- 1. Install Contact and 'base_vat' 2. Create a new Indonasian contact with VAT as ID1234567890123456 3. Save -> Connot save whilst the VAT is correct PROBLEM ----------- VAT could be 15 (old numbers) or 16 digits. If there are 15 digits long, the 10th digit is a luhn checksum. In some cases, the 15 digits can be transformed into a 16-digit by adding a 0 in front. In such case, we can verify the luhn checksum like for the 15 digits by removing the 0. However, for newl
Original PR description
STEPS ----------- 1. Install Contact and 'base_vat' 2. Create a new Indonasian contact with VAT as ID1234567890123456 3. Save -> Connot save whilst the VAT is correct PROBLEM ----------- VAT could be 15 (old numbers) or 16 digits. If there are 15 digits long, the 10th digit is a luhn checksum. In some cases, the 15 digits can be transformed into a 16-digit by adding a 0 in front. In such case, we can verify the luhn checksum like for the 15 digits by removing the 0. However, for newly created VAT 16-digits VAT number, there is no checksum. SOLUTION ----------- Allow 16-digit VAT that only contains numbers and does not start with a 0. opw-4402514 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192543
Before this commit, if you made a product available in PoS but set it to not be available in self order, it would still appear in the kiosk or mobile menu with an "out of stock" tag, which is confusing and not the expected behavior. opw-4200540 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188663
Original PR description
Before this commit, if you made a product available in PoS but set it to not be available in self order, it would still appear in the kiosk or mobile menu with an "out of stock" tag, which is confusing and not the expected behavior. opw-4200540 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188663
**Issue:** When converting a PDF file into a PDF/A compliant file, the result may generate the following error message when parsing it by a PDF/A-3 validator: `The aforementioned EOL marker shall be immediately followed by a % (25h) character followed by at least four bytes, each of whose encoded byte values shall have a decimal value greater than 127 ` **Cause:** A previous fix has moved the four bytes in a conditional operation, but the `%` character has been forgotten. opw-4353108
Original PR description
**Issue:** When converting a PDF file into a PDF/A compliant file, the result may generate the following error message when parsing it by a PDF/A-3 validator: `The aforementioned EOL marker shall be immediately followed by a % (25h) character followed by at least four bytes, each of whose encoded byte values shall have a decimal value greater than 127 ` **Cause:** A previous fix has moved the four bytes in a conditional operation, but the `%` character has been forgotten. opw-4353108 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191326
Steps to reproduce: - Configure a kiosk to have multiple languages - Observe that the language can be changed in the kiosk UI as expected - Install the website module, and configure the website's languages to not include one of the kiosk languages - For example, kiosk has EN and FR, website just has EN - Observe that the language can no longer be changed in the kiosk opw-4403828 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-O
Original PR description
Steps to reproduce: - Configure a kiosk to have multiple languages - Observe that the language can be changed in the kiosk UI as expected - Install the website module, and configure the website's languages to not include one of the kiosk languages - For example, kiosk has EN and FR, website just has EN - Observe that the language can no longer be changed in the kiosk opw-4403828 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191817 Forward-Port-Of: odoo/odoo#191137
Before this commit, if you validated an order while offline and then synced the order when back online, the post-process loyalty actions would not occur, resulting in data not being updated on the server. opw-4290171 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187238
Original PR description
Before this commit, if you validated an order while offline and then synced the order when back online, the post-process loyalty actions would not occur, resulting in data not being updated on the server. opw-4290171 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187238
In Panama, the Tax ID is the Registro Único de Contribuyentes (RUC) and not the Número de Identificación Fiscal (NIF). This is a double fix: 1. Update the `vat_label` to use "RUC" instead of "Tax ID", but this will only be available for new created DBs (because of noupdate) 2. Update the translation of Tax ID for Panama which only requires to update the translations to have the correct translation of Tax ID. opw-4388758 Forward-Port-Of: odoo/odoo#192514
Original PR description
In Panama, the Tax ID is the Registro Único de Contribuyentes (RUC) and not the Número de Identificación Fiscal (NIF). This is a double fix: 1. Update the `vat_label` to use "RUC" instead of "Tax ID", but this will only be available for new created DBs (because of noupdate) 2. Update the translation of Tax ID for Panama which only requires to update the translations to have the correct translation of Tax ID. opw-4388758 Forward-Port-Of: odoo/odoo#192514
Changing a product template's image with the `can_image_1024_be_zoomed` field present in the view produces a crash on save. **STEPS TO REPRODUCE** 1. Open a product form view 2. Using studio, add the `can_image_1024_be_zoomed` field 3. Change the image and save The product will be updated, but this error will be thrown: ``` binascii.Error: Incorrect padding ``` **CAUSE** https://github.com/odoo/odoo/blob/a74684777c27e26639b75b0668bb15afadb78c4f/addons/product/models/product_tem
Original PR description
Changing a product template's image with the `can_image_1024_be_zoomed` field present in the view produces a crash on save. **STEPS TO REPRODUCE** 1. Open a product form view 2. Using studio, add the…
Changing a product template's image with the `can_image_1024_be_zoomed` field present in the view produces a crash on save. **STEPS TO REPRODUCE** 1. Open a product form view 2. Using studio, add the `can_image_1024_be_zoomed` field 3. Change the image and save The product will be updated, but this error will be thrown: ``` binascii.Error: Incorrect padding ``` **CAUSE** https://github.com/odoo/odoo/blob/a74684777c27e26639b75b0668bb15afadb78c4f/addons/product/models/product_template.py#L186-L188 In the `RecordSet`'s context, `bin_size=True`, so accessing `image_<size>` returns a size instead of a binary. `_compute_can_image_1024_be_zoomed` calls `tools.is_image_size_above` with this binary size, while the method expects the full base64 encoded image. Ultimately, this causes `base64.b64decode` to crash with the above error. **FIX** Update the `RecordSet`'s context to `bin_size=False`. Accessing `image_<size>` from the `RecordSet` will then return the full binary instead of the size. **NOTES** In versions <17.0, read and write were done in separate network calls causing the recompute to happen during the flush of the write, which doesn't have `bin_size=True` in the context. Because the field is stored, the read will not cause a recompute and thus avoids any error. In >=17.0, because the read occurs before the flush, and the write has invalidated the field, the recompute will occur with the context of the read (`bin_size=True`), causing the issue. opw-4413647 Forward-Port-Of: odoo/odoo#192409 Forward-Port-Of: odoo/odoo#192047
In 862ede43e5910ae6954f3574f45c213e5d3a1886 the added test depended on being in year 2024, so it failed in eg. 2025. With this change we don't harcode the invoice name in assert data. runbot-error-111390 opw-4050777 Forward-Port-Of: odoo/odoo#192451 Forward-Port-Of: odoo/odoo#192192
Original PR description
In 862ede43e5910ae6954f3574f45c213e5d3a1886 the added test depended on being in year 2024, so it failed in eg. 2025. With this change we don't harcode the invoice name in assert data. runbot-error-111390 opw-4050777 Forward-Port-Of: odoo/odoo#192451 Forward-Port-Of: odoo/odoo#192192
Purpose of this PR: Enhance the UI styling to address issues caused by the absence of the `o_livechat_no_rating` and `o_livechat_operator_avatar` classes,might removed by other PR's. before:  after:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: o
Original PR description
Purpose of this PR: Enhance the UI styling to address issues caused by the absence of the `o_livechat_no_rating` and `o_livechat_operator_avatar` classes,might removed by other PR's. before:  after:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188754
Before this commit, adding lot tracked products would result in an error because the picking type was not loaded in self ordering. opw-4439558 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192351
Original PR description
Before this commit, adding lot tracked products would result in an error because the picking type was not loaded in self ordering. opw-4439558 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192351
Description of the issue/feature this PR addresses: - for model 'pos.pack.operation.lot', `id` is the [identifier](https://github.com/odoo/odoo/blob/18.0/addons/point_of_sale/static/src/app/models/data_service_options.js#L21) but `setPackLotLines` method [uses](https://github.com/odoo/odoo/blob/saas-17.4/addons/point_of_sale/static/src/app/models/pos_order_line.js#L144) `uuid`, making operation weird and faulty. - As `eg: lotline.uuid => undefined` - This pr attempts to fix the issue lin
Original PR description
Description of the issue/feature this PR addresses: - for model 'pos.pack.operation.lot', `id` is the…
Description of the issue/feature this PR addresses:
- for model 'pos.pack.operation.lot', `id` is the [identifier](https://github.com/odoo/odoo/blob/18.0/addons/point_of_sale/static/src/app/models/data_service_options.js#L21) but `setPackLotLines` method [uses](https://github.com/odoo/odoo/blob/saas-17.4/addons/point_of_sale/static/src/app/models/pos_order_line.js#L144) `uuid`, making operation weird and faulty.
- As `eg: lotline.uuid => undefined`
- This pr attempts to fix the issue linked with modifying orderlines with sn/lots
Steps to reproduce considering [this diff](https://github.com/odoo/odoo/pull/187796/files#diff-3bfb78fa74ffa64630e11266674f185a18e3c97587590b4b55da6388cb8ba487R148) :
- Open POS.
- Add a products which is tracked by sn and add two sn

- removing the last sn, will remove all sn from orderline

Note: this pr would make more sense if [this pr](https://github.com/odoo/odoo/pull/187796) is backporterd to saas-17.4,
as there is an oversight in replacing all `uuid` references to `id` the mentioned commit. [see](https://github.com/odoo/odoo/pull/187796/files#diff-3bfb78fa74ffa64630e11266674f185a18e3c97587590b4b55da6388cb8ba487R148)
Also, root issue was in saas-17.4, while a fix was made in v18.0
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#188203Problem --------- Currently, powerpoints attachments received by a mail alias are deleted. We want to allow them. Solution --------- Add the relevant mimetypes to the white list. no-task no-opw --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192221
Original PR description
Problem --------- Currently, powerpoints attachments received by a mail alias are deleted. We want to allow them. Solution --------- Add the relevant mimetypes to the white list. no-task no-opw --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192221
**Problem**: When deleting columns in the editor, if the start and end points of the selection are inside the columns, the `range.extractContents` method extracts the content but leaves behind `div` elements for the first and last columns (or sometimes only one of them). This occurs because the columns are partially selected (content but not container). **Solution**: To ensure `range.extractContents` removes the columns completely, extend the selection to encompass the entire content of the
Original PR description
**Problem**: When deleting columns in the editor, if the start and end points of the selection are inside the columns, the `range.extractContents` method extracts the content but leaves behind `div`…
**Problem**: When deleting columns in the editor, if the start and end points of the selection are inside the columns, the `range.extractContents` method extracts the content but leaves behind `div` elements for the first and last columns (or sometimes only one of them). This occurs because the columns are partially selected (content but not container). **Solution**: To ensure `range.extractContents` removes the columns completely, extend the selection to encompass the entire content of the `o_text_columns` element when the selection starts at the first leaf and ends at the last leaf within the columns. **Steps to reproduce**: 1. Open the editor. 2. Create columns (any number). 3. Select all content (e.g., with `Ctrl+A`). 4. Press `Backspace` to delete the content. 5. Observe that the DOM still contains `o_text_columns` and `row` elements, even though the content appears deleted. opw-4350486 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191671 Forward-Port-Of: odoo/odoo#189978
Steps to reproduce: - Install hr_timesheet (with demo data) - Navigate to portal > timesheet - Group by project Issue: When only the hr_timesheet module is installed and timesheets are grouped in the portal view, the column alignment is broken due to an incorrect colspan. Cause: When groupby is applied, the colspan is manually set to 4, causing misalignment between the header and row columns. Fix: This commit sets the last column's colspan to 2 when grouping is applied to fix th
Original PR description
Steps to reproduce: - Install hr_timesheet (with demo data) - Navigate to portal > timesheet - Group by project Issue: When only the hr_timesheet module is installed and timesheets are grouped in the portal view, the column alignment is broken due to an incorrect colspan. Cause: When groupby is applied, the colspan is manually set to 4, causing misalignment between the header and row columns. Fix: This commit sets the last column's colspan to 2 when grouping is applied to fix the alignment issue. task-4294780 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192201 Forward-Port-Of: odoo/odoo#186532
Issue: In Czech Republic, the rate of the 15% tax has changed to 12%. The new rate has already been handled in l10n_cz, but the OSS mapping still uses the old rate. opw-4310264 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192458
Original PR description
Issue: In Czech Republic, the rate of the 15% tax has changed to 12%. The new rate has already been handled in l10n_cz, but the OSS mapping still uses the old rate. opw-4310264 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192458
When the scale precision is half or quarter, the number of grid columns is this.columnCount * this.model.metaData.scale.cellPart + 1 and not this.columnCount + 1 as was assumed in aggregatePills. This led to a bad computation of aggregates in columns sufficiently far on the right of the gantt view in precision half or quarter. Note that this error was not detected before because many gantt views do not use that precisions or split groups anyway (via shouldMergeGroups). Forward-Port-Of: odoo/en
Original PR description
When the scale precision is half or quarter, the number of grid columns is this.columnCount * this.model.metaData.scale.cellPart + 1 and not this.columnCount + 1 as was assumed in aggregatePills. This led to a bad computation of aggregates in columns sufficiently far on the right of the gantt view in precision half or quarter. Note that this error was not detected before because many gantt views do not use that precisions or split groups anyway (via shouldMergeGroups). Forward-Port-Of: odoo/enterprise#76610
task-4418589 Forward-Port-Of: odoo/enterprise#76089
Original PR description
task-4418589 Forward-Port-Of: odoo/enterprise#76089
Before this PR: - The bill type was determined based only on whether the section code was 'cdnr'. This resulted in all documents under this section being classified as credit notes, regardless of their actual type. After this PR: - The bill type is now determined by checking both the section code and the document type. If the section code is 'cdnr' and the document type is 'C', the bill is classified as a credit note. Otherwise, it defaults to a regular bill or debit note as applicable.
Original PR description
Before this PR:
- The bill type was determined based only on whether the section code was 'cdnr'. This resulted in all documents under this section being classified as credit notes, regardless of their actual type.
After this PR:
- The bill type is now determined by checking both the section code and the document type. If the section code is 'cdnr' and the document type is 'C', the bill is classified as a credit note. Otherwise, it defaults to a regular bill or debit note as applicable.
Why:
- This change ensures accurate classification of documents under the 'cdnr' section, distinguishing between credit notes ('C') and debit notes ('D').
Forward-Port-Of: odoo/enterprise#764271 change
Enhancements to existing features
This update enhances the processing of Chilean fuel taxes within the Odoo Enterprise system. Specifically, the system now correctly parses IEC (Invoice Electronic Communication) files, a key requirement for accurate tax reporting. A new test has been added to ensure this functionality works as expected.
Original PR description
Adjusting fetchmail_server behavior to parse IECs and creating a test for it. task: 4359365