Daily updates from Odoo
Tuesday, June 9, 2026
33 changes · master
Resolved issues and error corrections
This update removes unnecessary code from the timesheet grid component. Previously, unused data passed to the grid rows has been removed, streamlining the component and improving performance. This change ensures the timesheet grid is more efficient and maintainable.
Original PR description
Currently, we are not passing the relation props to the Many2OneGridRow component. Therefore, it is unused and has been removed. task: 4461272
This update fixes an issue preventing users from accessing the payroll tab when creating a new employee in the Belgium localization. The fix involved adjusting how a related field is calculated, ensuring the payroll tab opens correctly without errors. This improves the employee onboarding process for Belgian companies.
Original PR description
[FIX] l10n_be: payroll tab opening
Bug reproduction:
1 - Master -> Belgium company -> Employee app.
2 - Create new employee, before saving it press to payroll tab, traceback is there.
Bug cause:
1 - available_l10n_be_worker_status has a compute
2 - l10n_be_worker_status uses filterable_selection widget that uses available_l10n_be_worker_status as whitelist_fname.
3 - Before available_l10n_be_worker_status compute works, the JS of widget executes and this.props.record.data[this.props.whitelist_fname].includes raises the error, since False has not includes
Bug solution:
1 - I have used the filterable_selection in the Belgium Localization before and it was not causing this issue.
2 - I noticed that inherited=True is used in field available_l10n_be_worker_status for the employee, but there is no upper model that uses this field so inherited=True is meaningless.
3 - When we deleted it, it works.
task - 6275543This update simplifies the process of creating invoices for subscriptions by removing redundant logic previously handled by the Sales module. The change ensures Sales remains responsible for its button conditions, making the system more stable and easier to maintain. This improves the overall reliability of subscription billing.
Original PR description
Subscription used to override the Sales "Create Invoice" button to inject its own rules. That forced us to re-implement Sales visibility logic and keep it in sync, which is fragile and easy to miss when Sales evolves. Keep Sales in charge of its own button conditions and add a dedicated Subscription button only when needed. This preserves upstream behavior while still enabling subscription-specific flows. task-6208702 See also: - https://github.com/odoo/odoo/pull/263868
This update corrects a previous issue where the 'Add reaction' button was incorrectly displayed on all messages in the Odoo Chatter interface. The fix ensures the button's visibility is properly controlled, preventing a confusing user experience. This was a regression caused by a previous code change.
Original PR description
Before this commit, message action "Add a reaction" was always visible on all messages in chatter. This is a regression made by [1], in which the `Message.isActive` getter was overridden and mistakenly passed `undefined` as props to the `QuickReactionMenu`, which made it display the button. This commit fixes the issue by enforcing `Boolean()` on `Message.isActive`, so that this is properly provided to `QuickReactionMenu` to enforce its visibility state. https://github.com/odoo/odoo/pull/268832 [1]: https://github.com/odoo/enterprise/pull/110501 Before / After <img width="543" height="332" alt="Screenshot 2026-06-08 at 12 20 40" src="https://github.com/user-attachments/assets/92db46fd-f3d8-4d26-847e-c972e8103c83" /> <img width="527" height="313" alt="Screenshot 2026-06-08 at 12 20 53" src="https://github.com/user-attachments/assets/b49d18c2-b601-4567-872b-ceeb02ca1996" />
This update resolves an issue where PDF documents received via email were incorrectly displayed with a duplicate iframe preview. The fix ensures that the document preview accurately shows the PDF content, addressing a visual inconsistency. This improvement enhances the user experience when viewing documents attached to emails.
Original PR description
**Steps to reproduce:** - Install documents_account - Set up alias to catch incoming mails - Receive a mail with xml attachement which can be previewed as pdf - Go to Documents app - Click on the…
**Steps to reproduce:** - Install documents_account - Set up alias to catch incoming mails - Receive a mail with xml attachement which can be previewed as pdf - Go to Documents app - Click on the document preview - Preview is split in two iframes, both with the same content (pdf) **Issue:** Due to the `isPdf` patch the attachment can match multiple types for the preview (pdf and text) as both getter return `true`. ``` <iframe t-if="state.file.isPdf" ... <iframe t-if="state.file.isText" ... ``` It also seems that xml received by mail are imported as text, which is why the issue doesn't happen when manually uploading the same xml file. **Fix:** Ensure that if the document is matching `isPdf`, it doesn't trigger the second iframe with `isText`. Also it seems fixed in 19.0 as the text iframe is replaced by this xpath: `<xpath expr="//iframe[@t-if='state.file.isText']" position="replace">` which was added for https://github.com/odoo/enterprise/commit/de614ee5e9a087d49939c65c0118ae6164c7b31b related patch: https://github.com/odoo/enterprise/commit/ffcdd2275c8bf564e15151ccbcaf3965ed968450 opw-6018536 Forward-Port-Of: odoo/enterprise#118863 Forward-Port-Of: odoo/enterprise#112041
This update fixes a bug that prevented recent ratings from appearing in the Helpdesk rating dashboard. The change now uses the current date and time for searches, ensuring that ratings created within the last seven days are accurately reflected. This improves the accuracy of reporting and provides a more complete view of customer feedback.
Original PR description
Before this commit, the ratings created the current date at 23h will not been taken into account in helpdesk rating dashboard. This commit uses datetime.now() instead of date.today() to search the ratings in the last 7 seven days. runbot-error-230905 Forward-Port-Of: odoo/enterprise#119035
This update corrects an issue in the l10n_lu_reports module that caused incorrect balance sheet reports. Specifically, fields 2955 and 2956 must always be set to zero, as required by Luxembourg's eCDF reporting standards. Fixing this ensures reports are accepted by the eCDF, preventing data rejection and maintaining accurate financial reporting.
Original PR description
Before this commit, fields 2955 and 2956 in the balance sheet could be incorrect. 2955 must always be blank (not exist) and 2956 must always be 0 per: https://ecdf-developer.b2g.etat.lu/ecdf/forms/popup/CA_PLANCOMPTA/2020/en/2/rules page 116 + 117 If they are not these values specifically, submitting the XML to eCDF results in the report being rejected. Steps to reproduce: - Install l10n_lu_reports - Create a journal entry for a closed year (2025) that debits account 142000 and credits another account that starts with a 1 - Go to the balance sheet for 2025 - Download the XML for the report - 2955 is present and 2956 is either not present or is not 0 (behavior varies between versions) Ticket [link](https://www.odoo.com/odoo/project.task/6246564) opw-6246564 Forward-Port-Of: odoo/enterprise#119193
This update fixes a technical error that was preventing warning messages from being logged correctly within the IoT module. The issue stemmed from how data was being passed to the logging function, and this change ensures all warning messages are now properly recorded.
Original PR description
Error: ``` TypeError: Logger._log() got an unexpected keyword argument 'ip' ``` Cause: - The `**new_iot_record` unpacks the dictionary into keyword arguments for `Logger._log()` instead of supplying it as the value for the third `%s` placeholder in the warning message, causing the error because `_log()` doesn't accept keywords such as `version` or `ip`. sentry-7522168864 Forward-Port-Of: odoo/enterprise#119494
This update resolves a bug where the 'Reset Selected Work Entries' function in payroll was unexpectedly deleting work entries. The issue stemmed from incorrect time zone handling, which caused the system to incorrectly identify and remove entries. The fix ensures accurate work entry management regardless of employee time zones.
Original PR description
Setup: Set the work entry source to attendance for an employee with active contract and change his timezone so that it differs from the working schedule one. Reset previous/next day delete Work Entry (payroll) - Step to reproduce: after an attendance was created, go to "Work Entries" in payroll, select the previous/next day and hit "Reset Selected Work Entries". The Work Entry will disappear. - Cause: domain to nullify using wrong tz - Solution: adjust domain to use calendar tz - Test: testing positive ans negative tz in hr_work_entry_attendance (enterprise) Task: 6072325 Forward-Port-Of: odoo/enterprise#118940 Forward-Port-Of: odoo/enterprise#114148
A technical issue preventing users from configuring billing targets within the Timesheets module has been resolved. This change ensures that users can correctly set billing rates for employee time entries, improving the accuracy of billing data. The fix addresses a problem related to a required field within the Timesheets configuration.
Original PR description
… of employees Prerequisites to reproduce: - Enable `Billing Rate Indicators` in timesheets. - Change timesheet access of user to `User: all timesheets` - Remove Employee access Steps to Reproduce: - In Timesheets app, from configuration go to `Billing Time Targets` - Click on view button on any row Issue: - A traceback breaking the flow. Reason: - We use `hr_presence_status` widget which requires `work_location_type` field, change made from https://github.com/odoo/odoo/commit/0496ed10636c7b2dfde7038a43494d4edbd9f95b. - Thus unavailability of field causing the traceback. Fix: - Add a related field for work_location_type from which we get the value. Forward-Port-Of: odoo/enterprise#97502
This update adds a warning banner to key Philippine tax reports (SAWT/QAP, BIR 2306/2307, SLSP) to alert users when contacts within the report lack a defined entity type. This ensures accurate reporting and helps users quickly correct missing information, preventing potential issues with tax compliance.
Original PR description
Add a warning banner on SAWT/QAP, BIR 2306/2307, and SLSP reports when one or more contacts appearing in the report do not have an entity type set. The banner includes a link to view and update the affected contacts. Community PR: https://github.com/odoo/odoo/pull/268460 task-6278053
This update corrects a previous issue in the overtime tour by changing the tracking method field from a dropdown to a checkbox. This simplifies the process for employees and administrators, ensuring consistent and accurate overtime tracking. The change also includes improvements to the tour's execution flow.
Original PR description
The tour previously matched the tracking method field with his previous implementation, where it was a dropdown selection, while now is a checkbox. task-6197878 Forward-Port-Of: odoo/enterprise#116733
This update corrects an issue where combo products incorrectly appeared in the 'Invoiced Not Delivered' report even after full delivery of their items. The fix ensures the report accurately reflects only genuinely undelivered items by excluding the combo parent line, which doesn't track actual stock movements.
Original PR description
**Problem:** A combo product's parent line appears in the "Invoiced Not Delivered" report (Accounting > Review) and stays there permanently, even after all of its combo items are delivered. **Steps…
**Problem:** A combo product's parent line appears in the "Invoiced Not Delivered" report (Accounting > Review) and stays there permanently, even after all of its combo items are delivered. **Steps to reproduce:** 1. Create a combo product bundling two storable items. 2. Sell the combo on a sale order, confirm and invoice it. 3. Deliver every combo item. 4. Open Accounting > Review > Invoiced Not Delivered. **Current behavior:** The combo parent line is listed. While items are partially delivered, both the parent and the items are listed, duplicating the same information. **Expected behavior:** The combo parent is not listed; only the combo item lines, which carry the real delivery state, appear when they are genuinely not delivered. **Cause of the issue:** A combo parent is a virtual sale order line with no stock move of its own, so its delivered quantity is never advanced and always reads 0. The accrual report selects lines where `qty_invoiced_at_date > qty_delivered_at_date`, so the parent (which does receive an invoiced quantity from the combo logic) matches forever. **Fix:** Combo parents carry no delivery information of their own, so excluding them from the accrual search domain is more accurate than inventing a delivered quantity for them. Their combo item lines already represent the real delivery state, so the report stays correct. opw-6215110 Forward-Port-Of: odoo/enterprise#119243 Forward-Port-Of: odoo/enterprise#118942
This update resolves a bug that prevented users from creating new social media posts when no social account was configured. The fix prevents a crash caused by attempting to measure the width of a read-only text area, ensuring a smoother post creation experience.
Original PR description
Steps to reproduce: 1. Install social module 2. Keep no social account set 3. Create a new post by social media > posts menu > new Issue: We got a traceback saying: `OwlError: An error occured in the owl lifecycle (see this Error's "cause" property) TypeError: Cannot read properties of null (reading 'getBoundingClientRect')` Cause: When no social account is set, the message field renders in read-only mode, so the <textarea> is never mounted, and textareaRef.el is null. The useEffect tracking the textarea's width fires and crashes. https://github.com/odoo/enterprise/blob/77be4285785f9d8a462b99b23185a9aefeae4482/social/views/social_post_template_views.xml#L37-L41 Solution: Add a null guard on textareaEl inside the useEffect callback so that the width computation is skipped when the textarea is not present in the DOM. opw-6218431 Forward-Port-Of: odoo/enterprise#117599
This update corrects a bug in the Belgian payroll calculation that prevented the correct handling of the 'forced variable salary' for the 13th month pay structure. The fix ensures the system accurately incorporates this salary value during payslip computation, resolving a previous type error.
Original PR description
Steps to reproduce: * Create a new payslip in belgian localization * Set pay structure type to 13th month * Set the input value for the forced variable salary * Compute the payslip sheet Issue: * Despite the change of benefits to properties, the avg_variable_revenues was still being set as one of the benefit lines instead of ref_property value which was causing an type_error traceback Solution: A simple approach is to be followed to retrieve the value fo the forced variable salary from the actual property being set by the user at the payslip form view and will be accounted for in the payslip computation. Task: 6241608 Forward-Port-Of: odoo/enterprise#118862 Forward-Port-Of: odoo/enterprise#118644
This update fixes an issue preventing standard users from accessing timesheet configuration options and sharing rules with higher-level users. The change ensures all users with appropriate access, including those with 'All Timesheets' permissions, can correctly configure and share timesheet rules.
Original PR description
Issue 1: Assistant Rules inaccessible to standard users Steps to Reproduce: - Install sale_timesheet. - Disable the "Billing Rate Indicators" setting. - Log in as a user with only "Own Timesheets"…
Issue 1: Assistant Rules inaccessible to standard users Steps to Reproduce: - Install sale_timesheet. - Disable the "Billing Rate Indicators" setting. - Log in as a user with only "Own Timesheets" access. - Open the Timesheets app. Current Behavior: - The Configuration menu is completely hidden, making Assistant Rules inaccessible to the user. Cause: - When sale_timesheet is installed, the "All Timesheets" access restriction is inaccurately applied to the main Configuration parent menu rather than specifically targeting the Billing Rate child menus. - The Configuration menu is blacklisted using a strict AND condition, requiring the user to have the Use Assistant group and hold a Timesheets Admin / Administrator / Technical Features role. This prevents standard timesheet users from configuring their own rules. Fix: - Remove the "All Timesheets" access restriction from the parent Configuration menu and apply it directly to the Billing Rate menus instead. - Update the blacklisting logic to use an OR condition, ensuring the configuration menu is visible if a user has Admin access to timesheets or belongs to the Use Assistant group. --- Issue 2: Unable to share rules with higher-level users Steps to Reproduce: - Create a user with "All Timesheets" access. - Open the Timesheets app and navigate to Assistant Rules. - Attempt to share any rule with the newly created user. Current Behavior: - The new user is missing from the dropdown selection list. Cause: - The domain on the user selection field filters based on explicitly assigned groups (using group_ids for "Own Timesheets" access). Users with higher-level access, such as "All Timesheets" or "Timesheets Admin", have this access implied rather than explicitly assigned, meaning it only registers in `all_group_ids`. Fix: - Update the field domain to evaluate `all_group_ids` instead of `group_ids`. This ensures users with implied group access are correctly populated in the dropdown list. task-6236300 Forward-Port-Of: odoo/enterprise#117984
This update optimizes the timesheet grid by preventing unnecessary reloading of the entire form when you switch focus between the timer and other fields. This results in a smoother, faster experience for users entering and editing their timesheets. It’s a small but important improvement for efficiency.
Original PR description
This PR prevents re-rendering the whole systray form view when focusing in and out of the timer field. We instead handle the focus in the widget, ensuring only the field itself re-renders. Task-6251180 Forward-Port-Of: odoo/enterprise#118820 Forward-Port-Of: odoo/enterprise#118524
This update fixes an issue where the ICP export generated inconsistent XML reports by using values from multiple company contexts. The change ensures a single, reliable company context is used, improving the accuracy and clarity of the exported data. This resolves potential confusion and ensures data integrity for reporting.
Original PR description
Description of the issue this commit addresses: The ICP export could mix values from different company contexts. In some cases, the main identifier and the fiscal entity division value did not come from the same source, which could create confusing or inconsistent XML output. --- Desired behavior after this commit is merged: This commit makes the ICP export use one consistent company context for identifier values, reuses precomputed values when available, and avoids overwriting them with unrelated defaults. --- task-6065382 Forward-Port-Of: odoo/enterprise#119549 Forward-Port-Of: odoo/enterprise#112995
This update fixes an issue where online orders with tax included were incorrectly calculating prices. The fix ensures that the unit price and total price accurately reflect the tax amount, providing correct order totals for UrbanPiper integrations. This improves the accuracy of online sales transactions.
Original PR description
Steps to reproduce: --- - Configure Point of Sale with UrbanPiper credentials. - Sync a product priced at 100 with a 5% GST (tax type = Tax Included). - Place a test order. Issue: --- - Wrong calculation in order line: - unit_price: 95.24 - Tax Excl. price: 90.70 - Tax Incl. price: 95.24 - Expected: - unit_price: 100 - Tax Excl. price: 95.24 - Tax Incl. price: 100 Cause: --- - While computing the unit_price with Tax Included, the tax amount was not added back. Fix: --- - Ensure unit_price includes the tax amount when tax type is Tax Included. task-5031196 Forward-Port-Of: odoo/enterprise#119587 Forward-Port-Of: odoo/enterprise#92854
This update ensures that plugins used within the Odoo Sign service are correctly set up as services. This improves the stability and reliability of the sign request process, preventing potential errors and ensuring a smoother user experience for customers.
This update resolves minor issues impacting payroll calculations for Philippine employees. Specifically, it corrects data group assignments and ensures accurate display of payroll information, improving the reliability of payroll processing. The changes also align with testing requirements for data updates.
Original PR description
- Fixes a small issue with the computation of the amounts, by updating the compute dependencies and following the parent view example of using force_save on the fields. - Correct the invisible condition on the rate fields to properly hide the column itself and not its content. - Correct the group set on the daily wage field of the employee model, which should be the payroll user group and not the hr user group - As required by test_hr_payroll_data_updatable, update the salary structure to not be no-update.
The Documents app's search feature was temporarily broken after a recent update to improve memory usage. This fix re-introduced a necessary step to ensure uploaded files are correctly indexed for searching. While the memory optimization remains in place, this change restores the core search functionality.
Original PR description
**Steps to reproduce:** - Install Documents app - Upload a new pdf file - Try to search the file with the 'Indexed Content' filter - Search won't find the file even if the uploaded document contains…
**Steps to reproduce:** - Install Documents app - Upload a new pdf file - Try to search the file with the 'Indexed Content' filter - Search won't find the file even if the uploaded document contains the searched keyword/content **Issue:** After [1] (19.3+) the file upload process was reworked to avoid loading entire files into memory during attachment creation (removed `'raw': file.read()`). But this breaks the index content creation as it was using the `raw` field value during the create to trigger the `_index` function in `_get_datas_related_values`. Also, restoring the previous behavior for the indexation would undo the memory usage improvements that were made. **Fix:** Added the `_index` call in `_upload_file` after the attachment creation. Also optimize the default text index to avoid reducing too much the memory improvements (but for now the other mimetypes can still be impacted by the type-specific `_index_*` and the external libraries performances). [1] https://github.com/odoo/odoo/commit/6222dedaf89a595b6f499679c3f553aa081c46bd opw-6232999 Forward-Port-Of: odoo/enterprise#119635
This update corrects a technical issue in the Swiss Balance Sheet reporting, specifically within the Equity section. It now accurately separates legal reserve and retained earnings, providing a clearer and more compliant financial report. The 'Annual profit or loss' field is now used solely for informational purposes.
Original PR description
Fix the Equity section in the Swiss Balance Sheet. Adding a new line 'Profit / Loss brought forward' for the result brought forward, that allows to separate the legal reserve and the results. The new structure for the equity section is: - Share, corporate or foundation capital - Legal reserve - Retained earnings - Profit / Loss brought forward - Previous years' unallocated profit or loss - Treasury shares The 'Annual profit or annual loss' is now purely indicative and is not taken into account in the equity computation, as the amounts in this section are considered in the new Retained Earnings section. task-6220525 Forward-Port-Of: odoo/enterprise#119625 Forward-Port-Of: odoo/enterprise#117601
This update corrects a bug that prevented signature requirement features from working correctly for US deliveries using UPS. The change adjusts the API request to match UPS's requirements for package-level deliveries, ensuring accurate rate calculations and delivery confirmation. This resolves an error message related to unavailable options.
Original PR description
Issue ----- Enabling signature requirement blocks US -> US deliveries. Steps to reproduce ----- - Setup UPS - enable signature requirement - Set current company to US - Create a US Customer - Create…
Issue ----- Enabling signature requirement blocks US -> US deliveries. Steps to reproduce ----- - Setup UPS - enable signature requirement - Set current company to US - Create a US Customer - Create a product with some weight - Create a SO for the product - Add UPS delivery and try to get a rate > Error: "The requested accessory option is unavailable between the selected locations." Cause ----- Depending on the type of transfer, signature is requested at shipment or package level (see the "Delivery Confirmation Origin-Destination Pairs" category of the following link) https://developer.ups.com/api/reference/shipping/appendix1?loc=en_US US50 -> US50 & Canada -> Canada is package level Everything else is shipment level By default we use 'ShipmentServiceOptions_DeliveryConfirmation' for which 'DCISType' = 1 is the correct value. https://github.com/UPS-API/api-documentation/blob/b4064887ebcd9cd98085bc4cce088677c664473f/Shipping.yaml#L8902-L8911 For package level, we should use 'PackageServiceOptions_DeliveryConfirmation' for which 'DCISType' = 2 would be the expected value https://github.com/UPS-API/api-documentation/blob/b4064887ebcd9cd98085bc4cce088677c664473f/Shipping.yaml#L10410-L10421 ----- Ticket: opw-6173624 Forward-Port-Of: odoo/enterprise#117564
This update resolves an issue where clicking on social media posts (Facebook, Instagram, YouTube) without comments would cause a system crash. The fix ensures that the comments dialog opens correctly for these posts, improving the user experience. It also aligns the appearance of comments counters for different social media types.
Original PR description
*=social_youtube,social_instagram,social_facebook,social_twitter, social_linkedin **How to reproduce:** - Open the Social Marketing feed. - Click a Facebook, Instagram, or YouTube stream post with no…
*=social_youtube,social_instagram,social_facebook,social_twitter, social_linkedin **How to reproduce:** - Open the Social Marketing feed. - Click a Facebook, Instagram, or YouTube stream post with no comments. **Issue:** - A traceback is raised because the click handler tries to call `click()` on a missing comments element. - The comments dialog does not open. **Cause:** - The kanban record click handler forwards clicks to `.o_social_comments`. - For some media, the comments counter is not rendered when the post has zero comments. - See: https://github.com/odoo/enterprise/commit/0293d3e839825a4333882e831960050070b02ba6 **Fix:** - Make the shared handler detect when the comments element is missing. - Delegate that case to media-specific handlers so Facebook, Instagram, and YouTube can open their comments dialog directly. - This commit also hides the X and LinkedIn comments counters when there are no comments, aligning them with the other social media cards. Task-6113089 Forward-Port-Of: odoo/enterprise#118006
This update fixes a potential error that could cause the system to crash when calculating rental availability for products with start and return dates. Specifically, it prevents issues arising from conflicting date ranges between the cart and the product page, ensuring accurate availability displays.
Original PR description
Preventing traceback on incompatible dates between the cart and the product page. How to reproduce: 1. Add to cart a product with periodicity Hours/Days with a start date = return date (e.g.: Projector). 2. Go to the product page of a product configured with Pickup > Return (e.g.: Premium Bike, Luxury Room) 3. Traceback, as we try to get the availabilities on a negative period. start date > end date, as both dates are equals and the time is set from the Pickup and Return fields. Forward-Port-Of: odoo/enterprise#119570 Forward-Port-Of: odoo/enterprise#119480
This update resolves a failed test within the Odoo payroll system. The change involved making payroll warning data updatable, ensuring the system's accuracy and stability. This fix prevents potential issues with payroll calculations and reporting.
Original PR description
In this commit, we fixed a failed test by setting some payroll warnings updatable. task-6247204
This update fixes an error in the calculation of a specific employee contribution (cotisation_812) related to end-of-collaboration payslips for Belgian employees. The previous calculation was incorrect, leading to inaccurate contribution amounts. This change ensures accurate reporting of these contributions, aligning with Belgian tax regulations.
Original PR description
* = l10n_be_hr_payroll, test_l10n_be_hr_payroll_account
STEP TO REPRODUCE:
------------------
1- Log into a belgium company
2- click on "End of collaboration" for an employee with a ANNUAL_SALARY_REVALUED equal to 52248.52
3- Generate the termination payslip
4- Check the cotisation_812 value:
this value will be equal at 1/2 * 1/100 * TERM_BASIC and not 1/100 * TERM_BASICThis update introduces support for calculating and reporting voluntary overtime hours in Belgium, aligning with local regulations. It includes new work entry types, salary rules, and reporting mechanisms for DMFA and 281.10 tax forms, ensuring accurate payroll and tax compliance.
Original PR description
Add support for Belgian voluntary overtime in payroll, DMFA, and 281.10 reporting. * Introduce dedicated work entry types for: * Voluntary overtime exempt from ONSS/precompte (DMFA service code 81) *…
Add support for Belgian voluntary overtime in payroll, DMFA, and 281.10 reporting. * Introduce dedicated work entry types for: * Voluntary overtime exempt from ONSS/precompte (DMFA service code 81) * Voluntary overtime subject to ONSS/precompte at 150% and 200% rates (DMFA service code 1, remuneration code 1) * Add salary rules and categories for voluntary overtime remuneration. * Enforce yearly thresholds through payroll parameters: * 240h for voluntary overtime exempt from ONSS * 120h for voluntary overtime subject to ONSS * Exclude voluntary overtime from employment bonus calculations and paid amount computation where required. * Include voluntary overtime remuneration in payroll calculations and DMFA declarations. * Add dedicated 281.10 reporting support for voluntary overtime exempt from ONSS using the reserved tax form fields. * Fix DMFA service hour computation and add payroll/DMFA test coverage. TaskID: 6275791 Forward-Port-Of: odoo/enterprise#119355
This update resolves an issue where partner names with '&' characters were being incorrectly formatted for SEPA bank file exports, leading to rejections. The fix ensures '&' is preserved in human-readable fields like partner names and addresses, aligning with banking standards and preventing errors.
Original PR description
Problem: The previous fix (replacing '&' with '+' in _replace_characters_SEPA) was applied globally, affecting both reference/identifier fields and human-readable fields such as <Nm> (partner name)…
Problem:
The previous fix (replacing '&' with '+' in _replace_characters_SEPA) was applied globally, affecting both reference/identifier fields and human-readable fields such as <Nm> (partner name) and address lines.
As a result, a partner named "test & test GMBH" was exported as:
<Nm>test + test GMBH</Nm>
instead of the expected:
<Nm>test & test GMBH</Nm>
This caused bank file rejections because '&' is the correct XML encoding of '&' and is accepted by banks in human-readable fields.
Root cause:
ISO 20022 / EPC217-08 distinguishes two categories of data elements:
- Reference/identifier fields (InstrId, Ustrd, etc.): must use the restricted basic Latin character set — '&' is not allowed and must be replaced with '+'.
- Human-readable fields (Nm, AdrLine, etc.): may contain the extended Latin character set — '&' is valid and must be preserved so lxml can XML-escape it to '&' in the output.
Fix:
Revert the global '&' → '+' replacement in _replace_characters_SEPA so that '&' is preserved for name/address fields. The replacement of '&' with '+' for reference/identifier fields is already handled explicitly at the call sites in _get_CdtTrfTxInf (InstrId, Ustrd) via .replace('&', '+') before sanitize_communication is called.
ref commit : https://github.com/odoo/enterprise/pull/110809/changes/9e698e4ac9fdf66189ff6712f90a144560a1b484
documentation https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf:
Forward-Port-Of: odoo/enterprise#119640
Forward-Port-Of: odoo/enterprise#115409This update resolves an issue where the 'Sign Now' button wasn't appearing for internal users who were eligible to sign documents. The fix ensures the button is displayed correctly based on whether a signing order is in place, improving the user experience for internal signers.
Original PR description
Version: - saas-19.4 Steps to reproduce: - Create a sign request for an internal user. - Open the sign document from the Sign app. Issue: - The Sign Now button is not visible even when the current user is one of the signers. Cause: - The button visibility logic does not correctly check whether the current user is allowed to sign the document. Solution: - Show the Sign Now button when the current user is one of the pending signers and no signing order is configured. - If signing order is configured, show the button only when it is the current user's turn to sign. task-6267257
This update resolves a visual issue where the 'attendance-based' checkbox on employee payroll forms was missing its label and help text. The fix correctly positioned the field within the schedule group, ensuring it appears as intended for employees. This improves the usability of the payroll process.
Original PR description
[FIX] hr_work_entry_attendance: fix attendance_based checkbox Reproduction: Install hr_work_entry_attendance, employee form view, payroll tab, there is no label and help in the checkbox of attendance_based Bug cause: The field is added to the just after schedule group but indeed it should be added inside of the schedule group. Since it has not above group in view, it was not appearing properly. Solution: I put the field inside to the schedule group. task - 6284137
This update resolves a visual issue with the Frontdesk welcome screen, ensuring the privacy notice design adapts correctly to different content. This improves the user experience and maintains consistent branding within the Frontdesk module.
Original PR description
This PR fixes several visual issues caused the privacy notice design to be not tailored to any type of possible content. task-6022341