diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 17:14:58 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 17:14:58 +0700 |
| commit | 1ca3b3df3421961caec3b747a364071c80f5c7da (patch) | |
| tree | 6778a1f0f3f9b4c6e26d6d87ccde16e24da6c9d6 /hr_payroll_community/wizard | |
| parent | b57188be371d36d96caac4b8d65a40745c0e972c (diff) | |
initial commit
Diffstat (limited to 'hr_payroll_community/wizard')
5 files changed, 133 insertions, 0 deletions
diff --git a/hr_payroll_community/wizard/__init__.py b/hr_payroll_community/wizard/__init__.py new file mode 100644 index 0000000..67788d4 --- /dev/null +++ b/hr_payroll_community/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/hr_payroll_community/wizard/hr_payroll_contribution_register_report.py b/hr_payroll_community/wizard/hr_payroll_contribution_register_report.py new file mode 100644 index 0000000..b1a5702 --- /dev/null +++ b/hr_payroll_community/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('hr_payroll_community.action_contribution_register').report_action([], data=datas) diff --git a/hr_payroll_community/wizard/hr_payroll_contribution_register_report_views.xml b/hr_payroll_community/wizard/hr_payroll_contribution_register_report_views.xml new file mode 100644 index 0000000..2cfe066 --- /dev/null +++ b/hr_payroll_community/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/hr_payroll_community/wizard/hr_payroll_payslips_by_employees.py b/hr_payroll_community/wizard/hr_payroll_payslips_by_employees.py new file mode 100644 index 0000000..14043bb --- /dev/null +++ b/hr_payroll_community/wizard/hr_payroll_payslips_by_employees.py @@ -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'} diff --git a/hr_payroll_community/wizard/hr_payroll_payslips_by_employees_views.xml b/hr_payroll_community/wizard/hr_payroll_payslips_by_employees_views.xml new file mode 100644 index 0000000..45f99f1 --- /dev/null +++ b/hr_payroll_community/wizard/hr_payroll_payslips_by_employees_views.xml @@ -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> |
