/// <summary> /// Retornar uma semana de trabalho Padrao /// </summary> /// <returns></returns> public static SemanaTrabalho SemanaTrabalhoPadraoFactory() { SemanaTrabalho semanaTrabalho = new SemanaTrabalho(); SemanaTrabalhoBo.GerarSemanaTrabalhoPadrao( semanaTrabalho ); return semanaTrabalho; }
/// <summary> /// Criar Dto da classe /// </summary> /// <returns></returns> public static SemanaTrabalhoDto DtoFactory( SemanaTrabalho semanaTrabalho ) { //TODO: Refatorar quando Classe passar a ser persistente semanaTrabalho = SemanaTrabalhoBo.SemanaTrabalhoPadraoFactory(); List<DiaTrabalhoDto> diasTrabalho = new List<DiaTrabalhoDto>( semanaTrabalho.diasTrabalho.Select( o => DiaTrabalhoBo.DtoFactory( o ) ) ); return new SemanaTrabalhoDto() { diasTrabalho = diasTrabalho }; }
/// <summary> /// Método para valiar uma semana de trabalho /// </summary> /// <param name="semanaTrabalho"></param> /// <returns></returns> public static bool ValidarSemanaTrabalho(SemanaTrabalho semanaTrabalho) { if (semanaTrabalho == null || semanaTrabalho.diasTrabalho == null || semanaTrabalho.diasTrabalho.Count == 0) { return(false); } return(true); }
/// <summary> /// Retornar um dia de trabalho a partir do dia da semana /// </summary> /// <param name="diaSemana"></param> /// <returns></returns> public static DiaTrabalho SelecionarDiaTrabalho(SemanaTrabalho semanaTrabalho, DayOfWeek diaSemana) { if (semanaTrabalho.diasTrabalho == null) { return(null); } return(semanaTrabalho.diasTrabalho.FirstOrDefault(o => o.DiaDaSemana.Equals(diaSemana))); }
public void DeveRetornarUmaDiariaDeOitoAsDezoitoQuandoODiaAtualNaoPossuirPeriodosDeTrabalhoCadastrados() { SemanaTrabalho semana = SemanaTrabalhoBo.SemanaTrabalhoPadraoFactory(); DiaTrabalhoDto diaDto = TarefaHistoricoTrabalhoDao.ConsultarDiaAtualDeTrabalhoDto(DayOfWeek.Saturday, semana); Assert.AreEqual(1, diaDto.PeriodosTrabalho.Count, "So deveria conter 1 periodo de 8:00 as 18:00"); Assert.AreEqual("8:00", diaDto.PeriodosTrabalho[0].HoraInicial, "O horario inicial deveria ser as 8:00"); Assert.AreEqual("18:00", diaDto.PeriodosTrabalho[0].HoraFinal, "O horario inicial deveria ser as 8:00"); }
/// <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 ); }
/// <summary> /// Método que seleciona o proximo dia util do colaborador /// </summary> /// <param name="semanaTrabalho"></param> /// <param name="dataSelecionada"></param> private static void SelecionarDataDiaUtilInicial(SemanaTrabalho semanaTrabalho, ref DateTime dataSelecionada) { if (!ValidarSemanaTrabalho(semanaTrabalho)) { return; } if (!SemanaTrabalhoBo.DiaAtualPossuiPeriodoTrabalho(semanaTrabalho, dataSelecionada.DayOfWeek)) { dataSelecionada = SelecionarDataProximoDiaUtil(semanaTrabalho, dataSelecionada); } }
/// <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; }
/// <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; }
/// <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; }
/// <summary> /// Método que busca o proximo dia util do colaborador baseado na semana de trabalho cadastrada /// </summary> /// <param name="semanaTrabalho">semana de trabalho</param> /// <param name="dataSelecionada">data selecionada</param> public static DateTime SelecionarDataProximoDiaUtil(SemanaTrabalho semanaTrabalho, DateTime dataSelecionada) { if (!ValidarSemanaTrabalho(semanaTrabalho)) { return(dataSelecionada); } DateTime dataSelecionadaOriginal = new DateTime(dataSelecionada.Ticks); dataSelecionada = dataSelecionada.AddDays(1); DayOfWeek diaSemana = dataSelecionada.DayOfWeek; while (!SemanaTrabalhoBo.DiaAtualPossuiPeriodoTrabalho(semanaTrabalho, diaSemana)) { dataSelecionada = dataSelecionada.AddDays(1); diaSemana = dataSelecionada.DayOfWeek; if (dataSelecionadaOriginal.DayOfWeek.Equals(diaSemana)) { dataSelecionada = dataSelecionadaOriginal; break; } } return(dataSelecionada); }
/// <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 = SemanaTrabalhoBo.SemanaTrabalhoPadraoFactory(); return(SelecionarInicializadorEstimativaDto(loginColaborador, dataSolicitacao, semanaTrabalho)); }
/// <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 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); } }
/// <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> SelecionarSemanaTrabalhoPadrao(SemanaTrabalho semanaTrabalho) { return(semanaTrabalho.diasTrabalho); }
/// <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)); }