Daily updates from Odoo
Friday, January 30, 2026
25 changes · 18.0
New functionality added to Odoo
This update enables Odoo to generate and send required FA(3) XML files to Poland's KSeF system for tax reporting. It adds necessary fields to track KSeF status and securely communicates with the KSeF APIs, ensuring compliance with Polish regulations. The changes also include safeguards for data security and system stability.
Original PR description
- Added new fields to res.company to handle key, certificates and session numbers - Added new fields to account.move to track KSeF status, session, reference number, attachments, errors. - Updated…
- Added new fields to res.company to handle key, certificates and session numbers - Added new fields to account.move to track KSeF status, session, reference number, attachments, errors. - Updated the frontend view of the move and the settings. Some fields are debug-view only. - Implemented the sending method with `account.move.send`, storing the xml attached to the move. - Implemented the APIs to communicate securely with the KSeF - Implemented the Check Sending and Download UPO functionality - Implemented the rendering of the FA(3)-compliant XML structure. - Implemented a cron to update invoice KSeF statuses. - Implemented locking so cron and manual don't mess up with each other. - Set as `auto-install` for those who have the Polish localization. - Wrote minimal tests for basic use cases (to be expanded). - Added `neutralize.sql` script to avoid leaking sensitive data when copying a database for support - Added module to `.weblate.json` to make this i18n-able Task [link](https://www.odoo.com/odoo/project.task/4728713) task-4728713
Resolved issues and error corrections
This update fixes an issue in version 17 where paid event registrations automatically confirmed after a sale, leading to incorrect notifications and a less effective attendee editor. Now, registrations remain in 'draft' mode until attendee details are entered, ensuring notifications go to the correct recipient and maintaining administrative control.
Original PR description
Problem: - In version 17, event records linked to a sales order can be automatically set to ‘open’ immediately after the sale. This makes the wizard editor less useful (the data provided is not used…
Problem: - In version 17, event records linked to a sales order can be automatically set to ‘open’ immediately after the sale. This makes the wizard editor less useful (the data provided is not used for the record that is already confirmed) and notifications go to the sales partner instead of the actual assistant. Current behaviour: - Confirmed orders automatically confirm attendees, reducing the value of the wizard step and sending emails to the wrong recipient. Expected behaviour: - Paid attendee registrations created from Sales should remain in “draft” until attendee details are provided. Solution: - Do not set ‘state=“open”’ for payment records created from a sale involving the data wizard for records. Ensure they remain in “draft”. - Confirm registrations once attendee details are present. Advantages: - Restores the usefulness of the attendee editor: confirmation occurs after data entry, so notifications are directed to the attendee, not just the sales partner. - Meets functional expectations for administrative control and proper recipient targeting. Tests to reproduce the error: - Create quote with payment entry - Confirm SO - Enter attendee details and confirm - Registrations change to ‘open’ and a confirmation email is sent to the order partner and not to the registered attendee. @Tecnativa TT58160 @pedrobaeza please review --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230500
This update resolves an issue where modifying the quantity of a subcontracting receipt after a BOM change resulted in incorrect stock move line quantities. The fix skips a redundant check, ensuring accurate quantity updates are applied when a BOM is modified post-PO creation.
Original PR description
**Issue** In subcontracting, if a BOM is modified after the creation of a PO, then modifying the move quantity of the associated receipt can lead to inconsistency between move and move line…
**Issue** In subcontracting, if a BOM is modified after the creation of a PO, then modifying the move quantity of the associated receipt can lead to inconsistency between move and move line quantities. **Steps to reproduce** - Create a subcontracting BOM of a final product using 1 component product - Create a PO of the final product for a quantity of 10 and confirm it - Modify the BOM to use 2 component products instead - Go to the receipt of the PO and modify the quantity to 2 and validate it - Click on the move line of the receipt -> The displayed quantity is 10 instead of 2 **Cause** Setting the quantity triggers this line: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/stock_move.py#L78-L78 which calls: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/stock_move.py#L107 Since the BOM has been modified, a `consumption_issues` is detected and `_update_finished_move()` won't be called: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/mrp_production.py#L86-L89 And since the returned action is not used when calling `subcontracting_record_component`, `_update_finished_move()` won't be called later neither, which is the method responsible for updating the move line quantities: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/mrp_production.py#L142-L146 **Solution** Since the consumption issue actions are ignored in this case, just skipped it and avoid inconsistencies. opw-5493577 Forward-Port-Of: odoo/odoo#245065
This update corrects a bug where canceled refunds were incorrectly included in global invoices generated from Point of Sale (PoS) orders. The fix filters out canceled refund lines, ensuring that only valid refunds are reflected in the global invoice. This improves invoice accuracy and reporting for Mexican VAT compliance.
Original PR description
When generating global invoices for orders in the PoS, refund of those orders are also included in the global invoice. However, if the refund has been canceled, it should not be included in the global invoice. Steps to reproduce: ------------------- * Create a PoS order and validate it. * Go to the backend and create a refund for that order. * Cancel the refund. * Go to the PoS order list and select the original order * Click on "Generate Global Invoice" > Observation: The canceled refund is included in the global invoice. Why the fix: ------------ We simply filter out the canceled orders when searching for refunded order lines. opw-5492576
This update ensures that dates sent to ECPay (a payment gateway) are formatted correctly for Taiwan's time zone. Previously, dates were stored in UTC, leading to errors when ECPay searched for invoices. This fix resolves the issue, guaranteeing accurate invoice retrieval and preventing processing failures.
Original PR description
sending to ECPay The date store in Odoo is in utc format, we need to convert it to tw time when sending the date to ECPay. The APIs are using the date to search for the invoices, if the date is not correct, it cannot find the invoices and return error. task-5884616 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 resolves an issue where the carrier type selection box would become disabled after validating a mobile barcode. The fix ensures the carrier number input remains editable, allowing users to correctly select and input their carrier information during the order process. This improves the user experience and prevents data loss.
Original PR description
carrier type After the user clicks on "Validate" button to validate the mobile barcode, the carrier type selection is disabled and the carrier type pass to the SO is None. This commit fixes the issue by instead of disabling the carrier type selection, we just set the input box of carrier number to readonly and set back the carrier number to not readonly when the user changes the carrier type to ensure the carrier number input is editable. task-5880421 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 previous issue where attendance overlaps weren't properly accounted for in hourly accrual plans. The change ensures that all worked time, including periods where an employee worked across multiple days, is correctly included in the accrual calculation. This improves the accuracy of time-off balances.
Original PR description
### Issue: Attendances overlapping on two days are ignored for hourly accrual plans based on attendances. ### Steps to reproduce: - Install 'hr_holidays_attendance' - In Time Off > Configuration >…
### Issue: Attendances overlapping on two days are ignored for hourly accrual plans based on attendances. ### Steps to reproduce: - Install 'hr_holidays_attendance' - In Time Off > Configuration > Accrual Plan, create a new plan - Based on worked time - Hourly rule - Attendances as Source - In Management > Allocations, create an allocation for an employee using the new accrual plan - Create an Attendance for this employee in the period of the Accrual Plan - Check-in at 22pm for example - Check-out at 7am - Run the cron "Accrual Time Off: Updates the number of time off" - The Allocation ignores the worked time from the attendance ### Cause: `_get_accrual_plan_level_work_entry_prorata()` is called on each day of the accrual period. So `start_dt` is `datetime.datetime(2026, 1, 2, 0, 0)` and `end_dt` is `datetime.datetime(2026, 1, 3, 0, 0)` for example. This means that the search will always excludes attendances overlapping on two days. https://github.com/odoo/odoo/blob/26f3026ed45cc409cd7f67fa219d44f1adbac9b7/addons/hr_holidays_attendance/models/hr_leave_allocation.py#L79-L83 ### Solution: To count the attendances on several days, we need to split these attendances by day because `_get_accrual_plan_level_work_entry_prorata()` is only called with an interval of one day from midnight to midnight. First we get all attendances overlapping with the day by changing the domain in the search. Then we could simply take the difference between `max(attendance.check_in, start_dt)` and `min(attendance.check_out, end_dt)` but we also need to remove the lunch breaks (they were not counted in `attendance.worked_hours`). This would mean duplicating the code present in `_compute_worked_hours()`. To avoid this we create a new method for `hr.attendance` named `_get_worked_hours_in_range()`. That returns the number of hours worked due to this attendance in a given time frame. This new method can be used in both cases to get the needed value. opw-5172669
This update corrects a bug where the 'Today' filter in the Frontdesk module was incorrectly filtering visitors based on the user's local timezone. The fix converts all date/time values to UTC before querying the database, ensuring accurate filtering regardless of the user's location. This prevents visitors from being missed when check-in times are recorded in different timezones.
Original PR description
Steps to reproduce -------------------------- 1. Install Frontdesk 2. Go to Frontdesk → Visitors 3. Create a visitor with a check-in time before today 05:30 (local timezone: Asia/Kolkata) 4. Check visitors Issue: -------- The created record is not displayed because "today" filter used the user's local date to build a datetime range but failed to convert those boundaries to UTC before querying the database, leading to incorrect filtering in non-UTC time zones. Solution ------------- Convert those datetimes to UTC using `.to_utc()` in the filter domain opw-5385995 Forward-Port-Of: odoo/enterprise#102865
This update fixes an error where tax amounts were incorrectly identified as discounts in the MyInvois XML invoices generated for Malaysian e-invoices. The change ensures that tax-excluded amounts are used for discount calculations, aligning with Peppol Malaysia specifications and preventing inaccurate reporting. This ensures compliance with e-invoice standards.
Original PR description
The _add_consolidated_invoice_base_lines_vals method computed the gross subtotal using `price_unit * quantity`. When taxes are configured as "Included in Price", `price_unit` contains the…
The _add_consolidated_invoice_base_lines_vals method computed the gross subtotal using `price_unit * quantity`. When taxes are configured as "Included in Price", `price_unit` contains the tax-included amount, but `total_excluded` (used for the discounted amount) is tax-excluded.
This caused the tax amount to be incorrectly reported as an AllowanceCharge (discount) in the MyInvois XML, because:
discount_amount = price_unit * qty - total_excluded
= tax_included - tax_excluded
= TAX AMOUNT (not a discount!)
Example: Product priced at 110 MYR with 10% tax included:
- price_unit = 110 (tax-included)
- total_excluded = 100 (tax-excluded: 110 / 1.10)
- discount_amount = 110 - 100 = 10 ← incorrectly reported as discount
refs:
The cac:AllowanceCharge element in UBL is specifically for discounts and surcharges, NOT for taxes. According to the Peppol Malaysia e-Invoice specification:
https://docs.peppol.eu/poac/my/pint-my-sb/bis/#_allowances_and_charges
https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL5189/ (For this case we are interested in code 95)
Steps to Reproduce:
1. Configure a tax as "Included in Price" with Malaysia tax type
2. Create a product with that tax.
3. Create POS orders without any discount
4. Generate consolidated invoice and XML
5. XML incorrectly shows <cac:AllowanceCharge> with tax amount as discount
The fix uses `raw_total_excluded / discount_factor` (always tax-excluded) instead of `price_unit * quantity` (may be tax-included), consistent with the parent method:
https://github.com/odoo/odoo/blob/d645361a95037ac580d55e80bcb61d1eeb293efd/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py#L1846-L1876
Ticket [link](https://www.odoo.com/odoo/project.task/5476526)
opw-5476526
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update corrects a previous issue where confirming one upsell on a subscription would leave other upsells in a pending state. Now, confirming any upsell automatically cancels all remaining upsells associated with that subscription, ensuring accurate order status and preventing unnecessary charges.
Original PR description
Currently, when creating multiple upsells for a specific subscription, confirming one of them leaves the others in the sent state instead of cancelling them. This fix ensures that all other upsells for the same subscription are cancelled once one upsell is confirmed. task-5270139 Forward-Port-Of: odoo/enterprise#100058
This update corrects a calculation error in the Kenyan payroll (l10n_ke_hr_payroll) module related to secondary contracts. The fix replaces an undefined variable with the total taxable gross, ensuring accurate payslip computations for employees on secondary contracts. This resolves a discrepancy in payroll amounts.
Original PR description
Steps to reproduce: With a Kenyan company, create an employee. Check the "Secondary Contract" on the employee form view. Create a payslip and compute. There is an error in the payslip computation. Cause: There is an undefined variable "remaining_gross". Fix: Replace it by the total taxable gross. Task: 5462310
This update resolves a technical issue that prevented discounts with zero minor amounts (like 100% discounts with shipping) from processing correctly through the Express Stripe checkout. The change adjusts how the system handles minor amounts, ensuring accurate discount calculations and preventing a traceback. This ensures all discount codes, including those with zero minor amounts, function as expected.
Original PR description
### Issue: Due to this issue, there is a traceback, in express stripe checkout when there is a 100% discount and shipping cost. Steps to reproduce: 1- Setup `Stripe` as the only payment provider in the db. 2- Create a discount code with 100% discount on order. 3- Set a fixed price on the delivery method. 4- On shop, add a product to cart, and then enter the discount code. 5- Refresh the page. There is a traceback. #### Cause: This issue is introduced after #209103, which set `minor_amount` to amount excluding delivery. In the case it's 0, it's not going to be rendered on express_checkout view as it is false. Which cause a traceback here: https://github.com/odoo/odoo/blob/8f7e3d588c6c1189e64442a33037666d5d70aae7/addons/payment_stripe/static/src/js/express_checkout_form.js#L73-L81 opw-5482646
This update resolves a problem where long item codes were causing errors in the AvaTax integration. The system now automatically limits item codes to 50 characters, ensuring successful tax calculations and preventing transaction failures. This improves the reliability of our tax processing.
Original PR description
Link to Avalara (Avatax) documentation: https://developer.avalara.com/api-reference/avatax/rest/v2/models/LineItemModel/ Expected Behaviour: The itemCode sent to the AvaTax API should be 50…
Link to Avalara (Avatax) documentation: https://developer.avalara.com/api-reference/avatax/rest/v2/models/LineItemModel/ Expected Behaviour: The itemCode sent to the AvaTax API should be 50 characters or fewer to comply with Avalara's field length constraints. Actual Behaviour before the Fix: When an itemCode exceeded 50 characters, the system attempted to send the request as-is. This resulted in the AvaTax API returning an error, causing the transaction or tax calculation to fail. Behaviour with the Fix: The system now ensures that the itemCode adheres to the 50-character limit before the API call is made, by trancating the code to the first 50 characters if it exceeds 50 characters. This prevents API rejection and ensures successful tax processing for items with long identifiers. Steps to reproduce: 1. Create or select a product/item with a reference (or barcode if using UPC) longer than 50 characters. 2. Trigger an action that calculates tax via the AvaTax integration (e.g., creating an invoice or updating a line item). 3. Observe the API response. - Before fix: API returns a validation error regarding the itemCode length. - After fix: Request is successful as the itemCode is properly handled/validated. opw-5406451
This update resolves several issues related to the HR payroll reporting module (l10n_hr_edi). Specifically, it corrects errors in XML generation, ensures the MER payment report button displays correctly, and enhances error handling for reporting processes. These changes improve the reliability and accuracy of payroll data.
Original PR description
- Adjusting the hrextac xmlns to the updated one - Adjusting MER payment report button to not show incorrectly - Improving error handling for MER payment reporting task-none --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where a UserError during bill import could cause duplicate entries in peppol fetching. The fix allows for unlinked bills and handles unexpected errors after move creation, ensuring imports continue without interruption. This improves the reliability of our peppol integration.
Original PR description
Backport of https://github.com/odoo/odoo/commit/71de6902d73bec32f93e3be8f4de4ec89e9dc987 A UserError there can cause duplicates in peppol fetching. It should never block an ack. We can leave them unlinked We also do the same for any unexpected error that occurs after we've created the move. opw-5492092 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where unused coupon IDs were incorrectly displayed in loyalty coupon history, causing user confusion. The fix ensures that coupon IDs are properly removed when rewards are applied or the reward dialog is closed, improving data clarity. While a complete solution requires a view update, the current fix remains stable and addresses the core problem.
Original PR description
### Issue: Due to this issue, `coupon_ids` which are never used are still shown in loyalty coupons history which is confusing for users. #### Steps to reproduce: 1- Create two promotions: - Promo A:…
### Issue: Due to this issue, `coupon_ids` which are never used are still shown in loyalty coupons history which is confusing for users. #### Steps to reproduce: 1- Create two promotions: - Promo A: 10% discount - Promo B: 20% discount 2- Create a SO and add a line. Then confirm the SO. 3- Click on `Reward` button. 4- A dialog should show both promos. Discard the dialog. 5- Navigate to `Discount and Loyalty`. 6- Open Promo A and B and you can see both have lines with `coupon_id.order_id` = `created SO` which is confusing. `Issue 1` 7- Navigate back to SO. Click on `Reward` and select Promo A, apply. 8- Navigate to Promo B. As you see the the `coupon_id` related to the SO is still there. `Issue 2` ### Cause and Fix: This is due to unlinking `coupon_ids` only in SO confirm action, causing this issue on already confirmed SOs: https://github.com/odoo/odoo/blob/604d07ab324caa5f3aa6f3baa9902c2137ea24db/addons/sale_loyalty/models/sale_order.py#L132-L136 We can fix this issue by `unlinking` the `coupons_ids` when a reward is applied or the dialog is discarded. However there are 2 limitations: 1- The view needs to be updated. Otherwise, `coupon_ids` will not be deleted upon clicking on `discard` button. However the fix is still stable. 2- What if the dialog is closed with the cross button or the tab is closed without selecting a reward? In that case the issue will still persist. To fix these issues, we can show only used `coupon_ids` in `loyalty_coupon_id` list view. However that cannot be done in stable as it requires `use_count` to be stored. NB: With some complex filters this also could be fixed on stable but not worth it. opw-5424753
This update corrects a previous issue where attendee information wasn't consistently populated during event registration through the POS system. Now, the system prioritizes the first valid answer to identification questions (like name and email) when 'once per order' is enabled, ensuring accurate attendee data is recorded. This improves the reliability of event attendee information.
Original PR description
When pos_event was added, a difference in behavior with the existing registration flow in website_event was missed. When answering an 'identification question' (name, email, phone, company_type) with…
When pos_event was added, a difference in behavior with the existing registration flow in website_event was missed. When answering an 'identification question' (name, email, phone, company_type) with the 'once per order' enabled, the values should be used and propagated directly on the created event.registration records, with precedence over other answers given to individual questions (not once per order) STEPS ===== 1. Create a new event with name, email questions, once per order ticked. 2. Go to POS (reload data if needed) 3. Register and answer both questions 4. Continue the pos flow until both registrations are created 5. Go to backend > your event > registrations 6. You can see that even if the answers are propagated in the o2m field registration_answer_ids, which is expected, the attendee's name and attendee's email fields are empty. They should contain the values of step 3. FIX === Align the website_event flow and precedence of OPO questions over individual answers in pos_event. Now, the first non-null answer of an OPO question will be used for each of the question_type values listed above, if any, over answers to individual questions. Also align the fact that after OPO answers, precedence should be given to the first non-null answer to a given question type for identification questions, and not the last as it is currently. Task-4919080
This update fixes an issue where repair invoices were incorrectly calculating the cost of goods sold (COGS). The problem stemmed from how stock movements were linked to repair orders, leading to an inflated COGS value. The fix ensures accurate COGS calculation by verifying the sale order's movement instead.
Original PR description
1) Create a product with FIFO - automated costing method 2) Initial quantities updated 2 with the unit value 7. (2*7) =14 3) Create purchase order with 1 unit and price 10 4) Add this product into the repair order (as a line) > Validate the repair 5) Create a sale order from the repair order 6) Settle this sale order from the POS > Invoice the order Expected behavior: A cogs for 7$ Current behavior: A cogs with 8$( std price ) It happens because the stock.move are linked to the repair order and not generated from the PoS. So the cogs value can't be retrieve in the usual way. In order to fix it, we check the move linked to the sale.order if there is no move generated by the pos.
This update corrects a bug where attendance overlaps weren't being properly accounted for in hourly accrual plans. The change adjusts how attendances are calculated to ensure accurate time-off accrual, particularly for employees with shifts that span multiple days. This improves the reliability of time-off tracking.
Original PR description
### Issue: Attendances overlapping on two days are ignored for hourly accrual plans based on attendances. ### Steps to reproduce: - Install 'hr_holidays_attendance' - In Time Off > Configuration >…
### Issue: Attendances overlapping on two days are ignored for hourly accrual plans based on attendances. ### Steps to reproduce: - Install 'hr_holidays_attendance' - In Time Off > Configuration > Accrual Plan, create a new plan - Based on worked time - Hourly rule - Attendances as Source - In Management > Allocations, create an allocation for an employee using the new accrual plan - Create an Attendance for this employee in the period of the Accrual Plan - Check-in at 22pm for example - Check-out at 7am - Run the cron "Accrual Time Off: Updates the number of time off" - The Allocation ignores the worked time from the attendance ### Cause: `_get_accrual_plan_level_work_entry_prorata()` is called on each day of the accrual period. So `start_dt` is `datetime.datetime(2026, 1, 2, 0, 0)` and `end_dt` is `datetime.datetime(2026, 1, 3, 0, 0)` for example. This means that the search will always excludes attendances overlapping on two days. https://github.com/odoo/odoo/blob/26f3026ed45cc409cd7f67fa219d44f1adbac9b7/addons/hr_holidays_attendance/models/hr_leave_allocation.py#L79-L83 ### Solution: To count the attendances on several days, we need to split these attendances by day because `_get_accrual_plan_level_work_entry_prorata()` is only called with an interval of one day from midnight to midnight. First we get all attendances overlapping with the day by changing the domain in the search. Then we could simply take the difference between `max(attendance.check_in, start_dt)` and `min(attendance.check_out, end_dt)` but we also need to remove the lunch breaks (they were not counted in `attendance.worked_hours`). This would mean duplicating the code present in `_compute_worked_hours()`. To avoid this we create a new method for `hr.attendance` named `_get_worked_hours_in_range()`. That returns the number of hours worked due to this attendance in a given time frame. This new method can be used in both cases to get the needed value. opw-5172669 Forward-Port-Of: odoo/odoo#246270
This update fixes a bug related to how Odoo handles responses from the Zatca system when obtaining CCSID or PCSID information. Previously, missing error messages led to confusing tracebacks for users. Now, the system checks CSR field lengths and provides a clearer error message to the user, ensuring smoother Zatca onboarding.
Original PR description
Previously, it was assumed that if no 'error' or 'errors' key was present that means we've received a valid response for obtaining CCSID or PCSID. But sometimes the error is not sent with those keys, and the binarySecurityToken is missing, therefore a traceback is shown to the user because the invalid requests passes through the validation unnoticed. This kind of response is the result of a new change introduced by zatca requiring csr fields to be at most 64 characters long. This commit improves the error handling mechanism of CSID responses, to show the user an informative message, and handles the length check for csr fields on the client side before sending to zatca. task-5347269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244507
This update resolves a memory issue that occurred when exporting financial data (FEC) from large Odoo databases. By streaming the export process, the change significantly reduces memory usage and prevents potential errors, ensuring smoother and more reliable data exports.
Original PR description
On large databases (millions of account moves), The FEC exported file can be huge. This resulted in memory error since at some point we have the entire file in memory. This commit aims to overcome this issue by streaming the content of the file to the user. task-5404142 Forward-Port-Of: odoo/odoo#245798 Forward-Port-Of: odoo/odoo#240981
This update resolves an issue where the General Ledger XLSX export occasionally produced incomplete reports, leading to unbalanced financial summaries. The fix ensures all relevant accounts, including those with related journal entries, are included in the export based on the report's date range. This improves the accuracy and reliability of the financial reporting.
Original PR description
A recent PR improved the performance of the General Ledger Report XLSX export in v17 because it used to raise memory errors and crash when there were too many lines. Task: 5476982 PR:…
A recent PR improved the performance of the General Ledger Report XLSX export in v17 because it used to raise memory errors and crash when there were too many lines. Task: 5476982 PR: [103329](https://github.com/odoo/enterprise/pull/103329) After this change, we now search for the accounts to include in the file with `_get_accounts_with_move_lines`. Some accounts are filtered out if the points below are all true: 1. The `account_type` != 'equity_unaffected' 2. The `account.include_initial_balance` is FALSE (or NULL after a recent fix) 3. There are no amls with a date within the date range of the report This last point is problematic, the general ledger should include accounts with amls if they are dated in the financial year corresponding to the `date_from` value, unless the `general_ledger_strict_range` option is activated. We do not list the journal entries in the report if their date precedes the starting date of the report, but we still perform a sum of their balance/debit/credit with `_get_query_sums()`. Steps to reproduce the issue: 1. Create a fresh db in v17 and install the accounting app with demo data 2. Navigate to the General Ledger and select tomorrow as a starting date 3. Export the report as an XLSX file 4. Some accounts are missing in the XLSX file and the report is unbalanced Tickets: opw-5868482 opw-5787298 Forward-Port-Of: odoo/enterprise#105871
This update simplifies the subscription plan view by removing irrelevant order line details like sections and discounts. The change focuses on displaying only the actual products included in the subscription, leading to a cleaner and more user-friendly experience for configuring subscription plans.
Original PR description
The subscription plan view was displaying all order line types, including sections, notes, and discount lines, which added unnecessary clutter. This update filters the order lines to display only actual subscription products, improving clarity and usability in the plan configuration. task-5404614
This update fixes an issue where invoice prices were displayed with incorrect decimal precision. The system now dynamically adjusts the decimal precision based on the number of digits in the price, ensuring accurate and consistent formatting in both the web interface and PDF invoices. This improves the user experience and data accuracy for financial reporting.
Original PR description
8c199f7783527735b35c9fbda334cbdcd55a004f introduced minimum precision for float fields, but it has a display issue. Steps to reproduce: - create an invoice, set the price of an an invoice line to `9417.2` -> the web client displays `'9,417.200000000001'` Issue: In case of a minimum precision, the precision was set to 12. But it should be dynamic in regards to the number of integer digits. Solution: The precision is set to: 15 - number of integer digits -- Also implementing the same logic in qweb, but by keeping a maximum precision of 6. To reproduce in qweb: - create a an invoice with an invoice line of `300000000031.3` - post and print -> the price unit on the pdf shows "300,000,000,031.300232" opw-5880951
This update resolves an issue preventing website designers with 'Editor and Designer' access from optimizing the SEO settings for product categories. The fix grants necessary write permissions to category records, allowing designers to implement SEO best practices. This improves the functionality for website design teams.
Original PR description
### Issue: Due to this issue, website designer cannot optimize seo on category. #### Steps to reproduce: 1- Create a `eCommerce Category`. 2- In demo user, set Sale access to `All Documents` and Website access to `Editor and Designer`. 3- Login with demo user and navigate to website. 4- In shop page, open category. 5- From site tab, click on `Optimize SEO`. You get access error. Expected: You should be able to optimize seo with `Editor and Designer` access. ### Cause: The user needs write access on record in order to optimize seo: https://github.com/odoo/odoo/blob/ec5da99ca3f52420e7d973c3cf07167bd4104ffa/addons/website/controllers/main.py#L831-L834 opw-5443854