Friday, April 10, 2026
23 changes · 19.0
Resolved issues and error corrections
This fix stops users from deleting a lot or serial number on completed manufacturing orders for products whose inventory value is tracked by lot. It prevents orders from getting stuck in a state where the lot cannot be corrected and related inventory actions, such as unbuilds, cannot proceed.
Original PR description
When we erase a sn/lot on a MO for a product that is tracked by lot, we will be deadlocked. ### Steps to reproduce: * Create a product tracked by lot and lot_valuated * Create a BoM for this product…
When we erase a sn/lot on a MO for a product that is tracked by lot, we will be deadlocked. ### Steps to reproduce: * Create a product tracked by lot and lot_valuated * Create a BoM for this product * Create a MO for this product * Confirm and Produce all * erase the lot and save -> the MO is deadlock, it's not possible to modify the lot number, nor it's possible to unbuild. ### Current behavior: A user is able to erase a lot/SN from a MO of a lot_valuated product. ### Expected behavior: It should not be possible to erase a lot/SN form a MO of a lot_valuated product. ### Observation: When the MO is done, its valuation will be calculated which in our case, it means, we have to have a lot number. When trying to add a lot/SN of a MO where it has been erased, we will remove the quantities from the previous lot, but in our case, since we don't have one, it will trigger the user error. https://github.com/odoo/odoo/commit/33e192de30526ea7fe320bcaa7a16dac8108feff This error is not triggered when removing the SN/lot because when we remove the value, it will be update to False which means it will skip _update_svl_quantity(): https://github.com/odoo/odoo/blob/109f829c2b461b14167e9227e42d096d4410a3b3/addons/stock_account/models/stock_move_line.py#L35-L36 https://github.com/odoo/odoo/blob/109f829c2b461b14167e9227e42d096d4410a3b3/addons/stock_account/models/stock_move_line.py#L62-L65 This use case is also protected when creating a product tracked by lot but not lot_valuated: https://github.com/odoo/odoo/commit/4963103e5587d36364b8df84d0b3407a1977efdf opw-6039885 Forward-Port-Of: odoo/odoo#257949 Forward-Port-Of: odoo/odoo#255098
Peppol invoice imports no longer fail completely when an empty attachment is received. The system now creates the invoice using safe default values and logs the issue, helping businesses keep processing documents while preserving visibility into the problem.
Original PR description
Empty attachments could crash parsing during import, this commit falls back on default journal and move type in case of error, allowing the invoice to be created and the issue logged properly. Root cause of empty XML remains unclear, likely a 3rd party error. opw-6060739 opw-6018364 Forward-Port-Of: odoo/odoo#258205 Forward-Port-Of: odoo/odoo#256011
Expenses paid by SEPA Credit Transfer now require vendor information before submission. This prevents payments and expenses from getting stuck in a paid state that cannot be reset due to missing required vendor details.
Original PR description
**Context:** For payment methods of type SEPA Credit Transfer, the vendor field is required in a vendor payment but not in the expense form. Since a vendor payment is created from the expense form,…
**Context:** For payment methods of type SEPA Credit Transfer, the vendor field is required in a vendor payment but not in the expense form. Since a vendor payment is created from the expense form, if the vendor information is not provided in the expense form for a SEPA payment method, the vendor payment and the expense will not be able to be resetted to draft. As it's being locked into a state of paid. **Before this commit:** The user can create an expense with a SEPA Credit Transfer payment method without filling the vendor field. When the user tries to reset to draft the expense or the vendor payment, the missing required fields message will block them from doing it. Since the state is in draft, the user cannot fill the vendor field and reset it to draft. **After this commit:** The vendor field is required in the expense form when the payment method is of type SEPA Credit Transfer. This directly prevents the issue from happening. opw-6073594 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The scheduled Peppol message status update now uses the correct error-message handling when sent invoices return an error state. This prevents the automated job from crashing, helping businesses keep invoice status tracking reliable without manual intervention.
Original PR description
Currently, an error occurs when the Peppol: update message status scheduled action is executed. **Error:** `AttributeError: 'account_edi_proxy_client.user' object has no attribute…
Currently, an error occurs when the Peppol: update message status scheduled action is executed. **Error:** `AttributeError: 'account_edi_proxy_client.user' object has no attribute 'get_peppol_error_message'.` **Cause:** When the scheduled action runs, it attempts to update message statuses and retrieve the processing state of previously sent invoices using their message UUIDs [1]. If a message is in an error state, the system tries to convert the error dictionary into a readable, translated message based on the error code and details [2]. And, this raises an error because account_edi_proxy_client.user does not have the method get_peppol_error_message when retrieving the error message [3], as it is defined in an exception file. This commit ensures the correct usage of get_peppol_error_message, as it is already imported, instead of calling it on account_edi_proxy_client.user. [1]: https://github.com/odoo/odoo/blob/f7c309cdac754ead9e00b3443a2fe764efec819c/addons/account_peppol/models/account_edi_proxy_user.py#L351 [2]: https://github.com/odoo/odoo/blob/f7c309cdac754ead9e00b3443a2fe764efec819c/addons/account_peppol/models/account_edi_proxy_user.py#L379 [3]: https://github.com/odoo/odoo/blob/f7c309cdac754ead9e00b3443a2fe764efec819c/addons/account_peppol/models/account_edi_proxy_user.py#L384 sentry-7395549907 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Quotations created from contact opportunities now ignore archived warehouses when choosing the delivery warehouse. This prevents old or inactive warehouse records from being accidentally used in sales documents, improving accuracy for sales and delivery teams.
Original PR description
Currently, when a user creates a quotation from the Opportunities available in Contacts, archived warehouses are also considered for the quotation. ## Steps to replicate: - Install Sales, CRM, and…
Currently, when a user creates a quotation from the Opportunities available in Contacts, archived warehouses are also considered for the quotation.
## Steps to replicate:
- Install Sales, CRM, and Inventory.
- Create a new Warehouse and move it to the first position in the warehouse list view (highest priority).
- Archive the newly created warehouse.
- Navigate to Contacts > Acme Corporation > Opportunities >Office Design Project
- New Quotation > Other Info > Delivery and check the Warehouse field.
## Observed behavior
The archived warehouse is still assigned to the Warehouse field in the Delivery section. This issue does not occur when the user creates a quotation directly from the CRM app, it only happens when the quotation is created through the Contacts apps.
## Root cause:
This unintentional behavior was introduced after commit [1]. When a user opens 'Opportunities' from the contacts view, the function `action_view_opportunity` [2] is triggered, which sets `active_test` to False in the context.
Later, when a new quotation is created, the compute method [3] is executed. This method calls `_get_default_warehouse_id` [4], which performs a search. Because `active_test` is already set to False in the context, the search also includes archived warehouses, causing them to be fetched unintentionally.
[2]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/crm/models/res_partner.py#L39-L53 [3]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/sale_stock/models/sale_order.py#L194-L204
[4]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/stock/models/res_users.py#L9-L12
## Solution:
Explicitly set `active_test=True` in the context when preparing the quotation for an opportunity. This ensures that archived warehouses are excluded from the search and prevents them from being selected.
**Alternate Solution:**
We could also make `active_test` to true when searching for warehouse directly as well.
```py
def _get_default_warehouse_id(self):
# !!! Any change to the following search domain should probably
# be also applied in sale_stock/models/sale_order.py/_init_column.
return self.env['stock.warehouse'].with_context(active_test=True).search([('company_id', '=', self.env.company.id)], limit=1)
```
[1]:
https://github.com/odoo/odoo/commit/59feed9f26937ae8e2cab5cd7d2b6743ab6c0717
opw-5999034
Forward-Port-Of: odoo/odoo#252166Event sales totals now use the correct currency conversion when tickets are sold in a currency different from the company currency. This prevents inflated or understated revenue figures on the event sales button, giving teams more reliable sales reporting.
Original PR description
Steps to reproduce: 1. Create a currency with a non-1 exchange rate with the company's currency (e.g. VEF with a rate of 0.000005 against USD). 2. Create a pricelist in that currency. 3. Create an…
Steps to reproduce: 1. Create a currency with a non-1 exchange rate with the company's currency (e.g. VEF with a rate of 0.000005 against USD). 2. Create a pricelist in that currency. 3. Create an event. 4. Create a sale order with the new pricelist. 5. Add a sale order line with a ticket of the event and confirm the order. 6. Go to the event's page and check the total sales smart button. 7. Check the total sales of the event: it should be equal to the sale order's total price converted to the company's currency, but it is not, because of the wrong conversion (it used the inverse of the correct exchange rate, which is 200000 instead of 0.000005 in our example). Problem: The total sales smart button in an event's page shows wrong totals when sales are in a currency other than the company's currency. Cause: The code converts the sale price from the event's currency (which is the same as the company's currency) to each sale order's currency, while it should be the other way around (from each sale order's currency to the event's currency). https://github.com/odoo/odoo/blob/3cd709172e997f5a726cf3ae85ffcb9965619fcb/addons/event_sale/models/event_event.py#L38 opw-5494790 Forward-Port-Of: odoo/odoo#258000 Forward-Port-Of: odoo/odoo#253605
Sales orders for kit products now show the correct delivered quantity when some components are shipped from stock and others are dropshipped. This prevents orders from appearing undelivered or fully delivered incorrectly, improving billing accuracy and customer order tracking.
Original PR description
### Steps to reproduce: - In the settings Dropshipping - Put you warehouse in 2 steps delivery - Create a kit product with 2 components: COMP1, COMP2 - Set a vendor on COMP2 and the dropship route -…
### Steps to reproduce: - In the settings Dropshipping - Put you warehouse in 2 steps delivery - Create a kit product with 2 components: COMP1, COMP2 - Set a vendor on COMP2 and the dropship route - Create and confirm an SO for 1 unit of your kit - Validate the ship and pick for COMP1 - Confirm the PO for COMP2 and validate the associated dropship #### > The qty_delivered on the sol is still at 0 ### Cause of the issue: The `delivered_qty` is computed via the `_prepare_qty_delivered`: https://github.com/odoo/odoo/blob/9b9ff3ddcba6f0c9d37d08fb4fb900bed3b396a4/addons/sale/models/sale_order_line.py#L887-L902 However, since at least on of the component is dropshipped, the qty_delivered is computed by this condition: https://github.com/odoo/odoo/blob/9b9ff3ddcba6f0c9d37d08fb4fb900bed3b396a4/addons/sale_mrp/models/sale_order_line.py#L54-L63 Which is 0 since the pick `location_dest_id.usage` is not `customer`. ### Additional issue: The delivered quantity of a Kit with at least one dropshipped component can only be 0 or the full demand. - In the settings enable Dropshipping - Create a kit product with 2 components: COMP1, COMP2 - Set a vendor on COMP2 and the dropship route - Create and confirm an SO for 3 unit of your kit - Validate the delivery for COMP1 for 2 units and backorder - Confirm the PO for COMP2 and validate the associated dropship for 1 unit and do not backorder #### > The qty_delivered on the sol is 0 instead of 1 - Cancel the backorder for COMP1 ### > The qty_delivered on the sol is 3 instead of 1 ### Cause of the issue: This is caused by the exact same dropship computation: https://github.com/odoo/odoo/blob/9b9ff3ddcba6f0c9d37d08fb4fb900bed3b396a4/addons/sale_mrp/models/sale_order_line.py#L63-L66 ### Note: The behavior should be consistent if the components are fully dropshipped or MTO buy and as such they should not be considered to be in all or nothing shipping policy. opw-6040640 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes Luxembourg balance sheet reporting so profit or loss brought forward is calculated correctly after year-end allocation. This helps Luxembourg companies see accurate retained earnings figures in both full and abbreviated balance sheets.
Original PR description
Steps to reproduce: - Use a Luxembourg company - Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412) - Open the Luxembourg balance sheet (full or abbreviated) Issue:…
Steps to reproduce:
- Use a Luxembourg company
- Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412)
- Open the Luxembourg balance sheet (full or abbreviated)
Issue:
Line "V. Profit or loss brought forward" shows incorrect values.
Cause:
The `accounts` expression for that line used `account_codes` engine with formula `-14`,
which only sums accounts by code prefix. Account 1412 ("Results brought forward (assigned)")
was typed as `equity`, so its balance was carried forward as an initial balance instead of
being captured as retained earnings in the formula.
Solution:
- Set account 1412 to `equity_unaffected`, consistent with account 142.
- Change the `accounts` expression of Line V in both the full and abbreviated balance sheet
to use the `domain` engine:
`['|', ('account_id.code', '=like', '14%'), ('account_id.account_type', '=', 'equity_unaffected')]`
with subformula `-sum`.
This correctly captures the balance of all 14x accounts and any `equity_unaffected` accounts,
which covers the standard year-end affectation workflow.
opw-5883505This fix prevents inbox message loading from failing when a user is mentioned on an employee record but lacks HR-specific permissions. It ensures affected users can still see their inbox notifications without encountering an access error.
Original PR description
Since PR #247569, the value of the `message_needaction_counter` field has been added to the store data when fetching inbox messages. The `hr` module adds a specific group to this field, that could cause fetching inbox messages to crash if the needaction message is related to an `hr.employee` record and the user is not involved in that group. This change adds sudo when accessing to this field to get the store data for inbox messages. Steps to reproduce: - Set the notification preference to `inbox` for the demo user. - Log in as admin and mention the demo user in an employee record. - Go to inbox as demo. The messages will not be fetched, with an access error to `message_needaction_counter` field.
This update brings the spreadsheet component to its latest version and fixes several issues affecting formatting, charts, conditional formatting, and Excel exports. Users should see more accurate spreadsheet displays and fewer problems when exporting or working with formulas and chart settings.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4561a9a809 [REL] 19.0.29 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4561a9a809 [REL] 19.0.29 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/cd7707f944 [FIX] format: keep negative accounting suffix in large number [Task: 6068834](https://www.odoo.com/odoo/2328/tasks/6068834) https://github.com/odoo/o-spreadsheet/commit/f7b1c449c8 [IMP] tests: add image snapshots for renderer store tests [Task: 5933130](https://www.odoo.com/odoo/2328/tasks/5933130) https://github.com/odoo/o-spreadsheet/commit/46c70d8670 [FIX] renderer: rendering tests are wrong [Task: 5933130](https://www.odoo.com/odoo/2328/tasks/5933130) https://github.com/odoo/o-spreadsheet/commit/bd47b32e9e [IMP] tests: update jest to v30 [Task: 5933130](https://www.odoo.com/odoo/2328/tasks/5933130) https://github.com/odoo/o-spreadsheet/commit/bfb8e0595f [FIX] cf: add sanity checks on conditional format type/operator [Task: 6106092](https://www.odoo.com/odoo/2328/tasks/6106092) https://github.com/odoo/o-spreadsheet/commit/aee92bcbdd [FIX] live-server: specify host to avoid issues with some browsers [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/f5e1d32287 [FIX] spreadsheet: chart side panel content should use full height [Task: 6080680](https://www.odoo.com/odoo/2328/tasks/6080680) https://github.com/odoo/o-spreadsheet/commit/89c8b30ee2 [FIX] xlsx: export formula that returns an error [Task: 6008904](https://www.odoo.com/odoo/2328/tasks/6008904) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
Accounting administrators can now open customer invoices linked to Point of Sale orders without needing Point of Sale access. This prevents an access error and keeps invoice review workflows working for finance users.
Original PR description
An accounting administrator without Point of Sale access would get an AccessError when opening a customer invoice linked to a POS order. The `edi_show_cancel_button` computed field calls `_get_move_applicability()`, which in turn calls `_move_has_settle_or_deposit_pos_order()`. That method was reading `invoice.pos_order_ids.lines` without `sudo()`, causing the ORM to enforce access rights on `pos.order` for the current user. Users who only have accounting rights (no "Point of Sale/User" or "Inventory/User" group) would therefore get an AccessError. opw-6044860 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Kit sales now calculate component costs correctly when the component is stocked in one unit of measure but used in the kit with another. This prevents point-of-sale orders and related margin reporting from showing inflated or incorrect costs.
Original PR description
When selling a kit that use component with different UoM than the base component UoM, no conversion was done to compute the correct qty of component used in the kit, which lead to a wrong total cost on the pos order. Steps to reproduce: ------------------- * Create a component A with a cost of 12000€ * Set the UoM for the component A to "dozen" * Create a kit product K with a BoM the use 1 "unit" of A * At this point the cost of the kit K should be 1000€ * Now make a PoS order for 1 K and validate it > Observation: The total cost of the kit is not correctly computed, it should be 1000€ Why the fix: ------------ When computing the qty_per_kit, we were not doing the conversion between the product UoM and the BoM line UoM. opw-6039809
This fix ensures employee absence records are created for the correct day when the company or employee timezone is behind UTC. It prevents false check-in conflicts during automated absence detection, improving reliability for attendance tracking in affected timezones.
Original PR description
### Steps to reproduce: - Have a database in timezone America/Asuncion for example - Create an employee - Create an attendance for the day before yesterday from 13h to 19h - Run the absence detection cron - An error will be raised saying the user is already checked-in on that day ### Cause: When trying to create an absence attendance we localized yesterday's midnight into UTC and then apply the employee timezone. Which cause a one-day shift when having a timezone behind UTC as at that point we try to create an attendance on the day before yesterday not yesterday ### Fix: We use the timezone of the employee to localize midnight then get this time in UTC. opw-5930309 Forward-Port-Of: odoo/odoo#258230 Forward-Port-Of: odoo/odoo#257932
German invoice previews now show only the delivery contact name instead of combining it with the parent company name. This helps avoid ambiguity about the legal invoice recipient and reduces the risk of tax deduction issues when multiple company names appear together.
Original PR description
If two GmbH (Ltd.) names appear in the invoice address field (e.g., "Proveco GmbH, Test GmbH"), the invoice is problematic from a tax perspective, as two GmbH are considered separate legal entities, and it is not clearly identifiable who the actual recipient of the service is. Consequently, the tax office can refuse the input tax deduction if the invoice recipient is not clearly identifiable. Steps: - Create a company contact (X) and a delivery address (Y) - Create an invoice for X, delivery address will be Y - Open preview -> The delivery partner's display name is 'X, Y', it should be only 'Y' Fix: Adding a context key to the invoice document to conditionally display the parent contact name in the display_name Ticket [link](https://www.odoo.com/odoo/project.task/5900567) opw-5900567 Forward-Port-Of: odoo/odoo#258452 Forward-Port-Of: odoo/odoo#257652
The portal now shows allocated task hours without counting sub-task estimates twice when parent and child tasks appear together. This gives customers a clearer and more accurate view of planned and spent time on projects.
Original PR description
Steps to Reproduce: - 1. In the Project app, create a new project and enable "Timesheets". 2. Create a parent task with allocated hours (e.g., 20h). 3. Create one or more sub-tasks under the parent,…
Steps to Reproduce: - 1. In the Project app, create a new project and enable "Timesheets". 2. Create a parent task with allocated hours (e.g., 20h). 3. Create one or more sub-tasks under the parent, also with allocated hours (e.g., 8h and 5h). 4. Log in to the portal and navigate to the project's task list. 5. Observe the "Total" allocated time shown in the list header. Issue: - - The total allocated time displayed in the portal incorrectly sums the hours of the parent task and all its sub-tasks (e.g., 20h + 8h + 5h = 33h). This leads to an inflated and confusing total for the customer. Cause: - - The `_get_portal_total_hours_dict` method calculated the sum of `allocated_hours` on the entire recordset of tasks passed to it, without distinguishing between parent tasks and their children when both were present. Fix: - - This commit excludes sub-task hours from the total allocated time computation if their parent task is also present in the view. - The total time spent now uses parent `total_hours_spent` which includes both time spent on parent and sub-task. task-4939234 Forward-Port-Of: odoo/odoo#258485 Forward-Port-Of: odoo/odoo#221563
Swiss QR-bill generation now filters out characters that banks do not accept, preventing payment QR codes from being rejected. This improves reliability for Swiss invoicing by ensuring generated QR codes follow the official character rules.
Original PR description
**Description of the issue/feature this PR addresses:** QR code is rejected by the bank, when it contains an invalid character `U+202F`. **Current behavior before PR:** Unauthorized Unicode characters are encoded in the QR-Bill, and it is rejected on the receiving part. **Desired behavior after PR is merged:** Any Unicode codepoint which is not in the subset of 324 allowed codepoints has to be filtered out. > spec of QR-bill allows only a subset of characters, a precise list of 324 Unicode codepoints (section 4.1.1, page 30 of the Swiss Implementation Guidelines for the QR-bill) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257961 Forward-Port-Of: odoo/odoo#254980
This update resolves an issue where retry attempts for Fiskaly SCU setup were incorrectly triggered by client errors, leading to confusing error messages. The fix now only retries on server errors and intelligently reuses existing SCU instances to avoid exceeding Fiskaly's signature creation limits, ensuring smoother and more reliable SCU setup.
Original PR description
- Only retry on server errors (5xx) instead of client errors (4xx), which caused confusing RetryError instead of the actual API response. - Reuse the existing active SCU when Fiskaly's limit of 1 active signature creation unit is reached (E_SCU_LIMIT_REACHED). opw-5958673
This update fixes an issue where Field Service orders were incorrectly reserving all stock moves within a delivery chain, leading to all picking steps being marked as 'Ready' instead of just the customer-bound ones. The change ensures that stock reservations are applied only to the necessary picking steps, improving order fulfillment accuracy. This resolves a conflict arising from a recent database update.
Original PR description
Since db76eb2020383, `move_ids` on sale order line is link to all stock move of a delivery chain. Meaning there is 3 moves by default for 3 steps delivery config. Creating a sale order via field service will force the reservation of the sale order moves. This will lead to all the picking being marked as "Ready" instead of only the one going to "Customer" location. Task: 5914851
This update fixes an issue where users could order unlimited quantities of rental products through the website. The change limits the available quantity to the minimum rental availability, ensuring accurate resource allocation and preventing overbooking. This improves the reliability of our rental service.
Original PR description
It is possible to order as many products as we want of a rental product that synchronizes shifts depending on a specific service Steps to reproduce: 1. Install website_sale_renting_planning module 2. Go to Rental > Products and create a new product "test" with Sales enabled, Product Type "Service", Plan Services enabled as "Developer", in the Sales tab, enable Is Published and in the Rental prices tab, create a pricing for Daily period 3. In the General Information tab, click on the internal link to "Developer" 4. Enable Sync Shifts and Rental Orders 5. Go to the eCommerce website and search for product "test" 6. You can add as many quantity of the product to your cart Issue: We don't limit the maximum quantity of the product Solution: Look through the renting availabilities of the product and set the maximum quantity to the minimum of the availabilities relevant to the renting dates selected opw-6009928
This update allows users to create pricelist rules for subscription products that also offer one-time sales. Previously, the system restricted pricelist items based on recurring invoice settings, preventing flexible pricing options. This change ensures users can accurately define pricing for hybrid subscription models.
Original PR description
Currently, the pricelist item form strictly filters out any product marked as a recurring invoice (`recurring_invoice` = True). This prevents users from defining standard pricelist rules for "hybrid" products that are subscriptions but also have `allow_one_time_sale` enabled. This commit updates the domain on `product_tmpl_id` in the pricelist item form to include an OR condition. Products are now visible if they are NOT a recurring invoice, OR if they explicitly allow one-time sales. Task: 6052066
This update corrects an error in the Luxembourg balance sheet report that was causing incorrect 'Results brought forward' values. The fix adjusts how the system calculates this line, ensuring it accurately reflects year-end financial adjustments for Luxembourg companies. This improves the reliability of financial reporting.
Original PR description
… sheet Steps to reproduce: - Use a Luxembourg company - Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412) - Open the Luxembourg balance sheet (full or abbreviated)…
… sheet
Steps to reproduce:
- Use a Luxembourg company
- Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412)
- Open the Luxembourg balance sheet (full or abbreviated)
Issue:
Line "V. Profit or loss brought forward" shows incorrect values.
Cause:
The `accounts` expression for that line used `account_codes` engine with formula `-14`, which only sums accounts by code prefix. Account 1412 ("Results brought forward (assigned)") was typed as `equity`, so its balance was carried forward as an initial balance instead of being captured as retained earnings in the formula.
Solution:
- Set account 1412 to `equity_unaffected`, consistent with account 142.
- Change the `accounts` expression of Line V in both the full and abbreviated balance sheet to use the `domain` engine: `['|', ('account_id.code', '=like', '14%'), ('account_id.account_type', '=', 'equity_unaffected')]` with subformula `-sum`. This correctly captures the balance of all 14x accounts and any `equity_unaffected` accounts, which covers the standard year-end affectation workflow.
opw-5883505This update fixes an issue where users could create serial numbers for components during manufacturing operations, even when serial number creation was disabled in settings. This change ensures that only authorized serial numbers are created, improving data accuracy and preventing potential inventory discrepancies. The fix addresses a technical oversight in the shopfloor application.
Original PR description
**Issue**: Even when creation of new Serial Numbers for components is disabled on the Manufacturing Operation Type, it is still possible to create them from the shopfloor application. **Steps to…
**Issue**: Even when creation of new Serial Numbers for components is disabled on the Manufacturing Operation Type, it is still possible to create them from the shopfloor application. **Steps to reproduce**: - Enable "Lots & Serial Numbers", on the global settings - Create two products, one tracked by unique serial number - Go to Inventory > Configuration > Warehouse Management > Operations Types - Select Manufacturing and disable "Create New Lots/Serial Numbers for Components" - Create and confirm a MO using the tracked product as component - Go to shopfloor - Click the "+" button next to the component, then "New" -> No error is raised when creating a serial number **Cause**: The `_check_create` constraint relies on `active_mo_id`: https://github.com/odoo/odoo/blob/494cdcfdf4ec166e0a643ee70a53c12c810d02b4/addons/mrp/models/stock_lot.py#L11-L19 However, the shopfloor does not pass this, in context: https://github.com/odoo/enterprise/blob/54c6252a0e13b11fc297b6828883923c0f89881a/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L193-L199 As a result, the check is bypassed. opw-6041241
This update ensures the 'Load Order' button remains hidden on Grab/GoFood orders, regardless of screen size. Previously, resizing the window would briefly show this button, which could lead to manual order changes. This change prevents unauthorized modifications and maintains the integrity of external delivery orders.
Original PR description
For Grab/GoFood orders, the "Load Order" button is replaced by "Set Food Ready" to prevent manual edits. Previously, resizing or minimizing the window caused the hidden "Load Order" button to reappear due to responsive layout overrides (e.g., mobile view CSS classes). This commit updates the visibility logic to ensure the button remains strictly hidden across all screen sizes for external delivery orders. opw-6044176