# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import fields, models, _ from odoo.exceptions import UserError class HrPayslipRun(models.Model): _inherit = 'hr.payslip.run' available_advice = fields.Boolean(string='Made Payment Advice?', help='If this box is checked which means that Payment Advice exists for current batch', readonly=False, copy=False) def create_advice(self): for run in self: if run.available_advice: raise UserError(_("Payment advice already exists for %s, 'Set to Draft' to create a new advice.", run.name)) company = self.env.company advice = self.env['hr.payroll.advice'].create({ 'batch_id': run.id, 'company_id': company.id, 'name': run.name, 'date': run.date_end, 'bank_id': company.partner_id.bank_ids and company.partner_id.bank_ids[0].bank_id.id or False }) for slip in run.slip_ids: # TODO is it necessary to interleave the calls ? 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) if payslip_line: self.env['hr.payroll.advice.line'].create({ 'advice_id': advice.id, 'name': slip.employee_id.bank_account_id.acc_number, 'ifsc_code': slip.employee_id.bank_account_id.bank_bic or '', 'employee_id': slip.employee_id.id, 'bysal': payslip_line.total }) self.write({'available_advice': True}) def action_draft(self): super(HrPayslipRun, self).action_draft() self.write({'available_advice': False})