mirror of
https://gitlab.com/sonalarora/tra_backend.git
synced 2026-01-05 23:53:01 +02:00
add new module
This commit is contained in:
4
hr_payroll_community/wizard/__init__.py
Normal file
4
hr_payroll_community/wizard/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
#-*- coding:utf-8 -*-
|
||||
|
||||
from . import hr_payroll_payslips_by_employees
|
||||
from . import hr_payroll_contribution_register_report
|
||||
@@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from datetime import datetime
|
||||
from dateutil import relativedelta
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class PayslipLinesContributionRegister(models.TransientModel):
|
||||
_name = 'payslip.lines.contribution.register'
|
||||
_description = 'Payslip Lines by Contribution Registers'
|
||||
|
||||
date_from = fields.Date(string='Date From', required=True,
|
||||
default=datetime.now().strftime('%Y-%m-01'))
|
||||
date_to = fields.Date(string='Date To', required=True,
|
||||
default=str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10])
|
||||
|
||||
def print_report(self):
|
||||
active_ids = self.env.context.get('active_ids', [])
|
||||
datas = {
|
||||
'ids': active_ids,
|
||||
'model': 'hr.contribution.register',
|
||||
'form': self.read()[0]
|
||||
}
|
||||
return self.env.ref('hr_payroll_community.action_contribution_register').report_action([], data=datas)
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_payslip_lines_contribution_register" model="ir.ui.view">
|
||||
<field name="name">payslip.lines.contribution.register</field>
|
||||
<field name="model">payslip.lines.contribution.register</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Contribution Register's Payslip Lines">
|
||||
<group col="4" colspan="6">
|
||||
<field name="date_from"/>
|
||||
<newline/>
|
||||
<field name="date_to"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="print_report" string="Print" type="object" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_payslip_lines_contribution_register" model="ir.actions.act_window">
|
||||
<field name="name">PaySlip Lines</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">payslip.lines.contribution.register</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="binding_model_id" ref="model_hr_contribution_register" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
@@ -0,0 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class HrPayslipEmployees(models.TransientModel):
|
||||
_name = 'hr.payslip.employees'
|
||||
_description = 'Generate payslips for all selected employees'
|
||||
|
||||
employee_ids = fields.Many2many('hr.employee', 'hr_employee_group_rel', 'payslip_id', 'employee_id', 'Employees')
|
||||
|
||||
def compute_sheet(self):
|
||||
payslips = self.env['hr.payslip']
|
||||
[data] = self.read()
|
||||
active_id = self.env.context.get('active_id')
|
||||
if active_id:
|
||||
[run_data] = self.env['hr.payslip.run'].browse(active_id).read(['date_start', 'date_end', 'credit_note'])
|
||||
from_date = run_data.get('date_start')
|
||||
to_date = run_data.get('date_end')
|
||||
if not data['employee_ids']:
|
||||
raise UserError(_("You must select employee(s) to generate payslip(s)."))
|
||||
for employee in self.env['hr.employee'].browse(data['employee_ids']):
|
||||
slip_data = self.env['hr.payslip'].onchange_employee_id(from_date, to_date, employee.id, contract_id=False)
|
||||
res = {
|
||||
'employee_id': employee.id,
|
||||
'name': slip_data['value'].get('name'),
|
||||
'struct_id': slip_data['value'].get('struct_id'),
|
||||
'contract_id': slip_data['value'].get('contract_id'),
|
||||
'payslip_run_id': active_id,
|
||||
'input_line_ids': [(0, 0, x) for x in slip_data['value'].get('input_line_ids')],
|
||||
'worked_days_line_ids': [(0, 0, x) for x in slip_data['value'].get('worked_days_line_ids')],
|
||||
'date_from': from_date,
|
||||
'date_to': to_date,
|
||||
'credit_note': run_data.get('credit_note'),
|
||||
'company_id': employee.company_id.id,
|
||||
}
|
||||
payslips += self.env['hr.payslip'].create(res)
|
||||
payslips.compute_sheet()
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_hr_payslip_by_employees" model="ir.ui.view">
|
||||
<field name="name">hr_payroll_payslip_employees</field>
|
||||
<field name="model">hr.payslip.employees</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Payslips by Employees">
|
||||
<header>
|
||||
<button icon="fa-cogs" string="Generate" name="compute_sheet" type="object" class="oe_highlight" />
|
||||
</header>
|
||||
<group>
|
||||
<span colspan="4" nolabel="1">This wizard will generate payslips for all selected employee(s) based on the dates and credit note specified on Payslips Run.</span>
|
||||
</group>
|
||||
<group colspan="4" >
|
||||
<separator string="Employees" colspan="4"/>
|
||||
<newline/>
|
||||
<field name="employee_ids" nolabel="1"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_payslip_by_employees" model="ir.actions.act_window">
|
||||
<field name="name">Generate Payslips</field>
|
||||
<field name="res_model">hr.payslip.employees</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_hr_payslip_by_employees"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user