From 6ec13d5f3691a609308f23508aa1ea79ea3c79e8 Mon Sep 17 00:00:00 2001 From: "Denis Vermylen (dve)" Date: Fri, 5 Aug 2016 15:20:53 +0200 Subject: [PATCH] [REF] hr_payroll: replace workflow by python code remove workflow and replace by python code. note: hr.payslip states are messy, 4 states are defined, 3 are used and 5 exist. --- addons/hr_payroll/__openerp__.py | 1 - addons/hr_payroll/models/hr_payroll.py | 22 +++--- addons/hr_payroll/tests/test_payslip_flow.py | 2 +- addons/hr_payroll/views/hr_payroll_views.xml | 6 +- .../hr_payroll/views/hr_payroll_workflow.xml | 72 ------------------- .../models/hr_payroll_account.py | 8 +-- .../tests/test_hr_payroll_account.py | 6 +- .../models/l10n_in_hr_payroll.py | 3 +- 8 files changed, 24 insertions(+), 96 deletions(-) delete mode 100644 addons/hr_payroll/views/hr_payroll_workflow.xml diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py index 8d0f39c9dc8..86c84f3572d 100644 --- a/addons/hr_payroll/__openerp__.py +++ b/addons/hr_payroll/__openerp__.py @@ -30,7 +30,6 @@ Generic Payroll system. 'security/ir.model.access.csv', 'wizard/hr_payroll_payslips_by_employees_views.xml', 'views/hr_payroll_views.xml', - 'views/hr_payroll_workflow.xml', 'data/hr_payroll_sequence.xml', 'views/hr_payroll_report.xml', 'data/hr_payroll_data.xml', diff --git a/addons/hr_payroll/models/hr_payroll.py b/addons/hr_payroll/models/hr_payroll.py index e1ee7f84bdb..63d65c553c6 100644 --- a/addons/hr_payroll/models/hr_payroll.py +++ b/addons/hr_payroll/models/hr_payroll.py @@ -173,6 +173,7 @@ class HrPayslip(models.Model): date_to = fields.Date(string='Date To', readonly=True, required=True, default=str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10], states={'draft': [('readonly', False)]}) + # this is chaos: 4 states are defined, 3 are used ('verify' isn't) and 5 exist ('confirm' seems to have existed) state = fields.Selection([ ('draft', 'Draft'), ('verify', 'Waiting'), @@ -223,24 +224,25 @@ class HrPayslip(models.Model): raise ValidationError(_("Payslip 'Date From' must be before 'Date To'.")) @api.multi - def cancel_sheet(self): - return self.write({'state': 'cancel'}) + def action_payslip_draft(self): + return self.write({'state': 'draft'}) @api.multi - def process_sheet(self): - return self.write({'paid': True, 'state': 'done'}) - - @api.multi - def hr_verify_sheet(self): + def action_payslip_done(self): self.compute_sheet() - return self.write({'state': 'verify'}) + return self.write({'state': 'done'}) + + @api.multi + def action_payslip_cancel(self): + if self.filtered(lambda slip: slip.state == 'done'): + raise UserError(_("Cannot cancel a payslip that is done.")) + return self.write({'state': 'cancel'}) @api.multi def refund_sheet(self): for payslip in self: copied_payslip = payslip.copy({'credit_note': True, 'name': _('Refund: ') + payslip.name}) - copied_payslip.signal_workflow('hr_verify_sheet') - copied_payslip.signal_workflow('process_sheet') + copied_payslip.action_payslip_done() formview_ref = self.env.ref('hr_payroll.view_hr_payslip_form', False) treeview_ref = self.env.ref('hr_payroll.view_hr_payslip_tree', False) return { diff --git a/addons/hr_payroll/tests/test_payslip_flow.py b/addons/hr_payroll/tests/test_payslip_flow.py index a10c29dfca9..6fa71dbe27f 100644 --- a/addons/hr_payroll/tests/test_payslip_flow.py +++ b/addons/hr_payroll/tests/test_payslip_flow.py @@ -37,7 +37,7 @@ class TestPayslipFlow(TestPayslipBase): richard_payslip.with_context(context).compute_sheet() # Then I click on the 'Confirm' button on payslip - richard_payslip.signal_workflow('hr_verify_sheet') + richard_payslip.action_payslip_done() # I verify that the payslip is in done state self.assertEqual(richard_payslip.state, 'done', 'State not changed!') diff --git a/addons/hr_payroll/views/hr_payroll_views.xml b/addons/hr_payroll/views/hr_payroll_views.xml index 6e55ed59788..5c0f5a9ba04 100644 --- a/addons/hr_payroll/views/hr_payroll_views.xml +++ b/addons/hr_payroll/views/hr_payroll_views.xml @@ -209,11 +209,11 @@
-
diff --git a/addons/hr_payroll/views/hr_payroll_workflow.xml b/addons/hr_payroll/views/hr_payroll_workflow.xml deleted file mode 100644 index fad86e7bbbf..00000000000 --- a/addons/hr_payroll/views/hr_payroll_workflow.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - hr.payslip.basic - hr.payslip - True - - - - - draft - True - function - write({'state': 'draft'}) - OR - - - - - verify - hr_verify_sheet() - function - - - - - cancel - cancel_sheet() - function - - - - - done - process_sheet() - function - True - - - - - - hr_verify_sheet - - - - - - cancel_sheet - - - - - - draft - - - - - - cancel_sheet - - - - - - check_done() - - - - diff --git a/addons/hr_payroll_account/models/hr_payroll_account.py b/addons/hr_payroll_account/models/hr_payroll_account.py index 7a3a46bdf28..e76173d45a4 100644 --- a/addons/hr_payroll_account/models/hr_payroll_account.py +++ b/addons/hr_payroll_account/models/hr_payroll_account.py @@ -45,14 +45,14 @@ class HrPayslip(models.Model): self.journal_id = self.contract_id.journal_id.id or (not self.contract_id and self.default_get(['journal_id'])['journal_id']) @api.multi - def cancel_sheet(self): + def action_payslip_cancel(self): moves = self.mapped('move_id') moves.filtered(lambda x: x.state == 'posted').button_cancel() moves.unlink() - return super(HrPayslip, self).cancel_sheet() + return super(HrPayslip, self).action_payslip_cancel() @api.multi - def process_sheet(self): + def action_payslip_done(self): precision = self.env['decimal.precision'].precision_get('Payroll') for slip in self: @@ -138,7 +138,7 @@ class HrPayslip(models.Model): move = self.env['account.move'].create(move_dict) slip.write({'move_id': move.id, 'date': date}) move.post() - return super(HrPayslip, self).process_sheet() + return super(HrPayslip, self).action_payslip_done() class HrSalaryRule(models.Model): diff --git a/addons/hr_payroll_account/tests/test_hr_payroll_account.py b/addons/hr_payroll_account/tests/test_hr_payroll_account.py index 5b44e80f1cc..68c64b07409 100644 --- a/addons/hr_payroll_account/tests/test_hr_payroll_account.py +++ b/addons/hr_payroll_account/tests/test_hr_payroll_account.py @@ -107,12 +107,12 @@ class TestHrPayrollAccount(common.TransactionCase): self.hr_payslip.with_context(context).compute_sheet() # I want to check cancel button. So I first cancel the sheet then make it set to draft. - self.hr_payslip.cancel_sheet() + self.hr_payslip.action_payslip_cancel() self.assertEqual(self.hr_payslip.state, 'cancel', "Payslip is rejected.") - self.hr_payslip.signal_workflow('draft') + self.hr_payslip.action_payslip_draft() # Confirm Payslip - self.hr_payslip.signal_workflow('hr_verify_sheet') + self.hr_payslip.action_payslip_done() # I verify that the Accounting Entries are created. self.assertTrue(self.hr_payslip.move_id, 'Accounting Entries has not been created') diff --git a/addons/l10n_in_hr_payroll/models/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/models/l10n_in_hr_payroll.py index cbab8f2ef75..b31cf67f5d1 100644 --- a/addons/l10n_in_hr_payroll/models/l10n_in_hr_payroll.py +++ b/addons/l10n_in_hr_payroll/models/l10n_in_hr_payroll.py @@ -139,8 +139,7 @@ class HrPayslipRun(models.Model): }) for slip in run.slip_ids: # TODO is it necessary to interleave the calls ? - slip.signal_workflow('hr_verify_sheet') - slip.signal_workflow('process_sheet') + slip.action_payslip_done() if not slip.employee_id.bank_account_id or not slip.employee_id.bank_account_id.acc_number: raise UserError(_('Please define bank account for the %s employee') % (slip.employee_id.name)) payslip_line = self.env['hr.payslip.line'].search([('slip_id', '=', slip.id), ('code', '=', 'NET')], limit=1)