diff --git a/addons/hr_payroll_account/__openerp__.py b/addons/hr_payroll_account/__openerp__.py index f087733c2dc..a7fc0604542 100644 --- a/addons/hr_payroll_account/__openerp__.py +++ b/addons/hr_payroll_account/__openerp__.py @@ -2,7 +2,6 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. { 'name': 'Payroll Accounting', - 'version': '1.0', 'category': 'Human Resources', 'description': """ Generic Payroll system Integrated with Accounting. @@ -12,14 +11,8 @@ Generic Payroll system Integrated with Accounting. * Payment Encoding * Company Contribution Management """, - 'depends': [ - 'hr_payroll', - 'account', - 'hr_expense' - ], + 'depends': ['hr_payroll', 'account', 'hr_expense'], 'data': ['views/hr_payroll_account_views.xml'], 'demo': ['data/hr_payroll_account_demo.xml'], - 'test': ['../account/test/account_minimal_test.xml', 'test/hr_payroll_account.yml'], - 'installable': True, - 'auto_install': False, + 'test': ['../account/test/account_minimal_test.xml'], } diff --git a/addons/hr_payroll_account/data/hr_payroll_account_demo.xml b/addons/hr_payroll_account/data/hr_payroll_account_demo.xml index a8ac6414b94..6a4f3a9e39d 100644 --- a/addons/hr_payroll_account/data/hr_payroll_account_demo.xml +++ b/addons/hr_payroll_account/data/hr_payroll_account_demo.xml @@ -1,11 +1,6 @@ - - - + - - - - + diff --git a/addons/hr_payroll_account/models/hr_payroll_account.py b/addons/hr_payroll_account/models/hr_payroll_account.py index 788f0ff9939..2501a10ce7e 100644 --- a/addons/hr_payroll_account/models/hr_payroll_account.py +++ b/addons/hr_payroll_account/models/hr_payroll_account.py @@ -1,110 +1,76 @@ #-*- coding:utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import time -from datetime import date, datetime, timedelta -from openerp import api -from openerp.osv import fields, osv -from openerp.tools import float_compare, float_is_zero -from openerp.tools.translate import _ -from openerp.exceptions import UserError +from odoo import api, fields, models, _ +from odoo.exceptions import UserError +from odoo.tools import float_compare, float_is_zero -class hr_payslip_line(osv.osv): - ''' - Payslip Line - ''' + +class HrPayslipLine(models.Model): _inherit = 'hr.payslip.line' - def _get_partner_id(self, cr, uid, payslip_line, credit_account, context=None): + def _get_partner_id(self, credit_account): """ Get partner_id of slip line to use in account_move_line """ # use partner of salary rule or fallback on employee's address - partner_id = payslip_line.salary_rule_id.register_id.partner_id.id or \ - payslip_line.slip_id.employee_id.address_home_id.id + register_partner_id = self.salary_rule_id.register_id.partner_id + partner_id = register_partner_id.id or self.slip_id.employee_id.address_home_id.id if credit_account: - if payslip_line.salary_rule_id.register_id.partner_id or \ - payslip_line.salary_rule_id.account_credit.internal_type in ('receivable', 'payable'): + if register_partner_id or self.salary_rule_id.account_credit.internal_type in ('receivable', 'payable'): return partner_id else: - if payslip_line.salary_rule_id.register_id.partner_id or \ - payslip_line.salary_rule_id.account_debit.internal_type in ('receivable', 'payable'): + if register_partner_id or self.salary_rule_id.account_debit.internal_type in ('receivable', 'payable'): return partner_id return False - -class hr_payslip(osv.osv): - ''' - Pay Slip - ''' +class HrPayslip(models.Model): _inherit = 'hr.payslip' - _description = 'Pay Slip' - _columns = { - 'date': fields.date('Date Account', states={'draft': [('readonly', False)]}, readonly=True, help="Keep empty to use the period of the validation(Payslip) date."), - 'journal_id': fields.many2one('account.journal', 'Salary Journal',states={'draft': [('readonly', False)]}, readonly=True, required=True), - 'move_id': fields.many2one('account.move', 'Accounting Entry', readonly=True, copy=False), - } + date = fields.Date('Date Account', states={'draft': [('readonly', False)]}, readonly=True, + help="Keep empty to use the period of the validation(Payslip) date.") + journal_id = fields.Many2one('account.journal', 'Salary Journal', readonly=True, required=True, + states={'draft': [('readonly', False)]}, default=lambda self: self.env['account.journal'].search([('type', '=', 'general')], limit=1)) + move_id = fields.Many2one('account.move', 'Accounting Entry', readonly=True, copy=False) - def _get_default_journal(self, cr, uid, context=None): - journal_obj = self.pool.get('account.journal') - res = journal_obj.search(cr, uid, [('type', '=', 'general')]) - if res: - return res[0] - return False - - _defaults = { - 'journal_id': _get_default_journal, - } - - def create(self, cr, uid, vals, context=None): - if context is None: - context = {} - if 'journal_id' in context: - vals.update({'journal_id': context.get('journal_id')}) - return super(hr_payslip, self).create(cr, uid, vals, context=context) + @api.model + def create(self, vals): + if 'journal_id' in self.env.context: + vals['journal_id'] = self.env.context.get('journal_id') + return super(HrPayslip, self).create(vals) @api.onchange('contract_id') def onchange_contract(self): - super(hr_payslip, self).onchange_contract() - self.journal_id = self.contract_id and self.contract_id.journal_id.id or (not self.contract_id and self._get_default_journal()) - return + super(HrPayslip, self).onchange_contract() + self.journal_id = self.contract_id.journal_id.id or (not self.contract_id and self.default_get(['journal_id'])['journal_id']) - def cancel_sheet(self, cr, uid, ids, context=None): - move_pool = self.pool.get('account.move') - move_ids = [] - move_to_cancel = [] - for slip in self.browse(cr, uid, ids, context=context): - if slip.move_id: - move_ids.append(slip.move_id.id) - if slip.move_id.state == 'posted': - move_to_cancel.append(slip.move_id.id) - move_pool.button_cancel(cr, uid, move_to_cancel, context=context) - move_pool.unlink(cr, uid, move_ids, context=context) - return super(hr_payslip, self).cancel_sheet(cr, uid, ids, context=context) + @api.multi + def cancel_sheet(self): + moves = self.mapped('move_id') + moves.filtered(lambda x: x.state == 'posted').button_cancel() + moves.unlink() + return super(HrPayslip, self).cancel_sheet() - def process_sheet(self, cr, uid, ids, context=None): - move_pool = self.pool.get('account.move') - hr_payslip_line_pool = self.pool['hr.payslip.line'] - precision = self.pool.get('decimal.precision').precision_get(cr, uid, 'Payroll') - timenow = time.strftime('%Y-%m-%d') + @api.multi + def process_sheet(self): + precision = self.env['decimal.precision'].precision_get('Payroll') + today = fields.Date.today() - for slip in self.browse(cr, uid, ids, context=context): + for slip in self: line_ids = [] debit_sum = 0.0 credit_sum = 0.0 - date = timenow name = _('Payslip of %s') % (slip.employee_id.name) - move = { + move_dict = { 'narration': name, 'ref': slip.number, 'journal_id': slip.journal_id.id, - 'date': date, + 'date': today, } for line in slip.details_by_salary_rule_category: - amt = slip.credit_note and -line.total or line.total - if float_is_zero(amt, precision_digits=precision): + amount = slip.credit_note and -line.total or line.total + if float_is_zero(amount, precision_digits=precision): continue debit_account_id = line.salary_rule_id.account_debit.id credit_account_id = line.salary_rule_id.account_credit.id @@ -112,14 +78,14 @@ class hr_payslip(osv.osv): if debit_account_id: debit_line = (0, 0, { 'name': line.name, - 'partner_id': hr_payslip_line_pool._get_partner_id(cr, uid, line, credit_account=False, context=context), + 'partner_id': line._get_partner_id(credit_account=False), 'account_id': debit_account_id, 'journal_id': slip.journal_id.id, - 'date': date, - 'debit': amt > 0.0 and amt or 0.0, - 'credit': amt < 0.0 and -amt or 0.0, - 'analytic_account_id': line.salary_rule_id.analytic_account_id and line.salary_rule_id.analytic_account_id.id or False, - 'tax_line_id': line.salary_rule_id.account_tax_id and line.salary_rule_id.account_tax_id.id or False, + 'date': today, + 'debit': amount > 0.0 and amount or 0.0, + 'credit': amount < 0.0 and -amount or 0.0, + 'analytic_account_id': line.salary_rule_id.analytic_account_id.id, + 'tax_line_id': line.salary_rule_id.account_tax_id.id, }) line_ids.append(debit_line) debit_sum += debit_line[2]['debit'] - debit_line[2]['credit'] @@ -127,14 +93,14 @@ class hr_payslip(osv.osv): if credit_account_id: credit_line = (0, 0, { 'name': line.name, - 'partner_id': hr_payslip_line_pool._get_partner_id(cr, uid, line, credit_account=True, context=context), + 'partner_id': line._get_partner_id(credit_account=True), 'account_id': credit_account_id, 'journal_id': slip.journal_id.id, - 'date': date, - 'debit': amt < 0.0 and -amt or 0.0, - 'credit': amt > 0.0 and amt or 0.0, - 'analytic_account_id': line.salary_rule_id.analytic_account_id and line.salary_rule_id.analytic_account_id.id or False, - 'tax_line_id': line.salary_rule_id.account_tax_id and line.salary_rule_id.account_tax_id.id or False, + 'date': today, + 'debit': amount < 0.0 and -amount or 0.0, + 'credit': amount > 0.0 and amount or 0.0, + 'analytic_account_id': line.salary_rule_id.analytic_account_id.id, + 'tax_line_id': line.salary_rule_id.account_tax_id.id, }) line_ids.append(credit_line) credit_sum += credit_line[2]['credit'] - credit_line[2]['debit'] @@ -145,11 +111,11 @@ class hr_payslip(osv.osv): raise UserError(_('The Expense Journal "%s" has not properly configured the Credit Account!') % (slip.journal_id.name)) adjust_credit = (0, 0, { 'name': _('Adjustment Entry'), - 'date': timenow, + 'date': today, 'partner_id': False, 'account_id': acc_id, 'journal_id': slip.journal_id.id, - 'date': date, + 'date': today, 'debit': 0.0, 'credit': debit_sum - credit_sum, }) @@ -164,52 +130,36 @@ class hr_payslip(osv.osv): 'partner_id': False, 'account_id': acc_id, 'journal_id': slip.journal_id.id, - 'date': date, + 'date': today, 'debit': credit_sum - debit_sum, 'credit': 0.0, }) line_ids.append(adjust_debit) - - move.update({'line_ids': line_ids}) - move_id = move_pool.create(cr, uid, move, context=context) - self.write(cr, uid, [slip.id], {'move_id': move_id, 'date' : date}, context=context) - move_pool.post(cr, uid, [move_id], context=context) - return super(hr_payslip, self).process_sheet(cr, uid, [slip.id], context=context) + move_dict['line_ids'] = line_ids + move = self.env['account.move'].create(move_dict) + slip.write({'move_id': move.id, 'date': today}) + move.post() + return super(HrPayslip, self).process_sheet() -class hr_salary_rule(osv.osv): +class HrSalaryRule(models.Model): _inherit = 'hr.salary.rule' - _columns = { - 'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account'), - 'account_tax_id':fields.many2one('account.tax', 'Tax'), - 'account_debit': fields.many2one('account.account', 'Debit Account', domain=[('deprecated', '=', False)]), - 'account_credit': fields.many2one('account.account', 'Credit Account', domain=[('deprecated', '=', False)]), - } -class hr_contract(osv.osv): + analytic_account_id = fields.Many2one('account.analytic.account', 'Analytic Account') + account_tax_id = fields.Many2one('account.tax', 'Tax') + account_debit = fields.Many2one('account.account', 'Debit Account', domain=[('deprecated', '=', False)]) + account_credit = fields.Many2one('account.account', 'Credit Account', domain=[('deprecated', '=', False)]) +class HrContract(models.Model): _inherit = 'hr.contract' _description = 'Employee Contract' - _columns = { - 'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account'), - 'journal_id': fields.many2one('account.journal', 'Salary Journal'), - } -class hr_payslip_run(osv.osv): + analytic_account_id = fields.Many2one('account.analytic.account', 'Analytic Account') + journal_id = fields.Many2one('account.journal', 'Salary Journal') +class HrPayslipRun(models.Model): _inherit = 'hr.payslip.run' _description = 'Payslip Run' - _columns = { - 'journal_id': fields.many2one('account.journal', 'Salary Journal', states={'draft': [('readonly', False)]}, readonly=True, required=True), - } - def _get_default_journal(self, cr, uid, context=None): - journal_obj = self.pool.get('account.journal') - res = journal_obj.search(cr, uid, [('type', '=', 'general')]) - if res: - return res[0] - return False - - _defaults = { - 'journal_id': _get_default_journal, - } + journal_id = fields.Many2one('account.journal', 'Salary Journal', states={'draft': [('readonly', False)]}, readonly=True, + required=True, default=lambda self: self.env['account.journal'].search([('type', '=', 'general')], limit=1)) diff --git a/addons/hr_payroll_account/test/hr_payroll_account.yml b/addons/hr_payroll_account/test/hr_payroll_account.yml deleted file mode 100644 index 1770b7f8848..00000000000 --- a/addons/hr_payroll_account/test/hr_payroll_account.yml +++ /dev/null @@ -1,123 +0,0 @@ -- - I test the "Payslip" in order to check the hr_payroll_account module in OpenERP. -- - I create a bank record. -- - !record {model: res.partner.bank, id: res_partner_bank_0}: - acc_number: '001-9876543-21' - partner_id: base.res_partner_12 - acc_type: bank - bank_id: base.res_bank_1 -- - I create a new employee "John". -- - !record {model: hr.employee, id: hr_employee_john}: - address_home_id: base.res_partner_address_2 - address_id: base.res_partner_address_12 - birthday: '1984-05-01' - children: 0.0 - country_id: base.in - department_id: hr.dep_rd - gender: male - marital: single - name: John - bank_account_id: res_partner_bank_0 - vehicle_distance: 0.0 -- - I create a salary structure for 'Software Developer'. -- - !record {model: hr.payroll.structure, id: hr_payroll_structure_softwaredeveloper}: - name: Salary Structure for Software Developer - code: SD - company_id: base.main_company - parent_id: hr_payroll.structure_base - rule_ids: - - hr_payroll.hr_salary_rule_houserentallowance1 - - hr_payroll.hr_salary_rule_convanceallowance1 - - hr_payroll.hr_salary_rule_professionaltax1 - - hr_payroll.hr_salary_rule_providentfund1 - - hr_payroll.hr_salary_rule_meal_voucher - - hr_payroll.hr_salary_rule_sales_commission -- - I create a contract for "John". -- - !record {model: hr.contract, id: hr_contract_john}: - date_end: !eval "(datetime.now() + timedelta(days=365)).strftime('%Y-%m-%d')" - date_start: !eval time.strftime('%Y-%m-%d') - name: Contract for John - wage: 5000.0 - type_id: hr_contract.hr_contract_type_emp - employee_id: hr_employee_john - struct_id: hr_payroll_structure_softwaredeveloper - working_hours: resource.timesheet_group1 - journal_id: expenses_journal -- - I create a Payslip. -- - !record {model: hr.payslip, id: hr_payslip_0}: - employee_id: hr_employee_john - journal_id: expenses_journal - -- - The selection of an employee fills the contract, structure, worked days and input data fields. -- - !python {model: hr.payslip}: | - import time - from datetime import datetime - from dateutil import relativedelta - date_from = time.strftime('%Y-%m-01') - worked_days_obj = self.pool.get('hr.payslip.worked_days') - date_to = str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10] - res = self.onchange_employee_id(cr, uid, [], date_from, date_to, ref("hr_employee_john"), False, None) - vals = { - 'struct_id': res['value']['struct_id'], - 'contract_id': res['value']['contract_id'], - 'name': res['value']['name'], - } - vals['worked_days_line_ids'] = [(0,0,i) for i in res['value']['worked_days_line_ids']] - vals['input_line_ids'] = [(0,0,i) for i in res['value']['input_line_ids']] - vals.update({'contract_id': ref('hr_contract_john')}) - self.write(cr, uid, ref("hr_payslip_0"), vals) -- - I assign the amount to Input data. -- - !python {model: hr.payslip.input}: | - ids = self.search(cr, uid, [('payslip_id', '=', ref("hr_payslip_0"))]) - self.write(cr, uid, ids, {'amount': 5.0}) -- - I verify the payslip is in draft state. -- - !python {model: hr.payslip}: | - payslip_brw=self.browse(cr, uid, ref("hr_payslip_0")) - assert(payslip_brw.state == 'draft'), 'State not changed!' -- - I click on "Compute Sheet" button. -- - !python {model: hr.payslip}: | - self.compute_sheet(cr, uid, [ref("hr_payslip_0")], {"lang": "en_US", "tz": False, - "active_model": "ir.ui.menu", "department_id": False, "active_ids": [ref("hr_payroll.menu_department_tree")], - "section_id": False, "active_id": ref("hr_payroll.menu_department_tree"), - }) -- - I want to check cancel button. So I first cancel the sheet then make it set to draft. -- - !python {model: hr.payslip}: | - self.cancel_sheet(cr, uid, [ref("hr_payslip_0")], None) - self.signal_workflow(cr, uid, [ref("hr_payslip_0")], 'draft') -- - Then I click on the "Confirm" button. -- - !workflow {model: hr.payslip, action: hr_verify_sheet, ref: hr_payslip_0} -- - I verify that the Accounting Entries are created. -- - !python {model: hr.payslip}: | - payslip = self.browse(cr, uid, ref("hr_payslip_0")) - assert payslip.move_id, "Accounting Entries has not been created" -- - I verify that the payslip is in done state. -- - !python {model: hr.payslip}: | - payslip_brw=self.browse(cr, uid, ref("hr_payslip_0")) - assert(payslip_brw.state == 'done'), 'State not changed!' - diff --git a/addons/hr_payroll_account/tests/__init__.py b/addons/hr_payroll_account/tests/__init__.py new file mode 100644 index 00000000000..fddb4dff262 --- /dev/null +++ b/addons/hr_payroll_account/tests/__init__.py @@ -0,0 +1,4 @@ +#-*- coding:utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import test_hr_payroll_account \ No newline at end of file diff --git a/addons/hr_payroll_account/tests/test_hr_payroll_account.py b/addons/hr_payroll_account/tests/test_hr_payroll_account.py new file mode 100644 index 00000000000..759c4c51a43 --- /dev/null +++ b/addons/hr_payroll_account/tests/test_hr_payroll_account.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import time + +from datetime import datetime, timedelta +from dateutil import relativedelta +from odoo import fields, tools + +from openerp.addons.account.tests.account_test_classes import AccountingTestCase +from odoo.modules.module import get_module_resource +from odoo.tests import common + + +class TestHrPayrollAccount(common.TransactionCase): + + def _load(self, module, *args): + tools.convert_file(self.cr, 'hr_payroll_account', + get_module_resource(module, *args), {}, 'init', False, 'test', self.registry._assertion_report) + + def setUp(self): + super(TestHrPayrollAccount, self).setUp() + + self._load('account', 'test', 'account_minimal_test.xml') + + self.payslip_action_id = self.ref('hr_payroll.menu_department_tree') + + self.res_partner_bank = self.env['res.partner.bank'].create({ + 'acc_number': '001-9876543-21', + 'partner_id': self.ref('base.res_partner_12'), + 'acc_type': 'bank', + 'bank_id': self.ref('base.res_bank_1'), + }) + + self.hr_employee_john = self.env['hr.employee'].create({ + 'address_home_id': self.ref('base.res_partner_address_2'), + 'address_id': self.ref('base.res_partner_address_12'), + 'birthday': '1984-05-01', + 'children': 0.0, + 'country_id': self.ref('base.in'), + 'department_id': self.ref('hr.dep_rd'), + 'gender': 'male', + 'marital': 'single', + 'name': 'John', + 'bank_account_id': self.res_partner_bank.bank_id.id, + 'vehicle_distance': 0.0, + }) + + self.hr_structure_softwaredeveloper = self.env['hr.payroll.structure'].create({ + 'name': 'Salary Structure for Software Developer', + 'code': 'SD', + 'company_id': self.ref('base.main_company'), + 'parent_id': self.ref('hr_payroll.structure_base'), + 'rule_ids': [(6, 0, [ + self.ref('hr_payroll.hr_salary_rule_houserentallowance1'), + self.ref('hr_payroll.hr_salary_rule_convanceallowance1'), + self.ref('hr_payroll.hr_salary_rule_professionaltax1'), + self.ref('hr_payroll.hr_salary_rule_providentfund1'), + self.ref('hr_payroll.hr_salary_rule_meal_voucher'), + self.ref('hr_payroll.hr_salary_rule_sales_commission') + ])], + }) + + # Create account journal. + self.hr_contract_john = self.env['hr.contract'].create({ + 'date_end': fields.Date.to_string(datetime.now() + timedelta(days=365)), + 'date_start': fields.Date.today(), + 'name': 'Contract for John', + 'wage': 5000.0, + 'type_id': self.ref('hr_contract.hr_contract_type_emp'), + 'employee_id': self.hr_employee_john.id, + 'struct_id': self.hr_structure_softwaredeveloper.id, + 'working_hours': self.ref('resource.timesheet_group1'), + 'journal_id': self.ref('hr_payroll_account.expenses_journal'), + }) + + self.hr_payslip = self.env['hr.payslip'].create({ + 'employee_id': self.hr_employee_john.id, + 'journal_id': self.ref('hr_payroll_account.expenses_journal'), + }) + + def test_00_hr_payslip(self): + """ checking the process of payslip. """ + + date_from = time.strftime('%Y-%m-01') + date_to = str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10] + res = self.hr_payslip.onchange_employee_id(date_from, date_to, self.hr_employee_john.id) + vals = { + 'struct_id': res['value']['struct_id'], + 'contract_id': res['value']['contract_id'], + 'name': res['value']['name'], + } + vals['worked_days_line_ids'] = [(0, 0, i) for i in res['value']['worked_days_line_ids']] + vals['input_line_ids'] = [(0, 0, i) for i in res['value']['input_line_ids']] + vals.update({'contract_id': self.hr_contract_john.id}) + self.hr_payslip.write(vals) + + # I assign the amount to Input data. + payslip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', self.hr_payslip.id)]) + payslip_input.write({'amount': 5.0}) + + # I verify the payslip is in draft state. + self.assertEqual(self.hr_payslip.state, 'draft', 'State not changed!') + + # I click on "Compute Sheet" button. + context = {"lang": "en_US", "tz": False, "active_model": 'hr.payslip', "department_id": False, "active_ids": [self.payslip_action_id], "section_id": False, "active_id": self.payslip_action_id} + 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.assertEqual(self.hr_payslip.state, 'cancel', "Payslip is rejected.") + self.hr_payslip.signal_workflow('draft') + + # Confirm Payslip + self.hr_payslip.signal_workflow('hr_verify_sheet') + + # I verify that the Accounting Entries are created. + self.assertTrue(self.hr_payslip.move_id, 'Accounting Entries has not been created') + + # I verify that the payslip is in done state. + self.assertEqual(self.hr_payslip.state, 'done', 'State not changed!') diff --git a/addons/hr_payroll_account/views/hr_payroll_account_views.xml b/addons/hr_payroll_account/views/hr_payroll_account_views.xml index 618261b54f8..9617c903395 100644 --- a/addons/hr_payroll_account/views/hr_payroll_account_views.xml +++ b/addons/hr_payroll_account/views/hr_payroll_account_views.xml @@ -1,7 +1,5 @@ - - - - + + hr.payslip.inherit.form hr.payslip @@ -85,6 +83,4 @@ - - - + diff --git a/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py b/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py index 4e37ddd0f1c..5da19c2c361 100644 --- a/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py +++ b/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py @@ -1,20 +1,14 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from openerp.osv import osv +from odoo import api, models -class hr_payslip_employees(osv.osv_memory): +class HrPayslipEmployees(models.TransientModel): + _inherit = 'hr.payslip.employees' - _inherit ='hr.payslip.employees' - - def compute_sheet(self, cr, uid, ids, context=None): - run_pool = self.pool.get('hr.payslip.run') - if context is None: - context = {} - if context.get('active_id'): - run_data = run_pool.read(cr, uid, context['active_id'], ['journal_id']) - journal_id = run_data.get('journal_id') - journal_id = journal_id and journal_id[0] or False - if journal_id: - context = dict(context, journal_id=journal_id) - return super(hr_payslip_employees, self).compute_sheet(cr, uid, ids, context=context) + @api.multi + def compute_sheet(self): + journal_id = False + if self.env.context.get('active_id'): + journal_id = self.env['hr.payslip.run'].browse(self.env.context.get['active_id']).journal_id.id + return super(HrPayslipEmployees, self).with_context(journal_id=journal_id).compute_sheet()