Daily updates from Odoo
Tuesday, May 19, 2026
59 changes · master
New functionality added to Odoo
This update enables Peruvian withholding agents to automatically generate and submit electronic retention documents (Comprobantes de Retención) to SUNAT. It streamlines the process of sending UBL 2.0 XML files via SUNAT, Estela, or IAP, ensuring compliance with local regulations. The changes improve reusability and flexibility for handling retention payments.
Original PR description
Appointed withholding agents in Peru need to submit a Comprobante de Retención to SUNAT when paying vendor bills with IGV retention. This module handles generating the UBL 2.0 XML, signing it, and sending it to SUNAT's Otroscpe endpoint. Supports SUNAT, Estela, and IAP providers. Also refactors `l10n_pe_edi` to extract `_l10n_pe_edi_send_bill_sunat_estela` as a reusable `@api.model` method and fixes the `@api.model` annotations on shared helpers (`_l10n_pe_edi_sign`, `_l10n_pe_edi_decode_soap_response`, `_l10n_pe_edi_extract_cdr_status`) so they can be called from other models. task-4980644 odoo/odoo#259771
This pull request updates the localization files (.weblate.json) for the account_accountant_fleet module, adding support for several new languages including Arabic, Spanish, and Finnish. This ensures the Odoo Enterprise application is properly translated and accessible to a wider range of international users.
Original PR description
Forward-Port-Of: odoo/enterprise#117623
This update ensures that new features related to planning templates, specifically the addition of company and worksheet template fields, are thoroughly tested. These tests improve the stability and reliability of the planning module by verifying correct functionality and data handling.
Original PR description
The purpose of this commit is to ensure that the code of the following PR: https://github.com/odoo/enterprise/pull/112198 is properly tested. We add tests related to the addition of the `company_id` field on planning.slot.template, as well as the addition of `worksheet_template_id` field. task-6147827 Forward-Port-Of: odoo/enterprise#115286
Enhancements to existing features
This update enhances the user experience of the Odoo portal by standardizing the capitalization of chatter headers. Additionally, the chatter header has been moved to its template, streamlining the design and making future updates easier. This improves consistency and maintainability of the portal interface.
Original PR description
* = planning_field_service, sign Community PR: https://github.com/odoo/odoo/pull/255516 This commit improves the portal chatter UX by adapting the capitalization of the chatter header. This commit also moves the portal chatter header to its template, reducing repetitions and making it easier to adapt in the future. task-6041769
This update removes restrictions on the fiduciary VAT field in the connection wizard for the Codabox BE localization module. This change provides greater flexibility for users managing fiduciary VAT settings, streamlining the connection process. It addresses a previous limitation impacting VAT configuration.
Original PR description
This commit will remove the readonly on the fiduciary_vat in the connection wizard. It will give more flexibility for fiduciary. task-6148930 Forward-Port-Of: odoo/enterprise#115752
This update automatically calculates and corrects missing simple and double holiday pay at year-end and contract termination, ensuring accurate payroll calculations. Previously, manual adjustments were required; now, the system automatically addresses discrepancies based on payment history. Users retain the ability to manually adjust the results if needed.
Original PR description
This commit removes the holiday pay recovery wizard and replaces it with salary rules applied automatically in December payslips and in termination fees payslips for joint committee 200. The…
This commit removes the holiday pay recovery wizard and replaces it with salary rules
applied automatically in December payslips and in termination fees payslips for
joint committee 200.
The regularization now computes the missing simple and double holiday pay when the
amount paid during the year is lower than the amount due, both at year-end and at
contract end. If the amount already paid is higher, no correction is applied.
The implementation:
- computes remuneration N-1 including fictive salary for assimilated absences
- applies a different N-1 remuneration depending on the context:
- departure attest: includes 13th month salary
- December settlement: excludes 13th month salary
- computes simple holiday pay due as 7.67% of remuneration N-1
- computes simple holiday pay recovery as max(due - received, 0)
- computes double holiday pay due based on the higher of:
- 7.67% of remuneration N-1
- the wage of the month when the employee reached half of their legal holidays
- computes double holiday pay recovery as max(due - received, 0)
- splits double holiday pay into base and complementary components
- uses the Partena-based logic to determine the main holiday month
Users can still manually adjust the result directly on payslip lines when needed.
Related PRs:
upgrade: [github.com/odoo/upgrade/pull/9628](http://github.com/odoo/upgrade/pull/9628)
task-5429973This update ensures that employees' departure dates are now accurately reflected on their final payslip, including the period covered by that payslip. This change also adds the departure date to termination holiday attestations, providing clearer and more complete payroll and HR documentation. This improves data accuracy and simplifies reporting.
Original PR description
After this commit, the departure date of the employee is shown on their last payslip (departure date included in the pay period of the payslip) as well as on their termination holiday attest. task-6227661
This update automatically scrolls the knowledge sidebar to highlight the currently active article, making it easier for users to find related content. This enhancement streamlines navigation within the knowledge base, reducing user friction. A key change prevents scrolling when accessing favorites, ensuring a smooth experience.
Original PR description
This PR introduces auto-scroll in the sidebar for knowledge articles, so that the active article will always be visible in the left-side menu. This improves navigation, ensuring that users can easily access related articles without manually scrolling the sidebar. Note: Clicking on an article in favorites section, it shouldn't scroll to try to find it at the bottom of the workspace. Task-5448667
This update cleans up the action menu within the Sales Order module, streamlining the user experience. The action's name has been updated for clarity and consistency. This change improves the overall usability of the sales order process.
Original PR description
In the Action menu (accessed via the gear icon), action has been renamed. Community PR: https://github.com/odoo/odoo/pull/257925 tasks-6088366
This update allows timesheet managers to approve their own timesheets, streamlining the approval process for self-managers. This change simplifies workflow and reduces the need for manual intervention when a manager approves their own work. It's a minor improvement to the timesheet management system.
Original PR description
Timesheet managers can approve their own timesheets if they have access to all timesheets and they assigned themselves as their timesheet approver task-4755604
This update enhances the frontdesk module to comply with GDPR regulations by adding required data disclosure fields. Additionally, a critical bug causing the frontdesk to fail to open in debug mode has been resolved, ensuring proper functionality.
Original PR description
Adds two fields displayed on the frontdesk for legal compliance reasons, to detail what is the data used for. This PR also fixes a bug, where the frontdesk fails opening due to missing props when we try in debug mode. Task-6123620
This update simplifies the management of Fiskaly configurations by moving them to the main Company Settings within Odoo. Removing a redundant field streamlines the user experience and ensures consistency in how POS configurations are handled.
Original PR description
In this commit: ------------------- - The Fiskaly configuration has been moved from the Company form view to the pos config settings. Since most POS configurations are managed from the POS configurations, this improves consistency and provides a better user experience. - The `managed_by_odoo` field has been removed as it is no longer exposed to users and there is no practical way for them to use it, which makes the field redundant. Related PR Community PR: https://github.com/odoo/odoo/pull/254559 Upgrade PR:https://github.com/odoo/upgrade/pull/9639 Task: 6018516
Resolved issues and error corrections
This update resolves an issue where creating two overtime shifts for the same day, particularly on non-working days, would trigger an error. The fix addresses a timing discrepancy in how overtime start and end times are calculated, preventing the 'Expected singleton' error. This ensures overtime is correctly registered when multiple shifts are scheduled.
Original PR description
__ ## Short functional explanation of the error When we create 2 shifts for the same day for an employee, on a non-working day for their schedule. When trying to create the second one after setting…
__ ## Short functional explanation of the error When we create 2 shifts for the same day for an employee, on a non-working day for their schedule. When trying to create the second one after setting the end date to midnight, we get the error: `ValueError: Expected singleton: hr.attendance.overtime.line(2, 3)` ## Reproduction Steps 1. Create an Employee. In the Payroll tab, Make sure they have an active contract. Set their Working Hours to a fixed schedule, where they have saturdays as non-working days. In the Settings tab, set an Overtime Ruleset. 2. Click on the overtime ruleset. Then, for each rule, under Action, set the Work Entry Type To Use as Overtime Hours. 3. Go to Attendances. In Configuration > Settings, under Extra Hours, set the Extra Hours Validation as Approved By Manager. 4. Create an attendance for your Employee on a Saturday, from 12h to 18h. 5. Create a second attendance for your Employee on that same Saturday, from 18h to 00h00. Try to Save. Note: the timezone of your computer, the working schedule and the employee should be set at Brussels time. ### Expected behavior The Overtime is registered. ### Unexpected behavior An error occurs: `ValueError: Expected singleton: hr.attendance.overtime.line(2, 3)` ## Origin of the issue The end time of the overtime is defined as follows: https://github.com/odoo/enterprise/blob/47faff7d6c9da5572e3bad3ff5a55b40c2ba81ac/hr_work_entry_attendance/models/hr_version.py#L54-L56 However, in the case where our shift ends after the computed end of the day (in our case, the end time of the shift is 00:00:00 and the end of the day is set at 23:59:59), it creates some problems. The end time of the overtime is set 1 second too early. Later we compute the start time of the overtime as follows: https://github.com/odoo/enterprise/blob/47faff7d6c9da5572e3bad3ff5a55b40c2ba81ac/hr_work_entry_attendance/models/hr_version.py#L57 Thus, the time start of the overtime is also set one second too early. As our second shift starts right after the first one, after the execution of this code, we will get a second shift that starts before the end of the first one. Then, we add these values in a list: https://github.com/odoo/enterprise/blob/47faff7d6c9da5572e3bad3ff5a55b40c2ba81ac/hr_work_entry_attendance/models/hr_version.py#L59 which will contain overlapping timeframes, and with which we create an Interval: https://github.com/odoo/enterprise/blob/47faff7d6c9da5572e3bad3ff5a55b40c2ba81ac/hr_work_entry_attendance/models/hr_version.py#L60 But when we create an Interval with overlapping timeframes, we obtain only one interval as the timeframes are merged. https://github.com/odoo/enterprise/blob/47faff7d6c9da5572e3bad3ff5a55b40c2ba81ac/hr_work_entry_attendance/models/hr_version.py#L173 As a result, `overtime_intervals` will contain only one time frame with 2 different corresponding overtimes, which causes a singleton error when reaching: https://github.com/odoo/enterprise/blob/47faff7d6c9da5572e3bad3ff5a55b40c2ba81ac/hr_work_entry_attendance/models/hr_version.py#L179 __ opw-6096454 Forward-Port-Of: odoo/enterprise#117247 Forward-Port-Of: odoo/enterprise#114147
This update fixes a bug preventing users from selecting 'Custom Dates' and 'Specific Date' options when comparing accounting reports. The change aligns the report filter with a recent system update, ensuring the full range of date comparison options are available. This improves the usability of the Profit & Loss reporting feature.
Original PR description
**Problem:** The "Custom Dates" and "Specific Date" comparison options are missing from the Comparison dropdown in accounting reports. **Steps to reproduce:** 1. Go to Accounting > Reporting > Profit…
**Problem:** The "Custom Dates" and "Specific Date" comparison options are missing from the Comparison dropdown in accounting reports. **Steps to reproduce:** 1. Go to Accounting > Reporting > Profit & Loss 2. Click the Comparison dropdown 3. Only "No Comparison", "Previous Period", and "Same Period Last Year" are visible — "Custom Dates" is missing **Current behavior:** Custom date comparison options are not rendered. **Expected behavior:** "Custom Dates" (for range reports) and "Specific Date" (for single date reports) should appear in the Comparison dropdown. **Cause of the issue:** The date filter refactor (40484f985f5) restructured how the date mode is stored in options. Previously, `options.date.mode` held 'range' or 'single'. After the refactor, this key no longer exists — the mode is now stored as a boolean in `options.filter_date.range_mode`. The comparison filter template still checks `controller.cachedFilterOptions.date.mode`, which is now undefined, so both the range and single conditions always evaluate to false and the custom comparison options are never rendered. **Fix:** The comparison template was the only consumer not updated during the refactor. Aligning it to the new data path restores the options without any behavioral change. opw-6070402 Forward-Port-Of: odoo/enterprise#117099 Forward-Port-Of: odoo/enterprise#113391
This update fixes an issue where scanning a packaging barcode (like '6' for a 6-pack) intermittently added quantities to the wrong line in the stock picking process. The fix ensures the barcode scan correctly identifies and updates the intended packaging unit, resolving the alternating quantity issue.
Original PR description
Issue ----- When there are 2 lines for a single product and different packaging uoms, scanning a packaging barcode alternates between lines. Steps to reproduce ----- - Enable packagings - Create a…
Issue ----- When there are 2 lines for a single product and different packaging uoms, scanning a packaging barcode alternates between lines. Steps to reproduce ----- - Enable packagings - Create a product AAA - barcode 1 - Create a packaging 6-Pack - 6 units - barcode for AAA set to 6 - Create a PO - one line for 30 units of AAA - one line for 5 6-Pack of AAA - Confirm PO and open picking in barcode - Scan "6" multiple times > Quantity increases on both lines, alternating for each scan Cause ----- Both lines can be found as matching lines when doing https://github.com/odoo/enterprise/blob/d279632db25713dd639a51385cad197dfdbd2bdc/stock_barcode/static/src/models/barcode_model.js#L1426 The reason it alternates between the lines is because we set the currently selected line first in the array - and since both lines match, the `foundLine` returned ends up being the non-selected line. https://github.com/odoo/enterprise/blob/d279632db25713dd639a51385cad197dfdbd2bdc/stock_barcode/static/src/models/barcode_model.js#L1823-L1832 We can avoid this y refining the `break` condition of the loop to also match the packaging uom. ----- Ticket: opw-6034572 Forward-Port-Of: odoo/enterprise#116961 Forward-Port-Of: odoo/enterprise#112578
This update corrects a technical issue that prevented accurate payroll calculations when a payrun had no associated payslips. The fix ensures the system functions correctly regardless of the number of payslips generated, improving payroll accuracy and reliability. This change primarily impacts the Australian HR Payroll module.
Original PR description
If the payrun does not have any payslips, the _get_payslip_stp is called on an empty recordset, which causes the compute to fail. This commit fixes the _get_payslip_stp compute for empty recordset. task-6215823 Forward-Port-Of: odoo/enterprise#117198
This update resolves an issue preventing successful Envia deliveries in Chile. The problem stemmed from a mismatch between Odoo's state code mapping and Envia's API requirements, specifically regarding the format of the 'state' field. The code has been updated to correctly translate the Chilean state code, ensuring accurate delivery information is sent to Envia.
Original PR description
### Steps to reproduce: - Install delivery_envia - Website > Configuration > eCommerce > Delivery Methods > Envia - Enable the delivery method, sync the carrier and Publish it - With a portal user >…
### Steps to reproduce:
- Install delivery_envia
- Website > Configuration > eCommerce > Delivery Methods > Envia
- Enable the delivery method, sync the carrier and Publish it
- With a portal user > Shop > Add any product to your cart > Checkout
- Register an address a valid 'Chile' address and confirm say:
'street and Number': Avenida Providencia 1432, Depto 402
'city': Santiago 'zip': 8320000
'country': Chile 'state': Metropolitana
#### > Envia Error: Invalid Option - String is too long at #->properties:destination
### Cause of the issue:
The problem is caused by the fact that Envia's api expects a 2-3 digits to represent state codes: https://docs.envia.com/reference/state-by-code
The mapping from Odoo's code state representation to envia's one is expected ot be performed by this mapping:
https://github.com/odoo/enterprise/blob/75cba6d5a88ebc4e0f35040a173ac1c443638daf/delivery_envia/models/envia_request.py#L27-L43 when the address is converted here:
https://github.com/odoo/enterprise/blob/75cba6d5a88ebc4e0f35040a173ac1c443638daf/delivery_envia/models/envia_request.py#L535-L542 That being said, the `Chile`'s code states of have been changed in [6694a3942c58ff1a56c9e4b36edbe126dd1e66f8](https://github.com/odoo/odoo/commit/6694a3942c58ff1a56c9e4b36edbe126dd1e66f8) to match the official Iso but not in the Envia's mapping leading a failling match keeping the 4 charracter long `CL-RM` of the `Metropolitan` state provided in to the Envia's api as address data.
opw-6210007
Forward-Port-Of: odoo/enterprise#117280This update corrects a misleading warning message that appeared when a payslip was cancelled in Odoo Enterprise. The change ensures that users receive accurate information and a cleaner workflow when managing payslips. This improves the overall user experience and data consistency.
Original PR description
. Clear payslip warning after cancelling the payslip . Add corresponding tests task-6199148 Forward-Port-Of: odoo/enterprise#117507 Forward-Port-Of: odoo/enterprise#116859
This update resolves a validation error that occurred when creating intercompany invoices between companies in different regions (e.g., Belgium and Luxembourg). The fix ensures accurate tax calculations by correctly applying and recomputing taxes during intercompany transactions, preventing incompatible fiscal position warnings.
Original PR description
**Steps to reproduce:** * Install the *Accounting* module. * Install localisation modules for two different regions: * *Belgium* (**l10n_be**) * *Luxembourg* (**l10n_lu**) * Configure two companies,…
**Steps to reproduce:** * Install the *Accounting* module. * Install localisation modules for two different regions: * *Belgium* (**l10n_be**) * *Luxembourg* (**l10n_lu**) * Configure two companies, each assigned to one of the above regions. * Create fiscal positions: * In the Belgium company, create a fiscal position for Luxembourg. * In the Luxembourg company, create a fiscal position for Belgium. * Go to *Accounting > Configuration > Settings*. Enable *Inter-Company Transactions*. Enable synchronization of *Vendor Bills and Invoices* for both companies. * Create an invoice in the Luxembourg company. Select a partner belonging to the Belgium company. Add a product with applicable taxes. **Observed behavior:** * A validation error is raised: 'This entry contains taxes that are not compatible with your fiscal position. Please check the country set in the fiscal position and in your tax configuration.' **Cause:** * During intercompany bill creation, a foreign fiscal position is applied before recomputing taxes. * If no mapped foreign taxes exist, the system keeps domestic purchase taxes. * This leads to a mismatch between taxes and fiscal position, triggering the validation error. **Fix:** * Add a safeguard in *_inter_company_create_invoices()*. * After *_inter_company_sync_invoice_line_taxes()* recomputes taxes, *_inter_company_has_incompatible_fiscal_position_taxes()* checks whether the fiscal position is incompatible. * If incompatible, the fiscal position is removed and taxes are recomputed without it. opw-6103671 Forward-Port-Of: odoo/enterprise#117450 Forward-Port-Of: odoo/enterprise#115085
This fix resolves an issue where payroll account merges incorrectly combined employee analytic distributions, leading to inaccurate financial reporting. The update ensures that each employee's specific analytic distribution is accurately reflected in the generated account move, regardless of overlapping accounts. This improves the precision of payroll accounting and reporting.
Original PR description
Steps to reproduce 1. Enable "Batch Account Move Lines" in the Payroll settings. 2. Configure two employees' versions with an analytic distribution on the same analytic account but with different…
Steps to reproduce
1. Enable "Batch Account Move Lines" in the Payroll settings.
2. Configure two employees' versions with an analytic distribution on the
same analytic account but with different percentages (e.g. {acc: 50}
for the first employee and {acc: 70} for the second).
3. Generate a payslip run containing both employees and validate it.
Issue
The generated account move aggregates the two payslips into a single
line whose analytic_distribution matches only the last employee being
processed; the other employee's percentage is silently lost.
`_get_existing_lines` decides whether an incoming line can merge into an
already accumulated one. When the incoming line has an analytic
distribution, the merge condition delegates to
`_check_partially_matching_accounts`:
https://github.com/odoo/enterprise/blob/e4a1326c7a8a74da7970aeaa9900c19d01634e31/hr_payroll_account/models/hr_payslip.py#L254-L271
https://github.com/odoo/enterprise/blob/e4a1326c7a8a74da7970aeaa9900c19d01634e31/hr_payroll_account/models/hr_payslip.py#L273-L283
That helper returns True as soon as any analytic account of the new
line appears anywhere in the existing line's distribution dict, without
comparing percentages. Two distributions such as {acc: 50} and
{acc: 70} share the same account, so the helper returns True, the
lines are merged, and whichever distribution ends up on the merged line
overwrites the other — the total amount is correct but the analytic
split is wrong.
The logic introduced in commit https://github.com/odoo-dev/enterprise/commit/e40a3166286a6bc546e9543b935233d2a110dc52 successfully addressed merging for rule-level distributions
with composite keys (e.g., {'13,7,12': 40}). However, that implementation is overly inclusive for employee-specific distributions.
It fails to differentiate between cases where the same analytic account is utilized across various employees but with different percentage allocations.
Because it only checks for an account overlap rather than a perfect distributional match, it incorrectly aggregates distinct financial dimensions into a single journal line
Solution
Compare the full analytic_distribution dict by strict equality. Lines
merge only when the distribution is identical (same keys AND same
percentages), keeping the batch feature anonymizing identically
configured employees while preserving one line per distinct
distribution.
opw-6102508
Forward-Port-Of: odoo/enterprise#117453
Forward-Port-Of: odoo/enterprise#114156This update corrects a technical issue where an approval rule was being applied incorrectly due to a duplicate XML ID. By renaming the duplicate ID, we've ensured that approval rules are applied correctly based on user and manager access levels, improving the reliability of the approval process. This resolves a potential inconsistency in how approvals were handled.
Original PR description
The XMLID `approval_approver_manager` was defined twice, causing the rule to be applied with the last evaluated access configuration for both `group_approval_user` and `group_approval_manager`. This commit renames the first occurrence of the duplicated XMLID to `approval_approver_user` to restore the intended separation between user-level and manager-level approval access rules. task-6095010 Forward-Port-Of: odoo/enterprise#113480
This update fixes an error in the calculation of basic salaries for Mexican employees, ensuring accurate payments based on full calendar days, including unpaid leave. Previously, unpaid leave was incorrectly prorated; now, the salary is calculated based on the full period, aligning with Mexican regulations and improving payroll accuracy.
Original PR description
In Mexico, the basic salary must be calculated based on the total calendar days of the period. This ensures that both worked days and non-working days (e.g. Sundays) contribute equally to the total…
In Mexico, the basic salary must be calculated based on the total calendar days of the period. This ensures that both worked days and non-working days (e.g. Sundays) contribute equally to the total payment. This calculation also applies to the daily schedule, as the proportional daily wage must be divided equivalently across the hours of the day. Current behavior: When an employee has an unpaid leave, the basic salary is incorrectly prorated using only the registered days/hours. Example: For a monthly wage of 30,000 MXN in a month with 22 scheduled days (21 attendances + 1 unpaid leave), the implicit daily rate becomes 1,363.63 (30,000 / 22). This leads to an incorrect basic salary of 28,636.36 MXN for the days worked. This also happens with unpaid leave for x hours, e.g., for 2 hours, the unpaid leave is calculated as 2 hours * (30,000 / (22 days * 8 hours)) = 340.90 MXN, which is incorrect. Expected behavior: The basic salary should be derived from the full period (e.g., 30 days for a month, 15 for a bi-weekly period). Example: For a 30,000 MXN wage, the daily rate should be 1,000 MXN (30,000 / 30 days). If there is 1 unpaid leave, the basic salary should be 29,000 MXN (29 days * 1,000 MXN), regardless of the number of scheduled working days in the calendar. For unpaid leaves by hours, e.g., for 2 hours, the unpaid leave should be calculated as 2 hours * (30,000 / (30 days * 8 hours)) = 250.00 MXN. To achieve this, the calculation of the days in the `_get_worked_day_lines` is: * Adjust worked days/hours for out-of-contract entries where necessary, ensuring that rest days(Sundays) are included in the count. * Get all worked hours in the lines. * Calculate the number of days to pay based on the total hours and the hours per day. ### Case: payslip does not cover the complete pay period Current behavior: If a payslip is created for a partial period, the total amount is the full period wage. Expected behavior: The total amount should be pro-rated based on the days of the period. For example, if a payslip is created for 25 days(with a monthly schedule pay), the total amount should be the daily salary multiplied by 25 days. To achieve this, `_compute_amount` is updated to calculate the wage based on the `l10n_mx_daily_salary`. Changes on tests: * Add: * `test_monthly_payslip_with_partial_leave`, `test_partial_payslip`, `test_partial_payslip_new_hire_month_31_days` and `test_partial_payslip_new_hire_month_28_days`. * `test_hourly_payslip_by_attendance` to validate when `Work Entry Source` is set to "attendance". * Update: * `test_hourly_payslip`, `test_monthly_payslip` and `test_partial_payslip_new_hire` to align with the new calculation. * Adjust payslips dates to match the `schedule_pay` in `test_regular_payslip_subsidy` and `test_weekly_schedule_pay_no_code` * Fix a one-day difference in `TestMxEdiHrPayrollCommon`(16 days instead of 15 days for a bi-weekly schedule), and update the corresponding CFDI values. * Refactor tests and add new helpers. ### Error on [warning issues generation][1] and [`_compute_is_wrong_duration`][2] The warning: `"The duration of the payslip is not accurate according to the structure type."` appears with these custom periods for Mexican Payroll, although the period is correct: * `10_days` * `14_days` * `bi-weekly` Steps to replicate: * Install `l10n_mx_hr_payroll` module. * Switch to "INNOVACION VALOR Y DESARROLLO SA SA" company. * Go to Employees and open "Cesar Osbaldo Cruz Solorzano". * Click on "Payroll" tab, change the "Pay Schedule" to any option listed above, for example "Bi-weekly". * Go to Payroll > Payslips > Payslips and create a new pay run. * Select Salary Structure 'Mexico: Regular Pay', Pay Schedule 'Bi-weekly' and the Period '01/01/2026 -> 01/15/2026'. * Click on "Continue", select Cesar and click on "Select". * It appears the warning issue. Problem: The warning is raised because of `slip.date_from + slip._get_schedule_timedelta() != slip.date_to` condition, because `_get_schedule_timedelta` function calls [`self._schedule_timedelta(schedule, self.date_from)`][3] without the `country_code` argument. In the Mexican Payroll [_schedule_timedelta is overriden][4] but it is necessary to call it with the country code to use the custom periods; similar to how the [`date_end` is computed][5]. Solution: Call `_get_schedule_timedelta` passing the `country_code` [1]: https://github.com/odoo/enterprise/blob/1666ac87b6cb40e904210fecd159df3ac5b6b33a/hr_payroll/models/hr_payslip.py#L1367 [2]: https://github.com/odoo/enterprise/blob/1666ac87b6cb40e904210fecd159df3ac5b6b33a/hr_payroll/models/hr_payslip.py#L1454 [3]: https://github.com/odoo/enterprise/blob/1666ac87b6cb40e904210fecd159df3ac5b6b33a/hr_payroll/models/hr_payslip.py#L275 [4]: https://github.com/odoo/enterprise/blob/1666ac87b6cb40e904210fecd159df3ac5b6b33a/l10n_mx_hr_payroll/models/hr_payslip.py#L58 [5]: https://github.com/odoo/enterprise/blob/1666ac87b6cb40e904210fecd159df3ac5b6b33a/hr_payroll/models/hr_payslip_run.py#L211 target: 19.0 task-6073601 Forward-Port-Of: odoo/enterprise#116883 Forward-Port-Of: odoo/enterprise#112524
This update resolves a limitation in the l10n_mx_edi module, allowing credit notes (out-refunds) to be configured with Payment Policy Details (PPD) as required by the Mexican SAT portal. Previously, this functionality was restricted, causing potential compliance issues. This change ensures accurate processing of Mexican tax refunds.
Original PR description
Currently, credit notes cannot be PPD (payment_policy), however, SAT portal allows it. **STEP TO REPRODUCE** 1. Install the l10n_mx_edi module. 2. Create an invoice with PPD (either changing it or through payment terms). 3. After send CFDI, generate a credit note and try to set PPD **FIX** Allow move_type = 'out_refund' to be PPD. Task-6049654 Forward-Port-Of: odoo/enterprise#114886
This update ensures that all employee groups, regardless of their type, receive the correct employer-paid rent posting account in payroll accounting. Previously, this setup was limited to a single group, leading to inconsistencies. This change maintains accurate and predictable payroll accounting behavior.
Original PR description
Before this commit, the employer-paid rent setup was only applied to one employee group. This could leave other employee groups without the expected rent posting account. After this commit, the same rent posting setup is applied for each available employee group. This keeps payroll accounting behavior consistent. Task-6175007 Forward-Port-Of: odoo/enterprise#115781
This update corrects a bug where the payment button was incorrectly displayed, leading to a blocked payment flow. Since a recent change, the system no longer verifies KYC completion before payment initiation, exposing users to a state where they cannot proceed with payments. This fix ensures the payment button accurately reflects the payment's active status.
Original PR description
Currently, is_payment_enabled is used to determine whether the payment button should be displayed. However, this field only indicates that the TPP / institution allow payment initiation, not that it's active. Since 19.2, `/initiate_payment` no longer checks whether the KYC flow has been completed before initiating a payment. As a result, users can now reach a blocked state where the payment flow is exposed but cannot actually proceed. No task ID Forward-Port-Of: odoo/enterprise#116743
This update resolves an issue where the total row in the Planning Gantt view wasn't accurately reflecting working hours when the view wasn't grouped by resources. The change improves data processing to ensure accurate working hour calculations regardless of grouping settings, enhancing planning visibility.
Original PR description
Issue: ---------------------------------------- In the Planning Gantt view when we don't group by resources, the total row is not considering the working hours. Steps to reproduce:…
Issue: ---------------------------------------- In the Planning Gantt view when we don't group by resources, the total row is not considering the working hours. Steps to reproduce: ---------------------------------------- - Open Planning - Remove the default group by resources - Have at least a planning slot for a non-flexible employee - The total row doesn't take the working schedule into account Cause: ---------------------------------------- Since [an improvement,](https://github.com/odoo/enterprise/commit/cc35e1a4729453e4f788034a94402ab048eadfcb) the working hours data in given to the `PlanningGanttRenderer` through the progress bars data. This is an issue because the progress bars are only there if we group by resources. ([src](https://github.com/odoo/enterprise/blob/423ab064847dd41d36778a812390e3bec53ba4dc/planning/models/planning_slot.py#L2669-L2678)) Solution: ---------------------------------------- In this commit we partially revert the commit adding the working intervals in the progress bars. Instead of doing it in `_gantt_progress_bar_resource_id()` we create a new method `_get_gantt_planning_data()` which is called directly in `get_gantt_data()` and returns useful information even when there are no progress bars. opw-5507063 Forward-Port-Of: odoo/enterprise#116914 Forward-Port-Of: odoo/enterprise#112522
This update resolves an issue where depositing money in Point of Sale (PoS) orders with presets enabled would incorrectly display a popup asking for a preset selection. The change ensures that PoS orders are correctly identified as 'settling accounts' immediately, preventing this unwanted popup and streamlining the deposit process. This improves the user experience for cash transactions.
Original PR description
Before this commit: ==================== depositing money for a partner in PoS with presets enabled could incorrectly trigger the preset selection popup. This happened because the order was not marked as is_settling_account early enough, so the preset selection logic did not ignore deposit orders. After this commit: ===================== is_settling_account is initialized during order setup and seeded immediately when the deposit order is fetched or created. As a result, deposit orders correctly bypass the preset selection flow. Task-6217580 Related Comm. PR-https://github.com/odoo/odoo/pull/264572 Forward-Port-Of: odoo/enterprise#117378
This update corrects a bug that was causing all employees to display a warning message during the initial payroll run, even when payslips hadn't been generated. The fix ensures that the warning only applies to payruns in the 'payslips' state, improving payroll accuracy and reducing unnecessary alerts for users.
Original PR description
The warning regarding payslips not in payrun is triggered even for the payrun you just created and for which payslips have not ye been generated. -> not considering payruns that are not in "payslips" state for user warning computation Task: 6198525
This update corrects a technical error that was consistently enabling a security feature (LNA) for all longpolling requests. The fix removes a mistakenly reintroduced parameter, ensuring LNA is only enabled when needed, improving system stability and efficiency. This resolves a potential configuration issue.
Original PR description
In odoo/enterprise#104157, the `headers` parameter was accidentally reintroduced to the `rpc` function of the longpolling class. This was causing `post` to be called with the wrong number of arguments, and a side-effect of this is that LNA was being enabled always for poll requests and never for action requests. This commit removes the headers parameter so that the function is called with the correct number of arguments. Forward-Port-Of: odoo/enterprise#117584
This update fixes an issue where the CO State Income Tax on payslips was incorrectly showing a positive value. This was due to a misinterpretation of tax withholding rules, aligning with previous fixes for Alabama. The change ensures that state income tax is accurately deducted from employee paychecks as a withholding, reflecting how individuals receive refunds when filing their income.
Original PR description
## Issue When generating a payslip for an employee of a company located in Colorado, the *CO State Income Tax* could end up positive. ## Steps to reproduce 1. Install *United States - Payroll*…
## Issue
When generating a payslip for an employee of a company located in Colorado, the *CO State Income Tax* could end up positive.
## Steps to reproduce
1. Install *United States - Payroll* (`l10n_us_hr_payroll`)
2. Set the current company's State to Colorado
3. Create an employee and a contract
- Wage: $0
- (Set the contract's status to *Running*)
- (In the payroll tab) State Withholding Allowance: $1000
4. Create a Payslip for the employee
- Structure: *"United States: Regular Pay"*
5. Compute Sheet
6. **In the _Salary Computation_ tab, the _CO State Income Tax_ line has a positive value**
## Justification
This fix is similar to the one applied for the AL(abama) state income tax by https://github.com/odoo/enterprise/commit/f0eeb55f1e3cf965c6a409675813d4a699e5fca6. That modification was justified by CAS (PO of US localizations for Payroll) in opw-5137280:
> *"Payroll taxes are always funds withheld from employee's paychecks, if there is a positive value it means the tax is a refund, not a withholding. Refunds happen when individuals file their income."*
## Note to reviewer
The test [`test_069_al_state_tax_0_income`](https://github.com/odoo/enterprise/blob/219d2a797ee2099c9d77c2defc9c9c5e1d504ffe/test_l10n_us_hr_payroll_account/tests/test_salary_rules.py#L957-L989) (added by the aforementioned commit https://github.com/odoo/enterprise/commit/f0eeb55f1e3cf965c6a409675813d4a699e5fca6) is wrongly indented and thus never executed. The test passes with the dedicated fix, and fails without it, as expected. Let me know if you want me to indent it correctly (in this commit or in an additional one).
opw-5999856
Forward-Port-Of: odoo/enterprise#117497
Forward-Port-Of: odoo/enterprise#112724This update aligns the subheaders and numerical data within Odoo's financial reports, ensuring a more visually consistent and professional presentation. Previously, the alignment of subheaders and figures was inconsistent, and this change standardizes the layout for improved readability and a better user experience.
Original PR description
Before this commit, subheaders of numeric columns were centered, while the figures in the columns were aligned to the end. This commit ensures that both the subheader and the figures are aligned the same way (center or end). task-6197223 Forward-Port-Of: odoo/enterprise#117477 Forward-Port-Of: odoo/enterprise#116578
This update fixes an error that occurred when generating the Appendix 142 report with no data. It now safely handles empty reports and updates the Vietnamese VAT return type to use a more comprehensive composite tax report. These changes ensure the report generates correctly even with limited data, improving data accuracy and reliability.
Original PR description
This commit addresses an issue where generating the Appendix 142 report with no data would result in an error, and updates the Vietnamese VAT return type to use the overarching composite tax report.…
This commit addresses an issue where generating the Appendix 142 report with no data would result in an error, and updates the Vietnamese VAT return type to use the overarching composite tax report. Modifications: - Added defensive checks to handle empty report lines. If the list is empty, it now safely returns the export HTML with default empty/zeroed contextual variables. Added bounds and existence checks for the base amount and VAT amount indexes to prevent out-of-bounds errors when evaluating purchase lines, sales lines, and section totals. - Changed the report reference on the Vietnamese tax return type record to use the composite tax report rather than the standalone form 01 report. - Swapped the data loading order in the module manifest to load tax report data before return data to resolve external ID dependencies. - Adjusted report sequences so the main Vietnamese Tax Report appears first (sequence 10) and the Purchase/Sale Invoice List appears second (sequence 20). Task-6216318
This update resolves an issue where the Attendance Discrepancies warning on the payroll dashboard incorrectly displayed all employees across all companies. The fix ensures the warning filters employees within the current company, providing more accurate and relevant reporting for payroll management. This improves the clarity and reliability of payroll data.
Original PR description
The Attendance Discrepancies warning on the payroll dashboard doesn't filter the employees in the current company and ends up showing all employees in all companies. Task: 6204269
This update fixes a potential error in calculating the employment bonus for employees on out-of-contract payslips. Previously, multiple payslips with overlapping worked hours could lead to double-counting, which has now been addressed to ensure accurate bonus calculations based on total workable hours.
Original PR description
In the case of out of contract payslips, we might have multiple payslips with worked day lines for the same month. In that case, we need to be careful to not count these hours twice when computing the employment bonus, which depends on the total "workable" hours for the month. task-6208125 Forward-Port-Of: odoo/enterprise#116862
This update fixes an issue where the 'step bubble' bar on payruns incorrectly displayed attendance status for employees. The change ensures that payrun bubbles accurately reflect employee tracking methods, resolving confusion and improving the user experience when updating employee settings.
Original PR description
Two bugs stem from the payrun "step bubble" bar (Employees → Time [→ Attendance] → Payslips): 1. When a payrun not containing attendance-tracked employees is opened first and I change one of the…
Two bugs stem from the payrun "step bubble" bar (Employees → Time [→ Attendance] → Payslips): 1. When a payrun not containing attendance-tracked employees is opened first and I change one of the employee's tracking method to attendance, going back via breadcrumb I'd see that the Attendance bubble incorrectly appears for the latter. The root cause is that cachePayRunSteps is a Map iterated in insertion order: "attendance" is appended after "payslip" the first time it is encountered, so it always renders last regardless of the server-defined canonical order. Fixed by turning it into an array overridden at every data fetch. 2. When navigating back to the payrun list via breadcrumb after changing the last of an employee's work_entry_source (e.g. removing the last attendance-tracked employee from a payrun), the bubble still shows the previous state. Fixed by marking the payrun as fresh when following specific flow, preventing the reload of the bubbles using instead the previously cached ones. task-5959087 Forward-Port-Of: odoo/enterprise#117590
This update fixes an issue where the rental report was displaying incorrect dates. The fix ensures that each row in the report accurately reflects the start and return dates of the rental order, providing more reliable reporting data. This improves the accuracy of rental tracking and reporting.
Original PR description
The rental report is a daily report with x rows by rental order, with x the days between the start and return dates. With generate_series inside the select, the query was creating x rows with the same id, resulting in the date field not being correctly displayed (one unique date, the start date). This fix corrects the generation of the report to display the real date on each row. opw-5266525 Forward-Port-Of: odoo/enterprise#116948 Forward-Port-Of: odoo/enterprise#104764
This update fixes a potential crash in the Gantt chart caused by incorrect drag initiation. The change reintroduces a safeguard to ensure the chart only initiates a drag when a valid target is available, preventing unexpected errors and improving overall stability.
Original PR description
In https://github.com/odoo/enterprise/pull/113438, it was incorrectly assumed that it would be impossible to initiate a pill drag without a valid target being found. This commit reintroduces a strict safeguard to handle scenarios where the drag is triggered with no valid cell target. This prevents unexpected crashes encountered during test executions. runbot-error-242486 Forward-Port-Of: odoo/enterprise#116619
This update fixes an issue where Knowledge articles appeared narrow when printed on large screens. The fix prevents a CSS rule from restricting the article's width, ensuring proper formatting and readability when exporting to PDF or printing. This improves the user experience for viewing and sharing Knowledge content.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update allows users to reorder rental orders through the portal, addressing a previous limitation where the 'Order Again' button was missing. This enhancement improves the user experience for rental order management and ensures users can easily modify their rental agreements.
Original PR description
Rental orders could not be reordered from the portal because the "Order Again" button was not displayed. This commit enables the reorder flow for rental orders as well. task-6140187
This change addresses a frustrating user experience where physical expense cards get stuck in a pending state due to shipping delays. Users are now able to manually block these cards, preventing them from remaining indefinitely blocked and improving their ability to manage their expenses. This is a simple fix to improve user workflow.
Original PR description
Expenses created by expense cards can't be deleted for audit reasons. However, it is frustrating for users not to be able to clean their expenses afterwards. It happens that physical cards aren't delivered to cardholders. The shipping company is supposed to send us the failed shipping state, but it sometimes doesn't. The user can't therefore do anything besides activating the card that hasn't been shipped. He is blocked and the card will stay pending indefinitely. task: 5904913
This update resolves issues with the Swedish ISO 20022 XML format used for bank payments. Specifically, it ensures mandatory fields are always included and updates the structure to align with current banking standards, particularly regarding bank identification codes (BIC) for greater accuracy and compatibility with Nordea bank.
Original PR description
Here is few fixes added to the swedish iso 20022 XML: - CdtrAgt seems to be always mandatory, change the condition in `_skip_CdtrAgt` to always use the CdtrAgt if payment_method is iso20022_se - The `_is_se_bban` is too restrictive, this should be always True when payment method is swedish iso - The `FinInstnId` node can either contain BIC or ClrSysMmbId. But as ClrSysMmbId seems to change from one bank to another, it's more relevant to always use the BIC. opw-5395736 Forward-Port-Of: odoo/enterprise#117574 Forward-Port-Of: odoo/enterprise#114662
This update fixes an issue where tax return entries incorrectly included taxes from multiple regions (like British Columbia). Now, tax return entries accurately reflect taxes specific to the return type and region (e.g., Manitoba PST), ensuring accurate tax reporting for businesses. This improves the reliability of tax return validation.
Original PR description
Issue: Validating a tax return creates an entry with all the tax aml from the company instead of filtering them according to the tax return type. Steps to reproduce: - In a company in Canada - Invoice a Customer from British Columbia in the previous month (A) - Confirm - Go to tax report -> Return - Review and Validate tax return for "Manitoba PST Return (CA)" for month A - Click on the 3 dots -> View Entry Current Behavior: - Entry has lines for PST in British-Columbia and GST taxes Expected behavior: - Entry has lines for PST in Manitoba only Cause: https://github.com/odoo/enterprise/pull/98158 introduces method `_get_vat_closing_entry_additional_domain` in the wrong class. opw-6065838 Forward-Port-Of: odoo/enterprise#116813 Forward-Port-Of: odoo/enterprise#116366
This update fixes an issue where file names in the Documents section of the chatter didn't update after a file was renamed. By using the correct 'attachment_name' field, the chatter now accurately displays the latest file name, ensuring users always see the most current document information. This improves data consistency and user experience.
Original PR description
**Before this PR:** When a file is renamed in Documents, the corresponding attachment in the chatter still displayed the old name. **Technical reason:** Renaming a file did not update its related attachment. Inverse method was removed here: https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e Therefore, now using `attachment_name` instead of `name` field in form view and `documents_details_panel`. **After this PR:** The attachment in the chatter will correctly reflect the updated file name. Task-5859824
This update resolves an issue where users without write access to the AT Point of Sale (PoS) would receive an access error when attempting to authenticate. The fix simulates a token expiration to reliably trigger the error, ensuring proper access control is enforced for users with limited permissions.
Original PR description
When trying to auth directly from the PoS when the token expires, if you are logged in with a user that doesn't have write access to the PoS. You would get an access error. Steps to reproduce: ------------------- * Setup Fiskaly in an AT company * Open PoS and try to make a sale * To fake the token expiration I modified the code so that the request always return 401 status code > Observation: You get an access error opw-5925203 Forward-Port-Of: odoo/enterprise#115735 Forward-Port-Of: odoo/enterprise#112474
This update resolves an issue where the payroll report would fail if a new employee's start date wasn't provided. The fix ensures the report checks for a start date before attempting comparisons, preventing errors and improving report reliability. This ensures accurate payroll calculations.
Original PR description
If there is no start date on the veriosn, the report will fail as it'll try to compare a bool with a datetime. So we check first that there is a start date Forward-Port-Of: odoo/enterprise#117534
This update corrects a visual issue with payrun displays within the Odoo Enterprise payroll module. The fix removes unnecessary code and ensures payrun information is aligned correctly, improving the user experience. This ensures accurate and consistent reporting of payroll data.
Original PR description
Remove useless classes and fix alignment task-6191499 Forward-Port-Of: odoo/enterprise#116528
A test was failing because the test record's name was identical to a demo data record. This change resolves the conflict, ensuring tests run correctly and reliably. This fix improves the stability of the testing process for the IoT module.
Original PR description
Our test record was named the same as a demo data record ("Shop"), making the test fail as it was looking for the test device contained by the test record, but not
contained by the demo record.
runbot-error-937748This update resolves an issue preventing Payroll Assistant users from accessing the Payroll app. The change corrects a technical error that was causing access restrictions, ensuring all users can now utilize the Payroll functionality. This improves the reliability and usability of the Payroll module.
Original PR description
* = hr_work_entry_attendance This commit prevents access errors that are triggered when a user with Payroll Assistant role tries to open the Payroll app. TaskID-6143823 Forward-Port-Of: odoo/enterprise#115297
This update resolves an issue where timesheet data wasn't consistently saved and displayed across multiple Odoo tabs. The fix ensures that any changes made in the timesheet form are reliably synchronized, regardless of which tab you're working in. This improves data accuracy and reduces the risk of lost updates.
Original PR description
Steps to reproduce: - Open Odoo in two tabs - Open the systray in tab 1 - Change some fields - Close the systray to save - Open the systray in tab 2 All fields are not in line in both tabs. This commit, hence, ensures that all data changed in the inline form is saved and consistent across different windows. When switching window, the systray is closed and the data is saved to the local storage. When opening the systray in another tab, the local storage will be accessed to read the latests changes (i.e., the modifications done in the other tab). task-6180394 Forward-Port-Of: odoo/enterprise#117486 Forward-Port-Of: odoo/enterprise#116007
This update resolves a problem that prevented the generation of PDF reports for Colombian tax statements. The change adjusts how data is accessed within the report generation process to align with a recent update in the Odoo system. This ensures reports are created correctly and avoids errors.
Original PR description
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de…
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de Retención en ICA - Generate the PDF report. ***Observed behavior*:** - An error is raised while generating the PDF: `AttributeError: 'AccountReportColumnData' object has no attribute 'get'` ***Cause*:** After commit [1](https://github.com/odoo-dev/enterprise/commit/b92dc397bef029472a40223f51b611cdf5b631dc#diff-e97f74c63a6257470e69eb8122c12d0ce4afa5bc6013176bb69e702849575123) all report lines, columns, and annotations were converted from dictionaries to custom objects (e.g., AccountReportColumnData). However, the function `_get_report_values` still uses .get() to access values, which is only valid for dictionaries. Calling .get() on these objects raises an error. ***Fix*:** - Replace the `get()` method usage with `column.name` format to access values from `AccountReportColumnData ' properly. - This ensures compatibility with the new structured column data format introduced in v19.2. opw-6205984 Forward-Port-Of: odoo/enterprise#116902
This update simplifies how product and rental attributes are shown on the website. Previously, attribute values were displayed as confusing integer IDs. Now, they are presented using more readable attribute slugs, improving the user experience and making it easier to filter and select attributes.
Original PR description
On the shop page, the attribute values were encoded as follows:
```
attribute_values={attribute_id}-{attribute_value_1_id},{attribute_value_2_id}
```
On the product page, the attribute values were encoded as follows:
```
attribute_values={attribute_value_1_id},{attribute_value_2_id}
```
The attribute values were not only encoded differently (which is confusing), but also unreadable (since we were showing integer ids).
Now, the attribute values are encoded as follows, both on the shop and product pages:
```
{attribute_slug}={attribute_value_1_slug},{attribute_value_2_slug}
```
This addresses both issues pointed out above.
task-5129517
Community PR: https://github.com/odoo/odoo/pull/235541This update resolves an issue where the Employees app incorrectly displayed a directory menu, disrupting key user flows. The change adds a necessary step to navigate to the Management menu after opening the Employees app, ensuring proper functionality and tour completion.
Original PR description
In the comunity PR, the directory meny is shown fhr users, so when opening the Employees app, the first menu is now the directory. This broke some tours, so this PR adds a step to go to the Management menu after opening the Employees app. task-6158829
This update addresses several bugs impacting the AI Fields functionality. Specifically, a misleading error message was corrected, and inconsistencies in how web sources were handled during AI response generation were resolved. This ensures more reliable and accurate AI-powered responses within the AI Fields module.
Original PR description
This commit fixes the following bugs: - In 99f76c1, tools.py was moved from ai_fields module instead ai_fields_tools in the ai module. However, the 'odoo.addons.ai_fields.tools.UnresolvedQuery' error which is caught in _computeAiField method wasn't changed to reflect the new file path which made the error appear to the user instead of just being a toaster message. - When performing web_grounding, the URL citations are replaced by [WEB_SOURCE:<id>] to prevent LLM hallucinating sources during the agentic_loop. These placeholders are replaced again by the actual URLs before sending the response back to the user. However, this wasn't done in the case of _get_direct_response when the web_grounding completion option was set to True and was only done if the custom web_search tool was used. This caused these placeholders to appear in AI Fields. task-6209766 Forward-Port-Of: odoo/enterprise#117234
This update fixes a visual issue where accounting reports, when filling a full page, would obscure the final row, preventing users from seeing all the data. The fix involves adjusting styling to ensure the complete display of accounting reports, improving data clarity for users.
Original PR description
Problem: When an accounting report fills a whole page, the final row is not fully visible Steps to reproduce: 1- View a tax report that has a lot of entries that would fill the whole screen 2- Notice how the last line is not fully visible and it isn't possible to scroll and view the rest of it Solution: Correctly style the different < div > elements opw-6171555 Forward-Port-Of: odoo/enterprise#117663 Forward-Port-Of: odoo/enterprise#116068
This update corrects a bug that prevented users from recreating templates after undoing a previous conversion. The fix ensures that the original project's documents folder is properly restored during the undo process, resolving a user error and improving template management. This prevents data inconsistencies and streamlines workflow.
Original PR description
Steps to Reproduce: --- 1. Create a project with documents. 2. Convert it into a template. 3. Click on "Undo". 4. Try to convert the project into a template again. Issue: --- After undoing the template conversion, the project's original documents folder remained archived while the template's documents folder stayed active. This inconsistent state prevented subsequent template creation from the same project. Current behaviour: --- A UserError is raised: "You cannot duplicate document(s) in the Trash." Expected behaviour: --- Undoing template conversion should properly restore original project's documents folder and clean up template's documents folder. Fix: --- - Archive original project's documents folder during template creation - Implement documents folder unarchival during undo operations task-4916027 Forward-Port-Of: odoo/enterprise#117670 Forward-Port-Of: odoo/enterprise#91595
This update resolves an issue preventing non-administrator users from viewing the 'Users' settings within the Odoo Enterprise application. The fix allows users to access this critical functionality, improving usability and streamlining user management. This change ensures all users can manage their accounts and database connections.
Original PR description
Steps:
- Create a user X with admin rights
- Connect as X
- Open Settings/Users
- Access right error
```
Failed to read field res.users.database_user_ids
You are not allowed to access 'Database User' (databases.user)
```
opw-6209241
Forward-Port-Of: odoo/enterprise#117573Features or functions removed from Odoo
This update removes an outdated 'autosave' option from Odoo Enterprise's user interface, streamlining the system and aligning it with recent core changes. The change ensures that data is only saved when necessary, improving performance and reducing potential data inconsistencies. This affects several key modules within the Enterprise suite.
Original PR description
Following the core changes in `odoo/odoo`, this PR cleans up the enterprise modules by removing the now-obsolete `autosave` option in XML views and updating enterprise-specific widgets (like `CarrierTypeSelection`) to respect the `isInEdition` state. **Community PR:** odoo/odoo#256598 **Task-5388752**
Code cleanup and technical improvements
This update clarifies the installation process for payroll by moving related menu items directly within the core hr_payroll module. Previously, installing a related app would create a misleading impression of payroll being active. This change ensures a cleaner and more accurate user experience.
Original PR description
If you take time off as a one app free, it will install hr_work_entry which contains the root payroll menu item, giving people the impression that payroll was installed. -> Moving those menu items to hr_payroll. Task: 6072554
This update clarifies the purpose of a stock field used in forecasting, renaming it from 'location_final_id' to 'forecasted_location_id'. This change simplifies the system and ensures accurate multi-step push route calculations without affecting core inventory operations.
Original PR description
The `location_final_id` field is renamed to `forecasted_location_id` to prevent user confusion. This field is only utilized for forecasting multi-step push routes and does not impact actual inventory operations.