diff --git a/l10n_br_hr_payroll/views/hr_payslip_autonomo.xml b/l10n_br_hr_payroll/views/hr_payslip_autonomo.xml index a1098e110..77b21c529 100644 --- a/l10n_br_hr_payroll/views/hr_payslip_autonomo.xml +++ b/l10n_br_hr_payroll/views/hr_payslip_autonomo.xml @@ -119,8 +119,8 @@ - + diff --git a/l10n_br_hr_payroll_account/__openerp__.py b/l10n_br_hr_payroll_account/__openerp__.py index 9734ed1fb..8cd03c066 100644 --- a/l10n_br_hr_payroll_account/__openerp__.py +++ b/l10n_br_hr_payroll_account/__openerp__.py @@ -18,6 +18,7 @@ 'data/journal_data.xml', 'views/l10n_br_hr_payroll_account_view.xml', 'views/l10n_br_hr_payroll_run_account_view.xml', + 'views/l10n_br_hr_payroll_autonomo.xml', ], 'demo': [ ], diff --git a/l10n_br_hr_payroll_account/models/__init__.py b/l10n_br_hr_payroll_account/models/__init__.py index b8781bd68..b9cd7fece 100644 --- a/l10n_br_hr_payroll_account/models/__init__.py +++ b/l10n_br_hr_payroll_account/models/__init__.py @@ -6,3 +6,4 @@ from . import l10n_br_hr_salary_rule from . import l10n_br_hr_payroll_account from . import l10n_br_hr_payroll_run_account +from . import l10n_br_hr_payroll_autonomo diff --git a/l10n_br_hr_payroll_account/models/account_move.py b/l10n_br_hr_payroll_account/models/account_move.py index ced037480..bee25375f 100644 --- a/l10n_br_hr_payroll_account/models/account_move.py +++ b/l10n_br_hr_payroll_account/models/account_move.py @@ -14,6 +14,12 @@ class AccountMove(models.Model): ondelete='cascade', ) + payslip_autonomo_id = fields.Many2one( + comodel_name="hr.payslip.autonomo", + string="Payslip Autonomo", + ondelete='cascade', + ) + payslip_run_id = fields.Many2one( comodel_name="hr.payslip.run", string="Payslip Run", @@ -42,6 +48,12 @@ class AccountMoveLine(models.Model): string="Payslip", ) + payslip_autonomo_id = fields.Many2one( + comodel_name="hr.payslip.autonomo", + string="Payslip Autonomo", + ondelete='cascade', + ) + payslip_run_id = fields.Many2one( comodel_name="hr.payslip.run", string="Payslip Run", diff --git a/l10n_br_hr_payroll_account/models/l10n_br_hr_payroll_account.py b/l10n_br_hr_payroll_account/models/l10n_br_hr_payroll_account.py index 1e53ffcea..47aea5720 100644 --- a/l10n_br_hr_payroll_account/models/l10n_br_hr_payroll_account.py +++ b/l10n_br_hr_payroll_account/models/l10n_br_hr_payroll_account.py @@ -56,22 +56,6 @@ def _buscar_lancamentos(self): default=_buscar_diario_fopag ) - @api.multi - def _verificar_lancamentos_anteriores(self, tipo_folha, period_id): - for payslip in self: - move_id = self.env['account.move'].search( - [ - ('name', 'like', NOME_LANCAMENTO[tipo_folha]), - ('name', 'like', payslip.contract_id.nome_contrato), - ('period_id', '!=', period_id) - ], - limit=1 - ) - if not move_id: - return False - else: - return move_id - @api.multi def _valor_lancamento_anterior_rubrica(self, move_id, rubrica_id): for line in move_id.line_id: diff --git a/l10n_br_hr_payroll_account/models/l10n_br_hr_payroll_autonomo.py b/l10n_br_hr_payroll_account/models/l10n_br_hr_payroll_autonomo.py new file mode 100644 index 000000000..5b83e88ab --- /dev/null +++ b/l10n_br_hr_payroll_account/models/l10n_br_hr_payroll_autonomo.py @@ -0,0 +1,164 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2018 ABGF +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +import time + +from openerp import api, models, fields, _ +from openerp.exceptions import Warning + +NOME_LANCAMENTO = { + 'normal': u'Holerite Normal - ', + 'rescisao': u'Rescisão - ', + 'ferias': u'Férias - ', + 'decimo_terceiro': u'Décimo Terceiro - ', + 'aviso_previo': u'Aviso Prévio - ', + 'provisao_ferias': u'Provisão de Férias - ', + 'provisao_decimo_terceiro': u'Provisão de Décimo Terceiro - ', +} + + +class L10nBrHrPayslipAutonomo(models.Model): + _inherit = 'hr.payslip.autonomo' + + move_id = fields.One2many( + comodel_name='account.move', + inverse_name='payslip_autonomo_id', + string='Accounting Entry', + ) + + move_lines_id = fields.One2many( + comodel_name='account.move.line', + string=u'Lançamentos', + inverse_name='payslip_autonomo_id', + ) + + journal_id = fields.Many2one( + comodel_name='account.journal', + string=u"Diário", + default=lambda self: + self.env.ref('l10n_br_hr_payroll_account.payroll_account_journal'), + ) + + @api.multi + def _valor_lancamento_anterior_rubrica(self, move_id, rubrica_id): + for line in move_id.line_id: + if rubrica_id.id == line.id: + return line.debit, line.credit, line.period_id + return 0, 0, 0 + + @api.multi + def _buscar_contas(self, salary_rule): + if self.tipo_de_folha == "provisao_ferias": + return salary_rule.provisao_ferias_account_debit, salary_rule.\ + provisao_ferias_account_credit + elif self.tipo_de_folha == "provisao_decimo_terceiro": + return salary_rule.provisao_13_account_debit, salary_rule.\ + provisao_13_account_credit + elif self.tipo_de_folha == "normal": + return salary_rule.holerite_normal_account_debit, salary_rule.\ + holerite_normal_account_credit + else: + return False, False + + @api.multi + def processar_contabilizacao_payslip(self): + for holerite in self: + move_obj = self.env['account.move'] + period_obj = self.env['account.period'] + timenow = time.strftime('%Y-%m-%d') + period_id = period_obj.find(holerite.date_to) + contador_lancamentos = 1 + + if not holerite.journal_id: + raise Warning( + _('Erro de Dados!'), + _('O campo Diário neste holerite não foi definido, ' + 'por favor escolha o Diário antes de calcular o ' + 'Lançamento Contábil!') + ) + + # Exclui os Lançamento Contábeis anteriors + holerite.move_id.unlink() + + # Roda as Rubricas e Cria os lançamentos contábeis + for line in holerite.line_ids: + linhas = [] + if line.total > 0: + conta_credito, conta_debito = False, False + credito, debito = 0, 0 + if holerite.tipo_de_folha == 'normal': + if line.salary_rule_id.holerite_normal_account_debit: + debito = line.total + conta_debito = \ + line.salary_rule_id.\ + holerite_normal_account_debit + if line.salary_rule_id.holerite_normal_account_credit: + credito = line.total + conta_credito = \ + line.salary_rule_id.\ + holerite_normal_account_credit + + + # + # Cria o Lançamento Contábil para esta Rubrica + # + if conta_credito or conta_debito: + move = self.criar_lancamento_contabil( + period_id, holerite, contador_lancamentos + ) + + # Cria a linha do lançamento contábil para Crédito + if conta_credito: + credit_line = (0, 0, { + 'name': line.name, + 'date': timenow, + 'account_id': conta_credito.id, + 'journal_id': holerite.journal_id.id, + 'period_id': period_id.id, + 'debit': 0, + 'credit': credito, + 'payslip_autonomo_id': holerite.id, + }) + linhas.append(credit_line) + + # Cria a linha do lançamento contábil para Débito + if conta_debito: + debit_line = (0, 0, { + 'name': line.name, + 'date': timenow, + 'account_id': conta_debito.id, + 'journal_id': holerite.journal_id.id, + 'period_id': period_id.id, + 'debit': debito, + 'credit': 0, + 'payslip_autonomo_id': holerite.id, + }) + linhas.append(debit_line) + + # Fecha e Posta o Lançamento Contábil + move.update({'line_id': linhas}) + move_id = move_obj.create(move) + if holerite.journal_id.entry_posted: + move_obj.post(move_id) + + # Incrementa o contador para a próxima linha + contador_lancamentos += 1 + + def criar_lancamento_contabil(self, period_id, slip, contador_lancamento): + name = \ + NOME_LANCAMENTO[slip.tipo_de_folha] \ + + str(slip.mes_do_ano) + "/" + str(slip.ano) \ + + " - " + slip.contract_id.nome_contrato + " - " + \ + str("%03d" % contador_lancamento) + move = { + 'name': name, + 'display_name': name, + 'narration': name, + 'date': slip.date_from, + 'ref': slip.number, + 'journal_id': slip.journal_id.id, + 'period_id': period_id.id, + 'payslip_autonomo_id': slip.id, + } + return move diff --git a/l10n_br_hr_payroll_account/views/l10n_br_hr_payroll_autonomo.xml b/l10n_br_hr_payroll_account/views/l10n_br_hr_payroll_autonomo.xml new file mode 100644 index 000000000..d0dbfafee --- /dev/null +++ b/l10n_br_hr_payroll_account/views/l10n_br_hr_payroll_autonomo.xml @@ -0,0 +1,25 @@ + + + + + + hr.payslip.autonomo.form in (l10n_br_hr_payroll_account) + hr.payslip.autonomo + + + + +