Daily updates from Odoo
Thursday, April 30, 2026
54 changes · master
New functionality added to Odoo
This update adds integration with Chainway's RFID scanner technology for improved stock management. This allows for faster and more accurate tracking of inventory items, reducing manual data entry and potential errors. The change enhances operational efficiency within the stock module.
Original PR description
- Integration with Chainway RFID scanner task-5162284
This update allows users to send purchase documents in bulk, streamlining the process for self-billing transactions. Previously, this functionality was unavailable. Now, the bulk sending button is enabled only when the purchase journal is configured for self-billing, ensuring accurate record-keeping.
Original PR description
Before this commit, the button to send in bulk from the purchase list view was disabled. With this commit, we add the possibility to send them in bulk, but only when the journal has been set as self-billing. Task-6075282
This update adds support for a key Belgian tax exemption for Small and Medium Enterprises (SMEs) related to withholding tax on payroll. It introduces a new company field to determine eligibility and adjusts calculations on the 274.XX tax sheets. This ensures compliance with Belgian regulations and improves reporting accuracy for SME clients.
Original PR description
Add support for the Belgian Small/Medium Enterprise withholding tax exemption (dispense de précompte professionnel PME) on the 274.XX sheets. - Add 'Small/Middle Sized' boolean field on company for eligibility - Add SME exemption rate rule parameter (0.12% for 2026) - Compute SME taxable amount and exempted amount on 274.XX sheets - Display SME exemption tab in form view when applicable - Include SME exemption page in PDF report - Add SME exemption worksheet in XLS export task-5428830
Enhancements to existing features
This update simplifies the asset depreciation views in Odoo, making them easier to use. Redundant information has been removed, and the search functionality has been streamlined to focus on key depreciation settings. A default 'Active' filter has been added for clarity.
Original PR description
Simplify the asset depreciation views by removing redundant information and improving usability. The method column is removed from the assets list since it is already included in the depreciation model name. The depreciation model list is cleaned up to show only the model by default, while filters for method, period, and number of depreciations remain available in the search view. A default Active filter is also added to display only active records. task-6128781 Forward-Port-Of: odoo/enterprise#115665 Forward-Port-Of: odoo/enterprise#114419
This update enhances the bank reconciliation process by displaying the analytic distribution of each reconciliation line. This provides users with clearer insight into where funds are allocated, simplifying the reconciliation process. The changes were largely adapted from existing bank reconciliation components.
Original PR description
For automated reco models, we didn't take the amount into account. That means that some lines could have a suggestion of reco model that makes no sense. This commit will allow to show the analytic distribution of a line in the line to reconcile so that it's clear for the user. (Most of the code is taken from the analytic distribution widget and adapted) Also make the popover works on hover task-5733382 Forward-Port-Of: odoo/enterprise#115553 Forward-Port-Of: odoo/enterprise#106118
This update adds a new record, `ai.session`, to track AI chat sessions launched through the website builder. Previously, tracking was unreliable due to manual user input. Now, the system can automatically identify AI sessions based on a unique identifier, enabling features like blocking website iframes during AI processing.
Original PR description
__Before this commit__ The `ai.session` record linked to a `discuss.channel` is not accessible from the frontend. This is a problem for the website builder AI because in some cases we need to know if…
__Before this commit__ The `ai.session` record linked to a `discuss.channel` is not accessible from the frontend. This is a problem for the website builder AI because in some cases we need to know if an AI chat session was launched from the website builder sidebar. For instance, to implement custom behaviors such as blocking the website page iframe while the AI is thinking. As a workaround, we currently check if the channel agent external identifier corresponds to the website builder AI, however this might be edited by the user, which would break the flow. __After this commit__ The inverse field `ai_session_ids` is added to `discuss.channel`. In practice, there might only be a maximum of one `ai.session` linked to a channel, but we keep it plural as a convention for `One2many` fields. Only the `ai.composer` and the `interface_key` linked to the session are put in the store at the moment, but fields can now be easily added if needed. We can now check for the `interface_key` in the frontend to know from which part of the code an AI session was launched. Those models have also been added to the Hoot mock server. The `action_launch_ai_chat` method is added to the `ai.agent` mock model and returns the session and the composer. task-5411100 Forward-Port-Of: odoo/enterprise#114472
This update moves a collection of tests designed to run after the Odoo Enterprise installation. These tests ensure the core functionality is working correctly following the setup process. This improves the stability and reliability of the Enterprise version.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/262056
This update removes outdated 'magic buttons' embedded within standard email templates. Instead, these buttons are now added after the email has been processed, streamlining the user experience and ensuring consistent functionality across all email communications. This change improves the reliability of email actions triggered by standard templates.
Original PR description
Before this commit: There were magic buttons that were part of the body of some standard email templates. After this commit: Remove all magic buttons that are part of the body of All standard email templates and add them after the mail is processed Task-3186268
This update adjusts how European leaves are calculated within the payroll system. Now, European leaves are treated as an advance on double holiday pay, ensuring they are taxed in the same manner. This change aligns with European regulations and provides accurate payroll calculations for employees on European leave.
Original PR description
European leaves must be considered as an advance on double holiday. Following that, it should be taxed the same way as double holiday. task-6127284
This update enhances the autofill feature in Odoo's spreadsheet tools, specifically for pivot and list views. Previously, these autofills were limited, but now they correctly handle formulas containing multiple pivot/list functions, ensuring more accurate data population. This improves the usability and reliability of data analysis within the spreadsheet.
Original PR description
This commit makes the pivot/list autofill work when the formula contains pivot/list functions that are not the only function of the formula. The list autofill would override everything, and the pivot autofill would not do anything. We will now autofill the pivot/list function normally and re-use the rest of the formula as is. Task: [6113901](https://www.odoo.com/web#id=6113901&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update streamlines product variant handling across multiple Odoo modules, improving the user experience and reducing complexity. Key changes include removing redundant features and aligning data structures for a more consistent and efficient workflow. This simplifies product management and improves overall system performance.
Original PR description
* = [account_intrastat,approvals, documents_product, helpdesk_sale_timesheet,hr_expense_stripe,l10n_ke_edi_oscu, l10n_ke_edi_oscu_stock,l10n_pe_edi_stock,mrp_plm, pos_pricer, quality_control,…
* = [account_intrastat,approvals, documents_product, helpdesk_sale_timesheet,hr_expense_stripe,l10n_ke_edi_oscu, l10n_ke_edi_oscu_stock,l10n_pe_edi_stock,mrp_plm, pos_pricer, quality_control, sale_subscription] - Drop all view inheritances targeting the removed product_variant_easy_edit_view - Remove `Product Variants` menus from Approvals and Quality Control -added account_avatax inside the Accounting tab group - Move pos_pricer Pricer group to after the Short Description group in the Sales page remove on_sale_price and pricer_tags_pricelist_id fields from the variant form - Remove product_product_view_list_at_date list view - Remove mrp_plm ECO button from variant form - Update sale_subscription variant field to many2many_tags_color_dot widget - Simplify UI extensions by removing redundant variant-only fields and customizations - Clean obsolete view logic and tests relying on direct variant editing This aligns product variant handling across modules, and ensures a consistent user experience. See Also: Community PR:https://github.com/odoo/odoo/pull/244185 Upgrade PR:https://github.com/odoo/upgrade/pull/9276 task-5207510
This update enhances the 'Sign' module's ability to display non-Latin fonts like Arabic and Bengali within PDF documents. Previously, font customization was limited; now, users can define multiple fonts within a system parameter, offering greater flexibility for diverse document layouts and languages without requiring manual parameter changes.
Original PR description
Up until now, by specifying a ttf font file in the use_custom_font system parameter, one could allow the display of different fonts or alphabets in the pdf generation in sign. With this PR we want to…
Up until now, by specifying a ttf font file in the use_custom_font system parameter, one could allow the display of different fonts or alphabets in the pdf generation in sign. With this PR we want to explore the possibility of defining multiple fonts, which would allow both for the use of different alphabets in different documents (without always having to go modify the system parameters) and multiple alphabets in the same document, in different text boxes/selection menus. The way it works is that a variable called sign.use_custom_font needs to be created in the system parameters and populated with a list of ttf files, separated by a ; For example, if one wants to add the fonts for Arabic and Bengali which are in files named NotoSansArabic-Regular.ttf and NotoSansBengali-Regular.ttf, the value of the newly created system variable should be: NotoSansArabic-Regular;NotoSansBengali-Regular The code should check all the usual folders for fonts. If a file is not found it is ignored and a warning is logged. At document rendering time, if an appropriate font is not found for a text to be displayed in a Text, TextArea or Selection field then the system defaults to Helvetica (latin alphabet) and most different-alphabet symbols are rendered as black boxes. This is intended. Task: 4731754
This update adjusts the popover that appears when setting time off requests in Payroll > Time Offs. Previously, the popover had a fixed width, causing issues with button placement. This change creates a dynamic popover that adapts to its content, ensuring a cleaner and more user-friendly experience.
Original PR description
When going into Payroll > Time Offs > Clicking on a cell > Clicking Set, the popover that appears is just the default MultiCreatePopover, which has a maximum width of 276px. In some cases, many buttons appear besides duration or in the footer, so we want the popover width to be dinamical instead. To do this, we create a new Popover that extends the original. The object is the same, but this way we can override the template and add mw-100 to the class of the body, so that the popover will adjust to its contents. Task: 5990385
This update simplifies the names of payroll structures used in the Belgian localization for Odoo Enterprise. The change reduces the length of these names, improving readability and maintainability within the system. This is an internal improvement that doesn't impact users directly.
Original PR description
Change the payroll structure names for the Belgian locatization to be shorter. task-6159009
This update replaces an outdated technology (Deferred) with a modern, more efficient approach (Promise.withResolvers) within the Odoo Live Chat module. This change enhances the overall performance and stability of the live chat feature, ensuring a smoother user experience.
Original PR description
Deferred is deprecated, Promise.withResolvers is now the preferred API. Part of [task-5262203](https://www.odoo.com/odoo/1519/tasks/5262203) Community: https://github.com/odoo/odoo/pull/262207
This update streamlines the softphone interface by simplifying the pill design and improving clarity. The changes include a visual update to recording and transcription indicators, as well as a removal of the 'On hold' pill. This enhances the user experience and reduces confusion.
Original PR description
Before this PR, the design of the pills were not consistent and a bit confusing. Instead, the recording pill is replaced by a red recording circle, the transcribing pill is replaced by the…
Before this PR, the design of the pills were not consistent and a bit confusing. Instead, the recording pill is replaced by a red recording circle, the transcribing pill is replaced by the "Transcribing..." text and the On hold pill is taken out. In the active state of the Hold and Record/Stop button the text is changed respectively to text-warning and text-danger. Before, the "transcribing" status depended on the recording status to be displayed, now it can be displayed whether or not the call is being recorded. task-5882281 | | Before | After | |--------|--------|--------| | Hold | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 39 44" src="https://github.com/user-attachments/assets/27f3f08e-40ae-440d-8024-2f16484b8e32" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 17 33" src="https://github.com/user-attachments/assets/4ff3e9ba-a2e4-4d0d-9e3d-eccc32c9e8c8" /> | | Hold + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 33" src="https://github.com/user-attachments/assets/96344c97-d56e-4887-bb16-94518b48faec" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 38 01" src="https://github.com/user-attachments/assets/5246614b-d18e-42ef-b84e-1ed783a700d2" /> | | Hold + Record | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 25 01" src="https://github.com/user-attachments/assets/cde4cd38-9162-4f36-bd91-faba26d71556" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 31" src="https://github.com/user-attachments/assets/af8fa55a-73cd-452d-924d-735d5ea2ff09" /> | | Hold + Record + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 38" src="https://github.com/user-attachments/assets/09dd22f6-c865-476e-8b02-1ffc92a0da1a" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 17 36 08" src="https://github.com/user-attachments/assets/62d7bc4c-2912-4324-8736-e40627048c49" /> | | Record | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 59" src="https://github.com/user-attachments/assets/dc8672d9-a8ba-484e-a1f1-ce3789aaa688" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 27" src="https://github.com/user-attachments/assets/102aea8f-98bf-4898-902f-7981fce37176" /> | | Record + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 50" src="https://github.com/user-attachments/assets/0e24d78a-0a43-4a8e-ab85-7fb5b059d959" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 17 36 05" src="https://github.com/user-attachments/assets/d2f56fdf-ad6b-4aaa-9eeb-39c47407c903" /> | | Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 39 00" src="https://github.com/user-attachments/assets/38ed1208-8b8c-4d34-89f9-e0c756bef49b" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 37 54" src="https://github.com/user-attachments/assets/f0eb6ebd-6a51-49e0-ac74-44ebfed7a23b" /> | | Forced Record + Forced Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 47 39" src="https://github.com/user-attachments/assets/57635d0d-60ac-4c2c-81b0-016dde2461a9" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 44 27" src="https://github.com/user-attachments/assets/59cba9d5-5d4f-4589-a5f0-c9484007c618" /> |
This update adjusts the XLSX export reports to align with new Indonesian tax regulations (Act 2025). Previously, reports relied on specific tax sections, but now they utilize report line names and tax tags for accurate reporting. This ensures compliance with updated tax requirements.
Original PR description
In this commit, the XLSX export and report warning are adapted to support the newly introduced TDS/TCS reports as per Act 2025. Previously, the XLSX reports depended on TDS/TCS sections. However, with Act 2025, certain taxes no longer have associated sections. This dependency has been removed, and report generation now relies on report line names and tax tags instead. task-6124431 Forward-Port-Of: odoo/enterprise#115679 Forward-Port-Of: odoo/enterprise#113916
Resolved issues and error corrections
This update resolves a bug where rental tour scheduling was failing due to invalid time selections. The fix ensures tours always use a valid future date, preventing errors when attempting to book tours at times before the current day. This improves the reliability of the rental booking process.
Original PR description
Since 605c8b47d52854e36c7cb822ccb2d40de44c4c3c, rourly rental products default to a rental period starting at the next hour of the current day. Tours override the time of the rental period, but not…
Since 605c8b47d52854e36c7cb822ccb2d40de44c4c3c, rourly rental products default to a rental period starting at the next hour of the current day. Tours override the time of the rental period, but not the date. If the tours tries to set a time which is in the past, the datepicker will discard the time, breaking the tour. Scenario: Running the tour between 11am-11:59am breaks test_website_sale_renting_ui: - Product page shows default times: today 12pm (start) to 1pm (end) - Tour tries to set start time to 8am - Datepicker rejects 8am (it's before the current time 11am-11:59am) and keeps 12pm - Tour then sets end time to 12pm, resulting in equal start and end times - Equal times are invalid, cart addition fails, tour breaks This commit, extracts the existing utility function into a shared helper that returns a guaranteed future date (next Monday + offset), ensuring tours always set valid times regardless of when they run. runbot-243459 Forward-Port-Of: odoo/enterprise#115687
This update addresses minor typographical errors and inconsistencies in the French reporting module (l10n_fr_reports). The changes ensure accurate and professional wording within the reports, improving clarity and user experience. This is a routine maintenance fix.
Original PR description
Fixes typos and ensures wording consistency No task ID Forward-Port-Of: odoo/enterprise#115595
This update resolves an issue where the XML files generated for the Hong Kong payroll system were not using the correct encoding format, preventing proper processing by the IRD platform. The fix includes adding a required file header and ensuring the correct encoding is used, ensuring accurate data transmission.
Original PR description
Following recent tests, we noticed that the encoding used when exporting our XML files doesn't follow the required format. We noticed two issues during testing: - The IRD platform expects the file to have BOM included. - The encoding in the header must be capitalized. We solve this in this commit by prepending the BOM bytes to the xml bytes; and making sure to capitalize the URF-8 in the header. task-6150470 --- Note: There will be a lot to do during forward ports, as these have changed quite a bit. (XML support for the other file types, and a proper testing file, at least) Forward-Port-Of: odoo/enterprise#115582 Forward-Port-Of: odoo/enterprise#115227
This update resolves an error preventing users from accessing the Spain VAT Books report. The issue stemmed from an outdated reference in a template, which was corrected to ensure proper functionality. This ensures users can accurately generate and review their VAT reports.
Original PR description
**Steps to reproduce:** - Install the `l10n_es_reports` and `accountant` modules. - Switch to an ES Company. - Navigate to Accounting > Reporting > Spain > `VAT Books`. **Error:** `Element '<xpath…
**Steps to reproduce:** - Install the `l10n_es_reports` and `accountant` modules. - Switch to an ES Company. - Navigate to Accounting > Reporting > Spain > `VAT Books`. **Error:** `Element '<xpath expr="//button[@t-if='this.props.line.chatter and !this.ui.isSmall']" position="replace"/>' cannot be located in element tree` **Root Cause:** After commit [1], the condition `this.ui.isSmall` was removed from the template `account_reports.AccountReportLineNameCustomizable` at [2]. However, the inherited template `l10n_es_reports.VatBooksLineName` was not updated accordingly and still references the old condition, which leads to the error. **Fix:** This commit prevents errors and ensures that users can open the `VAT Books` report by applying a fix similar to [2]. [1]: https://github.com/odoo-dev/enterprise/commit/fd0afa474600586e8703ec377f962c8d7d94307a [2]: https://github.com/odoo/enterprise/blob/7362f1c5be7f496bdab660ed8fad37a6dd283616/account_reports/static/src/components/account_report/line_name/line_name.xml#L81 opw-6169697 opw-6170173 Forward-Port-Of: odoo/enterprise#115412
This update resolves visual inconsistencies and usability problems that arose after relocating benefit information within the employee contract section of Odoo Enterprise. The change improves the user experience when managing employee compensation and benefits, ensuring a cleaner and more intuitive interface.
Original PR description
Task: 6141770 Forward-Port-Of: odoo/enterprise#114765
This update fixes an issue where the IRN number, generated during e-invoicing, wasn't saved to the invoice itself. Now, the IRN number is correctly displayed in both the invoice PDF and the invoice form view after the EDI submission process. This ensures accurate record-keeping and compliance with Indian regulations.
Original PR description
**Steps to reproduce:** * Install module *Indian - GSTR with E-invoice (l10n_in_edi_gstr)*. * Configure *Indian integration* with required credentials (E-Invoicing, E-Way bill, etc.). * Save the…
**Steps to reproduce:** * Install module *Indian - GSTR with E-invoice (l10n_in_edi_gstr)*. * Configure *Indian integration* with required credentials (E-Invoicing, E-Way bill, etc.). * Save the settings. * Create a *customer invoice*. * Post the invoice. * Send the invoice through *E-Invoicing (EDI)*. * Open the generated *Invoice PDF* and the *form view*. **Observed behavior:** * The *IRN number* is correctly present in the *Invoice PDF*. * However, it is *not saved/displayed* in the invoice form view. **Cause:** * The invoice flow did not store the *IRN number* on the invoice after receiving the EDI response, even though the value was available. **Fix:** * Inherit *_l10n_in_edi_send_invoice*. * Add a condition after the invoice is sent and the JSON response is received. * When the *IRN number* is present in the response, set it on the *l10n_in_irn_number* field of the invoice (in lower case). opw-6097923 Forward-Port-Of: odoo/enterprise#115522 Forward-Port-Of: odoo/enterprise#114350
This update resolves an issue where the 'Create a Payslip' button wasn't functioning properly when no payslips were initially present. The fix corrects a technical error in the system's code, ensuring the button now reliably creates a new payslip when needed. This improves the W2 report generation process.
Original PR description
1.Install l10n_us_hr_payroll 2 Navigate to Payroll>Reporting>W2 Report. 3.Open/Create W2 form and try to add payslip by clicking "Add a line". 4."Create a payslip" button appears if their are no valid payslips. 5.Click it, it won't work! Root cause: - `onAdd` bind was missing in the controller - Renderer applied an additional `.bind(...)`, breaking the callback Fix: - Pass a dedicated `createNewPayslip` action from controller - Remove double binding in renderer - Forward callback directly to helper component task-[5928770](https://www.odoo.com/odoo/project/1251/tasks/5928770) Forward-Port-Of: odoo/enterprise#114263 Forward-Port-Of: odoo/enterprise#111735
This update corrects a bug that prevented users from successfully booking appointments with flexible hour slots in version 19.0. The issue stemmed from a rounding error in how appointment URLs were generated, leading to a 404 error. The fix ensures accurate slot durations are used, allowing for seamless appointment booking.
Original PR description
Steps to reproduce: 1. Install `appointment` 2. Create an appointment type with the followings 3. Schedule type flexible and a slot of 20 min. 4. Share this appointment and try to book appointment…
Steps to reproduce: 1. Install `appointment` 2. Create an appointment type with the followings 3. Schedule type flexible and a slot of 20 min. 4. Share this appointment and try to book appointment for 20 min. Issue: - 404 Error occurs after selectiong the slot Cause: - In 19.0, commit https://github.com/odoo/enterprise/commit/9bae0e13e7bf5e0db25a60fc2683bc51eccb4447 started using slot.duration when building the booking URL for flexible slots. However, slot.duration is rounded to 2 decimals, so a 20-minute slot is serialized as 0.33 instead of its exact value. During validation, the end datetime is recomputed from this rounded duration, which no longer matches the original slot boundaries. This mismatch causes the slot to be considered invalid and the controller raises NotFound. Solution: - Compute the slot duration directly from slot_start_dt_tz and slot_end_dt_tz when building the URL, preserving the full precision. opw-5924312 Forward-Port-Of: odoo/enterprise#108870
This update fixes an error in how emission factors are converted within the Odoo Enterprise ESG module. The previous process incorrectly handled unit and currency conversions, leading to inaccurate calculations. This change ensures that emission calculations are now precise and reliable.
Original PR description
Issue: ---------------------------------------- The conversions using Emission factors are done in the wrong way. Steps to reproduce: ---------------------------------------- - Install `esg` module - Create an Emission Factor from ton to kg of 1000 - Create a new Emission using the new factor, set the unit as kg - Notice the conversion is wrong Cause: ---------------------------------------- The two uom are inverted when calling `_compute_quantity()`. Same occured for the currencies. opw-6152413 Forward-Port-Of: odoo/enterprise#115575 Forward-Port-Of: odoo/enterprise#115246
This update resolves an issue where the IoT box pairing dialog could freeze indefinitely. Additionally, it corrects a display problem with language-specific placeholders, ensuring the IoT box is correctly recognized and usable across different languages. This improves the overall user experience for IoT device integration.
Original PR description
This commit fixes two small issues with IoT pairing: 1. When pairing an IoT box, even after the DB has discovered the IoT box and added it as a record, the dialog will keep waiting forever. If you close the dialog manually the IoT box appears as expected. 2. If using a language other than English, the placeholder 'Connecting' name will not be replaced when the IoT finishes pairing. The IoT box can still be used as normal however. Forward-Port-Of: odoo/enterprise#115627
This update resolves an issue where the POS system was loading all employees regardless of configuration. Now, the system only loads employees based on the POS setup, improving performance and reducing unnecessary data loading. This change ensures a smoother and more efficient POS experience.
Original PR description
Before this commit, when some employee was assigned to advanced or minimal employee, all of the employees were loaded in the POS session, because there was no basic employee assigned to the POS config. opw-5898068 Forward-Port-Of: odoo/enterprise#115109
This update ensures that modifying an employee's details in Belgium no longer affects their payroll information in India. Specifically, fields like Basic Salary and Fixed Allowance remain consistent, streamlining payroll processing and reducing the risk of errors. This change improves data accuracy and simplifies management for our Indian operations.
Original PR description
Changing an employee in Belgium should not affect the following fields in Indian payroll: Basic Salary percentage Basic Salary Fixed Allowance Fixed allowance percentage L10N In PF Employee Amount Employer task-6044787
This update removes the payment QR codes displayed on mobile versions of Odoo. Due to technical limitations, implementing a direct link to bank apps was not feasible without additional providers. The QR codes have been hidden on mobile to improve the user experience.
Original PR description
When a payment meets few conditions, we display a qr code to invite the user to scan it with his bank app. But in mobile it doesn't make sens. We would like to implement a link instead, so the user can open his bank app directly from odoo, but it doesn't seems doable for free without any providers. We will hide the qr code on mobile displays for now. task-4563391 Linked:https://github.com/odoo/odoo/pull/255486
This update corrects a bug in the overtime tour within the Odoo Enterprise system. Previously, the tour incorrectly targeted an input field, leading to unintended interactions. This fix ensures the tour accurately directs users through the overtime ruleset flow.
Original PR description
The tour previously matched the input field underneath the popup and interacted with the wrong element, the fix scope the selector to the modal. task-6172067 Forward-Port-Of: odoo/enterprise#115458
This update adds comprehensive tests for the new customer rating functionality introduced in odoo/enterprise#109696. The tests ensure that rating emails are only sent when appropriate (slot completion or report signing) and that the rating process itself functions correctly. This improves the reliability and accuracy of customer feedback collection.
Original PR description
This commit adds tests for the customer ratings flow introduced in odoo/enterprise#109696. Specifically, it checks that the customer rating request email is only sent upon completing the slot, or after signing the customer report. It also tests the rating itself. task-6147846 Forward-Port-Of: odoo/enterprise#114834
This update fixes an issue where leave calculations were incorrectly recomputed due to outdated employee version references. The change ensures that time off calculations now accurately reflect the employee's active status at the time the leave was created, leading to more reliable time off reporting.
Original PR description
The employee_type_id, job_id and structure_type_id fields on hr.leave were stored related fields pointing to current_version_id. This caused all time offs to be recomputed whenever the employee's current version changed, and stored the current version's values instead of those active at the time of the leave. Replace the related fields with a compute based on date_from, resolving the version active at the leave's start date. task-6175086 Forward-Port-Of: odoo/enterprise#115607
This update makes the timesheet assistant view more user-friendly by implementing small adjustments for better clarity. These changes enhance the overall experience for users managing their timesheets within the Odoo Enterprise system. The update focuses on improving usability and streamlining the assistant view.
Original PR description
Improve the assistant view with small adjustments to enhance clarity and user‑friendliness. Forward-Port-Of: odoo/enterprise#115573 Forward-Port-Of: odoo/enterprise#114339
This update resolves a bug where portal users were incorrectly seeing the 'View Timesheets' button, even without the necessary permissions. The fix involved updating how the system determines access to timesheets, ensuring only authorized users can see this option.
Original PR description
**Issue:** The 'View Timesheets' button is shown to the portal user even though they don’t have access to view timesheets. Currently, we have added _sale_order_get_page_view_values in the sale module, which is overridden in sale_timesheet. We are using it here. task-4745519 Forward-Port-Of: odoo/enterprise#115620 Forward-Port-Of: odoo/enterprise#113481
This update resolves a technical issue within the Odoo Enterprise system's point-of-sale (POS) functionality. Specifically, a misconfigured import statement was corrected, ensuring proper operation of the adam_scale driver. This change improves system stability and reliability.
Original PR description
This PR fixes the wrong import in adam_scale_driver.py opw-6173563 Forward-Port-Of: odoo/enterprise#115625
This update fixes an issue where outstanding amounts weren't accurately calculated after a refund was processed within a point-of-sale transaction. Previously, only the original order total was considered. Now, refund orders are included, ensuring the correct net due amount is displayed and settled, improving financial accuracy.
Original PR description
Step to reproduce - install "pos_settle_due" - have a customer, A and a pos with payment method "customer Account" - start pos, add 3 qty of product with unit price 10$ with partner A - use payment method "customer Account" i.e. of type "pay_later" (do not invoice orders) - refund 1 qty of previous order using same payment method - go to partner list, notice A has 20$ as due - click on "hamburger btn" > settle due amount Observation: - notice we only get the order amount as due i.e order with 30$ - we should have received the refund order too, so that net due of 20$ can be processed Cause: - currently, we didn't considered refunds orders at all, when settling dues Fix: - now we consider order with total < 0 i.e refund orders to be included for settlement opw-5869313 Forward-Port-Of: odoo/enterprise#114143 Forward-Port-Of: odoo/enterprise#107883
This update enhances the Odoo Enterprise sign process to be more user-friendly on touch screen devices. The changes address usability issues and optimize the interface for touch interactions, making it easier for users to complete sign requests. Unrelated changes from another branch have been removed.
Original PR description
Sign is not well optimized for touch screen users, fields can't be placed and other operations are also hard. This PR is made to fix that. Task: 5001223
This update streamlines the calculation of payslips by restoring a previously removed wizard and implementing inline computation. This change enhances the accuracy and efficiency of payroll processing, ensuring employees receive correct payments. It addresses a previous removal that impacted the functionality of the payroll system.
Original PR description
We replace the previously removed payslip line edition wizard with inline payslip computation Forward-Port-Of: odoo/enterprise#112972
This update corrects a technical issue that prevented payruns from being created correctly in the Hong Kong localization. The fix involved renaming a missing function within the HR payroll module, restoring normal payrun functionality. This ensures accurate payroll processing for Hong Kong users.
Original PR description
In the big commit adding eMPF to the hk localization, a function was miss named and was causing an error when trying to create a payrun. In this commit we fix the naming of the function and everything goes back to working. Task: 5960503
This update fixes an issue where payrun creation incorrectly displayed the current month, including today's date. The change adds a necessary keyword to ensure the payrun period accurately reflects the intended timeframe, improving the accuracy of payroll reporting.
Original PR description
During the step that shows leaves in payrun creation, the period including today's date was always shown (i.e. if month, the current month). This was because of a missing keyword in the context which was making the logic fallback on the default. We add the keyword and everything goes back to working. Task: 5961725
This update fixes an issue where the Datev CSV export incorrectly calculated tax amounts when a vendor bill had multiple tax repartition lines. The fix ensures that all tax amounts are accurately included in the export, improving the reliability of financial reporting for Datev.
Original PR description
With l10n_de_reports: - Configure a foreign currency with an exchange rate. - Configure a tax with multiple repartition lines. - Create a vendor bill in this foreign currency with this tax. - In the general ledger export the datev csv. In the datev csv the rate is wrong. In the method _l10n_de_datev_get_csv, we build a tax_amount dict. However when one tax has multiple lines, the amount is replaced and not added. opw-6010097 Forward-Port-Of: odoo/enterprise#115535 Forward-Port-Of: odoo/enterprise#110453
This update ensures that the expiration date from a GS1 barcode on a packaging is correctly applied when creating a new lot in Odoo. Previously, the system didn't recognize the due date on the packaging, leading to incorrect lot expiration settings. This fix improves inventory accuracy and reduces the risk of expired stock.
Original PR description
Issue
-----
Scanning a GS1 barcode containing:
- packaging
- lot
- due date
disregards the due date when creating the new lot.
Steps to reproduce
-----
- Enable GS1 nomenclature & packagings
- Create a product
- barcode 23456789012344
- packaging with barcode 01234567890128
- some on hand quantity
- Create a delivery for a full packaging of the product
- Open the delivery in barcode
- Scan 02 01234567890128 15 270101 10 LOT1
- Validate
- Open the lot
> Expiration date is set to today
Cause
-----
The code expects the product be scanned, there is no logic to retrieve it from the packaging when missing.
-----
Ticket:
opw-6073489
Forward-Port-Of: odoo/enterprise#114327
Forward-Port-Of: odoo/enterprise#112490This update resolves a problem where the OCR success banner and 'Reload AI data' button disappeared after an invoice was reset to draft. It also corrects an internal error where an incorrect state was used, ensuring the document previewer boxes interface functions correctly. This improves the user experience when invoices are corrected.
Original PR description
When an invoice sent to the OCR was reset to draft after being posted, few UI problems were occurring: - The OCR success banner would appear, but couldn't be interacted with. It shouldn't appear at all as the results of the OCR were already fetched at this point. - The "Reload AI data" button wasn't showing. - The boxes interface wasn't available on the document previewer. This commit also fixes occurrences of extract state `validation_to_send` used instead of `to_validate` (the state `validation_to_send` never was a valid value for `extract_state`, so not sure where that came from). opw-none
This update corrects a calculation error in the 2033D-2 report for French tax filings. Specifically, the report was incorrectly summing the amounts of dynamic lines, leading to inaccurate totals. This fix ensures the report accurately reflects financial data for compliance purposes.
Original PR description
Fixed an issue where the total aggregation for line I-C in the 2033D-2 report didn't add the amount of dynamic lines. no task id Forward-Port-Of: odoo/enterprise#115434
This update ensures that missing payslip alerts are triggered only when the payroll closing date has passed. Previously, alerts were raised regardless of the closing date status. This change improves the accuracy of payroll reporting and helps ensure timely payment processing, particularly around end-of-period payroll runs.
Original PR description
In this commit, missing payslip in a payrun issue will be raised only if the payroll closing date is due (old conditions remains). task-6008297 Forward-Port-Of: odoo/enterprise#115646 Forward-Port-Of: odoo/enterprise#112182
This pull request removes a temporary workaround implemented to address an issue with insurance reporting in Spain. The change removes a conditional statement and associated TODO note that were introduced as a temporary fix. This improves the stability and accuracy of the Spanish tax reporting module.
Original PR description
Remove the TODO comment and if condition introduced [here](https://github.com/odoo/enterprise/pull/100413#pullrequestreview-3924342281) task-5214023
This update fixes an issue where byproducts added directly to manufacturing orders weren't correctly linked to stock movements. Now, byproducts added to MOs are accurately tracked, ensuring correct inventory updates and reporting. This improves the accuracy of production tracking and reduces potential discrepancies.
Original PR description
When we add a byproduct followed by SN directly in the MO it will not have the its location as production. Steps to reproduce: ------------------- * Create product tracked by Serial number * Create a…
When we add a byproduct followed by SN directly in the MO it will not have the its location as production. Steps to reproduce: ------------------- * Create product tracked by Serial number * Create a Manufacturing order * Add the Product tracked by serial number on the MO as byproduct * Confirm the MO * Go to shop floor * Add the by-product quantity and create a new serial number. * Close production and go back to the MO in manufacturing * Open stock moves -> the by-product does not have "production" for origin Observation: ------------- When we add the byproduct directly in the MO, they will be added to move_byproduct_ids in the MO but not in byproduct_ids on the stock.move because byproduct_ids it's a [link](https://github.com/odoo/odoo/blob/d14bf6289da21065860ff959185c47b947a7418c/addons/mrp/models/stock_move.py#L50-L52) between the stock.move and the BOM. When adding the byproduct in shopfloor, it will create the quant: https://github.com/odoo/enterprise/blob/06be616bb4d74f0a089e8e318d25c2424594f813/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L163-L171 Additionaly when creating the quant it will decide the source location depending if the product its a byproduct: https://github.com/odoo/enterprise/blob/1d10ee238a50e7bdb552efdeafc068c5127cd49a/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L189-L192 The issue arise because it check if the product it's a byproduct by checking byproduct_ids and since our product was added directly on the MO and not from the BOM it will not appear in byproduct_ids https://github.com/odoo/enterprise/blob/dc5bb0fe8e15063f977970841bdaf8aff1a61e41/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L108-L110 #### Additional notes: The default value for [byproduct_id](https://github.com/odoo/odoo/blob/abb5777cc8324cff0cdf841a8ae42413060dcf92/addons/mrp/models/mrp_production.py#L1263) when creating the stock move is false opw-5974582 Forward-Port-Of: odoo/enterprise#115548 Forward-Port-Of: odoo/enterprise#110122
A bug was causing timesheets to be incorrectly linked to other employees when created through the timesheet systray. This was due to a formatting error in how user IDs were passed during the timesheet creation process. This update corrects the issue, ensuring timesheets are accurately recorded for the intended user.
Original PR description
# Steps to reproduce: - Open a billable project and a task - Open the timesheet systray - Create timesheet # Current behaviour The timesheet is recorded for another employee. # Root cause This happens because the `user_id` passed to the record update was lacking the right `[id, name]` format. As a consequence, the timesheet was created without a user (`False`), thereby linking it to another employee than the current user. task-6169253 Forward-Port-Of: odoo/enterprise#115420
This update corrects a minor issue where the 'delete' option was missing from certain reports related to returns and checks. This was caused by lingering references to the default 'new' state value after a database optimization was implemented. The fix ensures the 'delete' option is consistently available, improving usability.
Original PR description
In odoo/enterprise#103149, the default value for the state of the returns and checks were removed to use False by default to reduce space in the database. However, a few reference were left using the default value which was 'new'. To reproduce (using working files): - Create a working files - Open the menu of the working file in the working files kanban view - The option delete isn't present Forward-Port-Of: odoo/enterprise#115513
This update resolves a problem where the size of the product search bar was incorrectly set, causing issues with a website tour. The change ensures the size attribute is only applied to the product search bar, preventing disruptions to other website search functionalities. This improves the stability and reliability of the website.
Original PR description
__Before commit__ odoo/enterprise@1111381c set the size attribute of the product search bar. However, the view inherits from `website.website_search_box`, which means that all search boxes on the website will have the size attribute set if `website_sale_renting` is installed. The tour `dropdowns_and_header_hide_on_scroll` fails in saas-19.3 because odoo/odoo@9394e17a added a step that depends on the size of the main website search bar, which may vary because of this. __After commit__ Only set the size attribute to the product search bar as intended. runbot-242449 Forward-Port-Of: odoo/enterprise#115433
This update adds a new test case to ensure that public employees can correctly access holiday information within the Gantt view. This fix addresses a previous issue and strengthens the overall reliability of the HR holiday scheduling functionality. It ensures consistent access for all employee types.
Original PR description
Add a test for the issue resolved in https://github.com/odoo/odoo/pull/261937 No related task Forward-Port-Of: odoo/enterprise#115593
This update resolves an issue where exporting VSME reports would fail if the base year was not a standard 4-digit year. The fix adds validation to ensure only valid years are used, preventing errors and ensuring report generation works correctly. This improves data reliability for VSME reporting.
Original PR description
Currently, an error occurs when exporting VSME reports if the base year is not a valid 4-digit year. **Steps to Reproduce:** 1. Install the `esg_csrd` module with demo data. 2. Create new "**VSME Reports**" with `Base Year = 1`. 3. Now, click on "**Print**". **Error:** `ValueError - Invalid isoformat string: '1-01-01'` **Cause:** The base year is directly used to build a date in [1], resulting in `datetime.date(1, 1, 1)`. In [2], this is formatted to **"1-01-01"** and used in a domain search, which raises a ValueError due to an invalid ISO date format. **Fix:** - Adds a **constraint on base year** to ensure only valid years (1000–9999) are allowed for new VSME Report records. - Adds a **helper validation method** to verify base year before performing computations on existing records. sentry-7419431039 Forward-Port-Of: odoo/enterprise#115725 Forward-Port-Of: odoo/enterprise#114453
Code cleanup and technical improvements
This update merges changes related to Dutch SBR tax reporting, previously handled through a bridge module. The changes streamline the process by integrating the functionality directly into the core `l10n_nl_reports` module, reducing complexity and improving efficiency. This enhances the accuracy and reliability of Dutch SBR tax reporting within the Odoo Enterprise system.
Original PR description
In version `19.0`, a bridge module was introduced (see a6a8d121bbf2044793df5211c5bdb18859a62152) to improve the Dutch SBR tax reporting process. This bridge module's sole purpose was to allow the addition of stored fields within a stable version. As we are now in master, these changes are merged directly into `l10n_nl_reports` to reduce module overhead.