We performed a three-stage process, ultimately concluding that the standard, unstable method had to be abandoned in favor of the correct, non-overwritable solution.
1. ⚙️ Phase I: Data Creation and Database Conflict Resolution
The first step was ensuring the necessary data fields existed and were accessible.
A. Field Creation and Conflict
We used Odoo Studio to create the required fields on the employee (hr.employee) and company (res.company) models. This immediately caused a conflict because fields were created with the same name (e.g., x_studio_nis_number) on both models.
Employee TRN: x_studio_trn
Employee NIS: x_studio_nis_number
Company TRN (VAT): vat (Standard Odoo field, used for compliance)
Company NIS: x_studio_company_nis_number (Unique, renamed field)
B. Resolution: The Final Database Cleanup
We had to use the Odoo Shell (odoo-bin shell) to manually delete the conflicting field from the database, and then rename/recreate the Company NIS field to a unique name (x_studio_company_nis_number), ensuring no two models shared the same technical field name.
2. 📝 Phase II: XML Injection and Best Practice
The core goal was to modify the Payslip Report XML (the QWeb template) to display the fields. Since modifying a standard view is highly discouraged (it gets overwritten on update), the correct deployment method is an Inherited View.
A. Identifying the Target View
We located the correct report view: report_payslip (or its custom equivalent).
B. The Code Challenge
The path to these custom fields uses the payslip object (o) to navigate to the respective records:
Employee Path (from payslip): o.employee_id.x_studio_trn
Company Path (from payslip): o.company_id.vat
C. The Deployment Strategy (Inherited View)
The final, stable deployment requires creating a new XML file (e.g., report_payslip_compliance.xml) in your custom module and using the <xpath> tag to insert the code into the correct location of the base report without modifying the base file itself.
3. 🖥️ Phase III: Sample Code (Final Deployed XML)
The following XML snippet represents the final code injected into the report_payslip view using an inherited view. This ensures the compliance data is non-overwritable and correctly displayed on the printed document.
This code was inserted into the employee and header detail sections of the base report template:
XML
<div class="row">
<div class="col-6">
<p>Employee: <span t-field="o.employee_id.name"/></p>
<p><strong>Employee TRN:</strong> <span t-field="o.employee_id.x_studio_trn"/></p>
<p><strong>Employee NIS:</strong> <span t-field="o.employee_id.x_studio_nis_number"/></p>
</div>
<div class="col-6">
<p><strong>Company TRN (VAT):</strong> <span t-field="o.company_id.vat"/></p>
<p><strong>NIS Ref #:</strong> <span t-field="o.company_id.x_studio_company_nis_number"/></p>
</div>
</div>
I'm still not seeing the information on the payslips
What is this? Is there a question?