Add salary revision letter report

This commit is contained in:
metatroncubeswdev 2026-08-30 01:31:46 -04:00
parent 17b453ecad
commit 94b03662fa
6 changed files with 164 additions and 0 deletions

View File

@ -1,2 +1,3 @@
from . import models
from . import hooks
from .hooks import post_init_hook

View File

@ -7,6 +7,8 @@
"license": "LGPL-3",
"depends": ["payroll"],
"data": [
"views/hr_contract_views.xml",
"reports/salary_revision_letter.xml",
"views/hr_payslip_views.xml",
],
"post_init_hook": "post_init_hook",

View File

@ -0,0 +1 @@
from . import hr_contract

View File

@ -0,0 +1,60 @@
from odoo import fields, models
class HrContract(models.Model):
_inherit = "hr.contract"
mcs_salary_revision_state = fields.Selection(
[
("draft", "Draft"),
("sent", "Sent"),
("signed", "Signed"),
("archived", "Archived"),
],
string="Salary Letter Status",
default="draft",
tracking=True,
)
mcs_salary_revision_sent_date = fields.Date(
string="Letter Sent Date", tracking=True
)
mcs_salary_revision_signed_date = fields.Date(
string="Letter Signed Date", tracking=True
)
mcs_salary_revision_notes = fields.Text(string="Salary Revision Notes")
def action_mcs_generate_salary_revision_letter(self):
today = fields.Date.context_today(self)
for contract in self:
if contract.mcs_salary_revision_state == "draft":
contract.write(
{
"mcs_salary_revision_state": "sent",
"mcs_salary_revision_sent_date": today,
}
)
return self.env.ref(
"mcs_simple_payroll.action_report_salary_revision_letter"
).report_action(self)
def action_mcs_mark_salary_letter_sent(self):
self.write(
{
"mcs_salary_revision_state": "sent",
"mcs_salary_revision_sent_date": fields.Date.context_today(self),
}
)
return True
def action_mcs_mark_salary_letter_signed(self):
self.write(
{
"mcs_salary_revision_state": "signed",
"mcs_salary_revision_signed_date": fields.Date.context_today(self),
}
)
return True
def action_mcs_archive_salary_letter(self):
self.write({"mcs_salary_revision_state": "archived"})
return True

View File

@ -0,0 +1,80 @@
<odoo>
<record id="action_report_salary_revision_letter" model="ir.actions.report">
<field name="name">Salary Revision Letter</field>
<field name="model">hr.contract</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">mcs_simple_payroll.report_salary_revision_letter</field>
<field name="report_file">mcs_simple_payroll.report_salary_revision_letter</field>
<field name="binding_model_id" ref="hr_contract.model_hr_contract"/>
<field name="binding_type">report</field>
<field name="attachment_use">True</field>
<field name="attachment">'Salary Revision Letter - %s - %s' % (object.employee_id.name, object.date_start)</field>
<field name="print_report_name">'Salary Revision Letter - %s - %s' % (object.employee_id.name, object.date_start)</field>
</record>
<template id="report_salary_revision_letter">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="web.external_layout">
<div class="page">
<h2>Salary Revision Letter</h2>
<p>
<strong>Date:</strong>
<span t-field="o.mcs_salary_revision_sent_date"/>
</p>
<p>
<strong>Employee:</strong>
<span t-field="o.employee_id.name"/>
</p>
<p>
<strong>Designation:</strong>
<span t-field="o.employee_id.job_title"/>
</p>
<p>
<strong>Company:</strong>
<span t-field="o.company_id.name"/>
</p>
<p>Dear <span t-field="o.employee_id.name"/>,</p>
<p>
This letter confirms the revision of your monthly salary to
<strong>
<span t-esc="o.wage" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</strong>,
effective
<strong><span t-field="o.date_start"/></strong>.
</p>
<p>
This salary will be processed through the MCS Simple Monthly Payroll structure.
No statutory tax, PF, ESI, or similar deductions are applied in this structure unless
the company separately registers for those obligations or is legally required to apply them.
</p>
<p>
All other employment terms remain unchanged unless separately communicated in writing.
</p>
<p>
Please acknowledge acceptance by signing below.
</p>
<table class="table table-sm mt-5">
<tr>
<td style="width: 50%; padding-top: 60px;">
<strong>For <span t-field="o.company_id.name"/></strong><br/>
Authorized Signatory
</td>
<td style="width: 50%; padding-top: 60px;">
<strong>Employee Acceptance</strong><br/>
<span t-field="o.employee_id.name"/>
</td>
</tr>
</table>
</div>
</t>
</t>
</t>
</template>
</odoo>

View File

@ -0,0 +1,20 @@
<odoo>
<record id="view_hr_contract_form_mcs_salary_revision" model="ir.ui.view">
<field name="name">hr.contract.form.mcs.salary.revision</field>
<field name="model">hr.contract</field>
<field name="inherit_id" ref="payroll.hr_contract_view_form"/>
<field name="arch" type="xml">
<xpath expr="//header" position="inside">
<button name="action_mcs_generate_salary_revision_letter" type="object" string="Generate Salary Letter" class="btn-primary"/>
<button name="action_mcs_mark_salary_letter_signed" type="object" string="Mark Signed" invisible="mcs_salary_revision_state == 'signed'"/>
<button name="action_mcs_archive_salary_letter" type="object" string="Archive Letter" invisible="mcs_salary_revision_state == 'archived'"/>
</xpath>
<xpath expr="//group[@name='salary']" position="inside">
<field name="mcs_salary_revision_state" widget="statusbar" statusbar_visible="draft,sent,signed,archived"/>
<field name="mcs_salary_revision_sent_date"/>
<field name="mcs_salary_revision_signed_date"/>
<field name="mcs_salary_revision_notes" placeholder="Internal notes for salary revision letter."/>
</xpath>
</field>
</record>
</odoo>