예제 #1
0
    def _compute_name_holiday(self):
        """
        Função que configura o nome automaticamente do holidays. Se começar e
        terminar em dias diferentes, mostre a data inicial e final do holidays,
         senão só mostra a data que acontecerá o holidays
        """
        for holiday in self:
            if holiday.data_inicio and holiday.data_fim and \
                    holiday.holiday_status_id and holiday.employee_id:
                date_from = data.formata_data(holiday.data_inicio)
                date_to = data.formata_data(holiday.data_fim)

                if date_from == date_to:
                    holiday.name = holiday.holiday_status_id.name[:30] + \
                        '[' + holiday.employee_id.name[:10] + '] ' + \
                        ' (' + date_to + ')'
                else:
                    holiday.name = \
                        '[' + holiday.employee_id.name + '] ' + \
                        holiday.holiday_status_id.name[:30] + \
                        ' (' + date_from + '-' + date_to + ')'

            elif holiday.holiday_status_id and holiday.employee_id:
                holiday.name = holiday.holiday_status_id.name[:30] + \
                               '[' + holiday.employee_id.name[:10] + '] '

            if holiday.controle_ferias_ids and holiday.type == 'add':
                holiday.name = \
                    'Periodo Aquisitivo ' + \
                    ' (' + data.formata_data(holiday.controle_ferias_ids[0].inicio_aquisitivo) + \
                    ' - ' + \
                    data.formata_data(holiday.controle_ferias_ids[0].fim_aquisitivo) + ') '
예제 #2
0
 def _compute_datas_formatadas(self):
     for contrato in self:
         if contrato.notice_of_termination_date:
             contrato.aviso_previo_fmt = data.formata_data(
                 contrato.notice_of_termination_date)
         if contrato.resignation_date:
             contrato.data_afastamento_fmt = data.formata_data(
                 contrato.resignation_date)
예제 #3
0
 def _compute_name(self):
     for subs in self:
         if subs.data_inicio and subs.data_fim:
             subs.name = 'Substituição {} {} - {}'.format(
                 subs.department_id.name,
                 formata_data(subs.data_inicio),
                 formata_data(subs.data_fim)
             )
def payslip_autonomo_report(pool, cr, uid, local_context, context):
    payslip_autonomo_pool = pool['hr.payslip.autonomo']
    payslip_id = payslip_autonomo_pool.browse(cr, uid, context['active_id'])

    print("\n\n\n Vai report")
    company_logo = payslip_id.company_id.logo
    company_nfe_logo = payslip_id.company_id.nfe_logo

    local_context['company_logo'] = \
        company_nfe_logo if company_nfe_logo else company_logo
    local_context['company_logo2'] = \
        company_nfe_logo if company_nfe_logo else company_logo

    # CPF DO Autonomo
    if payslip_id.employee_id.cpf:
        local_context['cpf'] = formata_cpf(payslip_id.employee_id.cpf)
    else:
        local_context['cpf'] = ''

    # Formatar Data da emissao do do RG
    local_context['rg_emission'] = \
        formata_data(payslip_id.employee_id.rg_emission)

    # Campo de conta bancária no formato para exibição do relatório
    conta_bancaria = ''
    if payslip_id.employee_id.address_home_id.bank_ids:
        conta_bancaria_id = payslip_id.employee_id.address_home_id.bank_ids[0]

        conta_bancaria = conta_bancaria_id.bank.bic + ' / ' + \
                         conta_bancaria_id.bra_number + ' / ' + \
                         conta_bancaria_id.acc_number

    local_context['conta_bancaria'] = conta_bancaria

    # Data de pagamento
    if payslip_id.data_pagamento_autonomo:

        local_context['data_pagamento'] = \
            'Data de Pagamento: ' + \
            formata_data(payslip_id.data_pagamento_autonomo)
    else:
        local_context['data_pagamento'] = ''

    # Numero maximo de linhas por holerites, se ultrapassar esse limite será
    # dividido em 2 grupos para ser exibido em uma segunda pagina
    max_linhas = 10
    local_context['grupo_rubricas_1'] = payslip_id.line_resume_ids[:max_linhas]
    local_context['grupo_rubricas_2'] = False
    if len(payslip_id.line_resume_ids) > max_linhas:
        local_context['grupo_rubricas_2'] = \
            payslip_id.line_resume_ids[max_linhas:]
예제 #5
0
 def _compute_nome_contrato(self):
     for contrato in self:
         if contrato.employee_id and contrato.matricula:
             nome = contrato.employee_id.name
             nome_contrato = '[%s] %s' % (contrato.matricula, nome)
             contrato.nome_contrato = nome_contrato if nome else ''
         if contrato.tipo == 'autonomo' and \
                 contrato.employee_id and contrato.date_start:
             nome = contrato.employee_id.name
             nome_contrato = '%s - [%s]' % \
                             (nome, formata_data(contrato.date_start))
             contrato.nome_contrato = nome_contrato if nome else ''
             if contrato.date_end:
                 nome_contrato = nome_contrato.replace(
                     ']', ' - ' + formata_data(contrato.date_end) + ']')
                 contrato.nome_contrato = nome_contrato
예제 #6
0
 def _compute_data_aviso_previo(self):
     for payslip_id in self:
         if payslip_id.dias_aviso_previo_trabalhados:
             payslip_id.data_aviso_previo_fmt = \
                 data.formata_data(payslip_id.dias_aviso_previo_trabalhados) or ' '
         else:
             payslip_id.data_aviso_previo_fmt = ' / / '
예제 #7
0
 def _compute_data_afastamento(self):
     for payslip_id in self:
         if payslip_id.data_afastamento:
             payslip_id.data_afastamento_fmt = \
                 data.formata_data(payslip_id.data_afastamento)
         else:
             payslip_id.data_aviso_previo_fmt = ' / / '
예제 #8
0
    def _descricao(self):
        if self.tipo == TIPO_CERTIFICADO_A1:
            self.descricao = 'A1'
        else:
            self.descricao = 'A3'

        if self.proprietario:
            self.descricao += ' - ' + self.proprietario

        if self.cnpj_cpf:
            self.descricao += ' - ' + self.cnpj_cpf

        if self.data_inicio_validade and self.data_fim_validade:
            self.descricao += ', válido de '
            self.descricao += formata_data(self.data_inicio_validade)
            self.descricao += ' até '
            self.descricao += formata_data(self.data_fim_validade)
예제 #9
0
    def _compute_descricao(self):
        for certificado in self:
            if certificado.tipo == TIPO_CERTIFICADO_A1:
                certificado.descricao = u'A1'
            else:
                certificado.descricao = u'A3'

            if certificado.proprietario:
                certificado.descricao += u' - ' + certificado.proprietario

            if certificado.cnpj_cpf:
                certificado.descricao += u' - ' + certificado.cnpj_cpf

            if (certificado.data_inicio_validade
                    and certificado.data_fim_validade):
                certificado.descricao += u', válido de '
                certificado.descricao += formata_data(
                    certificado.data_inicio_validade)
                certificado.descricao += u' até '
                certificado.descricao += formata_data(
                    certificado.data_fim_validade)
예제 #10
0
    def _compute_name_holiday(self):
        """
        Função que configura o nome automaticamente do holidays. Se começar e
        terminar em dias diferentes, mostre a data inicial e final do holidays,
         senão só mostra a data que acontecerá o holidays
        """
        for holiday in self:

            if holiday.employee_id:
                # Pegar apenas os dois primeiros nomes
                employee_name = filter(
                    lambda x: len(x) != 2, holiday.employee_id.name.split())
                employee_name = ' '.join(employee_name[:2])

            if holiday.data_inicio and holiday.data_fim and \
                    holiday.holiday_status_id and holiday.employee_id:
                date_from = data.formata_data(holiday.data_inicio)
                date_to = data.formata_data(holiday.data_fim)

                if date_from == date_to:
                    holiday.name = holiday.holiday_status_id.name[:30] + \
                        ' [' + employee_name + '] ' + \
                        ' (' + date_to + ')'
                else:
                    holiday.name = \
                        holiday.holiday_status_id.name[:30] + \
                        ' [' + employee_name + '] ' + \
                        ' (' + date_from + '-' + date_to + ')'

            elif holiday.holiday_status_id and holiday.employee_id:
                holiday.name = holiday.holiday_status_id.name[:30] + \
                               ' [' + employee_name + '] '

            if holiday.controle_ferias_ids and holiday.type == 'add':
                holiday.name = \
                    'Periodo Aquisitivo ' + \
                    ' (' + data.formata_data(holiday.controle_ferias_ids[0].inicio_aquisitivo) + \
                    ' - ' + \
                    data.formata_data(holiday.controle_ferias_ids[0].fim_aquisitivo) + ') '
    def _validar(self, word, tam, tipo='AN'):
        """
        Função Genérica utilizada para validação de campos que são gerados
        nos arquivos TXT's
        :param tipo: str - Tipo de palavras validadas:
            -   A -> Alfabéticas -> Apenas letras do alfabeto
            -   D -> Data -> Apenas numeral
            -   V -> Valor -> Valores decimais, retirando a virgula
            -   N -> Numerico -> Apenas numeros preechidos com zero a esq.
            -   AN -> Alfanumericos -> Aceita nuemros e caracateres sem acentos
        :param word: str - palavra a ser validada
        :param tam: int - Tamanho que a palavra deve ser
        :return: str - Palavra formatada de acordo com tipo e tamanho
        """
        if not word:
            word = u''

        if tipo == 'A':  # Alfabetico
            word = tira_acentos(word)
            # tirar tudo que nao for letra do alfabeto
            word = re.sub('[^a-zA-Z]', ' ', word)
            # Retirar 2 espaços seguidos
            word = re.sub('[ ]+', ' ', word)
            return unicode.ljust(unicode(word), tam)[:tam]

        elif tipo == 'D':  # Data
            # Retira tudo que nao for numeral
            word = data.formata_data(word)
            word = re.sub(u'[^0-9]', '', str(word))
            return unicode.ljust(unicode(word), tam)[:tam]

        elif tipo == 'V':  # Valor
            # Pega a parte decimal como inteiro e nas duas ultimas casas
            word = int(word * 100) if word else 0
            # Preenche com zeros a esquerda
            word = str(word).zfill(tam)
            return word[:tam]

        elif tipo == 'N':  # Numerico
            # Preenche com zeros a esquerda
            word = re.sub('[^0-9]', '', str(word))
            word = str(word).zfill(tam)
            return word[:tam]

        elif tipo == 'AN':  # Alfanumerico
            # Tira acentos da palavras
            word = tira_acentos(word)
            # Preenche com espaço vazio a esquerda
            return unicode.ljust(unicode(word), tam)[:tam]
def payslip_report(pool, cr, uid, local_context, context):
    payslip_pool = pool['hr.payslip']
    payslip_id = payslip_pool.browse(cr, uid, context['active_id'])

    local_context['footer'] = \
        u'Telefone: 61-3246-6200 | E-mail: [email protected] | ' \
        u'Site: http://www.abgf.gov.br'

    company_logo = payslip_id.company_id.logo
    company_nfe_logo = payslip_id.company_id.nfe_logo

    local_context['company_logo'] = \
        company_nfe_logo if company_nfe_logo else company_logo
    local_context['company_logo2'] = \
        company_nfe_logo if company_nfe_logo else company_logo

    local_context['linhas_holerites'] = payslip_id.line_resume_ids

    local_context['data_pagamento'] = \
        formata_data(payslip_id.payment_line_ids[0].order_id.date_scheduled) \
            if payslip_id.payment_line_ids else ''

    # Competencia
    competencia = dict(payslip_id._fields.get('mes_do_ano').selection).get(
        payslip_id.mes_do_ano) + ' de ' + str(payslip_id.ano)
    local_context['competencia'] = competencia

    # Calculo da quantidade de dependentes ativos.
    qty_dependent_values = 0
    for dependente in payslip_id.employee_id.dependent_ids:
        if dependente.dependent_verification and \
                dependente.dependent_dob < payslip_id.date_from:
            qty_dependent_values += 1

    # Bloco para montar as observacoes do Holerite
    msg_dependentes = 'OBS.: Nº Dependente{} IR: {}'.format(
        's' if qty_dependent_values != 1 else '', qty_dependent_values) \
        if qty_dependent_values else ''
    local_context['msg_dependentes'] = msg_dependentes

    # Mensagem de felcitações
    msg_aniversario = ''
    aniversario = str(payslip_id.ano) + payslip_id.employee_id.birthday[-6:]
    if aniversario >= payslip_id.date_from and \
            aniversario <= payslip_id.date_to:
        msg_aniversario = '\n\n\n  FELIZ ANIVERSÁRIO! =) '
    local_context['msg_aniversario'] = msg_aniversario
    def action_back_to_draft(self):
        """
        Permitir Suporte Voltar alterações para Rascunho, 
        desfazendo a alteração no contrato
        :return: 
        """
        for alteracao in self:
            # verificar se selecionou a ultima alteracao, pois nao sera
            # possível desfazer alterações que nao forem a ultima
            ultima_alteracao = self.search([
                ('change_type', '=', alteracao.change_type),
                ('contract_id', '=', alteracao.contract_id.id),
                ('state', '=', 'applied'),
            ],
                                           order='change_date DESC',
                                           limit=1)

            if not ultima_alteracao.id == self.id:
                raise UserError(
                    u'Só é possível desfazer a última alteração contratual.'
                    u'\nA última alteração é do dia %s' %
                    formata_data(ultima_alteracao.change_date))

            # Aplicar a penultima alteração contratual
            penultima_alteracao = self.search([
                ('id', '!=', alteracao.id),
                ('change_type', '=', alteracao.change_type),
                ('contract_id', '=', alteracao.contract_id.id),
                ('state', '=', 'applied'),
            ],
                                              order='change_date DESC',
                                              limit=1)

            # Se nao tiver uma alteração anterior, isso é,
            # se for a primeira alteração contratual não é possível desfazer
            if not penultima_alteracao:
                raise UserError(
                    u'Não é possível desfazer a primeira alteração contratual.'
                    u'\nA primeira alteração contem as informações iniciais '
                    u'do contrato.')

            penultima_alteracao.apply_contract_changes()
            self.state = 'draft'
예제 #14
0
    def _check_date(self):
        '''
        Não permitir incluir uma alteração de remuneração 
        com data anterior a última
        :return: 
        '''
        ultima_alteracao = self.search([
            ('id', '!=', self.id),
            ('change_type', '=', self.change_type),
            ('contract_id', '=', self.contract_id.id),
            ('state', '=', 'applied'),
        ], order='change_date DESC', limit=1)

        if ultima_alteracao and \
                        self.change_date <= ultima_alteracao.change_date:
            raise UserError(
                u'Não é possível criar uma alteração contratual com '
                u'data inferior à última alteração.'
                u'\n Data da última alteração contratual: %s' %
                formata_data(ultima_alteracao.change_date))
예제 #15
0
    def _compute_descricao(self):
        for documento in self:
            txt = TIPO_EMISSAO_DICT[documento.emissao]

            if documento.emissao == TIPO_EMISSAO_PROPRIA:
                txt += ' - ' + ENTRADA_SAIDA_DICT[documento.entrada_saida]

            txt += ' - ' + documento.modelo
            txt += ' - ' + (documento.serie or '')
            txt += ' - ' + formata_valor(documento.numero, casas_decimais=0)
            txt += ' - ' + formata_data(documento.data_emissao)

            if not documento.participante_id.cnpj_cpf:
                txt += ' - Consumidor não identificado'

            elif documento.participante_id.razao_social:
                txt += ' - ' + documento.participante_id.razao_social
                txt += ' - ' + documento.participante_id.cnpj_cpf
            else:
                txt += ' - ' + documento.participante_id.nome
                txt += ' - ' + documento.participante_id.cnpj_cpf

            documento.descricao = txt
예제 #16
0
def header_remessa_400(self, remessa):
    boleto = remessa.boletos[0]
    beneficiario = boleto.beneficiario
    #
    # Header do arquivo
    #
    texto = '0'
    texto += '1'
    texto += 'REMESSA'  # Na fase de teste informar REM.TST, em produção REMESSA
    texto += '01'
    texto += 'COBRANCA'.ljust(15)
    texto += str(beneficiario.agencia.numero).zfill(4)
    texto += '00'
    texto += str(beneficiario.conta.numero).zfill(5)[:5]
    texto += str(beneficiario.conta.digito).zfill(1)
    texto += ''.ljust(8)
    texto += beneficiario.nome.ljust(30)[:30]
    texto += '341'
    texto += 'BANCO ITAU SA'.ljust(15)
    texto += formata_data(remessa.data_hora, '%d%m%y')
    texto += ''.ljust(294)
    texto += '1'.zfill(6)

    return self.tira_acentos(texto.upper())
예제 #17
0
 def create(self, vals):
     # Criação de um nome para o _rec_name
     # PS.: Nao consegui criar um campo computed. =(
     change_type = vals.get('change_type') or \
                   self.env.context.get('default_change_type')
     if change_type and vals.get('contract_id') and \
             vals.get('change_date'):
         contrato_id = \
             self.env['hr.contract'].browse(vals.get('contract_id'))
         nome_contrato = \
             'Contrato ' + contrato_id.nome_contrato[:6] + ' ' + \
             contrato_id.employee_id.name
         nome_alteracao = \
             u'Alteração de ' + \
             dict(CHANGE_TYPE).get(change_type) + \
             ' ' +  u'em ' + \
             formata_data(vals.get('change_date')) + ' ' + \
             nome_contrato
         vals.update({
             'nome_alteracao' : nome_alteracao,
             'name': nome_alteracao,
             'change_type': change_type,
         })
     return super(HrContractChange, self).create(vals)
예제 #18
0
 def _compute_valor_total_folha(self):
     for holerite in self:
         total = 0.00
         total_proventos = 0.00
         total_descontos = 0.00
         base_inss = 0.00
         base_irpf = 0.00
         base_fgts = 0.00
         fgts = 0.00
         inss = 0.00
         irpf = 0.00
         #            codigo = {}
         #            codigo['BASE_FGTS'] = \
         #                holerite.env\
         #                .ref('l10n_br_hr_payroll.hr_salary_rule_BASE_FGTS').code
         #            codigo['BASE_INSS'] = \
         #                holerite.env\
         #                .ref('l10n_br_hr_payroll.hr_salary_rule_BASE_INSS').code
         #            codigo['BASE_IRPF'] = \
         #                holerite.env\
         #                .ref('l10n_br_hr_payroll.hr_salary_rule_BASE_IRPF').code
         #            codigo['FGTS'] = \
         #                holerite.env\
         #                .ref('l10n_br_hr_payroll.hr_salary_rule_FGTS').code
         #            codigo['INSS'] = \
         #                holerite.env\
         #                .ref('l10n_br_hr_payroll.hr_salary_rule_INSS').code
         #            codigo['IRPF'] = \
         #                holerite.env\
         #                .ref('l10n_br_hr_payroll.hr_salary_rule_IRPF').code
         for line in holerite.line_ids:
             total += line.valor_provento - line.valor_deducao
             total_proventos += line.valor_provento
             total_descontos += line.valor_deducao
             if line.code in ['BASE_FGTS', 'BASE_FGTS_13']:
                 base_fgts += line.total
             elif line.code in ['BASE_INSS', 'BASE_INSS_13']:
                 base_inss += line.total
             elif line.code == 'BASE_IRPF':
                 base_irpf = line.total
             elif line.code == 'FGTS':
                 fgts = line.total
             elif line.code == 'INSS':
                 inss = line.total
             elif line.code == 'IRPF':
                 irpf = line.total
         holerite.total_folha = total
         holerite.total_proventos = total_proventos
         holerite.total_descontos = total_descontos
         holerite.base_fgts = base_fgts
         holerite.base_inss = base_inss
         holerite.base_irpf = base_irpf
         holerite.fgts = fgts
         holerite.inss = inss
         holerite.irpf = irpf
         # Formato
         holerite.data_admissao_fmt = \
             data.formata_data(holerite.contract_id.date_start)
         holerite.salario_base_fmt = \
             valor.formata_valor(holerite.contract_id.wage)
         holerite.total_folha_fmt = \
             valor.formata_valor(holerite.total_folha)
         holerite.total_proventos_fmt = \
             valor.formata_valor(holerite.total_proventos)
         holerite.total_descontos_fmt = \
             valor.formata_valor(holerite.total_descontos)
         holerite.base_fgts_fmt = valor.formata_valor(holerite.base_fgts)
         holerite.base_inss_fmt = valor.formata_valor(holerite.base_inss)
         holerite.base_irpf_fmt = valor.formata_valor(holerite.base_irpf)
         holerite.fgts_fmt = valor.formata_valor(holerite.fgts)
         holerite.inss_fmt = valor.formata_valor(holerite.inss)
         holerite.irpf_fmt = valor.formata_valor(holerite.irpf)
         holerite.data_extenso = data.data_por_extenso(fields.Date.today())
예제 #19
0
    def gerar_holerites(self):
        self.verificar_holerites_gerados()
        for contrato in self.contract_id:
            # Provisionamento de ferias
            if self.tipo_de_folha == 'provisao_ferias':

                # recuperar primeiro dia do mes
                inicio_mes = str(self.ano).zfill(4) + '-' + \
                              str(self.mes_do_ano).zfill(2) + '-01'

                # se o contrato iniciou na metade do mes corrente
                # ex.: provisionando mes marco e contrato iniciou 15/03
                if contrato.date_start > inicio_mes:
                    inicio_mes = contrato.date_start

                data_inicio = fields.Date.to_string(ultimo_dia_mes(inicio_mes))

                contrato.action_button_update_controle_ferias(
                    data_referencia=data_inicio)

                for periodo in contrato.vacation_control_ids:
                    if periodo.saldo > 0 and not periodo.inicio_gozo:
                        try:
                            data_fim = fields.Date.from_string(inicio_mes) + \
                                  relativedelta(days=periodo.saldo)
                            payslip_obj = self.env['hr.payslip']

                            periodo_aquisitivo_provisao = \
                                str(int(periodo.saldo)) + \
                                ' dias referente a ' + \
                                formata_data(periodo.inicio_aquisitivo) + \
                                ' - ' + \
                                formata_data(periodo.fim_aquisitivo)

                            payslip = payslip_obj.create({
                                'contract_id': contrato.id,
                                'periodo_aquisitivo': periodo.id,
                                'mes_do_ano': self.mes_do_ano,
                                'mes_do_ano2': self.mes_do_ano,
                                'date_from': inicio_mes,
                                'date_to': data_fim,
                                'ano': self.ano,
                                'employee_id': contrato.employee_id.id,
                                'tipo_de_folha': self.tipo_de_folha,
                                'payslip_run_id': self.id,
                                'periodo_aquisitivo_provisao':
                                    periodo_aquisitivo_provisao,
                            })
                            # payslip._compute_set_dates()
                            payslip.compute_sheet()
                            self.env.cr.commit()
                            _logger.info(u"Holerite " + contrato.name +
                                         u" processado com sucesso!")
                        except:
                            _logger.warning(u"Holerite " + contrato.name +
                                            u" falhou durante o cálculo!")
                            payslip.unlink()
                            continue
                contrato.action_button_update_controle_ferias()
            else:
                try:
                    tipo_de_folha = self.tipo_de_folha
                    if tipo_de_folha == 'adiantamento_13':
                        tipo_de_folha = 'decimo_terceiro'
                    payslip_obj = self.env['hr.payslip']

                    mes_do_ano = self.mes_do_ano
                    if mes_do_ano == 13:
                        mes_do_ano = 12

                    payslip = payslip_obj.create({
                        'contract_id': contrato.id,
                        'mes_do_ano': self.mes_do_ano,
                        'mes_do_ano2': mes_do_ano,
                        'ano': self.ano,
                        'employee_id': contrato.employee_id.id,
                        'tipo_de_folha': tipo_de_folha,
                        'payslip_run_id': self.id,
                    })
                    payslip._compute_set_dates()
                    payslip._compute_set_employee_id()
                    payslip.compute_sheet()
                    _logger.info(
                        u"Holerite " + contrato.name +
                        u" processado com sucesso!")
                    self.env.cr.commit()
                except:
                    _logger.warning(
                        u"Holerite " + contrato.name +
                        u" falhou durante o cálculo!")
                    payslip.unlink()
                    continue
        self.verificar_holerites_gerados()
예제 #20
0
 def _compute_birthday_formatado(self):
     for empregado in self:
         if empregado.birthday:
             empregado.birthday_fmt = data.formata_data(empregado.birthday)
예제 #21
0
 def _valor_total_folha(self):
     for holerite in self:
         total = 0.00
         total_proventos = 0.00
         total_descontos = 0.00
         base_inss = 0.00
         base_irpf = 0.00
         base_fgts = 0.00
         fgts = 0.00
         inss = 0.00
         irpf = 0.00
         codigo = {}
         codigo['BASE_FGTS'] = \
             holerite.env\
             .ref('l10n_br_hr_payroll.hr_salary_rule_BASE_FGTS').code
         codigo['BASE_INSS'] = \
             holerite.env\
             .ref('l10n_br_hr_payroll.hr_salary_rule_BASE_INSS').code
         codigo['BASE_IRPF'] = \
             holerite.env\
             .ref('l10n_br_hr_payroll.hr_salary_rule_BASE_IRPF').code
         codigo['FGTS'] = \
             holerite.env\
             .ref('l10n_br_hr_payroll.hr_salary_rule_FGTS').code
         codigo['INSS'] = \
             holerite.env\
             .ref('l10n_br_hr_payroll.hr_salary_rule_INSS').code
         codigo['IRPF'] = \
             holerite.env\
             .ref('l10n_br_hr_payroll.hr_salary_rule_IRPF').code
         for line in holerite.line_ids:
             total += line.valor_provento - line.valor_deducao
             total_proventos += line.valor_provento
             total_descontos += line.valor_deducao
             if codigo['BASE_FGTS']:
                 base_fgts = line.total
             elif codigo['BASE_INSS']:
                 base_inss = line.total
             elif codigo('BASE_IRPF'):
                 base_irpf = line.total
             elif codigo['FGTS']:
                 fgts = line.total
             elif codigo['INSS']:
                 inss = line.total
             elif codigo['IRPF']:
                 irpf = line.total
         holerite.total_folha = total
         holerite.total_proventos = total_proventos
         holerite.total_descontos = total_descontos
         holerite.base_fgts = base_fgts
         holerite.base_inss = base_inss
         holerite.base_irpf = base_irpf
         holerite.fgts = fgts
         holerite.inss = inss
         holerite.irpf = irpf
         # Formato
         holerite.data_admissao_fmt =\
             data.formata_data(holerite.contract_id.date_start)
         holerite.salario_base_fmt =\
             valor.formata_valor(holerite.contract_id.wage)
         holerite.total_folha_fmt =\
             valor.formata_valor(holerite.total_folha)
         holerite.total_proventos_fmt =\
             valor.formata_valor(holerite.total_proventos)
         holerite.total_descontos_fmt =\
             valor.formata_valor(holerite.total_descontos)
         holerite.base_fgts_fmt = valor.formata_valor(holerite.base_fgts)
         holerite.base_inss_fmt = valor.formata_valor(holerite.base_inss)
         holerite.base_irpf_fmt = valor.formata_valor(holerite.base_irpf)
         holerite.fgts_fmt = valor.formata_valor(holerite.fgts)
         holerite.inss_fmt = valor.formata_valor(holerite.inss)
         holerite.irpf_fmt = valor.formata_valor(holerite.irpf)