Daily updates from Odoo
Monday, June 15, 2026
28 changes · master
New functionality added to Odoo
This update adds several new leave types to the payroll system, specifically designed to accommodate situations related to variable salary. These include options for family events, legal duties, and educational time off, ensuring employees can accurately reflect their time off when their compensation fluctuates. This enhancement improves payroll accuracy and employee support.
Original PR description
This commit adds those leaves for the loss on variable salary LEAVE550 Marriage (Employee) LEAVE551 Marriage of a Family Member YOUNG02 Child Ceremony (Communion / Secular Youth) LEAVE230 Birth Leave (Father / Co-parent) LEAVE650 Child Adoption / Long-Term Foster Care LEAVE450 Death of Partner or Child LEAVE451 Death of Parent or In-law LEAVE452 Death of Extended Family Member LEAVE453 Death (One Day Leave) LEAVE350 Civic or Judicial Duty LEAVE250 Urgent Family or Social Reason (Unpaid) LEAVE213 Extra Legal Time Off LEAVE260 Educational Time Off WORK207 Non-taxable service for political representatives LEAVE600 Solicitation Time Off Task-6275805
This update allows clients to track and pay monthly homeworking fees to employees as a benefit. New salary rules and associated benefits were added within employee settings, providing a structured way to manage these expenses. This improves payroll accuracy and reporting related to remote work arrangements.
Original PR description
In order to allow clients to allocate daily homeworking fees to be paid as a monthly benefit to the employees, new salary rule and its benefit were added to the employee settings. Task: 6037614
This update adds functionality to generate the Form 2316, a crucial annual tax certificate required for compliance with Philippine regulations (CAS). The changes accommodate the Philippines' unique naming convention (first, middle, and last names) and ensure accurate reporting of employee compensation and tax withholdings, aligning with legal requirements.
Original PR description
Implement support to generate the Form 2316, the annual certificate of Compensation Payment/Tax Withheld that is individual to each employee. This is a requirement for a software to be compliant with CAS task-6215945
Enhancements to existing features
This update adjusts the Odoo Enterprise menu to place the Obox application at the end of the app list, just before the 'Apps' and 'Settings' sections. This change improves user discoverability of Obox within the application interface.
Original PR description
This commit changes the Obox menu sequence so that the app appears at the end of the apps list by default (just before Apps and Settings). task-6275407 Forward-Port-Of: odoo/enterprise#119337
This update introduces support for calculating and reporting the 13th month for employees in Belgium, aligning with local regulations. Employers now need to track and prorate this amount, which impacts payroll calculations and reporting, ensuring accurate tax deductions and payslip information. The system now handles the complexities of calculating this 13th month based on work hours and leave types.
Original PR description
At the end of the year, or when ending collaboration with an employee, the employer may have to compute (not pay) the gross amount of the 13th month that the employee is supposed to get, and send it…
At the end of the year, or when ending collaboration with an employee, the employer may have to compute (not pay) the gross amount of the 13th month that the employee is supposed to get, and send it to a Special Social HORECA Fund. Then, this fund will take care of the rest of the paperwork to deduct taxes from the 13th month and send a payslip to the employee. Since the employer does not pay the 13th month, but the Social Fund, the employer has to send an equivalent of *12%* of the amount of the gross salary submitted to the ONSS, each month, to the social fund. For workers, the percentage is applied on *108%* of the gross salary. Those values concerning the 13th month do not impact the employee's payslip, but still have to appear on it. So an "is_informative" field has been added to tell whether it should be displayed in this special section of the payslip. - If you're an employee, then your non-proratized 13th month (i.e.: its max value) is the wage of your last payslip (i.e.: `employee_id.wage`) - If you're a worker (*ouvrier*), then the 13th month's max value is `your hourly wage * average max number of hours per month` You then need to proratize the result in relation to the number of days that have really been prestated and assimilated. **NOTE:** - **prestated days** are days you have really worked - **assimilated days** are leaves that still count as a work days (e.g.: legal leaves) The sectorial documentation describes multiple proratization methods, but they are all equivalent to this basic formula: `(hours you have prested and assimilated / max number of hours you can prestate or assimilate) * max 13th month you can get` **These work entries are always assimilable:** - legal leaves - extra legal leaves - public holidays - small unemployment - compensatory rest - civic duties - public mandates - union obligations - strikes - temporary unemployment - unemployment force majeure **These work entries are assimilable with a limit of time per year:** - maternity leaves: 15 weeks - union education: 12 days - military service: 6 months - compelling reasons: 10 days - paternity leaves: 10 days - military reserve calls': 74 days **The first 12 months of partial incapacities following a total incapacity can be assimilated.** But, the partial incapacity must be of at least of 66%, by 66%, they mean at least 2/3 of the week should be a time off due to the incapacity. Since we don't really have a way to define that, as of now, partial incapacities are not assimilated. **Long sick leave periods can be assimilated at a rate of _50%_:** - The period must be uninterrupted and of at least 6 months - If it's smaller than 6 months, then we can see accross neighboring years if it continues, and if it is more than 6 months - If in the end it's more than 6 months, you can assimilate the period of the current year (max 6 months per year) - No period can be assimilated twice (e.g.: a period of two years cannot be assimilated in both years) **Short sick leave periods can be assimilated:** - Up to 7 uninterrupted days per year can be counted assimilated. But, if you have more than a defined threshold of sick leave days, then none are counted. - If you have at least a year of seniority, then the threshold becomes 6 months (i.e.: you still have your days if the number of days are below six months). Otherwise, the threshold is 7 days. In both cases, max 7 days can be assimilated per year. **Some days after the end of the contract up to the end of the year can be assimilated:** - All days if the personnel is retired - All days of early reitrement (aka "Prépension") assimilated at a rate of 20% - Max. 6 months for dead personnel Even though this 13th month is not directly paid by the employer, it still is a gross wage for the employee, so, the value of the 13th month should be included in the computation of the CSS (*special social cotisation*) [PARTENA's sectorial documentation](https://drive.google.com/file/d/1i8bj425ccEW0ZGvNSaQvEV6VIedmLYCS/view): task-5477296
This update enhances the work order Gantt view by now displaying completed work orders, providing a more accurate representation of past production progress. Cancelled work orders remain hidden to maintain a clean and focused planning board. This improves planning and reporting accuracy.
Original PR description
The work order Gantt view previously hid both completed and cancelled work orders, which made the planning board look empty for past dates. This update ensures that completed (done) work orders remain visible to provide a clearer picture of actual production progress, while cancelled work orders remain hidden to prevent visual clutter. This commit's changes: - Updated the action domain to filter out only 'cancel' states, allowing 'done' work orders to be displayed in the Gantt view. - Updated the workcenter and employee Gantt view definitions to include a 'decoration-secondary' rule for the 'done' state. - Added custom SCSS to visually fade completed work order pills using reduced opacity. - Replaced the "Mark as Done" button in the Gantt popover with explicit status messages for completed work orders. - Cleared default search filters from the dependency Gantt actions, while explicitly keeping the `show_workcenter_status` context. task-6169405
This update enhances the way sick and work accident leaves are processed for short-term contracts. The changes now consider contract duration and seniority levels to accurately determine the eligibility and calculation of these leaves, ensuring compliance and improved accuracy in payroll processing.
Original PR description
Refine sick/work accident leaves split based on contract duration and seniority. task-5480458
This update improves the accuracy of payroll calculations in Belgium by adding validation rules for reclassification schemes. Specifically, it prevents incorrect scheme selections based on notice period length and employee details, ensuring compliance and reducing potential errors. A helpful message has also been added to the outplacement field.
Original PR description
- Add a help message to the outplacement field explaining its purpose and services. - Prevent selecting the General scheme if the notice period is less than 30 weeks. - Prevent selecting the Specific scheme based on notice period length, employee age, company sector, and seniority. Task Id: 6267824
This update streamlines the process of sending payslips via email, making it much easier for HR to send PDFs to employees. The new 'Send by Email' button allows for bulk sending of validated payslips with a single click, eliminating the previous complex manual process. Additionally, the UI has been improved to prevent overlapping elements and remove unnecessary options.
Original PR description
[IMP] hr_payroll: ease UX for payslip sending via email
Send the emails for at least validated payslips is quite hard and takes time, it was in the cog and all employees must be selected. Instead I used a new Send by email button that sends the email to all employees in one click to the button
Firstly, if there are payslips without PDF's the Print Payslips button appears, if there is not, then send by email button appears.
"Mark as Paid" is made invisible
I also played with the max-width of the top-bar of the payrun (which includes statusbar, title etc) to prevent any kind of element overlaps.
task - 5979720This update corrects an issue where automatically adjusted quantities in rental sales were leading to incorrect invoicing. It ensures ordered and delivered quantities remain independent, aligning with the existing invoicing policy and preventing over-invoicing. The change also standardizes product display names across reports and portals for better customer clarity.
Original PR description
** For `sale_renting` ** With the introduction of product-less Sale Order Lines in the community version, we noticed that for manually delivered lines, the ordered quantity gets automatically…
** For `sale_renting` ** With the introduction of product-less Sale Order Lines in the community version, we noticed that for manually delivered lines, the ordered quantity gets automatically adjusted to match the delivered quantity. This behavior is unnecessary. The invoicing policy already determines which quantity should be invoiced. By forcing the ordered quantity to match the delivered quantity (especially when delivered > ordered), we end up consistently invoicing the higher value, which is not always correct. In practice, ordered and delivered quantities commonly differ, so they should remain independent. ** For `sale_commission` ** For commission and achievement reports, productless lines are aggregated under plans having no product restrictions ** For `sale_account_accountant` ** For accural entries non downpayment lines having no display_type are shown instead of restricting only lines having product. Removed product_invoice_policy field and used the `sale.order.line.invoice_policy` search compute field. Technical changes * From now on any SOL should contain name field value as `product.display_name+ "\n" + description` for consistancy with normal SOLs since we show only `line.name` in reports and portal so in case it should contain product name otherwise it could be confusing for customers to see just description. * Updated renting-specific extensions of `SaleOrderLineProductField` to also patch `SaleLabelTextField`, ensuring consistent behavior when product search is triggered directly from the description field. * Preserved existing renting configurator and combo behaviors while supporting the new searchable description field flow. * Removed the automatic synchronization between ordered and delivered quantities for manually delivered rental lines. * Adapt some tests to company specific Automatic Invoice setting field. task-6109825 See Also: - https://github.com/odoo/odoo/pull/259842 - https://github.com/odoo/upgrade/pull/9981
Resolved issues and error corrections
This update enhances the clarity of bank statements for transactions split into multiple lines. Previously, all split lines received the same generic message, making it difficult to understand each charge. Now, transaction details are added to the label, aligning with the CodaBox breakdown and improving user understanding.
Original PR description
Currently, when global transaction is split into multiple lines, Odoo assigns the exact same communication text to every single split line. This makes it difficult for users to identify what each specific charge is for. To fix this, this commit introduces the transaction category data. Using this data to append specific transaction details to the end of the communication label. As a result, each split line now has a clear, descriptive label that closely matches the detailed breakdown provided by CodaBox. task-6059709 Forward-Port-Of: odoo/enterprise#113811
This update ensures that tax details for order items are now included in the test orders sent to UrbanPiper. Previously, these details were missing, leading to test failures. This change improves the accuracy of our integration testing and ensures correct tax calculations are sent to the external system.
Original PR description
Commit 1: ======== Before this commit: =================== - Test orders sent to UrbanPiper did not include tax details for order items. After this commit: ================== - Tax details are now included in the order item payload of test orders. Task-6013007 --- Commit 2: ======== Cause: ====== In the `without demo` environment, the discount product does not have any `taxes_id`, causing the test assertion to fail. Fix: ==== Set a tax on the discount product in the test to ensure the same behavior in both `with demo` and `without demo` environments. Error-241138 Forward-Port-Of: odoo/enterprise#120310 Forward-Port-Of: odoo/enterprise#109958
This update fixes a problem where receipt printing in Austria was incorrect due to an incorrect offset calculation. It also resolves a deadlock issue during authentication with Fiskaly and FON, ensuring smoother operation. This improves the reliability of the point-of-sale system for Austrian businesses.
Original PR description
In this task: -------------- - Fixed Austria closing receipt printing by calculating the offset from the last closed month instead of the current month. Closing records are returned in ascending order and exist only for completed months, so the latest month must use offset 0. - Prevent a deadlock during Fiskaly and FON authentication by checking for open sessions before starting any authentication flow, instead of after the first step of authentication. - The resp was used to show error which was not in the scope. task: 5420256 Forward-Port-Of: odoo/enterprise#120033 Forward-Port-Of: odoo/enterprise#102313
This update fixes a problem where tax lines were missing from the 2307 tax return PDF when the report was folded. The fix ensures that tax information is always included in the PDF, regardless of the report's layout. A new test has been added to verify this correction.
Original PR description
Current behavior: -- Tax lines are missing from the 2307 certificate PDF. Expected behavior: -- The tax lines should always appear on the certificate, regardless of the fold state of the report. Steps to reproduce: -- 1. Create and confirm a bill with any tax on the PH localization. 2. Open the 2307 tax return and export the certificate to PDF. 3. The tax line is missing from the PDF. Cause of the issue: -- The PDF is exported with the report folded, so the partner lines' children (the tax/ATC lines) are never generated. _custom_line_postprocessor then has no tax lines to decorate with the month-wise amounts. Fix: -- Expand each folded partner line down to the ATC level in _custom_line_postprocessor, and mark it unfolded so the new lines survive _filter_out_folded_children. Also added a test covering the folded lines. opw-6235956
This update fixes an error in the Spanish VAT reports where withholding tax was incorrectly included in the total VAT calculation. The fix excludes 'retencion' (withholding tax) from the VAT calculation, ensuring accurate reporting of VAT liabilities for Spanish businesses. This improves the reliability of financial data.
Original PR description
Step to reproduce - install `l10n_es_reports` and switch to ES company - create a invoice, add a product, set price = 100 - add two taxes (one should be withholding tax) ex: 21%G and 19%whi - confirm it, total payable is now 100 + 21 - 19 = 102 - open vat Books report for ES, see line for this invoice Observation: - for this invoice, in total vat column, we get 102 value - it should be 100+ 21 i.e 121 as we do not include withholding taxes in total vat Cause: - the query for report used to sum up all the taxes for calculating vat Fix: - excluded tax of type "retencion" in tax summation opw-6082329 Forward-Port-Of: odoo/enterprise#120270 Forward-Port-Of: odoo/enterprise#114137
This update resolves an issue preventing users from selecting contacts with VAT numbers as feedback recipients within appraisals. Previously, a technical restriction based on VAT presence incorrectly classified these contacts as 'companies.' Removing this restriction now allows for broader feedback recipient selection, though users may need to perform a manual sort.
Original PR description
Issue: ---------------------------------------- We cannot add a contact with a VAT as a feedback recipient. Steps to reproduce: ---------------------------------------- - Have a contact with a VAT - Go to a confirmed appraisal and select 'Ask Feedback' - We cannot add the contact as recipient. Cause: ---------------------------------------- There is a domain on the field to only accept non company contacts. The idea of the domain was to restrict the field to persons only. But since f2965048f60fe6c815b3e50fa714c97a93dfb5d3 the field `is_company` is computed based on the VAT presence. So a contact with a VAT specified is considered a company. Solution: ---------------------------------------- Remove the domain. We allow to select all contacts, the users will have to do the sort. opw-6280689 Forward-Port-Of: odoo/enterprise#120236
This update resolves an issue where currency differences were incorrectly aggregated in hierarchical reports, leading to inaccurate financial summaries. The change ensures that report totals are calculated accurately based on the currency of each individual transaction, improving the reliability of financial reporting. This update impacts the general ledger report.
Original PR description
opw-6015098 Forward-Port-Of: odoo/enterprise#119420 Forward-Port-Of: odoo/enterprise#114827
This update ensures that non-mandatory text fields in sign documents appear with a transparent background when using dark mode in browsers. A recent update to PDF.js automatically adjusts element colors based on the browser theme, and this fix prevents the non-mandatory fields from inheriting the dark background color.
Original PR description
## Issue When using the browser's dark mode, non-mandatory text fields in sign documents appear with a dark background, which does not match the aesthetic of the rest of the page. ## Steps to…
## Issue
When using the browser's dark mode, non-mandatory text fields in sign documents appear with a dark background, which does not match the aesthetic of the rest of the page.
## Steps to reproduce
1. Set your browser's theme to a dark theme (in Chrome, go to Settings > Appearance > Theme, chose a theme from the dark options)
2. Install Sign (`sign`)
3. Open a Sign template and add 3 Text fields:
- Mandatory
- Non-mandatory
- Read-only (for comparison)
4. Click *Sign Now*
5. **The non-mandatory text field has a dark background.**
## Cause
Since a [PDF.js update](https://github.com/mozilla/pdf.js/commit/ae1cbc6a9ecc738d6777830488ad5481b97338bc), the `light dark` color-theme was added to `:root`. This means that the element will react to the settings of the browser and adapt its background and text color. In this case, there's no other `background-color` provided to mandatory fields, resulting in them using the dark color of the browser theme.
## Fix
We make the default background of text fields transparent then we update the selector of `.o_sign_sign_item_required` to prevent their `background-color` from being overwritten by that new transparent background.
| | Before | After |
|------------|--------|-------|
| **Light mode** | <img width="211" height="99" alt="6213059-before-light" src="https://github.com/user-attachments/assets/c4c70394-c7c2-4dbf-92b9-c1362d1cf9c8" /> | <img width="207" height="89" alt="6213059-after-light" src="https://github.com/user-attachments/assets/63142be5-9f7d-4d5d-94e8-ef9428e1b778" /> |
| **Dark mode** | <img width="220" height="95" alt="6213059-before-dark" src="https://github.com/user-attachments/assets/19149c3d-511e-407c-821e-f318f373368a" /> | <img width="210" height="103" alt="6213059-after-dark" src="https://github.com/user-attachments/assets/0b412d4f-061f-41b3-aae9-569b9a8219dc" /> |
opw-6213059
Forward-Port-Of: odoo/enterprise#117589This update corrects a visual issue where new timesheet entries created from the systray menu were always added to the bottom of the list, requiring users to scroll to see the most recent entry. The fix ensures entries are sorted by creation date, placing the newest entries at the top for easier viewing. This improves user efficiency and the overall timesheet experience.
Original PR description
## Issues When creating a new timesheet entry from the systray menu, that entry is added at the end of the list, which is inconvenient when the list gets long, as it requires to scroll through the…
## Issues When creating a new timesheet entry from the systray menu, that entry is added at the end of the list, which is inconvenient when the list gets long, as it requires to scroll through the entirety of it to see the most recent entry. ## Steps to reproduce 1. Install Timesheets (`timesheet_grid`) 2. Open the systray menu 3. Create two timesheet entries 4. The second (= most recent) entry appears below the first (= oldest) entry ## Cause Since https://github.com/odoo/enterprise/commit/5901619141c81085111f2ee65b54492abf1e324f the entries are sorted based on the create date in ascending orer. This means that the oldest entries appear at the top, and the most recent at the bottom. On top of that, new entries were added at the end of the list instead of the start. ## Test The existing test `Creating a new timesheet places it at the top of the list` was only adding one entry to the list, thus was not properly testing **where** the new entries were added. opw-6284059 Forward-Port-Of: odoo/enterprise#120258
This update resolves an issue where users without HR access rights were seeing a placeholder image instead of their avatar in the timesheet grid view. The fix ensures that the correct employee avatar is displayed, regardless of user permissions, improving the user experience.
Original PR description
Steps to reproduce: ------------------- - Install the hr_timesheet module - Create a user without HR access rights - Create a timesheet - Log in with the above user - Open the kanban view Issue: ------- Instead of showing the employee's avatar, a placeholder image is displayed. Reason: ---------- The user does not have access to the hr.employee model. Fix: ----- In this commit, if the user does not have access to hr.employee,we fetch the image from the hr.employee.public model. task: 4461272 Forward-Port-Of: odoo/enterprise#120361 Forward-Port-Of: odoo/enterprise#83574
This update corrects a misleading warning message displayed during pay run creation. Previously, users received warnings for pay runs where the employee was already included, even if the warning was incorrect. Now, the system only alerts users to pay runs where the employee is genuinely missing, improving accuracy and reducing unnecessary notifications.
Original PR description
Previously, when creating a new version of an employee, warnings would have been shown telling the user that the employee is missing in every pay run already created, even the ones where the employee was actually already included. Now, only the right pay runs missing the employee are shown on the warnings. task-6252396
This update corrects an issue where planning roles weren't being assigned correctly in the Enterprise system. The change ensures that the default planning role is set properly after other role assignments, streamlining the planning process for users. This improves the overall efficiency of project planning within Odoo Enterprise.
Original PR description
https://github.com/odoo/odoo/pull/265469
This update fixes a potential issue where employee payslips in the Belgian payroll module (l10n_be_hr_payroll) could display a negative net salary due to high fiscal voluntarism deductions. The change caps these deductions to prevent net salaries from going below zero, ensuring accurate payroll calculations.
Original PR description
In cases where an employee has a low taxable amount (e.g. due to many unpaid work entries) and a high fiscal voluntarism deduction, the resulting payslip could compute a negative net salary. This commit caps the fiscal voluntarism deduction to the remaining taxable income after withholding taxes, ensuring the net salary never drops below zero due to this rule because of the Fiscal Voluntarism Task Id: 6283617
This update removes duplicate time off types from the l10n_be_hr_payroll module. We've streamlined the system to only retain the essential Postponed Paid Time Off N-1 and N-2 types, simplifying payroll processing and reducing potential errors. This change ensures consistency and accuracy in time off calculations.
Original PR description
We only keep the Postponed Paid Time Off N-1 and N-2 types. task-6292642
This update adjusts the payrun warning button on the payroll dashboard to accurately reflect the status of each payrun. When a payrun is fully paid, the button now displays 'Review'. However, if any payslips remain in 'Draft' status, the button continues to show 'Continue' to guide users appropriately.
Original PR description
- Current behavior: the payrun warning button in the payroll dashboard shows "review" if payrun is in stage "03_paid", otherwise "Continue". - New behavior: if a pay run is marked as Paid, the button should display "Review" instead of "Continue"; however, if any payslip is still in the Draft stage, then the button should continue to display "Continue". Task: 6216477
This update ensures the correct appraisal template is automatically assigned to employees based on their department. Previously, the system ignored department-specific templates. Now, it selects the lowest numbered template matching the employee's department or a template with no department assigned, ensuring accurate appraisal workflows.
Original PR description
**Before this commit:** - We were never setting the appraisal template based on the employee's department. Instead, we were ignoring all templates that had a department assigned. And were choosing the first template. **After this commit:** - We will select the first lowest sequence template that satisfies either of the following conditions: 1. The template's department matches the employee's department. 2. The template has no department assigned. task: [6255087](https://www.odoo.com/odoo/project/1251/tasks/6255087)
Features or functions removed from Odoo
This pull request removes several community-developed apps from the core Odoo Enterprise platform. These apps were identified as no longer essential and were removed to streamline the system and reduce potential maintenance overhead. This change improves the overall performance and stability of the Odoo Enterprise environment.
Original PR description
- Community https://github.com/odoo/odoo/pull/267998
Code cleanup and technical improvements
This update simplifies the underlying code for our account reporting modules. As part of a larger migration, the team has replaced older components (`t-custom-model`) with newer, more efficient structures (`t-model` and `t-model.proxy`). This ensures continued stability and performance.
Original PR description
* = [accountant_knowledge] As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`. community: https://github.com/odoo/odoo/pull/269573