<commit_before># -*- coding: utf-8 -*-
# Copyright 2016 KMEE INFORMATICA LTDA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from openerp import exceptions
from openerp.tests import common
# from openerp.exceptions import Warning as UserError


class TestHrHoliday(common.TransactionCase):

    def setUp(self):
        super(TestHrHoliday, self).setUp()
        # Usefull models
        self.hr_employee = self.env['hr.employee']
        self.hr_contract = self.env['hr.contract']
        self.hr_holidays = self.env['hr.holidays']

    def buscar_periodo_aquisitivo(self, contrato, inicio_ferias, fim_ferias):
        for controle_ferias in contrato.vacation_control_ids:
            if controle_ferias.inicio_concessivo < inicio_ferias and \
               controle_ferias.fim_concessivo > fim_ferias:
                if not controle_ferias.hr_holiday_ids:
                    controle_ferias.gerar_holidays_ferias()
                holidays = controle_ferias.hr_holiday_ids
                for holiday in holidays:
                    if holiday.type == 'add':
                        return holiday

    def atribuir_ferias(self, contrato, inicio_ferias,
                        fim_ferias, dias_ferias, dias_abono):
        """
        Atribui férias ao funcionário.
        Cria um holidays nos dias que o funcionario ira gozar as ferias .
        """
        # Buscar periodo Aquisitivo de acordo com os dias de ferias gozadas
        holiday_periodo_aquisitivo = self.buscar_periodo_aquisitivo(
            contrato, inicio_ferias, fim_ferias)

        holiday_status_id = self.env.ref(
            'l10n_br_hr_holiday.holiday_status_vacation')

        # Solicitacao de férias do funcionario
        ferias = self.hr_holidays.create({
            'name': '<NAME> ' + contrato.employee_id.name,
            'type': 'remove',
            'parent_id': holiday_periodo_aquisitivo.id,
            'holiday_type': 'employee',
            'holiday_status_id': holiday_status_id.id,
            'employee_id': contrato.employee_id.id,
            'vacations_days': dias_ferias,
            'sold_vacations_days': dias_abono,
            'number_of_days_temp': dias_ferias + dias_abono,
            'date_from': inicio_ferias,
            'date_to': fim_ferias,
            'contrato_id': contrato.id,
        })
        # Chamando Onchange manualmente para setar o controle de férias
        ferias._compute_contract()
        # Aprovacao da solicitacao do funcionario
        ferias.holidays_validate()

    def criar_contrato(self, date_start):
        """
        Criar um novo contrato para o funcionario
        :param name:        str - Nome Referencia do contrato
        :param wage:
        :param struct_id:
        :param date_start:
        :return:
        """
        employee_id = self.criar_funcionario('<NAME>')
        estrutura_salario = self.env.ref(
            'l10n_br_hr_payroll.hr_salary_structure_FUNCAO_COMISSIONADA')
        contrato_id = self.hr_contract.create({
            'name': 'Contrato ' + employee_id.name,
            'employee_id': employee_id.id,
            'wage': 12345.67,
            'struct_id': estrutura_salario.id,
            'date_start': date_start,
        })
        return contrato_id

    def criar_funcionario(self, nome):
        """
        Criar um employee apartir de um nome e sua quantidade de dependentes
        :param nome: str Nome do funcionario
        :return: hr.employee
        """
        funcionario = self.hr_employee.create({'name': nome})
        return funcionario

    def test_00_criacao_contrato(self):
        """
        Criacao de um contrato simples
        """
        contrato = self.criar_contrato('2014-01-01')

        self.assertEqual(contrato.employee_id.name, '<NAME>')
        self.assertEqual(contrato.name, 'Contrato <NAME>')
        self.assertEqual(contrato.date_start, '2014-01-01')
        self.assertEqual(contrato.wage, 12345.67)

    def test_01_verificar_controle_ferias(self):
        """
        Verificar a criação do controle de férias
        :return:
        """
        # Criar Contrato
        contrato = self.criar_contrato('2014-01-01')

        # Verificar a criação do controle de férias
        controle = contrato.vacation_control_ids[0]
        self.assertEqual(len(contrato.vacation_control_ids), 4)
        self.assertEqual(controle.inicio_aquisitivo, '2014-01-01')
        self.assertEqual(controle.fim_aquisitivo, '2014-12-31')
        self.assertEqual(controle.inicio_concessivo, '2015-01-01')
        self.assertEqual(controle.fim_concessivo, '2015-12-31')

        # Verificar a criação dos holidays que atribuem férias ao funcionario
        # A Criação só é feita automatica para os dois ultimos controlesferias
        for controle in contrato.vacation_control_ids[-2:]:
            self.assertEqual(len(controle.hr_holiday_ids), 1)
            self.assertEqual(controle.hr_holiday_ids.number_of_days_temp, 30)
            self.assertEqual(controle.hr_holiday_ids.type, 'add')

    def test_02_editar_contrato(self):
        """
        Para editar a data de admissao no contrato , nao se pode ter nenhum
        holiday aprovado de férias do tipo remove, atrelado ao contrato.
        """<commit_msg>[ADD] Testes para datas do periodo aquisitivo<commit_after># -*- coding: utf-8 -*-
# Copyright 2016 KMEE INFORMATICA LTDA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from openerp import exceptions
from openerp.tests import common
# from openerp.exceptions import Warning as UserError


class TestHrHoliday(common.TransactionCase):

    def setUp(self):
        super(TestHrHoliday, self).setUp()
        # Usefull models
        self.hr_employee = self.env['hr.employee']
        self.hr_contract = self.env['hr.contract']
        self.hr_holidays = self.env['hr.holidays']

    def buscar_periodo_aquisitivo(self, contrato, inicio_ferias, fim_ferias):
        for controle_ferias in contrato.vacation_control_ids:
            if controle_ferias.inicio_concessivo < inicio_ferias and \
               controle_ferias.fim_concessivo > fim_ferias:
                if not controle_ferias.hr_holiday_ids:
                    controle_ferias.gerar_holidays_ferias()
                holidays = controle_ferias.hr_holiday_ids
                for holiday in holidays:
                    if holiday.type == 'add':
                        return holiday

    def atribuir_ferias(self, contrato, inicio_ferias,
                        fim_ferias, dias_ferias, dias_abono):
        """
        Atribui férias ao funcionário.
        Cria um holidays nos dias que o funcionario ira gozar as ferias .
        """
        # Buscar periodo Aquisitivo de acordo com os dias de ferias gozadas
        holiday_periodo_aquisitivo = self.buscar_periodo_aquisitivo(
            contrato, inicio_ferias, fim_ferias)

        holiday_status_id = self.env.ref(
            'l10n_br_hr_holiday.holiday_status_vacation')

        # Solicitacao de férias do funcionario
        ferias = self.hr_holidays.create({
            'name': '<NAME> ' + contrato.employee_id.name,
            'type': 'remove',
            'parent_id': holiday_periodo_aquisitivo.id,
            'holiday_type': 'employee',
            'holiday_status_id': holiday_status_id.id,
            'employee_id': contrato.employee_id.id,
            'vacations_days': dias_ferias,
            'sold_vacations_days': dias_abono,
            'number_of_days_temp': dias_ferias + dias_abono,
            'date_from': inicio_ferias,
            'date_to': fim_ferias,
            'contrato_id': contrato.id,
        })
        # Chamando Onchange manualmente para setar o controle de férias
        ferias._compute_contract()
        # Aprovacao da solicitacao do funcionario
        ferias.holidays_validate()

    def criar_contrato(self, date_start):
        """
        Criar um novo contrato para o funcionario
        :param name:        str - Nome Referencia do contrato
        :param wage:
        :param struct_id:
        :param date_start:
        :return:
        """
        employee_id = self.criar_funcionario('<NAME>')
        estrutura_salario = self.env.ref(
            'l10n_br_hr_payroll.hr_salary_structure_FUNCAO_COMISSIONADA')
        contrato_id = self.hr_contract.create({
            'name': 'Contrato ' + employee_id.name,
            'employee_id': employee_id.id,
            'wage': 12345.67,
            'struct_id': estrutura_salario.id,
            'date_start': date_start,
        })
        return contrato_id

    def criar_funcionario(self, nome):
        """
        Criar um employee apartir de um nome e sua quantidade de dependentes
        :param nome: str Nome do funcionario
        :return: hr.employee
        """
        funcionario = self.hr_employee.create({'name': nome})
        return funcionario

    def test_00_criacao_contrato(self):
        """
        Criacao de um contrato simples
        """
        contrato = self.criar_contrato('2014-01-01')

        self.assertEqual(contrato.employee_id.name, '<NAME>')
        self.assertEqual(contrato.name, 'Contrato <NAME>')
        self.assertEqual(contrato.date_start, '2014-01-01')
        self.assertEqual(contrato.wage, 12345.67)
        # Testar controles de férias
        self.assertEqual(len(contrato.vacation_control_ids), 4)
        self.assertEqual(
            contrato.vacation_control_ids[0].inicio_aquisitivo, '2014-01-01')
        self.assertEqual(
            contrato.vacation_control_ids[0].fim_aquisitivo, '2014-12-31')
        self.assertEqual(
            contrato.vacation_control_ids[1].inicio_aquisitivo, '2015-01-01')
        self.assertEqual(
            contrato.vacation_control_ids[1].fim_aquisitivo, '2015-12-31')
        self.assertEqual(
            contrato.vacation_control_ids[2].inicio_aquisitivo, '2016-01-01')
        self.assertEqual(
            contrato.vacation_control_ids[2].fim_aquisitivo, '2016-12-31')
        self.assertEqual(
            contrato.vacation_control_ids[3].inicio_aquisitivo, '2017-01-01')
        self.assertEqual(
            contrato.vacation_control_ids[3].fim_aquisitivo, '2017-12-31')

    def test_01_verificar_controle_ferias(self):
        """
        Verificar a criação do controle de férias
        :return:
        """
        # Criar Contrato
        contrato = self.criar_contrato('2014-01-01')

        # Verificar a criação do controle de férias
        controle = contrato.vacation_control_ids[0]
        self.assertEqual(len(contrato.vacation_control_ids), 4)
        self.assertEqual(controle.inicio_aquisitivo, '2014-01-01')
        self.assertEqual(controle.fim_aquisitivo, '2014-12-31')
        self.assertEqual(controle.inicio_concessivo, '2015-01-01')
        self.assertEqual(controle.fim_concessivo, '2015-12-31')

        # Verificar a criação dos holidays que atribuem férias ao funcionario
        # A Criação só é feita automatica para os dois ultimos controlesferias
        for controle in contrato.vacation_control_ids[-2:]:
            self.assertEqual(len(controle.hr_holiday_ids), 1)
            self.assertEqual(controle.hr_holiday_ids.number_of_days_temp, 30)
            self.assertEqual(controle.hr_holiday_ids.type, 'add')

    def test_02_editar_contrato(self):
        """
        Para editar a data de admissao no contrato , nao se pode ter nenhum
        holiday aprovado de férias do tipo remove, atrelado ao contrato.
        """
{'fraction_non_alphanumeric': 0.09007593610892904, 'fraction_numerical': 0.022606266911058742, 'mean_word_length': 2.422341696535245, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4887343', 'n_tokens_mistral': 3911, 'n_tokens_neox': 3661, 'n_words': 718}