Daily updates from Odoo
Friday, February 6, 2026
28 changes · 18.0
New functionality added to Odoo
This update adds the ability to seamlessly transfer information from Point of Sale (POS) transactions to the corresponding Taiwan E-invoice. This ensures accurate and compliant invoice generation for sales made through Odoo's POS system, fulfilling Taiwan's electronic invoicing requirements. It improves the accuracy of invoices and simplifies the process for businesses operating in Taiwan.
Original PR description
Passing values from Pos to invoice for Taiwan E-invoice 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 pull request adds support for Argentinean Electronic Invoicing (EDI) through the WSMTXCA protocol. It includes necessary models and configurations to comply with Argentine tax regulations, enabling businesses to generate and transmit electronic invoices. A minor fix was also included to address an issue.
Original PR description
Backport PR https://github.com/odoo/odoo/pull/212786
Enhancements to existing features
This update adds helpful guidance to the accounting report formula builder, specifically for the 'Subformula' field. Previously, users lacked information on how to use the 'ignore_zero_division' setting, which is crucial for accurate report calculations. This change enhances the user experience and reduces potential errors when configuring accounting reports.
Original PR description
Currently, the `Subformula` field in the `Create Expressions` wizard does not provide any `help` text. **Steps to reproduce:** - Install the `account_reports` module and enable `developer mode`. - Navigate to Accounting > Configuration > Accounting Reports. - Open any record, click `Add a line` > `Add a line`. - Observe the `Subformula` field. **Observation:** The `Subformula` field is displayed without any help message. **Root Cause:** At [1], the `subformula` field is defined without a `help` attribute. **Fix:** This commit adds a help text to the `Subformula` field explaining the use of `ignore_zero_division`, improving usability when configuring accounting report formulas. [1]: https://github.com/odoo/odoo/blob/57c0a78536fa38779d981482aee6ae73c132c2bc/addons/account/models/account_report.py#L558 Related enterprise PR: https://github.com/odoo/enterprise/pull/103773 opw-5475146
This update ensures that the point-of-sale system now displays currency symbols ($ for USD, € for EUR, etc.) alongside the total amount and change for customers. This change is required to meet scale certification standards and improves the overall presentation of prices in the POS interface.
Original PR description
This PR adds the currency symbol on the customer display for point of sale for the total amount + change. (formatted based on the currency, e.g. $ before, eur after the amount) This is required by the scale certification Before: <img width="777" height="604" alt="image" src="https://github.com/user-attachments/assets/28688075-b387-477a-930d-410f1107cc83" /> After: <img width="787" height="638" alt="image" src="https://github.com/user-attachments/assets/724a1360-78a7-4630-a034-e115dd09f057" /> --- 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 month names were incorrectly displaying based on the server's locale instead of the user's environment. The change ensures month names are displayed in the correct language for each user, improving the user experience across Odoo modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Enterprise PR: odoo/enterprise#106175 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364
This update corrects a broken link used by Odoo to connect with the Polish Electronic Data Interchange (KSeF) system. The change ensures that Odoo can properly transmit and receive data required for Polish tax compliance. This resolves a connectivity issue impacting the functionality of the l10n_pl_edi module.
Original PR description
The production URL for the Polish EDI (KSeF) was incorrect. This commit updates the endpoint to the current valid URL to ensure proper connectivity. 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 a bug where empty loyalty cards were created when multiple loyalty programs existed, even if only one applied points to an order. The fix ensures that loyalty cards are only created when points are actually earned, reducing unnecessary record creation and improving data accuracy.
Original PR description
Currently, when you have multiple loyalty program but only 1 applies points on the current order, the other will have a loyalty card created with 0 points. steps to reproduce: ------------------- * Create a loyalty program giving you 1 point per $ on product 1 * Create a loyalty program giving you 1 point per § on product 2 * Make a pos order with just product 1, add a customer * Check the programs in the backend > Observation, a loyalty card with 0 points was create for the second loyalty program Why the fix: ------------ This creates a lot of unecessary records. We now only create cards where there are points or when there 0 points because a reward has been applied, thus keeping history. opw-5405109
This update corrects a display issue in the self-order point module where the price of added items after the initial order was incorrectly calculated. The fix ensures that the price shown for each line accurately reflects the quantity added, resolving a discrepancy between the quantity and total price. This improves the accuracy of the order total for customers using the 'Pay After Meal' option.
Original PR description
Steps to reproduce ------------------ If we set pay after to "meal", order one product A for price 10, then on the same order, adds again product A and go to cart page, we see "product A: 1" as expected, but its price set to "20". -> Mismatch between the shown quantity and the total price of that line. Why it's happening ------------------ When displaying the line qty, we just display the diff (1), however, when displaying its price, we take the price of the whole line (having qty 2). Fix --- Backport the line price display amount change made in saas-18.2 in https://github.com/odoo/odoo/commit/98f0534450520ce037039ffe0be17cf1dc3b91ba. We also fix "Your Order" to show the price of only the products of the newly added lines. opw-5467612
This update fixes an issue where Vendor Pricelists linked to Blanket Orders were incorrectly assigned to the user's active company instead of the Blanket Order's company. This ensured data consistency and accurate product pricing within multi-company Odoo environments. The change ensures pricelists are correctly linked to the purchase agreement.
Original PR description
Description of the issue/feature this PR addresses: In a multi-company environment, confirming a Purchase Agreement (Blanket Order) automatically generates Vendor Pricelist (product.supplierinfo)…
Description of the issue/feature this PR addresses: In a multi-company environment, confirming a Purchase Agreement (Blanket Order) automatically generates Vendor Pricelist (product.supplierinfo) entries for the linked products. Currently, these entries default to the user's current active company rather than the company specified on the Purchase Agreement. This leads to data inconsistency where pricelists are visible and owned by the wrong company. Current behavior before PR: When a Blanket Order belonging to Company A is confirmed by a user who has Company B as their current active company, the resulting Vendor Pricelist record is assigned to Company B. This is because the company_id is not explicitly passed during the creation of the product.supplierinfo record, causing it to fall back to the environment default. Desired behavior after PR is merged: The Vendor Pricelist record will explicitly use the company_id from the Purchase Agreement it originated from. This ensures that the pricelist is correctly assigned to the agreement's company rather than from the active company related to ticket i made #5909892
This update fixes an issue where product names were duplicated on unvalidated delivery slips when products with 'never' variants and descriptions were involved. The fix ensures that product descriptions are correctly handled during report generation, preventing redundant name displays. This improves the accuracy of delivery slip reports.
Original PR description
When creating a delivery slip, if the product sold has variant of type never and have a description, the name will be repeated. ### Steps to reproduce: * Create a product A with variants of type…
When creating a delivery slip, if the product sold has variant of type never and have a description, the name will be repeated. ### Steps to reproduce: * Create a product A with variants of type never * Create a sales order with two product A and confirm it * Go on the delivery (don't validate it) and create a delivery slip -> Issue, the name of the product appears twice. * Reduce the quantity of product delivered to one * Confirm and create a backorder * Print the deliveryslip -> Issue, the name of the product appears twice in the backorder section ### Observation: When confirming the SO: It creates the procurement values, where the product_description_variants are obtained from _get_sale_order_line_multiline_description_variants. In our case, we will have several elements regarding the variant: https://github.com/odoo/odoo/blob/3e5aabf66a19d406fa49c9ff2f6e4db6d5ba124a/addons/sale_stock/models/sale_order_line.py#L300 This information is added to the picking_description (for which the fallback value is the product name): https://github.com/odoo/odoo/blob/626d06734991bcd3b94a6c9454317f311164e9dc/addons/stock/models/stock_rule.py#L339-L340 When printing the delivery_slip, it uses description_picking (and attempts to filter out the name): https://github.com/odoo/odoo/blob/842025976ab65e92551366def88cdd243549e5ee/addons/stock/report/report_deliveryslip.xml#L74 However, in our case, since the variant information is included, it will not be filtered out because the value is no longer just the name. The same issue is present here : https://github.com/odoo/odoo/blob/e99e07f2f22b0987468c45d3d7da287cdf703588/addons/stock/report/report_deliveryslip.xml#L179-L180 opw-5153222
This update resolves an issue where public holidays weren't appearing in the Time Off dashboard when applied to work schedules that didn't have a company assigned. The fix ensures that public holidays are correctly considered when calculating leave availability, regardless of whether a company is associated with the work schedule. This prevents incorrect time-off durations.
Original PR description
**Steps to reproduce** 1. Remove the company of the Working Schedule (needs to be done in a multi-company environment from the UI) used by an employee. 2. Using the company of this employee, create a…
**Steps to reproduce**
1. Remove the company of the Working Schedule (needs to be done in
a multi-company environment from the UI) used by an employee.
2. Using the company of this employee, create a Public Holiday
(for the employee's schedule or all schedules).
Issues:
- the public holiday doesn't appear in the Time Off dashboard
- when taking a time off on that day, the public holiday is
included in the duration
**Cause**
The fix in https://github.com/odoo/odoo/commit/a95af8b78a94a795e05a0adf299837adc0ef2117 will result
in a search domain for public holidays of `('company_id', 'in', [False])`
when the working schedule has no company, ignoring any public
holidays with a company set. This is especially problematic since the
company of the public holiday is always forced.
https://github.com/odoo/odoo/blob/7bce5f3f95429a4d4ba034a66c350ee2a5868567/addons/resource/models/resource_calendar_leaves.py#L49-L51
**Solution**
Since the intent of the original fix https://github.com/odoo/odoo/commit/d58ecdccb89401751c8ee056c4166427ea005f5e
was to correct an issue related to the computation of some `project.task`
fields calling resource methods, we can instead go for a safer solution
in `project` which doesn't affect `resource`/`hr` modules.
Code below the search already ensures that leaves are only applied
when their company matches the resource's company:
https://github.com/odoo/odoo/blob/fdd9edb6a4ef3aa18449be537c954a06b32578e3/addons/resource/models/resource_calendar.py#L409-L410
When `_leave_intervals_batch` is called without resources, existing code
adds a company domain (see `_get_unusual_days` for example).
opw-5496999
opw-5401425This update addresses several bugs and improves the stability of the spreadsheet functionality within Odoo. Specifically, it fixes issues related to crashes during sheet deletion and improvements to importing incomplete Excel files. This ensures a more reliable spreadsheet experience for users.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4587c34166 [REL] 18.0.56 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4587c34166 [REL] 18.0.56 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/83a2147ebf [FIX] find_and_replace_store: crash after sheet deletion [Task: 5453311](https://www.odoo.com/odoo/2328/tasks/5453311) https://github.com/odoo/o-spreadsheet/commit/03ebb687fa [FIX] Cell: do not rely on key presence in commands [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/d953505355 [FIX] tests: fix network serialization in mock [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/2f4cf70fc1 [FIX] evaluation: do not overwrite current sheet [Task: 5868007](https://www.odoo.com/odoo/2328/tasks/5868007) https://github.com/odoo/o-spreadsheet/commit/0dcc3ce629 [FIX] XLSXImport: Fix crash on incomplete xlsx file with external reference [Task: 5499753](https://www.odoo.com/odoo/2328/tasks/5499753) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update ensures that invoice due dates accurately reflect the payment terms (e.g., 'pay later') selected for a customer. Previously, invoices didn't display the correct payment term, leading to discrepancies. This fix corrects a bug introduced when payment terms were initially removed and later re-enabled for the 'pay later' method.
Original PR description
Payment terms set on contact form do not reflect on invoice. Steps to reproduce: ------------------- - Create a new Contact and add a payment term to this contact (30 days) - Open POS and create an order - Select the new contact as the customer - Go to payment, select the option to create an invoice and validate > The invoice shows today as the due date. If instead we're settling an order with this payment term and the customer account then the due date is in 30 days. Why the fix: ------------ Initially payment terms have been removed here as they were not supported: https://github.com/odoo/odoo/commit/1010aaaad0e09f0e5f2d5e824a28d9e39b877912 They were brought back later only when using 'pay_later' payment method. https://github.com/odoo/odoo/commit/b5a502cbe530b2fef87548af66c67bfc0d13b01e We backport it. opw-5911241
This update replaces a real tax ID placeholder in the Odoo Base VAT module for Turkey. This change prevents users from accidentally using the placeholder for actual transactions, ensuring data integrity and compliance. It's a minor update focused on security and accuracy.
Original PR description
The previous placeholder used a real tax ID. Replacing it with a dummy prevents users from using it to submit transactions. task-5441218 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246837 Forward-Port-Of: odoo/odoo#242189
This update resolves an error that occurred during upgrades of Odoo 18, specifically related to warehouse configurations. The fix ensures that warehouses are correctly identified with production locations, preventing upgrade failures and maintaining smooth stock operations. This change was implemented by borrowing logic from the MRP module.
Original PR description
The warehouses need at least a Production location[^2] to avoid triggering an error, but they are not considered a missing location. The function is borrowed from the `mrp` module[^mrp]. This error was found during upgrades. To reproduce: - In 17, install repair and don't install mrp. - Archive the production locations. - Upgrade to 18. - It will trigger an error[^1] while upgrading stock. [^1]:https://github.com/odoo/upgrade/blob/b46cf7ea8770c5d428ea3d569148eb76d16903b9/migrations/stock/saas~17.3.1.1/end-migrate.py#L16 [^2]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/repair/models/stock_warehouse.py#L67 [^mrp]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/mrp/models/stock_warehouse.py#L278-L283
This update simplifies sales order reporting for subscription customers. The 'remaining hours' field, which could be misleading due to recurring subscription delivery cycles, has been hidden when a sales order line is linked to a subscription. This ensures a clearer and more accurate view for our customers.
Original PR description
This change hides the remaining_hours_so field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238
This update removes the direct technical contact email (peppol.iap@odoo.com) from the Peppol integration, aligning with previous versions. This change enhances security and privacy by only displaying the service name, as was done in prior releases. It ensures clients receive accurate information without exposing internal support details.
Original PR description
…pport Our TechnicalContactUrl is peppol.iap@odoo.com, it should not be exposed to the client as the support contact. Let's just expose the name of the service like we do above 18.0. task-none Forward-Port-Of: odoo/odoo#247607
This update fixes an issue where month names were being displayed using the system's locale language instead of the specific business environment's language. This ensures that month names are consistently shown in the correct language for each Odoo enterprise instance, improving accuracy and user experience. The change impacts several payroll and reporting modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Community PR: odoo/odoo#246790 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364
This fix resolves an issue where Modelo 390 reports for past years were generating empty BOE files. The problem stemmed from incorrect data retrieval based on the report period, which was corrected to accurately reflect the specified year. This ensures accurate tax reporting for Spanish businesses.
Original PR description
### Issue: When exporting Modelo 390 reports for a past year, the BOE file was empty — all values were 0 ### Cause: In `export_boe()`, the `report_lines` were get based on the `section_report`…
### Issue: When exporting Modelo 390 reports for a past year, the BOE file was empty — all values were 0 ### Cause: In `export_boe()`, the `report_lines` were get based on the `section_report` options However, `section_reports` do not store the date or return periodicity of the selected report As a result, using their options always fetched data for the current period instead of the specified year ### Note: `_generate_mod_390_page2()` also had issues: some lines were missing or incorrectly indexed The mod 360 format, it strict in the structure with specific index so it may produce invalid documents The latest documentation for mod 390: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` and switch to ES Company - Create an Invoice and a Bill (Any product, Price: 100.00, Tax: 21%, Invoice Date: 01/01/2025) - Open Tax Return, switch to Mod 390, and set year to 2025 - You should see data in the 2 first sections - Use the gear icon, and download the BOE - Use the gear icon to download the BOE, fill the wizard (Natural Person – Name: Test, Principal activity: Test, Activity Code: 12345), and generate the file Before the fix: all values in the BOE were 0 instead of matching the report opw-5457374 Forward-Port-Of: odoo/enterprise#104928
This update resolves an issue where customer display URLs weren't consistently being sent to the IoT device boxes when records were updated. The change ensures that the correct URL is transmitted, improving the connection and data flow between the enterprise system and the IoT devices. This enhances the functionality of the IoT integration.
Original PR description
This PR fixes the customer display url not being sent to the iot box when updating the corresponding record in iot device form view. By replacing onWillSaveRecord by onRecordSaved we ensure that our method is always called ticket-5782927 Forward-Port-Of: odoo/enterprise#106331
This update fixes a misleading error message displayed when validating Argentine electronic invoices (ARCA). The message has been corrected to accurately reflect the issue: the invoice date must be after the last validated invoice, not before. This ensures proper compliance with AFIP regulations.
Original PR description
WSFE error 10016-1 must be "The invoice date cannot be before the last invoice validated in AFIP." instead of "The invoice date cannot be after the last invoice validated in AFIP". Steps to reproduce: validate argentinean customer electronic invoice with invoice date before than the last invoice date validated in ARCA. Task Adhoc side: 44290 Task latam: 1376 Forward-Port-Of: odoo/enterprise#106305
This update resolves an issue with the calculation of coordination deductions in the Swiss payroll module (l10n_ch_hr_payroll_elm_transmission_5_3). The fix ensures accurate reporting of these deductions, aligning with Swiss tax regulations. This improves the reliability of payroll data for Swiss businesses using Odoo Enterprise.
Original PR description
Forward-Port-Of: odoo/enterprise#106615
This update fixes an issue where registering payments on payslips incorrectly affected multiple journal entries, leading to payment inconsistencies. Now, payments are reliably registered on the specific NET payable line, ensuring accurate payment tracking and a more reliable ‘Paid’ status for payslips. This improves the payroll accounting process.
Original PR description
## Behavior before When registering a payment from a payslip, the action opened the payment register wizard on **all** journal entry lines (`move_id.line_ids`). This could: - produce an inconsistent…
## Behavior before When registering a payment from a payslip, the action opened the payment register wizard on **all** journal entry lines (`move_id.line_ids`). This could: - produce an inconsistent payment wizard (because it’s not anchored to a single payable/receivable line), - reconcile against unintended lines, - and fail to reliably trigger the **Paid** transition. Additionally, after reconciliation, the payslip was marked as **Paid** only if **all** journal entry lines had zero residual, which is not a reliable indicator of whether the employee **NET payable** has been fully paid. ## Behavior after - The payslip **Register Payment** action now opens the payment register wizard only on the payslip’s **NET payable** move line (credit line on the NET salary rule’s credit account, with the employee work contact as partner). - After reconciliation, the payslip is marked as **Paid** once its **NET payable** line(s) are fully reconciled (residual is zero), and the wizard posts chatter messages linking the payment and the payslip (preserving upstream behavior). ## Root cause Two issues combined: 1. The payment register wizard was invoked on `move_id.line_ids` instead of on the payable line(s) only. The wizard is designed to work on payable/receivable lines; opening it on all move lines breaks assumptions and can lead to incorrect behavior. 2. The **Paid** transition relied on checking residuals for **all** move lines, which does not correctly represent “employee NET salary has been paid”. Only the residual of the **NET payable** line is relevant for payroll payment completion. ## Steps to reproduce 1. Ensure the company is configured for the **individual payslip accounting entry** workflow (one journal entry per payslip), and that the **NET** salary rule has a **reconcilable** credit account. 2. Validate a payslip so it generates a **posted** journal entry containing a **NET credit** line. 3. Open the payslip and click **Register Payment**. 4. Observe that the wizard is opened on **all** move lines (not just the **NET payable** line), and payment/reconciliation behavior can be inconsistent. 5. Register and post the payment; observe that the payslip may fail to transition to **Paid** unless **all** move lines are fully reconciled.
This update resolves a bug that caused accounting reports to fail when formulas resulted in a zero denominator. The fix ensures that calculations within reports are handled correctly, preventing errors and improving report reliability. This ensures accurate reporting for deferred revenue and other financial data.
Original PR description
Currently, an error occurs when opening an `accounting report` when the evaluated data produces a `zero denominator` during formula computation. **Steps to reproduce:** - Install the…
Currently, an error occurs when opening an `accounting report` when the evaluated data produces a `zero denominator` during formula computation. **Steps to reproduce:** - Install the `account_reports` module (without demo) and enable `developer mode`. - Navigate to Accounting > Reporting > Deferred Revenue. - Click the `gear icon` to open the report configuration. - Click `Add a line` to create a new report line. - Click `Add a line` to create a new expression with: >- Computation Engine: `Aggregate Other Formulas` >- Formula: `0/0` - Save the new expression and report line. - Try to reopen the `Deferred Revenue`. **Error:** `ZeroDivisionError: division by zero` **Root Cause:** After commit [1], at [2], expressions without the `ignore_zero_division` subformula are evaluated in the else condition, causing an error when the `denominator is zero`. **Fix:** This commit prevents errors caused by zero denominators during formula evaluation and improves the clarity of the resulting error messages. [1]: https://github.com/odoo/enterprise/commit/2ba548564bd0bb68c36a589ed67b43251b5f45d0 [2]: https://github.com/odoo/enterprise/blob/7adab8bfdccf5f0e97eb2894e065b63ea8200d20/account_reports/models/account_report.py#L3540-L3547 opw-5475146
This update fixes an issue where newly created appointments with future dates incorrectly set the lead's activity deadline to today's date. The fix ensures the deadline aligns with the appointment's scheduled date, improving the accuracy of opportunity tracking and follow-up reminders. This change enhances the user experience for scheduling and managing appointments.
Original PR description
When creating a future appointment via the backend, the generated lead's activity deadline is incorrectly set to today instead of the appointment date. ### Steps to reproduce - Install…
When creating a future appointment via the backend, the generated lead's activity deadline is incorrectly set to today instead of the appointment date. ### Steps to reproduce - Install `appointment_crm`. - Go to Appointments > Schedule > Staff Booking. - Create a booking for a future date (e.g., next month) and add a customer. - Confirm the booking. - Open the newly created Opportunity. - Check the "Next Activity" deadline. - It is set to today's date instead of the appointment's date. ### Cause The `calendar.event` model maintains two sets of fields for timing: `start`/`stop` (Datetime) and `start_date`/`stop_date` (Date). Standard logic dictates that `start_date` and `stop_date` are only populated for All Day events (`allday=True`). For regular time-specific events, these fields are computed as `False` to avoid ambiguity. When an appointment is created, `appointment_crm` generates a linked CRM Lead and schedules an activity. The code responsible for scheduling this activity (`activity_schedule`) was explicitly passing `event.start_date` as the `date_deadline`. Since standard backend appointments are time-specific (not all-day), `event.start_date` is `False`. The `activity_schedule` method defaults to the current date (Today) when it receives a falsy value for the deadline. Consequently, creating a future appointment resulted in an immediate deadline. ### Fix Modify the lead creation logic to use the standard calendar helper `_get_activity_deadline_from_start`. opw-5780578
This update resolves an issue where journal items displayed in reports were incorrectly linked to account groups, causing errors in Odoo 18.3 and later. The fix ensures accurate reporting by adjusting how account group IDs are handled within the report's data retrieval process.
Original PR description
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR…
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR [1]. - Install `Accounting (accountant)` with demo data - Create account groups e.g., name as `Test 1` and code prefix `1 to 1` - Go to the general ledger report - Click on `Journal Items` of the account group line `1 Test 1` Error from saas-18.3: `ValueError: Cannot convert account.account.group_id to SQL because it is ...` This error occurs because PR with ref [1] in 17.0 added the` group_id` field of the `account.account` model to the search domain. However, in 18.0, commit [2] modified this field so that it is no longer stored. As a result, when a search domain includes this `non-stored` field, Odoo skips the domain evaluation and logs a error at code line [3]. Consequently, the changes introduced by commit [1] have no functional effect from 18.0. Also, starting from saas-18.3, passing such a non-stored field in a domain raises an explicit error at code line [4], instead of being silently ignored. This commit resolves the issue by introducing an SQL query that returns the account ids related to `record_id(account group id)` include `record_id` as `None`. [1]: https://github.com/odoo/enterprise/pull/100191 [2]: https://github.com/odoo/odoo/commit/854c3b27aa5476c208572f19e64f8f3364bfc381#diff-19ef5a530c506fdee93fe0d113e61946b87fae7dd2d360558da69c0014f766b2R114-R767 [3]: https://github.com/odoo/odoo/blob/71e86f38c7699aaea980c929c67835a3495edf55/odoo/osv/expression.py#L1166-L1174 [4]: https://github.com/odoo/odoo/blob/00517e9e085c6fa9e00bedb8aee122a60e407fea/odoo/orm/fields.py#L1201 sentry-7100657414
This update improves the accuracy of the Kardex report for Peruvian businesses by correctly incorporating landed costs and price adjustments, which were previously missing. The changes also address mapping issues and ensure consistent reporting across different movement types, ultimately providing more reliable inventory data.
Original PR description
Refactored the logic to generate the Kardex report based on `stock.valuation.layer`, for the following reasons: 1. **Landed costs**: These must be considered in the report. Odoo already creates…
Refactored the logic to generate the Kardex report based on `stock.valuation.layer`, for the following reasons: 1. **Landed costs**: These must be considered in the report. Odoo already creates valuation layers for landed costs, and the report must use the date when the landed cost was recorded, not the original stock move date. 2. **Price adjustments**: Product price adjustments generate valuation layers without stock moves. These layers are now included in the report. Additional fixes and improvements: - Correctly map columns 18 to 26 in Report 13.1: - 18–20: Incoming movements - 21–23: Outgoing movements - 24–26: Final balance - Ensure `cost_in` and `cost_out` values are always positive. The sign now depends on the movement quantity, not the unit cost. - Replace the product list with a dictionary to track accumulated quantities and values per product for accurate balance calculation. - Extend test coverage to include cases where the report includes opening balances due to past transactions. - **MRP movements**: MRP processes don’t generate pickings, but their stock moves are linked to operation types. The report now uses codes `19` for incoming and `27` for outgoing MRP-related movements. - **Reversal of pickings**: Since Odoo copies the original picking and skips reassignment logic, we now override the reversal wizard to set the correct PE operation type: - `25` for incoming reversals - `24` for outgoing reversals - Force operation type `99` for all `A1` lines, as required by the report. - Ensure report dates are processed in the user's timezone for consistency with the layer view in Odoo. Forward-Port-Of: odoo/enterprise#88592
This update simplifies the sales order interface for subscription customers. It hides a confusing 'remaining hours' field that could mislead users about their service consumption. This change ensures a cleaner, more intuitive experience for subscription customers, aligning with the recurring delivery model.
Original PR description
This change hides the `remaining_hours_so` field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238