Ejemplo n.º 1
0
        public void pontoDeveContabilizarIntervalos()
        {
            var entradaAlmoco = new DateTime(2014, 8, 22, 12, 30, 0);
            var saidaAlmoco   = new DateTime(2014, 8, 22, 13, 30, 0);
            var entradaLanche = new DateTime(2014, 8, 22, 16, 0, 0);
            var saidaLanche   = new DateTime(2014, 8, 22, 16, 15, 0);
            var tipoLanche    = tipoIntervaloFactory.criarTipoIntervalo("LANCHE");
            var dtMock        = new DataHoraMockListStrategy(
                new DateTime(2014, 8, 22, 9, 0, 0),
                entradaAlmoco,
                saidaAlmoco,
                entradaLanche,
                saidaLanche);

            var ponto = criarFactory().criarDiaTrabalho(dtMock, sessaoLogin);

            ponto.registrarIntervalo(tipoAlmoco, dtMock);
            ponto.registrarIntervalo(tipoAlmoco, dtMock);
            ponto.registrarIntervalo(tipoLanche, dtMock);
            ponto.registrarIntervalo(tipoLanche, dtMock);

            Assert.AreEqual(entradaAlmoco.TimeOfDay, ponto.getIntervalo(tipoAlmoco).Entrada);
            Assert.AreEqual(saidaAlmoco.TimeOfDay, ponto.getIntervalo(tipoAlmoco).Saida);
            Assert.AreEqual(entradaLanche.TimeOfDay, ponto.getIntervalo(tipoLanche).Entrada);
            Assert.AreEqual(saidaLanche.TimeOfDay, ponto.getIntervalo(tipoLanche).Saida);
        }
Ejemplo n.º 2
0
        public void relatorioDeveContarHorasDevedoras()
        {
            #region Arranging: Dias de trabalho

            var pontoRepository = new PontoDiaMockRepository();
            var horariosEntrada = new DataHoraMockListStrategy(
                new DateTime(2016, 6, 2, 10, 0, 0),
                new DateTime(2016, 6, 3, 10, 0, 0),
                new DateTime(2016, 6, 4, 10, 0, 0));
            var horariosSaida = new DataHoraMockListStrategy(true,
                                                             new DateTime(2016, 6, 2, 15, 0, 0),
                                                             new DateTime(2016, 6, 3, 15, 0, 0),
                                                             new DateTime(2016, 6, 4, 15, 0, 0));

            var diasDeTrabalho = new List <DiaTrabalho>();
            while (horariosEntrada.Count > 0)
            {
                diasDeTrabalho.Add(
                    iniciarEncerrarDia(pontoRepository, null, horariosEntrada.getDataHoraAtual(), horariosSaida));
                horariosSaida.dequeue();
            }

            #endregion

            #region Arranging: Jornada de trabalho

            var jornadaRepository = new JornadaTrabalhoMockRepository();
            var jornada           = criarJornadaTrabalho(jornadaRepository);
            jornada.cadastrarDia(DayOfWeek.Monday, DayOfWeek.Friday, new TimeSpan(10, 0, 0), new TimeSpan(15, 0, 0), new TimeSpan(0, 0, 0));
            jornadaRepository.save(jornada);

            #endregion

            //Arranging: Relatório Service
            var relatorio = criarRelatorioService(pontoRepository, null, jornadaRepository);
            var inicio    = new DateTime(2016, 6, 1);
            var fim       = new DateTime(2016, 6, 30);

            //Act
            var calendario = relatorio.gerarRelatorio(funcionario, inicio, fim);
            var diasTrabalhadosNoPeriodo = calendario.getDiasTrabalhados();

            //Assert
            Assert.AreEqual(30, calendario.Dias.Count);

            /*
             * Espera-se 5 horas nos dias úteis  |
             * 06/2016 possui 22 dias úteis      | 22 *  5  = Há 110 horas a trabalhar neste período
             * O funcionário só trabalhou 3 dias |
             * Porém, de dia útil, apenas 2      | 2  *  5  = 10 horas trabalhadas
             * Logo...                           | 110 - 10 = O funcionário deve 100 horas neste período
             */
            Assert.AreEqual(3, diasTrabalhadosNoPeriodo.Count);
            Assert.AreEqual(new TimeSpan(100, 0, 0), calendario.calcularHorasDevedoras());
        }
Ejemplo n.º 3
0
        public void relatorioDeveCalcularHorasTrabalhadas()
        {
            #region Arranging: Dias de trabalho

            var pontoRepository = new PontoDiaMockRepository();
            var horariosEntrada = new DataHoraMockListStrategy(
                new DateTime(2016, 6, 2, 10, 0, 0),
                new DateTime(2016, 6, 3, 10, 0, 0),
                new DateTime(2016, 6, 4, 10, 0, 0));
            var horariosSaida = new DataHoraMockListStrategy(true,
                                                             new DateTime(2016, 6, 2, 15, 0, 0),
                                                             new DateTime(2016, 6, 3, 15, 0, 0),
                                                             new DateTime(2016, 6, 4, 15, 0, 0));

            var diasDeTrabalho = new List <DiaTrabalho>();
            while (horariosEntrada.Count > 0)
            {
                diasDeTrabalho.Add(
                    iniciarEncerrarDia(pontoRepository, null, horariosEntrada.getDataHoraAtual(), horariosSaida));
                horariosSaida.dequeue();
            }

            #endregion

            #region Arranging: Jornada de trabalho

            var jornadaRepository = new JornadaTrabalhoMockRepository();
            var jornada           = criarJornadaTrabalho(jornadaRepository);
            jornada.cadastrarDia(DayOfWeek.Monday, DayOfWeek.Friday, new TimeSpan(10, 0, 0), new TimeSpan(15, 0, 0), new TimeSpan(0, 0, 0));
            jornadaRepository.save(jornada);

            #endregion

            //Arranging: Relatório Service
            var relatorio = criarRelatorioService(pontoRepository, null, jornadaRepository);
            var inicio    = new DateTime(2016, 6, 1);
            var fim       = new DateTime(2016, 6, 30);

            //Act
            var calendario = relatorio.gerarRelatorio(funcionario, inicio, fim);
            var diasTrabalhadosNoPeriodo = calendario.getDiasTrabalhados();

            //Assert
            Assert.AreEqual(30, calendario.Dias.Count);

            /*
             * O funcionário só trabalhou 5 horas em 3 dias, logo: 3 * 5 = 15 horas trabalhadas
             */
            Assert.AreEqual(3, diasTrabalhadosNoPeriodo.Count);
            Assert.AreEqual(new TimeSpan(15, 0, 0), calendario.calcularHorasTrabalhadas());
        }
Ejemplo n.º 4
0
        public void pontoNaoDeveRegistrarIntervalosRepetidos()
        {
            var saidaAlmoco = new DateTime(2014, 8, 22, 12, 30, 0);
            var horarios    = new DataHoraMockListStrategy(
                new DateTime(2014, 8, 22, 9, 0, 0),   //Inicio do dia
                new DateTime(2014, 8, 22, 12, 30, 0), //Entrada almoço
                saidaAlmoco,
                new DateTime(2014, 8, 22, 17, 00, 0)  //Horário de saída/erro
                );
            var service = criarService(horarios);

            var ponto = service.iniciarDia();

            ponto.registrarIntervalo(tipoAlmoco, horarios);
            ponto.registrarIntervalo(tipoAlmoco, horarios);
            ponto.registrarIntervalo(tipoAlmoco, horarios);
        }
Ejemplo n.º 5
0
        public void diaNaoDeveEncerrarComPontoAberto()
        {
            var inicioDia       = new DateTime(2014, 8, 22, 9, 0, 0);
            var entradaAlmoco   = new DateTime(2014, 8, 22, 12, 30, 0);
            var encerramentoDia = new DateTime(2014, 8, 22, 15, 0, 0);

            var dtMock = new DataHoraMockListStrategy(
                inicioDia,
                entradaAlmoco,
                encerramentoDia);

            var service = criarService(dtMock);
            var ponto   = service.iniciarDia();

            ponto.registrarIntervalo(tipoAlmoco, dtMock);
            service.encerrarDia(ponto);
        }
Ejemplo n.º 6
0
        public void pontoNaoDeveEntrarEmDuasPausasAoMesmoTempo()
        {
            var dia           = new DateTime(2014, 8, 22, 9, 0, 0);
            var entradaAlmoco = new DateTime(2014, 8, 22, 12, 00, 0);
            var entradaLanche = new DateTime(2014, 8, 22, 12, 30, 0);
            var horarios      = new DataHoraMockListStrategy(
                dia,
                dia,
                entradaAlmoco,
                entradaLanche
                );
            var service = criarService(horarios);

            var ponto = service.iniciarDia();

            ponto.registrarIntervalo(tipoAlmoco, horarios);
            ponto.registrarIntervalo(tipoIntervaloFactory.criarTipoIntervalo("LANCHE"), horarios);
        }
Ejemplo n.º 7
0
        public void pontoRepositoryDeveRecuperarDia()
        {
            var repo     = new PontoDiaMockRepository();
            var horarios = new DataHoraMockListStrategy(
                new DateTime(2016, 8, 13, 9, 0, 0),
                new DateTime(2016, 8, 13, 9, 0, 0),
                new DateTime(2016, 8, 13, 10, 0, 0),
                new DateTime(2016, 8, 13, 11, 0, 0),
                new DateTime(2016, 8, 13, 13, 0, 0)
                );
            var service = criarService(horarios, repo);

            var dia = service.iniciarDia();

            service.registrarIntervalo(tipoAlmoco, dia);
            service.registrarIntervalo(tipoAlmoco, dia);
            service.encerrarDia(dia);

            var diaRecuperado = repo.findPontoTrabalho(dia.Funcionario, dia.Data);

            Assert.AreEqual(dia.Data, diaRecuperado.Data);
            Assert.AreEqual(dia.Funcionario.Nome, diaRecuperado.Funcionario.Nome);
        }
Ejemplo n.º 8
0
        public void relatorioDeveContarHorasExtrasSeparandoPorValor()
        {
            #region Arranging: Feriado

            var feriadoRepository = new FeriadoMockRepository();
            var nomeFeriado       = "Dia de festa";
            var feriado           = criarFeriadoEm(feriadoRepository, nomeFeriado, 1, 6, 2016);

            #endregion

            #region Arranging: Dias de trabalho

            var pontoRepository = new PontoDiaMockRepository();
            var horariosEntrada = new DataHoraMockListStrategy(
                new DateTime(2016, 6, 1, 10, 0, 0),                                               //Feriado     -> 100%
                new DateTime(2016, 6, 2, 10, 0, 0),                                               //Quinta      -> 75%
                new DateTime(2016, 6, 3, 10, 0, 0),                                               //Sexta       -> 75%
                new DateTime(2016, 6, 4, 10, 0, 0),                                               //Sábado      -> 75%
                new DateTime(2016, 6, 5, 10, 0, 0));                                              //Domingo     -> 100%
            var horariosSaida = new DataHoraMockListStrategy(true,
                                                             new DateTime(2016, 6, 1, 18, 0, 0),  //Feriado     -> 100%
                                                             new DateTime(2016, 6, 2, 18, 0, 0),  //Quinta      -> 75%
                                                             new DateTime(2016, 6, 3, 18, 0, 0),  //Sexta       -> 75%
                                                             new DateTime(2016, 6, 4, 18, 0, 0),  //Sábado      -> 75%
                                                             new DateTime(2016, 6, 5, 18, 0, 0)); //Domingo     -> 100%

            var diasDeTrabalho = new List <DiaTrabalho>();
            while (horariosEntrada.Count > 0)
            {
                diasDeTrabalho.Add(
                    iniciarEncerrarDia(pontoRepository, feriadoRepository, horariosEntrada.getDataHoraAtual(), horariosSaida));
                horariosSaida.dequeue();
            }

            #endregion

            #region Arranging: Jornada de trabalho

            var jornadaRepository = new JornadaTrabalhoMockRepository();
            var jornada           = criarJornadaTrabalho(jornadaRepository);
            jornada.cadastrarDia(DayOfWeek.Monday, DayOfWeek.Friday, new TimeSpan(10, 0, 0), new TimeSpan(15, 0, 0), new TimeSpan(0, 0, 0));
            jornadaRepository.save(jornada);

            #endregion

            //Arranging: Relatório Service
            var relatorio = criarRelatorioService(pontoRepository, feriadoRepository, jornadaRepository);
            var inicio    = new DateTime(2016, 6, 1);
            var fim       = new DateTime(2016, 6, 30);

            //Act
            var calendario               = relatorio.gerarRelatorio(funcionario, inicio, fim);
            var feriadosNoPeriodo        = calendario.getFeriados();
            var diasTrabalhadosNoPeriodo = calendario.getDiasTrabalhados();

            //Assert
            Assert.AreEqual(30, calendario.Dias.Count);

            Assert.AreEqual(1, feriadosNoPeriodo.Count);
            Assert.AreEqual(nomeFeriado, feriadosNoPeriodo[0].Nome);
            Assert.AreEqual(new DateTime(2016, 6, 1), feriadosNoPeriodo[0].Data);

            Assert.AreEqual(5, diasTrabalhadosNoPeriodo.Count);
            Assert.AreEqual(new TimeSpan(14, 0, 0), calendario.calcularHorasExtras(75));
            Assert.AreEqual(new TimeSpan(16, 0, 0), calendario.calcularHorasExtras(100));
            Assert.AreEqual(new TimeSpan(30, 0, 0), calendario.calcularHorasExtras());
        }