Daily updates from Odoo
Tuesday, March 3, 2026
36 changes · master
Enhancements to existing features
This update integrates an AI agent ('Odoo agent') to automatically create partner records during account creation. To ensure data accuracy, a new feature will be added to exclude specific partners from this automated retrieval process. This change enhances the efficiency of partner onboarding within the accounting module.
Original PR description
This commit: https://github.com/odoo/enterprise/commit/84d84687ac09abad698b1b00a445f69a0d896e5f introduce a new ai agent called "Odoo agent" and in the create method a partner is created from it. We will add a new function to blacklist some partner from the retrieve partner functionality task-5973417 Forward-Port-Of: odoo/enterprise#108871
This pull request updates Odoo to prepare for the upcoming OWL3 migration. A script has been run to replace all instances of 't-model' and 't-ref' with their 't-custom-' counterparts. This ensures compatibility with the new OWL3 version and avoids potential issues during the migration process.
Original PR description
WIP community: https://github.com/odoo/odoo/pull/246876
This update improves the payroll dashboard by replacing a previous selection field with a simple 'is in contract' toggle. This change clarifies the connection between payroll warnings and employee contracts, making the dashboard more intuitive. It also establishes a system for linking related fields, ensuring accurate data reporting.
Original PR description
This PR contains follow-up changes to the payroll dashboard rework, mainly replacing the `apply_to` selection field with an `is_in_contract` boolean field. This field is hidden unless the selected model on the warning has a link with contracts. The PR also adds a mechanism to define which models are connected to contracts and which field serves as the link, as the link might be a "nested" field like employee_id.contract_date_start. task-5880482
This update introduces stateful AI agents capable of updating records directly, enhancing user interaction and automation. Agents now preview changes and require confirmation before updates, improving data accuracy and streamlining workflows. Key improvements include batch record updates, support for Gemini 3.5 Flash, and optimized prompting for reasoning tasks.
Original PR description
Purpose: --------- Allow the agents to update records. Agents will always show a preview of the changes that will be done and require the user to confirm the suggested changes before updating the…
Purpose: --------- Allow the agents to update records. Agents will always show a preview of the changes that will be done and require the user to confirm the suggested changes before updating the records. To achieve this the agents framework has been refactored: The previous LLMApiService was entirely stateless, resulting in several significant functional and efficiency issues. This PR introduces the concept of an AI Session to hold the complete conversation history, thus resolving these problems and enabling new features like user-interactive tools. The primary issues resolved are: - Redundant tool calls: tools and their results were not included in the history, resulting in the LLM calling the same tool with the same args multiple time for the same context. - Inefficient reasoning: LLMs with reasoning capabilities would restart their thought processes on every new message because thinking signatures were lost. - Missing interactive tools: It was impossible to design tools that required pausing and confirmation from the user mid-flow. Technical Changes: ------------------ - Added a transient `ai.session` model, designed to store the complete history of user and model messages, including tool calls, tool responses, and model thinking signatures. This model is designed to be overridable to support different providers (e.g., ai.session.openai and ai.session.google). - The ai dict available inside every tool has new capabilities It carries (among others) - a `state` dict which enables tools to store and retrieve data across multiple tool calls - a `tool_request_message` used to store a message that will be shown to request usage of the tool to the user - a `tool_request_confirmed` boolean used to check if the user confirmed usage of the tool - the 'res_model' and 'res_id' of the record the session is linked to (when session is opened from a form view for example) - a `final_message` string allowing to "short-cut" and post a response as if it was the LLM's answer - Record information has been removed from the instructions to prevent prompt injection, and because the record data is dynamic. Instead, the record info is added as a context message along with the user message (that context message is not stored in the session history) - The "Is Ask Ai" and related code has been removed. Instead of searching for a potential agent that could do the "Ask AI" job, we use the one associated with the "systray" interface key for consistency Usage: ------- There are several ways to query a LLM depending on the needs: 1. ai_session `get_direct_response()` for basic one shot requests, without configurability from the UI. 2. ai_agent `generate_single_response()` for one shot requests, but with configurability through the usage of an agent and thus with support of agent related features (rag, topics, ...). Requests can be made from the frontend using the `/ai/generate_response` route (with an `interface_key` used to get the right agent) 3. ai_composer `action_launch_ai_chat()` for multi-turns interactions with the llm through a discuss channel. Sessions can be initialized from the frontend using the `launchAiChat` command. Task-5014794
This update bumps the default version of the website generator to 2.4 to ensure compatibility with recent changes in the 19.2 release. This ensures the website continues to function correctly and reliably. The change is driven by necessary updates to website snippets.
Original PR description
Since some snippets changed in 19.2, we up the version to support them Forward-Port-Of: odoo/enterprise#109044
This update modifies tests related to payroll to support the new automatic filling of work entries. This change ensures that work schedules are correctly populated with data from the company's source, streamlining the payroll process. It’s a key improvement for accurate payroll calculations.
Original PR description
In order to allow the automatic filling of work entries from the source work schedule of a company, some tests needed to be modified in order to cater for the new business logic. Task: 5949961
This update automatically updates the employee's sex and birthday fields in the UI when the NISS (National Identification System number) is changed. This ensures data consistency and accuracy, particularly when managing multiple companies within Odoo. The update only occurs if the new NISS value is valid.
Original PR description
The `sex` and `birthday` fields are defined in `hr` and cannot be overridden or converted to computed fields without breaking multicompany consistency. Add an `onchange` on `niss` to update `sex` and `birthday` in the UI when the NISS is modified. The update is performed only if the NISS is valid. Task: 5959156
This update improves the Employee Kanban view to display the employee's first contract date instead of the most recent contract date. This provides a clearer and more accurate view of an employee's tenure within the company. The change ensures consistency and simplifies tracking employee start dates.
Original PR description
Description of the issue/feature this PR addresses: On kanban, you see the start_contract_date of the latest version, but it should be the first contract date in the company Current behavior before PR: Desired behavior after PR is merged: . Display first contract date start on Employee Kanban view instead of start contract date of the latest version task-5481072 I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)
This update incorporates changes required by the Uruguayan tax authority (DGI) regarding Electronic Fiscal Receipts (CFE). Specifically, a new export option is added for mandated sales, and the transmission of key invoice details (amount, currency, exchange rate) from existing invoices is now required to ensure legal compliance.
Original PR description
Purpose: The DGI introduced changes in CFE version 25. The following changes below needs to be implemented for legal compliance.
Required Changes:
- Introduce a new selection value,("91", "Export under Mandate")for field, l10n_uy_edi_cfe_sale_mode. This option is required when documenting export operation performed as a mandating entity, where the definitive export will be carried out by a third party.
- The reference document(credit note or debit note) of an existing account move will need to send:
- Amount (MntCFEref)
- Currency (TpoMonedaRef)
- Exchange Rate (TpoCambioRef) if the currency is not Uruguayan Pesos
task-5419331
task-5419331
Forward-Port-Of: odoo/enterprise#108430
Forward-Port-Of: odoo/enterprise#103881Resolved issues and error corrections
This update corrects a misleading warning displayed in the payroll system when a payslip had a zero or negative net wage. The fix ensures the warning only appears for individual payslips with negative wages, preventing confusion for users. A new test has been added to verify this behavior.
Original PR description
Steps to Reproduce: 1. Generate payslips for a batch of employees (e.g., Employee A and Employee B). 2. Ensure the last processed payslip (Employee B) has a negative net wage or is uncomputed (net…
Steps to Reproduce: 1. Generate payslips for a batch of employees (e.g., Employee A and Employee B). 2. Ensure the last processed payslip (Employee B) has a negative net wage or is uncomputed (net wage 0.0). 3. Ensure Employee A has a valid, positive net wage. 4. Open the payslip for Employee A. Issue: Employee A displays the warning "The net pay for this payslip is zero or negative," even though their net wage is positive. This occurred because the lambda filter used the `slip` variable from the outer loop scope instead of the iterator, causing the last record's net wage to determine the warning for the entire batch. Additionally, uncomputed payslips (which have no lines) default to a net wage of 0.0, which triggered the warning condition prematurely. Expected Behavior: The warning should only appear if the specific payslip being checked has a negative or zero net wage. Furthermore, the warning should be suppressed if the payslip lines have not yet been computed. Additionally, added a test to check the message is not displayed if we don't have net salary, and appears if the net is indeed negative. task-5484107 Forward-Port-Of: odoo/enterprise#108601 Forward-Port-Of: odoo/enterprise#103918
This update resolves an issue where the Colombian electronic invoicing system (l10n_co_dian) didn't properly handle mismatched DIAN operation modes. When the selected mode doesn't align with the system's expectations, a warning is now triggered to prevent incorrect invoice generation. This ensures compliance and accurate electronic invoicing.
Original PR description
Steps to reproduce: - Install `l10n_co_dian` module(demo data) > Switch to `CO Company` - Settings > Colombian Electronic Invoicing > Change the Operation Mode: `DIAN 2.1: Support Documents`(eg:…
Steps to reproduce:
- Install `l10n_co_dian` module(demo data) > Switch to `CO Company`
- Settings > Colombian Electronic Invoicing > Change the Operation Mode: `DIAN 2.1: Support Documents`(eg: [Image](https://www.awesomescreenshot.com/image/58874464?key=0cb74e446dcdb0f087df6ed619f785c2))
- Vendors > Create a Bill > Confirm > `Acknowledge Reception`
Traceback:
```py
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_move.py", line 293, in l10n_co_dian_send_event_update_status_received
self._l10n_co_dian_send_event_update_status('received')
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_move.py", line 313, in _l10n_co_dian_send_event_update_status
document = self.env['l10n_co_dian.document']._send_commercial_event(self, commercial_state_next)
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/l10n_co_dian_document.py", line 593, in _send_commercial_event
xml, errors = self.env['account.edi.xml.ubl_dian']._export_co_send_event_update_status_invoice(locked_move, commercial_state_next)
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_edi_xml_ubl_dian.py", line 1208, in _export_co_send_event_update_status_invoice
return self.with_context(l10n_co_next_commercial_state=next_commercial_state)._dian_sign_xml(xml, invoice)
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_edi_xml_ubl_dian.py", line 1524, in _dian_sign_xml
'software_security_code': self._dian_get_security_code(operation_mode, document_number),
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_edi_xml_ubl_dian.py", line 1443, in _dian_get_security_code
operation_mode.dian_software_id
TypeError: unsupported operand type(s) for +: 'int' and 'str'
```
We are getting this error because `_dian_get_operation_mode` [returns] an empty `l10n_co_dian.operation_mode()` record. This happens when the `Operation modes` do not match. As a result, [operation_mode] also contains an empty record.
[operation_mode]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/l10n_co_dian/models/account_edi_xml_ubl_dian.py#L1432
[returns]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/l10n_co_dian/models/account_edi_xml_ubl_dian.py#L1394-L1400
sentry-7273771732
Forward-Port-Of: odoo/enterprise#107885A technical issue preventing payrun creation for Hong Kong employees has been fixed. The problem stemmed from a missing function name during the implementation of eMPF support. This update ensures payruns can be successfully generated for Hong Kong employees, resolving a previous error.
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. Steps to reproduce: - Install belgian localization - Install HK localization - Select the belgian company - Create a payslip for a belgian employee (works fine) - Create a payrun and select the same employee from the list - Get an error In this commit we fix the naming of the function and everything goes back to working. Task: 5960503 Forward-Port-Of: odoo/enterprise#109196
This update resolves an issue where the date input field in the HR payroll form would become uneditable after editing. The change ensures the popover is opened first, guaranteeing the input remains editable. This improves the user experience for HR staff.
Original PR description
With this additionnal step in tour, we ensure the popover is opened before clear the input. If we not wait for this, the input can be no longer editable.
This update makes two key payroll fields accessible across all Odoo companies, regardless of their location. Previously, these fields were tied to the Belgian localization, limiting functionality for non-BE users. This change simplifies deployment and ensures consistent access to essential payroll data.
Original PR description
This change relocates two generic payroll fields (can_be_requested and default_car_value) into the base hr_payroll_fleet module so any deployment using payroll+fleet (including non‑BE companies) can access them without requiring the Belgian localization. The Belgian module keeps all its fiscal computations and (previously absent) visibility checks task-5906656
This update fixes a JavaScript error that occurred when users closed the certificate signing wizard without saving. The fix ensures the system correctly handles wizard dismissals, preventing a crash caused by incorrect data type validation. This improves stability and user experience.
Original PR description
**Issue:**
Closing the signing certificate wizard without saving triggers a client-side traceback (`UncaughtPromiseError: Invalid ids list: [object Object]`).
**Cause:**
When the wizard dialog is discarded, Odoo's dialog manager passes a dismissal object (`{dismiss: true}`) to the `onClose` callback. The existing code only checked if the payload was truthy (`if (cert_id)`), causing it to attempt to update the `signing_certificate_id` Many2one field with the event object. The framework's validation (`validatePrimitiveList`) expects an integer or array of integers, resulting in a crash when it tries to parse the object.
**Fix:**
Updated the `onClose` callback to strictly verify the type of the payload (`typeof cert_id === 'number'`). The record is now only updated when the wizard successfully returns a valid primitive integer ID.
task: 5975643
Forward-Port-Of: odoo/enterprise#108864This update fixes a mobile map issue where the pin list was too small, making it unusable. The team replaced the permanent list with a toggle button for on-demand access, and added styling improvements for a better mobile experience. This ensures maps are easily viewable and functional on mobile devices.
Original PR description
**Problem:** Recent changes (https://github.com/odoo/enterprise/pull/104618) broke the mobile map layout, causing the pin list to shrink to an unusable 46px height on top of the map. **Solution:** Replaced the permanent list section with a toggle button to access the pin list on demand. Added polishing CSS to improve the general mobile aesthetic and usability of the map view. task-5126312 Forward-Port-Of: odoo/enterprise#108345
This update corrects a display issue where EG-specific payroll fields were incorrectly shown in employee forms for companies outside of the EG locale. The fix ensures these fields are hidden when a different country is selected, maintaining data accuracy and preventing confusion. This improves the user experience for international users.
Original PR description
[FIX] some EG l18n fields are visible in other country's employee forms Bug reproduction: Go to >= saas~19.2 version, install EG and select company other than EG -> payroll -> personal -> there are EG: Social Sec. Number and NOSI Registration strings that belongs to EG. Bug cause: In EG view, they did not make the additional fields invisible if they belong to other company. Bug solution: Make the appended fields invisible when company country code is not EG. task - 5975886 Forward-Port-Of: odoo/enterprise#108896
This update resolves an issue where the arrow button within the Urban Piper settings was not functioning correctly. The fix involved ensuring the arrow was properly enclosed within a button tag, allowing users to navigate to the correct settings. This ensures a smooth and functional experience for users managing Urban Piper configurations.
Original PR description
In the settings, under the Urban Piper section, the arrow was not clickable. This is because the arrow was not inside a button tag. task: 5972833
This update resolves an issue where users were encountering errors when processing after-departure payments. Now, a clear and informative message is displayed if a previous payslip isn't linked, guiding the user to correctly set up the payment. This improves the user experience and prevents data inconsistencies.
Original PR description
For after departure payment to work, a previous payslip is required in the system. So, instead of having a traceback, display an informative message to the user. task-5933607 Forward-Port-Of: odoo/enterprise#108980 Forward-Port-Of: odoo/enterprise#107386
This update resolves an issue where the scheduling dialog was incorrectly filtering out unscheduled shifts for resources. The fix removes a default filter, ensuring planners can now see and assign all available shifts, improving scheduling efficiency. This change corrects a previous bug that prevented accurate shift assignment.
Original PR description
Steps to Reproduce ------------------ 1. Open the Planning Gantt view. 2. Click a cell that belongs to a resource with **no** scheduled shifts. 3. The Plan dialog opens with an empty list. Issue…
Steps to Reproduce ------------------ 1. Open the Planning Gantt view. 2. Click a cell that belongs to a resource with **no** scheduled shifts. 3. The Plan dialog opens with an empty list. Issue ----- A previous change keeps the clicked resource in the dialog context; the Gantt model turns it into a default search filter, so only shifts already linked to that resource are shown. Unassigned shifts are therefore hidden, preventing planners from assigning them by role or availability. Current Behaviour ----------------- The Plan dialog is always filtered by `resource_id`, which returns no results for unscheduled resources, even when they have the right roles. Expected Behaviour ------------------ The dialog should list all unscheduled shifts that match the resource’s roles, or every unscheduled shift if the resource has no roles, while still preserving full context for scheduling once a shift is selected. Fix --- Remove the automatic resource filter from the dialog context in `getSelectCreateDialogProps()`. This prevents the unwanted search restriction; role defaults remain, so the dialog now displays the correct shifts. Task-4922525 Issue – https://github.com/odoo/enterprise/pull/87424/commits/a218a7cedce61f992fbe76284c273be8f937d28d Forward-Port-Of: odoo/enterprise#92100
This update fixes a minor discrepancy in the Gantt chart's progress display for flexible employees. The issue stemmed from an incorrect timezone setting in the test environment, leading to an inaccurate progress percentage. The fix ensures the chart accurately reflects employee attendance by standardizing the timezone to UTC.
Original PR description
[FIX] hr_attendance_gantt: fix gantt progress with flex emp test
Bug reproduction:
1 - Install and update hr_payroll,hr_contract_salary,l10n_us_hr_payroll,hr_attendance_gantt modules in localhost (version >= saas-19.2)
2 - Run test_gantt_progress_with_flexible_employees test and the expected result is 8 but it gives 9.
Bug cause:
Timezone of the test employees was UTC+1 and they should be UTC to match the range parameter of _gantt_progress_bar
Bug solution:
Change the timezone of the test employees to UTC.
task - 5865307
Forward-Port-Of: odoo/enterprise#109201This update fixes an error in how holiday pay recovery is calculated for employees in Belgium with non-standard working schedules. Previously, the system used a default 38-hour week, leading to inaccurate deductions. Now, the system correctly uses the employee's actual weekly hours (40) to ensure accurate holiday pay recovery amounts.
Original PR description
**Steps to Reproduce:** 1 - create an employee in Belgium company with hourly rate 20.62 and 40h/week working schedule 2 - Set 10 paid time off to this employee 3 - Set 2000 euros in recovery amount…
**Steps to Reproduce:** 1 - create an employee in Belgium company with hourly rate 20.62 and 40h/week working schedule 2 - Set 10 paid time off to this employee 3 - Set 2000 euros in recovery amount holiday n-1 4 - Set 10 days in recovery day holiday n-1 5 - Employee takes 5 paid time off in February and 5 in December 6 - Do one payslip for this employee for February and validate it 7 - Do one payslip for this employee for December Current behaviour : - the holiday n-1 amount for February = 824.80 - the holiday n-1 amount for December = 742.32 Expected behaviour : - the holiday n-1 amount for December should be 20.62 (hourly_rate) * 5 (days) * 8 (hours) = 824.80 **Reason** - The daily recovery amount was calculated using hardcoded standard working hours (38h/week) instead of the employee's actual schedule (40h/week), causing an incorrect deduction rate for non-standard schedules. **Solution** - Replace the hardcoded reference with the actual hours per week from the employee's resource calendar to ensure the correct hourly rate is applied. Forward-Port-Of: odoo/enterprise#109069 Forward-Port-Of: odoo/enterprise#106205
This update fixes an issue where salary rules were incorrectly reducing both employee and employer costs. A new ‘Net Cost’ salary rule has been added to accurately reflect employer contributions, ensuring correct cost calculations for payroll reporting.
Original PR description
## Before: - Setting appears_on_employee_cost_dashboard to True on a salary rule uses the rule’s sign to compute employee cost. - For rules like Social Insurance Employee Contribution and DEWS Employee Contribution, the sign must be negative to deduct the amount from the employee, which incorrectly reduces the employer cost as well. ## After: - Introduced a new salary rule “Net Cost” to correctly reflect employer cost. - This allows employee contribution rules to keep a negative sign for deductions while still increasing the employer contribution amount. Task-5912761 Forward-Port-Of: odoo/enterprise#107090
This update corrects a bug that prevented payslip PDFs from being created correctly during pay run validation. The change ensures PDFs are generated for pay runs with 5 or fewer payslips, addressing a previous limitation that only triggered PDF creation for single payslips. This improves the reliability of payslip document generation.
Original PR description
Due to a missplaced argument in the js definition of the Validate button of the Pay Run view, context indicating the need for the creation of the pdfs of the payslips was not passed correctly, resulting in their missed creation, both immediately and later by the cron. Also, previously the pdfs were only computed right away if the pay run included only 1 payslip, which almost never happens. Here we change that condition to computing the pdfs if there are <= 5 payslips. Task: 5498819
This update corrects a technical issue where the new booking view for POS appointments was inadvertently replacing standard calendar event views, causing compatibility problems with other modules. By restricting the new view to use 'primary' mode within the POS, this fix ensures proper functionality and avoids disruption to other parts of the system.
Original PR description
The list view in pos appointment would replace the original list view on calendar event and break other modules. This PR will add the `primary` mode for the new view so it is only used inside the POS Runbot Error: [234914](https://runbot.odoo.com/odoo/runbot.build.error/234914) Forward-Port-Of: odoo/enterprise#107132
This update fixes a problem where archived employees caused errors when managing appraisal plans. The change ensures that archived employees are no longer considered for appraisal dates, preventing date conflicts and improving the accuracy of appraisal settings. This ensures a smoother experience for users managing employee appraisals.
Original PR description
**Steps to reproduce:** Based on this feedback https://www.odoo.com/odoo/project.task/5270281 companies with archived employees face an issue when they try to toggle Appraisals Plans from Appraisls -> Configuration -> Settings -> Appraisals Plans **Issue:** The propblem is that when employees with next appraisal date are archived, their next appraisal date is not cleared which leads to past date conflicts upon trying to set the next appraisals dates for all the employees (which is done through toggling the Appraisals Plans checkbox) **Solution:** - Unset the next appraisal date upon archiving an employee - exclude archived employees from _compute_next_appraisal_date method Task: 5354002 Forward-Port-Of: odoo/enterprise#109115 Forward-Port-Of: odoo/enterprise#100437
This update prevents users from canceling subscriptions if they don't have access to the associated invoices. Previously, a sales representative could cancel a subscription even without seeing the invoices. Now, the system ensures cancellation is only possible when the representative has full visibility of the invoices, improving subscription management reliability.
Original PR description
Before this commit, when a user had access to an invoiced subscription but not to the invoiced, he could cancel the subscription. Step to reproduce: - create a subscription in company A, with a pricelist available in company B. Sales person A belong to company A. - invoice the subscription and confirm the invoice - update the company (company B) and sales person of the subscription (B). The new salesperon don't see the invoice in the stat button. After this commit salesperson B can't cancel the subscription. task-5907345 Forward-Port-Of: odoo/enterprise#108550 Forward-Port-Of: odoo/enterprise#106441
This update addresses a potential issue in the payroll transmission process for Switzerland. Specifically, it now displays a warning instead of an error when the AVS (Automatic Valuation System) value is negative, providing clearer guidance to users. This improves the reliability of the reporting and reduces the risk of misinterpretation.
Original PR description
Forward-Port-Of: odoo/enterprise#109046
This update fixes an issue where newly hired employees' work email addresses were incorrectly populated with their private email from the salary configuration. The fix ensures that the employee's work email field is properly cleared during the onboarding process, aligning with standard data practices. This prevents data inconsistencies and improves the accuracy of employee records.
Original PR description
**Steps to Reproduce:** 1. Send an offer to an applicant. 2. The applicant submits their details via the salary configurator and enters their private email in the Email field. 3. Once the offer and contract are signed, an employee record is created in Odoo. 4. In the created employee record, the `work_email` field is populated with the email entered in the salary configurator. This same value is also present in `private_email`, which is correct. **Reason:** - The email entered in the salary configurator is stored on the partner and represents the applicant's private email. - The employee's `work_email` field is linked to the partner's email via compute and inverse methods, causing it to inherit the private email value when the employee record is created. **Solution:** - Explicitly clear the employee's work_email field when the applicant sign. task: 5502797 Forward-Port-Of: odoo/enterprise#109074 Forward-Port-Of: odoo/enterprise#106974
This update streamlines the configuration for automatic extra time off allocation in Odoo Enterprise. The previous redundant toggle has been removed, and the feature is now controlled by a selection field, improving the user experience and simplifying management. This change focuses on internal efficiency and ease of use.
Original PR description
Streamline the configuration by removing the redundant boolean toggle 'hr_contract_timeoff_auto_allocation'. The feature is now driven directly by the 'hr_contract_timeoff_auto_allocation_type_id' field. Remove boolean field from res.company and res.config.settings. Update settings view to remove checkbox and improve explanation text. Adjust _update_version_on_signature to trigger based on the Many2one value. Add placeholder to the Many2one field for better UX. Task: 5445784
This update fixes an issue where the salary calculator incorrectly used a default full-time calendar, leading to inaccurate calculations when simulating employees with different work schedules (e.g., 40h/week vs. 20h/week). The fix ensures the calculator now correctly applies the selected resource calendar for simulation offers, providing accurate salary projections.
Original PR description
Steps to reproduce: 1- Go to Payroll > Employees > Salary calculator 2- Put a yearly cost of 10000 3- Select the "40h/week calendar" 4- Check the yearly cost 5- Change to "20h/week calendar" Cause of the bug: _get_version inside ContractSalaryOffer would take the default calendar from the version if it exists (in our case it will always be the full time for the simulation employee) Fix done: Keep the condition as it is for normal offers, and for simulation offers change the default to the selected resource calendar task-5431216 Forward-Port-Of: odoo/enterprise#108949 Forward-Port-Of: odoo/enterprise#103159
This update fixes an issue on mobile devices where the 'Share' button was incorrectly displayed on top of the calendar sidepanel. The change ensures the button is hidden when the sidepanel is open, resulting in a cleaner and more intuitive user experience. This improves usability for mobile users.
Original PR description
Purpose ======= On mobile, prevent displaying the appointment Share button on top of the calendar sidepanel. Specification ============= On mobile, when opening the calendar sidepanel, the panel covers the entire calendar. However the appointment Share button has a z-index set to the modal level ($zindex-modal) which makes it so that the button is always displayed on top of the calendar sidepanel. Fixing that by making sure the appointment Share button is hidden when the calendar sidepanel is opened on mobile. Task-5717052
This update resolves an issue where payslips wouldn't generate correctly when an employee changed contracts within a pay period. The fix ensures the system uses the employee's initial contract start date for accurate calculations, preventing errors related to holiday entitlements and year-of-service calculations. This improves payroll accuracy for employees with multiple contracts.
Original PR description
An error is thrown when we try to generate a payslip for an employee that changed contract on a period before the contract change Steps to reproduce: 1. Install l10n_mx and l10n_mx_hr_payroll modules…
An error is thrown when we try to generate a payslip for an employee that changed contract on a period before the contract change
Steps to reproduce:
1. Install l10n_mx and l10n_mx_hr_payroll modules
2. Switch to INNOVACION VALOR... company
3. Go to Employees and open Cecilia Miranda Sanchez
4. Go to Payroll tab, set the end of the contract to Jan 31 and save
5. Create a new contract from Feb 1
6. Go to Payroll > Payslips > Payslips and create a new pay run
7. Select Salary Structure 'Mexico: Regular Pay', Pay Schedule 'Bi-weekly' and Period 'Jan 1 -> Jan 15'
8. Click on Continue, select Cecilia and click on Select
9. An error is thrown
Problem:
In `_compute_integration_factor` we try to compute the number of years the employee has worked by accessing the start date on the employee but this date might be earlier than the start date of the employee's current contract if the employee has changed contract. This will throw an error when we try to access the holidays count for 0 year because `payslip._rule_parameter('l10n_mx_holiday_tables')` doesn't have an entry for 0
Solution:
Use the start date of the first contract of the employee, take gaps in between the employee's contracts into consideration to correctly compute the number of years worked
opw-5931355
Forward-Port-Of: odoo/enterprise#108495This update makes the Gantt chart's date selection more responsive, updating the displayed date range immediately as the user adjusts the picker. Previously, the date range only updated after clicking 'Apply'. This change provides a smoother and more intuitive user experience when working with Gantt charts.
Original PR description
- Previously, the Gantt scale selector only updated the displayed date range after the "Apply" button was clicked. This was because the template was bound to the component props rather than the local state. - This commit binds the date picker display to the local pickerValues state. Now, when a user selects a date in the picker, the UI updates immediately, while the actual data fetch remains deferred until "Apply" is clicked. Task: 5932671 Forward-Port-Of: odoo/enterprise#107380
This update simplifies the process of adding employees to work orders. Previously, the automatic creation of employee profiles was removed, causing issues. Now, a popup allows quick creation of employee profiles with the current user's ID pre-filled, and automatically creates employees with HR access for shopfloor operators.
Original PR description
In 19.1, the automatic creation of an employee profile for the admin user has been removed. This causes issues when the admin wants to start a workorder or mark it as done, so we added a popup to create a new employee profile with the user_id already filled with the id of the current user. Also, if no employee exist when editing operators in the shopfloor, the popup proposes to directly create a new employee linked to the current user if they have HR access. This new employee will be directly logged in the shopfloor operators. see https://github.com/odoo/odoo/pull/250607 to make `action_create_employee` return an employee record. task 5932500 Forward-Port-Of: odoo/enterprise#107439
Code cleanup and technical improvements
This pull request involves refactoring the VoIP codebase to better prepare it for upcoming changes. These internal adjustments improve the code's structure and flexibility, enabling easier future development and integration with new features. This work supports the broader task of improving our VoIP functionality.
Original PR description
We refactor the code in order to be able to extend it for task-4917399