private bool ValidarCronograma(CronogramaPactoViewModel model)
        {
            _cronogramaService.ValidarCronograma(model);
            setModelError(model.ValidationResult);

            return(model.ValidationResult.IsValid);
        }
Exemplo n.º 2
0
        public List <CronogramaViewModel> CalcularInclusaoSuspensao(CronogramaPactoViewModel cronogramaPactoReferencia, DateTime dataInicioSuspensao,
                                                                    string cpfSolicitante, UsuarioViewModel usuarioLogado, DateTime?dataFimSuspensao = null, TimeSpan?horasConsideradasNaDataSuspensao = null)
        {
            List <CronogramaViewModel> diasAjustados = cronogramaPactoReferencia.Cronogramas.TakeWhile(c => c.DataCronograma.Date < dataInicioSuspensao.Date).ToList();

            if (dataFimSuspensao.HasValue && dataFimSuspensao.Value > DateTime.MinValue)
            {
                var horasRestantes          = cronogramaPactoReferencia.HorasTotais - diasAjustados.Sum(c => c.HorasCronograma.TotalHours);
                var listaPactosConcorrentes = _pactoService.GetPactosConcorrentes(dataInicioSuspensao, DateTime.Now.AddDays(365),
                                                                                  cronogramaPactoReferencia.CPFUsuario,
                                                                                  cronogramaPactoReferencia.IdPacto);


                diasAjustados.AddRange(GerarCronogramas(dataInicio: dataInicioSuspensao,
                                                        cargaHorariaTotalPacto: TimeSpan.FromHours(horasRestantes),
                                                        cargaHorariaDiaria: cronogramaPactoReferencia.HorasDiarias,
                                                        cpfSolicitante: cpfSolicitante,
                                                        usuarioLogado: usuarioLogado,
                                                        dataInicioSuspensao: dataInicioSuspensao,
                                                        dataFimSuspensao: dataFimSuspensao,
                                                        listaPactosConcorrentes: listaPactosConcorrentes, quantidadeHorasDiasSuspensao: horasConsideradasNaDataSuspensao, idPacto: cronogramaPactoReferencia.IdPacto));
            }
            else
            {
                var diasSuspensos = cronogramaPactoReferencia.Cronogramas.Where(c => c.DataCronograma.Date >= dataInicioSuspensao.Date).ToList();
                diasSuspensos.ForEach(c => { c.Suspenso = true; c.HorasCronograma = c.DataCronograma.Date == dataInicioSuspensao.Date && horasConsideradasNaDataSuspensao.HasValue ? horasConsideradasNaDataSuspensao.Value : TimeSpan.Zero; });
                diasAjustados.AddRange(diasSuspensos);
            }

            return(diasAjustados);
        }
Exemplo n.º 3
0
        public List <CronogramaViewModel> CalcularDiminuicaoCargaHoraria(CronogramaPactoViewModel cronogramaPactoReferencia,
                                                                         double novaCargaHoraria,
                                                                         List <Pacto> listaPactosConcorrentes, string cpfSolicitante, UsuarioViewModel usuarioLogado,
                                                                         bool podeEditarDiasPassados = false)
        {
            List <CronogramaViewModel> lista = new List <CronogramaViewModel>();

            double totalHorasTemp = 0;
            double horasRestantes = 0;

            lista = cronogramaPactoReferencia.Cronogramas.TakeWhile(c => (totalHorasTemp += c.HorasCronograma.TotalHours) <= novaCargaHoraria).ToList();

            while (lista.Sum(c => c.HorasCronograma.TotalHours) < novaCargaHoraria &&
                   (!cronogramaPactoReferencia.DataInicioSuspensao.HasValue || cronogramaPactoReferencia.DataFimSuspensao.HasValue)) //testando se o cronograma nao esta suspenso.
            {
                horasRestantes = novaCargaHoraria - lista.Sum(c => c.HorasCronograma.TotalHours);

                var cronogramVM = CriarDiaCronograma(
                    dataCronograma: lista.Last().DataCronograma.AddDays(1),
                    cargaHorariaRestantePacto: TimeSpan.FromHours(horasRestantes),
                    cargaHorariaDiaria: cronogramaPactoReferencia.HorasDiarias,
                    dataInicioSuspensao: cronogramaPactoReferencia.DataInicioSuspensao,
                    dataFimSuspensao: cronogramaPactoReferencia.DataFimSuspensao,
                    pactosConcorrentes: listaPactosConcorrentes,
                    usuarioLogado: usuarioLogado, cpfSolicitante: cpfSolicitante);

                lista.Add(cronogramVM);
            }
            return(lista);
        }
Exemplo n.º 4
0
        public List <CronogramaViewModel> CalcularCronogramas(double horasTotais, TimeSpan horasDiarias,
                                                              DateTime dataInicial, string CPFUsuario, UsuarioViewModel usuarioLogado, int idPacto = 0,
                                                              DateTime?dataInicioSuspensao = null, DateTime?dataFimSuspensao = null,
                                                              CronogramaPactoViewModel cronogramaExistente = null, TimeSpan?quantidadeHorasDiasSuspensao = null)
        {
            List <CronogramaViewModel> cronogramas;

            var listaPactosConcorrentes = _pactoService.GetPactosConcorrentes(dataInicial, DateTime.Now.AddDays(365), CPFUsuario, idPacto);

            if (cronogramaExistente != null && cronogramaExistente.Cronogramas.Count > 0 &&
                cronogramaExistente.DataInicial.Date == dataInicial.Date &&
                horasDiarias == cronogramaExistente.HorasDiarias &&
                cronogramaExistente.QuantidadeHorasDiasSuspensao == quantidadeHorasDiasSuspensao &&
                cronogramaExistente.DataFimSuspensao.GetValueOrDefault().ToShortDateString() == dataFimSuspensao.GetValueOrDefault().ToShortDateString() &&
                cronogramaExistente.DataInicioSuspensao.GetValueOrDefault().ToShortDateString() == dataInicioSuspensao.GetValueOrDefault().ToShortDateString())

            {
                //Se cronograma existente e usuario tentando alterar carga horaria.
                if (horasTotais != cronogramaExistente.HorasTotais)
                {
                    //Se é preciso acrescentar carga horária
                    if (horasTotais > cronogramaExistente.HorasTotais)
                    {
                        cronogramas = CalcularAumentoCargaHoraria(cronogramaExistente, horasTotais, listaPactosConcorrentes: listaPactosConcorrentes, cpfSolicitante: CPFUsuario, usuarioLogado: usuarioLogado);
                    }
                    //Se é preciso retirar horas da carga anterior
                    else
                    {
                        cronogramas = CalcularDiminuicaoCargaHoraria(cronogramaExistente, horasTotais, listaPactosConcorrentes: listaPactosConcorrentes, cpfSolicitante: CPFUsuario, usuarioLogado: usuarioLogado);
                    }
                }
                else
                {
                    //Mantem o que está no tempdata sem recalcular
                    cronogramas = cronogramaExistente.Cronogramas;
                }
            }
            else
            {
                //Calcula do zero
                if (dataInicioSuspensao.HasValue)
                {
                    cronogramas = CalcularInclusaoSuspensao(cronogramaExistente, dataInicioSuspensao: dataInicioSuspensao.GetValueOrDefault(), dataFimSuspensao: dataFimSuspensao.GetValueOrDefault(), horasConsideradasNaDataSuspensao: quantidadeHorasDiasSuspensao, cpfSolicitante: CPFUsuario, usuarioLogado: usuarioLogado);
                }
                else
                {
                    cronogramas = GerarCronogramas(dataInicio: dataInicial,
                                                   cargaHorariaTotalPacto: TimeSpan.FromHours(horasTotais),
                                                   cargaHorariaDiaria: horasDiarias,
                                                   dataInicioSuspensao: dataInicioSuspensao,
                                                   dataFimSuspensao: dataFimSuspensao,
                                                   quantidadeHorasDiasSuspensao: quantidadeHorasDiasSuspensao,
                                                   listaPactosConcorrentes: listaPactosConcorrentes,
                                                   cpfSolicitante: CPFUsuario, usuarioLogado: usuarioLogado, idPacto: idPacto);
                }
            }

            return(cronogramas);
        }
        public PartialViewResult AdicionarDia(CronogramaPactoViewModel model)
        {
            AdicionarDiaCronograma(model);

            model.PodeRemoverDias = PodeRemoverDia(model);

            return(PartialView("_CronogramasPartial", model));
        }
        private static void RemoverDiaCronograma(CronogramaPactoViewModel model)
        {
            var listaCronogramas = model.Cronogramas;

            if (listaCronogramas.Count > 0)
            {
                listaCronogramas.RemoveAt(listaCronogramas.Count - 1);
            }
        }
Exemplo n.º 7
0
        public void ValidarCronograma(CronogramaPactoViewModel cronogramaPactoVM)
        {
            var cronogramaPacto = Mapper.Map <CronogramaPactoViewModel, CronogramaPacto>(cronogramaPactoVM);

            var pactosConcorrentes = _pactoService.GetPactosConcorrentes(cronogramaPacto.DataInicial, DateTime.Now.AddYears(1), cronogramaPacto.CPFUsuario, cronogramaPacto.IdPacto);

            _cronogramaService.ValidarCronograma(cronogramaPacto, pactosConcorrentes, cronogramaPactoVM.ValidarHorasADistribuir);
            cronogramaPactoVM.ValidationResult = cronogramaPacto.ValidationResult;
        }
        public PartialViewResult SalvarCronograma(CronogramaPactoViewModel model)
        {
            if (ValidarCronograma(model))
            {
                ModelState.Clear();
                _cronogramaService.LimparDiasZerados(model.Cronogramas);
                TempData[PactoController.GetNomeVariavelTempData("Cronogramas", model.IdPacto)] = model;
            }

            return(PartialView("_CronogramasPartial", model));
        }
        public JsonResult AtualizarCronograma(CronogramaPactoViewModel modelCronograma)
        {
            var pacto = _pactoService.BuscarPorId(modelCronograma.IdPacto);
            CronogramaPactoViewModel cronogramaExistente;

            if (modelCronograma.CalcularCronogramaAPartirBanco && pacto != null)
            {
                cronogramaExistente = new CronogramaPactoViewModel()
                {
                    DataInicial         = pacto.DataPrevistaInicio,
                    Cronogramas         = pacto.Cronogramas,
                    HorasTotais         = Convert.ToDouble(pacto.CargaHorariaTotal),
                    HorasDiarias        = pacto.CargaHorariaDiaria,
                    DataInicioSuspensao = pacto.SuspensoAPartirDe,
                    DataFimSuspensao    = DateTime.Today,
                    IdPacto             = pacto.IdPacto,
                    CPFUsuario          = pacto.CpfUsuario
                };
            }
            else
            {
                cronogramaExistente = (CronogramaPactoViewModel)TempData[PactoController.GetNomeVariavelTempData("Cronogramas", modelCronograma.IdPacto)];
            }

            if (pacto == null || pacto.IdSituacaoPacto != (int)eSituacaoPacto.Interrompido)
            {
                modelCronograma.Cronogramas = _cronogramaService.CalcularCronogramas(
                    modelCronograma.HorasTotais,
                    modelCronograma.HorasDiarias,
                    modelCronograma.DataInicial,
                    modelCronograma.CPFUsuario,
                    getUserLogado(),
                    modelCronograma.IdPacto,
                    modelCronograma.DataInicioSuspensao,
                    modelCronograma.DataFimSuspensao,
                    cronogramaExistente,
                    modelCronograma.QuantidadeHorasDiasSuspensao);
            }
            else
            {
                modelCronograma.Cronogramas = pacto.Cronogramas;
            }


            modelCronograma.PodeRemoverDias = PodeRemoverDia(modelCronograma);

            //Só de abrir, já tenho que salvar
            TempData[PactoController.GetNomeVariavelTempData("Cronogramas", modelCronograma.IdPacto)] = modelCronograma;

            return(Json(new { Mensagem = "Cronograma atualizado com sucesso", DataTermino = modelCronograma.Cronogramas.OrderBy(c => c.DataCronograma).LastOrDefault()?.DataString ?? "" }));
        }
        private void AdicionarDiaCronograma(CronogramaPactoViewModel model)
        {
            var listaCronogramas = model.Cronogramas;
            var ultimoDia        = listaCronogramas.LastOrDefault();

            var dataDiaCronograma = ultimoDia != null?ultimoDia.DataCronograma.AddDays(1) : model.DataInicial;

            var pactosConcorrentes = _pactoService.GetPactosConcorrentes(dataDiaCronograma, DateTime.Now.AddYears(1), model.CPFUsuario, model.IdPacto);

            var cronogramVM = _cronogramaService.CriarDiaCronograma(dataDiaCronograma,
                                                                    TimeSpan.Zero, TimeSpan.Zero, pactosConcorrentes, cpfSolicitante: model.CPFUsuario, usuarioLogado: getUserLogado());

            listaCronogramas.Add(cronogramVM);
        }
        private bool PodeRemoverDia(CronogramaPactoViewModel modelCronograma)
        {
            DateTime?dataReferenciaUltimoDia = modelCronograma.Cronogramas.LastOrDefault()?.DataCronograma;

            if (dataReferenciaUltimoDia.HasValue)
            {
                bool podeEditarDiasPassados = modelCronograma.IdPacto == 0 || modelCronograma.CPFUsuario == getUserLogado().CPF;
                var  pacto = _pactoService.ObterPorId(modelCronograma.IdPacto);

                return(podeEditarDiasPassados || !pacto.DataPrevistaTermino.HasValue || dataReferenciaUltimoDia.Value.Date > pacto.DataPrevistaTermino.Value.Date);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 12
0
        public List <CronogramaViewModel> CalcularAumentoCargaHoraria(CronogramaPactoViewModel cronogramaPactoReferencia,
                                                                      double novaCargaHoraria,
                                                                      List <Pacto> listaPactosConcorrentes, string cpfSolicitante, UsuarioViewModel usuarioLogado)
        {
            List <CronogramaViewModel> lista = new List <CronogramaViewModel>();

            //Descontando o ultimo dia pra preencher de novo com horas full.
            DateTime ultimoDiaPreenchido = cronogramaPactoReferencia.Cronogramas.LastOrDefault().DataCronograma;

            lista.AddRange(cronogramaPactoReferencia.Cronogramas.Take(cronogramaPactoReferencia.Cronogramas.Count - 1));

            double horasAAcrescentar = novaCargaHoraria - lista.Sum(c => c.HorasCronograma.TotalHours);

            lista.AddRange(GerarCronogramas(dataInicio: ultimoDiaPreenchido,
                                            cargaHorariaTotalPacto: TimeSpan.FromHours(horasAAcrescentar),
                                            cargaHorariaDiaria: cronogramaPactoReferencia.HorasDiarias,
                                            cpfSolicitante: cpfSolicitante, usuarioLogado: usuarioLogado,
                                            dataInicioSuspensao: cronogramaPactoReferencia.DataInicioSuspensao,
                                            dataFimSuspensao: cronogramaPactoReferencia.DataFimSuspensao,
                                            listaPactosConcorrentes: listaPactosConcorrentes, idPacto: cronogramaPactoReferencia.IdPacto));
            return(lista);
        }
 public PartialViewResult ExibirCronograma(CronogramaPactoViewModel modelCronograma)
 {
     AtualizarCronograma(modelCronograma);
     return(PartialView("_CronogramasPartial", modelCronograma));
 }
 public PartialViewResult FecharCronograma(CronogramaPactoViewModel model)
 {
     ModelState.Clear();
     return(PartialView("_CronogramasPartial", model));
 }
 public PartialViewResult AtualizarVisualizacao(CronogramaPactoViewModel model)
 {
     return(PartialView("_CronogramasPartial", model));
 }