public PontoFuncionarioViewModel(DiaTrabalho ponto, SessaoLogin sessao, IPontoDiaRepository pontoRepository, IUnitOfWork unitOfWork)
        {
            this.ponto = ponto;

            this.Data            = ponto.Data.ToShortDateString();
            this.Funcionario     = ponto.Funcionario.Nome;
            this.Entrada         = ponto.Inicio;
            this.Saida           = ponto.Fim ?? new TimeSpan(0, 0, 0);
            this.pontoRepository = pontoRepository;
            this.unitOfWork      = unitOfWork;
            if (sessao.UsuarioLogado is Funcionario)
            {
                this.AllowEdit = false;
                this.Titulo    = "Ver ponto";
            }
            else
            {
                this.AllowEdit = true;
                this.Titulo    = "Editar/ver ponto";
            }

            Intervalos = ponto.Intervalos.ToList();

            SalvarCommand = new RelayCommand(confirmarSalvar, podeSalvar);
            FecharCommand = new RelayCommand(() => requestView(CLOSE));
        }
 public static PontoWindow criarPontoWindow(DiaTrabalho ponto, PontoService pontoService)
 {
     return(new PontoWindow(new ConsultarPontoViewModel(
                                (Funcionario)SessaoLogin.getSessao().UsuarioLogado,
                                ponto,
                                pontoService,
                                RepositoryFactory.criarTipoIntervaloRepository())));
 }
        /// <summary>
        /// Método responsável por efetuar a transposição da classe DiaTrabalho para seu respectivo Dto
        /// </summary>
        /// <param name="dia">dia atual com os periodos de trabalho cadastrados</param>
        /// <returns></returns>
        public static DiaTrabalhoDto DtoFactory(DiaTrabalho diaTrabalho)
        {
            List <PeriodoTrabalhoDto> periodos = diaTrabalho.periodosTrabalho.Select(o => PeriodoTrabalhoBo.DtoFactory(o.HoraInicial, o.HoraFinal)).ToList();

            return(new DiaTrabalhoDto()
            {
                DiaSemana = diaTrabalho.DiaDaSemana, PeriodosTrabalho = periodos
            });
        }
        public void encerrarDia(DiaTrabalho ponto)
        {
            if (ponto.algumIntervaloEmAberto())
            {
                throw new IntervaloEmAbertoException(ponto.getIntervaloEmAberto());
            }

            ponto.Fim = dataHoraStrategy.getDataHoraAtual().TimeOfDay;
            pontoRepository.save(ponto);
        }
        /// <summary>
        /// responsável por armazenar um período de trabalho à um dia de trabalho
        /// </summary>
        /// <param name="dia">dia da semana</param>
        /// <param name="inicioPeriodo">inicio de periodo de trabalho</param>
        /// <param name="fimPeriodo">fim do periodo de trabalho</param>
        public static void AdicionarPeriodoDeTrabalho( SemanaTrabalho semanaTrabalho, DayOfWeek dia, string inicioPeriodo, string fimPeriodo )
        {
            if(semanaTrabalho.diasTrabalho == null)
                return;

            DiaTrabalho diaTrabalho = ( semanaTrabalho.diasTrabalho.FirstOrDefault( o => o.DiaDaSemana.Equals( dia ) ) );
            if(diaTrabalho == null)
                diaTrabalho = AdicionarDiaDeTrabalho( semanaTrabalho, dia );

            DiaTrabalhoBo.AdicionarPeriodoDeTrabalho( inicioPeriodo, fimPeriodo, diaTrabalho );
        }
示例#6
0
        /// <summary>
        /// Método responsável por retornar o dia de trabalho atual baseado na dia da semana
        /// </summary>
        /// <param name="diaDaSemana">dia da semana (DayOfWeek)</param>
        /// <param name="semanaTrabalho">Semana atual de trabalho</param>
        /// <returns></returns>
        public static DiaTrabalhoDto ConsultarDiaAtualDeTrabalhoDto(DayOfWeek diaDaSemana, SemanaTrabalho semanaTrabalho)
        {
            DiaTrabalho diaAtual = SemanaTrabalhoDao.SelecionarDiaTrabalho(semanaTrabalho, diaDaSemana);

            if (diaAtual == null)
            {
                diaAtual = new DiaTrabalho(diaDaSemana);
                DiaTrabalhoBo.AdicionarPeriodoDeTrabalho("8:00", "18:00", diaAtual);
            }
            return(DiaTrabalhoBo.DtoFactory(diaAtual));
        }
        /// <summary>
        /// Método responsável por verificar se existe periodo de trabalho para o dia atual
        /// </summary>
        /// <param name="diaSemana">dia da semana (DataSelecionada.DayOfWeek)</param>
        /// <param name="diasTrabalho">lista de dias da semana</param>
        /// <returns></returns>
        public static bool DiaAtualPossuiPeriodoTrabalho( SemanaTrabalho semanaTrabalho, DayOfWeek diaSemana )
        {
            //Caso seja nulo, não possua periodos ou não contenha o indice do dia da semana
            if(semanaTrabalho.diasTrabalho == null || semanaTrabalho.diasTrabalho.Count == 0)
                return false;

            DiaTrabalho dia = semanaTrabalho.diasTrabalho.FirstOrDefault( o => o.DiaDaSemana.Equals( diaSemana ) );
            if(dia == null)
                return false;

            return dia.PeriodosDeTrabalho != null && dia.PeriodosDeTrabalho.Count > 0;
        }
示例#8
0
        public ConsultarPontoViewModel(Funcionario funcionario, DiaTrabalho ponto, PontoService pontoService, ITipoIntervaloRepository tipoRepository)
        {
            this.funcionario             = funcionario;
            this.ponto                   = ponto;
            this.pontoService            = pontoService;
            this.tipoIntervaloRepository = tipoRepository;

            EncerrarDiaCommand     = new RelayCommand(confirmarEncerrarDia);
            ConsultarPontoCommand  = new RelayCommand(abrirConsulta);
            EntrarIntervaloCommand = new RelayParameterEvaluatorCommand <TipoIntervalo>(registrarIntervalo, podeEntrarIntervalo);
            SairIntervaloCommand   = new RelayParameterEvaluatorCommand <TipoIntervalo>(registrarIntervalo, podeSairIntervalo);
        }
        /// <summary>
        /// Responsável por armazenar um dia de trabalho
        /// </summary>
        public static DiaTrabalho AdicionarDiaDeTrabalho( SemanaTrabalho semanaTrabalho, DayOfWeek dia )
        {
            if(semanaTrabalho.diasTrabalho == null)
                return null;

            DiaTrabalho diaTrabalho = semanaTrabalho.diasTrabalho.FirstOrDefault( o => o.DiaDaSemana.Equals( dia ) );
            if(diaTrabalho == null)
            {
                diaTrabalho = new DiaTrabalho( dia );
                semanaTrabalho.diasTrabalho.Add( diaTrabalho );
            }
            return diaTrabalho;
        }
示例#10
0
        private bool WriteInterval(ExcelWorksheet ws, DiaTrabalho dia, Cell cell)
        {
            try
            {
                var almoco = dia.getIntervalo(tipoAlmoco);
                cell.nextColumn();
                WriteTimeCell(ws, cell, almoco.Entrada.ToString());

                cell.nextColumn();
                WriteTimeCell(ws, cell, almoco.Saida.ToString());

                return(true);
            }
            catch (InvalidOperationException)
            {
                return(false);
            }
        }
示例#11
0
        /// <summary>
        /// Método para preencher uma inicialização do dia selecionado
        /// </summary>
        /// <param name="semanaTrabalho">semana de trabalho do colaborador</param>
        /// <param name="dataSelecionada">data de selecao</param>
        /// <returns></returns>
        private static InicializadorEstimativaDto PreencherInicializacaoDiaSelecionado(SemanaTrabalho semanaTrabalho, DateTime dataSelecionada)
        {
            InicializadorEstimativaDto inicializadorDto = new InicializadorEstimativaDto();

            if (SemanaTrabalhoBo.DiaAtualPossuiPeriodoTrabalho(semanaTrabalho, dataSelecionada.DayOfWeek))
            {
                inicializadorDto.DataEstimativa = dataSelecionada;
                DiaTrabalho dia   = SemanaTrabalhoDao.SelecionarDiaTrabalho(semanaTrabalho, dataSelecionada.DayOfWeek);
                long        ticks = dia.PeriodosDeTrabalho.Min(o => ConversorTimeSpan.ConverterHorasDeStringParaTicks(o.HoraInicial));
                inicializadorDto.HoraInicialEstimativa = new TimeSpan(ticks);
            }
            else
            {
                inicializadorDto = new InicializadorEstimativaDto()
                {
                    DataEstimativa = dataSelecionada, HoraInicialEstimativa = new TimeSpan(8, 0, 0)
                }
            };

            inicializadorDto.DiaAtual = TarefaHistoricoTrabalhoDao.ConsultarDiaAtualDeTrabalhoDto(dataSelecionada.DayOfWeek, semanaTrabalho);
            return(inicializadorDto);
        }
        /// <summary>
        /// Método responsável por gerar uma semana de trabalho padrão
        /// de Segundo a Sexta com períodos de trabalho de 8:00 as 12:00 e 13:00 as 18:00
        /// </summary>
        /// <returns>Semana de trabalho com dias de trabalho e periodos de trabalho predefinidos no método</returns>
        public static List<DiaTrabalho> GerarSemanaTrabalhoPadrao( SemanaTrabalho semanaTrabalho )
        {
            semanaTrabalho.diasTrabalho.Clear();
            DiaTrabalho diaAtual;
            foreach(DayOfWeek diaSemana in Enum.GetValues( typeof( DayOfWeek ) ))
            {
                switch(diaSemana)
                {
                    case DayOfWeek.Sunday:
                    case DayOfWeek.Saturday:
                        break;
                    default:
                        diaAtual = new DiaTrabalho( (DayOfWeek)diaSemana );
                        DiaTrabalhoBo.AdicionarPeriodoDeTrabalho( "8:00", "12:00", diaAtual );
                        DiaTrabalhoBo.AdicionarPeriodoDeTrabalho( "13:00", "18:00", diaAtual );
                        semanaTrabalho.diasTrabalho.Add( diaAtual );
                        break;
                }
            }

            return semanaTrabalho.diasTrabalho;
        }
示例#13
0
        /// <summary>
        /// Método responsável por efetuar a seleção da hora de inicio da estimativa de uma tarefa para o colaborador
        /// </summary>
        /// <param name="contexto">sessão atual do banco</param>
        /// <param name="loginColaborador">login do colaborador atual</param>
        /// <returns>tarefaHistorico preenchida com</returns>
        public static InicializadorEstimativaDto SelecionarInicializadorEstimativaDto(string loginColaborador, DateTime dataSolicitacao, SemanaTrabalho semanaTrabalho)
        {
            WexDb contexto = ContextFactoryManager.CriarWexDb();

            TarefaHistoricoTrabalho ultimoHistoricoTrabalho = TarefaHistoricoTrabalhoDao.ConsultarUltimoEsforcoRealizadoColaborador(contexto, loginColaborador, dataSolicitacao);

            InicializadorEstimativaDto inicializadorEstimativaDto = new InicializadorEstimativaDto();

            DateTime dataSelecionada;

            if (!ValidarTarefaHistoricoTrabalho(ultimoHistoricoTrabalho))
            {
                dataSelecionada = dataSolicitacao.Date;
                SelecionarDataDiaUtilInicial(semanaTrabalho, ref dataSelecionada);
                return(PreencherInicializacaoDiaSelecionado(semanaTrabalho, dataSelecionada));
            }

            bool ultrapassouLimiteDia = ultimoHistoricoTrabalho.HoraFinal.Days > 0;

            dataSelecionada = new DateTime(ultimoHistoricoTrabalho.DtRealizado.Ticks);
            if (ultrapassouLimiteDia)
            {
                dataSelecionada = SelecionarDataProximoDiaUtil(semanaTrabalho, dataSelecionada);
                return(PreencherInicializacaoDiaSelecionado(semanaTrabalho, dataSelecionada));
            }

            SelecionarDataDiaUtilInicial(semanaTrabalho, ref dataSelecionada);
            if (dataSelecionada.Equals(dataSolicitacao.Date))
            {
                if (dataSelecionada.Equals(ultimoHistoricoTrabalho.DtRealizado))
                {
                    inicializadorEstimativaDto.DataEstimativa        = dataSelecionada;
                    inicializadorEstimativaDto.HoraInicialEstimativa = ultimoHistoricoTrabalho.HoraFinal;
                    inicializadorEstimativaDto.DiaAtual = TarefaHistoricoTrabalhoDao.ConsultarDiaAtualDeTrabalhoDto(dataSelecionada.DayOfWeek, semanaTrabalho);
                    return(inicializadorEstimativaDto);
                }
                return(PreencherInicializacaoDiaSelecionado(semanaTrabalho, dataSelecionada));
            }
            else
            {
                if (SemanaTrabalhoBo.DiaAtualPossuiPeriodoTrabalho(semanaTrabalho, dataSelecionada.DayOfWeek))
                {
                    DiaTrabalho dia   = SemanaTrabalhoDao.SelecionarDiaTrabalho(semanaTrabalho, dataSelecionada.DayOfWeek);
                    long        ticks = dia.PeriodosDeTrabalho.Max(o => ConversorTimeSpan.ConverterHorasDeStringParaTicks(o.HoraFinal));
                    TimeSpan    horaFinalExpediente = new TimeSpan(ticks);
                    if (ultimoHistoricoTrabalho.HoraFinal >= horaFinalExpediente)
                    {
                        dataSelecionada = SelecionarDataProximoDiaUtil(semanaTrabalho, dataSelecionada);
                        return(PreencherInicializacaoDiaSelecionado(semanaTrabalho, dataSelecionada));
                    }
                    if (dataSelecionada.Equals(ultimoHistoricoTrabalho.DtRealizado))
                    {
                        inicializadorEstimativaDto.DataEstimativa        = dataSelecionada;
                        inicializadorEstimativaDto.HoraInicialEstimativa = ultimoHistoricoTrabalho.HoraFinal;
                        inicializadorEstimativaDto.DiaAtual = TarefaHistoricoTrabalhoDao.ConsultarDiaAtualDeTrabalhoDto(dataSelecionada.DayOfWeek, semanaTrabalho);
                        return(inicializadorEstimativaDto);
                    }
                    return(PreencherInicializacaoDiaSelecionado(semanaTrabalho, dataSelecionada));
                }
                else
                {
                    inicializadorEstimativaDto.DataEstimativa        = dataSolicitacao.Date;
                    inicializadorEstimativaDto.HoraInicialEstimativa = new TimeSpan(8, 0, 0);
                    inicializadorEstimativaDto.DiaAtual = TarefaHistoricoTrabalhoDao.ConsultarDiaAtualDeTrabalhoDto(dataSolicitacao.DayOfWeek, semanaTrabalho);
                }
                return(inicializadorEstimativaDto);
            }
        }
示例#14
0
 public void registrarIntervalo(TipoIntervalo tipoIntervalo, DiaTrabalho ponto)
 {
     ponto.registrarIntervalo(tipoIntervalo, dataHoraStrategy);
     pontoRepository.save(ponto);
 }
示例#15
0
 public EditarPontoEventArgs(DiaTrabalho ponto) : base(ControlarPontoViewModel.EDITAR_PONTO)
 {
     this.DiaTrabalho = ponto;
 }
 public static PontoFuncionarioWindow criarPontoDoFuncionarioWindow(DiaTrabalho ponto, IUnitOfWork uow)
 {
     return(new PontoFuncionarioWindow(new PontoFuncionarioViewModel(ponto, SessaoLogin.getSessao(), RepositoryFactory.criarPontoRepository(uow), uow)));
 }
        /// <summary>
        /// responsável por adicionar um período de trabalho ao dia de trabalho
        /// </summary>
        /// <param name="inicial">hora inicial do período de trabalho</param>
        /// <param name="final">hora final do período de trabalho</param>
        public static void AdicionarPeriodoDeTrabalho(string inicial, string final, DiaTrabalho diaTrabalho)
        {
            PeriodoTrabalho periodo = new PeriodoTrabalho(inicial, final);

            diaTrabalho.periodosTrabalho.Add(periodo);
        }
示例#18
0
 public void requestEditarDia(DiaTrabalho diaTrabalho)
 {
     requestView(new EditarPontoEventArgs(diaTrabalho));
     exibir();
 }