Daily updates from Odoo
Thursday, February 19, 2026
39 changes · master
New functionality added to Odoo
This update introduces improved timesheet reporting features designed to align with business targets and provide more granular insights. The changes include dynamic charts, new reporting sheets, and adjustments to calculations, ultimately helping managers track employee performance against goals and billing targets more effectively.
Original PR description
- make the employees/departments section adjust to targets - handles the sorting of lists if target indicator is applied - adjust the baseline of scoreboards - create 2 sheets 1 for the targets and the other for normal billing - create another 2 shetes one for `Days` encoding and the other for `Hours` encoding - switch between sheets when the billing target or timesheet encoding unit is selected - add billing target to the `timesheet.analysis.report` to calculate it - adjust the billable vs target column chart to adapt dynamically to the current year - adjust the timesheet overtime indicator when `Billable` is selected to adapt to targets --- Task-4969380
This update adds automated calculations for severance pay, severance provision, and remaining annual leave pay when an employee departs. These calculations comply with Turkish labor law and accounting regulations, ensuring accurate payroll processing and tax reporting for terminated employees.
Original PR description
This PR introduces the implementation related to employee termination payment computations according to labor law and common practices. 1. Severance Pay: - Automatically calculated when an employee leaves the company. - Excludes unpaid leave days from total service time. - Not part of income tax but included in stamp tax. - Monthly pay ceiling applied (currently 46,655.43 TRY). 2. Severance Provision: - Calculates the monthly EOS provision for active employees. - Not calculated if the employee leaves during that month. - Excludes unpaid or out-of-contract days. 3. Remaining Annual Leave Pay: - Pays for unused annual leave when an employee depart from company. - Uses the configured “Annual Leave Time-off Type” in payroll settings. - Included in both income tax and stamp tax calculations. Task-4938014
This update to the Phone dashboard adds a key metric: the duration of each phone call. This provides sales teams with a clearer understanding of call efficiency and helps them track important sales activities. This improvement enhances reporting and allows for better analysis of sales team performance.
Original PR description
Task: 5384664 Co-authored-by: François Gillet <frgi@odoo.com> Co-authored-by: Pierre Rousseau <pro@odoo.com>
This update adds a new module that automatically sends CFDI XML and PDF documents alongside payslips via email. This fulfills a requirement for Mexican businesses to electronically transmit payroll information, improving compliance and streamlining payroll processes. It's part of ongoing efforts to support key regional accounting standards.
Original PR description
Introduce a new module to enable sending CFDI XML with payslips. task: 5114611 Forward-Port-Of: odoo/enterprise#102692
Enhancements to existing features
This update enhances the calculation of Belgian double holiday pay within the Odoo Enterprise system. The changes simplify the process, particularly for variable salaries and the recovery mechanism, leading to more accurate and transparent payroll processing. The wizard functionality has been removed, automating the calculation directly on the payslip.
This update simplifies and clarifies the user interface for generating and viewing payslips, both in the application and within the PDF report. The changes focus on improving usability and clarity for employees and HR staff, making the payroll process more straightforward.
This update ensures accurate tax withholding in Mexico by supporting the Northern Border Free Zone (ZLFN) minimum wage. Previously, the system only handled the General Minimum Wage Zone. This change aligns with Mexican regulations and improves payroll accuracy for businesses operating in the ZLFN.
Original PR description
In Mexico, there are two types of minimum wage depending on the geographic zone: * General Minimum Wage Zone (ZSMG) - currently supported. * Northern Border Free Zone (ZLFN). It is crucial to differentiate between zones to ensure accurate tax withholding. Reference: https://www.dof.gob.mx/nota_detalle.php?codigo=5775534&fecha=09/12/2025 target: master task-5883854
This update simplifies payslip delivery by sending a single email to each employee containing links to all their payslips for the period. Previously, a separate email was sent for each payslip, which has now been consolidated for efficiency. A note field has been added to the email for any relevant comments.
Original PR description
Purpose ======= Don't send one mail per payslip to send, by only one mail per employee with all the employee's selected payslips. Specifications ============== Group the payslip to send by employee and send only one mail per employee with one link per payslip in the mail. Remove the template from the wizard as it is not really useful in this case. Instead, add a custom comment field to add some note if needed in the mail. task-5068655
This pull request adjusts the Spanish language reporting module to reflect a recent change in account naming conventions within Odoo. This ensures accurate financial reporting for Spanish businesses using the Odoo Enterprise platform. The update maintains existing reporting functionality without impacting core accounting processes.
Original PR description
Forward-Port-Of: odoo/enterprise#106698
This update streamlines the process of creating salary offers by introducing a temporary popup wizard. This wizard guides users through essential data entry, provides real-time salary simulations, and offers convenient actions like email sending. The changes enhance the user experience and reduce the initial information overload.
Original PR description
Before this commit, clicking "Generate Offer" on an Employee or Applicant redirected the user to the full form view of `hr.contract.salary.offer`. This disrupted the user flow and presented too many…
Before this commit, clicking "Generate Offer" on an Employee or Applicant redirected the user to the full form view of `hr.contract.salary.offer`. This disrupted the user flow and presented too many fields initially. This commit improves the UX by introducing a transient wizard (`hr.contract.salary.offer.wizard`) that opens in a popup. Key changes: - **Wizard Implementation**: A new popup allows quick data entry for essential fields (Contract Template, Job Title, Dates, Wage). - **Wage Logic**: Users can toggle between defining "Monthly Gross" or "Yearly Employer Cost", with automatic bidirectional conversion based on the selected contract template. - **Simulation Preview**: The wizard displays a real-time salary simulation (Gross, Net, Benefits, Company Cost) computed dynamically using the payroll engine without creating persistent records. - **Action Buttons**: Added "Send by Email", "Copy Link", and "Salary Configurator" actions directly to the wizard footer. - **Sign Template Logic**: The PDF Sign Template is no longer mandatory. If missing, the signatory logic is skipped to allow pure simulations. - **Expandability**: Added an "Expand" button to the wizard header to allow users to transition to the full offer form view if needed. - **Applicant Integration**: The wizard pre-fills data (Salary Expected, Availability) from the Applicant record. task-5088948
This update removes a complex feature allowing multiple departure actions, streamlining the process for users in Belgium. The change addresses integration challenges and improves the user experience, reverting a previous attempt at a multi-departure workflow. This simplifies the departure process and aligns with the core integration goals.
Resolved issues and error corrections
This update resolves an issue where the 'Remove date filter' button on the Booking tab of the POS kanban view was not functioning correctly, causing a technical error. The fix ensures this button now works as expected, allowing users to manage their booking filters effectively.
Original PR description
Steps: - Install pos_appointment. - Open a POS session with bookings configured. - Open the Booking tab and click Remove date filter in the header. Issue: - A traceback occurs with `Invalid handler`. Cause: - The Remove date filter button’s onclick handler was not defined. Fix: - Define a valid onclick handler for the Remove date filter button. Task-5902656 Forward-Port-Of: odoo/enterprise#107633 Forward-Port-Of: odoo/enterprise#106684
This update resolves an issue where embedded videos were not visible within shopfloor work order instructions. The fix re-applies a previous change that was inadvertently lost during a recent system update. Now, users can view video instructions directly within the shopfloor interface, improving training and operational clarity.
Original PR description
Issue ----- Embedded videos are not displayed in the shopfloor. Steps to reproduce ----- - Create a BOM with at least one operation - Create an instruction in the work order operation - In the instruction text, add a video link - Create a MO and plan it - Open the work order in shopfloor - Open the instruction > Empty window, no video Cause ----- Fix of 61fdab3 got lost in some refactor, so reapplying the logic. ----- Ticket: opw-5926557 Forward-Port-Of: odoo/enterprise#107538
This update fixes a calculation error in the Saudi HR payroll system. Previously, employees resigning after less than two years received a negative value for their end-of-service benefit, which was incorrect. The change ensures that these employees receive a zero value, aligning with Saudi regulations.
Original PR description
purpose: In the saudi eos rule, if the employee resigned after working in the company less than 2 years, their end of service is being computed as a negative value when it should be 0 instead. - added the correct check for the case of employee resignation - moved the logic of the salary rules for EOS benefit and provision from python methods to the rule itself to be more clear for the user task-id: 5499646 Forward-Port-Of: odoo/enterprise#107251 Forward-Port-Of: odoo/enterprise#104466
This update resolves an issue where customer display URLs weren't consistently being sent to IoT devices when records were updated. The change ensures that the correct URL is transmitted, improving the functionality of the IoT integration. This was a critical fix impacting data synchronization.
Original PR description
This PR fixes the customer display url not being sent to the iot box when updating the corresponding record in iot device form view. By replacing onWillSaveRecord by onRecordSaved we ensure that our method is always called ticket-5782927 Forward-Port-Of: odoo/enterprise#107174 Forward-Port-Of: odoo/enterprise#106331
This update ensures that screenshots taken during the trial mode of Odoo Enterprise capture the correct end-result data. Previously, the system lacked the database URL needed to fetch the final data, now it forwards the URL to ensure accurate screenshots are generated.
Original PR description
During the trial flow, we don't know the db url when making the ws request. To still be able to take screenshots of the end result in trial mode, we forward the db_url when getting the result back. Forward-Port-Of: odoo/enterprise#107034
This update resolves a bug that was causing errors during record creation within the Australian Payroll module. The fix avoids using a temporary ID (NewId) in search queries, ensuring proper record functionality and stability. This improves the reliability of payroll processing.
Original PR description
The generic `TestEveryModel` fails because a virtual ID (NewId) is used in a search domain during record creation, causing a crash. This commit uses `.ids` with the `'in'` operator to idiomatically handle virtual records and prevent the framework error. runbot-115303 Forward-Port-Of: odoo/enterprise#107644
This update corrects a bug where the 'CFDI to Public' checkbox was incorrectly checked when creating new invoices in the Mexican accounting module. The fix ensures this checkbox remains unchecked unless a customer is selected, preventing potential compliance issues. This change improves the accuracy of invoice generation for Mexican businesses.
Original PR description
Steps to produce: --- - Install `l10n_mx` and `accountant` modules. - Switch to a Mexican company. - Go to Accounting > Customers > Invoices. - Click on New to create a new invoice. Issue: --- - The `CFDI to Public` checkbox is automatically checked even when no customer is selected. Root cause: --- - Here at [1], the field l10n_mx_edi_partner_address_complete evaluates to False when no partner is set. - Due to the OR condition, this causes l10n_mx_edi_cfdi_to_public to be set to True, even though no partner has been selected yet. Solution: --- - We should only evaluate partner address completeness when a partner is explicitly set. - Also, add VAT check for `l10n_mx_edi_partner_address_complete`, as requested by mial(PO). [1] https://github.com/odoo/enterprise/blob/cc00e8f3bb75b8c782fea3a42ad3bbcdbc240e2f/l10n_mx_edi/models/account_move.py#L649 opw-5911542 --- Forward-Port-Of: odoo/enterprise#106943
This update resolves a memory error that occurred when calculating averages and standard deviations for quality checks. By limiting the data fetched and disabling a prefetcher, the system now handles larger datasets more efficiently, preventing crashes and improving performance. The changes resulted in a significant reduction in memory usage during testing.
Original PR description
Before this commit, computing the `standard_deviation` and the `average` of a `quality.point` involved fetching all the quality checks and all their fields. This can cause a memory error because of the field called `notes` that might involve HTML code. To avoid this, I have disabled the prefetcher since we only need two fields for the computation (`x_quality_state` and `measure`). The benchmark done below involved a recordset of quality points of size 1000 and the average size of the `notes` field was 6MB. The recordset was ordered by the size of the note section descending and for the different test cases it was sliced by the $K$ top elements and the compute function was triggered on the sliced version. | Scenario | Before | After | | :--- | :--- | :--- | | 100 | Memory LIMIT | 289.0MB | | 200 | Memory LIMIT | 290.0MB | | 500 | Memory LIMIT | 292.0MB | | 1000 | Memory LIMIT | 331.0MB | Forward-Port-Of: odoo/enterprise#106493
This update fixes an issue where VoIP calls weren't properly handled when a client was already busy. The previous approach was unreliable, leading to missed calls. This change ensures calls are correctly transferred and managed, improving the overall user experience.
Original PR description
task-4917399 <details><summary>old diagrams</summary> <p> ```mermaid sequenceDiagram actor EC as External Caller participant VC as VoIP Carrier participant PX as Proxy Provider participant OD as Odoo…
task-4917399
<details><summary>old diagrams</summary>
<p>
```mermaid
sequenceDiagram
actor EC as External Caller
participant VC as VoIP Carrier
participant PX as Proxy Provider
participant OD as Odoo DB
participant PS as Push Notification Server
participant SW as Service Worker of Marc's Android Phone
actor MD as Marc Demo
participant PWA
EC -->> VC: INVITE
VC -->> PX: INVITE
PX -->> OD: WebHook /voip/new-call
OD -->> PS: Push Notification
OD -->> PX: Dial Marc Demo, if not available play ringback
PX -->> VC: 183 RINGING EARLY MEDIA
PS -->> SW: Notif is received
SW -->> MD: Display Notif
MD -->> SW: Answer call
SW -->> PWA: Open PWA window
PWA -->> PX: REGISTER
PX -->> PWA: OK
PWA -->> SW: Ready
SW -->> PWA: User action is Answer
PWA -->> OD: Resend INVITE
OD -->> PX: For current call, dial MD
PX -->> PWA: INVITE
PWA -->> PX: ANSWER
```
## Scenario: Client Ready and Not Busy
```mermaid
sequenceDiagram
actor A as Alice
participant T as Telnyx
participant I as Odoo IAP
participant O as Odoo Server
participant F as Google FCM
participant S as Service Worker
%% participant R as SW Registration
participant W as WebClient
%% actor B as Bob
A -->> T: Call +3281123456
T -->> O: call.initiated
O -->> O: create voip.call
O -->> F: notify
F -->> S: notify
O -->> T: OK 200
S -->> W: post message
W -->> O: ready to receive call invite
O -->> I: Transfer to Bob
I -->> I: inject api key
I -->> T: Transfer to Bob
T -->> W: SIP INVITE
```
### Alternative Idea: use bus ws?
(is this doable?)
```mermaid
sequenceDiagram
actor A as Alice
participant T as Telnyx
participant I as Odoo IAP
participant O as Odoo Server
%% participant S as Service Worker
%% participant R as SW Registration
participant W as WebClient
%% actor B as Bob
A -->> T: Call +3281123456
T -->> O: call.initiated
O -->> W: bus.message: ready?
W -->> O: yes
O -->> I: Transfer to Bob
O -->> T: OK 200
I -->> I: inject api key
I -->> T: Transfer to Bob
T -->> W: SIP INVITE
```
</p>
</details>
### 20251110
```mermaid
---
title: Base Scenario
---
sequenceDiagram
actor A as Alice
participant T as Telnyx
participant O as Odoo Server
participant S as Service Worker
participant W as WebClient
actor B as Bob
A ->> T: Call +3281123456
T ->>+ O: call.initiated
O ->> O: create voip.call
O ->>- T: OK 200
par Blind Transfer
O -->> T: Transfer to Bob (through IAP)
%% T ->>+ O: Transfer Session Hangup (reason: not found)
%% O ->>- T: OK 200
and Notification Push
O -->> S: notify (through FCM)
S ->> S: display notification
end
opt Receive invite at first transfer
T ->> W: SIP INVITE (+header X-Odoo-Call-ID)
end
opt Decline
alt From Softphone
B ->> W: interact with softphone
W ->> T: SIP DECLINE
W ->> W: voip.call state = rejected
else From notification
B ->> S: interact with notification (decline)
S ->> O: decline call
O ->> O: voip.call state = rejected
O -->> T: Reject
end
T ->> A: Reject
end
opt Answer
alt From Softphone
B ->> W: interact with softphone
else From notification
rect rgb(220, 240, 255)
B ->> S: interact with notification
S ->> W: wake up WebClient
W ->> O: ready to receive call invite
O -->> T: Transfer to Bob (through IAP)
T ->> W: SIP INVITE (+header X-Odoo-Call-ID)
end
alt Manual
B ->> W: interact with softphone
else Automatic
W ->> W: AUTO_ANSWER
end
end
W ->> T: ANSWER
T ->> W: OK
A <<->> B: RTP Media
W ->> W: voip.call state = ongoing
end
%% alt Decline From notification
%% else Open from notification
%% B ->> S: interact with notification
%% S ->> W: wake up WebClient
%% W ->> O: ready to receive call invite
%% O -->> T: Transfer to Bob (through IAP)
%% T ->> W: SIP INVITE (+header X-Odoo-Call-ID)
%% opt Answer
%% alt Manual
%% B ->> W: ANSWER
%% else Automatic
%% W ->> W: AUTO_ANSWER
%% end
%% W ->> T: ANSWER
%% T ->> W: OK
%% A <<->> B: RTP Media
%% W ->> W: voip.call state = ongoing
%% end
%% end
```This change reverses a recent update that was causing all upsell quotes to be canceled, disrupting legitimate business processes. The previous code incorrectly called a function that resulted in errors and prevented proper filtering of alternative quotes. This reversion restores the expected functionality.
Original PR description
…mmit/55b6bbe27cc31abcaee40cd4a196e087fdfd4ce5 This commit introduced an issue. All upsell quote were canceled and no filtering was done on "alternative quotes". As a result it could disrupt legit business flow. Moreover, action_cancel was called instead of _action_cancell which can lead to ValueError: Expected singleton as action_cancel can require single record sometimes. Forward-Port-Of: odoo/enterprise#107503 Forward-Port-Of: odoo/enterprise#107417
This update ensures that the preparation display in the backend accurately reflects changes when a POS order is cancelled or deleted. Specifically, related preparation orders and data are removed, maintaining data consistency and a more reliable view of order preparation activities.
Original PR description
**In this commit:** Ensure the preparation display UI is updated when a POS order is cancelled or deleted from the backend. - On order cancellation, the preparation display is refreshed accordingly. - On order deletion, related preparation orders, lines, and states are removed via notify call. Task-5373116 Related: https://github.com/odoo/odoo/pull/240523 Forward-Port-Of: odoo/enterprise#107734 Forward-Port-Of: odoo/enterprise#103052
This update resolves an issue preventing standard payroll users from accessing the 'One-time payments' feature within Swiss company contracts. The fix addresses a permission restriction that was incorrectly denying access to action records, ensuring payroll managers can now fulfill their duties. This improves usability for payroll staff.
Original PR description
Steps to reproduce: ------------------- 1. Install l10n_ch_hr_payroll_elm_transmission. 2. Switch to a Swiss company and create a new employee. 3. Create a new internal user with Payroll…
Steps to reproduce: ------------------- 1. Install l10n_ch_hr_payroll_elm_transmission. 2. Switch to a Swiss company and create a new employee. 3. Create a new internal user with Payroll Officer/Manager access. 4. Log in as that user, create a contract, and click on "One-time payments". Issue: --------- A Traceback with AccessError: ```You are not allowed to access 'Action Window' (ir.actions.act_window) records.``` Cause: ---------- https://github.com/odoo/enterprise/blob/9e39b4b85fcb9f6ed5b21b942796b76b8a6eefdb/l10n_ch_hr_payroll_elm_transmission/models/hr_contract.py#L195 The code attempts to call `.read()` on an `ir.actions.act_window` record. Standard users typically do not have read access to window action records, resulting in an **AccessError** even if they have rights to the payroll data. Solution: ------------- Use [_for_xml_id](https://github.com/odoo/odoo/blob/93bd4d018d815b5f98d1eaaac3ae613aefbdba56/odoo/addons/base/models/ir_actions.py#L187) to return action content for the provided xml id in a safe way by doing [sudo](https://github.com/odoo/odoo/blob/93bd4d018d815b5f98d1eaaac3ae613aefbdba56/odoo/addons/base/models/ir_actions.py#L205) internally to bypass the access restriction. opw-5491467 Forward-Port-Of: odoo/enterprise#107628 Forward-Port-Of: odoo/enterprise#106598
This update simplifies and stabilizes the pivot table autofill feature, addressing previous complexity and bugs. The new approach uses data within the pivot table itself to determine the next cell to populate, resulting in a more reliable and user-friendly experience. This change improves the overall performance and stability of the spreadsheet edition.
Original PR description
The current implementation of the pivot autofill is very complex, and very buggy. This commit rewrite it completely. We will now use the cells of the pivot table to get the next pivot cell to autofill, insteaf of complex logic based on the pivot definition. Task: [5913563](https://www.odoo.com/web#id=5913563&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update resolves an issue in the Swiss tax reports (l10n_ch_reports) by adjusting the account selection criteria. Specifically, it ensures that account 2970 is now correctly considered before 'Annual profit or annual loss,' aligning with Swiss accounting standards. This ensures accurate reporting for Swiss businesses.
Original PR description
This recent commit: odoo/enterprise@d223f826eaafa3189846b555af16b240f91936ba changed the formula for `account_financial_report_line_ch_290_a_balance` from: ```py [('account_id.code', '>=', '290'),…
This recent commit:
odoo/enterprise@d223f826eaafa3189846b555af16b240f91936ba
changed the formula for `account_financial_report_line_ch_290_a_balance` from:
```py
[('account_id.code', '>=', '290'), ('account_id.code', '<', '2991'), ('account_id.account_type', '!=', 'equity_unaffected')]
```
to:
```py
[('account_id.code', '>=', '290'), ('account_id.code', '<', '2970')]
```
The main goal of the commit was to remove the unaffected earnings account from the CH reports. While doing so, the formula was also modified by replacing `account_id.code = 2991` with `account_id.code = 2970`.
However, since the condition uses the `<` operator, the account with `code = 2970` is not taken into account. Account `2970` is the last account that should be considered before `Annual profit or annual loss`. see:
https://github.com/odoo/odoo/blob/19.0/addons/l10n_ch/data/template/account.account-ch.csv#L106
Ticket [link](https://www.odoo.com/odoo/project.task/5387092)
opw-5387092
Forward-Port-Of: odoo/enterprise#102247This update resolves an issue where grouped tax reports were generating incorrect results when invoices included both positive and negative tax amounts. The fix ensures that all tax line balances are correctly considered, regardless of their sign, preventing report errors. This improves the accuracy of tax reporting.
Original PR description
The grouped tax reports are broken if an invoice is created with 2 lines on 2 different income accounts. [A previous…
The grouped tax reports are broken if an invoice is created with 2 lines on 2 different income accounts. [A previous commit](https://github.com/odoo/odoo/commit/48d60151254045768d5aac1b29c5acf84b70cef2) modified the query responsible for the construction of the grouped reports. It only keeps the baselines of type 'entry' which have a balance of the same sign as the tax line. But in our case, the CABA move is of type 'entry'. It has only one tax line with a positive amount because the taxes amounts on each line are added. But the balance of the negative line is negative. So the query will only consider the positive line hence the error. So now, the logic of the only considering lines with the same sign is to avoid entries where the invoice lines and the refund lines are both there. This is why it only checks for moves of type 'entry'. We also ignore the check for CABA moves, i.e. moves where `tax_cash_basis_origin_move_id` is defined. Steps to reproduce: - Activate Cash Basis in the Settings - Create a tax based on payment - Create an invoice with two lines: - One with a negative amount, an income account and the created tax - One with a positive amount big enough to compensate the previous line, a different income account and the same tax - Confirm - Click "Pay", validate the payment - In the Dashboard > Bank journal > Create a reconciliation of the amount of the invoice - Reconcile it with the invoice - Accounting > Reporting > Tax Return - Select "Group By: Account tax" Community PR: odoo/odoo#239081 Ticket [link](https://www.odoo.com/odoo/project.task/5089790) opw-5089790 Forward-Port-Of: odoo/enterprise#107707 Forward-Port-Of: odoo/enterprise#101601
This update resolves an issue preventing the generation of P9 reports (tax documents) in the Kenya payroll module, specifically for versions 19.0 and above. The fix removes an outdated employee PIN field reference, ensuring the report can now correctly generate PDFs. This ensures accurate tax reporting for Kenyan employees.
Original PR description
Bug reproduction: When version >= 19.0, install Kenya payroll and accounting, create payslip for one of the Kenyan employee -> validate the payslip -> Reporting: P9 Report in payroll app -> Create…
Bug reproduction: When version >= 19.0, install Kenya payroll and accounting, create payslip for one of the Kenyan employee -> validate the payslip -> Reporting: P9 Report in payroll app -> Create new tax deduction card -> populate employees -> in the inside of the card: select employees and click to generate pdf -> it will not be generated
Bug cause:
1 - In cron parameters, context passed wrongly, it should take place in the clickable parameters
2 - After saas-18.4 in the migration, employee.l10n_ke_pin field is removed but this field still takes place in l10n_ke_tax_reduction_card_templates.xml and it gets error when the user clicks to generate PDF.
Bug solution:
1 - Fixing cron parameter passing
2 - Removing PIN of employee field from P9 report since it is not available anymore.
Testing: Unit test is written to check PDF's are generated for sure.
1 - Creating Kenya company, employees
2 - Creating payslip for employees and validate them
3 - Creating tax deduction card and generate declarations
4 - Checking PDF's are created
task - 5395267
Forward-Port-Of: odoo/enterprise#107744
Forward-Port-Of: odoo/enterprise#104816This update simplifies website template code by replacing an outdated method (`request.env`) with the standard `env`. This change ensures consistent behavior across all website templates and resolves potential issues with how the system tracks data dependencies, ultimately improving reliability.
Original PR description
Target: remove all request in models/files and view/files.
This update fixes an issue where incoming calls were incorrectly marked as 'rejected' when the system was already in a call. Now, incoming calls while a call is active will be marked as 'missed', ensuring accurate call tracking and preventing missed opportunities. This improves the reliability of our VoIP system.
Original PR description
Since [1], an incoming call while already in an active call makes sure a voip.call record is created, but its state is marked as "rejected" and it should be "missed" instead. This commit fixes that. [1]: https://github.com/odoo/enterprise/commit/942f32316ab02d8c739fe7fdd5ec2bdde472a68e
A previous issue prevented the appointment module from reinstalling properly, resulting in errors during mail template validation. This update resolves the problem by skipping the generation of invitation URLs during the installation process, ensuring a smooth and successful module reinstallation.
Original PR description
Reinstalling the appointment module fails during mail template validation. ### Reproduction Steps 1. Install the `appointment_hr_recruitment` module. 2. Uninstall `appointment`. 3. Reinstall…
Reinstalling the appointment module fails during mail template validation. ### Reproduction Steps 1. Install the `appointment_hr_recruitment` module. 2. Uninstall `appointment`. 3. Reinstall `appointment`. → A template parsing error appears. ### Cause The global `request.env` is bound to the registry active at the start of the request. When reinstalling a module, this registry becomes stale and does not include the models being re-added. During installation, the `mail.template` model performs a test render to validate its XML data. One of the templates calls `_get_interview_invite_url`, which invokes a controller that looks up the `appointment.type` model using `request.env`. Because the registry is stale and does not contain this model, the lookup raises a KeyError and the installation fails. ### Fix Rationale Skip invite URL generation when `install_mode` is set to avoid using the stale `request.env`. opw-5898780 Forward-Port-Of: odoo/enterprise#107650
This update resolves an issue where DHL shipping rate calculations failed when requested for dates outside of business hours. Adding a 'next business day' flag ensures rates are accurately determined, preventing errors and improving the reliability of shipping estimates.
Original PR description
Before this commit, there was an issue when trying to get the rates for DHL shipping late in the day. The issue happened because `plannedShippingDate` fell outside of the working hours. This commit adds the nextBusinessDay flag for the rating request to avoid the error. Error: ``` Product not found 996: The requested product(s) not available for the requested pickup date. Process ID associated for this transaction') ``` opw-5393684 Forward-Port-Of: odoo/enterprise#107153
This update corrects a bug that prevented users from successfully testing new printer configurations within the Point of Sale module. The fix ensures that the printer's IP address is correctly updated when using the test printer button, resolving a previous error. This improves the reliability of the test functionality.
Original PR description
When creating a new printer and test it with the test printer button, it will cause an error because the field of the ip address in pos.printer has changed and it was not changed into the test button.
This update streamlines the way AI Documents sends notifications within Odoo. The team replaced a specific function call with a new, more efficient method, improving the underlying system. This change enhances the stability and performance of the AI Documents module.
Original PR description
This commit replaces the uses of `self.env["bus.bus"]._sendone()` by `_bus_send()` in the `ai_documents` module. Following https://github.com/odoo/enterprise/pull/90124#discussion_r2822278385
This update corrects a bug that prevented users from successfully testing new printer configurations within the Point of Sale module. The fix ensures that the printer's IP address is correctly updated when using the 'test printer' button, resolving a previous error. This improves the reliability of the Point of Sale system.
Original PR description
When creating a new printer and test it with the test printer button, it will cause an error because the field of the ip address in pos.printer has changed and it was not changed into the test button.
Bug : allocate a number of holidays that is not an integer (ex : 20.5), then check the holiday attest (shows 20 allocation). The same problem happens if the number of leaves taken is not an integer Steps : - in the belgian company, create a new employee with a valid contract give an employee 19.5 days of Time Off type leaves. - on the form view of the employee , click on the action button -> Departure: Notice period and payslip -> and fire the employee. - now click on action button
Original PR description
Bug : allocate a number of holidays that is not an integer (ex : 20.5), then check the holiday attest (shows 20 allocation). The same problem happens if the number of leaves taken is not an integer…
Bug : allocate a number of holidays that is not an integer (ex : 20.5), then check the holiday attest (shows 20 allocation).
The same problem happens if the number of leaves taken is not an integer
Steps : - in the belgian company, create a new employee with a valid contract give an employee 19.5 days of Time Off type leaves.
- on the form view of the employee , click on the action button -> Departure: Notice period and payslip -> and fire the employee.
- now click on action button -> Departure: Holiday Attests, you'll see that the employee has 19 allocated instead of 19.5
Reason : The number of leave_allocation_count and leave_count are defined as integers in HrPayslipEmployeeDepatureHolidayAttestsTimeOffLine, when they are populated, they end up casting the assigned value to an int.
Fix : Create two new float fields leave_count_float and leave_allocation_count_float to replace their corresponding integer fields.
task - https://github.com/odoo/enterprise/commit/5461268c9411d36feac90cd45dcff42aab59599b
Forward-Port-Of: odoo/enterprise#103258Features or functions removed from Odoo
This update removes outdated code related to a previous system change within the Account Avatax module. The removal of specific methods and parameters simplifies the codebase and improves maintainability. This change is part of an internal optimization.
Original PR description
In 5a133025edac we moved from using the dedicated commit endpoint to creating another committed transaction. This left dead code related to the old approach. This removes: - _commit_avatax_taxes() and commit_transaction() - commit parameter from _get_avatax_service_params() - 'commit' branch from _change_avatax_state() opw-5382268
Code cleanup and technical improvements
This update streamlines the serial drivers used for our IoT devices, specifically those related to the Adam scale. The changes consolidate related functionality within a dedicated module, improving code organization and maintainability. This refactoring enhances the system's stability and reduces potential complexity.
Original PR description
We simplify serial drivers and move adam scale specific methods in `pos_iot_adam_scale`. see odoo/odoo#245226
This update integrates field service directly into the planning app, simplifying intervention scheduling and resource allocation. Previously disjointed features are now consolidated, allowing users to plan and manage service activities more efficiently within their existing workflows. This improves planning accuracy and reduces manual effort.
Original PR description
The goal of this task is to completely review the field service flow since the users need a better integration with planning features to plan their intervention, the field service features will now…
The goal of this task is to completely review the field service flow since the users need a better integration with planning features to plan their intervention, the field service features will now be integrated inside planning instead of being an extension of project app. By doing that, - the flow to plan an intervention is simplify thanks to the existing features in planning. - the field service settings inside the project have been moved into global configuration of planning app once field service feature is installed. - the intervention will now be a shift instead of a task - `task_id` field is added to `planning.slot` to be able to use the task as a maintenance contract (a way to centralize all the interventions made for a specific customer for instance). - the timesheets will now just be generated once the intervention is mark as done. The number of hours for each resource set on the intervention will be the allocated hours set on the intervention. - worksheet feature has also been moved in `planning.slot`. - `Extra Quotation` feature can now be enabled in planning configuration instead of having the settings in each project. - `Add Materials on tasks` feature can now be enabled globally in planning configuration. - 2 new status on `planning.slot`, `in progress` to mark the intervention has on going and `completed` to mark the intervention as completed. task-5258989
This pull request updates the event management system by running a binding script. The changes involve minor adjustments to XML files within the event and timesheet modules, streamlining the process for event registration summaries and animation transitions. This update ensures consistent event data handling.