Daily updates from Odoo
Monday, January 26, 2026
26 changes · 19.0
New functionality added to Odoo
This update introduces new tax report templates specifically for Australian businesses using the Business Activity Statement (BAS). These templates streamline the process of reporting BAS obligations, ensuring compliance with Australian tax regulations. This change supports our Australian customers and improves the accuracy of their financial reporting.
Original PR description
Add new BAS tax return types for Australia Task-5870092 CE v19 PR: https://github.com/odoo/odoo/pull/245368
Enhancements to existing features
This update ensures continued functionality for our Danish Nemhandel integration. We’ve switched to a new lookup method (NAPTR) as the previous CNAME method is no longer supported. This change guarantees seamless data retrieval and avoids potential disruptions.
Original PR description
We need to switch the lookup on the directory to NAPTR, as the CNAME one is discontinued on January. We now go through IAP to do the lookup. It's also ensuring _check_document_type_support has always the same format as the super() coming from Peppol. task-4486039 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#240203
This update enhances Intervat integration by automatically refreshing refresh tokens every two days, ensuring continuous connection. It also addresses a key issue for accounting firms, allowing them to correctly submit VAT returns using their VAT number instead of the client's company number. A new setting has been added to manually close the connection if needed.
Original PR description
### 1) Refresh Token & Cron Intervat API's provide use both access & refresh tokens. As long as we keep a valid refresh token, we can keep the connection opened by requesting a new refresh token.…
### 1) Refresh Token & Cron Intervat API's provide use both access & refresh tokens. As long as we keep a valid refresh token, we can keep the connection opened by requesting a new refresh token. Currently, we force the connection to close after 4 hours, but it's too short. This commit goes to the opposite way, and keep the connection opened as long as the user wants. As we need to keep a valid refresh token, we add a cron who execute once each 2 days to fetch new refresh tokens. Also, to prevent being stuck, add a new button in res settings to manually close the connection. ### 2) Accounting firm When submitting vat return to Intervat API, we have 2 situations: 1. The user submit his own declaration 2. An accounting firm submit the declaration for the client The current implementation works nicely with situation 1, but not 2. The problem is when starting the authentication proccess, we give Intervat a company number, the current company number. But when an accounting firm is set on the company, we should use the VAT number of the firm instead of the current company, as it will be an accountant from the accounting firm who will submit the return. So this commit try to find the accounting firm VAT before the current company VAT for the authentication proccess. Also, add a new settings in Intervat settings to change the accounting firm from there. ### 3) Small fixes Small fixes done for corner cases, see commits messages. task-5420287,5500052,5495079
This update enhances the Point of Sale interface by providing clear visibility into LNA permission status. A new button in the navigation bar displays the current status and opens a popup with detailed information, allowing users to quickly understand access rights. This improves transparency and streamlines operations related to LNA permissions.
Original PR description
Before this commit it was not possible to know if LNA permission was granted, denied or not yet granted from the POS interface. This commit adds a button in the navbar to show the current LNA status and open a popup with more information. taskId: 5874947
Resolved issues and error corrections
This update resolves a visual bug where Marketing blocks with overlapping column sizes would cause layout issues. The fix ensures that tables render correctly, regardless of column sizes within a row, preventing unexpected visual overflows. This improves the overall presentation and usability of Marketing blocks.
Original PR description
This reverts commit https://github.com/odoo/odoo/commit/0ffb96dedc776552564cec28140340ec38dee9d1. The commit was incomplete and while it prevented the crash, the resulting table did not match the…
This reverts commit https://github.com/odoo/odoo/commit/0ffb96dedc776552564cec28140340ec38dee9d1. The commit was incomplete and while it prevented the crash, the resulting table did not match the expected layout. Original issue: Problem: The grid conversion logic only finalized a row when iterating through the last column in the input list. If a row reached exactly 12 grid spans while more columns remained (e.g., a `col-12` in the middle), the logic did not start a new row. As a result, remaining columns overflowed the current row visually. Cause: In a single row, if a column had a size 12 and was followed by another column of any size, it would crash because the algorithm did not reset the index to the start of the next row. Steps to reproduce: - Add a Marketing block. - Reduce the size of the left card from the left side.<img width="719" height="580" alt="image" src="https://github.com/user-attachments/assets/1e62eaf7-6ab1-4120-b643-62427ce3ec3a" /> - Save. - Traceback. Solution: This more thorough fix properly handles all problematic aspects: - filter conflicting `col-x` instructions on a single element to keep only one size - ensure that a gridIndex of 12 does not cause a crash in the algo - properly add all effective `td` in a row in all circumstances (there where cases where the final row could be omitted) opw-5439481 Co-authored-by: Damien Abeloos <abd@odoo.com> Co-authored-by: Thomas Josse <thjo@odoo.com> Co-authored-by: Walid Sahli <wasa@odoo.com>
This update fixes an issue where the payment change calculation in the Point of Sale (PoS) system was incorrect, leading to inaccurate negative change values. The fix implements an asymmetric rounding method to ensure changes are calculated correctly, particularly when dealing with cash payments, improving the reliability of financial transactions.
Original PR description
**Steps to reproduce:** - Make a rounding method, put 1.00 as the value and nearest as the method - Make a product without tax, the price should be 16.50 - Go to the PoS, order that product - On the…
**Steps to reproduce:** - Make a rounding method, put 1.00 as the value and nearest as the method - Make a product without tax, the price should be 16.50 - Go to the PoS, order that product - On the payment screen, click Cash, the value is rounded to 17 - Input "20" to change the payment line's value - The change is "-4", which doesn't make sense as the price to pay was 17 **Why the fix:** Before this commit, we used the round function, which is symmetric, meaning that as round(1.23) with a precision of 0.1 and UP method will return 1.3, the same with round(-1.23) will return -1.3, meaning the rounding method will return the same number and just change the sign depending on if the input is positive and negative. This causes inconsitencies, because clicking Cash would set the price to pay to 17, but paying 20 would set the change to -4. With an assymetric rounding we prevent this problem, as it inverts the rounding method if the value is negative. In our case, this means that the change will be rounded DOWN, to -3. opw-5476694
This update fixes a critical issue where payroll sheet computations continued even when errors were detected on payslips. Now, errors will trigger alerts, providing clearer guidance on resolving problems like missing contracts. This ensures accurate payroll processing and prevents incorrect calculations.
Original PR description
Bug: When there is an issue on a payslip with an error level, and we try to compute the sheet, the sheet is computed. Instead of computing, it should raise and the message should specify what errors need to be resolved first. Cause: When computing the sheet, we were calling the self._get_error_message() without using the result, which is a string. Fix: Actually raise a ValidationError and use the result of self._get_error_message() for the error message. Introducing the raise brought other problems because some code supposed to fail was running seamlessly fine. But now, the raise is called and those needed to be solved as well. The issue raised multiple times is the "No contract in the payslip period". Task: 5153497
This update resolves an issue where users couldn't update the quantity of optional products added to their subscriptions through the portal. The fix ensures that the 'is_optional' flag is correctly copied to new order lines during upsells, allowing users to accurately manage their product quantities. This improves the user experience and ensures accurate subscription billing.
Original PR description
Version: - 19.0 Steps to Reproduce: - Enable the Add Products option in the recurring plan. - Create a subscription with the same plan and add optional products. - Confirm the subscription and create invoice for current period. - From the portal, click on Add Quantity to create an upsell order. Before: - Users were not able to update the quantity of products added as optional products from portal. - This happened because the `is_optional` field value was not copied to the new order line created during the upsell. After: - The `is_optional` field value is now copied to the new order line created for upsell and renewal orders. - This allows users to update the quantity of optional products correctly. Impact: - Users can update the quantity of optional products from the portal without issues. task-5427585
This update fixes an issue where the FedEx rate calculation was failing when the requested currency didn't match the account's currency. The fix ensures the rate request always uses 'PREFERRED' to match FedEx API requirements, preventing errors and ensuring accurate shipping cost calculations.
Original PR description
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the…
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the one set up on the Fedex account, because the 'actualRateType' gets set to payor instead of preferred for the rate's 'rateType', which means `d['rateType'] == rating_result['actualRateType']` is false, so `actual` is empty, leading to an error when doing `actual['totalNetCharge']`. Solution ----- In the request we send, we hardcode `'rateRequestType': ['PREFERRED']` so we can look for a match using 'PREFERRED' as a prefix of `rateType`. The Fedex API lists all possible values of the enum `rateType` https://developer.fedex.com/api/en-us/catalog/ship/v1/docs.html <details> <summary>Enum values as per the API</summary> "enum": [ "INCENTIVE", "NEGOTIATED", "PAYOR_ACCOUNT_PACKAGE", "PAYOR_ACCOUNT_SHIPMENT", "PAYOR_CUSTOM_PACKAGE", "PAYOR_CUSTOM_SHIPMENT", "PAYOR_LIST_PACKAGE", "PAYOR_LIST_SHIPMENT", "PAYOR_RETAIL_PACKAGE", "PAYOR_RETAIL_SHIPMENT", "PREFERRED_ACCOUNT_PACKAGE", "PREFERRED_ACCOUNT_SHIPMENT", "PREFERRED_CUSTOM_PACKAGE", "PREFERRED_CUSTOM_SHIPMENT", "PREFERRED_INCENTIVE", "PREFERRED_LIST_PACKAGE", "PREFERRED_LIST_SHIPMENT", "PREFERRED_NEGOTIATED", "PREFERRED_RETAIL_PACKAGE", "PREFERRED_RETAIL_SHIPMENT", "RATED_ACCOUNT_PACKAGE", "RATED_ACCOUNT_SHIPMENT", "RATED_CUSTOM_PACKAGE", "RATED_CUSTOM_SHIPMENT", "RATED_LIST_PACKAGE", "RATED_LIST_SHIPMENT", "RATED_RETAIL_PACKAGE", "RATED_RETAIL_SHIPMENT", "UNKNOWN" ], </details> There are only 3 possible prefixes: `PAYOR`, `PREFERRED` & `RATED`, so replacing the other 2 by `PREFERRED` should be safe. ----- Ticket: opw-5482949 Forward-Port-Of: odoo/enterprise#105156
This update resolves a RecursionError that occurred when producing large quantities of products tracked with serial numbers. The issue stemmed from a process that repeatedly updated deadlines across multiple manufacturing steps, leading to excessive recursion. This fix ensures stable production for high-volume orders.
Original PR description
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture…
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture routes are enabled). - Create a BoM for product A containing product B. - Create a BoM for product B containing product C. - Create a BoM for product C containing another product. - Create a manufacturing order of 100 units for product A and confirm it. - Produce the 100 units on the child MO of product C (100 backorders are created). - On the main MO (product A), click on "Prepare MO". - Attempt to produce product B. → RecursionError: maximum recursion depth exceeded. **Cause** While setting `move_finished_ids`: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/mrp/models/mrp_production.py#L806 the `deadline_date` of the final move is updated: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/stock/models/stock_move.py#L742C1-L743C63 This deadline is then propagated to chained moves: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/stock/models/stock_move.py#L539C1-L541C55 via: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/stock/models/stock_move.py#L559C1-L562C61 This propagation retriggers the `move_finished_ids` setter recursively on other moves. The recursion depth grows with the number of generated moves, eventually exceeding Python's maximum recursion limit. opw-[5265424](https://www.odoo.com/web#id=5265424&view_type=form&model=project.task) Forward-Port-Of: odoo/odoo#239648
This update corrects a calculation error in the Austrian tax report that resulted in incorrect VAT payable or credit figures. The fix adjusts the formula to properly add deductible input tax, ensuring accurate reporting for Austrian businesses. This improves the reliability of tax reporting and compliance.
Original PR description
The Austrian tax report computes line 7 by subtracting the deductible input tax instead of adding it, leading to an overstated VAT payable or understated credit. ### **Steps to reproduce:** - Install…
The Austrian tax report computes line 7 by subtracting the deductible input tax instead of adding it, leading to an overstated VAT payable or understated credit. ### **Steps to reproduce:** - Install `Accounting` app with `l10n_at` localization and switch to AT Company. - Create a customer invoice for some product with price 1000 and 20% Tax. - Create a vendor bill for some product with price 100 and 20% Tax. - Open the Austrian tax report for the corresponding period. ### **Observed behavior:** section-7 shows `-220` instead of the correct amount `-180`. because value of, section-4 = -200 section-5 = 20 section-6 = 0 Current calculation for **section-7 = section-4 - section-5 + section-6** which is equal to `-220` ### **Expected behavior:** 1) Section-4(VAT Computation (U1/U30))- negative value is correct as this is the amount of sales tax which needs to pay to the tax office. 2) Section-5(Deductible input tax computation) and section-6(Other corrections) - are positive values and are added to section-4 as this is the input tax which is get back from the tax office. hence the correct calculation for **section-7 will be section(4+5+6).** ### **Root cause** Since [commit](https://github.com/odoo/odoo/pull/224604/commits/06666fc55a7a3f569a0d15f0827ed8e2199cf51c), introduced a formula that subtracts the deductible input tax(section-5) in section-7, causing the miscalculation. ### **Fix** Update the section-7 aggregation formula to add deductible input tax instead of subtracting it. **opw-5476604**
This update fixes an issue where zero-percent NT/NA/EXEMPT taxes were incorrectly filtered out during downpayment creation. This prevented accurate tax calculations in certain scenarios, particularly impacting reporting. The change ensures these taxes are properly included, resolving a potential reporting discrepancy.
Original PR description
Taxes 0% NT and 0% EXEMPT should not be fixed taxes. This is causing issue in some cases such as downpayments, where those taxes needs to be present, but fixed taxes are filtered at the creation of the downpayment. opw-5815953 Forward-Port-Of: odoo/odoo#245570 Forward-Port-Of: odoo/odoo#245252
This update provides more specific error messages when the message list fails to load. Previously, users only saw a generic 'Ann error occurred' message. Now, the commit displays the underlying error details, giving support teams a clearer understanding of the cause and allowing for faster troubleshooting.
Original PR description
Backport of https://github.com/odoo/odoo/pull/244094 Before this commit, when message list failed to load, it just displays a "Ann error occurred" generic message with a retry button. This assumes that error happens rarely and when so this is temporarily. However some errors are persistent and it's frustrating to have no clue on why there's error or what may have caused it. This commit shows the `Error.toString()` from fetch message RPC failure on UI, so that there's a clue on the reason the fetch of messages failed. Before / After <img width="305" height="67" alt="Screenshot 2026-01-20 at 15 10 38" src="https://github.com/user-attachments/assets/34c546df-71e6-4055-9f85-8d85a9c89b35" /> <img width="334" height="100" alt="Screenshot 2026-01-20 at 15 09 07" src="https://github.com/user-attachments/assets/5fadd0b7-7ea0-43ca-8c28-0ac1d33650ff" /> Forward-Port-Of: odoo/odoo#245150 Forward-Port-Of: odoo/odoo#244754
This update resolves a crash that occurred when confirming purchase orders linked to multiple sales orders (RFQs). The fix ensures that each purchase order is associated with only one sales order, preventing data conflicts. This improves the reliability of the dropshipping process.
Original PR description
An error occurs when confirming a purchase order linked to multiple sales orders. Steps to reproduce: 1) Install sale_stock & sale_management and enable dropshipping. 2) Create a vendor with…
An error occurs when confirming a purchase order linked to multiple sales orders. Steps to reproduce: 1) Install sale_stock & sale_management and enable dropshipping. 2) Create a vendor with group_rfq 'always'. 3) Create a product with dropship route and add that vendor. 4) Create a Quotation with that product, confirm it, duplicate and confirm. 5) From the magic button go to Purchase Orders and confirm the PO. Reference video for steps : https://drive.google.com/file/d/1xglkuZAWNxcz0WSj_49Hemjkxx4KjSqv/view?usp=sharing Error: `ValueError: Wrong value for stock.picking.sale_id: sale.order(26, 27)` Root Cause: The computed field `sale_id` receives multiple `sale.order` records from `move_ids.sale_line_id.order_id` (see [1]). Since `sale_id` is a Many2one field, it can only accept one record or False. Assigning multiple records causes the error. Fix: * Create only one sale order per purchase order for drop-shipping picking types. For existing databases, set the value to the first available sale_id, or False if none exists. [1]- https://github.com/odoo/odoo/blob/38cffd1d1580693c56f0d897b8c8e60b938a8e85/addons/sale_stock/models/stock.py#L175-L179 opw-5344535
This update resolves a bug where enabling automatic cropping for product images in the website's shop editor wasn't functioning correctly. The issue stemmed from a technical setting that was overriding the intended image behavior. This change ensures that product images are cropped automatically as expected, improving the visual presentation of products on the website.
Original PR description
Steps to reproduce: =================== 1- Go to website > shop & open edit mode 2- Select any product and click on "paint-brush" icon 3- Click on "Image ratio" option and enable "Auto crop" -> nothing happens to the images. Cause: ====== After this commit [1] `object-fit-contain` was used even for auto crop which will override the `o_wsale_products_opt_thumb_cover` class object-fit value. Solution: ========= Apply basic fit contain only when autocrop is disabled. [1]: https://github.com/odoo/odoo/pull/238108/commits/002a8a1ff65fd48fd69e41c9a881fddceee34bf5 opw-5868057 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update optimizes the planning timesheet report to significantly reduce query times, particularly on large datasets. By changing a database query structure, the system now uses a more efficient method to find matching data, preventing long delays and improving report generation speed. This change enhances the overall user experience.
Original PR description
Move calendar_id condition to JOIN clause to enable semi-join optimization The WHERE clause with outer reference `A.calendar_id = R.calendar_id` causes the optimizer to perform a full join before filtering, which can hang on large tables. Moving the condition to JOIN ON clause allows the optimizer to recognize it as an existence check and use a semi-join (EXISTS subplan), which stops after finding the first match instead of building the complete result set. Benchmark: | Request | Rows | Before | After | |-----------------------------|--------|-----------------------------------------------|-------| |formatted_read_grouping_sets | 105118 | Timeout / Query active in pg for 50 - 2xx min | 5.96s | (https://explain.depesz.com/s/OnyZ#html) Reference: opw-5490597
This update resolves an issue where customers exceeding their sales credit limits weren't being properly flagged in the Point of Sale (POS) system. The fix ensures that warnings are displayed when a customer's purchase total surpasses their defined credit limit, preventing potential overspending and improving financial control. This enhancement impacts the customer experience and financial accuracy.
Original PR description
Steps to reproduce: ------------------- 1. Install pos_settle_due and accountant 2. In Accounting settings, enable "Sales Credit Limit" 3. Create a new customer, enable its "Partner Limit" and set it…
Steps to reproduce: ------------------- 1. Install pos_settle_due and accountant 2. In Accounting settings, enable "Sales Credit Limit" 3. Create a new customer, enable its "Partner Limit" and set it to 100 4. Open PoS, select that partner, and select products such that the total exceeds 100 Notice that even though we have exceeded that partner's limit of 100, there are no indicators on the customer button (orange background on hover), nor there are warnings on the partners list modal nor on the payment page. Why the bug ----------- In `getPartnerCredit`, we are using `order.amount_total` to get the current ordre amount, however, this field is `undefined` for a new order and it's been assigned a value in `setOrderPrices`, which since [9538698](https://github.com/odoo/odoo/commit/9538698), is only called before sending the order to the backend. The fix ------- Now we read the total amount from the getter `order.priceIncl`, and round it as we would do in `setOrderPrices`. opw-5489975
This update resolves an issue preventing refunds for NFC-e transactions in the Point of Sale (PoS) system. Previously, a technical error caused a 'not found' message when attempting to process refunds. The fix ensures that the system correctly identifies and processes NFC-e refund requests, improving PoS functionality.
Original PR description
**Steps to reproduce:**
- Setup a database that supports NFC-e
- Go to PoS, make a purchase, then refund it
- A traceback appears, saying we couldn't find the original invoice
**Why the fix:**
Before this commit the way we checked if there was already an invoice in the payload we give to the API was wrong, as it was always true. This happens because before the
*def _get_l10n_br_avatax_service_params(self):* call, we set res['invoice_refs'] as {}, then we were supposed to fill it. But if we check https://github.com/odoo/enterprise/blob/32b73b12f9f8f5600b820d9a938bfbb0cf10054d/l10n_br_edi_pos/models/account_move.py#L13 'invoice_refs' is found in res, even though it is empty, so we never entered the if statement.
We now check if there is a value in res['invoice_refs'] and if not we set it.
opw-5359407
Forward-Port-Of: odoo/enterprise#102770This update fixes a visual glitch in the image gallery where slides would appear blank briefly, particularly on Firefox. It improves performance by preloading carousel images and updating the GallerySlider interaction to handle more images, preventing indicator crowding.
Original PR description
## [FIX] website: add versioning for GallerySlider interaction The GallerySlider interaction (and its edit mode counterpart) is not up to date: the logic is still written for old snippets (before…
## [FIX] website: add versioning for GallerySlider interaction
The GallerySlider interaction (and its edit mode counterpart) is not up
to date: the logic is still written for old snippets (before [9042b1c],
so before 18.0).
In the meantime, the pagination for the indicators was lost, meaning
that if you add too many images, the indicators will have less and less
space.
Steps to reproduce:
- Drop an Image Gallery snippet
- Set the indicators to squared or rounded miniatures
- Add 15 or more images
=> All the indicators are crammed into the same line.
With this commit, we deprecate the old `GallerySlider` interaction and
create a `GallerySlider001` for the snippets dropped since 18.0.
For the indicators, instead of a pagination, we now use a horizontal
scrolling container which centers on the active indicator.
[9042b1c]: https://github.com/odoo/odoo/commit/9042b1c
## [FIX] website: preload available carousel images
As images are lazy loaded, it means that in the context of a carousel or
an image gallery, they only start loading once the user clicks either on
its indicator or on the previous / next button (or after completing an
auto-slide). While Chrome seems to optimize that to make it seemless, on
Firefox this causes the carousel slide to appear blank for a moment
before the image suddenly pops up, as the sliding animation arrives to
its end.
In effect, this causes a flicker and a feeling that the carousels, and
especially the gallery, is extremely laggy.
To mitigate that while trying to keep the advantages of image lazy
loading, this commit partially backports [08d837e], which loads the
images of the next and the previous carousel items.
Additionally, we prefetch the target images on pointerdown / keydown on
an indicator. That may seem like too small of a difference to be
interesting, but it actually gives a little bit of time between the
pointerdown and pointerup (which triggers the slide event) to start
loading the images, which with a correct connexion already goes a long
way towards mitigating the laggy feeling.
[08d837e]: https://github.com/odoo/odoo/commit/08d837e70f28a84a9bd97974f5d15d387a42b7c0
task-5245513
Forward-Port-Of: odoo/odoo#244823
Forward-Port-Of: odoo/odoo#232147This update resolves an issue where smart buttons on the voip call form were missing access groups and causing a singleton error. The fix ensures these buttons work as expected, providing users with the correct application options. It also corrects inaccurate numbers displayed on the buttons.
Original PR description
1. Tickek/Application smart buttons on voip.call form miss access groups. 2. In voip.call form, when clicking the application smart button, a singleton error will raise. 3. Incorrect numbers on smart button. Task-[5461729](https://www.odoo.com/odoo/5778/tasks/5461729)
This update ensures that LNA (a security feature) is consistently enabled for IoT devices across both the POS and Kiosk systems. Previously, LNA was only active in the POS when enabled, creating a potential security gap in the Kiosk. This change enhances security and ensures consistent functionality.
Original PR description
Before this commit, LNA was being used for IoT devices in the POS but not in the Kiosk when `point_of_sale.use_lna` was enabled. After this commit, LNA will also be enabled for IoT devices in the Kiosk. task-5874663 Forward-Port-Of: odoo/enterprise#105460
This update resolves an issue where Mexican CFDI invoices generated with Solution Factible PACs were being rejected due to incorrect exchange rate precision. The fix ensures that exchange rates are rounded to the required 6 decimal places, aligning with the requirements of payment processors like Solucion Factible. This prevents invoice errors and ensures compliance.
Original PR description
The PACs Quadrum and SwSapien both require the exchange rate to have 6 decimal places. This can cause some valid invoices to be rejected for large enough payment values. Pull request…
The PACs Quadrum and SwSapien both require the exchange rate to have 6 decimal places. This can cause some valid invoices to be rejected for large enough payment values. Pull request [83499](https://github.com/odoo/enterprise/pull/83499) added rounding precision for these PACs. Now, the remaining PAC (Solution Factible) appears to the same requirement. This commit ensures that the previous bug fix is applied to all PACs. [opw-5165200](https://www.odoo.com/odoo/project.task/5165200) ## Steps to reproduce: [Setup](https://drive.google.com/file/d/1BUkNG-Ezk-I47yvbNolOmlj0ne1iqDto/view?usp=sharing) 1. Navigate to Apps and install l10n_mx_edi. 2. Switch to any of the Mexican companies that appear. 3. Navigate to Accounting > Configuration > Currencies. 4. Click into the USD currency. 5. Change the current rate to be 20.101796407186 MXN per USD. (inverse_company_rate field). 6. Navigate to Accounting > Configuration > Settings, and set the PAC to Solution Factible. [Workflow](https://drive.google.com/file/d/11TFZ78QGDYdnD9R3CoJDAuFI-1_0dNyG/view?usp=sharing) 1. Navigate to Accounting > Customers > Invoices. 2. Select New to create a new invoice. 3. Add a mexican customer (such as XENON INDUSTRIAL ARTICLES). 4. Add the 45 day Payment terms. This should change the payment policy to PPD. 5. Change the currency to USD. 6. Add the product FURN_8220 (or any with the unspsc_code_id set). 7. Set the unit price of the product to 58968.29. 8. Confirm the invoice. 9. Select Send & Print, then ensure that the CFDI option is selected before clicking Send & Print again. 10. Select Register Payment, then Confirm Payment. 11. Select the Update Payments smart button. 12. Navigate to the CFDI tab; there will be a "Payment Send in Error" line. Forward-Port-Of: odoo/enterprise#105102 Forward-Port-Of: odoo/enterprise#102557
This update corrects a bug in how reordering rules utilize warehouse routes. Previously, leaving the 'warehouse_ids' field blank resulted in incorrect route assignments. This fix ensures that reordering rules correctly apply the 'Buy' route when using the default 'All Warehouses' placeholder, streamlining inventory management.
Original PR description
Update warehouse_ids placeholder ("All Warehouses") to a new placeholder that reflect its behavior.
### Steps to reproduce:
* Enable multi-Step Routes
* Inventory > Routes > Buy > Warehouses
* Select the checkbox but leave the field empty (placeholder says "All Warehouses")
### Steps to verify behavior:
* Leaving the warehouse_ids fields empty ("All Warehouses")
* Create a product tracked by quantity and add a vendor
* Create a Reordering Rule
-> It doesn't put the "Buy" route by default as it should
opw-5264571This update resolves an issue preventing manufacturing administrators from completing work orders. The fix adds necessary permissions to ensure the workflow functions correctly, allowing users with manufacturing access to successfully produce materials. This improves efficiency and eliminates a roadblock in the production process.
Original PR description
Steps to reproduce:
Create a user with admin access rights for Manufacturing and Quality only. Then, create a work center that has a cost per hour.
Create a product that has a BoM and create a MO then confirm it.
Add a work order that takes place in the created work center and has duration of 60 mins.
Using the created user, try to "Produce All".
Issue:
The user gets an access error when trying to "Produce All", eventhough they have manufacturing access rights.
Fix:
Add sudo access where the process fails to ensure that the workflow is as expected.
Note: a test will be added in anoher PR
opw-5480608This update fixes an issue where the inventory reason provided during barcode inventory counts wasn't being recorded. Now, when completing an inventory count via the Barcode app, the specified reason will be properly logged in the Moves History, ensuring accurate tracking of inventory adjustments. This improves the reliability of inventory reporting.
Original PR description
## Issue
When completing an *Inventory Count* from the Barcode app, the *Inventory Reason* requested to the user is not registered anywhere.
## Steps to reproduce
1. Install the *Barcode* app (`stock_barcode`)
2. In the *Barcode* app, click *Count Inventory*
3. Add a product and set a quantity for it
4. Click *Confirm* (do not scan to confirm)
5. Write an *Inventory Reason* and click *Apply Now*
6. Go to Inventory > Reporting > Moves History
- **The _Inventory Reason_ given in step 5 does not appear anywhere**
If the inventory adjustment is done through Inventory > Operations > Physical Inventory, the user can also provide an *Inventory Reason*, but this time, it will appear in the *Moves History* in the *Reference* (`stock.move.line.reference`) column.
## Cause
Since https://github.com/odoo/enterprise/commit/3efea75a88120519ef4be1a41c8faa7278bc332c, the value provided by the user is never passed to the Python side.
opw-5423934This pull request corrects a critical issue where newly added modules to the Odoo Enterprise stable version were not included in the translation files (.weblate.json). This meant that the Greek language (el) was not supported for translation, preventing users from accessing the software in Greek. The update adds the necessary module definitions to the .weblate.json file, ensuring proper translation support.
Original PR description
Modules added into stable without being properly added to .weblate.json file = never translatable. Forward-Port-Of: odoo/enterprise#105355 Forward-Port-Of: odoo/enterprise#104890