Daily updates from Odoo
Thursday, January 8, 2026
57 changes · master
New functionality added to Odoo
This update adds a new wizard to consolidate and generate all 281.xx reports required for Belgian payroll compliance. This simplifies the reporting process and ensures accurate data for tax filings, addressing a key requirement for our Belgian clients. The changes also include thorough testing to guarantee report accuracy.
Original PR description
add new wizard to populate all the 281.xx reports Task: 5114330
This update adds new pivot and graph views to the Activities interface. These views will provide users with improved tools for analyzing and reporting on their tasks and communications, leading to better insights and decision-making.
Original PR description
Adds pivot and graph views to the Activities interface, allowing better analysis and reporting. Task-5342832
This update introduces a new model within the l10n_be_hr_payroll module to manage reorganisation measures related to employee contracts in Belgium. This allows for more accurate tracking and reporting of these changes, specifically addressing requirements for Belgian tax regulations. It impacts how employee contracts are handled within the payroll system.
Original PR description
TaskID: 5383912
This update adds pivot and graph views to Invoices, Bills, Credit Notes, and Refunds within the Odoo accounting module. This enhancement simplifies reporting and data analysis for users, providing more flexible ways to visualize and understand financial transactions.
Original PR description
Adding the pivot view and graph one to Invoices / Bills / Credit Notes / Refunds. so it will be easier for users to access it and use it task-5461903 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
Enhancements to existing features
This update introduces a new button within the holiday attest form, streamlining the process for directly allocating paid time off. Previously, users had to navigate through multiple steps to create an allocation; now, they can do it more quickly and efficiently. This improves user experience and reduces administrative overhead.
Original PR description
In this PR, we added a button in the holiday attest in the year n1 to ease the flow of creating an allocation directly. task-5214143.
This update improves the payment reporting process by allowing the inclusion of unpaid payslips in single payments and adjusting report formats (CSV, SEPA) to reflect the new logic. The 'Include partners' feature has been removed, and the revert action now correctly marks payslips as paid, enhancing reporting accuracy and usability.
Original PR description
New adjustments have been introduced to the payment flow: -Include unpaid feature to include other "validated" payslips in the same payment. -CSV and SEPA formats for payment report have been adjusted to adhere to the new logic accordingly. -"Include partners" feature has been removed. -Revert action now marks both payslips as "paid". -Payslip report for My company,US,AU,CH companies has been enhanced for better readability. -Batch account move line settings has been clarified. -Some minor UX changes in the payment report wizard. Task: #5388635
This pull request updates the core spreadsheet component within Odoo. It includes several improvements and bug fixes related to functionality, performance, and user experience, specifically enhancing the spreadsheet editor and conditional formatting features. These changes ensure the spreadsheet remains a reliable and efficient tool for managing data.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ac2fa3e6d4 [REL] 19.2.0-alpha.2 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ac2fa3e6d4 [REL] 19.2.0-alpha.2 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/811ec6d6d2 [FIX] session: always return a Promise [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/900df13338 [FIX] session: recover from errors when sending messages [Task: 5469116](https://www.odoo.com/odoo/2328/tasks/5469116) https://github.com/odoo/o-spreadsheet/commit/f832009ebf [REF] side_panel: rename CSS classes for clarity [Task: 4982596](https://www.odoo.com/odoo/2328/tasks/4982596) https://github.com/odoo/o-spreadsheet/commit/ada17cb231 [REF] side_panel: split CF into main and editor panels, use store [Task: 4982596](https://www.odoo.com/odoo/2328/tasks/4982596) https://github.com/odoo/o-spreadsheet/commit/c3ee9f24ab [REF] side_panel: separate data validation list and editor logic [Task: 4982596](https://www.odoo.com/odoo/2328/tasks/4982596) https://github.com/odoo/o-spreadsheet/commit/f255b8720d [FIX] data validation: fix date criterion [Task: 5343580](https://www.odoo.com/odoo/2328/tasks/5343580) https://github.com/odoo/o-spreadsheet/commit/f19bf803a4 [IMP] cf: add top10 conditional formatting operator [Task: 5367065](https://www.odoo.com/odoo/2328/tasks/5367065) https://github.com/odoo/o-spreadsheet/commit/559cdd8ff1 [FIX] dashboard: properly handle grid resize in dashboard mode [Task: 5223156](https://www.odoo.com/odoo/2328/tasks/5223156) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update simplifies the way data extraction groups related boxes, allowing users to select and manage multiple boxes at once. This enhancement improves the user experience and efficiency when working with large datasets. The underlying CSS has also been cleaned and optimized for better performance.
Original PR description
**[IMP] iap_extract: group boxes into selectable columns** The boxes that are vertically aligned and close together are now grouped into a column that can be clicked to select all the contained boxes at once. If similar columns are found on the next pages, they will be selected as well. task-[5177261](https://www.odoo.com/odoo/project/2068/tasks/5177261) This is how it looks like in practice (right column is being hovered, left one isn't): <img width="505" height="228" alt="image" src="https://github.com/user-attachments/assets/422817b0-f08f-4ba2-88a1-ba6265e85739" /> --- **[CLN] iap_extract: clean CSS file of manual_correction component** This CSS file was a bit of a mess, it's been simplified and factorized where it could be. It should be strictly equivalent to the old file. Forward-Port-Of: odoo/enterprise#102812
This update simplifies event slot creation by allowing users to confirm and adjust event time ranges when adding slots outside the original event timeframe. It also enhances the user interface with a new 'Slots' button and a more intuitive form dialog for slot creation, improving overall usability.
Original PR description
Purpose ======= Improve the event slots feature and some other small improvements. Specification =========== Event form: - Add a "Slots" stat button to ease access to slots in addition to the link…
Purpose ======= Improve the event slots feature and some other small improvements. Specification =========== Event form: - Add a "Slots" stat button to ease access to slots in addition to the link already present next to the multiple slots field. - Make "Sales Start" hidden by default for the event tickets. - Make sure the left column fields labels are correctly aligned with the title. A bottom margin was missing underneath the event image and was messing the form display. Slot views: - In calendar view, instead of restricting the creation of slots outside of the event time range, ask confirmation and adjust the event time range to include the new slots. - In list view, removing the editable bottom behavior which is messy and tricky to use from mobile. Instead opening the slot form in a dialog. This also now provides the timezone info to the user. - In calendar and list view, adding a "New" button to allow single event slot creation. - Add an hint for the user to make sure they understand that they need to select days in order to add multiple slots. - Changing the multi create "Add" button color to primary to make it more noticeable at first sight. - For the slots out of time range validation error. Format the event time range the same way as the slot time range so that it's easier to compare the 2. Task-5114075 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances collaboration by displaying the current time and date in avatar cards and direct message headers, taking into account each user's timezone. This ensures users across different time zones see the time accurately, improving communication and workflow efficiency.
Original PR description
**Specifications:** • Display the current time and date in the avatar card using the timezone of the user only if the card user's timezone differs from the current user's. • Show the local time below the user name in the header of direct messages . **Purpose:** • Enhance cross-timezone collaboration by presenting the local time of other users during interactions task-4613148 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210094
This update separates the granularity of time off requests from allocations, allowing accrual plans in hours to be taken in days when needed. This change enhances flexibility in managing employee time off, aligning with how accruals are currently handled. The update also includes related data and test updates.
Original PR description
Previously, the time off given to the employee (Accrued/Allocated) had the same granularity of that which the employee requests, for example the employee accrues hours in his plan and consequently can use this time off type in hours, or can only accrue days to time off types in days and half-days. This task separates the dependency between both so that accrual plans in hours can be taken only in days if needed task: 4596117 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects and enhances the data related to leave types within Odoo, ensuring accurate calculations and reporting. The changes, driven by a separation of time off given/taken, have been thoroughly tested to guarantee reliable leave management across various modules. This improves the overall accuracy of time off tracking.
Original PR description
Following the separation of granularity between time off given/taken, all leave types data is updated to correctly reflect the current settings task:4596117
This update streamlines how Odoo handles binary data (like images and files) by moving away from base64 encoding. This change improves performance and prepares Odoo for future changes in how binary data is stored in the cache, ultimately reducing data usage and simplifying the codebase.
Original PR description
`datas` is base64-encoded and we directly decode it once set. Most of code should use `raw` directly and avoid handling base64 encoded data, because in the future we will change the cache…
`datas` is base64-encoded and we directly decode it once set. Most of code should use `raw` directly and avoid handling base64 encoded data, because in the future we will change the cache representation to avoid handling encoded values. This PR simplifies current usages and will allow to change the representation of binary fields in cache (which are today base64 encoded). base64 takes more space and there is a lot of encoding/decoding involved depending on the abstraction layer, the end goal is to only handle raw data and encode only for the client. - In `odoo.tools.images` a few base64 functions are deprecated (one remaining for later). - Allow importing files (see convert) without going though base64. - Binary fields have now `convert_to_read` (encode as base64) and `convert_to_write` (use the cache format) defined. The *read format* is used by the client and should not be used in the models. - base tests define common data that can be reused. task-4251301 https://github.com/odoo/enterprise/pull/100997 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the HTML editor's undo/redo feature by grouping consecutive changes to the same text node into a single operation. This results in smoother and more reliable editing, preventing issues where multiple edits were not correctly reflected when undoing or redoing. It improves the overall user experience when making multiple edits within the HTML editor.
Original PR description
This commit undoes/redoes all consecutive steps that modify the same text node in a single call to `undo/redo()`. task-5155954
This update allows each company within an Odoo setup to define its own customer lead times for products. This ensures more accurate forecasting and planning across different business units, addressing inconsistencies in delivery timelines.
Original PR description
*= sale_stock In multi-company environments, different companies often operate with distinct delivery lead times, and these values may differ from one company to another. This enhancement allows each company to configure its own customer lead time on a product, ensuring clearer and more accurate planning across multi-company setups. Task - 5153210
This update allows each company within an Odoo setup to define its own customer lead time for products. This ensures more accurate sales forecasting and planning across multiple companies, aligning with recent community updates for smoother inter-company order flows.
Original PR description
In multi-company environments, different companies often operate with distinct delivery lead times, and these values may differ from one company to another. This change makes the sale_delay field company-specific. To align with recent community changes, the customer lead time is now computed based on the current company of the purchase order line, ensuring a smooth and consistent inter-company flow. This enhancement allows each company to configure its own customer lead time on a product, ensuring clearer and more accurate planning across multi-company setups. Task - 5153210
This update enhances the Thai version of Odoo by improving its accounting and tax settings. Specifically, the chart of accounts, tax templates, and asset configurations have been updated to ensure better compliance with Thai regulations and improve the user experience. This ensures accurate financial reporting for Thai businesses using Odoo.
Original PR description
Expanded and updated the Thai localization with an enhanced chart of accounts, updated tax templates, asset templates, and tax group configuration for better compliance and usability. Task-5395076 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242520 Forward-Port-Of: odoo/odoo#240668
This pull request enhances the visual presentation and usability of the account reports module. Specifically, it updates the styling of review states, clarifies account status display, and introduces a redirect to the checks view for single returns, improving the overall user experience and report clarity.
Original PR description
task-5155703 Forward-Port-Of: odoo/enterprise#98675
Resolved issues and error corrections
This update fixes a bug that caused data loss when the spreadsheet application experienced interruptions. Now, if a message sending attempt fails, the system will automatically retry until successful, ensuring all changes are properly reflected. This enhances the stability and data integrity of the spreadsheet feature.
Original PR description
If, for any reason, the sending of a revision creates an error b.e. when the user is disconnected, we never reset the "waitingForAck" flag, and all future messages will be queued but never send. The result of this behavior was that any user action during any disconnection will set the spreadsheet in a state where all changes from that point are lost. This fix handles the error while sending a message and always reset the flag, so that at next change, we will try to re-send the same message until it works. Task: 5469116
This update fixes a bug that prevented users from registering for event slots on pages other than the event registration page. Now, the 'register' button displays available slots across all event pages, improving the user experience and ensuring attendees can easily secure their spots. This enhancement simplifies the event registration process.
Original PR description
* = event, event_booth, event_exhibitor, event_track, event_track_quiz The "register" button displays open slots only on the registration page of an event, and not on the other pages of this one. This PR fixes this issue by making available the open slots from the event.event model for the modal_slot_registration template as an instance of this one is always present in the context of those pages. Reproduce: Create an event with the "Multiple Slots" option checked and link it to a slot of tomorrow. The "register" button will display the slot on the registration page of the event but not on the page of the talks. Task-5083175 Forward-Port-Of: odoo/odoo#226635
This update fixes issues with image dragging and dropping, ensuring images with captions are correctly copied and pasted, and preventing duplication of images after drops. It streamlines the editor's data transfer process for better image handling and formatting.
Original PR description
**Current behavior before PR:** - When dragging and dropping elements with attributes and classes, any non-whitelisted attributes and classes were removed during the `cleanForPaste` process. This…
**Current behavior before PR:** - When dragging and dropping elements with attributes and classes, any non-whitelisted attributes and classes were removed during the `cleanForPaste` process. This caused structural issues and loss of formatting after the drop. - When an image had a caption and only the image was selected and cut, the image was removed but the caption incorrectly remained - When dragging and dropping an image without an active selection on the image, the image was not removed during the drop. This resulted in the image being duplicated, one at the original position and another at the drop location. - When selecting an image with a caption and performing copy-paste, only the image was copied and pasted. **Desired behavior after PR is merged:** - An `application/vnd.odoo.odoo-editor` dataTransfer type is now set during `dragstart` for editor elements. As a result, we no longer need to clean the `dataTransfer` content during drop, preserving the original structure and preventing the loss of attributes and classes. - Cutting an image that contains a caption now correctly removes both the image and its associated caption. - The image is now selected on pointerdown event . As a result, when the image is dropped, deleteSelection correctly removes the original image before inserting the new one, preventing duplication. - Now, when an image with a caption is selected and copy-pasted, the entire image along with its caption is correctly copied and pasted. task: 4914451 Forward-Port-Of: odoo/odoo#241153 Forward-Port-Of: odoo/odoo#217125
This update fixes an issue where time off allocations were incorrectly displayed as showing zero remaining days, even when leaves were allocated. The fix resolves a context issue within the Odoo system that prevented accurate calculation of remaining leave balances, ensuring correct display of allocated time off.
Original PR description
Bug: - Create a new employee (also reproducible with existing employees) - Create a Paid Time Off allocation that becomes available in the future - Create a Time Off request for this employee at a…
Bug:
- Create a new employee (also reproducible with existing employees)
- Create a Paid Time Off allocation that becomes available in the future
- Create a Time Off request for this employee at a future date
- When selecting the Time Off type, it shows “0 remaining out of 0 days” even though leave has been allocated
Reason:
In `_compute_display_name`, the record is accessed using `self.sudo().` Switching to superuser triggers `_compute_leaves`, but the context is lost and therefore the `target_date` is lost as well.
In `get_allocation_data`, because target_date is False, it is replaced with today’s date. This causes `max_leaves` and `virtual_remaining_leaves` to be computed as of today instead of the intended future date.
Fix:
Remove the `sudo() `and use the current user context instead.
-------------------------------------------------------------------------------
Test fix: `test_allocation_dropdown_after_period`
Bug:
After removing `sudo() `from `_compute_display_name`, the test fails and shows “0 remaining out of 0” instead of “9 remaining out of 9”.
Reason:
The test user (Admin) did not have the employee’s company in their allowed companies.
The `name_search` method triggers `_compute_display_name`, which triggers the computation of virtual_remaining_leaves.
Before the fix, `_compute_display_name` used `sudo()`, which propagated superuser privileges down to `_compute_leaves` and `get_allocation_data`. This masked the fact that the test user did not have access to the employee’s company (multi-company rule).
After removing `sudo(),` the user no longer had access to the allocation when running `name_search`, causing the test to fail.
Fix:
Add the employee’s company to the user’s company_ids. This allows allocations and `name_search` to work correctly without using `sudo().`
-----------------------------------------------------------------------
Known limitation:
When booking time off from the employee calendar view, the default value of `holiday_status_id` in the Time Off request widget still calculates remaining days based on today’s date instead of date_from.
To avoid confusion, the display name does not include “(x days remaining out of y days)” in this context.
However, when opening the selection dropdown, the display name is correct and uses the proper date-based calculation.
Forward-Port-Of: odoo/odoo#241448This update resolves an issue where deleting a linked payroll rule section would render the associated rule unusable. The change prevents deletion of sections connected to active payroll rules, ensuring rules remain functional and editable. This improves data integrity and reduces potential disruptions to payroll processing.
Original PR description
### Steps to Reproduce 1. Create a Salary Rule Section. 2. Link it to a Salary Rule and add it to a contract or payslip. 3. Delete the Rule Section. 4. Go back to the Salary Rule. 5. The section field is invalid/readonly, making it impossible to assign a new section or fix the rule. ### Reason Deleting a section linked to a Salary Rule breaks the link without clearing it, leaving the rule in a broken, unusable state. ### Solution Prevent the deletion of Salary Rule Sections if they are linked to a Rule that is actively used as an input in a contract or payslip. Task: 5390387 Forward-Port-Of: odoo/enterprise#103375 Forward-Port-Of: odoo/enterprise#102222
This update fixes an issue where the chat bubble message previews appeared too light in dark mode, impacting readability. The change reverts to a darker background style, enhancing accessibility and the visibility of key elements like the close button. This ensures a better user experience for all users, especially those using the dark theme.
Original PR description
In dark theme, the chat bubble message previews have dark background for improved readability of text. The chat hub hidden menu was intended to use same color scheme, but this was mistakenly removed from style improvements to discuss. The default style of popover is too light in dark theme. This commit reverts to style before 19.0, using darker background. This improves accessibility of item selection and the "x" button. Before / After <img width="278" height="405" alt="Screenshot 2026-01-05 at 18 05 18" src="https://github.com/user-attachments/assets/d764adbf-5378-4d59-870d-baf159920898" /> <img width="288" height="410" alt="Screenshot 2026-01-05 at 18 31 03" src="https://github.com/user-attachments/assets/142605cf-fab6-499d-95fa-71fcbb7ec36a" /> Forward-Port-Of: odoo/odoo#242157 Forward-Port-Of: odoo/odoo#242094
This update fixes a potential error in Odoo's push notifications that could occur when users manage their notification settings. Specifically, it addresses issues related to invalid push notification endpoints, particularly those using the `.invalid` TLD, ensuring more reliable device registration and disabling.
Original PR description
[FIX] mail: avoid error on service worker push subscription change Sometimes, the `pushsubscriptionchange` event is called without an `oldSubscription` defined, which can lead to an error occurring…
[FIX] mail: avoid error on service worker push subscription change Sometimes, the `pushsubscriptionchange` event is called without an `oldSubscription` defined, which can lead to an error occurring inside the service worker. Steps to reproduce: 1. Enable notification in Odoo. 2. Reset the permission in the Chrome interface 3. Re-enable the permission inside the discuss systray by clicking on the Odoobot message. => The pushsubscriptionchange is called without an oldSubscription [FIX] mail: ir_cron_web_push_notification are now more robust With a user having 5 registered devices for push notifications if a browser registers with an endpoint that has a wrong domain such as https://permanently-removed.invalid/fcm/send/XXXXXXXXXXXXX the cron job cannot resolve the invalid domain of the endpoint and ends up disabling it. [FIX] mail: push_to_end_point method to support .invalid TLD if a browser registers with an endpoint that has a TLD `.invalid` such as https://permanently-removed.invalid/fcm/send/XXXXXXXXXXXXX The TLD `.invalid`[1] is intended for use in online construction of domain names that are sure to be invalid and which it is obvious at a glance are invalid. The cron job cannot resolve the invalid domain of the endpoint and ends up disabling it. So we need to unregister a device with an endpoint with a `.invalid` TLD. [1]: https://datatracker.ietf.org/doc/html/rfc2606#section-2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242428 Forward-Port-Of: odoo/odoo#240502
This update fixes an issue where discount values were calculated incorrectly when using promotion programs on products with tax included. The fix ensures that discounts are accurately applied based on the product's full price, including tax, leading to more reliable pricing in the Point of Sale system. This improves the accuracy of promotions and customer order totals.
Original PR description
When using a promotion program applied only on specific products with tax included prices, the discount value was incorrect. Steps to reproduce: ------------------- * Create a product with a price of…
When using a promotion program applied only on specific products with tax included prices, the discount value was incorrect. Steps to reproduce: ------------------- * Create a product with a price of 100$ and tax of 10% included * Create a promotion program with: - Apply on: Specific Products (the product created above) - Discount Type: $ Fixed Discount - Discount Value: 10$ * Open PoS and add the product to the order * Apply the promotion code > Observation: The value of the discount is 9.09$ instead of 10$ The same steps also applies to the discount reward applied on the whole order. Why the fix: ------------ When computing the discountable amount for the promotion it would take the amount excluding tax instead of the base price. The base price should be the unit price of the product multiplied by the quantity. As it was before here : https://github.com/odoo/odoo/blob/8568baa35c9caa4c8cd3b1f5d737e1ecbec76434/addons/point_of_sale/static/src/app/models/pos_order_line.js#L470-L474 https://github.com/odoo/odoo/blob/8568baa35c9caa4c8cd3b1f5d737e1ecbec76434/addons/pos_loyalty/static/src/app/models/pos_order.js#L1112 To do so we modified the accounting helpers to provide this value instead of computing it manually. opw-[5260067](https://www.odoo.com/web#id=5260067&view_type=form&model=project.task) opw-[5242194](https://www.odoo.com/web#id=5242194&view_type=form&model=project.task) Forward-Port-Of: odoo/odoo#240289
This update ensures that users are prevented from adding rental products to their cart when resources are unavailable during the selected time period. Previously, the system didn't check availability if the ‘website_sale_renting_stock’ module wasn’t installed. This change improves the rental booking experience by preventing incorrect order placements.
Original PR description
Before this commit, when the user goes to the webshop to take a rental service with rental service unavailable at a certain period, the system does not block the user when the resource is not available during 2 hours in the period chosen by the user. The reason is because the hours are not checked when website_sale_renting_stock is not installed. This commit moves the code checking the time of the rental period made in website_sale_renting_stock in website_sale_renting to be able to have that verification for rental service used with planning to make sure the system will prevent the user to add the product in his cart when the resource is unavailable. task-5123239 Forward-Port-Of: odoo/enterprise#102071 Forward-Port-Of: odoo/enterprise#96241
This update ensures that variant names are correctly displayed on POS orders when a combo product includes a variant option. Previously, the order didn't show the variant's name, which hindered accurate product selection. This fix resolves a technical issue related to how the POS system retrieves product information for combo orders.
Original PR description
In POS, if in a combo, one of option has instantly created variant it will not show the variant name in the order ### Steps to reproduce: * Create a product with instantly generated variants * Create…
In POS, if in a combo, one of option has instantly created variant it will not show the variant name in the order ### Steps to reproduce: * Create a product with instantly generated variants * Create a combo choice and add one of his variants * Create a combo product and add the combo * Open an store that sells this combo * Select the combo and choose the product with variant and confirm the selection Issue : On the left size in the order the variant name will not appear. ### Observation: When it tries to retrieve the attribute information for the variant https://github.com/odoo/odoo/blob/942b7a21d7e0eb15133f4af1b47e68f48dec70c7/addons/point_of_sale/static/src/app/services/pos_store.js#L1048 It is empty since during the call of computeComboItems the attribute was not retrieved for this scenario. https://github.com/odoo/odoo/blob/942b7a21d7e0eb15133f4af1b47e68f48dec70c7/addons/point_of_sale/static/src/app/models/utils/compute_combo_items.js#L31-L33 ------------ When adding a always variant to a combo they are considered like their own product, and attribute.extra_price should not be considered. The extra price for an always variant is setup in the combo with comboItem.extra_price like stand alone products. opw-5037355 Forward-Port-Of: odoo/odoo#239314 Forward-Port-Of: odoo/odoo#227176
This update corrects a problem where new applicant offers weren't automatically using the correct sign template. The fix ensures that the salary configurator is accessible when an offer is created from a partially signed application, preventing delays in the hiring process. This improvement streamlines the offer creation workflow for recruiters.
Original PR description
steps to reproduce: - an applicant have signed with a company car + a car to order - go to Recruitment < Offers < Partially signed < Find the applicant - click on Contract Details to access the version - create a new offer through the smart button - the offer doesn't have a sign template so the salary configurator is not accessible Fix: use `sign_template_id` instead of `contract_update_template_id` as the sign template of the offer if the version is not active (because it is created from an offer which is half signed and it's basically a new offer not an offer for contract update) task-id: 5401539 Forward-Port-Of: odoo/enterprise#103371 Forward-Port-Of: odoo/enterprise#101724
This update resolves an issue where users couldn't answer incoming calls when opening modals like email or SMS wizards. The fix adjusts the software's layering to ensure the softphone is always visible and clickable when a call is active. This improves the user experience by allowing immediate call handling.
Original PR description
If you get a call when opening any modal/composer like email/sms wizard, you won't be able to pick up the call as the softphone is not clickable. This is because the z-index of the softphone is less than the modal. This commit fixes that issue by making the softphone above modals only if there is a pending call. [Task-4018118](https://www.odoo.com/odoo/project.task/4018118) Forward-Port-Of: odoo/enterprise#103417 Forward-Port-Of: odoo/enterprise#103072
This update fixes an issue where combo line prices were incorrectly set to 'automatic' after certain actions. Now, combo line price types will retain their original setting, ensuring accurate price updates during sales and order processing. This improves the reliability of point-of-sale pricing.
Original PR description
After commit https://github.com/odoo/odoo/commit/69057e41fb4cd800d23401ead8ae11bf7cba7c64, the price type of combo lines was changed to 'automatic' when creating the combo line. This caused the set pricelist logic to update the price of combo lines with automatic price type, which conflicts with the intended behavior. This commit ensures that the price type of combo lines is preserved as original in cases where we want to update the price, and only set to automatic in cases like loading a sale order or refunding an order. opw-5240429 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241737 Forward-Port-Of: odoo/odoo#234575
This update resolves a previous issue where cash basis reporting tests were not running during the automated build process, leading to undetected errors. By adding a specific test trigger, we now guarantee that these reports are thoroughly tested before being merged, preventing future problems and ensuring data accuracy.
Original PR description
The account_reports_cash_basis module was previously blacklisted on Runbot, causing its test suite to be bypassed during CI. Consequently, several regressions remained undetected (notably Runbot error 234873). This commit adds the `post_install_l10n` tag to ensure tests are executed prior to merging, preventing future regressions in this module. -------------------------------------------------------------- A previous change (see https://github.com/odoo/enterprise/commit/eba96e1f976b953fb8056249ea494e8f06e3c668) modified the reporting logic for Unaffected Earnings. Some cash basis test scenarios were not updated in the initial PR, leading to assertion failures. This commit updates the expected test values to match the current reporting format. runbot-234873 Forward-Port-Of: odoo/enterprise#103462
This update resolves an issue where credit notes with allowances issued more than 6 days after the original invoice would fail to process through ECpay. The fix removes the outdated 'AllowanceDate' parameter and ensures 'InvoiceRemark' is only populated when a customer reference is provided, aligning the process with standard ECpay invoice generation.
Original PR description
**AllowanceDate**: l10n_tw_edi_ecpay has an issue on Credit Notes (Allowances). When we `_l10n_tw_edi_generate_issue_allowance_json()`, we send the `l10n_tw_edi_invoice_create_date` which is was set…
**AllowanceDate**:
l10n_tw_edi_ecpay has an issue on Credit Notes (Allowances).
When we `_l10n_tw_edi_generate_issue_allowance_json()`, we send the
`l10n_tw_edi_invoice_create_date` which is was set to the associated
invoices creation date, and not the Allowance's creation date.
This creates a potential issue where allowances issued more than 6 days
after the original invoice would bounce back from ECpay with errors.
To be consistent with invoices send to ECPay, we do not send the
`AllowanceDate` parameter at all
Manual Testing/Verification:
1. Create an invoice that has a `l10n_tw_edi_invoice_create_date`,
visible in the Invoice's ECPay tab more than 6 days ago. (Requires
sending to ECPay via the custom wizard via the "Send" button)
2. Create a credit note from the invoice and send to ECPay.
3a. Before this, see that an error would appear.
3b. Now, there would be no error
*InvoiceRemark*:
When Customer Reference `ref` is not set, the code sets the parameter
value as `False`, displaying it's string on the e-invoice and official
printout. We only set the parameter if there exists the `ref` now,
eliminating the issue.
Tests:
1. (both cases) undo the `account_move.py` changes and run the tests.
task-[5455847](https://www.odoo.com/odoo/project/967/tasks/5455847)
---
# New test failed output
<img width="1458" height="353" alt="image" src="https://github.com/user-attachments/assets/77df8e51-5005-4d99-985c-71757c0f62a6" />
```bash
07:47:53,055 ERROR l10n_tw_edi_ecpay-demo-vy2vd3s0 odoo.addons.l10n_tw_edi_ecpay.tests.test_edi: FAIL: L10nTWITestEdi.test_01_can_generate_file
Traceback (most recent call last):
File "/home/odoo/odev/worktrees/18.0-l10n_tw_edi_ecpay-fix-allowance-date-erle/odoo/addons/l10n_tw_edi_ecpay/tests/test_edi.py", line 61, in test_01_can_generate_file
self.assertIsInstance(json_data["InvoiceRemark"], str)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: False is not an instance of <class 'str'>
07:48:02,516 ERROR l10n_tw_edi_ecpay-demo-vy2vd3s0 odoo.addons.l10n_tw_edi_ecpay.tests.test_edi: FAIL: L10nTWITestEdi.test_13_b2b_refund_upload_deadline_restriction
Traceback (most recent call last):
File "/home/odoo/odev/virtualenvs/18.0/lib/python3.13/site-packages/freezegun/api.py", line 885, in wrapper
result = func(*args, **kwargs)
File "/home/odoo/odev/worktrees/18.0-l10n_tw_edi_ecpay-fix-allowance-date-erle/odoo/addons/l10n_tw_edi_ecpay/tests/test_edi.py", line 430, in test_13_b2b_refund_upload_deadline_restriction
self.assertNotIn("AllowanceDate", json_data,
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"B2B Allowances should not include AllowanceDate to avoid >6 day limit errors."
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
AssertionError: 'AllowanceDate' unexpectedly found in {'MerchantID': '1234', 'Details': [{'OriginalInvoiceNumber': 'AB11100099', 'OriginalInvoiceDate': '2025-01-06', 'OriginalSequenceNumber': 0, 'ItemName':
'product_a', 'ItemCount': 1.0, 'ItemPrice': 1000.0, 'ItemAmount': 1000.0}], 'TotalAmount': 1000.0, 'TaxAmount': 50.0, 'CustomerEmail': 'partner_b@tsointsoin', 'AllowanceDate': '2025-01-06 15:00:00'} : B2B
Allowances should not include AllowanceDate to avoid >6 day limit errors.
```
---
Things to think about:
- FWP
- [ ] 19.0
- [ ] master
Forward-Port-Of: odoo/odoo#241973This update fixes an issue where Verifactu invoices generated from Point of Sale (PoS) orders were incorrectly using 'F1' instead of 'F3' invoice types. The change ensures that when a simplified PoS order is fully invoiced, the Verifactu document accurately reflects the correct 'F3' invoice type, aligning with Spanish tax regulations. This ensures accurate reporting and compliance.
Original PR description
To reproduce ------------- 1. Install `l10n_es_edi_verifactu_pos`, and select the ES company 2. Make an order in PoS with a price less than 400, and don't invoice it. 3. Close the PoS session, then…
To reproduce ------------- 1. Install `l10n_es_edi_verifactu_pos`, and select the ES company 2. Make an order in PoS with a price less than 400, and don't invoice it. 3. Close the PoS session, then go to PoS > Orders, and select the previously made order 4. It will have a Verifactu generated document with invoice type as 'F2', which is correct since it's a simplified order. 5. Click invoice to invoice the order; the invoice is no longer simplified. Notice now that the new Verifactu document has an invoice type of 'F1', which corresponds to a normal non simplified invoice. However, since the new invoice is replacing an old simplified one, it should be of type 'F3' instead. The fix ------- We add a new field on the `pos.order` model to retain if that order was previously invoiced with a simplified invoice, in that case, we set its type to 'F3' instead of 'F1' when fully invoicing it. Sources: -------- Difference between 'F1', 'F2', and 'F3' invoice types: https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/preguntas-frecuentes/procedimientos-facturacion.html?faqId=bdbd20022fe06910VgnVCM100000dc381e0aRCRD opw-5343973
This update fixes an issue where customers couldn't directly edit their bank account BIC codes within the ASPOne VAT report wizard. The change allows users to now modify this critical field, ensuring accurate bank information is submitted for VAT reporting. This improves data accuracy and simplifies the reporting process.
Original PR description
Since this commit [[1]], it's no longer possible for a customer to edit the BIC code of his bank account directly in the ASPOne declaration wizard. This commit changes the readonly default value of a related field for False to allow users to edit the field. no task id [1]: https://github.com/odoo/enterprise/commit/a78e85496fbb199e0a64dd12037b021dbcc89f8c
This update resolves issues preventing actions from working correctly in the document activity view. The changes re-enable key features like sharing and selection, addressing previous bugs and inconsistencies. The activity view now functions as intended, providing a more reliable way to manage documents.
Original PR description
We have hidden the actions in the activity view for previous versions because they were not working well (see odoo/enterprise#86436). We re-enable them here after having fixed the following problems:…
We have hidden the actions in the activity view for previous versions because they were not working well (see odoo/enterprise#86436). We re-enable them here after having fixed the following problems: - the actions were not always related to the selected document in the detail panel - the selection was not working - only custom actions along with download and share actions were present - the selection box was absent - the search box was not hidden when a selection was active Note that we have decided to reset the selection when switching to the activity view because that view doesn't support multiple selection like other views and often the selected record in other view is not present in the activity view because the record doesn't have activities. Technical note: In the DOCUMENT_RELOAD event implementation, we remove await env.model.load(); and await env.model.notify(); because await env.searchModel._reloadSearchModel(true); already call them. This solves the problem of reloading in the activity view as the method load was called without the right parameters (which is not the case when called by _reloadSearchModel). To reproduce the problem, share a document in the activity view, an error happens in the console during the reload and if you click on share again, you get a second error and the share panel won't open anymore. Task-5089173
This update corrects a previous issue in the payroll calculation by ensuring the negative net amount is accurately tied to the payslip's net amount. Previously, a portion of the net would carry over to the next payslip. Now, the deduction is fully applied to the current payslip, providing a more precise and consistent payroll reporting process.
Original PR description
The negative net to report is now bounded to the net of the payslip. Ex: if the total net is 2000€ and the payslip net is 1800€, it will deduct 1800€ and 200€ will still need to be deducted on the next payslip. task-5106858
This update resolves an issue where the HTML editor would crash if a link's metadata couldn't be retrieved (often due to website access restrictions). The fix ensures that errors are handled gracefully, preventing the editor from freezing and improving the user experience when accessing external links.
Original PR description
Problem: When a fetch request fails (for example due to CORS restrictions), a traceback occurs in the editor. Solution: Backport 971d88121968c85a86c805458d5d9dbbb305995c and ensure the error handling check is applied for both internal and external metadata fetching. Steps to reproduce: - Create a tracked link. - Copy the tracked link. - Create a link in the editor and use the copied URL. - Apply. - Traceback occurs. task-5394908 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242546 Forward-Port-Of: odoo/odoo#240712
This update resolves an issue where the price of kit products was incorrectly reset to zero during validation in the Point of Sale (POS) system. It also addresses a related problem where inventory valuation lines weren't generated for multi-product POS orders. The fix ensures accurate pricing and inventory tracking for kit products and multi-product POS scenarios.
Original PR description
*mrp_account, sale_mrp{,_margin}, point_of_sale ## Issue 1: Kit sale price ### Steps to reproduce: - Install sale_margin, sale_management, mrp - Create a kit product with an avco product category: -…
*mrp_account, sale_mrp{,_margin}, point_of_sale
## Issue 1: Kit sale price
### Steps to reproduce:
- Install sale_margin, sale_management, mrp
- Create a kit product with an avco product category:
- 1 x COMP1, cost 10
- 1 x COMP2, cost 20
- On the kit product update the cost accroding to the bom
- Create an SO for 1 unit of your kit
- Validate the associated receipt
#### > The cost (purchase_price) of the sol of the kit has been reset from 30 to 0.
### Cause of the issue:
Validating the receipt will trigger the dependence of the `purchase_price` compute method since the moves are now done: https://github.com/odoo/odoo/blob/18dc738c710f87d1f937b0d1fbb619c75f5ad952/addons/sale_margin/models/sale_order_line.py#L15-L18 However, the `_get_price_unit` will `return 0` since `sol` is linked to both component moves:
https://github.com/odoo/odoo/blob/18dc738c710f87d1f937b0d1fbb619c75f5ad952/addons/sale_stock_margin/models/sale_order_line.py#L10-L20
### Issue 2: POS with multiple products
Currently, when a pos order contains more than 1 product, inventory valuation lines are not generated when invoicing the order.
Steps to reproduce:
-------------------
* Using anglo-saxon accounting
* In the settings search for inventory valuation
* Set inventory valuation to Perpetual
* Choose standard cost method
* Set up valuation account and journal
* Create two different products
* Type -> Goods
* Track inventory by quantity
* Set a purchase cost
* Put some quantity on hand
* Add category
* In the settings of the category
* Set up Stock account
* Set up costing methog, standard
* Set inventory valuation to perpetual
* Open pos session
* Make 3 orders, invoice them
* Order 1, only product 1
* Order 2, only product 2
* Order 3, both products
> Observation: The invoces for orders 1 & 2 have entries regarding
inventory valuation while the invoice for order 3 does not have any.
### Cause of the issue:
Stock valuation entries are not created for order 3 because the price unit computed is 0.
https://github.com/odoo/odoo/blob/008e69e8215fecc1f3fe45a36189592577cdc593/addons/stock_account/models/account_move.py#L122-L126
The reason why the price unit is 0 is because in `_get_pos_anglo_saxon_price_unit` we have multiple records in `moves` related to multiple products.
https://github.com/odoo/odoo/blob/008e69e8215fecc1f3fe45a36189592577cdc593/addons/point_of_sale/models/pos_order.py#L276-L281
`_get_price_unit` was not designed to treat moves with different products https://github.com/odoo/odoo/blob/008e69e8215fecc1f3fe45a36189592577cdc593/addons/stock_account/models/stock_move.py#L225-L228
This leads to think we should filter moves in `_get_pos_anglo_saxon_price_unit` regarding the product.
The end result is now the same as when we make a SO with the two products in the Sales app and invoice it. This results in 2 valorisation lines (1 per product) but this does not change the valorisation when the pos order is not invoice and we close the session (still 1 valorisation line).
### Fix:
The filter on the product_id in the `_get_pos_anglo_saxon_price_unit` has been removed in https://github.com/odoo/odoo/commit/08b62a4bbcc6f9a391b2cc00a621ef4c76100229
Prior to that change the price unit were computed on moves sharing a common product:
https://github.com/odoo/odoo/blob/9cb6476e0f8d319dce4baf65904b8bd5d535c83c/addons/point_of_sale/models/pos_order.py#L271-L275
https://github.com/odoo/odoo/blob/9cb6476e0f8d319dce4baf65904b8bd5d535c83c/addons/stock_account/models/stock_move.py#L28-L29
We reintroduce this filter as it should not have been removed.
#### Issue 1: opw-5420977
#### Issue 2: opw-5328152
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#242052This update resolves an issue preventing customers in French territories like La Réunion from using Stripe Connect. The fix correctly maps company countries to Stripe, aligning with Stripe's availability policy, and ensures compatibility with the Odoo payment system. This expands payment options for a wider range of users.
Original PR description
## Versions 17.0+ ## Issue Customers located in French territories (e.g. La Réunion) can't use Stripe Connect. ## Steps to reproduce *Ensure Stripe payment provider is installed* - From the Settings'…
## Versions 17.0+ ## Issue Customers located in French territories (e.g. La Réunion) can't use Stripe Connect. ## Steps to reproduce *Ensure Stripe payment provider is installed* - From the Settings' app, access your company's data: - Change your company's country for "Réunion". - Go to Payment Providers and open Stripe: - Try to enable Stripe via Stripe Connect; - A message tells you your country is not supported by Stripe. ## Cause Commit 94b37a3f51089621a2f12360c7a13f610b24ba3a introduced territories mapping by adding the method `_stripe_get_country()`, mapping the company country (`self.company_id.country_id.code`) to enable Stripe under the parent country as specified in their documentation (https://support.stripe.com/questions/stripe-availability-for-outlying-territories-of-supported-countries). This fix was first applied in 16.0 and forwarded but didn't check that commit de782a680de8e5a2d7c89b982c485ca29da34b3a, from saas-16.2, added another condition on (`self.env.company.country_id.code`) on the Stripe Connect flow. opw-5421185 Forward-Port-Of: odoo/odoo#242319 Forward-Port-Of: odoo/odoo#241269
This update fixes an issue where the wrong manager was sometimes assigned to approval requests. The change ensures that the correct manager, based on the request's origin, is always selected, improving the accuracy and reliability of the approval process. This resolves a potential problem with approvals spanning different companies.
Original PR description
The previous code added the manager by searching for the first employee that matches the request_owner_id. If there are multiple such employees, it's possible that an employee from a different company than the approval can be selected. Ticket: [5185449](https://www.odoo.com/odoo/project.task/5185449) Forward-Port-Of: odoo/enterprise#99978
This update corrects a problem where canceling a manufacturing order (MTO) prevented stock availability from being properly updated for delivery pickings, particularly in multi-step processes. The fix reuses existing logic to unlink dependent stock moves, ensuring accurate availability calculations and resolving 'Waiting Another Operation' status issues.
Original PR description
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps…
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps to reproduce ----- - Enable multi step routes - Set WH to 3-step manufacturing - Create a product - empty bom - MTO & manufacturing routes - 5 in stock - Create a SO for the product - Cancel the linked MO - Open the delivery picking - Click "Check Availability" > The product is not getting reserved from stock > The delivery picking is still "Waiting Another Operation" Cause ----- The problem happens in `action_cancel` https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1995 In 1-step case, `move.propagate_cancel` is false so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2017-L2021 where `move_dest_ids` is the move of the delivery picking. This makes it so that, when we go to the delivery picking and do `action_assign` we go through the first condition while skipping the second of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1929-L1931 instead of going into the `else` part https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1947-L1949 In 3-step, when we `action_cancel`, `move.propagate_cancel` so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2009-L2014 which lacks the swap to MTS and unlink `move_dest_id` logic. Solution ----- We can re-use the logic of unlink and MTS swap to `move_dest_ids` that were not cancelled by https://github.com/odoo/odoo/blob/0eb44aec8867e292f8258df02045efe7fbd3303f/addons/stock/models/stock_move.py#L2012 This also takes care of the problem of the status of the delivery picking being `waiting` instead of `confirmed` because it gets recomputed https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L754 and since it was set to MTS, it goes into the `else`part of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2202-L2216 ----- Ticket: opw-5124380 Forward-Port-Of: odoo/odoo#242038 Forward-Port-Of: odoo/odoo#237890
This update corrects a bug where changes made to nested website snippets (accordions and blockquotes) unintentionally affected other nested instances. The fix ensures that edits are isolated to the specific snippet being edited, improving the consistency and reliability of the website builder. This resolves a potential issue where styling or configuration changes cascaded unexpectedly.
Original PR description
This commit fixes some issues that occur when editing nested instances of `s_accordion` and `s_blockquote` snippets. In all cases, changes applied to a parent unintentionally propagate to nested…
This commit fixes some issues that occur when editing nested instances of `s_accordion` and `s_blockquote` snippets. In all cases, changes applied to a parent unintentionally propagate to nested snippets. **Accordion issues** How to reproduce: drop two nested `s_accordion` snippets. Then: 1. Change the outer "Style" from "boxed" to "highlight active" -> both accordion change, 2. Change the outer "Round Corners" -> both accordion change, 3. Change the outer "Icon Position" -> both accordion change, 4. Change the outer "Icons" style -> both accordion change. **Blockquote issues** How to reproduce: drop two nested `s_blockquote` snippets. Then: 1. Change the outer "Decoration" -> both blockquotes change, 2. Set the inner "Decoration" to "Icon" -> works only if the outer snippet has icon too, 3. Change the outer "Author Alignment" -> only the inner blockquote changes. **Cause** The above issues occur because certain `applyTo` and certain CSS selectors match all nested elements rather than restricting the scope only to the snippet being edited. **Fix** The relevant `applyTo` and CSS rules now use more specific selectors. **Note** See also https://github.com/odoo/odoo/pull/237733 task-5362171 Forward-Port-Of: odoo/odoo#242364 Forward-Port-Of: odoo/odoo#242077
This update resolves an issue where product documents, headers, or footers weren't being added to PDF quotes after they were confirmed. A new configuration setting allows users to consistently include these documents on confirmed orders, ensuring accurate and complete quote PDFs. This improves the user experience and eliminates a potential source of error.
Original PR description
Versions -------- - saas-18.2+ Steps ----- 1. Add product documents, headers or footers to a quotation; 2. confirm quotation; 3. print quotation. Issue ----- Extra documents aren't added to the PDF, even though they show up as selected in the quotation builder. Cause ----- As of commit b02f53d, any quotation documents linked to a sales order are simply ignored for confirmed orders. Solution -------- Add a `sale.always_include_selected_documents` config parameter, allowing users to keep including the selected documents on confirmed orders. opw-5242743 Forward-Port-Of: odoo/odoo#235778
This update resolves a bug that prevented users from assigning statements to multiple bank lines within the Bank Reconciliation widget. The fix ensures the system handles multiple selections correctly, preventing a 'TypeError' that occurred when the model was temporarily undefined. This improves the usability of the Bank Reconciliation feature.
Original PR description
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank…
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank Reconciliation widget. 3) Switch to the List view. 4) Select multiple statement lines. 5) Click on the 'Statement' field to assign a statement to the selected lines. Error: `TypeError: Cannot read properties of undefined (reading 'root')` Root Cause: The `BankRecMany2OneMultiID` component attempts to access `active_ids` through `this.env.model.root` (see [1]). During re-rendering, the value of `this.env.model` becomes undefined, which leads to the error. Fix: Add a check for the existence of `this.env.model` in the getter to avoid accessing `root` on an undefined model. [1]- https://github.com/odoo/enterprise/blob/c194bee0e48db407288e3c402e71840af299568d/account_accountant/static/src/components/bank_reconciliation/list_view/list_view_many2one_multi_edit.js#L14 opw-5403564 Forward-Port-Of: odoo/enterprise#103472 Forward-Port-Of: odoo/enterprise#101792
This update resolves an issue where changing the quantity of a combo product didn't correctly update the quantities of its child lines within the Point of Sale system. Now, when a parent product's quantity is adjusted, the corresponding combo lines are accurately reflected, ensuring order accuracy and preventing inconsistencies.
Original PR description
Before this commit when a combo product was added to the the order, if a note was added and then the product was ordered. And after we change the quantity of this product and the note, the combo…
Before this commit when a combo product was added to the the order, if a note was added and then the product was ordered. And after we change the quantity of this product and the note, the combo children lines were not updated correctly. After this commit, the combo children lines quantities are correctly updated when the parent line quantity is changed. Step to reproduce : 1. Add a combo item to the order line in Point of Sale (Restaurant). 2. Add a Note to the main order line and place the order(Send to Kitchen). 3. Now increase the quantity of the main order line and update the note as well. 4. A popup appears to select the combo again make your selection. You'll notice that a new order line is added. 5. However, in the previous order line, the main product quantity is reverted back to the original quantity, but the combo item order line quantity is not reverted, resulting in an inconsistency. Task id : 5163287 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232069
This update optimizes the payroll calculation process by streamlining a key component that was performing unnecessary computations. By reducing redundant filtering and adding a flexible hook, the system now runs more efficiently and reliably, ensuring accurate payroll processing. This change enhances the overall stability and performance of the HR payroll module.
Original PR description
## [FIX] hr_payroll: improve performance of _compute_issues Before this commit, the compute of issues field in `hr.payslip` model computes more than expected, that is, that compute computes other records than the ones contained in self. This part is not really needed since those payslips will surely be triggered afterwards thanks to the fields dependencies set on the compute method. That compute does a lot of filtered to almost do the same filter. The translation of each warning are called for payslips in which we detect there is an issue/warning. This commit reviews the compute method to reduce the computation cost. ## [FIX] hr_payroll: add hook to be able to alter the condition in filtered This commit adds a hook to be able to easily change the condition made in a filtered instead of doing 2 times the filtered. Forward-Port-Of: odoo/enterprise#102899
This update fixes an issue where the barcode app on mobile devices displayed stock locations in a list view, which isn't ideal for small screens. By adding a setting to prioritize kanban views on mobile, the app now presents stock locations in a more user-friendly format, enhancing usability on smaller devices.
Original PR description
Issue ===== On mobile, we should prioritize kanban views over list views because kanban views are usually more suitable for small device screen. That said, when a product's barcode is scanned in the Barcode app main menu, we show this product's stock locations but we do that with a list view, no matter if the user is on a big screen or a small screen. How to reproduce ================ On mobile device: - Enable location and have a product with a barcode and with quantities in two different locations; - Open Barcode app; - Scan the product's barcode => The product's stock locations are displayed in a list view, which is not very pratical on small device. Fix === The action key `mobile_view_mode` was not set, with this key, we can define what view type we want to prioritize for mobile device. [opw-5180783](https://www.odoo.com/odoo/project/49/tasks/5180783) Forward-Port-Of: odoo/enterprise#101957 Forward-Port-Of: odoo/enterprise#101336
This update corrects an issue where bank statements were incorrectly flagged as invalid, even when they were accurate. The fix adjusts how statement validity is calculated, ensuring that all statements are properly recognized as valid based on their balances. This improves the reliability of bank reconciliation within the accounting module.
Original PR description
Some bank account statements are computed as not valid, although they are valid. Statement 1 and 3 appear, and statement 3 is shown as invalid, while both statements should be shown as valid. Statement validity is computed depending on previous statement end balance and current statement start balance. The SQL query uses a window function to retrieve the previous statement. However, the function is applied after the WHERE clause. Therefore, it uses the end_balance of the previously selected statement instead of the previous statement. #### Step to reproduce: - In the bank dashboard of the accounting app - Create journal entry 1 - Create statement 1 - Create journal entry 2 - Create statement 2 - Validate the journal entry 2 - Create journal entry 3 - Create statement 3 - filter statement per "Not Matched" Ticket [link](https://www.odoo.com/odoo/project.task/5341433) opw-5341433 Forward-Port-Of: odoo/odoo#238381
This update prevents a user error in the Tax Returns module. Previously, setting the Fiscal Year End Day to a negative value caused a system error. The fix now validates this input, ensuring data integrity and preventing the error from occurring.
Original PR description
Currently, an error occurs when user tries to open the Tax Return view. **Steps to Reproduce:** - Install the `Accounting` module. - Go to `Tax Returns` and set the `Fiscal Year End Day to negative…
Currently, an error occurs when user tries to open the Tax Return view. **Steps to Reproduce:** - Install the `Accounting` module. - Go to `Tax Returns` and set the `Fiscal Year End Day to negative value`, then click `Apply`. **Error:** `ValueError: day is out of range for month.` **Cause:** - The field is related to the `company's fiscalyear_last_day` [1]. - When the user enters a `negative value`, that invalid value is written directly to the `company's fiscal year last day`[2] . - When the user opens the `Tax Returns`, it going to compute the `fiscal year dates` [4]. Since the day value is negative, it raises error [5] because the day is out of range for the month. **Fix:** - This commit ensures that a validation error is raised when a user enters zero or negative fiscal year date. - In 18.3, setting the value to 0 falls back to the previously defined company value [2]. - In 19.0, however, the value 0 is incorrectly saved on the company [3], causing an error. - This fix restores the correct behavior and resolves the issue in 19.0 as well. [1]: https://github.com/odoo/odoo/blob/27cd0a3fea1b47a85a4f3d397b052bbec08e182b/addons/account/wizard/setup_wizards.py#L17-L18 [2]: https://github.com/odoo/odoo/blob/45ca03fcb77febf4f373fe35f0242720e88cb85b/addons/account/wizard/setup_wizards.py#L49 [3]: https://github.com/odoo/odoo/blob/27cd0a3fea1b47a85a4f3d397b052bbec08e182b/addons/account/wizard/setup_wizards.py#L54-L56 [4]: https://github.com/odoo/enterprise/blob/99642bdf62f8b1c653dfefdbdcd0e9258cc9e307/account_accountant/models/res_company.py#L174-L175 [5]: https://github.com/odoo/odoo/blob/27cd0a3fea1b47a85a4f3d397b052bbec08e182b/odoo/tools/date_utils.py#L242 sentry-7102968735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239814
This update resolves an issue where project invoices weren't being correctly calculated when a project was linked to both an account and a department within the analytic distribution. The fix ensures the system properly handles comma-separated account and department IDs, accurately reflecting invoiced amounts on the project dashboard. This ensures accurate financial reporting.
Original PR description
### Steps to reproduce: - Create a billable Project - Create a Purchase order and set the created project and a department in analytic distribution - Create a Vendor Bill with the same analytic distribution and match with the PO - Confirm the Vendor Bill - Check the project dashboard - Notice the amount is under To Bill not Billed ### Cause: When checking the invoice lines we check if the AA in the distribution is the same as the one in the project. The problem comes when we have a Project and a Department set in the distribution as the keys in the JSON dict will be 'account_id,department_id' so the comma will trigger an incosistency so the invoice_line will be filtered out so we will consider this line as still waiting to be invoiced ### Fix: Make sure we cover the case of the comma presence in one of the JSON keys. opw-5350246 Forward-Port-Of: odoo/odoo#241571
This update corrects a bug where packages created using the 'Put in Pack' feature from the SML view were incorrectly located. The issue stemmed from default values being applied during the process, leading to inaccurate package tracking. This fix ensures packages are correctly assigned to their destination after this action.
Original PR description
Putting in pack from the SML view leads to package incorrectly located To reproduce the issue: 1. In Settings, enable "Package" 2. Confirm a delivery with 2 available products 3. Open the SML thanks…
Putting in pack from the SML view leads to package incorrectly located To reproduce the issue: 1. In Settings, enable "Package" 2. Confirm a delivery with 2 available products 3. Open the SML thanks to the smart button 4. Tick a line > Put in pack 5. On the second line, in "Destination Package", look for the package Error: it is impossible to find it When opening the SML thanks to the smart button, we also load a lot of default values: https://github.com/odoo/odoo/blob/1492abd8c6bcfdbc48f730f6767b177aeff54bf7/addons/stock/models/stock_picking.py#L1203-L1221 Those are (obviously) SML specific. However, this context is used when putting in pack. This is a problem since `location_id` is also the field name of a package. As a result, the ORM defines the location of the new package with the default value, i.e. the source location of the SML. This is incorrect. One consequence of this bug is the step 5 of the above use case. When looking for a package, a domain checks its location: https://github.com/odoo/odoo/blob/35feed47622b279abf8e593d8190ea36b64d32fd/addons/stock/models/stock_move_line.py#L51-L55 It must be either `False` or equal to the dest loc, which is not the case with the created package. The root cause of the issue is the uncontrollable propagation of the default values JS side and/or the poor structure of the default key (for instance, the key could contain the model name). Anyway, discussed with PY framework: the matter won't be address that soon. OPW-5215243
This update fixes an issue where the XML parser incorrectly used vendor data instead of customer data when importing sales invoices via drag and drop. Previously, the invoice partner was populated with the vendor's information. Now, the parser correctly uses the customer data from the XML file, ensuring accurate invoice creation and processing for sales transactions. This improves the reliability of the sales journal import feature.
Original PR description
Purpose: The XML parser for the drag and drop feature currently parses the information as if it was for a purchase journal. When using this feature for sales journals, the customer field on the invoice is filled with the vendor's data instead. To fully support sales journal, the XML parser should set the customer field with the customer data defined in the XML file instead. Current Behavior: When drag and dropping an XML file into the Sales journals, the invoice partner is created using the vendor's data. Expected Behavior: When drag and dropping an XMl files in the Sales journals, the invoice partner is created with the customer's data. task 5254692
This update resolves an issue where delivery validation would fail after splitting a stock move line within a delivery order. Now, when a stock move is marked as picked and then split, the delivery can be validated without errors. This ensures accurate order processing and prevents frustrating backorder warnings for users.
Original PR description
Scenario: * create a delivery with quantity 3 and mark as TODO * mark the stock move as picked * open the "Details" popup and split the stock move line into quantities 1 and 2, e.g. by adding a new…
Scenario: * create a delivery with quantity 3 and mark as TODO * mark the stock move as picked * open the "Details" popup and split the stock move line into quantities 1 and 2, e.g. by adding a new package or a new lot * exit the popup and try to validate the delivery Behavior before this commit: * the stock move in the delivery form remains picked * validation shows a backorder popup, warning of missing quantity Reason: the newly created stock move line is not picked, but this information is not displayed anywhere, so users are not aware of the cause of this issue After this commit: * the stock move is no longer picked after a new move line is added * users can click the "Picked" checkbox in the delivery form manually, which marks all stock move lines as picked as well * after this action, delivery validation proceeds without backorders opw-5345579 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#241790 Forward-Port-Of: odoo/odoo#239089
This update corrects errors that were preventing the generation of accurate stock reports for Peru (PLE). The fix involved updating field names and using the correct Odoo API calls, ensuring the reports now reflect inventory data correctly. This resolves a technical issue impacting report accuracy.
Original PR description
## Summary Fix multiple `AttributeError` exceptions when generating PLE 12.1 and 13.1 stock reports: - Use `unspsc_code_id` instead of `unspsc_code` (correct field name defined in `product_unspsc`) - Use `with_context(lang=)` instead of `with_lang()` (correct Odoo API) - Use `categ_id` instead of `category_id` (correct field name on `product.template` and `product.product`) Forward-Port-Of: odoo/enterprise#103004
This update optimizes the way Odoo searches for items within forms, leading to faster loading times and a smoother user experience. The changes streamline the search process by processing multiple items simultaneously, rather than waiting for each one individually. This enhancement improves overall form performance and responsiveness.
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#242495
Code cleanup and technical improvements
This update refactors how Odoo tracks important emails, moving the tracking to the Discuss channel. This change enhances email organization and reporting within Odoo, making it easier to manage and analyze email conversations related to customer interactions.
Original PR description
PR enterprise: https://github.com/odoo/enterprise/pull/103340