Daily updates from Odoo
Navigate
Branch
Wednesday, February 11, 2026
203 changes
49 changes
Enhancements to existing features
This update ensures that newly added selection options in Odoo fields are immediately visible in the user interface, without requiring changes to the database. Previously, these options were added to the database but not displayed. Note that translations still require a database update.
Original PR description
Previously, when developers use `selection_add` in stable versions, the new selection values could be written to the database (since `field._selection` contains them), but they would not appear in the UI due to missing `ir.model.fields.selection` records. This commit allows newly added selections to be displayed in the field description without requiring database updates. Note: the new selections still cannot be translated without database updates. mainly for enterprise https://github.com/odoo/enterprise/pull/106612 may be also helpful for https://github.com/odoo/odoo/pull/217853 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#247826 Forward-Port-Of: odoo/odoo#247542
This update enhances the eTransport functionality for Odoo's Romanian localization (l10n_ro_edi_stock) by improving the accuracy of XML files generated for shipping. Specifically, it now uses standard unit prices, includes necessary rounding for product values, and logs the sent XML files for tracking and troubleshooting.
Original PR description
- Adding logging of sent XML into move chatter - Adjusting the XML generator to use standard unit price - Adding rounding for product values as required by the XML structure task-5892338 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247919 Forward-Port-Of: odoo/odoo#247541
This update enhances the chatter interface by adding a company card with details sourced from DNB. Previously, industry tags from DNB were stored separately. This change consolidates relevant partner information within the chatter for better visibility and efficiency.
Original PR description
Before: Industry tags coming from DnB were stored in the Tags section of res.partner. and there was no Company info card in chatter. After: Industry tags coming from DnB are not stored in the Tags section of res.partner. Company card is created in chatter that is having details from Dnb along with tags. task-5373200 Forward-Port-Of: odoo/odoo#239464
Resolved issues and error corrections
This update fixes an issue where the quantity displayed in the shopping cart wasn't updating correctly after a user changed the quantity of a product. The fix ensures that the cart accurately reflects the updated quantity, improving the user experience and preventing order discrepancies. This was a critical bug impacting order accuracy.
Original PR description
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and…
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and directly click `Checkout`. **Issue:** - The cart shows the product with quantity = 1 instead of the edited value. Root cause: - When the user clicks Checkout, both `setQuantity` and `onConfirm` are triggered almost simultaneously. - At [1], the `_setQuantity` method is called, but due to the await before the quantity update is completed, the update may not finish in time. As a result, the previous quantity is sometimes used during checkout instead of the newly selected one. Solution: - we can update the quantity immediately before awaiting `_updateCombination`, ensuring that the correct quantity is already set when onConfirm runs. [1]: https://github.com/odoo/odoo/blob/f4eabe47a602301013afa63da6bdf87809903d29/addons/sale/static/src/js/product_configurator_dialog/product_configurator_dialog.js#L225 opw-5435672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247866 Forward-Port-Of: odoo/odoo#241424
This update fixes an issue where powerbuttons were sometimes incorrectly displayed in the HTML editor. By using document selection instead of editable selection, the powerbuttons now only appear when a valid selection is made within the editor, improving the user experience and ensuring accurate button visibility. This change also updates the layout of powerbuttons when toggling blocks.
Original PR description
Description of the issue this PR addresses: Powerbuttons were previously relying on the editable selection to decide whether they should be shown. However, this also displayed powerbutton when selection was not in editable. Powerbuttons now uses the document selection, ensuring powerbuttons only appear when the selection is actually inside the relevant elements. task-5240942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237321
This update ensures that links created within the Odoo composer and when scheduling activities in chatter automatically include security best practices – specifically opening links in a new tab and preventing direct navigation to the original source. This resolves potential issues with link behavior and enhances user security.
Original PR description
*: `mail`, `website_forum` Currently when a link is created from the full composer or while scheduling activity in chatter, we don't apply the right attributes and it can lead to troubles. This PR aims to add default following attributes while creating a link in chatter or creating a post in website_forum. `target: '_blank'` `rel: 'noreferrer noopener'` task-5417475 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241252
This update allows Fleet Officers to modify the 'Make Vehicle Available' field for vehicles, previously restricted to Fleet Managers. This change streamlines the process of managing vehicle availability and ensures Fleet Officers have the necessary access to update vehicle statuses efficiently.
Original PR description
Issue: The 'plan_to_change_car' and 'plan_to_change_bike' fields were restricted to Fleet Managers, preventing Fleet Officers from editing it. Fix: Changed the view-level group restriction from Fleet Manager to Fleet Officer for both fields.. task-5443107 Forward-Port-Of: odoo/odoo#241748
This update resolves an issue preventing single-tenant Odoo apps using Microsoft Calendar from properly renewing their access tokens. The fix ensures Odoo uses the correct, tenant-specific Microsoft endpoint, allowing calendar synchronization with Outlook to function reliably. This improves the experience for businesses utilizing single-tenant Odoo instances.
Original PR description
Single-tenant Azure applications could synchronize calendar with Outlook, but refresh token renewal fail. Odoo was always using the default Microsoft token endpoint instead of the tenant-specific endpoint required for single-tenant apps. Steps to reproduce: - Create a single-tenant app in the Azure portal - Configure Odoo Microsoft Calendar with this app - Set `microsoft_account.auth_endpoint` and `microsoft_account.token_endpoint` system parameters with the specific endpoints using the tenant ID - Open the Calendar app and sync with Outlook - Wait for access token expiration - Refresh token request fails This commit fixes the issue by using the token endpoint stored in the microsoft_account.token_endpoint system parameter when requesting a refresh token. Forward-Port-Of: odoo/odoo#246829 Forward-Port-Of: odoo/odoo#244371
Previously, filtering options within the survey results analysis page were unresponsive. This fix addresses a technical issue where the filtering functionality wasn't properly applied after the results were dynamically loaded. The update ensures that filter interactions now function as expected, allowing users to effectively analyze survey responses.
Original PR description
Step to reproduce: 1. Install `survey` 2. Create a survey containing a "Date" type question 3. Share the survey and generate multiple responses 4. Go to the survey results analysis page. 5. In the `User Responses` table, try to filter by clicking the filter icon. Issue: Nothing happens when clicking the filter icon. Cause: https://github.com/odoo/odoo/commit/dfc1c742e35f75f2c386c4ef50d5584537ac1ed4 This recent refactoring moved interactions to the `SurveyResult` class. However, the table rows in the results view are rendered dynamically by a separate interaction, `SurveyResultPagination`, which replaces the DOM content using `t-out`. Because these elements are created dynamically after the `SurveyResult` interaction has started, the event listeners for `filter-add-answer` are not attached to them. Solution: - Reapply the interactions on tab change opw-5366346 Forward-Port-Of: odoo/odoo#240724
This update replaces the SFU (Server Fast Update) bundle with version 1.3.3, addressing a technical update to improve Odoo's performance and stability. This change ensures Odoo continues to operate efficiently and reliably.
Original PR description
https://github.com/odoo/sfu/releases/tag/v1.3.3 Forward-Port-Of: odoo/odoo#247263 Forward-Port-Of: odoo/odoo#244971
This update resolves an issue where Odoo was incorrectly rejecting PDF files sent as base64 data. The change relaxes the mimetype check, now only verifying that the file starts with 'application/pdf'. This ensures proper processing of PDF documents, improving functionality.
Original PR description
The mimetype check was too strict and rejected values like `application/pdf;base64`. This change fixes the issue by only verifying that the mimetype starts with `application/pdf`, ignoring any additional parameters. runbot-231598 Forward-Port-Of: odoo/odoo#247974
This update fixes a minor issue where the thread name wasn't displayed in the notification settings for Discuss group chats. Now, users will see the correct thread name when managing notification preferences, improving the clarity and usability of the Discuss interface. This ensures users can easily configure their notifications for group conversations.
Original PR description
Before this PR, when a user opened a group chat in Discuss and accessed the notification settings from the thread actions, the thread name was missing in the dialog. This commit fixes the issue by correctly displaying the thread name in the notification settings dialog. Part of task-5910210. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247682 Forward-Port-Of: odoo/odoo#247313
This update corrects a bug in how the system calculates timezones, specifically related to Daylight Saving Time (DST). The original test failed because the reference date wasn't dynamically adjusted for DST changes, leading to incorrect timezone offsets. This fix ensures accurate timezone handling for all test cases.
Original PR description
If provided a `datetime.time`, `babel.dates.time_format` needs to complete it to a datetime in order to resolve timezone offsets (and legacy names). In order to do that, it ultimately uses "now" as…
If provided a `datetime.time`, `babel.dates.time_format` needs to complete it to a datetime in order to resolve timezone offsets (and legacy names). In order to do that, it ultimately uses "now" as the reference: [`format_time`] calls [`DateTimePattern.apply`] which calls [`DateTimeFormat.__getitem__`] which calls
[`DateTimeFormat.format_timezone`] which calls [`get_timezone_gmt`] which calls [`_get_datetime`], which for a `datetime.time()` input resolves:
return datetime.datetime.combine(datetime.date.today(), instant)
This means DST changes impact the timezone being resolved timezone (offset or legacy name), which is what occurred here: S summer time starts on the second sunday of March at 0200 local which for 2026 is 2026-03-08 0200, faketime builds started failing with a virtual time of 2026-03-08 12:00 UTC which is well past 0200 local in America/New_York, and thus into the summer timezone, with an offset of -0400, thus different from the reference offset of -0500.
The reference date can be fixed to anything which results in standard time in all the timezones being checked, so between the first sunday of november (end of DST in the US) and the last sunday of march (start of DST in Europe), in the past (to ensure no DST rules change). Just use the reference date of the test itself as it's fine enough.
Now why did this test pass before #236660? This was hinted at when I needed to fix the offset from -0504 to -0500 but it didn't register as it was a minor edit: because the timezone was associated via `tzinfo` rather than `localize`, `pytz` was not able to select the correct timezone so would just select some prehistorical timezone, which doesn't have DST rules associated, and so would remain on standard time year round.
With the switch to zoneinfo the timezone can be interpreted dynamically, leading to the timezone offset varying when the reference date changes, and thus the issue revealing itself.
And `odoo.misc.format_time(datetime)` has a similar issue, because it strips out the `date` part of a `datetime` input, so similarly babel itself receives a lone zoned time, which it resolves using the date at the time of the test running. Which is funny because `babel.dates.format_time` itself can take a `datetime` and will use that directly for its timezone resolution, so on this bit we shot ourselves in the foot.
https://runbot.odoo.com/odoo/runbot.build.error/238900
[`format_time`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L841
[`DateTimePattern.apply`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L1424
[`DateTimeFormat.__getitem__`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L1487
[`DateTimeFormat.format_timezone`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L1675
[`get_timezone_gmt`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L459
[`_get_datetime`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L158A bug was preventing the copy button from functioning correctly within forms. This update resolved the issue by explicitly defining the button type as 'button' instead of the default 'submit', ensuring the button works as intended within form elements. This improves usability and prevents unexpected form submissions.
Original PR description
Previously, the type of the button in the template of the CopyButton utility component was left unspecified. Because the default type for buttons is "submit", the copy button will not work if it is placed within a `<form>` element, and will instead submit the form (see [1]). This commit just forces the type of the button to "button" which has no default behavior, meaning it can be used even inside of `<form>` elements without issues. [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type Forward-Port-Of: odoo/odoo#247876 Forward-Port-Of: odoo/odoo#247754
This update resolves an issue where Sale Orders imported through POS and paid with online payments remained in 'Quotation' status. The fix ensures that the Sale Order's state is correctly updated to 'Paid' after online payment processing, streamlining the order management process. This improves data accuracy and prevents manual intervention.
Original PR description
When a Sale Order was imported in PoS and paid using online payment method, the SO's state stayed in Quotation. Steps to reproduce: ------------------- * Create a new Sale Order with a product available in POS * Add Online Payment in the Payment Methods * Import and settle the Order in POS * Pay the order with the Online Payment > Observation: In Sale app, the Sale Order is still in Quotation state. Why the fix: ------------ Online payments call `action_pos_order_paid()` directly, which only sets the POS order state to paid and never confirms the linked sale.order. Other payment methods do it in `sync_from_ui()`. Extended `action_pos_order_paid()` in pos_sale will now confirm linked quotations after POS marks the order as paid. opw-5022526 Forward-Port-Of: odoo/odoo#247998 Forward-Port-Of: odoo/odoo#230112
This update ensures that the user group field in the system correctly respects its 'readonly' settings. Previously, the field would still allow editing even when marked as read-only, leading to validation errors. This fix prevents these errors and ensures a smoother user experience.
Original PR description
Before this commit, the res_user_group_ids field introduced in [1] didn't care about the `readonly` props. As a consequence, when the field (or the whole view, via `edit="0"`) was readonly, the widget still rendered editable SelectMenu. Obviously, editing it and then triggering a save would raise a validation error, so it was only an UI issue. This commit fixes it by properly setting the field in readonly if its props states it. [1] https://github.com/odoo/odoo/pull/179354 task~5922282 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#247802
This update fixes a misconfiguration in the Italian tax settings. The exoneration code for the 0% EU S tax has been corrected to accurately reflect whether a transaction is for goods or services. This ensures proper tax calculations and compliance with Italian regulations.
Original PR description
In Italy, the code depends strictly on whether the transaction is for Goods or Services. N3.2 is for Intra-community supply of GOODS (Cessioni Intracomunitarie di beni) N2.1 is for Intra-community supply of SERVICES (Prestazioni di Servizi) This commit fixes the exoneration code on the 0% EU S tax from N3.2 to N2.1. task-5870894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247904 Forward-Port-Of: odoo/odoo#245675
This update resolves a problem where formatting the user's signature in the system could cause issues with sending emails, specifically related to the 'Full Composer' feature. The fix ensures that signature formatting is handled correctly, preventing multiple 'Read More' elements from appearing in emails.
Original PR description
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text -…
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text - Save the changes - Refresh - Remove the bold formatting - Press enter between the two lines (at the end of `--`) - Save the changes - Go to the Contact app - Select any record - Go to its chatter - Click on `Send Message` and then the `Full Composer` expand button - Send the mail - In the chatter multiple `Read More` are added for the same signature (I think it can appears in multiple operations, this is just an example related to the `<strong>` element becoming `<span>` on removal) **Issue:** Playing with the html editor on the signature field can break the `tag_quote` flow due to the added elements. **Fix:** Explicitly add `"data-o-mail-quote"` to the signature container which is added when opening the `fullComposer`. It could also be an issue related to the html_editor but this seems cleaner to fix it here. This issue was fixed in 19.0 in a similar way by adding a common div around the signature and adding the same attribute. related: https://github.com/odoo/odoo/commit/6eb55c42158b08652c4c533bf56b5333c162bd3a opw-5149505 Forward-Port-Of: odoo/odoo#247560 Forward-Port-Of: odoo/odoo#231954
This update fixes an issue where Point of Sale order times were consistently displayed in 12-hour format, regardless of the user's locale setting. Now, order times in the Orders tab will automatically show in the correct 24-hour format (e.g., 16:30) based on the user's language preferences, improving clarity and accuracy.
Original PR description
In POS, when using a 24h language, the time shown in the order tab (TicketScreen) was always in 12h/AM-PM format instead of 24h.
Steps to reproduce:
-------------------
Set the POS (or user) language to a 24h locale (e.g. French, Spanish) Open POS and create an order
Open the Orders tab and look at the time shown for the order
> Observation:
Time is displayed in 12h (e.g. 4:30) instead of 24h (e.g. 16:30).
Why the fix:
------------
The order tab time was formatted with a hardcoded 12h format ("hh:mm"), ignoring the user’s locale. It now uses the locale’s time format (e.g. localization.timeFormat) so the order tab shows time in 24h or 12h according to the language.
opw-5742177
Forward-Port-Of: odoo/odoo#246269A recent issue prevented users from printing bank statements from the Accounting Dashboard. This fix resolves an access error that occurred when attempting to print, ensuring users can reliably download PDF reports of their bank statements. The change avoids unnecessary data loading to improve stability.
Original PR description
In Bank Statement list view users may select a statement and download a pdf report. However, currently, the load of extra print options may raise an error. Steps to reproduce: - In Accounting Dashboard, from a bank journal card, 3 dots > Statements - Select a line (it needs to have an id not present in `account.move`) - Click 'Print' button Issue: Access error may occur, stating the record has been deleted or it is inaccessible. This happens because backend method `get_extra_print_items` is called on `account.move` with the id of the `account.bank.statement` On accessing the record fields we get the error A solution is to avoid loading extra print item with loadExtraPrintItems if we are not in the `account.move` model opw-5500506 Forward-Port-Of: odoo/odoo#246292
This update fixes a crash in the Forecast report when it includes archived product variants. The fix ensures that only active variants are considered when calculating stock levels, preventing errors and ensuring accurate reporting. This improves the reliability of the Forecast report.
Original PR description
Currently, accessing the Forecast report on a Product Template causes a crash if the template contains an archived variant that still has active stock moves (e.g., a pending delivery). ## **Steps to…
Currently, accessing the Forecast report on a Product Template causes a crash if the template contains an archived variant that still has active stock moves (e.g., a pending delivery).
## **Steps to Reproduce:**
1) Install `stock` with demo data.
2) Create a Delivery orders(stock picking) for product `conference chair(E-COM12)`
with demand of 40 qty, click on `Mark as todo`.
3) Navigate to `stock>products>products` and open `conference chair` product form
view.
4) From the variant smart button archive `E-COM12` variant.
5) Navigate back to product form view and click on `forecast` smart button.
## **Error:**
`TypeError: Cannot read properties of undefined (reading 'free_qty')`
## **Root Cause:**
`this.props.docs.product[line]` at [1] is undefined because the server did not
include an entry for that product id in the report header.
### **Complete Flow:**
On clicking the Forecast button an ORM call is made to [_get_report_values](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L512-L519),
which calls [_get_report_data](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L156-L172) to build the report data.
#### **Header Part:**
- [_get_report_header](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L112-L144) returns metadata only for active variants because,
[_get_product_quantity](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L69-L72) is called which calls _get_products(see[2]), and _get_products only
returns active variants for the product template.
#### **Lines Part:**
- [_get_product_lines](https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L239) iterates over products coming from the move search
and it includes both archived and unarchived variants.
[_move_confirmed_domain](https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L55-L56) calls _move_domain(see[3]), which searches stock.move using
product_tmpl_id when given a template id and therefore returns moves for
every variant of the template (archived or not).
#### **Why the mismatch happens:**
- `_get_products` fetches variants using `browse()` which by default excludes archived variants.
`_product_domain`(see[3]) uses product_tmpl_id when given product_template_ids,
which matches moves for all variants of the template. As a result, moves can reference
archived variant ids that the header never listed.
[1]- https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/static/src/stock_forecasted/forecasted_details.js#L188
[2]- https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L61-L67
[3]- https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L25-L31
## **Fix:**
- This commit ensures that archived product variants are excluded directly
at move search level by appending `('product_id.active', '=', True)` to
the product domain used by the forecast report. This ensures that only
active product variants are considered when fetching stock moves.
### **opw-5440872**
Forward-Port-Of: odoo/odoo#245852This update fixes a minor inconsistency in how printer tests are initiated within the Point of Sale system. By using LNA, the system now aligns with a key configuration setting, ensuring a more reliable and predictable experience for users. This improves the overall stability and usability of the POS functionality.
Original PR description
Ensure the printer and preparation printer Test buttons use LNA when triggered, aligning behavior with `point_of_sale.use_lna` configuration. Task-5886700 Related: https://github.com/odoo/enterprise/pull/106594 Forward-Port-Of: odoo/odoo#246446
A bug in the Point of Sale refund process was causing errors related to invoice and credit note handling. This update corrects the system to properly identify refund orders based on the 'is_refund' field, ensuring accurate accounting and preventing errors. This fix improves the reliability of refund transactions.
Original PR description
TASK: [#5897377](https://www.odoo.com/odoo/project/1737/tasks/5897377) --- The test `point_of_sale:TestPointOfSaleFlow.test_pos_order_refund_ship_delay_totalcost` was failing with the following error: > You cannot use a credit_note document type with an invoice. This issue occurred because the refund order was not marked as a refund. As a result, the `account.move` `move_type` was set to `out_invoice` instead of `out_refund`. Since 19.0, following the change introduced in [odoo/229683](https://github.com/odoo/odoo/pull/229683/files#diff-29cbaebb5b63b539ab173d9340b2aec87b9ad63cd322eec2347879c5412bd50bR850), the `move_type` is no longer determined based on the `pos.order` `amount_total`, but on its `is_refund` field. This field was missing in the test, causing the incorrect behavior. Forward-Port-Of: odoo/odoo#247136
This update ensures invoices for Point of Sale orders are correctly marked as paid when the order was previously settled through a 'settle due' process. Previously, the system didn't account for payments from the settle due order, leading to unpaid invoices. This fix resolves a critical issue impacting invoice accuracy.
Original PR description
If you made a PoS order paid with the customer account payment method, and then you created a settle due order to settle the previous one. If you then create the invoice for the original order, the invoice would appear as unpaid, because the payments of the settle due order were not taken into account. Steps to reproduce: ------------------- * Create a PoS order and pay with the customer account payment method * Settle the order that you just created with a settle due order * Close the session * Go on the original order and create the invoice > Observation: The invoice appears as unpaid when it should be paid. Why the fix: ------------ When creating the invoice we gather all the payments of the order to create the corresponding journal entries. But the payment of the settle due order were not included. So the order was considered as unpaid. opw-5268042 Forward-Port-Of: odoo/odoo#245796
This update ensures consistent styling for mention suggestions across both the small and full composer views. The changes improve the visual presentation and prevent overflow issues, particularly on smaller devices, leading to a better user experience. This resolves a minor styling inconsistency.
Original PR description
Use the same style in full composer than in small composer. Tweak style to account for small device, better handle overflows task-5916878 Before / After (small composer) <img width="342" height="466" alt="image" src="https://github.com/user-attachments/assets/234ff152-3c5a-4c82-b257-2800a752dd3a" /> <img width="496" height="476" alt="image" src="https://github.com/user-attachments/assets/60b3d12d-38ea-429a-9dec-441886ac022e" /> Before / After (full) <img width="413" height="394" alt="image" src="https://github.com/user-attachments/assets/c51e053f-7eb2-4ee0-8a9a-bd068ee9ded0" /> <img width="487" height="555" alt="image" src="https://github.com/user-attachments/assets/d0a3514d-aa1f-4d89-8fe4-7964ec20a288" /> Forward-Port-Of: odoo/odoo#247910 Forward-Port-Of: odoo/odoo#247562
This update fixes an error that occurred when users attempted to change the stage of a lead in the CRM. The issue stemmed from a recent change in how Odoo handles record IDs, specifically preventing the calculation of a misleading message. This ensures a smoother user experience when managing leads.
Original PR description
Currently, an error occurs when a user changes the stage of lead. **Steps to Reproduce:** - Install the `crm` module. - Go to `crm` and switch to `List view`. - Click `New` and then click on any…
Currently, an error occurs when a user changes the stage of lead. **Steps to Reproduce:** - Install the `crm` module. - Go to `crm` and switch to `List view`. - Click `New` and then click on any `stage`. `AssertionError: Invalid falsy real id` This error occurs because, after the recent commit [1], falsy IDs are no longer allowed. When the user changes the stage without creating the record, the record ID is passed as False when it goes to calculate the rainbowman message [2]. Browsing the record with a falsy ID [3] then raises this error. This commit ensures that if a record has no ID and the stage ID is changed, the rainbowman message is not calculated. [1]: https://github.com/odoo/odoo/commit/4290724a4c8c57fba4f4d3d688d38f65dadcc38f [2]: https://github.com/odoo/odoo/blob/6bce0128fdd5176c55ac9ed5af1922c1f6f97da5/addons/crm/static/src/views/crm_form/crm_form.js#L51 [3]- https://github.com/odoo/odoo/blob/403f3cf8d291ff2023fc4c5d3631a01465f292c3/odoo/orm/models.py#L5200 sentry-7207509338 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where mention suggestions in the full composer weren't correctly sorting, preventing users from easily seeing followers at the top. The fix ensures that mention suggestions are now properly sorted, improving the user experience and making it easier to connect with relevant contacts within the system. This enhancement focuses on the core functionality of the full composer.
Original PR description
Fetch/sort suggestion in the full composer don't receive the thread param which leads to follower not being sorted at the top. task-5917226 Forward-Port-Of: odoo/odoo#247966 Forward-Port-Of: odoo/odoo#247581
This update corrects a visual inconsistency in Odoo views. When a field is removed due to security restrictions, the text that follows it was previously disappearing. This fix ensures that the view layout remains consistent and predictable, regardless of access controls.
Original PR description
In a view, if a field is removed due to security access restrictions, the text that follows it is not preserved. This leads to inconsistencies in the view. opw-5798852 Forward-Port-Of: odoo/odoo#246561 Forward-Port-Of: odoo/odoo#245855
This update fixes an issue where list markers disappeared when switching between list types (numbered, bulleted, or checklists). The change ensures that list markers are consistently displayed regardless of the selected list type, improving the user experience when creating and editing lists within the HTML editor.
Original PR description
Steps to reproduce: - Create a numbered list - Press Backspace to remove the list marker - Change the list type to bullet or checklist using the powerbox. Current behavior before PR: - The list type is changed to bullet or checklist, but the marker is not visible Cause: - When a list marker is removed using Backspace, the `oe-nested` class is added to the `<li>` element, which hides the marker. - When switching the list to another list type, the `oe-nested` class is not removed. - As a result, even though the list type changes, the marker remains hidden. Solution: - When changing the list type, remove the `oe-nested` class from `<li>` elements that do not contain any list elements as children. - This ensures the marker is correctly restored for the new list type. task-5468384 Forward-Port-Of: odoo/odoo#245318 Forward-Port-Of: odoo/odoo#243001
This update ensures that mention suggestions prioritize users who follow the record – specifically, thread followers – over those involved in recent chats or internal users. This change enhances the relevance of suggested contacts within Odoo's messaging features, making it easier for users to connect with the most important people.
Original PR description
Before this commit, mention suggestions prioritized partners from recent chats over the record's followers. This commit fixes the behavior by reordering the sequence numbers to have the following priority order: Thread followers > Internal users > Recent chat partners. <img width="1051" height="316" alt="image" src="https://github.com/user-attachments/assets/04b80028-07b5-40b2-8972-e80f933980c7" /> task-5313114 Forward-Port-Of: odoo/odoo#247875 Forward-Port-Of: odoo/odoo#237145
This update fixes an issue where month names were incorrectly displaying based on the user's locale instead of the Odoo environment's language. The change ensures month names are consistently shown in the correct language for each user, improving the user experience. This was a minor improvement impacting several HR and accounting modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Enterprise PR: odoo/enterprise#106175 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364 Forward-Port-Of: odoo/odoo#247898 Forward-Port-Of: odoo/odoo#246790
This update fixes an error in how the cost of goods is calculated for products tracked by lot. Previously, the standard price wasn't updated correctly after a sale, leading to inaccurate cost reporting. The fix ensures that the cost accurately reflects the value of the lots used, improving financial reporting accuracy.
Original PR description
**Problem:** the cogs do not take into account lot valuation and the standard price of the form is not updated after a move out. **Steps to reproduce:** - create storable avco perpetual product,…
**Problem:** the cogs do not take into account lot valuation and the standard price of the form is not updated after a move out. **Steps to reproduce:** - create storable avco perpetual product, tracked and valued by lot - confirm a purchase order for 2 qty at price 10 - in the receipt add 'lot 1' for the lot - validate - confirm a purchase order for 2 qty at price 16 - in the receipt add 'lot 2' for the lot - validate - confirm a sale order for a qty of 1, validate the move - invoice the sale order, and confirm the invoice **Current behavior:** 1) the cogs line (stock valuation and expenses) have a value of 13 (the avco value) 2) the standard price on the form view is still 13 **Expected behavior:** 1) it should be 10 (the value of lot1) 2) it should have been updated to 14 (weighted average of the lots value) **Cause of the issue:** 1) get_cogs_price_unit() is taking standard price of the product if the product is not fifo. https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock_account/models/stock_move.py#L245 In case of avco lot valuated product, this is not correct, the value should be the sum of (the value of each lot * the number of product from this lot in the moves) divided by the total quantity. this value can be obtained be dividing the total value of the moves by the total quantity. 2) after the move is validated, the standard price should be updated because for lot valued product, the avco value can change after a move out. Currently it's only updated for fifo products. https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock_account/models/stock_move.py#L172 **fix** For the diff inside _update_standard_price() for problem 2, I use avg_cost instead of doing the computation directly in _update_standard_price() to not duplicate code logic because the computation logic for lot valued products is already inside _compute_value() https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock_account/models/product.py#L152-L157 The extra dependency on compute_value on the stock.lot model is needed because otherwise total_value of the lot is not invalidated in the cache after an out mouve is validated (in our steps it will stay in cache with a value of 20 even after the out move is validated). With our steps this does not cause problem because when we use the avg_cost value for the product, \__get__() is called on total_value of the lots, but it was not in cache because we didn't compute it before in this environment , so it will be recomputed with correct current value . But in other cases where the action_done is called on the move and there is already a value in cache for total_value of the lots (like in the test of this commit for instance), this value will become wrong after the move is validated and the cache won't be invalidated which will lead to incorrect computation of avg_cost because it will use the wrong cache value of total_value for the lots. the test needs to be in sale_stock because the moves used for the cogs are being returned via the sale_stock override of _get_stock_moves() https://github.com/odoo/odoo/blob/7ae112acd0c333f09c54e4eabbd22bcef72c32a7/addons/stock_account/models/account_move_line.py#L67 opw-5459082 Forward-Port-Of: odoo/odoo#246821
This update fixes a technical error that prevented users from deleting the 'Bank and Cash' account type record within the Danish accounting module. The issue stemmed from an outdated code reference, now resolved by updating the code to use the correct method. This ensures smooth operation of the accounting processes.
Original PR description
This error occurs when attempting to delete the `Bank and Cash` account type record. Steps to reproduce: - Install `l10n_dk` and `Accounting` module(with demo data) > Switch to `DK Company` - Go to `Chart of Accounts` and groupby by `Account Types` - Try to delete `Bank and Cash` record (if warning occurs for audit trail then disable `audit trail` in settings) Traceback: `AttributeError: 'account.account' object has no attribute 'read_group'` This error occurs because `read_group` is used in the code, but it was deprecated in [commit] and replaced by `_read_group`. [commit]: https://github.com/odoo/odoo/pull/163300/commits/191ac027dd1e5133b0bcc72ab44358431c508a1c sentry-7207582551
This update fixes a problem where browser translation plugins were incorrectly replacing editable text with translated versions, disrupting the auto-save feature. Adding the `translate="no"` attribute to editable fields now prevents this interference, ensuring content is saved accurately.
Original PR description
Browser translation plugins were altering editable content by replacing the original content with translated versions, which caused issues when paired with auto-save. To prevent this behavior, the attribute `translate="no"` has been added to editable fields. task-5485078 Forward-Port-Of: odoo/odoo#247827
This update resolves an issue where the BoM report wouldn't correctly switch between product variants due to a discrepancy in how the frontend and backend processed variant order. The fix ensures the frontend uses the explicitly passed variant ID, guaranteeing correct variant selection within the report.
Original PR description
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be…
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be done by modifying the default_code for example (e.g. Internal Reference for variant "Color: Green" set to "A"). When accessing the BoM report, you won’t be able to switch to one of the possible variants (in the example the Dark Blue variant). Why it is happening ------------------ The default variant to be displayed when opening the report is selected in the backend using the product_variant_id field. This field is computed as the first element in product_variant_ids as they are ordered in the model. We then send this variant’s information to the frontend and a dictionary containing every variant (key= id and value = display_name). In the serialization process, the object is reordered based on the keys. Thus, if the variants were not ordered based on their ids in python, the order will change. The displayed variant is correct as it has been passed directly but the frontend also computes the currentVariant attribute. This is computed as the first element in the dictionary but in this case, it is not the one that has been selected in the backend, as the order changed. As a result, you see the report for a variant A but the frontend considers you are on the report for variant B so you cannot switch to variant B as you are supposed to be already on it. The fix ------------------ I propose to use the explicitly passed id as the currentVariantId. opw-5409493 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248009 Forward-Port-Of: odoo/odoo#241603
This update resolves a bug that caused a RecursionError when producing large quantities of products tracked by serial numbers. The issue stemmed from excessive recalculations during order splitting, specifically related to manufacturing order processing. This change ensures stable production runs for high-volume serial-tracked items.
Original PR description
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture…
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture routes are enabled). - Create a BoM for product A containing product B. - Create a BoM for product B containing product C. - Create a BoM for product C containing another product. - Create a manufacturing order of 100 units for product A and confirm it. - Go to the MO C and split into 100 mo - Go to the MO B and split into 100 mo -> RecursionError: maximum recursion depth exceeded. **Cause** While splitting, this method is called: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/mrp/models/mrp_production.py#L2031 which ultimately calls: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/stock/models/stock_move.py#L658-L661 This retriggers `_compute_packaging_uom_id` for all moves in `move_orig_ids` or `move_dest_ids`, and accessing the full recordsets causes recursive recomputation leading to a RecursionError. opw-5265424 Forward-Port-Of: odoo/odoo#247839
This update removes unnecessary data aggregation from device tracking models, resulting in faster database queries. By streamlining the data processing, the system will respond more quickly, particularly when dealing with large numbers of users and devices. This change enhances overall system performance.
Original PR description
Invariants: - For a given session identifier, the user will always be the same (otherwise the session is no longer valid). - For a given device determined by a session identifier, an IP address, and a user agent, the country and city will remain the same, as these are determined when the device is first detected. It is therefore possible to no longer aggregate these values and place them directly in the `GROUP BY` clause in order to improve the performance[^1] of `res.device` and `res.session` models. [^1]: Aggregate computations (`MIN`/`MAX`) force the database to perform redundant comparisons for every row in the group. By placing these columns directly in the `GROUP BY` clause, the query reduces per-row processing. This lead to a more efficient execution plan (especially on large datasets). Task-5928301
This update resolves an issue where reducing order quantities in multi-step delivery kits incorrectly triggered additional picking operations. The fix ensures accurate quantity calculations during order fulfillment, preventing unnecessary stock movements and improving order processing efficiency. This impacts users utilizing multi-step delivery kits.
Original PR description
### Steps to reproduce: 1. In the settings enable: Multi-steps route 2. Put your warehouse in 2-step deliveries 3. Create a kit product: - With one component - There is one component in the stock 4.…
### Steps to reproduce: 1. In the settings enable: Multi-steps route 2. Put your warehouse in 2-step deliveries 3. Create a kit product: - With one component - There is one component in the stock 4. Create and confirm a SO with 1 x K 5. Process the pick and ship 6. Return the delivery 7. Set the sol qty to 0 #### > Two unexpected pickings are created to put the kit in output ### Cause of the issue: Decreasing the sol quantity to 0 will call the `_action_launch_stock_rule` in order to create and run procurements related to that quantity change. However, the quantity currently handled by other procurements is determined here by the `_compute_kit_quantities`: https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/sale_stock/models/sale_order_line.py#L388 https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/sale_mrp/models/sale_order_line.py#L154-L166 https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/mrp/models/stock_move.py#L578-L580 Now, the issue is that `_compute_kit_quantities` does not handle move chains properly, as all delivery moves contribute to the `incoming_qty` and all return moves contribute to the `outgoing_qty`. This results in an `incoming_qty` of 1 (for the pick) + 1 (for the ship) and an `outgoing_qty` of 1 (for the 1-step return), that is a `qty_processed` of 1. As a result, the procurement will be generated for a quantity of `0 - 1` (rather than 0): https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/sale_stock/models/sale_order_line.py#L388-L402 which leads to the unexpected picking creations. opw-5432558 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246141
This update resolves an issue where users with read-only access to shared documents were encountering errors when opening the chatter associated with those documents. The fix ensures the system verifies user access permissions before attempting to update document thumbnails, preventing the error.
Original PR description
How to reproduce: - Install documents - Create a folder at the root (company) not shared to anyone (including internal user) - Open that folder and ensure the chatter is closed - Upload a document in it and share it with Marc Demo with view access - Connect with Marc Demo, click on that shared document and open the chatter You get an error because the client try to update the thumbnail of the attachment for the chatter but the user has only view access to it. The user doesn't have write access to the attachment because it is linked to a document with only read access. To solve the problem, we modify the check that trigger the thumbnail update to also check that the user has access to the related record. Task-5360962 Forward-Port-Of: odoo/odoo#244205
This update fixes an issue where the 'Manufacture to Resupply' option was automatically re-enabled after being disabled. The change ensures that this setting remains off when intentionally disabled, preventing potential disruptions to inventory management. The fix involved adjusting how the system tracks warehouse involvement in manufacturing routes.
Original PR description
**Steps to produce:** - Install `mrp` with demo data. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. -…
**Steps to produce:** - Install `mrp` with demo data. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. - Open `YourCompany` record. - Click on Routes > open `Manufacture` > enable `Products`. - Return to `YourCompany` and disable `Manufacture to Resupply`. **Issue:** - After disabling `Manufacture to Resupply`, the option is automatically re-enabled. **Root cause:** - In [1], `manufacture_to_resupply` is set to true if either `manufacture_route.product_selectable` is true OR the current warehouse is included in `manufacture_route.warehouse_ids`. - In the `_inverse_manufacture_to_resupply` method, unchecking the flag only unlinks the warehouse from the route. However, if `product_selectable` is still enabled, the compute logic will continue to set the field back to true. **Solution:** - Now, when we uncheck `manufacture_to_resupply` then also made manufacture route non-selectable on products. As a result, manufacture_to_resupply will no longer be set to true again. [1]https://github.com/odoo/odoo/blob/4f5594a911c1960f620d902d507e563cdab167b9/addons/mrp/models/stock_warehouse.py#L48 opw-5383719 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239217
This update resolves an issue where updating the amount of a payment with multiple liquidity lines would cause an error. The fix ensures that the payment's journal entry accurately reflects changes to liquidity lines, improving payment processing reliability. This change impacts payments with complex liquidity line configurations.
Original PR description
This PR improves payment move synchronization and fixes an error that is caused while changing amount of a Payment that has multiple liquidity lines. Steps to reproduce: 1. Create payment with x…
This PR improves payment move synchronization and fixes an error that is caused while changing amount of a Payment that has multiple liquidity lines. Steps to reproduce: 1. Create payment with x amount and validate it. 2. Open the payment journal entry. 3. Reset to draft and update the liquidity line amount from x to (x - y) 4. Create another liquidity line with amount y to balance entry and post it. 5. Draft the payment and try to update the amount. A traceback will appear. `ValueError: Expected singleton` Cause: The lines for payment JE are prepared for the case assuming that there will be only 1 liquidity line, but since we have more than 1, we get a Singleton error. Description of changes made: While preparing values for move in `synchronize_to_moves()` check for multiple liquidity lines and append all values to write. Further, the `_prepare_move_line_default_vals()` is also improved in order to manage different type of move lines individually. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246675
This update fixes a bug in the Point of Sale (POS) system where products weren't grouped by category when a category was selected. Now, the POS will consistently group products by the chosen category, ensuring a smoother and more accurate customer experience. This resolves a previous issue impacting product organization within the POS interface.
Original PR description
Fix an issue in the POS when using `Group products by category` settings with a selected category would not group the product by category anymore. We now make sure that even when we select a category in POS, the products are still grouped by category. task-id: 5481961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243156
This update resolves a sporadic error that occurred during testing of the barcode dialog feature. The change ensures the view is fully updated before tests run, making the test results more reliable and consistent. This improves the stability of the barcode functionality.
Original PR description
This commit ensure to await the view to be correctly re-rendered. runbot-error-233551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246523
This update resolves an issue where Odoo wasn't correctly managing access to email messages related to activities. The changes enhance the system's ability to securely access and manage these messages, ensuring reliable email functionality within the application. This improves the overall performance and stability of Odoo's email features.
Original PR description
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#248125 Forward-Port-Of: odoo/odoo#245744
This update corrects a visual issue in the Odoo Kanban interface where the ribbon element would shift position when the ALT key was pressed. The change avoids a technical problem with CSS layering that caused the misalignment. This ensures the ribbon remains correctly positioned on Kanban cards for a consistent user experience.
Original PR description
The CSS rules of `.o_record_selection_available` are used to add a selection overlay on kanban cards. These rules relied on `filter: brightness()` to slightly dim all child elements when pressing `ALT`. However, using filter creates a new stacking context. As a result, when a ribbon is present, it no longer sticks to the card border and becomes misplaced. This commit updates the rules to avoid that behavior and keep the ribbon correctly positioned. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248164 Forward-Port-Of: odoo/odoo#247985
This update resolves a crash that occurred when creating accounting reports with budget filters and percentage calculations. The fix ensures the system doesn't fail when required data is missing, allowing users to create and utilize budget filters without errors. This improves report stability and functionality.
Original PR description
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation…
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation Engine = External Value** and **Formula = 0** on report line. * Add a report column with **Figure Type = Monetary**. * Create a menu item for the report. * Open the report and click **Budget**. * Create a new budget filter and click **Create**. **Observed behavior:** * The system crashes with `TypeError: 'NoneType' object is not subscriptable`. * The error occurs while accessing budget column values. **Cause:** * Budget comparison logic assumes required budget columns always exist. * When the report configuration lacks compatible budget columns, internal variables remain unset and are accessed anyway. **Fix:** * Add a safety check to skip budget comparison when required columns are missing. * Prevents the crash and allows budget filters to be created safely. opw-5357339 Forward-Port-Of: odoo/enterprise#104162
This update resolves an issue where Guatemalan companies using branch settings would incorrectly display a 'Missing required field' error for the Service Provider setting. The fix ensures this field is only required for the main company, streamlining the process for branch users.
Original PR description
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no…
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no changes were made. ### **Steps to reproduce:** 1) Install `l10n_gt_edi` and switch to a GT company. 2) Create a branch of the GT company. 3) In the parent company, go to Accounting Settings, set the Guatemala Localization to 'Demo', and save. 4) Switch to the branch company. 5) Open Accounting Settings and click Save. ### **Observed Behavior:** An error occurs because `l10n_gt_edi_service_provider` is empty but required. ### **Root Cause:** The `l10n_gt_edi_service_provider` field is marked as `required` whenever `country_code == 'GT'` (see[1]). However, the field is hidden in branch companies via the `invisible="not l10n_gt_edi_is_root_company"` domain on the settings block. Because the field is required but empty (and invisible to the user), the form validation fails. [1]- https://github.com/odoo/enterprise/blob/6f3265aad51a264bee754ca239e8a5019487b38c/l10n_gt_edi/views/res_config_settings_views.xml#L19-L22 ### **FIX:** Update the `required` domain to include `l10n_gt_edi_is_root_company`. This ensures the field is only mandatory in the root company where it is actually visible and configurable and also set the `l10n_gt_edi_service_provider` for branch company same as parent company. **opw-5385819** Forward-Port-Of: odoo/enterprise#106323
This update fixes a user experience issue where the "Some required fields are not filled" warning appeared twice when the salary configurator form was submitted with empty required fields. The fix removes redundant validation logic and clears existing warnings, ensuring a cleaner and more reliable user experience. This improves usability and prevents confusion.
Original PR description
On submitting the salary configurator form, keeping the required fields empty, the warning “Some required fields are not filled” is displayed twice. [Steps to reproduce](https://drive.google.com/file/d/1bKeXhtXN5nY5pdVYhPiau7pDwGnrzgg4/view?usp=sharing) ## Root cause The same warning message was added for radio field validation, causing duplicate alerts to appear. ## Fix Removed the radio validation and centralized with other fields validations. ## Additionally Remove existing alerts to prevent stacking of warnings on multiple clicks on button. task-[5113853](https://www.odoo.com/odoo/project/1251/tasks/5113853) Forward-Port-Of: odoo/enterprise#102096
This update corrects a previous issue where the payslip report displayed the company's working schedule instead of the employee's. The report has been updated to accurately reflect the employee's individual working schedule, ensuring payroll reports are more accurate and relevant.
Original PR description
-The display for working schedule info in the payslip report was referring to the company's working schedule. -The report has been adjusted to include the employee's working schedule. -Task #5900303 Forward-Port-Of: odoo/enterprise#106266
2 changes
Resolved issues and error corrections
This update prevents a crash that occurred when using the budget filter in accounting reports. The issue stemmed from the system incorrectly assuming budget columns were always present, leading to an error. The fix adds a safety check to skip budget comparison when columns are missing, ensuring stable report generation.
Original PR description
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation…
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation Engine = External Value** and **Formula = 0** on report line. * Add a report column with **Figure Type = Monetary**. * Create a menu item for the report. * Open the report and click **Budget**. * Create a new budget filter and click **Create**. **Observed behavior:** * The system crashes with `TypeError: 'NoneType' object is not subscriptable`. * The error occurs while accessing budget column values. **Cause:** * Budget comparison logic assumes required budget columns always exist. * When the report configuration lacks compatible budget columns, internal variables remain unset and are accessed anyway. **Fix:** * Add a safety check to skip budget comparison when required columns are missing. * Prevents the crash and allows budget filters to be created safely. opw-5357339 Forward-Port-Of: odoo/enterprise#104162
This update resolves an issue where saving settings in a Guatemalan company's branch would incorrectly display a 'Missing required field' error. The fix ensures the 'Service Provider' field is correctly populated and required only for the main company, streamlining the setup process for branch offices.
Original PR description
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no…
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no changes were made. ### **Steps to reproduce:** 1) Install `l10n_gt_edi` and switch to a GT company. 2) Create a branch of the GT company. 3) In the parent company, go to Accounting Settings, set the Guatemala Localization to 'Demo', and save. 4) Switch to the branch company. 5) Open Accounting Settings and click Save. ### **Observed Behavior:** An error occurs because `l10n_gt_edi_service_provider` is empty but required. ### **Root Cause:** The `l10n_gt_edi_service_provider` field is marked as `required` whenever `country_code == 'GT'` (see[1]). However, the field is hidden in branch companies via the `invisible="not l10n_gt_edi_is_root_company"` domain on the settings block. Because the field is required but empty (and invisible to the user), the form validation fails. [1]- https://github.com/odoo/enterprise/blob/6f3265aad51a264bee754ca239e8a5019487b38c/l10n_gt_edi/views/res_config_settings_views.xml#L19-L22 ### **FIX:** Update the `required` domain to include `l10n_gt_edi_is_root_company`. This ensures the field is only mandatory in the root company where it is actually visible and configurable and also set the `l10n_gt_edi_service_provider` for branch company same as parent company. **opw-5385819** Forward-Port-Of: odoo/enterprise#106323
16 changes
Enhancements to existing features
This update enhances the chatter interface by adding a company card with details sourced from DNB. Industry tags previously stored separately are now integrated into this card, providing a more complete view of partner information. This improves communication and data accessibility.
Original PR description
Before: Industry tags coming from DnB were stored in the Tags section of res.partner. and there was no Company info card in chatter. After: Industry tags coming from DnB are not stored in the Tags section of res.partner. Company card is created in chatter that is having details from Dnb along with tags. task-5373200 Forward-Port-Of: odoo/odoo#239464
Resolved issues and error corrections
This update resolves an issue where Sale Orders imported through POS and paid with online payments remained in 'Quotation' status. The fix ensures that the Sale Order's state is correctly updated to 'Paid' after online payment processing, streamlining the order management process. This improves data accuracy and prevents manual intervention.
Original PR description
When a Sale Order was imported in PoS and paid using online payment method, the SO's state stayed in Quotation. Steps to reproduce: ------------------- * Create a new Sale Order with a product available in POS * Add Online Payment in the Payment Methods * Import and settle the Order in POS * Pay the order with the Online Payment > Observation: In Sale app, the Sale Order is still in Quotation state. Why the fix: ------------ Online payments call `action_pos_order_paid()` directly, which only sets the POS order state to paid and never confirms the linked sale.order. Other payment methods do it in `sync_from_ui()`. Extended `action_pos_order_paid()` in pos_sale will now confirm linked quotations after POS marks the order as paid. opw-5022526 Forward-Port-Of: odoo/odoo#247998 Forward-Port-Of: odoo/odoo#230112
This update resolves an issue where serial numbers assigned to products during repair orders would disappear from the system. The fix ensures that all stock movements, including those using generic stock, correctly display the assigned serial number, improving accuracy and traceability. This prevents data discrepancies and ensures proper tracking of serialized items.
Original PR description
Steps to reproduce: 1. Create a storable product with tracking set to 'By Quantity'. 2. Update the Quantity on Hand (e.g., 100 units). 3. Change the product tracking to 'By Serial Number'. 4. Create…
Steps to reproduce: 1. Create a storable product with tracking set to 'By Quantity'. 2. Update the Quantity on Hand (e.g., 100 units). 3. Change the product tracking to 'By Serial Number'. 4. Create a Repair Order for this product. 5. Add a line, select a specific Serial Number, and click Save. 6. Observe that the serial number disappears. Cause: When reserving stock that was originally created as 'Generic' (no serial), the `_prepare_move_line_vals` method returns `lot_id=False`. The repair view uses `_compute_lot_ids` to display selected lots, which filters out any move lines where `lot_id` is False. This causes the new line to be effectively invisible to the UI immediately after creation. Solution: In the `_set_lot_ids` inverse method, explicitly force the `lot_id` into the create values dictionary (`move_line_vals`). This ensures that even if Odoo reserves generic stock, the resulting move line is born with the correct Serial Number identity, keeping it visible and valid. opw-5156267 Forward-Port-Of: odoo/odoo#247885 Forward-Port-Of: odoo/odoo#247150
A previous issue prevented users from printing bank statements from certain journal entries, resulting in an access error. This update corrects a technical problem where the system was incorrectly accessing bank statement data, now allowing users to reliably print bank statements from the Accounting Dashboard.
Original PR description
In Bank Statement list view users may select a statement and download a pdf report. However, currently, the load of extra print options may raise an error. Steps to reproduce: - In Accounting Dashboard, from a bank journal card, 3 dots > Statements - Select a line (it needs to have an id not present in `account.move`) - Click 'Print' button Issue: Access error may occur, stating the record has been deleted or it is inaccessible. This happens because backend method `get_extra_print_items` is called on `account.move` with the id of the `account.bank.statement` On accessing the record fields we get the error A solution is to avoid loading extra print item with loadExtraPrintItems if we are not in the `account.move` model opw-5500506 Forward-Port-Of: odoo/odoo#246292
This update resolves a random issue where editing the website's mega menu caused errors. The fix ensures the system waits for related processes to complete before making changes, preventing conflicts and ensuring a smoother user experience. This improves website stability and reduces potential disruptions for users.
Original PR description
The test `test_31_website_edit_megamenu_big_icons_subtitles` is failing randomly and more often with watch=True When selecting the link, `_updateRightPanelContent` is called, which in turns calls `_closeWidgets`. We should wait for that call to be finished before interacting with the sidebar. When the widgets are closed, the active class is removed from `Big Icons Subtitles´. It is already too late because we already changed the MegaMenuLayout option. Since nothing changes inside the DOM, we need to wait a certain amount of time before proceeding. runbot-163061 Forward-Port-Of: odoo/odoo#219942
This update ensures that UBL BIS3 files generated by Odoo are valid according to PEPPOL standards. Previously, these files were rejected due to missing buyer and seller electronic addresses. Now, Odoo automatically enforces these address requirements, streamlining the UBL file generation process.
Original PR description
If EndpointID is not set, the generated file is invalid due to the 2 following rules: [PEPPOL-EN16931-R010] Buyer electronic address MUST be provided. [PEPPOL-EN16931-R020] Seller electronic address MUST be provided. Since this is a configuration issue, there is no point of sending such files to be rejected right away. Instead, let's add those 2 contraints ODOO-side. task-5890887 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246961
This update fixes an issue where anonymous users registering for events bypassed the address form, leading to incorrect tax calculations on sale orders. The fix ensures the address form is always displayed during event registration, guaranteeing accurate tax application based on the user's billing address. This improves the reliability of event ticket sales.
Original PR description
**Steps to reproduce:** - Install Website/Event/Sales apps - Create a new event and set a ticket price - Create a fiscal position (with specific tax) for a country with `auto_apply` enabled - Publish…
**Steps to reproduce:** - Install Website/Event/Sales apps - Create a new event and set a ticket price - Create a fiscal position (with specific tax) for a country with `auto_apply` enabled - Publish the event - Register to the event as a anonymous user - The process bypasses the address form and goes directly to payment - The resulting sale order will have no fiscal position - Prices won't be impacted by taxes related to the user billing address **Issue:** Address form is skipped before payment for event registration of a public user as `_needs_customer_address` is not overwritten properly in some module. This is probably due to a refactoring that changed how the required information is evaluated in the payment flow (see related commit). **Fix:** Set `_needs_customer_address` to `True` by default to avoid such issues in dependant modules. Might need to remove this feature in master as the workarounds are not that clean (geo_ip, check on fiscal position enabled, overwrite everywhere, others ?). Similar fix is done for appointments with payment enabled. related: https://github.com/odoo/odoo/commit/d43f0423667835512e16c3fd3474328da63a948d original-task: https://www.odoo.com/odoo/project/49/tasks/4307281 opw-5143124
This update resolves an issue where Ctrl+A followed by Delete wouldn't remove all text when the editable area started with a non-editable element. The fix ensures the selection correctly anchors to the deepest editable position, guaranteeing full content removal. This improves the editor's functionality and user experience.
Original PR description
Description of the issue this PR addresses: - When an element with `contenteditable="false"` is the first node in the editable, pressing Ctrl+A followed by Delete does not remove the entire selection and instead deletes only the last character. Desired behavior after PR is merged: - Ensure that the selection is anchored to the deepest editable position when performing a select-all operation so that the full editable content is correctly selected and removed. Steps to reproduce: - Insert a toggle list using `/togglelist` in a new todo - Add one or more paragraphs below it and enter some text - Select all content using Ctrl+A - Press Backspace to delete the selection - Observe that only the last character is removed Backport of: 67e6a617def3bf4f9eb6b63b0850f5cfc773bccc task-5363926 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the ribbon on Kanban cards was misaligned when the ALT key was pressed. The fix prevents a CSS rule from creating a stacking context that caused the ribbon to shift. This ensures the ribbon remains correctly positioned on the card for a consistent user experience.
Original PR description
The CSS rules of `.o_record_selection_available` are used to add a selection overlay on kanban cards. These rules relied on `filter: brightness()` to slightly dim all child elements when pressing `ALT`. However, using filter creates a new stacking context. As a result, when a ribbon is present, it no longer sticks to the card border and becomes misplaced. This commit updates the rules to avoid that behavior and keep the ribbon correctly positioned. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247985
This update fixes an issue where resetting dynamic colors in SVG illustrations within the website editor would cause the images to disappear. Now, resetting the color palette correctly restores the theme colors, ensuring SVG images remain visible and functional. This improves the user experience when customizing website designs.
Original PR description
Steps to reproduce: - Insert a media library SVG illustration. - Change one of its Dynamic Colors. - Click the reset button in the colorpicker. => The SVG disappears. Before this commit, resetting a dynamic SVG color could send an empty color value and the image failed to render. After this commit, resetting restores the theme palette colors so the SVG stays visible. task-5868584 Forward-Port-Of: odoo/odoo#245778
This update fixes a problem where browser translation plugins were incorrectly replacing editable text with translated versions, disrupting the auto-save feature. By adding a 'no-translate' attribute to editable fields, this change ensures that original content remains intact and the auto-save process functions correctly.
Original PR description
Browser translation plugins were altering editable content by replacing the original content with translated versions, which caused issues when paired with auto-save. To prevent this behavior, the attribute `translate="no"` has been added to editable fields. task-5485078 Forward-Port-Of: odoo/odoo#247827
This update resolves an issue that prevented accurate payment move synchronization when a payment had multiple liquidity lines. The fix ensures the system correctly handles payments with varying liquidity line amounts, preventing errors and improving financial reporting accuracy. This change impacts the account module and related payment processing.
Original PR description
This PR improves payment move synchronization and fixes an error that is caused while changing amount of a Payment that has multiple liquidity lines. Steps to reproduce: 1. Create payment with x…
This PR improves payment move synchronization and fixes an error that is caused while changing amount of a Payment that has multiple liquidity lines. Steps to reproduce: 1. Create payment with x amount and validate it. 2. Open the payment journal entry. 3. Reset to draft and update the liquidity line amount from x to (x - y) 4. Create another liquidity line with amount y to balance entry and post it. 5. Draft the payment and try to update the amount. A traceback will appear. `ValueError: Expected singleton` Cause: The lines for payment JE are prepared for the case assuming that there will be only 1 liquidity line, but since we have more than 1, we get a Singleton error. Description of changes made: While preparing values for move in `synchronize_to_moves()` check for multiple liquidity lines and append all values to write. Further, the `_prepare_move_line_default_vals()` is also improved in order to manage different type of move lines individually. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246675
This update resolves an issue where the Stock Forecasted report continued to display incorrect stock quantities after a draft repair order was deleted. The fix ensures that related stock moves are properly cancelled when a draft repair order is removed, providing accurate stock reporting for repair orders.
Original PR description
**Steps to reproduce:** * Install the *repair* module. * Create a *storable product* and set some **On Hand** quantity. * Go to *Repairs* and create a new **Repair Order**. Keep the repair order in…
**Steps to reproduce:** * Install the *repair* module. * Create a *storable product* and set some **On Hand** quantity. * Go to *Repairs* and create a new **Repair Order**. Keep the repair order in *draft* state (do not confirm). * In the **Parts** tab, add the storable product with the operation type set to *Add*. * Open the **Stock Forecasted** report for the added product. Note the quantity shown under *Outgoing Draft Transfer*. * Delete the **Repair Order**. * Open the **Stock Forecasted** report for the same product again. **Observed behavior:** * The quantity still appears in the **Stock Forecasted** report under *Outgoing Draft Transfer* even after the repair order is deleted. **Cause:** * Deleting a draft repair order triggers `_unlink_except_confirmed`. * This method prevents related stock moves from changing their state to cancel when the repair order is deleted. * The *Outgoing Draft Transfer* value is calculated as the sum of quantities of stock moves in draft state at draft state. https://github.com/odoo/odoo/blob/75ca0fec9a0d3b1e3a05a8bf3101bbe21846ac7a/addons/stock/report/stock_forecasted.py#L49 https://github.com/odoo/odoo/blob/75ca0fec9a0d3b1e3a05a8bf3101bbe21846ac7a/addons/stock/report/stock_forecasted.py#L90 * As a result, deleting a draft repair order leaves related stock moves in draft state, causing them to appear under *Outgoing Draft Transfer* https://github.com/odoo/odoo/blob/20d96c54b795b8d617776afe9877fb5c6632c666/addons/repair/models/repair.py#L332-L335 **Fix:** * Ensure that related stock moves are properly cancelled when a draft repair order is deleted. --- opw-5449323 Forward-Port-Of: odoo/odoo#247348 Forward-Port-Of: odoo/odoo#241970
This update resolves a sporadic error that occurred during testing of the barcode dialog feature. The change ensures the view is fully re-rendered before the test runs, making the test results consistent and reliable. This improves the stability of the barcode dialog functionality.
Original PR description
This commit ensure to await the view to be correctly re-rendered. runbot-error-233551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246523
This update prevents a crash that occurred when using the budget filter in accounting reports. The issue stemmed from incorrect assumptions about required data columns, leading to errors when the report configuration was incomplete. The fix adds a safety check to gracefully handle missing columns, ensuring the budget filter functionality works reliably.
Original PR description
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation…
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation Engine = External Value** and **Formula = 0** on report line. * Add a report column with **Figure Type = Monetary**. * Create a menu item for the report. * Open the report and click **Budget**. * Create a new budget filter and click **Create**. **Observed behavior:** * The system crashes with `TypeError: 'NoneType' object is not subscriptable`. * The error occurs while accessing budget column values. **Cause:** * Budget comparison logic assumes required budget columns always exist. * When the report configuration lacks compatible budget columns, internal variables remain unset and are accessed anyway. **Fix:** * Add a safety check to skip budget comparison when required columns are missing. * Prevents the crash and allows budget filters to be created safely. opw-5357339 Forward-Port-Of: odoo/enterprise#104162
This update resolves an error that occurred when saving settings in branch companies using the Guatemalan localization. The system was incorrectly flagging a required field as empty, even when no changes were made. This change ensures the field is only required for the main company, improving usability for branch operations.
Original PR description
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no…
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no changes were made. ### **Steps to reproduce:** 1) Install `l10n_gt_edi` and switch to a GT company. 2) Create a branch of the GT company. 3) In the parent company, go to Accounting Settings, set the Guatemala Localization to 'Demo', and save. 4) Switch to the branch company. 5) Open Accounting Settings and click Save. ### **Observed Behavior:** An error occurs because `l10n_gt_edi_service_provider` is empty but required. ### **Root Cause:** The `l10n_gt_edi_service_provider` field is marked as `required` whenever `country_code == 'GT'` (see[1]). However, the field is hidden in branch companies via the `invisible="not l10n_gt_edi_is_root_company"` domain on the settings block. Because the field is required but empty (and invisible to the user), the form validation fails. [1]- https://github.com/odoo/enterprise/blob/6f3265aad51a264bee754ca239e8a5019487b38c/l10n_gt_edi/views/res_config_settings_views.xml#L19-L22 ### **FIX:** Update the `required` domain to include `l10n_gt_edi_is_root_company`. This ensures the field is only mandatory in the root company where it is actually visible and configurable and also set the `l10n_gt_edi_service_provider` for branch company same as parent company. **opw-5385819** Forward-Port-Of: odoo/enterprise#106323
2 changes
Resolved issues and error corrections
This update resolves a crash that occurred when using the budget filter in accounting reports. The fix ensures the system handles report configurations without necessary budget columns gracefully, preventing errors and allowing users to create budget filters without disruption. This improves report stability and usability.
Original PR description
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation…
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation Engine = External Value** and **Formula = 0** on report line. * Add a report column with **Figure Type = Monetary**. * Create a menu item for the report. * Open the report and click **Budget**. * Create a new budget filter and click **Create**. **Observed behavior:** * The system crashes with `TypeError: 'NoneType' object is not subscriptable`. * The error occurs while accessing budget column values. **Cause:** * Budget comparison logic assumes required budget columns always exist. * When the report configuration lacks compatible budget columns, internal variables remain unset and are accessed anyway. **Fix:** * Add a safety check to skip budget comparison when required columns are missing. * Prevents the crash and allows budget filters to be created safely. opw-5357339 Forward-Port-Of: odoo/enterprise#104162
This update resolves an issue where branch companies in Guatemala were incorrectly flagged with a 'Missing required field' error when saving settings. The fix ensures the 'Service Provider' field is only required for the main company, streamlining the process for branch office management. This prevents unnecessary disruptions for users.
Original PR description
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no…
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no changes were made. ### **Steps to reproduce:** 1) Install `l10n_gt_edi` and switch to a GT company. 2) Create a branch of the GT company. 3) In the parent company, go to Accounting Settings, set the Guatemala Localization to 'Demo', and save. 4) Switch to the branch company. 5) Open Accounting Settings and click Save. ### **Observed Behavior:** An error occurs because `l10n_gt_edi_service_provider` is empty but required. ### **Root Cause:** The `l10n_gt_edi_service_provider` field is marked as `required` whenever `country_code == 'GT'` (see[1]). However, the field is hidden in branch companies via the `invisible="not l10n_gt_edi_is_root_company"` domain on the settings block. Because the field is required but empty (and invisible to the user), the form validation fails. [1]- https://github.com/odoo/enterprise/blob/6f3265aad51a264bee754ca239e8a5019487b38c/l10n_gt_edi/views/res_config_settings_views.xml#L19-L22 ### **FIX:** Update the `required` domain to include `l10n_gt_edi_is_root_company`. This ensures the field is only mandatory in the root company where it is actually visible and configurable and also set the `l10n_gt_edi_service_provider` for branch company same as parent company. **opw-5385819** Forward-Port-Of: odoo/enterprise#106323
6 changes
New functionality added to Odoo
This update introduces new reports for Colombian tax compliance, generating CSV files for submission to the DIAN. These reports automate the creation of required XML files, simplifying the process for users to meet reporting deadlines and regulations. The changes include new data models and configurations to manage these reports effectively.
Original PR description
Purpose: Exogenous information is the set of data that individuals and legal entities must periodically submit to the DIAN, with different deadlines depending on the taxpayer's characteristics,…
Purpose: Exogenous information is the set of data that individuals and legal entities must periodically submit to the DIAN, with different deadlines depending on the taxpayer's characteristics, regarding transactions with clients or users of their products or services. DIAN requires exogenous information reports to be delivered as an XML file. The goal is to generate the most important formats (1001, 1003, 1005, 1007, 1008 and 1009) as a CSV, so the user can submit it to the DIAN for the XML generation. Key Aspects of the reports: - Each report has a set amount of columns(including categories) that must be displayed and the columns are position dependent. - The rows of the report can be categorized accordingly - Header - AMLs grouped by partner that are not considered minor amounts - AMLs grouped in a minor amount row based on the report's minor amount rule - The minor amount rules are dependent on the exogenous categories Additional Changes: Models: - l10n_co.exogenous.category: - Displayed as columns on the report - Used as a basis for the minor amount rules in the report - sequence: the column position of the category on the report - report_type: the report the category is applicable to - name: name of the category displayed on the report - l10n_co.exogenous.config: -Defines how each report is used per chart of account - report_type: determines which report the config is for - exogenous_category_id: the exogenous category used - value_to_report: the type of amount to aggregate for said category, such as credit, debit, balance - concept: the concept if required by the report - account_ids: a many2many relationship to chart of accounts the config is applicable to Relations: - account_account_exogenous_config: -the Many2many relation table between - account.account - l10n_co.exogenous.config Currency: - l10n_co.reports.uvt: - Used to compare amounts in minor amount rules - A tax value unit used by the Colombian government to standardize tax values Wizard: - l10n_co_reports.exogenous_report.wizard: Allows the user to generate the CSV based on the report Function Workflow: - Generate account moves using the accounts that are mapped to exogenous configs - Navigate to the General Ledger report - Click on the action cog to dropdown the button, `Exogenous Report CSV` - A wizard will pop-up to allow the user to select the type of exogenous report they want to export - A CSV file will be downloaded onto the user's machine so they can import the file into the DIAN pre-validator tool task-5061117
This update adds the necessary data to support Taiwan's VAT tax reporting requirements within Odoo. Specifically, it incorporates data records for the `account.return.type` model, enabling accurate reporting for Taiwanese businesses. This change aligns with ongoing efforts to improve Odoo's localization capabilities.
Original PR description
This commit adds the necessary data records for the `account.return.type` model to support Taiwan VAT tax return. [Task-3371895](https://www.odoo.com/odoo/project.task/3371895) Forward-Port-Of: odoo/enterprise#105739 Forward-Port-Of: odoo/enterprise#104698
Enhancements to existing features
This update improves the way Odoo handles printer configurations for IoT-enabled point-of-sale systems. The change aligns with a previous Odoo development to standardize printer formats, enhancing compatibility and reliability. This ensures smoother operation of IoT printers within the enterprise system.
Original PR description
See also odoo/odoo#247496
Resolved issues and error corrections
This update restores the printer type selection field within the Point of Sale module. Previously, this field was moved, causing confusion for users. This change ensures the correct printer selection process is maintained within the POS system, improving usability and accuracy.
Original PR description
See odoo/odoo#247317
This update corrects a user experience issue where the 'Some required fields are not filled' warning appeared twice when the salary configurator form was submitted with empty required fields. The fix removes redundant validation and clears existing warnings, ensuring a cleaner and more reliable user experience. This improves usability and prevents confusion.
Original PR description
On submitting the salary configurator form, keeping the required fields empty, the warning “Some required fields are not filled” is displayed twice. [Steps to reproduce](https://drive.google.com/file/d/1bKeXhtXN5nY5pdVYhPiau7pDwGnrzgg4/view?usp=sharing) ## Root cause The same warning message was added for radio field validation, causing duplicate alerts to appear. ## Fix Removed the radio validation and centralized with other fields validations. ## Additionally Remove existing alerts to prevent stacking of warnings on multiple clicks on button. task-[5113853](https://www.odoo.com/odoo/project/1251/tasks/5113853) Forward-Port-Of: odoo/enterprise#102096
This update prevents a crash that occurred when using the budget filter in accounting reports. The issue stemmed from the system incorrectly assuming budget columns were always present, leading to an error. The fix adds a safety check to gracefully handle missing columns, ensuring the budget filter functionality works reliably.
Original PR description
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation…
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation Engine = External Value** and **Formula = 0** on report line. * Add a report column with **Figure Type = Monetary**. * Create a menu item for the report. * Open the report and click **Budget**. * Create a new budget filter and click **Create**. **Observed behavior:** * The system crashes with `TypeError: 'NoneType' object is not subscriptable`. * The error occurs while accessing budget column values. **Cause:** * Budget comparison logic assumes required budget columns always exist. * When the report configuration lacks compatible budget columns, internal variables remain unset and are accessed anyway. **Fix:** * Add a safety check to skip budget comparison when required columns are missing. * Prevents the crash and allows budget filters to be created safely. opw-5357339 Forward-Port-Of: odoo/enterprise#104162
5 changes
Enhancements to existing features
This update adjusts the Spanish reporting module to reflect a recent change in account naming conventions within Odoo. This ensures accurate financial reporting for Spanish businesses using the Odoo Enterprise platform. The change is a minor update to maintain data integrity.
Resolved issues and error corrections
This update fixes a misleading warning message that appeared during PDF upload tests. The change silences specific logging messages from the PDF parsing library, ensuring test failures are clear and accurate without unnecessary noise. This improves the reliability of our PDF upload testing process.
Original PR description
Before this commit, the test test_invalid_pdf_upload was logging pypdf warnings when testing invalid PDF uploads, because the relaxed PDF parsing attempts to read malformed PDFs before raising a ValidationError. After this commit, the test mutes the pypdf._reader logger in addition to the existing mute, preventing the "invalid pdf header" warning from appearing during expected test failures. task-5921293
This update resolves an issue where users without accounting permissions couldn't duplicate partners using the l10n_mx_edi module. The change prevents the copying of sensitive data related to Mexican EDI addenda, ensuring data integrity and preventing errors. This ensures consistent partner management across the system.
Original PR description
l10n_mx_edi.addenda field on partner require accounting right to duplicate. So you try to duplicate a partner using a user without accounting rights, you will get this error: ``` You are not allowed to access 'Addenda for Mexican EDI' (l10n_mx_edi.addenda) records. This operation is allowed for the following groups: - Accounting/Administrator - Accounting/Invoicing ``` This commit avoid to copy the data of this field when copying the partner. opw-5495639
This update ensures invoices for Point of Sale orders are correctly marked as paid when a settle due order is used to complete the payment. Previously, the system didn't account for payments from settle due orders, leading to invoices appearing unpaid. This fix ensures accurate invoice status and payment tracking.
Original PR description
If you made a PoS order paid with the customer account payment method, and then you created a settle due order to settle the previous one. If you then create the invoice for the original order, the invoice would appear as unpaid, because the payments of the settle due order were not taken into account. Steps to reproduce: ------------------- * Create a PoS order and pay with the customer account payment method * Settle the order that you just created with a settle due order * Close the session * Go on the original order and create the invoice > Observation: The invoice appears as unpaid when it should be paid. Why the fix: ------------ When creating the invoice we gather all the payments of the order to create the corresponding journal entries. But the payment of the settle due order were not included. So the order was considered as unpaid. opw-5268042
This update fixes an issue where month names were incorrectly displaying based on the user's locale instead of the Odoo environment's language. This ensures that month names are consistently shown in the correct language for each user, improving accuracy and user experience across various Odoo modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Community PR: odoo/odoo#246790 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364 Forward-Port-Of: odoo/enterprise#106876 Forward-Port-Of: odoo/enterprise#106175
12 changes
Enhancements to existing features
This update enhances the handling of Romanian VAT invoices from the ANAF tax authority. Now, the system automatically downloads and attaches the official PDF version of the invoice, providing accountants with a visual document for comparison and compliance. This eliminates the previous reliance solely on XML data.
Original PR description
### Before For bills from the Romanian ANAF we only downloaded an XML and imported the data. There is no visual aid for the accountant to see and compare the received document. ### Now We use the ANAF service to get the official "PDF" version of the invoice. This is requested for any new bill we get through ANAF that doesn't already contain a pdf from the vendor and it is set as the main attachment. task-5877171
This update enhances the partner information displayed in Odoo's chatter by integrating data from DnB. Now, a dedicated company card is created in chatter, pulling in relevant details alongside the previously stored industry tags. This provides a more complete view of partner information directly within conversations.
Original PR description
Before: Industry tags coming from DnB were stored in the Tags section of res.partner. and there was no Company info card in chatter. After: Industry tags coming from DnB are not stored in the Tags section of res.partner. Company card is created in chatter that is having details from Dnb along with tags. task-5373200 Forward-Port-Of: odoo/odoo#239464
Resolved issues and error corrections
This update fixes an issue where the Stock Forecasted report incorrectly displayed stock quantities after a repair order was deleted. The fix ensures that related stock moves are properly cancelled when a draft repair order is removed, providing accurate stock reporting. This improves the reliability of inventory tracking within the repair process.
Original PR description
**Steps to reproduce:** * Install the *repair* module. * Create a *storable product* and set some **On Hand** quantity. * Go to *Repairs* and create a new **Repair Order**. Keep the repair order in…
**Steps to reproduce:** * Install the *repair* module. * Create a *storable product* and set some **On Hand** quantity. * Go to *Repairs* and create a new **Repair Order**. Keep the repair order in *draft* state (do not confirm). * In the **Parts** tab, add the storable product with the operation type set to *Add*. * Open the **Stock Forecasted** report for the added product. Note the quantity shown under *Outgoing Draft Transfer*. * Delete the **Repair Order**. * Open the **Stock Forecasted** report for the same product again. **Observed behavior:** * The quantity still appears in the **Stock Forecasted** report under *Outgoing Draft Transfer* even after the repair order is deleted. **Cause:** * Deleting a draft repair order triggers `_unlink_except_confirmed`. * This method prevents related stock moves from changing their state to cancel when the repair order is deleted. * The *Outgoing Draft Transfer* value is calculated as the sum of quantities of stock moves in draft state at draft state. https://github.com/odoo/odoo/blob/75ca0fec9a0d3b1e3a05a8bf3101bbe21846ac7a/addons/stock/report/stock_forecasted.py#L49 https://github.com/odoo/odoo/blob/75ca0fec9a0d3b1e3a05a8bf3101bbe21846ac7a/addons/stock/report/stock_forecasted.py#L90 * As a result, deleting a draft repair order leaves related stock moves in draft state, causing them to appear under *Outgoing Draft Transfer* https://github.com/odoo/odoo/blob/20d96c54b795b8d617776afe9877fb5c6632c666/addons/repair/models/repair.py#L332-L335 **Fix:** * Ensure that related stock moves are properly cancelled when a draft repair order is deleted. --- opw-5449323 Forward-Port-Of: odoo/odoo#241970
This update enhances the reliability of sending Peppol documents by limiting the number of invoices processed in each request. Previously, sending a large batch of invoices could cause system slowdowns. Now, the system batches invoices in groups of 100, preventing timeouts and ensuring smoother operation.
Original PR description
The current implementation of Peppol document sending attempts to process all selected invoices in a single API call. When a user sends a very large number of invoices at once, this can lead to timeouts from the Peppol proxy or Odoo worker, resulting in system instability. This commit introduces batching for the `send_document` API call, limiting each request to a maximum of 100 invoices. This ensures more reliable processing and prevents request payload size issues. Task-5877964 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a sporadic error in the barcode scanner test within the Odoo web interface. The change ensures the view is fully re-rendered before the test runs, making the test results more reliable and consistent. This improves the stability of the barcode scanning functionality.
Original PR description
This commit ensure to await the view to be correctly re-rendered. runbot-error-233551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where website redirects were losing important URL parameters, causing errors when users attempted to access specific features. The fix ensures all parameters are correctly encoded during redirects, preventing errors and maintaining expected functionality. This improves the user experience and prevents disruptions to workflows.
Original PR description
Scenario from 17.0:
- set domain on website
- go to website /website/force/1?path=%2F%3Fa%3Db%26c%3Dd with another
domain
=> you are redirected to {domain}/?a=b instead of {domain}/?a=b&c=d
Scenario from 18.0:
- set domain on website
- go to /appointment/1 on other domain, select person date and time
- click on "Editor"
=> you get error:
> TypeError: AppointmentController.appointment_type_id_form() missing 1
> required positional argument: 'duration'
Cause: the /website/force/ domain redirection doesn't encode the
parameter when redirecting, so we lose parameters after the first one.
Fix: encode parameters when redirecting domain in /website/force/ route.
opw-5441957
Forward-Port-Of: odoo/odoo#242252This update resolves a bug that caused Odoo module updates to fail when encountering certain field types (like text fields) during the update process. The fix adds a check to ensure fields are of the correct type ('selection' or 'reference') before attempting to access their 'ondelete' attribute, preventing errors and ensuring smoother updates.
Original PR description
Description of the issue/feature this PR addresses: Fix AttributeError that occurs during module updates when processing selection field deletions. Current behavior before PR: When updating modules, an `AttributeError` occurs when trying to access the `ondelete` attribute on fields that are not Selection fields: AttributeError: 'Char' object has no attribute 'ondelete' Desired behavior after PR is merged: Add validation to check if the field type is 'selection' or 'reference' before attempting to access field.ondelete as a dictionary. Skip processing for incompatible field types to prevent AttributeError. @moduon MT-13588 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where validating purchase receipts for kits with different unit of measure categories (e.g., 'Units' vs. 'Length') would cause errors. The fix ensures accurate quantity calculations for kit receipts, particularly when the purchase order currency differs from the company currency, by correctly aggregating component move quantities.
Original PR description
Steps to reproduce ------------------ 1. Enable Units of Measure and Automatic Valuation. 2. Create: Product KIT, stockable, UoM category Unit, UoM = Units. BoM for KIT with at least one component…
Steps to reproduce
------------------
1. Enable Units of Measure and Automatic Valuation.
2. Create:
Product KIT, stockable, UoM category Unit, UoM = Units.
BoM for KIT with at least one component whose UoM is in a different
category (e.g. m from Length).
3. Go to the product's category and set the Costing Method to Average
Cost (AVCO) and the Inventory Valuation to Automated.
4. Create a PO for KIT in a currency different from the company currency.
5. Confirm the PO and validate the receipt.
Issue
-----
Validating the receipt raises:
> The unit of measure m defined on the order line doesn't belong to the
> same category as the unit of measure kit defined on the product…
If you keep the PO currency equal to the company currency, the same kit
and BoM work and the receipt posts correctly.
Cause of the issue
------------------
Validating the receipt will call the `_action_done` of stock.move's and generate the related accounting entries. During this call and the currency of the PO is different from the company currency the `_generate_valuation_lines_data` will call the `_get_currency_convert_date` method:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L134-L140
This call will in turn call the `_get_qty_received_without_self`:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L121-L122
which was not written to handle kit products since it assumes that the product of the PO is the same as the one of the related move:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L102-L108
Fix
---
The qty_received is relevant to the _get_currency_convert_date as the method compares the qty_invoiced with the qty_received to determine whether to use the Invoice Date (when qty_invoiced > qty_received) or the Receipt Date.
https://github.com/odoo/odoo/blob/888e086dc6c7823b07993e90f70e2849e988fa7a/addons/purchase_stock/models/stock_move.py#L122-L126
For kits, `qty_received` must be calculated by aggregating component
moves to accurately determine this status. Since the standard logic
crashes due to UoM mismatch, the override in `purchase_mrp` is
necessary to provide the correct quantity for this date selection.
opw-5030761
Forward-Port-Of: odoo/odoo#236276This update resolves a potential performance issue with the image field in Odoo. Previously, the system struggled to reliably display images due to delays in encoding. The change now explicitly waits for the image to load, ensuring a smoother and more consistent user experience.
Original PR description
Encoding the data to base64 can take some times. Before this commit we used this code: ```js await runAllTimers(); await animationFrame(); ``` Now we explicitly wait for the change to happen as awaiting an animation frame can't be enough. runbot-error-237568 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue preventing users from sending invoices via PEPPOL, which is a key feature for international sales. The problem stemmed from an audit trail restriction preventing attachment modifications during the PEPPOL sending process. The fix ensures attachments are handled correctly, allowing invoices to be successfully transmitted.
Original PR description
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company (e.g. DE Company) - In Accounting settings, activate Peppol - Create an invoice: * Customer: [a German customer…
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company (e.g. DE Company) - In Accounting settings, activate Peppol - Create an invoice: * Customer: [a German customer with VAT] * Invoice Lines: [a line with a tax] - Confirm the invoice - Send the invoice via PEPPOL **Issue:** A UserError is raised: "You cannot remove parts of the audit trail.". **Cause:** The audit trail prevent modifying an attachment. When sending an invoice to PEPPOL, a message is logged in the chatter with both the invoice PDF and XML as attachment. During the process, "res_model" and "res_id" fields of the attachments are set to the message record. Before doing it, "res_id" is removed in SQL to prevent raising the audit trail error. However, it fails because the value is still in cache. **Solution:** Invalidate these fields as it is done when sending the invoice without PEPPOL. https://github.com/odoo/odoo/commit/e0229d5c7fa89d32f67151d307161482c300ff20 opw-5916696 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247949
This update fixes an issue where the HTML editor toolbar incorrectly appeared on non-editable elements, causing instability. Now, the toolbar only displays for editable elements, ensuring a smoother and more reliable editing experience for users. This improves the overall usability of the HTML editor.
Original PR description
Current behavior before PR: - Removing formatting on a contenteditable false element infinite loop when removing format. - The toolbar could appear even when the target element had contenteditable false Desired behavior after PR is merged: - Now,the toolbar no longer opens when the selected element is contenteditable false - The toolbar is now only shown for elements with contenteditable true, except for QWeb and icon elements, where it remains accessible. task-5265416
This update corrects a bug where a POS order could incorrectly apply a pricelist even if it wasn't a valid option for the customer. The fix ensures that only available pricelists are used when changing a customer on a POS order, improving order accuracy and preventing potential pricing errors. This resolves issue OPW-5461556.
Original PR description
When changing the customer on a POS order, if the customer's pricelist is not in the list of available pricelists for the POS, but the pricelist was loaded due to loading a paid order, the POS would still set that pricelist on the order. opw-5461556 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
8 changes
Enhancements to existing features
This update enhances the chat interface by adding a company card with details sourced from DNB. Previously, industry tags from DNB were stored separately, but now they're integrated directly into this new company card within the chatter window, providing a more complete view of partner information.
Original PR description
Before: Industry tags coming from DnB were stored in the Tags section of res.partner. and there was no Company info card in chatter. After: Industry tags coming from DnB are not stored in the Tags section of res.partner. Company card is created in chatter that is having details from Dnb along with tags. task-5373200
Resolved issues and error corrections
This pull request adds a crucial test case to the account_edi_ebl_cii module, ensuring the system correctly processes Electronic Bank Letter (EBL) data in CII format. Previously, this specific functionality lacked adequate testing, potentially leading to errors in financial transactions. Merging this change strengthens the reliability and accuracy of our EBL processing.
Original PR description
Adding test for 5f5181c6b8eed3550432371227b22a36715cc857 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 update resolves a user error that prevented invoices from being sent via PEPPOL, a key compliance feature. The issue stemmed from the audit trail preventing attachment modifications during the PEPPOL sending process. The fix ensures attachments are handled correctly, allowing invoices to be successfully transmitted.
Original PR description
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company (e.g. DE Company) - In Accounting settings, activate Peppol - Create an invoice: * Customer: [a German customer…
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company (e.g. DE Company) - In Accounting settings, activate Peppol - Create an invoice: * Customer: [a German customer with VAT] * Invoice Lines: [a line with a tax] - Confirm the invoice - Send the invoice via PEPPOL **Issue:** A UserError is raised: "You cannot remove parts of the audit trail.". **Cause:** The audit trail prevent modifying an attachment. When sending an invoice to PEPPOL, a message is logged in the chatter with both the invoice PDF and XML as attachment. During the process, "res_model" and "res_id" fields of the attachments are set to the message record. Before doing it, "res_id" is removed in SQL to prevent raising the audit trail error. However, it fails because the value is still in cache. **Solution:** Invalidate these fields as it is done when sending the invoice without PEPPOL. https://github.com/odoo/odoo/commit/e0229d5c7fa89d32f67151d307161482c300ff20 opw-5916696 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue with part-time schedules and public holidays in the French localization module (l10n_fr_he_holidays). Previously, there were inconsistencies in how part-time schedules were handled alongside public holidays. This change ensures accurate scheduling and holiday calculations for French businesses, improving payroll and HR processes.
Original PR description
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 update resolves an issue where invoices created in a non-AFIP POS sales journal in Argentina didn't display available document types. The fix ensures that document types are correctly identified for these invoices, allowing for proper record-keeping and reporting. This improves the accuracy of financial data for businesses using this sales channel.
Original PR description
Issue: No documents are available for Invoices of a non AFIP POS sale journal. Steps to reproduce: - in a Company in Argentina. - Create a new journal named "NO-AFIP POS" of type "Sales" with documents, but not AFIP POS. - Create an invoice for "Consumidor Final Anónimo" with the journal "NO-AFIP POS". Current behavior: No document show in the Document Type field. Expected behavior: Some documents should appear. Solution: Find document for those sale journals as if they were journals using the AFIP POS system for pre-printed invoice. opw-5234311 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that the correct company is used when downloading FEC files, resolving a potential mismatch between the selected company in the user interface and the company used during file generation. Previously, the download process defaulted to the user's default company, leading to inaccurate reports. This fix guarantees that FEC files are generated and downloaded using the intended company data.
Original PR description
The FEC generation spans two HTTP requests: generate_fec (RPC call) and the download controller (plain GET). RPC calls include allowed_company_ids in the context, so self.env.company resolves correctly. But the plain GET to /download/fec_file/<id> carries no context, so self.env.company falls back to user.company_id (the user's default company), which may differ from the one selected in the UI. This commit aims to fix the issue by passing the company_id from generate_fec through the download URL and restore it in the controller via with_company(), with an access check to ensure the user belongs to that company. task-5926528 Forward-Port-Of: odoo/odoo#248126
This update enhances the security of invoices by preventing the use of untrusted accounts when processing inbound invoices. The team removed unnecessary calculations and logging logic, simplifying the process and relying on existing methods. This change ensures greater accuracy and reduces potential risks associated with invoice processing.
Original PR description
fixed some tests and remove the computation logic from account_move_reversal wizard, to rely on existing compute method --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247954
This update fixes an issue where Italian tax information (like VAT number) wasn't being correctly applied when creating a company record from an Italian ecommerce order. The change ensures that all required Italian tax fields are automatically populated, improving data accuracy and compliance for Italian businesses using Odoo.
Original PR description
**STEP TO REPRODUCE** 1. Create a ecommerce order on a shop page of a italian company. 2. Goes to the checkout page, enter info (company_name, l10n_it_codice_fiscale, l10n_it_pa_index). 3. On the contact created, click on create company. 4. Notice l10n_it fields are not propagated to the company. opw-5477372