Daily updates from Odoo
Monday, April 28, 2025
29 changes · master
Enhancements to existing features
Studio’s automated checks for form and list editing were updated to a newer testing approach. This helps the team validate Studio changes more reliably without changing day-to-day user functionality.
Indian payroll reports are now easier to read and use, with better default selections, formatting, and alignment in exported spreadsheets. Reports also work more reliably for businesses operating multiple companies by keeping each company’s payroll reports separate and preventing duplicate reports for the same period.
Original PR description
This PR improves the clarity, readability and UX of the reports of the indian payroll localisation. What has been done: - The current month is set as default in the EPF report - The text/numbers are correctly left (right) aligned in the xlsx reports - The year is correctly formatted in the EPF report list view - Prevent multiple generation of the report for a given month/year pair The PR also makes the reports compatible with a multi-company environment. task-4711790
Egypt payroll now includes additional salary rules for allowances, leave calculations, overtime, annual leave balances, and yearly gross pay. The update also aligns social insurance naming and tax settings with revised exemption and bracket percentages, helping payroll teams calculate Egyptian payslips more accurately.
Original PR description
In this PR, I have added the salary rule to the employee structure for Egypt. - Salary Rules: - Housing Allowance. - Annual leave provision. - Sick leave calculation. - Unpaid leave calculation. - Out-of-contract leave calculation. - Annual leaves remaining balance. - Gross Yealy. - Overtime. - Updated the name of the Social Insurance rule. - Adjusted the Income Tax exemption amount to 20,000. - Revised the percentages for the Tax Brackets. Task-4509957
The VoIP module has been updated to use Odoo’s newer internal domain handling approach, replacing an older component that is being phased out. This helps keep the module aligned with platform changes and reduces future maintenance risk, with no expected direct change for end users.
Original PR description
odoo.osv is on its way to being deprecated. This commit replaces its usage with Domain, along with rewriting some domains with the new super cool syntax.
Helpdesk users now create a sales order from a dedicated button on the ticket form instead of creating sales order lines automatically from the field. This makes the sales workflow clearer and aligns helpdesk billing behavior with recent sales process changes.
Original PR description
In this PR, we replace the creation of SOL on the fly by an SO creation button in the ticket form. This follows the changes introduced in https://github.com/odoo/odoo/pull/193079. related-https://github.com/odoo/enterprise/pull/42211 task-4461919
Users can now start a signature request by choosing a PDF from the Documents app directly within Sign. This streamlines the workflow by creating a sign template from the selected document and taking users straight to preparing and sharing it.
Original PR description
## Before this commit: Importing PDF files from the documents app to sign on the sign app was not possible. ## After this commit: A new option is shown now in the sign request cog menu that allows the users to import a pdf file from Documents, create a sign template for it, and redirects them to sign and share it. task-4484893
Printed payslips now follow the payroll structure setting for worked day lines. If worked day details are disabled on the payslip structure, the printed report no longer shows the worked days table, keeping employee documents consistent with the form view.
Original PR description
- If the payslip struct has `use_worked_day_lines = False` the printed payslip should not have worked_days_table Task: 4720429
Social media communications for events with multiple time slots are now limited to one post for the overall event. This avoids duplicate promotional messages for each individual slot, keeping event communication clearer and less repetitive.
Original PR description
Do not consider this PR - closed soon. Used for testing and tests.
The end of service report for UAE payroll now calculates worked years based on the employee's full time with the company, rather than only counting actual worked days. This provides a more complete tenure figure for end of service reporting and related HR payroll decisions.
Original PR description
- update the calculation for the worked years in the end of service report to return the whole duration worked with the comapny not just the actual worked days. Task: 4703337
Resolved issues and error corrections
Payroll batches now select employees based on active contracts during the batch period, reducing mistakes such as duplicate or incorrectly matched payslips. This helps payroll teams generate batches with the right contracts and salary structures, improving accuracy across payroll and related accounting reports.
Original PR description
* = hr_payroll{,_account}, l10n_{be,in}_hr_payroll
Problem
----------
- An employee can not have multiple payslip in a batch
- Wrong contract can be selected in the wizard
- Difference between structure payslip's structure and contract's one
Objective
----------
- Base the employees selection on active contracts running in the batch period
- Update tests to follow the good behaviour
Solution
----------
- Link payslip employee wizard with a batch one time with the context
task-4483393The update removes an unrelated point of sale manager permission from shared accounting test setup so permission checks better reflect real usage. Point of sale tests now receive that access only where needed, and product users gain read-only access to Urban Piper status data.
Original PR description
The `group_pos_manager` was previously reintroduced in `AccountTestInvoicingCommon` due to demo data changes. However, this group is unrelated to the `account` module and may mask real permission issues in tests. This commit removes the group from the common test setup and adds it explicitly in the relevant PoS test cases where needed. Grants read-only access to `product.urban.piper.status` for product users. task-id: 4678172 community PR: https://github.com/odoo/odoo/pull/205318
A subscription project helper was renamed to stay aligned with the related sales project update. This prevents a mismatch that could affect revenue item retrieval for subscription projects, with no expected change to day-to-day workflows.
Original PR description
Match the method name from `sale_project` changed in community side PR. opw-4652472
Pivot tables in spreadsheets now generate DATE formulas without unwanted spaces before the day and month values. This prevents formatting issues and makes generated spreadsheet formulas cleaner and more reliable for users.
Original PR description
Removed extra spaces in front of the day and month in DATE function. Task: 4725023
Code cleanup and technical improvements
IoT action confirmations are now handled through a more general confirmation message instead of being limited to print confirmations. This makes it easier for different connected devices and sessions to confirm operations reliably while keeping messages tied to the right session.
Original PR description
Before this commit, the only action confirmation available through websocket was `print_confirmation`. This message has been generalized to allow listening for every action confirmation (now `operation_confirmation`). The recipient will be able to filter messages by `session_id` in order to get those from its session. Community PR: [https://github.com/odoo/odoo/pull/206903](https://github.com/odoo/odoo/pull/206903)
Miscellaneous changes
With this commit we remove the namespaces that are not used in the cdfi document. Steps: - Create an invoice and send the edi document - Look at the xml -> namespace `xmlns:cce20="http://www.sat.gob.mx/ComercioExterior20"` is included but unused opw-4493568 Forward-Port-Of: odoo/enterprise#83838
Original PR description
With this commit we remove the namespaces that are not used in the cdfi document. Steps: - Create an invoice and send the edi document - Look at the xml -> namespace `xmlns:cce20="http://www.sat.gob.mx/ComercioExterior20"` is included but unused opw-4493568 Forward-Port-Of: odoo/enterprise#83838
Avoids unnecessary `/sign/sign_request_items` call after refusal by: - Adding `isRefused` flag to skip RPC when token is invalidated - Preserves normal flow for successful signatures **Benefits:** Reduces network traffic + server load in refusal scenarios. task-4642104 Forward-Port-Of: odoo/enterprise#81248
Original PR description
Avoids unnecessary `/sign/sign_request_items` call after refusal by: - Adding `isRefused` flag to skip RPC when token is invalidated - Preserves normal flow for successful signatures **Benefits:** Reduces network traffic + server load in refusal scenarios. task-4642104 Forward-Port-Of: odoo/enterprise#81248
Change VAT in invoice report if the invoice is set as cfdi to public to use a generic vat for both national and international clients to have more coherence with the xml that is generated for the invoice. task-4588311 Forward-Port-Of: odoo/enterprise#83771 Forward-Port-Of: odoo/enterprise#79775
Original PR description
Change VAT in invoice report if the invoice is set as cfdi to public to use a generic vat for both national and international clients to have more coherence with the xml that is generated for the invoice. task-4588311 Forward-Port-Of: odoo/enterprise#83771 Forward-Port-Of: odoo/enterprise#79775
Creating an SO requires either sudo or some sort of SO group which is not set by default. In this case it looks like sudo-ing for creation during setup then unsudo-ing works fine. So do that to avoid over-accessing. https://runbot.odoo.com/odoo/error/163657 Forward-Port-Of: odoo/enterprise#84272
Original PR description
Creating an SO requires either sudo or some sort of SO group which is not set by default. In this case it looks like sudo-ing for creation during setup then unsudo-ing works fine. So do that to avoid over-accessing. https://runbot.odoo.com/odoo/error/163657 Forward-Port-Of: odoo/enterprise#84272
In this commit: === - Fixed a traceback that occurred during menu synchronization caused by multiple product.template.attribute.value (PTAV) records found, where only one was expected (singleton error). - The issue was due to having both active and inactive PTAV records linked to a product. task-4753173 Forward-Port-Of: odoo/enterprise#84211 Forward-Port-Of: odoo/enterprise#84127
Original PR description
In this commit: === - Fixed a traceback that occurred during menu synchronization caused by multiple product.template.attribute.value (PTAV) records found, where only one was expected (singleton error). - The issue was due to having both active and inactive PTAV records linked to a product. task-4753173 Forward-Port-Of: odoo/enterprise#84211 Forward-Port-Of: odoo/enterprise#84127
The pos.order form view removed the refund button for the inherited view. This can cause issues if other modules depend on that button to add to the arch, so making it invisible would still make the element accessible by xpath. ci error https://runbot.odoo.com/runbot/build/78974416 Forward-Port-Of: odoo/enterprise#84118 Forward-Port-Of: odoo/enterprise#84030
Original PR description
The pos.order form view removed the refund button for the inherited view. This can cause issues if other modules depend on that button to add to the arch, so making it invisible would still make the element accessible by xpath. ci error https://runbot.odoo.com/runbot/build/78974416 Forward-Port-Of: odoo/enterprise#84118 Forward-Port-Of: odoo/enterprise#84030
Removed extra spaces in front of the day and month in DATE function. Task: 4725023 Forward-Port-Of: odoo/enterprise#84121
Original PR description
Removed extra spaces in front of the day and month in DATE function. Task: 4725023 Forward-Port-Of: odoo/enterprise#84121
In this commit: - Updated Table 12 HSN Summary to classify HSN data separately for B2B and B2C as per the latest GST advisory. - Previously, all HSN summary data was pushed into Table 12 without distinction. - Now, HSN summary is categorized into B2B and B2C for accurate reporting. Task ID: 4465102 Forward-Port-Of: odoo/enterprise#84218 Forward-Port-Of: odoo/enterprise#80738
Original PR description
In this commit: - Updated Table 12 HSN Summary to classify HSN data separately for B2B and B2C as per the latest GST advisory. - Previously, all HSN summary data was pushed into Table 12 without distinction. - Now, HSN summary is categorized into B2B and B2C for accurate reporting. Task ID: 4465102 Forward-Port-Of: odoo/enterprise#84218 Forward-Port-Of: odoo/enterprise#80738
In cc759094a32e413cb1b71cbbe7be9dc85ded819f, the follow-up report generation was moved from `_send_email` to `execute_followup`, which is only called during manual follow-up processing. As a result, the report was missing when follow-ups were triggered by the cron. This commit moves the report generation logic to `_execute_followup_partner`, which is called in both manual and automatic (cron) cases. Also, patched `_run_wkhtmltopdf` in `TestAccountFollowupReports` to prevent tests from han
Original PR description
In cc759094a32e413cb1b71cbbe7be9dc85ded819f, the follow-up report generation was moved from `_send_email` to `execute_followup`, which is only called during manual follow-up processing. As a result, the report was missing when follow-ups were triggered by the cron. This commit moves the report generation logic to `_execute_followup_partner`, which is called in both manual and automatic (cron) cases. Also, patched `_run_wkhtmltopdf` in `TestAccountFollowupReports` to prevent tests from hanging, since PDF generation requires multiple workers and tests run with only one. task-4752110 Forward-Port-Of: odoo/enterprise#84114
Currently, an error is raised when the system tries to load non-existent XML files via a scheduled action. **Steps to produce:** - Install `l10n_lu_hr_payroll` module. - Navigate to `Settings > Technical > Scheduled Actions`. - Run action manually for **Payroll: Update data**. - Observe the error. `ValueError: FileNotFoundError('File not found: l10n_lu_hr_payroll/data/hr_salary_rule_data.xml') while evaluating 'model._update_payroll_data()'` Here, `_get_data_files_to_update` method
Original PR description
Currently, an error is raised when the system tries to load non-existent XML files via a scheduled action.
**Steps to produce:**
- Install `l10n_lu_hr_payroll` module.
- Navigate to `Settings > Technical > Scheduled Actions`.
- Run action manually for **Payroll: Update data**.
- Observe the error.
`ValueError: FileNotFoundError('File not found: l10n_lu_hr_payroll/data/hr_salary_rule_data.xml') while evaluating 'model._update_payroll_data()'`
Here, `_get_data_files_to_update` method at [1] attempts to load the `hr_salary_rule_data.xml` and `hr_gratification_rule_data.xml` files, which are not present in the codebase.
[1] - https://github.com/odoo/enterprise/blob/809fda39b439edf6259ade445e396e722c1bb53a/l10n_lu_hr_payroll/models/hr_payslip.py#L219-L220
This commit ensures the removal of invalid file references to prevent errors when executing the scheduled action.
Sentry - 6316151728
Forward-Port-Of: odoo/enterprise#83968
Forward-Port-Of: odoo/enterprise#83893Steps to reproduce: - starting planning_test_tour => error raised Source: - https://github.com/odoo/enterprise/pull/69888 introduced a new method _get_non_working_days_bounds which computes user_tz but the value can be False and also not coherent with user_tz computed in _calculate_start_end_dates (method from wich this new method is called) Fix: user_tz is computed the same way as its computed in the original method, the code is duplicated as signature cannot be changed in stable. For
Original PR description
Steps to reproduce: - starting planning_test_tour => error raised Source: - https://github.com/odoo/enterprise/pull/69888 introduced a new method _get_non_working_days_bounds which computes user_tz but the value can be False and also not coherent with user_tz computed in _calculate_start_end_dates (method from wich this new method is called) Fix: user_tz is computed the same way as its computed in the original method, the code is duplicated as signature cannot be changed in stable. Forward-Port-Of: odoo/enterprise#83955 Forward-Port-Of: odoo/enterprise#83926
**Issue** Menu items starting with helpdesk in their URL were not dispalyed to the public user in some cases. **Steps to reproduce** - Have `website_helpdesk` installed. - Activate the website form for a helpdesk team. - Create a menu item for the website, using a URL starting with helpdesk, e.g. `/helpdesk-123-test` - This menu is always invisible to the public user. **Cause** This issue was fixed in previous versions, but it appears the duplicated `_compute_visible` code present
Original PR description
**Issue** Menu items starting with helpdesk in their URL were not dispalyed to the public user in some cases. **Steps to reproduce** - Have `website_helpdesk` installed. - Activate the website form…
**Issue** Menu items starting with helpdesk in their URL were not dispalyed to the public user in some cases. **Steps to reproduce** - Have `website_helpdesk` installed. - Activate the website form for a helpdesk team. - Create a menu item for the website, using a URL starting with helpdesk, e.g. `/helpdesk-123-test` - This menu is always invisible to the public user. **Cause** This issue was fixed in previous versions, but it appears the duplicated `_compute_visible` code present in `website.py` was not deleted in forward ports of the fix (see enterprise PR 63105). https://github.com/odoo/enterprise/blob/b320390d23d3f009beb809e0334c8fa61c44d824/website_helpdesk/models/website.py#L24-L26 As a result, the menu item starting with `/helpdesk` is matched as a helpdesk menu, but will logically not be part of the helpdesk published menus: https://github.com/odoo/enterprise/blob/b320390d23d3f009beb809e0334c8fa61c44d824/website_helpdesk/models/website.py#L30-L32 opw-4560291 Forward-Port-Of: odoo/enterprise#83863 Forward-Port-Of: odoo/enterprise#82824
Updated test case `test_searching_lot_gs1`. This commit updates the test_searching_lot_gs1 test case to include an assertion ensuring that no lot is returned while searching. Related Community PR: https://github.com/odoo/odoo/pull/206268 Sentry:6544673924 OPW: 4725056 Forward-Port-Of: odoo/enterprise#83920
Original PR description
Updated test case `test_searching_lot_gs1`. This commit updates the test_searching_lot_gs1 test case to include an assertion ensuring that no lot is returned while searching. Related Community PR: https://github.com/odoo/odoo/pull/206268 Sentry:6544673924 OPW: 4725056 Forward-Port-Of: odoo/enterprise#83920
`TestPayslipValidation.setUpClass` tries to create an `hr.leave.type` but that requires hr admin access. So add that. Issue likely became visible from the removal of demo data, though it only popped up on April 1st instead of March 27th or whenever the demo data change was merged. https://runbot.odoo.com/odoo/error/162257 Forward-Port-Of: odoo/enterprise#83667 Forward-Port-Of: odoo/enterprise#83665
Original PR description
`TestPayslipValidation.setUpClass` tries to create an `hr.leave.type` but that requires hr admin access. So add that. Issue likely became visible from the removal of demo data, though it only popped up on April 1st instead of March 27th or whenever the demo data change was merged. https://runbot.odoo.com/odoo/error/162257 Forward-Port-Of: odoo/enterprise#83667 Forward-Port-Of: odoo/enterprise#83665
These tests create sale orders, but `self.env.user` does not necessarily have the right to create one by default. https://runbot.odoo.com/odoo/error/163635 Forward-Port-Of: odoo/enterprise#83676 Forward-Port-Of: odoo/enterprise#83672
Original PR description
These tests create sale orders, but `self.env.user` does not necessarily have the right to create one by default. https://runbot.odoo.com/odoo/error/163635 Forward-Port-Of: odoo/enterprise#83676 Forward-Port-Of: odoo/enterprise#83672