Daily updates from Odoo
Navigate
Branch
Monday, August 18, 2025
48 changes
Security fixes and vulnerability patches
The Hong Kong payroll module now relies on a safer direct file field for Manulife MPF spreadsheet exports instead of a separate attachment link. This reduces security exposure while keeping the report file available for normal business use.
Original PR description
We remove the xlsx_attachment_id field on l10n_hk.manulife.mpf model as we can only use the Binary field xlsx_file. We did this choice because of security concerns, as Binary fields are a bit safer than Many2One. Linked:https://github.com/odoo/upgrade/pull/7713 task-4771722
New functionality added to Odoo
US payroll now supports exporting data needed for IRS Forms 940 and 941 as CSV files, making it easier for businesses to prepare federal payroll tax filings through third-party services. The change also reuses bank account type information across US localization modules to support this reporting flow.
Original PR description
The PR consists of 2 commits, the first moves the `l10n_us_bank_account_type` field to `l10n_us` so we can reuse it here. The second implements an export feature for both form 940 and 941, similar to the existing W2 form export. task-5015755 PR notes --- Hello! Some remarks for the HR reviewer that looks at this PR: - I suppose it’s possible to extract a common class `l10n.us.form` that would pull out some common fields and code from `l10n.us.form.940`, `l10n.us.form.941` and `l10n.us.w2`. I’m not sure it’s worth it, let me know your preference! - The tests aren’t perfect because it seems that testing with the full US payslip rules can only happen in `test_us_hr_payroll_account`. I’m not sure it’s appropriate to test these forms there. `l10n.us.w2` has always been untested, so at least these new forms are a relative improvement. Let me know!
HR managers and administrators can now print salary certificates directly from an employee profile when UAE payroll is installed. This helps provide official salary documentation more quickly, provided the employee has an active contract and an assigned HR responsible person.
Original PR description
Once l10n_ae_hr_payroll is installed we can generate Salary Certificate. ### Prerequisites: - An employee must have an running contract in order to use this feature. - The active contract must have an assigned HR Responsible Employee for activity creation(scheduled activity) ### Functionality: - HR Manager/Administrator can navigate to the employee’s profile in the Employee module and generate the salary certificate using the (Print Actions button > Salary Certificate). task - 4551883
Enhancements to existing features
Belgian payroll now excludes PFI contracts when calculating an employee's seniority for departure notice periods. This helps ensure notice periods for leaving employees follow Belgian rules more accurately and avoids overstating seniority from ineligible contract types.
Original PR description
When you generate the notice period for leaving employees, you must compute their seniority. In Belgium, PFI contracts should not be taken into account. This commit filters the contracts to ignore PFI ones. task-4788455
This update adjusts several Point of Sale compliance features for Belgian, Swedish, and EU scale certification requirements. It improves configuration, session handling, and self-ordering behavior so businesses can better meet local fiscal and device compliance obligations.
Marketing automation mailing tests were updated to match the new default sender behavior. Emails from mass mailings now use the mailing’s responsible person as the author by default, helping campaigns reflect the correct ownership.
Original PR description
Emails from mass mailings are now sent with the responsible user of that mailing as the author by default, or the current user This change specifies that the responsible of the mailing is also the creator of the campaign so the tests that relied on that assumption remain valid. Task-2199202
Businesses can now choose specific product categories where the Contact Us button appears for zero-priced rental or subscription items. If no categories are selected, the behavior remains unchanged and applies to all products, giving teams more control without disrupting existing setup.
Original PR description
- Added an option to choose specific product categories where the Contact Us button should appear for zero-priced items. - If no categories are selected, the rule still applies to all products (same as before). - Makes it easier to apply the rule only to certain collections only. See also: - Community PR: https://github.com/odoo/odoo/pull/215526 - Upgrade PR:https://github.com/odoo/upgrade/pull/7928 Affected_Version:Master Task_ID:4819657
Creating a payroll run is now quicker because users choose only the start date with a simple date picker. The end date is still filled automatically and remains editable when adjustments are needed.
Original PR description
To ensure a smoother UX, the `daterange` widget has been replaced, as `date_end` is already calculated based on the selected `date_start`. Previous behavior: When creating a pay run and selecting `date_start`, a date range popup was displayed. This required two clicks, even though `date_end` was already auto-filled. New behavior: A simple date picker is used for `date_start`. The `date_end` remains editable so it can still be updated manually if needed. Task: 5005903 Forward-Port-Of: odoo/enterprise#92028
Payroll now only offers pay schedules that are supported by each country’s localization, reducing the risk of incorrect payslip calculations. When monthly payroll is the only valid option, the schedule selection is hidden to simplify employee and contract setup.
Original PR description
In most locas, we only have correct computations for monthly payslip so we should restrict the choice depending on the loca. Also if there is only one choice, monthly, we should not display the selection field at all. Task: 4890507
Kiosk configuration now shows only settings that are relevant to kiosk mode. This reduces confusion for users setting up kiosks and makes the configuration process quicker and clearer.
Original PR description
Before this commit: =================== - Configuring a kiosk showed many settings that were not applicable to kiosk mode, creating unnecessary complexity. After this commit: ================== - We have removed all the irrelevant settings from the kiosk configuration Task: 4830228 Related Community PR: https://github.com/odoo/odoo/pull/212665
Adds automated checks for the IoT printing service to make sure test prints use the expected connection method and receive responses in the right format. This helps reduce regressions and improves confidence that IoT printer actions continue working reliably.
Original PR description
This commit brings unit tests for the iot http service, and small fixes to it. It also brings a tour to ensure using 'Test' print on the iot device record uses websocket (after failing using webrtc and longpolling), and receives a response in the right format when calling the callback controller (that the iot box calls to send a websocket message).
Document search filters now separate files into clearer categories such as PDF/documents, images/videos, URLs, and spreadsheets. This makes it easier for users to find the right content quickly, including linked shortcuts to those document types.
Original PR description
Add more granularity to the documents filter. - PDF/Documents: All binary documents (+ shortcuts) which are not image/video, spreadsheet or shortcut of those. - Image/Video: All image/video documents (+ shortcuts). - URL: All documents of type 'url' (+ shortcuts). - Spreadsheet: All spreadsheet documents (+ shortcuts). Task-4897125
Payroll accounting now supports assigning analytic distributions on employee versions and salary rules. This helps businesses allocate payroll costs more accurately across departments, projects, or cost centers without extra manual accounting work.
Original PR description
task-4775857
Belgian payroll can now include an employee's seniority from before hiring when calculating notice periods. This helps produce more accurate departure notice results when the company chooses to count prior seniority.
Original PR description
In this PR, we added seniority at hiring to the notice period computation. When the option of including the Seniority at Hiring is set, we consider the first_contract in the notice period calculation as `notice.first_contract - seniority at hiring (in years)`. Related task: 4936801.
The Helpdesk tracking component has been renamed to better show that it also enables communication-thread behavior. This is a low-impact internal clarification that helps future maintenance and supports upcoming resource aging features without changing day-to-day user workflows.
Original PR description
Due to changes in the mail.tracking.duration.mixin class, namely to enable it to support rotting resources, it now inherits from mail.thread. To clarify at a glance that the mixin makes the inheriting model into a thread, it is renamed to mail.thread.tracking.duration.mixin. task-4684660
Payroll users can now see employer cost directly on payslips and pay runs. This makes it easier to understand the full payroll expense without manually adding contributing salary rules.
Original PR description
Before: - The salary rule field was labeled "View on Employer Cost Dashboard" - Payslip list view did not include employer cost. - Pay run (batch) had no summary of total employer cost for all its payslips. After: - Renamed salary rule field to "Contributes to Employer Cost" for better clarity. - Added a computed "Employer Cost" field on the payslip, summing all rules marked as contributing. - Displayed "Employer Cost" by default in the payslip list view. - Added a new field on the Pay Run (batch) to show the total Employer Cost, computed as the sum of all employer costs from associated payslips. Task-4793801
Payroll screens now use the clearer label “Pay Schedule” instead of “Schedule Pay” for employee and contract template information. This improves consistency and makes the field easier for users to understand without changing payroll behavior.
Original PR description
Field label changes is employee and contract template view, from Schedule Pay to Pay Schedule Task ID: 5005026
The Point of Sale customer list now opens much faster when many customers are loaded and the cart has many items. This reduces delays for cashiers during checkout and improves the in-store sales experience.
Original PR description
Before this commit, opening the customer list in PoS could be slow when many customers were loaded (common in active PoS environments) and the current order had numerous orderlines. This performance hit was due to repeated recalculations of `get_total_with_tax`. This commit resolves the issue by storing the `get_total_with_tax` value of the current order when the customer list is opened. This value remains constant while the customer list is active, eliminating unnecessary recalculations. Performance Impact: With 500 customers loaded and 20 orderlines in the cart, opening the customer list improved from 5 seconds to 200 ms. opw-4921262 Forward-Port-Of: odoo/enterprise#92354 Forward-Port-Of: odoo/enterprise#89526
Spreadsheet users get a smoother experience when editing global filters, as panels now replace each other correctly and restore previous views when cancelled or removed. The update also protects performance by blocking very large static pivot insertions and adds chart zooming for easier analysis.
This update improves how Knowledge article data is loaded when no specific fields are requested. It helps ensure commonly needed information is available more consistently, supporting smoother performance and fewer missing-data edge cases.
Original PR description
Companion of https://github.com/odoo/odoo/pull/223199
The Approvals app now presents request cards in a clearer, easier-to-scan Kanban layout. Status labels display the right text and colors, users can group requests by status, and approver avatars are visible in category lists for quicker recognition.
Original PR description
In this PR, Before: - The Approvals Kanban board was difficult to read at a glance. - Status labels (like “Pending” or “Approved”) sometimes displayed incorrect colors or text. - Users couldn’t group approvals by status in the search view. - The list view for approval categories didn’t show user avatars. After: - Redesigned the Kanban cards to be cleaner and more readable. - Status labels now show the correct name and color consistently. - Added support to group approvals by status in the search view. - User avatars are now visible in the list view of approval categories Task-4677549
Weekly date filters now use a clearer shared starting point for the week. This keeps planning, attendance, and timesheet forecast reports aligned when users view information by week.
Original PR description
This PR changes the week-based domains to use the new 'week_start' keyword.
Users can now create a blank dashboard without leaving the spreadsheet selector. This removes extra steps when adding list, pivot, or graph views and makes the dashboard creation flow faster, especially when no dashboard exists yet.
Original PR description
**Description of the issue/feature this PR addresses:** - Enable users to create a new blank dashboard directly from the spreadsheet selector dialog instead of being limited to inserting into existing dashboards. **Current behavior before PR:** * Users could only insert list/pivot/graph views into existing dashboards. * Creating a new dashboard on the fly via the selector was not possible. * If no dashboards existed, users had to leave the selector, create one manually, and reopen the selector to proceed. **Desired behavior after PR is merged:** * The selector now offers a **“Blank dashboard”** entry in the Dashboard notebook. * Selecting this entry opens a minimal creation form (Name, Section, Access Groups) in a dialog. * Once saved, a new dashboard is created and immediately opened in edit mode as the insertion target. Task: [4948417](https://www.odoo.com/odoo/project/2328/tasks/4948417)
The Planning app now shows clearer helper text in the roles configuration menu and uses the standard default icon instead of a screenshot. This makes the setup experience cleaner and easier for users to understand.
Original PR description
- update the helper text in roles configuration - replace the screenshot with the default icon --- task-4951378
Project document tags now appear using the same colors defined for those tags. This makes tags easier to recognize at a glance and keeps the project document view visually consistent with tag settings.
Original PR description
Set the document tag color in the project to the same color as the tag color --- task-4951362
Resolved issues and error corrections
The Belgian payroll departure wizards now limit employee selection to the company the user is currently logged into. This prevents users from accidentally selecting employees from other companies and helps keep payroll departure processing accurate in multi-company setups.
Original PR description
Added a domain to employees to limit the employee field in the departurre wizard to the logged in company **Steps to reproduce:** - Log into a Blgian Company - Access the Departure wizard through Payroll/Reporting or through the cog actions in an employee. **Issue:** Previously, when using the departure wizard, the employees shown were all the employees across different companies, when in reality it should be employees of the logged in company only **Fix:** Added employee domain so that it allows employees from the current logged in company only Task: 4965719 Forward-Port-Of: odoo/enterprise#92224 Forward-Port-Of: odoo/enterprise#90813
An automated Web Studio test was updated to avoid occasional false failures caused by inconsistent browser event behavior. This helps keep development validation stable without changing the product experience for users.
Original PR description
There was an undeterminism in a test relying on the event beforeunload beign defaultPrevented. For some reason it failed sometimes, probably because of an override somewhere. This commit fixes the problem by asserting other things in the test, arguably even more relevant than before. runbot-error-229754 Forward-Port-Of: odoo/enterprise#92380
The restaurant floor plan now only shows appointments scheduled for the current day, preventing future bookings from appearing too early. Late customer appointments are also highlighted correctly, helping staff identify delayed arrivals at a glance.
Original PR description
Steps to reproduce: =================== 1. Install `pos_restaurant_appointment`. 2. From the Appointments menu, schedule an appointment for tomorrow for a table. 3. Open the restaurant floor plan. Issue 1: ======== - Appointments scheduled for tomorrow are incorrectly shown on the floor plan. Issue 2: ======== - When a customer is late, the appointment label is not displayed in red. Common Cause: ============= - The appointment's `start` field is already a `DateTime` object, but it is being deserialized again, which leads to incorrect time-based comparisons. Fix: ==== - Avoid deserializing the `start` field if it is already a `DateTime` object. Task: 4845006 Forward-Port-Of: odoo/enterprise#86997
Payroll users can now export Belgian Group S work entries for any active company they are allowed to use, instead of being limited to their current company. The export also checks that the selected company has its required Group S code set, helping prevent failed or incomplete payroll submissions.
Original PR description
before this commit only the current company was taken into account when exporting work entries now another company can be selected if multiple companies are active for the current user In addition to that this commit also add a check for the company's group s code to enforce the user to set it before exporting work entries task-4213675 closes old PR: odoo/enterprise/pull/71521 Forward-Port-Of: odoo/enterprise#89438
DHL shipping rate checks during ecommerce checkout now use a planned date in the future, preventing errors caused by same-day timestamps. This helps customers complete checkout more reliably when DHL delivery options are shown.
Original PR description
Before this commit: During checkout on Ecommerce website the default date of the order is current date and time. There is no option to change the date when getting rate. Which results in an error that the date must be in the future. After this commit: `Planned_date` for getting rate is set in furture to avoid the error. Docs reference: https://developer.dhl.com/api-reference/dhl-express-mydhl-api#reference-docs-section under rating endpoints. opw-4849754 Forward-Port-Of: odoo/enterprise#91705
This update adjusts the Planning app's automated split-shift walkthrough so it follows the correct path during testing. This helps ensure the related scheduling workflow remains reliable and reduces the risk of unnoticed issues reaching users.
Original PR description
In this commit, we add steps to ensure the tour take the good way.
Odoo now automatically matches customer account charges and settlements made through Point of Sale. This prevents settled POS amounts from incorrectly appearing as available credit for other invoices, reducing customer account confusion.
Original PR description
### Problem: When paying a PoS order using customer account, an account move line debiting Account Receivable will be created. Settling this amount inside the PoS (by depositing money) will create…
### Problem:
When paying a PoS order using customer account, an account move line debiting Account Receivable will be created. Settling this amount inside the PoS (by depositing money) will create another account move line crediting Account Receivable (represents the payment). The second move line is considered, by Odoo, as an outstanding amount, and this amount can be used to pay another invoice (sale order invoice). The moves affecting Account Receivable are still correct. However, unreconciling the two lines created from PoS will cause a confusion for clients who may use this amount to pay other invoices.
### How to reproduce:
* Open a PoS session.
* Create an order and pay using customer account.
* Settle this customer's account (inside PoS).
* Create a Sale Order and invoice it (or just an invoice).
* The amount settled can be used as outstanding amount and can be used to pay the created invoice.
commmunity PR: https://github.com/odoo/odoo/pull/210619#pullrequestreview-2853451890
opw-4794793
Forward-Port-Of: odoo/enterprise#92374
Forward-Port-Of: odoo/enterprise#86114Fixes an issue where nested grouped lines in accounting reports did not collapse properly and could trigger an error when users folded or unfolded a partner line. This improves report reliability and prevents duplicate lines from appearing during normal report navigation.
Original PR description
Steps to reproduce: - Create an Account Group - Create a new Account Report as follows: * Name: any * Lines: 1. [test line] * Group By: partner_id,account_id * Expressions: 1. [test expression] *…
Steps to reproduce:
- Create an Account Group
- Create a new Account Report as follows:
* Name: any
* Lines:
1. [test line]
* Group By: partner_id,account_id
* Expressions:
1. [test expression]
* Computation Engine: Odoo Domain
* Formula: [('account_id.account_type', '=', 'asset_receivable')]
* Subformula: sum
- Actions > Create Menu Item
- Open the new report
- Try to unfold/fold a partner line
Issue:
Folding will not fold the first child (representing the created account group). Also, error will raise
```
Uncaught Promise > Got duplicate key in t-foreach: ~account.report~37|~account.report.line~255|{'groupby': 'partner_id'}~res.partner~4226|~account.group~90
Occured on odoo.nas.cpolar.cn on 2025-04-26 04:58:53 GMT
OwlError: Got duplicate key in t-foreach: ~account.report~37|~account.report.line~255|{'groupby': 'partner_id'}~res.partner~4226|~account.group~90
Error: Got duplicate key in t-foreach: ~account.report~37|~account.report.line~255|{'groupby': 'partner_id'}~res.partner~4226|~account.group~90
at AccountReport.template (eval at compile (https://odoo.nas.cpolar.cn/web/assets/debug/web.assets_web.js:13743:20), <anonymous>:138:49) (/web/static/lib/owl/owl.js:5752)
at App.callTemplate (https://odoo.nas.cpolar.cn/web/assets/debug/web.assets_web.js:11363:50) (/web/static/lib/owl/owl.js:3372)
at AccountReport.template (eval at compile (https://odoo.nas.cpolar.cn/web/assets/debug/web.assets_web.js:13743:20), <anonymous>:9:12) (/web/static/lib/owl/owl.js:5752)
at RootFiber._render (https://odoo.nas.cpolar.cn/web/assets/debug/web.assets_web.js:9774:38) (/web/static/lib/owl/owl.js:1783)
at RootFiber.render (https://odoo.nas.cpolar.cn/web/assets/debug/web.assets_web.js:9766:18) (/web/static/lib/owl/owl.js:1775)
at ComponentNode.render (https://odoo.nas.cpolar.cn/web/assets/debug/web.assets_web.js:10493:23) (/web/static/lib/owl/owl.js:2502)
```
Analysis:
Folding issues occurs because of a mismatch in the grouping markup quote escape. If we don't have the very same string the controller cannot properly recognize the parent line and then is unable to fold/unfold properly.
This eventually led to the mentioned error at unfold as the backend will try to generate the apparently missing lines to unfold, only to create duplicate lines
opw-4754241
Forward-Port-Of: odoo/enterprise#89726A failing automated test in the Saudi payroll module was resolved by assigning the correct HR user access group to an employee field. This helps keep payroll functionality stable and ensures employee information follows the expected access rules.
Original PR description
Issue: - The test case test_employee_fields_groups was failing Reason: - The group on the field was not defined. Fix: - added the group hr.group_hr_user on the field. runbot error: https://runbot.odoo.com/odoo/runbot.build.error/230911
The wording for the project documents folder setting was corrected so it no longer promises that task documents are automatically moved into that folder. This helps users understand the current behavior after document access and organization changes.
Original PR description
Before this commit, the tooltip displayed for `documents_folder_id` defined in `project.project` model, said all documents linked to a task of a project will be automatically added inside that folder but it is no longer the case since the refactoring of Documents to simplify the implementation but also let the documents user sorts his documents as he wants since now the access rights are defined by folder. This commit updates the tooltip accordingly. PR simplifying the bridge between documents and project apps: #75214 opw-5000224 Forward-Port-Of: odoo/enterprise#92189 Forward-Port-Of: odoo/enterprise#92164
Winbooks data imports now continue even when the chart of accounts setup differs from Odoo's default expectations. This prevents import failures and lets users review and adjust the imported draft data inside Odoo afterward.
Original PR description
When importing Winbooks data, if the CoA configuration in Winbooks is different from Odoo's default, users will experience a failure with a message similar to ``` Validation Error Tax Receivable Account (411000 VAT Recoverable) should be an account of type "Receivable" or "Payable" with both options "Allow Reconciliation" and "Non Trade" enabled. ``` This occurs because the account 411000, meant to store the tax provisions, in Winbooks was used as tax receivable. In similar cases we should not raise any error and should let the import go through: the data is imported in draft and the user has the possibility to bring the modifications in Odoo opw-4850314 Forward-Port-Of: odoo/enterprise#91828
Payslips now show the correct weekly hours when an employee has a flexible working schedule. This prevents employees and payroll teams from seeing outdated schedule hours on the payslip.
Original PR description
> note: this PR should only be FW'd till `saas~18.4`, after that for `saas~18.5` (i.e., `master`), [this PR](https://github.com/odoo/enterprise/pull/85557) should be merged. ### Steps to reproduce: -…
> note: this PR should only be FW'd till `saas~18.4`, after that for `saas~18.5` (i.e., `master`), [this PR](https://github.com/odoo/enterprise/pull/85557) should be merged. ### Steps to reproduce: - Enable "Flexible Hours" in a working schedule. - Assign the schedule to an employee. - Generate a payslip for the employee. - Observe that the "Working Schedule" section always shows `hours_per_week` from the total hours calculated from the Work Schedule defined before turning on "Flexible Hours" ### Description: - the payslip incorrectly displayed the weekly working hours from the Work Schedule regardless of whether the employee's schedule used flexible hours. ### Cause: - the report template did not check for the `flexible_hours` flag and always rendered the value from `contract_id.hours_per_week`. ### Fix: - added a condition in the payslip template to check if `flexible_hours` is enabled. - if true, it displays `full_time_required_hours` from the working schedule instead of the contract's `hours_per_week`. task: 4719717 Forward-Port-Of: odoo/enterprise#92441 Forward-Port-Of: odoo/enterprise#83910
XLSX files converted into Odoo spreadsheets now automatically limit portal users to view-only access. This prevents conversion failures when files come from shared folders where portal users previously had edit rights, keeping spreadsheet creation smoother and access rules consistent.
Original PR description
Let's say a Document Folder is shared with a portal user with 'edit' access. The portal user shares a .xlsx file to the folder, and an internal user later try to convert the file to odoo spreadsheet. During the conversion, the portal user has 'edit' role on the folder, which is copied to the documents.access records of the converted sheet. Since Odoo prevents Spreadsheets from being shared in edit mode to portal users, _check_spreadsheet() raises a Validation Error. <img width="544" height="188" alt="image" src="https://github.com/user-attachments/assets/48426ff8-0cd9-4fb0-8e52-31099e586064" /> To resolve this issue, we force portal users to have `view` role on Spreadsheets during the XLSX to Spreadsheet conversion. opw-4753670 Forward-Port-Of: odoo/enterprise#92427 Forward-Port-Of: odoo/enterprise#92134
This update fixes an incorrect provision code in the Swiss payroll configuration. It helps ensure payroll calculations and reporting use the right setup, reducing the risk of payroll processing errors.
Original PR description
Forward-Port-Of: odoo/enterprise#92477
Printer tests from the device form now handle cases where the IoT device does not respond in time. Instead of causing an unclear system error, users receive a proper notification, making troubleshooting smoother.
Original PR description
When testing printers from the device form, if no response was received from the IoT after the websocket timeout, we did not provide any message. This resulted in errors when providing `undefined` to the notification service. Forward-Port-Of: odoo/enterprise#92391
Users can now sign documents directly from the chatter without losing the document reference. This prevents signing actions from failing or opening with missing context, making the workflow more reliable.
Original PR description
Before this fix, when a user signed a document from the chatter, the reference_doc context was not passed correctly. This PR ensures the context is properly set so signing from chatter works as expected.
The accounting automation now runs under the correct company context, preventing exchange rates from being applied for the wrong company. This helps keep bank statement reconciliation and currency-related accounting values accurate in multi-company setups.
Original PR description
In this commit: https://github.com/odoo/enterprise/pull/89244/commits/788d79cea3c2d45582e16b25847c7821a6521da1 we fixed a bug where the cron would be trigger with the wrong company which impacted the currency rate. We decided to put the change in the try_auto_reconcile, but it was a bit of code duplication so this commit will refactor that. Task-4933083 Forward-Port-Of: odoo/enterprise#92016 Forward-Port-Of: odoo/enterprise#90305
A timesheet holidays test was updated so it no longer fails depending on the time of day or user timezone. This improves reliability of automated checks without changing customer-facing behavior.
Original PR description
Before this commit, when the `test_timer_methods_handle_project_access_restrictions` test is executed after 22h in UTC the test failed because the timezone of the current user is the belgian one. This commit makes sure the date and timezone no longer affects this test since it is not the purpose of this test. runbot-error-230490 Forward-Port-Of: odoo/enterprise#92264
The Belgian payroll employee form now places the “Seniority at hiring” field under Education instead of Citizenship. This makes the information easier to find in the section where users are more likely to expect it, with no change to payroll calculations or employee data.
Original PR description
Move Seniority at hiring from Citizenship to Education group in employee form. In this PR, we moved seniority at hiring from the Citizenship to the Education group in the employee form. Related task: 4936767. Forward-Port-Of: odoo/enterprise#90137
Peru PLE reports 5.1 and 6.1 now keep the original account move name in the report description instead of removing spaces or slashes. This helps ensure submitted reports retain the full original information, reducing audit-related risk with tax authorities.
Original PR description
Problem: For PLE reports 5.1 and 6.1, the value for `glosa` was being modified (i.e. blank spaces and slashes removed). Although SUNAT accepts the modified value, no information should be removed in the case it might lead to issues with tax authorities during an audit. Solution: The value for `glosa` on the reports should be the exact account move name. opw-4803060 Forward-Port-Of: odoo/enterprise#92271 Forward-Port-Of: odoo/enterprise#91967
Manufacturing users can now stop work orders that run longer than expected without hitting an access error related to analytic accounting entries. This prevents production workflows linked to billable projects from being blocked for users who do not have accounting permissions.
Original PR description
To reproduce:
=============
- create a BOM with an operation having an expected duration
- make sure the product of BOM has MTO and Manufacturing routes
- create a Billable project with visibility=portal
- create an SO with the product of BOM and set the project for analytic distribution
- confirm the SO -> a MO is created
- with a user having:
- hr.group_hr_user
- mrp.group_mrp_manager
- project.group_project_user
- hr_timesheet.group_hr_timesheet_approver
- go to the MO and start the first operation and wait to exceed the expected duration
- stop the operation -> access error on the analytic account line
Problem:
========
when the user tries to stop the operation, at first moment AAL will be created, as we exceed the expected duration, we will try to update the AAL which leads to an access error as the user does not have accounting rights.
Solution:
=========
deal with AAL records as sudo
opw-4897142
Forward-Port-Of: odoo/enterprise#92422Code cleanup and technical improvements
The expense OCR flow no longer predicts categories, so old category prediction code has been removed. This reduces unnecessary maintenance while keeping product prediction aligned with the newer OCR behavior.
Original PR description
In the newer version of the expense OCR (see commit 7c966fc), it doesn't predict a category anymore. Instead, it actually detects a description from the expense that can be used to predict the product. This commit cleans up the code that relates to the category prediction as it's not used anymore.
Miscellaneous changes
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. Forward-Port-Of: odoo/enterprise#83466 Forward-Port-Of: odoo/enterprise#83217
Original PR description
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. Forward-Port-Of: odoo/enterprise#83466 Forward-Port-Of: odoo/enterprise#83217