Daily updates from Odoo
Thursday, October 30, 2025
13 changes · master
Enhancements to existing features
Egyptian payroll benefits are now managed through flexible salary rules instead of older fixed payroll inputs and employee fields. This aligns the localization with the newer benefits system while preserving the familiar employee form layout and required legal social insurance reference.
Original PR description
purpose: adapting the new system of flexible benefits coming from salary rules for eg localization - adapted the fields in `hr.version` to become salary rules with `condition_select` as `property_input` which makes it appear in the input section - removed the records in `hr.payslip.input.type` and converted them into corresponding salary rules - added 2 `hr.salary.rule.section` to preserve the old look of the employee form view - changed the allowance benefits in the salary configurator to be linked to salary rules instead of removed fields - changed the tests in `test_salary_rules` to use salary rules instead of hardcoded fields - Note: the field `l10n_eg_social_insurance_reference` is kept because it's mandatory by the law and will have constraints for it's bounds task-id: 5122336
Bank statement corrections now support statements that show separate credit and debit columns. Users can select those amounts directly from the attached document, making manual corrections faster and reducing entry errors.
Original PR description
Previously, there was no way to use the manual correction tool on a bank statement that displayed the lines using credit/debit columns. Now, the debit/credit amounts can be selected on the attachment to fill in the amount of each line. task-[5126902](https://www.odoo.com/odoo/project/2068/tasks/5126902) Forward-Port-Of: odoo/enterprise#97374
VoIP searches now match phone numbers even when they include spaces, hyphens, parentheses, or other formatting characters. This makes it easier for users to find contacts and call history entries using only the digits they know, while also improving server-side handling of search text.
Original PR description
Introduces the `matchPhoneNumber` function, a new utility designed to match search terms against fully formatted phone numbers. The function converts a digit string like "123" into a flexible regex (e.g., /1\D*2\D*3/i) that matches digits regardless of any non-digit characters (spaces, hyphens, parentheses) between them. **Example:** * **SearchTerms**: "123" * **Target**: "+1 (2)-345" * **Match**: "1 (2)-3" Task-5160296 Forward-Port-Of: odoo/enterprise#98341 Forward-Port-Of: odoo/enterprise#97711
HR teams can now add employee salary inputs directly to Belgian payroll contract templates. This makes template setup more complete and helps ensure recurring payroll-related inputs are applied consistently when preparing contracts.
Original PR description
Add a button in the contract template form view so salary inputs applicable on employees can also be added to a contract template. [task-5156839](https://www.odoo.com/odoo/project/1251/tasks/5156839)
This update improves Saudi payroll WPS file generation by simplifying payment dates, using clearer payment descriptions, and requiring the correct employee identification before files are created. It also adds missing bank identifiers and changes WPS downloads to the expected .SIF format, reducing errors and improving compliance readiness.
Original PR description
* Added tooltip to Value Date * Removed Debit Date field; using Payment Date only. * Fixed Payment Description to use PayRun or Payslip name instead of the employee record. * Updated demo data to include Bank SARIE ID for all banks. * Added Bank SARIE ID and Bank Establishment ID to the bank info tab; fixed traceback when Bank Establishment ID is missing. * Made Saudi National/IQAMA ID required for WPS file generation. * WPS file downloads in .SIF format; Excel version logged in chatter. task-4946564
The Referral app now presents configuration options in a clearer structure and improves how hired candidates are linked to referral contacts. Dashboards better support larger teams by showing repeated referral contacts when relevant, making profile images easier to manage, and limiting the dashboard to a manageable set of up to 8 friends.
Original PR description
Purpose: Better UX for the referral app especially for big teams Previous behavior: - the configuration menu wasn't nested - some hired applicants could exist without being linked to a friend - when 2 hired applicants had the same friend linked, it showed the friend image only once in the dashboard - the head image was required in friend creation New behavior: - added nesting to the configuration menu (recruitment, referrals, dashboard) - always checks if new applicant is hired and allows to link a friend to it even if it's chosen for another applicant - the friend image is show multiple times for all hired applicants linked to it - the head image is not required and takes default value from the dashboard image - the head image is now editable by clicking on it - the dashboard is limited to have at most 8 friends task-id: 5008726
Time off that is cancelled, refused, or only partially approved will no longer be treated as something payroll needs to defer. This reduces unnecessary warnings during payslip validation and keeps payroll screens focused on actionable leave items.
Original PR description
When a leave is cancelled, refused or partially approved,
we shouldn't care about deferring it.
This commit:
- Sets the `payslip_state` to "done" when the leave is refused.
- Hides the `payslip_state` field within the leave form view when the leave is cancelled, refused or partially approved.
- Adjusts the domain of the "To Defer" filter, to not show cancelled, refused nor partially approved leaves.
- When validating payslips:
= Don't show the error "Employee has time off to defer" on the payslip, if it overlaps a blocked leave that is partially approved (or cancelled/refused).
Task-5103880The Indian GSTR2B reporting process now matches late vendor bills more precisely by using invoice reference details differently depending on whether an IRN is available. This helps reduce duplicate or incorrect reconciliation matches and improves confidence in tax reporting.
Original PR description
- Adjusted domain construction in GSTR2B late bill matching logic. - Split condition to handle the presence or absence of IRN separately: - If IRN exists, match on both `ref` and `l10n_in_irn_number`. - If IRN is missing, match only on `ref`. - Improves the accuracy of bill reconciliation and avoids redundant matches. Forward-Port-Of: odoo/enterprise#98370 Forward-Port-Of: odoo/enterprise#97469
Inventory users can now reset the cached links between reports and IoT printers directly from the Inventory app. This makes it easier to resolve printer/report pairing issues without navigating through more technical IoT settings.
Original PR description
In order to simplify resetting the link between printers and reports in cache, we added the "Reset Linked Printers" button to the Inventory app. Forward-Port-Of: odoo/enterprise#98364 Forward-Port-Of: odoo/enterprise#98028
Changes made to POS categories, such as names or display order, are now sent to UrbanPiper when menus are synced again. This helps keep online menus aligned with the latest in-store point-of-sale setup and reduces manual corrections.
Original PR description
Before this commit: ----------------------------------------- - After syncing the menu, changes in a POS category (e.g., name or sequence) were not reflected in UrbanPiper when the menu was synced again. After this commit: ----------------------------------------- - Category updates (name or sequence) are now synced with UrbanPiper on subsequent menu syncs. Task-5122804 Forward-Port-Of: odoo/enterprise#96270
Tax reports no longer show a general warning banner when archived tags are found in the selected period. Instead, this issue is handled through tax return checks, making the review process more targeted and aligned with how returns are validated.
Original PR description
Currently, when there are archived tags used on move lines in the selected period, the tax report shows a warning banner. The idea behind that is that such tags are likely to come from an outdated version of a report, after a -u was performed on the database, and the related move lines might need to be reallocated to some other tags. Though, it's a bit old-fashioned and we'd prefer a check on the tax returns for that ! The check cannot be created if it successes and cannot be deleted when it exists and successes. task-5163963
Saudi payroll overtime now uses the correct work entry type and reads overtime values directly from workday records. This helps payroll teams calculate overtime more accurately and consistently for Saudi Arabia payroll.
Original PR description
- add the right work enty type to the SA overtime rules - update the overtime salary rule to read the value from the workdays Task: 5102385
Accounting teams now get clearer warnings when bank statements are invalid, including dashboard alerts, reconciliation warnings, and form-level messages. The update also prevents risky transaction deletions and ignores empty or locked statements in balances, helping users avoid reconciliation mistakes.
Original PR description
* accountant|bank_statement_import This commit brings more clarity on invalid statements. The reflected changes are : - Hiding Last Statement if its date is <= Lock Date - "Invalid Statement(s)" alert on the journal dashboard - Red balance amount and warning in the BankRecW when it contains invalid statements (clicking on the warning applies the filter) - Possibility to choose a statement when creating a transaction - Invalid statement warning in the statement creation form - Displays all warnings in the statement form view - When a file generate a statement, it is kept in its attachments - Prevent deletion of transactions if they belong to a valid statement - Empty statement are not taken into account for the dashboard Last Statement and the BankRecW balance task-4413473 Forward-Port-Of: odoo/enterprise#97552 Forward-Port-Of: odoo/enterprise#92078