Tuesday, December 23, 2025
51 changes · saas-19.1
Enhancements to existing features
This update enhances the way live chat is displayed on the website. The change updates a test to reflect the new live chat name format, improving the user experience and ensuring consistent branding. This is a minor improvement to the Enterprise website.
Original PR description
The community counterpart improves the live chat display name. This commit adapts a test relying on the old name format. task-5408945 community: https://github.com/odoo/odoo/pull/240913
This update clarifies the order list by removing the "to invoice" status badge when an invoice hasn't been created. This prevents users from incorrectly assuming an invoice is required, streamlining the order process and reducing potential confusion. It's a small improvement focused on user experience.
Original PR description
In this commit: - Hide the invoice status badge when the status is "to invoice" in order list. - Prevent confusion by ensuring users don’t assume an invoice needs to be generated. Task-5347495 Forward-Port-Of: odoo/odoo#236882
This update enhances the self-ordering system by displaying the table number directly within the generated QR codes. This makes it much easier for staff to quickly identify which order belongs to which table, improving order accuracy and efficiency.
Original PR description
Before this commit: ====================== It was difficult to identify which table a QR code belonged to when viewing the generated QR code PDFs. After this commit: ====================== The table number is now displayed between the Odoo logo in each table’s QR code, making it easier to recognize and differentiate table QR codes. Task-5217734 Forward-Port-Of: odoo/odoo#233935
This update enhances the visual presentation of account state selections within the accounting module. The changes improve the user experience by refining the badge design and ensuring consistency across the application. This is an internal improvement to the accounting workflow.
Original PR description
Forward-port of: https://github.com/odoo/enterprise/pull/98675 Enterprise PR: https://github.com/odoo/enterprise/pull/102659 task-5266305
This pull request enhances the visual presentation and usability of the account reports module. Specifically, it updates the styling of review states and introduces a new check view redirection for single returns, streamlining the user experience. These changes improve clarity and efficiency within the reporting process.
Original PR description
task-5155703 Forward-Port-Of: odoo/enterprise#98675
Resolved issues and error corrections
This update fixes a security vulnerability where Portal and Internal users could create private knowledge articles even without the necessary permissions. The change restricts article creation to users with 'create' access, improves the user interface by hiding creation buttons for unauthorized users, and adds new tests to ensure proper access control.
Original PR description
How to Reproduce : 1. Remove 'Create' access on the 'Knowledge Article' model for Portal and Internal users. 2. Now log in as a Portal. 3. Try to create a new private article. 4. Log in as an…
Features or functions removed from Odoo
The `pos_restaurant_adyen` module, which handled a specific payment feature, has been removed. This functionality has been integrated into the main `point_of_sale` module, streamlining the system. This change improves efficiency and reduces redundancy.
Original PR description
Task: [#4841174](https://www.odoo.com/odoo/1737/tasks/4841174) --- The `pos_restaurant_adyen` module is no longer needed since all its code is related to `set_tip_after_payment` feature, which are now handeled by the `point_of_sale` module. This means that the code from `pos_restaurant_adyen` has to be merged into `pos_adyen`.
How to Reproduce : 1. Remove 'Create' access on the 'Knowledge Article' model for Portal and Internal users. 2. Now log in as a Portal. 3. Try to create a new private article. 4. Log in as an Internal user. 5. Try to create a new private article. Both Internal and Portal users can still create private articles even after 'Create access' is removed. Article creation logic in `knowledge.article` was bypassing the usual access rights because of `sudo` (mainly to add the creator as a member, since creation rights on the member model are not granted). This allowed users to create private articles even without create access. This commit introduces: 1. Model-level access check in `create`. Sudo the creation of articles only when the user has create rights. 2. UI imp to hide the '+' button in the sidebar and the `New` button in the topbar when the user doesn't have create access. 3. New test cases to verify that model-level access rights are respected when creating an article. task-4916280 Forward-Port-Of: odoo/enterprise#102299 Forward-Port-Of: odoo/enterprise#93034
This update fixes a calculation error where refunded Point of Sale orders incorrectly displayed a margin percentage greater than 100%. The change ensures that the margin is accurately calculated, regardless of whether an order is a standard sale or a refund. This ensures accurate financial reporting for refunded transactions.
Original PR description
**Step to reproduce:** - configure pos for global discount from settings - start pos - select product A and add a discount line (product A must have a cost price) - confirm it. - refund the same…
**Step to reproduce:** - configure pos for global discount from settings - start pos - select product A and add a discount line (product A must have a cost price) - confirm it. - refund the same order. - go to backend and open refunded order from `orders` menu **Observation:** - the margin percentage is > 100 **Cause:** - After https://github.com/odoo/odoo/commit/9538698f13d5763b49b00f4c06a1a2afc0d6b39e it has been decided to keep order sign regardless if it is refund or normal order **Fix:** - Adapt `_compute_margin` to include signs based on order is refund or not **Before** <img width="1151" height="228" alt="image" src="https://github.com/user-attachments/assets/2a1760ad-7ad8-4b64-9d22-cf7cff98c90d" /> <img width="1144" height="198" alt="image" src="https://github.com/user-attachments/assets/8d2d4aff-1293-4906-b79b-518ca22317db" /> After <img width="1144" height="253" alt="image" src="https://github.com/user-attachments/assets/ec1d4add-d93b-4490-86ad-f5f5d24de9c2" /> <img width="1170" height="244" alt="image" src="https://github.com/user-attachments/assets/c3ce5b6e-a572-4f85-9bf2-f651574ce124" /> opw-5362912 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238093
This update adjusts how live chat names are displayed to better reflect the context of the conversation. Specifically, internal users now see visitor names, ensuring clarity and a more relevant experience. This change improves the usability of the live chat feature for internal teams.
Original PR description
Live chat display name changes according to who sees the chat: - For visitor, it's the names of the agents. - For agents, it's the names of the visitors. - For everyone else, it's all the member names. However, when an internal user sees the live chat, the agent name doesn't matter. Only the visitor is relevant. This commit changes the way display name is computed to display the agent names to visitors and the visitor names otherwise. task-5408945 enterprise: https://github.com/odoo/enterprise/pull/102681
This update fixes an issue where batch picking lines were incorrectly linked to the wrong picking, leading to inaccurate inventory counts. The fix ensures that each batch transfer is associated with its intended picking, resolving delivery discrepancies and improving order fulfillment accuracy. This impacts users relying on batch transfer functionality.
Original PR description
**Steps to reproduce:** - enable "packages" and "batch transfers" settings - open wharehouse management/operation type - select internal transfer - check "automatic batch" and group by "contact" -…
**Steps to reproduce:** - enable "packages" and "batch transfers" settings - open wharehouse management/operation type - select internal transfer - check "automatic batch" and group by "contact" - create two storable product with an on hand quantity of 10 - create a an internal transfer for the first product for a qty of 10 - mark it as to do - do the same for the second product and make sure that it's the same contact - open barcode and select batches - select the last batch created - scan WH-STOCK - enter and confirm a quantity of 4 for each line - click on put in pack (at this step we can already see that the two new lines created are associated wit the second picking, even though it should be one line per picking) - click on the +6 on each line and click on put in pack - validate **Current behavior:** - a back order has been created for the first picking - the first internal transfer has only delivered 4 units of the first product - the second internal transfer has delivered 10 of the second product and 5 of the first product **Expected behavior:** both pickings should have delivered 10 of their product **Cause of the issue:** The lines created when clicking on "put in pack" for the first time are both associated with the second picking because the line split: https://github.com/odoo/enterprise/blob/898e3e47cfe3b86230da2b146960983d7ad144d0/stock_barcode/static/src/models/barcode_picking_model.js#L514 and the picking_id of the new line is set to the values provided by the `_getNewLineDefaultValues` as the picking_id of the last selected `line`: https://github.com/odoo/enterprise/blob/24b4e49dbe16cb8bd40170abfc089dd64c3f34dd/stock_barcode_picking_batch/static/src/models/barcode_picking_batch_model.js#L280-L281 rather than from the values of the initial line it is split from. opw-4952964 Forward-Port-Of: odoo/enterprise#102575 Forward-Port-Of: odoo/enterprise#91378
A technical issue preventing users from accessing the Invoicing/Accounting notebook for certain contacts has been resolved. This fix ensures that all required properties are defined for the component, preventing a validation error and allowing the feature to function correctly. This improves the user experience for managing bank accounts within the Accounting module.
Original PR description
Steps to reproduce: - Install the Accounting and Contacts modules - Open a contact that has a value in the Bank Accounts field (e.g., Deco Addict) - Click on the Invoicing / Accounting notebook - A traceback occurs Reason: In this commit https://github.com/odoo/odoo/commit/58e9fbf651473dc39214d7faabdfb06606ce92d0, A new tooltip prop was added but it was not included in the props definition here: https://github.com/odoo/odoo/blob/saas-19.1/addons/account/static/src/components/many2many_tags_banks/many2many_tags_banks.js#L14 Since the `FieldMany2ManyTagsBanks` component calls `super.getTagProps(record)`, all expected props must be defined. The missing tooltip prop causes the validation error and results in the traceback. Fix: Added a tooltip to the static props list of the component. With this change, the issue is resolved. task-5438012
This update resolves an error that occurred when sending invoices with Turkish recipient banks via email. The fix ensures the system correctly identifies the bank's country information, preventing a 'KeyError' and allowing invoices to be successfully generated and sent. This ensures proper compliance for Turkish businesses using the Odoo system.
Original PR description
For the `Türkiye` localization, sending an invoice by email with a recipient bank causes an error. Steps to reproduce: 1) Install `accountant` and `l10n_tr_nilvera_einvoice` modules with demo data.…
For the `Türkiye` localization, sending an invoice by email with a recipient bank causes an error. Steps to reproduce: 1) Install `accountant` and `l10n_tr_nilvera_einvoice` modules with demo data. 2) Switch to TR Company. 3) Create a customer with country set to `Türkiye`. 4) Open the TR company contact and on the Accounting page edit an existing bank account, add a new bank (e.g., 'Test-Bank'), and set `Send Money` to `Trusted`. 5) Create an invoice for the customer, confirm it, and send it by email. ref video: https://drive.google.com/file/d/1OoUzJ-Dr2uuy4yk9P-CKUS0L6OSgeyJ3/view?usp=sharing Error: KeyError: 'country_id' Root Cause: When sending the invoice, the system generates the invoice XML. In the method `_get_address_node` (see [1]), there is a special case to determine the correct country for `res.bank`. However, when `vals['partner']` is a `res.bank` record, no `model` is provided in `vals`, so it defaults to `res.partner`. The code then attempts to access `partner['country_id']`, which does not exist on `res.bank`, raising the error. FIX: Ensure the `model` is set to `res.bank` when `vals['partner']` is a `res.bank` record, ensuring the correct country value is used. [1]- https://github.com/odoo/odoo/blob/0190bb7faca1dd5ce38dfdacbb8fa446f06d59a3/addons/l10n_tr_nilvera_einvoice/models/account_edi_xml_ubl_tr.py#L165-L181 opw-5103598 Forward-Port-Of: odoo/odoo#240715 Forward-Port-Of: odoo/odoo#239218
This update fixes an issue where attempting to refund orders that included archived products would cause a blank page and error. The fix ensures that the system correctly identifies and processes product information, allowing refunds to function properly even after a product has been archived. This improves the reliability of the point-of-sale system.
Original PR description
Step to reproduce: - start pos and finalize a order with product A - go backend - Archive product A - start the pos again - try to refund the order Observation: - Blank page with traceback in console…
Step to reproduce: - start pos and finalize a order with product A - go backend - Archive product A - start the pos again - try to refund the order Observation: - Blank page with traceback in console ``` Caused by: TypeError: Cannot read properties of undefined (reading 'filter') at __exports.getOrderChanges at Proxy.getOrderChanges ``` Cause: - until now `product.template` model is looked for filter after a reload https://github.com/odoo/odoo/blob/1b2500422209ed5feb6d49716f94d58c931bf541/addons/point_of_sale/static/src/app/models/data_service_options.js#L91-L93 https://github.com/odoo/odoo/blob/1b2500422209ed5feb6d49716f94d58c931bf541/addons/point_of_sale/static/src/app/services/data_service.js#L290-L295 and not `product.product`, this makes `product_id` available but `product_tmpl_id` undefined, causing inconsistency Fix: - we add `product.product` in `cleanupModels` for data to in sync with backend opw-5237961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240424 Forward-Port-Of: odoo/odoo#238514
This update resolves a visual issue where the Sales 3 menu on the website would overflow when certain items were added. The fix prevents the parent menu element from overflowing, ensuring the menu displays correctly and consistently. This improves the user experience for customers navigating the website.
Original PR description
Scenario: - edit the website navbar and set template "Sales - 3" (penultimate) - edit menu to add several menu items that will be larger than possible Result: the menu overflows Cause: a parent element of the menu doesn't overflow, so when computing autoHideMenu where we compute what overflow the list of menu, nothing overflows it since the overflow already happened in the limitless parent element. Fix: using CSS to prevent the parent from overflowing. opw-5178552 __pr note:__ this is happening in 17.0 but I'm targeting 18.0 since the ticket is in 18.0 and code is the same in 18.0 up to master. Forward-Port-Of: odoo/odoo#240433
This update allows businesses with operations in Mexico to customize the sequence used for generating GI CFDI invoices within their branch offices. Previously, the system always prioritized the root company's sequence, which could cause delays. Now, branches can define their own sequence prefix, streamlining invoice processing and improving efficiency for Mexican operations.
Original PR description
Add a way to set a custom prefix for GI sequences on the settings for MX. Get this sequence first on the branch before looking to the one on root company. opw-5096687 Forward-Port-Of: odoo/enterprise#100017
This update resolves an issue where users could encounter an error while viewing details of paid orders within the Point of Sale (PoS) frontend. The fix simply disables a feature that was causing the error, ensuring a smoother user experience. Employee details are intended to be managed from the backend.
Original PR description
Steps to reproduce ------------------ 1. Enable "Log in with Employees" 2. Login with any employee and make an order 3. Switch to the admin, "Mitchell Admin" usually 4. Go to the paid orders (we are still in PoS UI not in the backend), and select the order paid in step 2. 5. Click on "Details", the order form will appear, click on the "Cashier" name A traceback will appear, saying 'Cannot find key "hr_employee_form" in the "views" registry'. The fix ------- We simply disable the employee_id field; it will not try to open the employee form anymore. That is much simpler than adding all the required hr assets to the PoS frontend. Employee details are meant to be seen and navigated from the backend. opw-5252486 Forward-Port-Of: odoo/odoo#240802 Forward-Port-Of: odoo/odoo#240012
This update fixes a bug where product attributes weren't displayed on order lines. The change ensures that all product attribute details are now correctly shown, providing a more complete view of orders for users. This was caused by a change in how attribute data was constructed within the system.
Original PR description
Before this commit: --- - When an order was placed with product attributes, the attribute details were not shown on the order line. After this commit: --- - The product attribute names are now correctly displayed on the order line. Cause: --- - Until saas-18.2, the attribute string was built using the product’s display name and `attribute_line_ids`, which only included never type PTAV entries. - Starting from saas-18.2, the attribute string is constructed solely from `attribute_line_ids`, which now includes all PTAVs. task-5244869 Forward-Port-Of: odoo/enterprise#99007
This update resolves an issue where the automatic link between purchase orders and repair orders was disrupted after a purchase order was confirmed. This prevented seamless integration between the two processes, causing delays in order fulfillment. The fix ensures the smart link remains active, streamlining the workflow and improving efficiency.
Original PR description
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the…
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the MTO route * Create a product with the MTO route enabled * Create a Repair * On the Repair Order, in part add: - type : ADD - product : mto product * Save the RO * Go to Purchase Order * Confirm the PO -> Issue Smart link between PO and RO broken. ### Observation: The smart link is defined on: RO -> PO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/repair_order.py#L15-L17 PO -> RO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/purchase_order.py#L15-L17 When we confirm the PO, from the picking information it will create new moves: https://github.com/odoo/odoo/blob/2c87f3b2b397f268f0e50cb73cd81de992ddd42e/addons/purchase_stock/models/purchase_order.py#L293-L298 To create those stock moves, we go into_create_stock_moves where, for each POL, we will generate their values and erase the smart link: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_stock/models/purchase_order_line.py#L362-L365 ### Origin: In this commit https://github.com/odoo/odoo/commit/9d98c43581e2579f43b35541b43264866dede5a5: "`created_purchase_line_id` is cleared after confirming the RFQ. This allows to merge more in `_merge_moves`." This breaks the link between PO <-> RO to maybe merge the move in the future. This issue is not present in 19.0 since it was solve in this commit : https://github.com/odoo/odoo/commit/2713876dbc70d3984e584a9037a2206dcda4e84a ### About the fix: The root cause of this issue remains ambiguous despite the analysis. Therefore, in the interest of stability and caution, we opted to implement the fix in a safer location. opw-5121816 Forward-Port-Of: odoo/odoo#237996 Forward-Port-Of: odoo/odoo#232999
This update fixes an issue where invoice due dates were incorrectly calculated when users were in UTC timezones. The change removes a timezone conversion step, ensuring due dates are accurately displayed based on the user's local time. This prevents discrepancies and ensures invoices are presented correctly to customers.
Original PR description
This commit fixes the incorrect due date calculation of invoices. If user timezone is set to any UTC-* timezone, then the due date is calculated as the previous day to the actual due date. This is because the function `deserializeDateTime` was used, which considers the input date as UTC timezone and converts it to system timezone. For example, if the due date is "2025-11-20 00:00:00" and the system timezone is UTC-3, then the calculated due date is "2025-11-19 21:00:00". So when getting the difference from today's date (assuming today is "2025-11-20"), the difference is 1 day (which is not the expected value). This commit replaces the call of `deserializeDateTime` with `deserializeDate`, which removes the system timezone conversion. opw-5160764 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240785 Forward-Port-Of: odoo/odoo#236769
This update corrects an issue where the 'Edit Payment' button was incorrectly visible in certain Odoo localization modules (specifically `l10n_fr_pos_cert` and `l10n_at_pos`). This change ensures compliance with fiscal regulations in these countries, restricting editing order details at the payment stage. Visibility is now controlled based on user roles and company authentication status.
Original PR description
Before this commit: =================== - On the Payment Screen, the `Edit Payment` button was visible in the `l10n_fr_pos_cert` and `l10n_at_pos` localizations. - This was incorrect because fiscal compliance in these countries does not allow altering order details at this stage. - The visibility logic for this button was unintentionally modified in `pos_hr`. After this commit: ================== The visibility of the `Edit Payment` button is now correctly enforced: - `point_of_sale`: visible only until the receipt is printed. - `pos_hr`: visible only when the logged-in user is an admin (except in AT and FR localization). - `l10n_fr_pos_cert`: never visible. - `l10n_at_pos`: visible only when the company is `not FON Authenticated`. Task: 5384822 Related Enterprise PR: https://github.com/odoo/enterprise/pull/101460 Forward-Port-Of: odoo/odoo#238839
This update corrects a previous issue where the 'Edit Payment' button was incorrectly visible in the AT and FR localization versions of Odoo. This change ensures compliance with local fiscal regulations by restricting editing access to payments, only allowing it when the company is not using FON Authentication. This improves data integrity and reduces potential compliance risks.
Original PR description
Before this commit: =================== - On the Payment Screen, the `Edit Payment` button was visible in the `l10n_fr_pos_cert` and `l10n_at_pos` localizations. - This was incorrect because fiscal compliance in these countries does not allow altering order details at this stage. - The visibility logic for this button was unintentionally modified in `pos_hr`. After this commit: ================== The visibility of the `Edit Payment` button is now correctly enforced: - `point_of_sale`: visible only until the receipt is printed. - `pos_hr`: visible only when the logged-in user is an admin (except in AT and FR localization). - `l10n_fr_pos_cert`: never visible. - `l10n_at_pos`: visible only when the company is `not FON Authenticated`. Task: 5384822 Related Community PR: https://github.com/odoo/odoo/pull/238839 Forward-Port-Of: odoo/enterprise#101460
This update resolves an issue where user activity wasn't accurately tracked, causing the system to incorrectly display users as 'away'. By enabling event capturing, the system now reliably detects user clicks and updates their presence status in real-time. This ensures accurate user activity monitoring.
Original PR description
Before this PR, Elements that stopped event propagation (e.g., using event.stopPropagation()) prevented the global click listener from firing. As a result, user activity wasn't detected, and the presence status stayed "away" instead of switching back to "online". This PR fixes the issue by enabling event capturing on the global click listener (useCapture: true). With capture mode, the listener receives the event during the capture phase before any element can stop propagation. Bug:  task-[4892229](https://www.odoo.com/odoo/project/1519/tasks/4892229) Forward-Port-Of: odoo/odoo#238650
This update resolves a test failure that occurred during the build process. The issue stemmed from an incorrect count of analytic lines created for employees, triggered by a specific setup process. This fix ensures accurate accounting calculations for employee work orders.
Original PR description
fixing runbot error https://runbot.odoo.com/odoo/runbot.build.error/234639 on test test_mrp_analytic_account_employee_from_widget introduced by this PR https://github.com/odoo/enterprise/pull/85517
**cause of the error:**
Because there is a resource.calendar.leave without calendar_id,
without resource_id and at a date after today :
during the setupclass, when the employee is created,
_create_future_public_holidays_timesheets() creates an account.analytic.line.
So at the end of the test ,
self.env["account.analytic.line"].search([('employee_id', '=', self.employee1.id)])
returns 2 records instead of 1.
runbot-234639
Forward-Port-Of: odoo/enterprise#102338
Forward-Port-Of: odoo/enterprise#102282This update fixes a misleading error message displayed when deleting sale orders with linked appointments. Previously, users received an incorrect instruction to reduce quantities. Now, the system correctly informs users they must cancel the order before deletion, aligning with expected behavior and improving the user experience.
Original PR description
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed.…
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed. Solution: The order lines should not be manually unlinked from the sale order. It should be the bookings linked to the order lines that should be unlinked before the sale order deletion. Expected Behavior: When deleting a sale order whose lines have bookings, the following error message shoud be displayed: "You can not delete a sent quotation or a confirmed sales order. You must first cancel it." Current Behavior: When deleting a sale order whose lines have bookings, the following error message is displayed: "Once a sales order is confirmed, you can't remove one of its lines (we need to track if something gets invoiced or delivered). Set the quantity to 0 instead." Steps to reproduce on Runbot: 1. Install Appointments and ecommerce 2. For the dental care appointment, edit and enable "Up-front payment" 3. On the website, book an appointment for dental care and proceed to payment 4. Delete the sale order with the booking 5. Observe the incorrect error message being displayed opw-5092349 Forward-Port-Of: odoo/enterprise#100371
This update corrects a minor visual issue with the 'Add to Favorites' thread action in the Odoo interface. The action was incorrectly grouped with settings actions, preventing proper separation. This change ensures the action appears in the correct location for a better user experience.
Original PR description
This was placed with the settings action when this is not a "settings" action. While the overall position is ok for this action, this shouldn't be in the same group as "settings" because this is not a "settings" action. By being in the wrong group, the separator doesn't group the settings actions together as it should. This commit fixes the issue by moving this action to the previous group as the last item, so that this before the separator. Task-5429921 <img width="181" height="281" alt="Screenshot 2025-12-18 at 20 25 38" src="https://github.com/user-attachments/assets/c994a7ec-7902-489f-8e34-5b5aea66738f" /> <img width="185" height="282" alt="Screenshot 2025-12-18 at 20 25 15" src="https://github.com/user-attachments/assets/2b19309c-6cb9-4736-860c-a52401708f3f" />
This update prevents the Clickbot from incorrectly redirecting users to the Discuss app's settings menu. This change improves user experience by ensuring users are directed to the intended application and avoids potential disruptions.
Original PR description
This commit adds the Discuss app's settings menu to the Clickbot's blacklist because it redirects to another application.
This update resolves a technical issue that prevented the PoS system from closing correctly when an order line had a 100% discount. The fix ensures the system handles this scenario without errors, improving stability and reliability for users applying German tax regulations. This change impacts the l10n_de_pos_cert module.
Original PR description
Before this commit, when an order line had a 100% discount, a division by zero error occurred when closing the PoS session. opw-5240429 Forward-Port-Of: odoo/enterprise#98869
This update fixes an issue where limited product loading in Point of Sale (POS) could prevent products from draft orders from being loaded correctly. This ensures that all products, including those in draft orders, are now properly loaded during POS operations, improving the user experience and preventing lost sales. The change was made as part of a standard bug fix process.
Original PR description
Before this commit, when loading products, if limited product loading was enabled, it was possible that products present in draft POS orders were not loaded, leading to issues. opw-5386056 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238656
This update ensures that changes made to Product Designs within the shop editing interface are now consistently saved. Previously, edits weren't saved if the related component was temporarily removed. This fix improves the reliability of product design management, preventing lost changes and ensuring a smoother user experience.
Original PR description
Steps to reproduce: ======= 1. Go to /shop in edit mode. 2. Change the Product Design. 3. Switch to the "Blocks" tab (so the "Style" tab is not visible). 4. Click on "Save". Before this commit:…
Steps to reproduce: ======= 1. Go to /shop in edit mode. 2. Change the Product Design. 3. Switch to the "Blocks" tab (so the "Style" tab is not visible). 4. Click on "Save". Before this commit: ====== The selected Product Design was not saved. After this commit: ====== The Product Design is now always saved correctly, even if the `ProductsDesignPanel` component has been unmounted. Technical reason: ======= The save behavior depended on whether the `ProductsDesignPanel` component was still mounted at the moment of saving. If it was not alive, changes were lost. Solution: ===== We no longer depend on the component being alive. When the Product Design or the Gap is modified, we mark the product list with the `o_dirty_product_design_list` class. On save, we look for elements with this class, retrieve their modified data, and apply the changes. 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#238851
This update resolves an issue where subfolders within the Documents section were not appearing in the search panel when accessed from other applications. Previously, users would see the full folder structure, but the search functionality wouldn't reflect it. This change ensures a consistent and accurate search experience for all document types.
Original PR description
...when coming from another app. Reproduce: 1. Go to a fleet vehicle record and open its 'Documents' stat button. 2. You end up in the Fleet folder, where you see subfolders as kanban cards, but they are not in the search panel. Task-5272030 Forward-Port-Of: odoo/enterprise#99688
This update fixes an issue where downpayment lines in the My E-commerce localization module weren't correctly assigned a standard classification code. Now, all downpayment lines will consistently use code '022', ensuring accurate reporting and compliance. This change improves the reliability of financial data related to downpayments.
Original PR description
Ensure downpayment lines are assigned a fixed classification code ("022"), while other lines retain their product-based classification.
Task-5356913
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#240906
Forward-Port-Of: odoo/odoo#239831This update corrects errors in the l10n_ke_edi_oscu module related to credit note processing for Kenya. Specifically, it now prevents credit notes with mismatched customer PINs and ensures credit notes are not dated before the original invoice, aligning with KRA (Kenya Revenue Authority) regulations.
Original PR description
* Prevent credit note with customer PIN different than the submitted invoice. * Prevent credit note to be dated before the original invoice date. task-5160113 Forward-Port-Of: odoo/enterprise#102475 Forward-Port-Of: odoo/enterprise#100480
This update fixes an issue where employee and manager feedback was reset to default templates when an appraisal was reopened. The fix ensures that previously entered feedback remains intact, streamlining the appraisal process and preventing data loss. The change was triggered by a bug in how the system handled appraisal state transitions.
Original PR description
Steps to reproduce: 1- Create new appraisal 2- Confirm appraisal 3- Edit employee and manager feedbacks 4- Set the final rating for the appraisal 5- Mark appraisal as done 6- Reopen appraisal Issue:…
Steps to reproduce: 1- Create new appraisal 2- Confirm appraisal 3- Edit employee and manager feedbacks 4- Set the final rating for the appraisal 5- Mark appraisal as done 6- Reopen appraisal Issue: The feedbacks of both the employee and manager are reset to the default template. They should be unchanged. Cause: Both the reopen and reset buttons used to call the the same action "action_back" which would set the state of the appraisal to "1_new", there is a compute that is triggered by the change in state which updates the appraisal's department_id which in turn triggers two other computes for the employee and manager feedbacks, those computes have a condition that if the state of the appraisal is '1_new', then the feedbacks should be reset to the templates. Fix: Make each button call its own action and make the reopen action set the state to '2_pending' instead of '1_new'. Furthermore make the reset action also reset the final rating for the appraisal. Task-5411661 Forward-Port-Of: odoo/enterprise#102021
This update resolves an issue where the link popover was incorrectly repositioned within the editor, primarily when creating links. The fix improves the accuracy of the popover's placement by addressing how the editor handles text selections and range calculations. This ensures a smoother and more reliable user experience when creating and editing links.
Original PR description
Two related overlay reposition issues are solved separately out of iframe and in the iframe. **Commit 1:** [FIX] html_editor: avoid wrong range after insert and popover reposition Before this commit:…
Two related overlay reposition issues are solved separately out of iframe and in the iframe. **Commit 1:** [FIX] html_editor: avoid wrong range after insert and popover reposition Before this commit: The link popover is repositioned at the beginning of the text when editing url. When insert, we first delete the non-collapsed selection, then we split the text node by splitTextNode at the collapsed selection. However, splitTextNode resets the text node's value by its substring, which breaks the range of the collapsed selection. This range is stored and used to reposition the overlay when the selection is not in the editable. Reproduction: 1. selection some text, create a link 2. go the the url field and type something 3. the popover is replaced to the beginning of the text. After this commit: we use dom function splitText to split the text only when we need to, e.g. when the currently selection's offset isn't at the beginning or the end of the text node. The dom function keeps the range properly maintained after splitting. However, there is a limitation case from how we create the link on selection, how the browser manages the selection's range and how the overlay reacts to it. The limitation case is when the selection is inside one text node and selecting the whole text node of the range's startContainer (which is the same with endContainer). When the link is created, we do extractContent on the selection's range, put it in the link and insert the link at the collapsed selection. During this process, the browser loses the range's start/end container which leads to invalid start/end container. For this range isn't valid case, it triggers the overlay plugin's special handler which inserts one shadow caret (which is after the inserted link) and uses it to calculate the position. Because the shadow caret is inserted by the cloned collapsed range, we can't really have enough context from the range (about where to re-place the caret) to manipulate the position. **Commit2:** [FIX] html_editor: pass selection data to overlay to avoid reposition in iframe Before this commit: the overlay plugin uses the editable's document's selection to check if the current selection is in the editable. It works when there's no iframe, as the overlays are part of the document. However in an iframe's editable zone, e.g. the website editing zone, the overlays are not under the iframe document but under the outer window's document. When checking iframe document's selection, it cannot detect the selection in the overlay, which gives a wrong "inEditable" value. After this commit: we pass the getSelectionData to the overlay so it can use the existing currentSelectionIsInEditable task-5184799 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240796 Forward-Port-Of: odoo/odoo#237759
This update fixes a readability issue in the manufacturing order barcode view when using dark mode. By adjusting text and background colors and removing a distracting style element, the finished product information is now much clearer, ensuring accurate order tracking.
Original PR description
*: stock_barcode Before this commit: ======================= When accessing a manufacturing order via Barcode in `dark mode`, the producing bar of the finished product is difficult to read due to…
*: stock_barcode Before this commit: ======================= When accessing a manufacturing order via Barcode in `dark mode`, the producing bar of the finished product is difficult to read due to poor colour contrast. Steps to reproduce: ======================= 1. Install the `mrp` module. 2. Switch to dark mode. 3. Open any manufacturing order using Barcode. 4. Observe the producing bar for the finished product. - The text on the producing bar is hard to read because the colour of text does not provide sufficient contrast. - Additionally, for products tracked by `lot or serial number`, when the same product is added multiple times, the barcode view groups these entries into a single grouped line, causing the same visibility issue in both MO and normal `picking/transfer` operations. Cause of the Issue: ======================= In dark mode, both the text and background colour of the producing bar are light, resulting in low colour contrast and making the text difficult to read. Additionally, the `text-muted` class applied to the `units of measure (UoM)` further reduces readability. After this commit: ======================= Updated the text colour of producing bar and background colour of grouped lines to use a darker shade for better visibility in dark mode. Also, removed the `text-muted` class used on `UOM` to improve redability. TaskID-5117608 Forward-Port-Of: odoo/enterprise#96718
A recent test tour failed due to an unexpected disappearance of a newly created line during the GS1 barcode process. This fix ensures a consistent state is maintained during the tour, preventing unpredictable behavior and improving test reliability. The update also includes refinements to the tour trigger and model methods for greater precision.
Original PR description
Runbot build error: [232683](https://runbot.odoo.com/odoo/runbot.build.error/232683) Forward-Port-Of: odoo/enterprise#101495
This update fixes an issue where manually adjusted prices on customer invoices were being reset when the fiscal position was changed. The fix ensures that prices remain as the user set them, mirroring the behavior in Sale Orders. This improves accuracy and reduces manual intervention for users updating invoices.
Original PR description
**Steps to reproduce:** * Install the **Accounting** module. * Create a customer invoice with at least one product line. * Manually adjust the **price_unit** on the invoice line. * Change the fiscal position on the invoice. * Click the **Update Taxes and Accounts** button. **Observed behavior:** * The manually adjusted price is reset to the product’s default sales price (e.g., 1000). * This occurs even though neither the product nor the UoM changed. * In contrast, **Sale Orders correctly preserve** manually edited prices in the same situation. **Cause:** * `action_update_fpos_values` method call the recomputation of unit price each time when we click update taxes and accounts button on invoice. **Fix:** * Add a condition to **skip price recomputation** when fiscal position changes. * This preserves manual prices when only the fiscal position changes. opw-5252832 Forward-Port-Of: odoo/odoo#240929 Forward-Port-Of: odoo/odoo#237914
This update restores key user interface changes to the mailing list feature, specifically addressing issues that were previously overwritten. The changes include consolidating duplicate buttons and options, restoring the ability to unarchive mailing lists, and ensuring consistent styling. These improvements enhance the usability and functionality of the mailing list workflow.
Original PR description
This commit reintroduces a few UI changes that were lost after being overwritten by another task. Originally introduced in: https://github.com/odoo/odoo/commit/807477e78850671b9561c36f185482ee612c0c5d Later overwritten by: https://github.com/odoo/odoo/commit/0f7ee1764e8b59029003c6ad7269e185b30c6b43 Fixes: - Removed duplicate 'Retry' buttons (keeps only one) - Removed duplicate code of t-menu in mailing list kanban - Removed duplicate xpath of 'sms' option in mailing list kanban - Restored the 'Unarchive' option in the Kanban record dropdown to recover archived mailing lists - fixed left-alignment of mailing informations in header to keep styling consistent. task-5435584
This update corrects an issue where the Odoo system was holding cursors open for too long, impacting performance. By fixing the indentation, the system now closes cursors immediately after fetching notifications, optimizing resource usage. This results in a more efficient and responsive Odoo experience.
Original PR description
In [1], the block following the fetch of notifications was wrongly indented. Cursor should be held for as little time as possible. This commit fixes the issue. [1]: https://github.com/odoo/odoo/pull/235746 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 streamlines the HTML editor's testing process by separating individual tests to avoid timing issues. Additionally, unnecessary helper functions for tag creation have been removed, simplifying the code and reducing complexity. This improves the reliability and maintainability of the HTML editor tests.
Original PR description
Description of the issue/feature this PR addresses: I. Grouping multiple testEditor in a single test is bad practice because the timeout of it is then shared between the different testEditor calls rather than each having their own separate timers. This PR splits the calls of each testEditor to its own test. II. This PR removes helper functions used to create different types of tags. Instead of simplifying the code, these helpers introduced unnecessary complexity and confusion. task-5375867 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241001 Forward-Port-Of: odoo/odoo#240345
This update aligns the positions of the WhatsApp 'view-contact' button and the Live Chat 'livechat-info' panel within the discuss app. Previously, they were in opposite locations, creating a disjointed user experience for agents. This change ensures a more intuitive and consistent flow for both WhatsApp and Live Chat conversations.
Original PR description
The thread action 'view-contact' is somewhat like 'livechat-info', in that this action redirects to relevant info to the whatsapp user and livechat-info is a panel with all info on the visitor and…
The thread action 'view-contact' is somewhat like 'livechat-info', in that this action redirects to relevant info to the whatsapp user and livechat-info is a panel with all info on the visitor and more. The position of both buttons were the total opposite in discuss app: - 'livechat-info' was put as the 1st panel one before panels - 'view-contact' was dead last. There are differences, with 'livechat-info' being a panel and 'view-contact' a redirect button. However, each are important buttons for the type of conversation that justify them being in their own group right now. Since the buttons are mutually exclusive by the channel type, there's reason to have them share the same position. This commit moves the position of 'view-contact' in discuss header thread actions to be the same as 'livechat-info', that is as the 1st action in the list. This makes its position consistent with livechat info, thus agents of live chat and whatsapp would appreciate the 2 button placement being consistent. Task-5431313 <img width="1760" height="231" alt="Screenshot 2025-12-18 at 21 02 24" src="https://github.com/user-attachments/assets/ee2baf91-0d9a-49ca-91ac-a7781b33e57b" /> Forward-Port-Of: odoo/enterprise#102479
This update corrects an issue where analytic accounting report amounts were incorrectly displayed, potentially missing or misattributed. The fix ensures that amounts are accurately reflected based on the move line associated with the analytic account, improving the reliability of financial reporting.
Original PR description
Steps to reproduce: - Activate analytic accounting - Create an invoice with one line, and set an analytic account - Set also the analytic account on the receivable line - Open the Aged Receivable - Activate debug mode, go to the configuration settings of the report - Activate the analytic groupby filter and go back to the report - unfold the partner of the invoice and select the filter with the analytic groupby -> The amount related to the analytic line is wrongly placed on another move, or possibly missing. This is due to the fact that the id used is the one of the analytic account instead of the move line. Forward-Port-Of: odoo/enterprise#102535
This update resolves a bug where custom embedded actions weren't consistently appearing in different Odoo projects. The fix ensures that actions are correctly loaded and displayed, regardless of which project a user is currently working in or if they refresh the page. This improves the user experience and functionality of embedded actions.
Original PR description
Since this change: https://github.com/odoo/odoo/pull/185674/commits/b663a6e3dbda6eda84e4a6b051acfc8511476cd3#diff-552aefb62246b1f4fe6a2607ec8f0a01773e53de2d68293266b38bc99c5cb56dR503 It introduces…
Since this change: https://github.com/odoo/odoo/pull/185674/commits/b663a6e3dbda6eda84e4a6b051acfc8511476cd3#diff-552aefb62246b1f4fe6a2607ec8f0a01773e53de2d68293266b38bc99c5cb56dR503 It introduces two bugs:
- Create a project A and project B, activate the top bar in both projects
- Create a new custom embedded action in project A
- Switch to project B (by changing the URL), the custom action of project A is present in project B
- In a project, create a new custom embedded action, refresh the page, the action is not visible nor available in the top bar.
It enters the if condition, and get the "lastAction", which may not contain the same "embedded_action_ids" than the current action (targeting another project or the same project if we just refreshed the page). It enters the condition because the path of the action is the same ("tasks") and no "active_id" is specified in the context of the action.
We then force the load of the action if the "lastAction" stored in the browser session had embedded actions, to be sure to get the latest embedded actions linked to the current action in case of any, and not keep the ones linked to "lastAction".
task-5269261
Forward-Port-Of: odoo/odoo#240711
Forward-Port-Of: odoo/odoo#237695This update resolves an issue where product routes weren't appearing on the form in the 19.0 release. The fix ensures the Manufacturing route is always enabled, guaranteeing the correct display of routes and simplifying product creation. Unnecessary form steps for product creation have also been removed.
Original PR description
Since 19.0, routes are no longer displayed in the product form if no route outside from Buy/Manufacture are enabled, as those two now depend on whether there's a vendor/bom to be enabled for that…
Since 19.0, routes are no longer displayed in the product form if no route outside from Buy/Manufacture are enabled, as those two now depend on whether there's a vendor/bom to be enabled for that product. In the `setUpClass` however, without having the MTO route enabled by other means, there wouldn't be any route to display in the product form, resulting in a traceback at launch as the `route_ids` field would be invisible within the form. Now we make sure the MTO route is always enabled (as it doesn't make sense to assign an archived route), which also forces the display of `route_ids` in the product form. Also removes the assignation of the 'Manufacture' route on products, as its no longer necessary on product that have a bom. In `purchase_mrp`, we just remove the usage of the Form for product creation, as: - The `routes` argument was never even used - There was no point in creating these products through a form in the first place This avoids having to enable an extra route for "nothing", just to have `route_ids` appear in the form. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238394
This update resolves an issue where archived subtasks remained visible in the Kanban view even with the 'Show Sub-Tasks' option disabled. The fix removes a previous setting that forced subtasks to be visible after archiving, now controlled solely by the toggle. This ensures a cleaner and more intuitive project management experience.
Original PR description
Steps to reproduce: - Install the Project app. - Create a task and a subtask under it. - Archive the subtask, then unarchive it. - Untoggle the Show Sub-Tasks Issue: Subtask remains visible in Kanban even when Show Sub-Tasks is untoggled. Cause: When a subtask is archived, the PR https://github.com/odoo/odoo/pull/148342 forces `display_in_project' to True Fix: Remove the logic that sets display_in_project to True on archived subtasks, since their visibility is now managed by the Show/Hide Subtasks toggle. task-5075134 Forward-Port-Of: odoo/odoo#230263
This update corrects an issue where inventory valuation calculations were inaccurate, particularly when dealing with purchase orders and bills. The fix ensures that inventory values are correctly reflected across different valuation methods (FIFO, Average Cost, and AVCO), improving the reliability of financial reporting.
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#238510
This update fixes an issue where product values in Peru reports were incorrectly showing zero due to how the system initially calculated product costs. The fix ensures that product values accurately reflect the actual cost of goods, particularly during initial product creation and stock movements, leading to more reliable financial reporting.
Original PR description
Since we create a product value with the initial cost of the product we need to adapt this test. Since it creates the product during the setup at date of today. It will register the current value of the product as 0. When you deliver it will take the current cost so 0. Thus the out move won't have any value.
This update fixes an issue where flexible employee holiday durations were incorrectly calculated due to timezone differences. The fix uses date ranges (request_date_from and request_date_to) to ensure accurate duration calculations, regardless of timezone, preventing overestimation of holiday hours.
Original PR description
### Steps to reproduce: - Create an employee with Flexible working schedule - Set the timezone for this employee very far from yours - Create an Unpaid leave with Custom Hours for this employee - Set the hours of the leave from 8 to 21 - Notice the duration is just 8 hours ### Cause: When calculating the duration of the flexible employee leave we check if the date_from and the date_to has the same date and if so we get the difference between the hour_to - hour_from but sometime when the tz is different when we convert it to UTC the dates overlap in two days so the condition sets to false so we get the working hours of the employee. ### Fix: Using the request_date_from and request_date_to in this condition where it will always be accurate in terms of days opw-5118689 Forward-Port-Of: odoo/odoo#240143 Forward-Port-Of: odoo/odoo#230366
This update fixes an issue where the total price in Point of Sale orders was incorrect when using 'LOT' tracked products with groupable UoMs. The fix ensures that the price unit is consistently applied to the converted quantity, accurately calculating the order total. This improves the reliability of sales transactions.
Original PR description
Steps to reproduce ------------------ 1. Make a product tracked by 'LOT' and having a groupable in pos UoM 2. Make a SO with that product, choosing another UoM from the same category (if we chose Kg in first step, choose gram here, etc) 3. Settle the order in PoS. We observe that the order's total amount is totally off, we explain why below. Why it's happening ------------------ The `lot_remaining_quantity` is quantity after converting to the original UoM (that of step 1, not that of step 2). We are using that quantity for lines having products tracked by 'LOT' and a groupable UoM; however, we are keeping price unit as if we are using the quantity before conversion, i.e. the quantity in the UoM of step 2. That creates a mismatch between the UoM and thus we miscalculte the total price. The fix ------- When using the converted quantity, also use the converted price unit. opw-5144326 Forward-Port-Of: odoo/odoo#241025 Forward-Port-Of: odoo/odoo#239858
This update prevents sensitive agent information from being exposed in live chat messages. By using the recipient's live chat username instead of their full name, we enhance privacy and security. This change ensures a more secure communication experience for our agents and customers.
Original PR description
Before this commit, when mentioning an internal user in live chat it would show their name in the message body. This leads to the agent's name being leaked when a live chat username is set. This commit fixes the issue by using the user's live chat username (when available and in the context of live chats) in the generated mention element. This commit also changes `mail_message@_to_store_defaults` to send, when available, the `user_livechat_username` of the recipients of a message. task-5384305 Forward-Port-Of: odoo/odoo#238893
This update fixes an issue where mobile users were seeing both purchase and sales tax options when creating invoices. The fix ensures that invoices on mobile devices correctly display the appropriate tax types based on the current invoice settings, improving the user experience and data accuracy. This was a bug fix related to how tax types were being filtered on the mobile view.
Original PR description
Steps to reproduce ================== - Use a mobile viewport - Create an new invoice - Add an invoice line - Click on the Taxes field => Both purchase and sales taxes are available Solution ======== Copy the domain from the desktop list view https://github.com/odoo/odoo/blob/fcc677e900c2fccb9fa0bd88ef01c559cadfa08a/addons/account/views/account_move_views.xml#L1051-L1055 We also add the corresponding context and options opw-5124536 Forward-Port-Of: odoo/odoo#240116 Forward-Port-Of: odoo/odoo#237724