summaryrefslogtreecommitdiff
path: root/om_hr_payroll/wizard
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 17:14:58 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 17:14:58 +0700
commit1ca3b3df3421961caec3b747a364071c80f5c7da (patch)
tree6778a1f0f3f9b4c6e26d6d87ccde16e24da6c9d6 /om_hr_payroll/wizard
parentb57188be371d36d96caac4b8d65a40745c0e972c (diff)
initial commit
Diffstat (limited to 'om_hr_payroll/wizard')
-rw-r--r--om_hr_payroll/wizard/__init__.py4
-rw-r--r--om_hr_payroll/wizard/hr_payroll_contribution_register_report.py25
-rw-r--r--om_hr_payroll/wizard/hr_payroll_contribution_register_report_views.xml32
-rw-r--r--om_hr_payroll/wizard/hr_payroll_payslips_by_employees.py41
-rw-r--r--om_hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml34
5 files changed, 136 insertions, 0 deletions
diff --git a/om_hr_payroll/wizard/__init__.py b/om_hr_payroll/wizard/__init__.py
new file mode 100644
index 0000000..55c6ad7
--- /dev/null
+++ b/om_hr_payroll/wizard/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding:utf-8 -*-
+
+from . import hr_payroll_payslips_by_employees
+from . import hr_payroll_contribution_register_report
diff --git a/om_hr_payroll/wizard/hr_payroll_contribution_register_report.py b/om_hr_payroll/wizard/hr_payroll_contribution_register_report.py
new file mode 100644
index 0000000..2a2fcc1
--- /dev/null
+++ b/om_hr_payroll/wizard/hr_payroll_contribution_register_report.py
@@ -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('om_om_hr_payroll.action_contribution_register').report_action([], data=datas)
diff --git a/om_hr_payroll/wizard/hr_payroll_contribution_register_report_views.xml b/om_hr_payroll/wizard/hr_payroll_contribution_register_report_views.xml
new file mode 100644
index 0000000..7609e9c
--- /dev/null
+++ b/om_hr_payroll/wizard/hr_payroll_contribution_register_report_views.xml
@@ -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>
diff --git a/om_hr_payroll/wizard/hr_payroll_payslips_by_employees.py b/om_hr_payroll/wizard/hr_payroll_payslips_by_employees.py
new file mode 100644
index 0000000..2fdba5c
--- /dev/null
+++ b/om_hr_payroll/wizard/hr_payroll_payslips_by_employees.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+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'}
diff --git a/om_hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml b/om_hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml
new file mode 100644
index 0000000..b65bf87
--- /dev/null
+++ b/om_hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml
@@ -0,0 +1,34 @@
+<?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>