Daily updates from Odoo
Navigate
Branch
Friday, January 2, 2026
155 changes
23 changes
Enhancements to existing features
This update adds helper functions to manage order slots within the Point of Sale system. These functions allow for more controlled and guided tours of the slot selection process, improving the user experience for new Point of Sale users. This change supports the upcoming POS tours and enhances the overall ease of use.
Original PR description
Add utils function `selectSlotDays` & `selectPresetTimingSlotIndex` to select the nth day and nth timing slot in the slot selection dialog. These functions will be used in POS tours to manage orders with slots. enterprise PR: https://github.com/odoo/enterprise/pull/95136 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241644 Forward-Port-Of: odoo/odoo#233920
This update enhances the reliability of our IoT point-of-sale system by enabling support for Local Network Access (LNA). Previously, IoT devices required a secure HTTPS connection, which is now bypassed to allow seamless communication without a certificate, improving device compatibility and functionality. This change ensures our POS system continues to operate effectively with IoT hardware.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/100331 **This PR contains 2 commits:** - **[IMP] iot_base: allow use of LNA for IoT requests** Chromium 142 added support for HTTPS -> HTTP…
Enterprise PR: https://github.com/odoo/enterprise/pull/100331 **This PR contains 2 commits:** - **[IMP] iot_base: allow use of LNA for IoT requests** Chromium 142 added support for HTTPS -> HTTP requests on the local network (Local Network Access). This commit adds a flag to the IoT longpolling class to enable LNA support. The flag forces all requests to use HTTP even in an HTTPS environment. It also sets the `targetAddressSpace` option to `local` in the `fetch` request. - **[IMP] point_of_sale: use_lna support for IoT requests** Since https://github.com/odoo/odoo/pull/235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. task-5353672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237598 Forward-Port-Of: odoo/odoo#237147
This update enhances the connection between ePOS systems and IoT printers by allowing HTTP requests instead of HTTPS, simplifying setup and eliminating the need for certificates. A warning message now appears when HTTP requests fail, ensuring transparency and facilitating troubleshooting. This improves printer functionality and reliability.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/237147 Since odoo/odoo#235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. In addition, we now show a warning message when a request to the Blackbox via HTTP fails and has to fallback to the websocket. task-5353672 Forward-Port-Of: odoo/enterprise#100640 Forward-Port-Of: odoo/enterprise#100331
Resolved issues and error corrections
This update ensures that inventory valuation lines are consistently created when closing Point of Sale sessions using the Continental perpetual inventory valuation method. Previously, lines weren't generated for orders that weren't invoiced, leading to discrepancies. This change aligns Continental accounting with the Anglo-Saxon method, ensuring accurate valuation reporting.
Original PR description
Currently, in a continental perpetual setting for the stock valuation, the inventory valuation lines are not created when closing the session if the orders when not invoiced. Steps to reproduce:…
Currently, in a continental perpetual setting for the stock valuation, the inventory valuation lines are not created when closing the session if the orders when not invoiced. Steps to reproduce: ------------------- * Using My Belgian Company * In the settings search for inventory valuation * Set inventory valuation to Perpetual * Any cost method, AVCO for example * Set up valuation account and journal * Create a product * 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 method, AVCO for example * Set inventory valuation to perpetual * Open pos session * Make an order for the product, put partner, invoice it * Close session, go to session journal items > Observation: Valuation lines are present * Open pos session * Make an order for the product, no partner, no invoice * Close session, go to session journal items > Observation: Valuation lines are missing. Why the fix: ------------ When the company is set with perpetual inventory valuation, in the context of the point of sale, there should not be any difference between anglo saxon and continental accounting. When we check the same flow with anglo-saxon, there is no difference for the creation of the inventory valuation move line whether we invoice the order or not. Inventory valuation lines are always present. Valuation entries are created in `_create_stock_valuation_lines()` if information is available regarding `stock_valuation`. https://github.com/odoo/odoo/blob/51f1982367809581530e4d126ed515c0df6c4daa/addons/point_of_sale/models/pos_session.py#L1258-L1273 The information for `stock_valuation` is supposed to be computed in `_accumulate_amount()`. However this is currently only computed when we have the anglo saxon accounting: https://github.com/odoo/odoo/blob/51f1982367809581530e4d126ed515c0df6c4daa/addons/point_of_sale/models/pos_session.py#L953 Instead we will now only check if the company is valuating the inventory in real time. We also apply the same fix on paid orders we want to invoice afterwards. opw-5167946 Forward-Port-Of: odoo/odoo#240176
This update corrects a technical issue related to how spreadsheet metadata is accessed within the Odoo system. By moving a key override to the correct module, spreadsheet_edition_account, the system now retrieves metadata more reliably. This ensures smoother spreadsheet functionality and avoids potential errors.
Original PR description
This commit moves the override of _get_spreadsheet_metadata to the correct module, spreadsheet_edition_account. 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 corrects the location of a key setting override within the Enterprise edition's spreadsheet functionality. Moving this override ensures the system accurately retrieves spreadsheet metadata, leading to improved reporting and data consistency. This resolves a technical issue impacting spreadsheet performance.
Original PR description
This commit moves the override of _get_spreadsheet_metadata to the correct module, spreadsheet_edition_account.
This update simplifies point-of-sale printer configuration by removing the previous prioritization of Epos IP and IoT devices. Now, the default receipt printer is always used, and the settings display only valid receipt printers. This change improves the user experience and reduces potential configuration issues.
Original PR description
Previously, when an Epos IP and for IoT devices were configured both in one pos config , the Epson printer was prioritized over IoT devices, and a warning message was displayed to notify the user. This behavior has been removed. Printers are no longer managed this way, and the default receipt printer is now always the one selected for printing. Also, the filter for the default receipt printer in the res settings has been adjusted to display only receipt printers in the available field. enterprise pr: https://github.com/odoo/enterprise/pull/102673 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes a previous system where users were warned about conflicting printer settings (Epos IP and IoT devices). Now, the default receipt printer is automatically selected, streamlining the Point of Sale process. The configuration options have been simplified for easier use.
Original PR description
Previously, when an Epos IP and for IoT devices were configured both in one pos config , the Epson printer was prioritized over IoT devices, and a warning message was displayed to notify the user. This behavior has been removed. Printers are no longer managed this way, and the default receipt printer is now always the one selected for printing. Also, the filter for the default receipt printer in the res settings has been adjusted to display only receipt printers in the available field. community pr : https://github.com/odoo/odoo/pull/240916
This update corrects a technical problem that could occur when duplicating Odoo databases. The fix ensures the system handles recordsets larger than one, preventing a critical error that caused the application to fail. This improves database stability and reliability during backups and restores.
Original PR description
These two computes assume a recordset of size 1. When duplicating databases, the recordset for this method might be more than 1, causing a "Expected singleton" traceback. See opw-5226545 (and linked TOTD thread) Forward-Port-Of: odoo/enterprise#103033 Forward-Port-Of: odoo/enterprise#99424
This update ensures invoices exported with specific European VAT settings (like Distance Selling) accurately reflect the foreign VAT number used for the transaction. Previously, the PDF invoices incorrectly displayed the company's VAT. This fix corrects this discrepancy, ensuring accurate VAT reporting for EU transactions.
Original PR description
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1.…
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1. Install a European localization (ex: l10n_at) 2. Enable EU Intra-community Distance Selling. You should now have new OSS fiscal positions. Update the one you want to use with a foreign VAT. 3. Create a valid foreign customer. (within the EU) 4. Create and send an invoice for this customer. 5. In the PDF, there is an embedded factur-x file. Notice how the VAT number under the SellerTradeParty corresponds to the company's VAT, not the foreign VAT number defined on the fiscal position. This is more apparent because we use the correct VAT number in the PDF file but not in the corresponding XML. This commit fixes this issue by first checking if we have a foreign VAT number defined on the fiscal position of the invoice. If so, we use it. opw-5182837 Forward-Port-Of: odoo/odoo#241436 Forward-Port-Of: odoo/odoo#236692
This update ensures that only administrator users can override the maximum closing difference setting when closing a point-of-sale session. Previously, users with varying levels of access could adjust this setting, leading to potential discrepancies. This change enhances data accuracy and control within the POS system.
Original PR description
Currently, the behavior of the "Maximum closing difference" feature with employees depends on the user connected in the backend and not the employee using the pos. Steps to reproduce:…
Currently, the behavior of the "Maximum closing difference" feature with employees depends on the user connected in the backend and not the employee using the pos. Steps to reproduce: ------------------- * Set max closing difference as 0 * Have 1 admin user and 1 pos user * Have 2 employees * Set admin user and employee 1 as advanced employees of the pos * Set pos user and employee 2 as basic employees Steps with admin: * Make sure you are logged as the admin in the database * Open pos (could be a session opened by other user) * Log in with Admin user * Try to close the pos with a difference of 10 -> You can, ok * Log in with employee 1 (advanced) * Try to close the pos with a difference of 10 -> You ca but shouldn't Steps with pos user * Now log in the database as pos user * Open pos (could be a session opened by other user * Log in with employee 1 (advanced) * Try to close the pos with a difference of 10 -> You cannot, ok * Log in with Admin user * Try to close the pos with a difference of 10 -> you cannot but should Why the fix: ------------ Employees that have no linked user should not ba able to override the max difference. Employees who have a connected user should only be able to override the max difference if their user is admin of the pos. opw-5184041 Forward-Port-Of: odoo/odoo#240978 Forward-Port-Of: odoo/odoo#235356
This update resolves an issue impacting the accuracy of payroll calculations for Belgian businesses using the l10n_be_hr_payroll module. The fix corrects a data processing problem (DDP) that was causing incorrect salary declarations. This ensures compliance and accurate reporting for our Belgian clients.
Original PR description
Forward-Port-Of: odoo/enterprise#102787
This update fixes an issue where users could inadvertently change product taxes when items were already in their shopping cart. Now, users can still modify product details but tax updates are restricted, ensuring accurate order calculations and preventing inconsistencies between product and order taxes. This improves order accuracy and reliability.
Original PR description
- When a product is already in the cart, prevent updating its taxes from the frontend product edit popup. This avoids inconsistencies between the product taxes and the taxes applied to the order line. - Now we can still edit other fields of the product. task-id: 4943650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239867
This update resolves an issue where clicking on bookings in the Gantt view resulted in an error. The change adjusts the system's navigation to correctly identify and display booking information, ensuring a smoother user experience. This fix improves the reliability of the appointment scheduling feature.
Original PR description
### Steps to reproduce 1 - Create a booking. 2 - Go to Gantt view. 3 - Click on the booking, traceback occurs. --- The popover footer no longer contains an inner wrapper div, which broke existing xpath inheritance. See: https://github.com/odoo/enterprise/pull/101482 This PR updates the xpath to target the popover-footer container directly. Task-5445909
A recent change that removed image alignment options from the Odoo interface has been reverted. This ensures users retain access to these features while a new 'image toolbar' is being developed. Restoring these options now avoids a disruption in workflow.
Original PR description
Commit [1] removed the image options from the sidebar because a task is planned to move these image alignment options to a new "image toolbar". Merging that commit before the toolbar task was ready was not a good idea, as it leaves us without these options for a long period of time. With this commit, we restore the image alignment options in the sidebar. These options will be removed only when they can be properly moved to the new image toolbar. [1]: https://github.com/odoo/odoo/commit/101d0c782cec6a7b5dadf062c75828aefff2e8a7
This update corrects an issue where product names were duplicated on delivery slips when a kit's component lacked a description. The fix ensures that product names appear only once on delivery slips, improving clarity and accuracy for sales reporting. This resolves a technical glitch impacting how kits are displayed.
Original PR description
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with…
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with a bom of type kit * Add a product "comp" in the bom (don't give it a description) * Create a sales order with the product A and confirm it * Go on the delivery and create a delivery slip -> Issue, the name of the product "comp" appears twice. Observation: ------------- The name is added in description_picking field, since it is considered that the fallback for the description for outgoing deliveries should be display_name: https://github.com/odoo/odoo/blob/584f94e3246b6b59641bf83d4e707f2e872bc1e8/addons/stock/models/product.py#L293-L301 In _compute_description_picking, information about the bom will be added : https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/mrp/models/stock_move.py#L235-L236 This causes the issue because the filter to prevent repeating the name on the delivery slip is implemented directly in the XML: https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/stock/report/report_deliveryslip.xml#L83-L85 However, since we have added elements to the description (the bom information), this filter will not be applied, leading to the repeated name. opw-5265906 Forward-Port-Of: odoo/odoo#236948
This update resolves an error that prevented users from paying invoices when an invoice line lacked a due date. The fix ensures that the system correctly handles invoices with multiple payment terms and avoids a 'date' vs. 'boolean' comparison issue, allowing payments to proceed smoothly. This improves the reliability of the invoicing process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241744 Forward-Port-Of: odoo/odoo#241060
This update enhances the preparation display filters in the Point of Sale module, streamlining order management. Specifically, it adds multi-select options for time and presets, and ensures the category filter is always visible, improving usability and efficiency for staff.
Original PR description
- Time filter: * Remove "All" option (now default) * Add "Now" option for unscheduled and next-slot orders * Allow multi-selection - Preset filter: * Add multi-select preset filter * Only shown if related POS configs use presets - Category/Product filter: * Always show pos.category filter (even if no preparation card contains this category) * Move category/product filters below Time and Preset filters task: https://www.odoo.com/odoo/project/1737/tasks/5060221 community PR: https://github.com/odoo/odoo/pull/233920 Forward-Port-Of: odoo/enterprise#103047 Forward-Port-Of: odoo/enterprise#95136
This update resolves a bug that caused the VoIP module to crash when users opened message notifications without a linked customer record. The fix ensures the system handles messages correctly, regardless of whether a partner is associated, improving stability and user experience.
Original PR description
Since- #233442 Steps to reproduce: - Install VoIP - Call a phone number without any related record - Open VoIP - Open the previously created call record - Send a text message to the number by clicking on `Send SMS` - Click on the notification icon on the message in the chatter This caused a crash because the code tried to access the email from `res_partner_id` while no related partner was set. This PR fixes the issue by safely handling messages without a related partner, allowing the recipients list to open without crashing. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the pairing code on the IoT status page was obscured for users with many connected devices. The code has been moved to a more visible location. Additionally, a system check has been added to prevent errors when testing the IoT service locally.
Original PR description
For IoT Boxes with many devices connected, the pairing code is pushed to the top of the status page, making it invisible/unreadable. We moved it to the left so that it's never pushed to the top. In addition, we add a check on the operating system to avoid loading drivers/interfaces on "Test" system, to avoid errors when running the IoT Service locally.
A minor typo in the l10n_ec_edi_pos module prevented the correct partner (Deco Addict) from being selected during refund processing. This fix corrects the code to ensure accurate partner identification, resolving a potential issue with order processing in Ecuador. The change was a simple typo correction.
Original PR description
Step to reproduce: - install l10n_ec_edi_pos - start pos and settle order with specific partner(ex. Deco Addict) - process the refund for this order Observation: - on product screen, "Consumidor Final" is selected instead of Deco addict. Cause and Fix: - Fixed a typo: it used `final_consumer_id` instead of `_final_consumer_id` opw-5412346 Forward-Port-Of: odoo/enterprise#103082 Forward-Port-Of: odoo/enterprise#102202
This update resolves an error that prevented users from opening the employee form within the Point of Sale (POS) frontend. The fix disables the employee field on the frontend only, allowing the backend to function correctly where all necessary data is available. This ensures a smooth user experience for POS operations.
Original PR description
Opening employee form in the frontend was throwing an error, since not all thre required assets were available on the PoS frontend. So in this commit 57aba149b6e6927f9055124e58bed03f842329d5, we disabled openening the employee form by making the employee_id field unclikcable, both in forntend and backend!! It was enough however to only macking it unclikcable on the frontend, since it was working fine on the backend where all the required assets were loaded anyway. This commit restores the functionality on the backend, but overriding the `Many2OneField` used by the `employee_id`, and making it unclickable only on the frontned. opw-5252486 Forward-Port-Of: odoo/odoo#241793 Forward-Port-Of: odoo/odoo#241100
This update ensures that changes to product descriptions in Odoo are now correctly reflected in the UrbanPiper integration during menu synchronization. Previously, updates to product descriptions weren't consistently propagated to UrbanPiper. This fix improves data accuracy and synchronization between Odoo and UrbanPiper.
Original PR description
Before this commit: --- When we sync the menu with the product description and later update the product description, re-syncing the menu does not update the product description in UrbanPiper. After this commit: --- This fix ensures that any change in the product description is properly sent to UrbanPiper during menu synchronization. task-5439271 Forward-Port-Of: odoo/enterprise#102946 Forward-Port-Of: odoo/enterprise#102846
9 changes
New functionality added to Odoo
This update adds the ability to generate e-invoices in Croatia, specifically for the MojEracun system. It utilizes a new proxy client to handle communication with the eRacun network and ensures compliance with Croatian e-invoice standards. Testing includes XSD validation to guarantee accurate invoice generation.
Original PR description
Adding e-invoice generation base functionality for Croatia. Implemented as an extension of account_edi_ubl_cii, similar to other localisations using such documents. Adding proxy client for MojEracun sevice provider to send invoiced on the eRacun network. Proxy user is entirely separate from the standard Odoo IAP EDI proxy implementation. Adding UBL 2.1 compliant node `cac:SellerContact` to existing node `cac:AccountingSupplierParty` to be used in Croatian e-invoice XLM generation with the new method chain. XSD validation included in the tests on the client side as there is no corresponding Odoo IAP proxy. task-4925745 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241784 Forward-Port-Of: odoo/odoo#230757
Enhancements to existing features
This update enhances the messaging menu by adding an inbox tab to display notifications and implementing lazy loading for all tabs. This improves performance and ensures notifications are consistently visible for users who prefer to handle them within Odoo.
Original PR description
**Current behavior before PR:** - Channels were loaded all at once in the messaging menu, causing performance issues. - Read notifications gets disappeared and were only accessible from Discuss history. **Desired behavior after PR is merged:** - New inbox tab in messaging menu which displays unread & read notifications - All tabs (main, channels, chat, inbox) implement lazy loading and fetch threads in batches as user scrolls - Inbox tab is only visible to users with notification preference set to handle in odoo task-[4458377](https://www.odoo.com/odoo/project/1519/tasks/4458377) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update fixes an issue where paragraphs would become unusable after removing an icon. The change ensures that paragraphs remain editable and accessible, regardless of whether an icon was previously present. It addresses a bug related to how the editor handles empty paragraphs and icon deletion.
Original PR description
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that…
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that icon during the delete process does not trigger `fillEmpty`. As a result, the paragraph ends up with no content, leaving it empty and unreachable. Solution: - During the delete process, after the icon is removed, call the `fillEmpty` method. This ensures that if the block becomes empty, a `<br>` is inserted inside the paragraph, keeping it accessible. **Issue 2:** Steps to reproduce - Insert an icon in an empty paragraph. - Place the cursor before the icon. - Press Enter. - Nothing happens. Cause - When the cursor is placed before a `contenteditable=false` element, `getDeepRange` sets the selection deep inside the non-editable element as a result, when Enter is pressed, the action is ignored because the selection is not in an editable context. Solution - Instead of setting the selection inside `getDeepRange`, set the selection after calling `getDeepRange` only if the returned range is not within a `contenteditable=false` element. task-3540454 Forward-Port-Of: odoo/odoo#241125 Forward-Port-Of: odoo/odoo#237891
This update corrects a technical error that prevented the system from properly updating SSL certificate status. The fix ensures the system correctly handles date/time information, preventing a data conversion issue that was causing errors. This improves the reliability of certificate management processes.
Original PR description
Currently an error occurs when the `iot/box/update_certificate_status` controller tries to write `ssl_certificate_end_date` as `cert.not_valid_after_utc`. Error: `ValueError: unconverted data remains: +00:00` This is because when we convert `cert.not_valid_after_utc` to a string, it will convert the UTC date as ` "2026-03-08 13:06:39+00:00"` and while the system converts this string date with +00:00, it will throw an error. This commit fixes the issue by using a `timezone-naive` value derived from `cert.not_valid_after_utc`. Applying `replace(tzinfo=None)` removes the `+00:00` timezone information and converts the datetime to a `timezone-naive` object. sentry-7016111455 Forward-Port-Of: odoo/odoo#241592
This update resolves an issue where the 'Jump to Present' button in non-aside chatter was unreliable, causing flickering and incorrect scroll positioning. By disabling a browser feature that interfered with scrolling, the button now consistently directs users to the latest message without disruption.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ In non-aside chatter, the **Jump to Present** action did not work reliably. When users clicked it, the…
**Description of the issue this PR addresses:** ------------------------------------------------ In non-aside chatter, the **Jump to Present** action did not work reliably. When users clicked it, the view flickered and the scroll position jumped back, preventing users from reaching the latest message. This happened because the browser’s native scroll anchoring interfered with the scroll-to-bottom behavior when messages were reloaded. **Current behavior before PR:** --------------------------------- - In non-aside chatter, clicking **Jump to Present** caused flickering. - The view jumped back instead of staying on the latest message. - Users could not reliably reach the most recent messages. **Desired behavior after PR is merged:** ----------------------------------------- - Clicking **Jump to Present** in non-aside chatter scrolls directly to the latest message without flickering. - The scroll position remains stable and does not jump back. - The **Jump to Present** button works consistently. **Task:** 5264332 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue within the web_studio module, specifically related to how report variables are handled. The fix ensures that the correct data is used when generating reports, leading to more reliable and accurate report output. This improves the overall stability and functionality of the report editor.
Original PR description
Issue: getQwebVariables returns isEditingFooterHeader, but isInHeaderFooter was read from it Cause of the issue: e2eed2b71647de29905bcc1a40c3c540d2a87e47 Forward-Port-Of: odoo/enterprise#102829 Forward-Port-Of: odoo/enterprise#102543
This update resolves an error that occurred when users attempted to pay invoices with payment terms having multiple due dates. The fix ensures the system correctly handles invoices with missing due dates, preventing a 'date' vs. 'boolean' error and allowing payments to proceed smoothly. This improves the reliability of the invoicing process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241744 Forward-Port-Of: odoo/odoo#241060
This update fixes an issue where users without Point of Sale or Inventory permissions were blocked from deleting contacts. A recent change introduced an access error due to a check for related orders. This fix ensures that only authorized users can delete contacts, improving data security and preventing accidental data loss.
Original PR description
Versions affected 18 (and any where the fw port has been deployed) A user with no point of sale or inventory permissions wouldn't be able to delete contacts anymore since commit 082b7d3 Steps to reproduce: - In runbot, strip demo user permissions so he doesn't have inventory or point of sale access. - Go to a contact and try to delete it. - An **Access Error** error raises, as that user doesn't have `pos.order` permissions and the new unlink check is trying to check if the partner has related orders. (anyway, maybe the right approach would be to set an `ondelete='restrict'` in the `partner_id` field of `pos.order`) cc @moduon MT-12281 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232376
This update fixes a previous issue where users couldn't download documents uploaded through the system. Now, a popover appears with a download link, simplifying the process and removing the editing toolbar for attachments. This enhances usability and allows for quick document access.
Original PR description
Before this commit: the document uploaded by /image cannot be downloaded on clicking. After this commit: we open a popover for document without the editing buttons. The user may download the document by clicking the link. Also the toolbar is hidden for attachments. task-3648796 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241572 Forward-Port-Of: odoo/odoo#236705
7 changes
Resolved issues and error corrections
This update fixes an issue where removing an icon from a paragraph would leave it unusable. The change ensures that paragraphs remain editable and accessible after icon removal, preventing disruptions to content creation. It also addresses a problem where pressing 'Enter' before an icon wouldn't insert a new paragraph.
Original PR description
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that…
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that icon during the delete process does not trigger `fillEmpty`. As a result, the paragraph ends up with no content, leaving it empty and unreachable. Solution: - During the delete process, after the icon is removed, call the `fillEmpty` method. This ensures that if the block becomes empty, a `<br>` is inserted inside the paragraph, keeping it accessible. **Issue 2:** Steps to reproduce - Insert an icon in an empty paragraph. - Place the cursor before the icon. - Press Enter. - Nothing happens. Cause - When the cursor is placed before a `contenteditable=false` element, `getDeepRange` sets the selection deep inside the non-editable element as a result, when Enter is pressed, the action is ignored because the selection is not in an editable context. Solution - Instead of setting the selection inside `getDeepRange`, set the selection after calling `getDeepRange` only if the returned range is not within a `contenteditable=false` element. task-3540454 Forward-Port-Of: odoo/odoo#241125 Forward-Port-Of: odoo/odoo#237891
This update resolves an issue where the Odoo MRP runbot test failed on weekends due to a lack of work intervals. The fix now includes a fallback for Friday, ensuring the test runs consistently. Additionally, the test performance has been significantly improved by reducing the planning timeframe to 2 weeks, resulting in faster test execution.
Original PR description
overlook of https://github.com/odoo/odoo/pull/239717 ### Before this commit: Runbot was red on weekends, as there are no work intervals on weekends. ### After this commit: Use Friday as a fallback on…
overlook of https://github.com/odoo/odoo/pull/239717
### Before this commit:
Runbot was red on weekends, as there are no work intervals on weekends.
### After this commit:
Use Friday as a fallback on weekends. In addition, improve the test performance by mocking the total number of weeks of planning to 2 instead of 50 (before: 6s, after: 1s).
runbot-237575
---
Note: ran the test for the next 5 years, and it works :+1:
```diff
diff --git a/addons/mrp/tests/test_bom.py b/addons/mrp/tests/test_bom.py
index 7acf19e89add..bfadc8e487c1 100644
--- a/addons/mrp/tests/test_bom.py
+++ b/addons/mrp/tests/test_bom.py
@@ -13,6 +13,7 @@ from odoo.tests.common import HttpCase, tagged, freeze_time
from odoo.tools import float_compare, float_round, float_repr
+@tagged("-at_install", "post_install")
@freeze_time(fields.Date.today())
class TestBoM(TestMrpCommon):
@@ -963,6 +964,16 @@ class TestBoM(TestMrpCommon):
self.assertEqual(report_values['lines']['operations_time'], 15.0)
self.assertEqual(report_values['lines']['producible_qty'], 2)
+ def test_bom_report_planning_with_producible_qty_loop(self):
+ from datetime import date # noqa: PLC0415
+ start, stop = date.today(), date.fromisoformat("2031-01-01")
+ with freeze_time(start) as frozen_date:
+ for i in range((stop - start).days):
+ print("date:", str(date.today()))
+ with self.subTest(str(date.today())):
+ self.test_bom_report_planning_with_producible_qty()
+ frozen_date.tick(timedelta(days=1))
+
def test_21_bom_report_variant(self):
""" Test a sub BoM process with multiple variants.
BOM 1:
```
Forward-Port-Of: odoo/odoo#241582This update corrects a typo in the dashboard's sheet name and updates the labels for key scorecards to accurately reflect average values. These changes improve the clarity and accuracy of the restaurant's sales performance data, providing a more reliable view of key metrics.
Original PR description
Desired behavior after PR is merged:
- Fix typo in first sheet name: 'Dahsboard' -> 'Dashboard'.
- Rename scorecards to reflect average values:
- 'Total revenue per guest' -> 'Avg revenue per guest'.
- 'Total revenue per order' -> 'Avg revenue per order'.
Task: [5447108](https://www.odoo.com/odoo/project/2328/tasks/5447108)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241598This update resolves an error that occurred when users attempted to pay invoices with payment terms having multiple due dates. The fix ensures the system correctly handles invoices with missing due dates, preventing a crash and allowing payments to proceed smoothly. This improves the reliability of the invoicing process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241744 Forward-Port-Of: odoo/odoo#241060
This update resolves a technical issue that prevented invoices reconciled with multiple bank transactions from displaying correctly. The fix ensures the reporting of invoice amounts is accurate, regardless of the number of bank transactions used for reconciliation. This improves the reliability of financial reporting within the system.
Original PR description
### Issue description: The `_compute_full_amount_switch_html` method assumes that `reconciled_lines_excluding_exchange_diff_ids` contains at most one line (which is true only for move lines of bank statement lines). However, if an invoice is reconciled with multiple bank transactions, when accessing the `full_amount_switch_html` for any move line in the invoice, it triggers `ValueError: Expected singleton`, as the compute method uses the reconciled_lines as if they are a single line. ### Steps to reproduce: 1. Create an invoice 2. Reconcile the invoice with multiple bank transactions. 3. Perform a read on the `full_amount_switch_html` field on the invoice line from the invoice (using the web tool, or add the field to any view). 4. You will get `ValueError: Expected singleton: account.move(XX, XX)` opw-5224135
This update fixes a previous issue where users couldn't download documents uploaded through the system. Now, a popover appears allowing direct download without editing options, and the attachment toolbar is hidden for a cleaner user experience. This enhancement simplifies document access for our users.
Original PR description
Before this commit: the document uploaded by /image cannot be downloaded on clicking. After this commit: we open a popover for document without the editing buttons. The user may download the document by clicking the link. Also the toolbar is hidden for attachments. task-3648796 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241572 Forward-Port-Of: odoo/odoo#236705
A recent update to our Point of Sale system has been preventing users without specific access rights from deleting contacts. This was due to a restriction in how related orders were checked, leading to an access error. This fix ensures that only authorized users can delete contacts, maintaining data integrity and security.
Original PR description
Versions affected 18 (and any where the fw port has been deployed) A user with no point of sale or inventory permissions wouldn't be able to delete contacts anymore since commit 082b7d3 Steps to reproduce: - In runbot, strip demo user permissions so he doesn't have inventory or point of sale access. - Go to a contact and try to delete it. - An **Access Error** error raises, as that user doesn't have `pos.order` permissions and the new unlink check is trying to check if the partner has related orders. (anyway, maybe the right approach would be to set an `ondelete='restrict'` in the `partner_id` field of `pos.order`) cc @moduon MT-12281 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232376
9 changes
Enhancements to existing features
This update adds a helpful link within the Accounting Settings to Odoo's documentation on Deferred Expenses and Revenue management. This provides users with immediate access to detailed information and best practices for handling these complex accounting scenarios, improving overall accuracy and compliance.
Original PR description
In the Accounting Settings, add a "?" icon that points at the Odoo documentation on Deferred Expenses and Revenue management. task-5418388 Forward-Port-Of: odoo/enterprise#103090
Resolved issues and error corrections
This update resolves an error that prevented users from opening employee forms within the Point of Sale (POS) frontend. The fix disables the employee field on the frontend only, allowing the backend to function correctly where all necessary data is available. This ensures a smoother user experience for POS operations.
Original PR description
Opening employee form in the frontend was throwing an error, since not all thre required assets were available on the PoS frontend. So in this commit 57aba149b6e6927f9055124e58bed03f842329d5, we disabled openening the employee form by making the employee_id field unclikcable, both in forntend and backend!! It was enough however to only macking it unclikcable on the frontend, since it was working fine on the backend where all the required assets were loaded anyway. This commit restores the functionality on the backend, but overriding the `Many2OneField` used by the `employee_id`, and making it unclickable only on the frontned. opw-5252486 Forward-Port-Of: odoo/odoo#241100
This update resolves an error that occurred when users attempted to pay invoices with payment terms having multiple due dates. The fix ensures the system correctly handles invoices with missing due dates, preventing a 'date' vs. 'boolean' error and allowing payments to proceed smoothly. This improves the reliability of the invoicing process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241060
This update fixes an issue where removing an icon from a paragraph would leave it empty and unusable. The change ensures that paragraphs remain editable and functional after icon removal, improving the user experience. It also addresses a problem where pressing 'Enter' wouldn't work correctly before an icon, now correctly inserting a new line.
Original PR description
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that…
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that icon during the delete process does not trigger `fillEmpty`. As a result, the paragraph ends up with no content, leaving it empty and unreachable. Solution: - During the delete process, after the icon is removed, call the `fillEmpty` method. This ensures that if the block becomes empty, a `<br>` is inserted inside the paragraph, keeping it accessible. **Issue 2:** Steps to reproduce - Insert an icon in an empty paragraph. - Place the cursor before the icon. - Press Enter. - Nothing happens. Cause - When the cursor is placed before a `contenteditable=false` element, `getDeepRange` sets the selection deep inside the non-editable element as a result, when Enter is pressed, the action is ignored because the selection is not in an editable context. Solution - Instead of setting the selection inside `getDeepRange`, set the selection after calling `getDeepRange` only if the returned range is not within a `contenteditable=false` element. task-3540454 Forward-Port-Of: odoo/odoo#241125 Forward-Port-Of: odoo/odoo#237891
This update resolves a problem where scanning the barcode on packaging for kit variants within picking orders would cause an error. The fix ensures the system correctly identifies and processes packaging barcodes, allowing users to accurately scan and track kit components. This improves the reliability of the barcode scanning feature for kit products.
Original PR description
In the barcode application, scanning a picking order containing a kit product variant with packaging will raise a Traceback. ### Steps to reproduce: 1. Enable packagings on inventory configuration.…
In the barcode application, scanning a picking order containing a kit product variant with packaging will raise a Traceback. ### Steps to reproduce: 1. Enable packagings on inventory configuration. 2. Create a product, that as a least 2 variants. 3. Add a packaging with a barcode to one of the variants. 4. Create a BoM for created product (kit type). 5. Create a picking order for the variant with packaging. 6. Print the picking operation to scan the code through barcode. 7. Go to barcode and to scan it. 8. Now scan the barcode of the packaging -> It triggers an traceback ### Cause of the issue: The product_id and their uom_uom that are in the move_lines are added in the cache: https://github.com/odoo/enterprise/blob/d0a7619bb87fb1fad45451a1c79dca73994ee8bd/stock_barcode/models/stock_picking.py#L92-L94 However the kit product and the product_uom are not added in the cache, since they are not in the move_lines ( the components are in the move_lines not the kit product). In _get_barcode_data, where it's supposed to retrieved the product_uom (packaging in previous version, see (1)), it retrieve the uom_uom of the products again: https://github.com/odoo/enterprise/blob/4d3c33ed152f014e4965613756845fb054c9f2bc/stock_barcode_mrp/models/stock_picking.py#L12-L17 For the scan of the packaging barcode to work properly it also need the corresponding product_id, because if the product_id it's not present an it will raise and error: https://github.com/odoo/enterprise/blob/6e2c39ea2898e870f348e0bbe4ad29abe35794b6/stock_barcode/static/src/models/barcode_model.js#L1104-L1108 https://github.com/odoo/enterprise/blob/6e2c39ea2898e870f348e0bbe4ad29abe35794b6/stock_barcode/static/src/models/barcode_model.js#L1635 https://github.com/odoo/enterprise/blob/6d4fe2b03b7d981e3092e42d1b5e1786734d9427/stock_barcode/static/src/lazy_barcode_cache.js#L102-L115 (1) Changes from this commit: https://github.com/odoo/enterprise/commit/b4f285138edc227050c89c92fd15d39fb656da6b "This commit removes `product.packaging` model completely and merges it into units of measure feature." The packaging changed in a new model called product.uom that is the link between the product and it's uom.uom opw-4852875 Forward-Port-Of: odoo/enterprise#87867
This update resolves a problem where the MRP planning runbot would incorrectly show as red on weekends due to the absence of work intervals. The fix now allows for planning on Fridays, ensuring accurate runbot status. Additionally, the test performance has been significantly improved by reducing the planning timeframe to 2 weeks, speeding up test execution.
Original PR description
overlook of https://github.com/odoo/odoo/pull/239717 ### Before this commit: Runbot was red on weekends, as there are no work intervals on weekends. ### After this commit: Use Friday as a fallback on…
overlook of https://github.com/odoo/odoo/pull/239717
### Before this commit:
Runbot was red on weekends, as there are no work intervals on weekends.
### After this commit:
Use Friday as a fallback on weekends. In addition, improve the test performance by mocking the total number of weeks of planning to 2 instead of 50 (before: 6s, after: 1s).
runbot-237575
---
Note: ran the test for the next 5 years, and it works :+1:
```diff
diff --git a/addons/mrp/tests/test_bom.py b/addons/mrp/tests/test_bom.py
index 7acf19e89add..bfadc8e487c1 100644
--- a/addons/mrp/tests/test_bom.py
+++ b/addons/mrp/tests/test_bom.py
@@ -13,6 +13,7 @@ from odoo.tests.common import HttpCase, tagged, freeze_time
from odoo.tools import float_compare, float_round, float_repr
+@tagged("-at_install", "post_install")
@freeze_time(fields.Date.today())
class TestBoM(TestMrpCommon):
@@ -963,6 +964,16 @@ class TestBoM(TestMrpCommon):
self.assertEqual(report_values['lines']['operations_time'], 15.0)
self.assertEqual(report_values['lines']['producible_qty'], 2)
+ def test_bom_report_planning_with_producible_qty_loop(self):
+ from datetime import date # noqa: PLC0415
+ start, stop = date.today(), date.fromisoformat("2031-01-01")
+ with freeze_time(start) as frozen_date:
+ for i in range((stop - start).days):
+ print("date:", str(date.today()))
+ with self.subTest(str(date.today())):
+ self.test_bom_report_planning_with_producible_qty()
+ frozen_date.tick(timedelta(days=1))
+
def test_21_bom_report_variant(self):
""" Test a sub BoM process with multiple variants.
BOM 1:
```
Forward-Port-Of: odoo/odoo#241582This update corrects a typo in the restaurant POS dashboard's sheet name and updates the labels for key scorecards to use 'Avg' instead of 'Total'. These changes ensure more accurate and understandable reporting for restaurant sales data.
Original PR description
Desired behavior after PR is merged:
- Fix typo in first sheet name: 'Dahsboard' -> 'Dashboard'.
- Rename scorecards to reflect average values:
- 'Total revenue per guest' -> 'Avg revenue per guest'.
- 'Total revenue per order' -> 'Avg revenue per order'.
Task: [5447108](https://www.odoo.com/odoo/project/2328/tasks/5447108)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241598This update addresses a compatibility issue with Odoo 19.1 on our IoT boxes. It automatically upgrades the operating system and Python version, allowing older images to function correctly with newer Odoo databases. This prevents downtime and ensures continued operation of client systems.
Original PR description
This PR adds 2 migration scripts which allow older iot box images (<= 25_07) to work with databases in saas-19.1 and later. It updates os to debian trixie and installs all of the necessary packages…
This PR adds 2 migration scripts which allow older iot box images (<= 25_07) to work with databases in saas-19.1 and later. It updates os to debian trixie and installs all of the necessary packages to allow working after upgrades or with new databases. The update takes approximately 30 minutes. A warning about the necessity to update is added in this upgrade script: https://github.com/odoo/upgrade/pull/9153 1) Our IoT Boxes which the clients are currently using are running under "Bookworm" os with Python 3.11 with Odoo on it. 2) We have a mecanism which aligns the iot box code to the connected database version using `git checkout` 3) In saas-19.1 Odoo bumped the Python minimal version requirement to 3.12 4) As a result when our iot boxes will do 'git checkout saas-19.1' Odoo will never be able to start anymore 5) When this happens the only way to fix it is either remotely connect to the iot box and run a script like in this PR (remote debug must be activated before upgrading) or flash the iot box with a new image based on Trixie 6) This PR avoids this by updating the current OS to Trixie and the Python version accordingly so that the clients can keep using their iot boxes in saas-19.1 Forward-Port-Of: odoo/odoo#241129
This update fixes an issue where users couldn't download documents uploaded through the system. Now, a popover appears allowing direct download, and the editing toolbar is hidden for attachments, streamlining the download process. This enhances usability for accessing and sharing documents.
Original PR description
Before this commit: the document uploaded by /image cannot be downloaded on clicking. After this commit: we open a popover for document without the editing buttons. The user may download the document by clicking the link. Also the toolbar is hidden for attachments. task-3648796 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241572 Forward-Port-Of: odoo/odoo#236705
22 changes
New functionality added to Odoo
This update adds a new 'Inbox' tab to the messaging menu, providing a central location to view all notifications – both read and unread – if the user prefers to handle them within Odoo. The tab uses lazy loading to efficiently display notifications as the user scrolls, improving performance and usability. This simplifies notification management for users.
Original PR description
**Current behavior before PR:** The messaging menu does not include a tab to view notifications that have already been read. Once read, these notifications disappear from the interface and are only accessible through the Discuss App. **Desired behavior after PR is merged:** A new Inbox tab is added to the messaging menu. This tab displays both unread and read notifications, provided the user’s notification preference is set to “Handle in Odoo.” The Inbox tab uses lazy loading to fetch messages in batches as the user scrolls. task-[4458377](https://www.odoo.com/odoo/project/1519/tasks/4458377) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enhancements to existing features
This update enhances the visual appearance of filters without color by adding a black border to checkboxes that don't have a color assigned. The change involves a minor code adjustment and removal of duplicate SCSS files to improve consistency and maintainability.
Original PR description
Filters' checkboxes that don't have a color get a black border instead. To achieve this, in commit https://github.com/odoo/odoo/commit/97fea91a570d2bb8a0d454be9cbe7ea4269f6699 we created a hack which inverts the checkbox' white check icon and border to black. In this commit we adapt the `xpath` to add the `.no_filter` class to the parent element instead of the input. We also remove the duplicate SCSS which was already moved to `calendar_filter_panel.scss`. Community PR: https://github.com/odoo/odoo/pull/144404 task-3575827
This update enhances the Odoo calendar app on mobile devices by ensuring the filter dropdown only appears when filters are actually present. Previously, it was always visible, which created a confusing user experience. This change improves usability and simplifies navigation for mobile users.
Original PR description
To be merged after : https://github.com/odoo/odoo/pull/144208 https://github.com/odoo/odoo/pull/144169 - https://github.com/odoo/enterprise/pull/51755 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances how Odoo automatically updates settings by including a unique user identifier (DBUUID). This ensures settings are correctly associated with the right user account, leading to more accurate and personalized configurations. It's a routine improvement for the IAP system.
Original PR description
https://github.com/odoo/iap-apps/pull/1309/ Forward-Port-Of: odoo/odoo#241723
This update adds an 'Inbox' tab to the desktop messaging menu, providing a more organized view of notifications for users who prefer to receive them in this way. Notifications are grouped by record and sorted by recency, making it easier for users to quickly review important updates. This improves the overall user experience within the messaging system.
Original PR description
**Current behavior before PR:** There is currently no Inbox tab in messaging menu to filter and see inbox notifications. **Desired behavior after PR is merged:** This PR introduces an Inbox tab to the desktop messaging menu for users whose notification preference is set to `inbox`. These notifications are grouped by record and are sorted based on their recency, providing a clearer and more organized view within the messaging menu. task-[4458377](https://www.odoo.com/odoo/project/1519/tasks/4458377) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies the process of downloading the IoT Box image and Virtual installer. By adding shortcuts directly within the Enterprise app's configuration tab, users can now easily access these essential files, streamlining their setup and reducing friction.
Original PR description
To ease image and installer downloads, we added shortcuts to both installers on the app in the configuration tab.
Resolved issues and error corrections
This update fixes a critical bug that caused Odoo to crash when sending invoices via Peppol with invoice lines lacking a product name. Now, the system gracefully displays an error message, guiding users to ensure each invoice line has a product or label before sending. This improves invoice processing reliability and prevents data loss.
Original PR description
Before this commit: When sending an invoice via Peppol with an invoice line that has no product name, the system crashes with a TypeError instead of showing a error message. Steps to reproduce: 1. Go to Accounting 2. Navigate to Customers > Invoices 3. Create a new invoice 4. Add an invoice line without entering a product name 5. Click 'Send' 6. Select 'by Peppol (Demo)' 7. Click 'Send' -> TypeError: 'NoneType' object is not subscriptable After this commit: System validates that the product name exists before accessing its text content. Users see a clear, error message: `Each invoice line should have a product or a label.` task-5432061 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241135 Forward-Port-Of: odoo/odoo#240908
This update ensures that inventory valuation lines are correctly generated when closing Point of Sale sessions using the Continental perpetual accounting method. Previously, lines were missing for orders not invoiced, creating an inconsistency between Anglo-Saxon and Continental accounting. This fix aligns the POS valuation process with best practices for perpetual inventory management.
Original PR description
Currently, in a continental perpetual setting for the stock valuation, the inventory valuation lines are not created when closing the session if the orders when not invoiced. Steps to reproduce:…
Currently, in a continental perpetual setting for the stock valuation, the inventory valuation lines are not created when closing the session if the orders when not invoiced. Steps to reproduce: ------------------- * Using My Belgian Company * In the settings search for inventory valuation * Set inventory valuation to Perpetual * Any cost method, AVCO for example * Set up valuation account and journal * Create a product * 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 method, AVCO for example * Set inventory valuation to perpetual * Open pos session * Make an order for the product, put partner, invoice it * Close session, go to session journal items > Observation: Valuation lines are present * Open pos session * Make an order for the product, no partner, no invoice * Close session, go to session journal items > Observation: Valuation lines are missing. Why the fix: ------------ When the company is set with perpetual inventory valuation, in the context of the point of sale, there should not be any difference between anglo saxon and continental accounting. When we check the same flow with anglo-saxon, there is no difference for the creation of the inventory valuation move line whether we invoice the order or not. Inventory valuation lines are always present. Valuation entries are created in `_create_stock_valuation_lines()` if information is available regarding `stock_valuation`. https://github.com/odoo/odoo/blob/51f1982367809581530e4d126ed515c0df6c4daa/addons/point_of_sale/models/pos_session.py#L1258-L1273 The information for `stock_valuation` is supposed to be computed in `_accumulate_amount()`. However this is currently only computed when we have the anglo saxon accounting: https://github.com/odoo/odoo/blob/51f1982367809581530e4d126ed515c0df6c4daa/addons/point_of_sale/models/pos_session.py#L953 Instead we will now only check if the company is valuating the inventory in real time. We also apply the same fix on paid orders we want to invoice afterwards. opw-5167946 Forward-Port-Of: odoo/odoo#240176
This update corrects a technical error that occurred when duplicating Odoo databases. The change ensures the system handles recordsets larger than one, preventing a 'Expected singleton' error. This improves database stability and reliability during backups and restores.
Original PR description
These two computes assume a recordset of size 1. When duplicating databases, the recordset for this method might be more than 1, causing a "Expected singleton" traceback. See opw-5226545 (and linked TOTD thread) Forward-Port-Of: odoo/enterprise#103033 Forward-Port-Of: odoo/enterprise#99424
This update ensures invoices exported with foreign VAT numbers (e.g., for EU Distance Selling) accurately reflect the correct VAT information in the PDF invoice and the underlying XML file. Previously, the company's VAT was used instead of the appropriate foreign VAT, leading to potential discrepancies. This fix improves invoice accuracy and compliance.
Original PR description
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1.…
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1. Install a European localization (ex: l10n_at) 2. Enable EU Intra-community Distance Selling. You should now have new OSS fiscal positions. Update the one you want to use with a foreign VAT. 3. Create a valid foreign customer. (within the EU) 4. Create and send an invoice for this customer. 5. In the PDF, there is an embedded factur-x file. Notice how the VAT number under the SellerTradeParty corresponds to the company's VAT, not the foreign VAT number defined on the fiscal position. This is more apparent because we use the correct VAT number in the PDF file but not in the corresponding XML. This commit fixes this issue by first checking if we have a foreign VAT number defined on the fiscal position of the invoice. If so, we use it. opw-5182837 Forward-Port-Of: odoo/odoo#241436 Forward-Port-Of: odoo/odoo#236692
This update fixes an issue where users could inadvertently change product taxes when items were already in their shopping cart. Now, users can still modify product details, ensuring consistent tax calculations and order accuracy. This improves the overall reliability of the point-of-sale system.
Original PR description
- When a product is already in the cart, prevent updating its taxes from the frontend product edit popup. This avoids inconsistencies between the product taxes and the taxes applied to the order line. - Now we can still edit other fields of the product. task-id: 4943650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239867
This update fixes an issue where spreadsheet metadata wasn't being correctly retrieved. The code has been moved to the appropriate module, spreadsheet_edition_account, ensuring accurate metadata is now available for spreadsheet functionality. This improves the reliability of spreadsheet reports and data integration.
Original PR description
This commit moves the override of _get_spreadsheet_metadata to the correct module, spreadsheet_edition_account. 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#241653
This update corrects the location of a key function within the Enterprise module, ensuring accurate retrieval of spreadsheet metadata. This resolves a previous issue and enhances the reliability of spreadsheet integration within the accounting system. It's a minor technical adjustment.
Original PR description
This commit moves the override of _get_spreadsheet_metadata to the correct module, spreadsheet_edition_account. Forward-Port-Of: odoo/enterprise#103054
This update resolves an error that prevented users from opening the employee form within the Point of Sale (POS) frontend. The fix disables the employee selection field on the frontend only, allowing the backend to function correctly where all necessary data is available. This ensures a smooth user experience for POS operations.
Original PR description
Opening employee form in the frontend was throwing an error, since not all thre required assets were available on the PoS frontend. So in this commit 57aba149b6e6927f9055124e58bed03f842329d5, we disabled openening the employee form by making the employee_id field unclikcable, both in forntend and backend!! It was enough however to only macking it unclikcable on the frontend, since it was working fine on the backend where all the required assets were loaded anyway. This commit restores the functionality on the backend, but overriding the `Many2OneField` used by the `employee_id`, and making it unclickable only on the frontned. opw-5252486 Forward-Port-Of: odoo/odoo#241793 Forward-Port-Of: odoo/odoo#241100
This update corrects a problem where product names were duplicated on delivery slips when a kit's component lacked a description. The fix ensures that product names appear only once on delivery slips, improving the accuracy and clarity of shipping documents. This resolves an issue impacting sales order fulfillment.
Original PR description
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with…
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with a bom of type kit * Add a product "comp" in the bom (don't give it a description) * Create a sales order with the product A and confirm it * Go on the delivery and create a delivery slip -> Issue, the name of the product "comp" appears twice. Observation: ------------- The name is added in description_picking field, since it is considered that the fallback for the description for outgoing deliveries should be display_name: https://github.com/odoo/odoo/blob/584f94e3246b6b59641bf83d4e707f2e872bc1e8/addons/stock/models/product.py#L293-L301 In _compute_description_picking, information about the bom will be added : https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/mrp/models/stock_move.py#L235-L236 This causes the issue because the filter to prevent repeating the name on the delivery slip is implemented directly in the XML: https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/stock/report/report_deliveryslip.xml#L83-L85 However, since we have added elements to the description (the bom information), this filter will not be applied, leading to the repeated name. opw-5265906 Forward-Port-Of: odoo/odoo#236948
This update fixes usability issues with hidden channels in the Odoo discussion platform. It adds a clear button to find hidden conversations and automatically repins conversations when opened, eliminating the previous 'hide' action. The design has also been refined for better clarity and consistency.
Original PR description
1. Discoverability of "hidden channels" was poor in just ctrl-k => Added a new button at bottom of discuss sidebar with "View hidden conversations". 2. When opening a hidden conversation, it's not possible to "undo" the hide. => Automatically repin conversation when opening the conversation. 3. Hide action was in same group as "Leaving", which is confusing because the actions are quite different as shown by color. => Moved "Hide conversation" action in its own group just above the highly destructive action like "Leave" but below settings actions. 4. Iconography of action is poor with a cross icon => use fa-eye(-slash) that matches more the semantics of action. Task-5431819 <img width="506" height="857" alt="Screenshot 2025-12-19 at 15 34 35" src="https://github.com/user-attachments/assets/453258bb-e83d-49db-986e-9c1c74eafc8d" /> Forward-Port-Of: odoo/odoo#240716
This update resolves minor usability issues related to the new channel hiding feature within WhatsApp. The changes enhance the user experience by addressing visual inconsistencies and improving the overall flow when hiding channels. This ensures a smoother and more intuitive experience for users.
Original PR description
Task-5431819 Forward-Port-Of: odoo/enterprise#102594
This update prevents visitor conversations within live chat from displaying the sender's IM status. This change addresses a recent accidental issue and improves the user experience for visitors. The fix ensures a cleaner and more focused chat interaction.
Original PR description
Before this commit, IM status was visible by livechat visitor. This issue comes from recent accidental regression [1]. [1]: https://github.com/odoo/odoo/pull/234715 Task-5435992 Before / After <img width="384" height="129" alt="Screenshot 2025-12-22 at 14 19 14" src="https://github.com/user-attachments/assets/6fb80a49-f04c-4db1-aa9a-254146a313b5" /> <img width="379" height="129" alt="Screenshot 2025-12-22 at 14 19 37" src="https://github.com/user-attachments/assets/10308a02-7370-4818-8bf5-cd1513a1a964" /> Forward-Port-Of: odoo/odoo#240927
This update resolves an error that prevented users from paying invoices when an invoice line lacked a due date. The fix ensures the system correctly handles invoices with multiple payment terms and due dates, preventing a 'date' vs. 'boolean' comparison error. This improves the reliability of the invoice payment process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241744 Forward-Port-Of: odoo/odoo#241060
This update resolves an issue where clicking on bookings in the Gantt view was causing errors. The underlying website structure changed, breaking a key reference point used in the application. This fix directly updates the application's code to correctly identify the booking element, ensuring bookings can be accessed reliably.
Original PR description
### Steps to reproduce 1 - Create a booking. 2 - Go to Gantt view. 3 - Click on the booking, traceback occurs. --- The popover footer no longer contains an inner wrapper div, which broke existing xpath inheritance. See: https://github.com/odoo/enterprise/pull/101482 This PR updates the xpath to target the popover-footer container directly. Task-5445909 Forward-Port-Of: odoo/enterprise#102983
This update ensures that changes to product descriptions within Odoo are now correctly reflected in the UrbanPiper system during menu synchronization. Previously, updates to product descriptions weren't consistently propagated to UrbanPiper, leading to outdated information. This fix improves data accuracy for our integrations with UrbanPiper.
Original PR description
Before this commit: --- When we sync the menu with the product description and later update the product description, re-syncing the menu does not update the product description in UrbanPiper. After this commit: --- This fix ensures that any change in the product description is properly sent to UrbanPiper during menu synchronization. task-5439271 Forward-Port-Of: odoo/enterprise#102946 Forward-Port-Of: odoo/enterprise#102846
This update resolves a random error that prevented the point-of-sale tip tour from running correctly. The issue stemmed from the tour not waiting for the confirmation screen to appear after the tip was validated. This fix ensures the tour consistently functions as expected, improving the customer experience.
Original PR description
The PosTipAfterPaymentTour tour would fail randomly because it was not waiting for the feedback screen to be shown after validating the tip screen. runbot-234734 Forward-Port-Of: odoo/odoo#241661
19 changes
Resolved issues and error corrections
A minor bug was resolved where the 'Consumidor Final' product type was incorrectly selected during refund processing for orders using the Deco Addict partner in the EC module. This fix corrects a typo in the code, ensuring accurate partner selection and proper refund functionality. This ensures correct reporting and transaction processing.
Original PR description
Step to reproduce: - install l10n_ec_edi_pos - start pos and settle order with specific partner(ex. Deco Addict) - process the refund for this order Observation: - on product screen, "Consumidor Final" is selected instead of Deco addict. Cause and Fix: - Fixed a typo: it used `final_consumer_id` instead of `_final_consumer_id` opw-5412346 Forward-Port-Of: odoo/enterprise#103082 Forward-Port-Of: odoo/enterprise#102202
This update fixes an issue where contacts without names and emails appeared as 'Unnamed' in chatter and recipient lists. Now, when a contact lacks this information, the system will automatically display their display name as a fallback, ensuring a more user-friendly experience. This improves usability and prevents confusion when adding contacts.
Original PR description
Steps to reproduce =============== 1. Create a contact of type invoice address without name and email. 2. Go to any app with chatter. 3. Add this user to the recipient ----> Only the blue tick will be visible (recipient name will be empty) After this commit, we will use the display_name as a fallback to show in the chatter. Forward-Port-Of: odoo/odoo#231561 Forward-Port-Of: odoo/odoo#213545
This update fixes a potential error that could occur during Odoo installation, specifically when accessing data within the system. The fix prevents a 'KeyError' by ensuring the necessary data is available before attempting to access it, improving installation stability.
Original PR description
An error occurs when the code attempts to access `leaf_id` in `self.__leaves`, but `leaf_id` does not exist in the dictionary . Error: `KeyError: 35` This might happen during installation when the `leaf_id` is not available in `self.__leaves`. This commit fixes the issue by accessing `leaf_id` from `self.__leaves` only when it is present. sentry-6925358461
This update resolves an issue where test cases for Point of Sale could fail due to a limited local customer database. A new setting allows tests to fetch customers from the server, particularly useful in offline test environments. This ensures more reliable test results and improved stability of the Point of Sale functionality.
Original PR description
before this commit: - By default, clicking on a customer only searched local records. - Since the local cache is limited to 100 customers, with demo data it was possible that the required customer was not found. after this commit: - Added 'pressEnter' boolean parameter to search more to also fetch customers from the server. - The boolean parameter was introduced because some test cases require offline mode where fetching from the server would cause issues. runbot-232714, 232715
This update fixes an issue where changing the work schedule in the salary calculator didn't correctly update employer costs. The fix ensures that the calculator now accurately reflects the selected resource calendar (e.g., 40h/week vs. 20h/week) when calculating employer costs. This improves the accuracy of payroll calculations.
Original PR description
Bug: Changing the work schedule on the salary configurator does not update the employer yearly cost Steps to reproduce: 1- Go to Payroll > Employees > Salary calculator 2- Put a yearly cost of 10000 3- Select the "40h/week calendar" 4- Check the yearly cost 5- Change to "20h/week calendar" Cause of the bug: _get_version inside ContractSalaryOffer would take the default calendar from the version if it exists (in our case it will always be the full time for the simulation employee) Fix done: Keep the condition as it is for normal offers, and for simulation offers change the default to the selected resource calendar task-5431216
This update ensures invoices exported with foreign VAT numbers (used for distance selling) accurately reflect the correct VAT information in the PDF invoice and the underlying XML file. Previously, the company's VAT was used instead, leading to discrepancies. This fix improves invoice accuracy and compliance for EU distance sales.
Original PR description
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1.…
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1. Install a European localization (ex: l10n_at) 2. Enable EU Intra-community Distance Selling. You should now have new OSS fiscal positions. Update the one you want to use with a foreign VAT. 3. Create a valid foreign customer. (within the EU) 4. Create and send an invoice for this customer. 5. In the PDF, there is an embedded factur-x file. Notice how the VAT number under the SellerTradeParty corresponds to the company's VAT, not the foreign VAT number defined on the fiscal position. This is more apparent because we use the correct VAT number in the PDF file but not in the corresponding XML. This commit fixes this issue by first checking if we have a foreign VAT number defined on the fiscal position of the invoice. If so, we use it. opw-5182837 Forward-Port-Of: odoo/odoo#241436 Forward-Port-Of: odoo/odoo#236692
This update addresses a requirement from the Mexican tax authority (SAT) regarding the format of ‘CuentaPredial’ accounts. The regex pattern has been updated to comply with the SAT’s latest specifications, ensuring accurate tax reporting. This change ensures Odoo continues to meet compliance standards for Mexican businesses.
Original PR description
SAT has declared the restriction [0-9a-zA-Z]{1,150} for CuentaPredial node
Specification: https://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd
Forward-Port-Of: odoo/enterprise#102981This update fixes an issue where users could inadvertently change product taxes when items were already in their shopping cart. Now, users can still modify product details but tax updates are restricted, ensuring accurate order calculations and preventing inconsistencies between product and order taxes. This improves the reliability of the Point of Sale system.
Original PR description
- When a product is already in the cart, prevent updating its taxes from the frontend product edit popup. This avoids inconsistencies between the product taxes and the taxes applied to the order line. - Now we can still edit other fields of the product. task-id: 4943650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239867
This update resolves an error that prevented users from opening employee forms within the Point of Sale (POS) frontend. The fix disables the employee selection field on the frontend only, allowing the backend to function correctly where all necessary data is available. This ensures a smoother user experience for POS operations.
Original PR description
Opening employee form in the frontend was throwing an error, since not all thre required assets were available on the PoS frontend. So in this commit 57aba149b6e6927f9055124e58bed03f842329d5, we disabled openening the employee form by making the employee_id field unclikcable, both in forntend and backend!! It was enough however to only macking it unclikcable on the frontend, since it was working fine on the backend where all the required assets were loaded anyway. This commit restores the functionality on the backend, but overriding the `Many2OneField` used by the `employee_id`, and making it unclickable only on the frontned. opw-5252486 Forward-Port-Of: odoo/odoo#241100
This update resolves an issue where the invite dialog remained open after creating a group chat from a direct message. Now, the dialog automatically closes, providing a smoother and less confusing user experience. This improves usability and prevents unnecessary open dialogs.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ When creating a group chat from a Direct Message via the invite dialog, the invite dialog remained open after the group chat was created. This resulted in a confusing user experience. **Current behavior before PR:** --------------------------------- - The invite dialog stays open after creating a group chat **Desired behavior after PR is merged:** ----------------------------------------- - The invite dialog closes after creating the group chat - No extra dialogs remain open **Task:** 5440535 --- I confirm I have signed the CLA and read the PR guidelines at https://www.odoo.com/submit-pr
This update fixes a formatting issue in notifications where a period was incorrectly separating the title and message, leading to an awkward display. The fix removes the unnecessary exclamation mark, improving the notification's readability. Additionally, the translation of 'Done' has been added for internationalization.
Original PR description
Issue: a notification used the title field with "Done!" and a message. The issue is that a title and message are separated by a period, resulting in "Done!. rest of the message." Solution: remove the exclamation mark Note: Added translation of "Done" Task-5420416
This update resolves an issue where copying and pasting content from the Knowledge editor resulted in a loss of plain text formatting. The fix restores the ability to paste text directly into other applications, ensuring users can accurately copy and paste content without formatting changes. This improves the usability of the Knowledge feature.
Original PR description
Since [1] when `vnd.odoo.odoo-editor` was added to the `HtmlViewer` clipboard, the `text/plain` mimetype was lost. This commit restores the plain text version of the clipboard. Steps to reproduce: - In knowledge, lock a page - Select some content - Copy - Paste into a plain text editor => No content was pasted [1]: https://github.com/odoo/odoo/commit/62a7c50b434e3f47ad58e20e96970cbd90b979b6 task-5449435 Forward-Port-Of: odoo/odoo#241676 Forward-Port-Of: odoo/odoo#241642
This update corrects an issue where product names were duplicated on delivery slips when a kit's component lacked a description. The fix ensures that product names appear only once on delivery slips, improving the accuracy and clarity of shipping documents. This resolves a problem that could lead to confusion for customers and warehouse staff.
Original PR description
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with…
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with a bom of type kit * Add a product "comp" in the bom (don't give it a description) * Create a sales order with the product A and confirm it * Go on the delivery and create a delivery slip -> Issue, the name of the product "comp" appears twice. Observation: ------------- The name is added in description_picking field, since it is considered that the fallback for the description for outgoing deliveries should be display_name: https://github.com/odoo/odoo/blob/584f94e3246b6b59641bf83d4e707f2e872bc1e8/addons/stock/models/product.py#L293-L301 In _compute_description_picking, information about the bom will be added : https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/mrp/models/stock_move.py#L235-L236 This causes the issue because the filter to prevent repeating the name on the delivery slip is implemented directly in the XML: https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/stock/report/report_deliveryslip.xml#L83-L85 However, since we have added elements to the description (the bom information), this filter will not be applied, leading to the repeated name. opw-5265906 Forward-Port-Of: odoo/odoo#236948
This update fixes an issue where customers weren't correctly returned to the splitting order screen after making a payment when automatic receipt printing and skipping the preview screen were enabled. Now, the system seamlessly redirects to the splitting workflow, ensuring a smoother and more intuitive customer experience for multi-item orders. This enhancement improves order management and reduces potential customer frustration.
Original PR description
Ensure FeedbackScreen uses a unified `goNext()` flow and restore the splitting workflow when `Automatic receipt printing` + `Skip preview screen` are enabled. Paying part of a splitted orders now correctly return to the splitting screen instead of the floor plan by delegating the logic to `pos.continueSplitting()` / `pos.isContinueSplitting()` (shared with ReceiptScreen). task-id: 5405595 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that Point of Sale line merges are only successful when the discount and unit price are identical. Previously, merging was inconsistent, leading to potential errors. This change provides a more reliable and predictable process for updating order lines.
Original PR description
Only allow merging lines if they have the same discount and unit price. Before this commit, you were able to merge lines with different discounts or unit prices only if the source order contained the line with the discount/price change. It was not working the other way which was inconsistent. task-id: 5189949 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug that prevented users from successfully paying invoices when an invoice line lacked a due date. The fix ensures that the system handles invoices with missing due dates correctly, preventing a 'TypeError' and allowing payments to proceed smoothly. This improves the reliability of the invoicing process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241744 Forward-Port-Of: odoo/odoo#241060
This update resolves an issue where unnecessary dialogs appeared during One-click Payment with preset options in the Point of Sale system. The fix prevents the creation of new orders during validation, ensuring a smoother payment process for customers. It also corrects a behavior where the Delivery preset was incorrectly removed.
Original PR description
steps: - Configure a default preset as Delivery or Takeout and enable One-click Payment - Open the POS restaurant. - Open any table and add a product. - Click the One-click payment method. issue: - Unnecessary dialogs appear on the ReceiptScreen (e.g., customer selection or time-slot selection), followed by traceback. reason: - The order is validated on the ProductScreen during One-click Payment and ProductScreen creates new draft order. fix: - After this commit, new order will not be created on the ProductScreen with One-click Payment.. - If validation fails (e.g., an RPC error), it will redirected back to the previous screen. - In case of Delivery preset, on discard do not remove Delivery preset. task-5391389
This update fixes a bug that caused calls to unexpectedly end when a user joined from another browser tab. The change ensures stability and prevents crashes during multi-tab call scenarios, improving the overall meeting experience for users. This resolves an issue identified during testing.
Original PR description
**Steps to reproduce:** - Start a meeting with user A - Share the invitation link with user B - Login with user B and join the call - Open another browser tab/window with the same user B - Join the same call in that tab using the invitation link - The call ends for that user as the RTC session is terminated - **_TAB1_**: join the call again - **_TAB2_**: error **Current behavior before PR:** When the same user joined the same call from another tab or during RTC renegotiation, selfSession could temporarily be undefined. **Desired behavior after PR is merged:** This PR ensures that no crash happens when dealing with the RTC Session in a `multi-tab` scenario. task-[5263097](https://www.odoo.com/odoo/project/1519/tasks/5263097) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241578 Forward-Port-Of: odoo/odoo#240881
This update fixes a security vulnerability where portal users with existing invoices or sales orders could modify their country information. Previously, this was restricted via another route, but not the standard profile edit page. Now, portal users with active orders will be prevented from changing their country details, ensuring data integrity.
Original PR description
Steps to reproduce: 1. Install website_forum, website_sale. 2. Confirm a Sale Order for a portal user. 3. Log in as the portal user, go to My Account -> Edit Information. 4. Country is in readonly. 5. Go to Forum -> Profile -> Edit 6. Edit the country 7. Nothing stops the user from doing so. --- Description of the issue this commit addresses: If there is already an invoice or a sale order for a partner, we restrict the edition of some of its values to system administrators. This is already enforced on the edition of the profile via /my/home route but not via the /profile/user. --- Desired behavior after the commit is merged: When an invoice or a sale order is set for a partner with portal access, he can't edit his country via the /profile/user route anymore. --- task-5331916 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239789 Forward-Port-Of: odoo/odoo#237781
9 changes
Enhancements to existing features
This update adds a helpful link within the Accounting Settings to Odoo's documentation on Deferred Expenses and Revenue management. This provides users with immediate access to detailed information and guidance on using this important accounting feature, improving clarity and reducing support requests.
Original PR description
In the Accounting Settings, add a "?" icon that points at the Odoo documentation on Deferred Expenses and Revenue management. task-5418388
Resolved issues and error corrections
This update corrects a typo in the dashboard name and updates the labels for key scorecards to use average values instead of totals. These changes improve the clarity and accuracy of the restaurant's sales performance data displayed in the spreadsheet dashboard.
Original PR description
Desired behavior after PR is merged:
- Fix typo in first sheet name: 'Dahsboard' -> 'Dashboard'.
- Rename scorecards to reflect average values:
- 'Total revenue per guest' -> 'Avg revenue per guest'.
- 'Total revenue per order' -> 'Avg revenue per order'.
Task: [5447108](https://www.odoo.com/odoo/project/2328/tasks/5447108)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves a persistent error message that appeared after purchasing a gift card within the Point of Sale (POS) system. Previously, a pop-up error remained visible even after the purchase was validated. This change removes the error message, providing a smoother and more reliable user experience for customers buying gift cards.
Original PR description
Description of the issue/feature this PR addresses: on point of sale, when we buy gift card then validet, keep pop up error at js code Current behavior before PR: on point of sale, when we buy gift card then validet, keep pop up error at js code Desired behavior after PR is merged: on point of sale, needed not pop up error --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where read-only accounting users couldn't access the 'Customer Statement' button within customer records. The fix corrects a restriction in user permissions, ensuring all accounting users, regardless of access level, can view customer statements. This improves usability for a wider range of users.
Original PR description
Steps to reproduce: - Have a user with Accounting rights set to 'Read-only' - Login with the user - Open customer record - Button 'Customer Statement' won't be there Analysis: This occurs because we restrict the button visibility to 'Invoicing' users, even if all fields and views are accessible also for 'Read-only' users. opw-5357692
This update fixes a previous issue where documents uploaded through the system couldn't be downloaded. Now, users will see a popover with a download link for documents, streamlining the process. The attachment toolbar is also hidden for a cleaner user experience.
Original PR description
Before this commit: the document uploaded by /image cannot be downloaded on clicking. After this commit: we open a popover for document without the editing buttons. The user may download the document by clicking the link. Also the toolbar is hidden for attachments. task-3648796 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241121 Forward-Port-Of: odoo/odoo#236705
This update fixes a minor issue where the UBL XML invoices were incorrectly including 'Invoice address' in the customer's name. The change ensures that the commercial partner's name is used, aligning with standard Odoo XML generation practices and improving invoice accuracy. This ensures consistent and correct data formatting for UBL invoices.
Original PR description
The dict-to-xml helpers were still using `partner.display_name` which includes the 'Invoice address' suffix. Changed to use `partner.commercial_partner_id.display_name` when partner name is not available, to match the fix in https://github.com/odoo/odoo/pull/232819 for the standard XML generation. task-4614564
This update reverses a recent change that was causing problems with the invoice PDF download feature. The previous behavior, which didn't allow downloading proforma invoices as PDFs, has been confirmed as the correct functionality. This reverts a bug fix that introduced a display issue.
Original PR description
This reverts commit a1251a8adc0c0f6639f653e414784f37326f82a1 The previous behavior as been confirm to be expected The change caused some issue where the PDF option wasn't displayed anymore opw-5111272
This update resolves a dependency issue within the Brazilian e-commerce module (l10n_br_edi_sale_fiscal_reform) that was preventing proper functionality. The change ensures the module correctly relies on its necessary dependencies, improving stability and accuracy of sales reporting in Brazil. This addresses a technical configuration error.
Original PR description
l10n_br_edi_sale_fiscal_reform depends on l10n_br_edi_sale, which depends on both l10n_br_edi and sale, but not explicitly on l10n_br_avatax_sale. runbot-exception-762 [runbot-error-237690](https://runbot.odoo.com/odoo/runbot.build.error/237690)
This update fixes a crash that occurred when switching tabs while a receipt was being generated in the Point of Sale system. The fix ensures the receipt printing process reliably completes, even with user interaction, by correctly managing the timing of component rendering. This improves the overall user experience and prevents lost receipts.
Original PR description
Steps to reproduce: ------------------- 1. Enable "Automatic Receipt Printing" so the receipt is auto printed after paying an order 2. From PoS, make an order, select it to invoice, and click the pay…
Steps to reproduce: ------------------- 1. Enable "Automatic Receipt Printing" so the receipt is auto printed after paying an order 2. From PoS, make an order, select it to invoice, and click the pay button. 3. While loading (normally a few seconds to finish the invoice), switch the tab and stay there for few seconds (the time the invoicing has finsihed). 4. Come back to the initial page, a traceback will appear and the ticket is not printed. Why it happens: --------------- The receipt is printed when the parent of the `OrderReceipt`, i.e. `RenderContainer` is rendered. In this case, we assume that `OrderReceipt` has already had the time to be mounted and thus it's in the DOM, so in this case, `this.ref?.el?.firstElementChild` has the order receipt. However, when switching the tab, and since OWL uses `requestAnimationFrame` as a scheduler, and since the browser will throttle `requestAnimationFrame` when the tab is not active, we will not have access to the order receipt component in its parent's `onRendered`! The fix ------- Instead of seeing the parent renders as a sign that its child has been successfully put in the DOM, we now renders the child component (OrderReceipt) in its own container and thus we can hook into its `onMounted` lifecycle where we know for sure that this component has been successfully mounted and attached to the DOM, and can be accessed through `this.ref?.el?.firstElementChild`. opw-5124585 Forward-Port-Of: odoo/odoo#239008
2 changes
Enhancements to existing features
This update enhances the appointment scheduling experience by reorganizing the availability sharing button and improving the visual clarity of calendar controls. The changes include updated background colors and a more user-friendly layout for selecting availability options, leading to a smoother scheduling process.
Original PR description
Because the "Share availability" button is in the control panel, its contents seemed very squashed. Since we now have a header for the calendar, there was plenty of space to move it there. And with that space, we could improve the buttons. The background colors of the selected availabilities and non-clickable areas in the calendar have been improved. Community PR https://github.com/odoo/odoo/pull/141139 task-3575827
This update enhances the calendar view's appearance and functionality, particularly in the Year view, by streamlining styling and improving visual clarity for events. It resolves issues with event styling and color display, leading to a more polished and user-friendly calendar experience.
Original PR description
This PR fixes issues after the revamp in PR https://github.com/odoo/odoo/pull/138670 The first fix was to move some of the SCSS in the `calendar` module into the `web` module. Because some modules…
This PR fixes issues after the revamp in PR https://github.com/odoo/odoo/pull/138670 The first fix was to move some of the SCSS in the `calendar` module into the `web` module. Because some modules such as `planning` don't require `calendar`, if it isn't installed, `planning` would not have the styling and colors of the events. By moving things around, this makes for a major part of the diff in this PR. Some event styles were also not being applied in the Year view. This is because we moved all the styles for event styling inside the `.fc-event` selector, but the Year view doesn't have this class on its events, instead we changed it to the `o_event` class which is in every view. This PR includes other improvements such as making the events' colors stand out more in Year view, making "mandatory days" more readable, and improving the calendar header's layout. Entreprise PR https://github.com/odoo/enterprise/pull/50251 task-3575827 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr