private IIndicadorAutomaticoStrategy GetStrategy(int idIndicador)
        {
            IndicadorAutomatico automatico = IndicadorAutomaticoRepository.GetByIdIndicador(idIndicador).First();

            switch (automatico.CategoriaIndicadorAutomatico)
            {
            case Enums.Enum.CategoriaIndicadorAutomatico.CPI:
                return(IndicadorAutomaticoCPIStrategy);

            case Enums.Enum.CategoriaIndicadorAutomatico.CPI_Servicios:
                return(IndicadorAutomaticoCPIServiciosStrategy);

            case Enums.Enum.CategoriaIndicadorAutomatico.CPI_Llave_En_Mano:
                return(IndicadorAutomaticoCPILlaveManoStrategy);

            default:
                return(null);
            }
        }
示例#2
0
        public async Task <HeatMapViewModel> ObtenerHeatMapViewModel(BuscarIndicadorViewModel buscarIndicadorViewModel)
        {
            Persona persona = await PersonaRepository.GetByUserName(buscarIndicadorViewModel.PersonaLogueadaViewModel.NombreUsuario).FirstOrDefaultAsync();

            IList <IndicadorAutomaticoViewModel> todosIndicadoresAutomaticos = AutoMapper.Mapper.Map <IList <IndicadorAutomaticoViewModel> >(IndicadorAutomaticoRepository.Todos().ToList());

            IList <FilaHeatMapViewModel> filasHeatMapViewModel = AutoMapper.Mapper.Map <IList <FilaHeatMapViewModel> >(IndicadorRepository.Buscar(buscarIndicadorViewModel).ToList());

            CargarPermisosAIndicadores(filasHeatMapViewModel, persona);

            IList <MedicionViewModel> mediciones = await Todas(buscarIndicadorViewModel.AnioTablero);

            IList <CeldaHeatMapViewModel> celdasHeatMapViewModel = new List <CeldaHeatMapViewModel>();

            HeatMapViewModel heatMapViewModel = new HeatMapViewModel();

            heatMapViewModel.Meses = Enum.GetValues(typeof(Enums.Enum.Mes)).Cast <Enums.Enum.Mes>().Select(v => v.ToString()).ToList();
            heatMapViewModel.FilasHeatMapViewModel = filasHeatMapViewModel;

            DateTime fechaActual = DateTimeHelper.OntenerFechaActual();

            foreach (Enums.Enum.Mes mes in Enum.GetValues(typeof(Enums.Enum.Mes)).Cast <Enums.Enum.Mes>())
            {
                if ((int)mes <= fechaActual.Month || buscarIndicadorViewModel.AnioTablero < fechaActual.Year)
                {
                    IList <MedicionViewModel> medicionesPorMes = mediciones.Where(m => m.Mes == mes).OrderBy(m => m.IndicadorViewModel.Id).ToList();

                    int i = 0;

                    while (i < filasHeatMapViewModel.Count)
                    {
                        FilaHeatMapViewModel indicador = filasHeatMapViewModel[i];

                        if (
                            (indicador.FechaInicioValidez == null ||
                             (indicador.FechaInicioValidez != null &&
                              (
                                  (indicador.FechaInicioValidez.Value.Year < buscarIndicadorViewModel.AnioTablero) ||
                                  (
                                      indicador.FechaInicioValidez.Value.Year == buscarIndicadorViewModel.AnioTablero &&
                                      indicador.FechaInicioValidez.Value.Month <= (int)mes
                                  )
                              )
                             )
                            ) &&
                            (
                                indicador.FechaFinValidez == null ||
                                (indicador.FechaFinValidez != null &&
                                 (
                                     (indicador.FechaFinValidez.Value.Year > buscarIndicadorViewModel.AnioTablero) ||
                                     (
                                         indicador.FechaFinValidez.Value.Year == buscarIndicadorViewModel.AnioTablero &&
                                         indicador.FechaFinValidez.Value.Month >= (int)mes
                                     )
                                 )
                                )
                            )
                            )
                        {
                            CeldaHeatMapViewModel celdaHeatMapViewModel = new CeldaHeatMapViewModel();
                            celdaHeatMapViewModel.IndiceIndicador             = i + 1;
                            celdaHeatMapViewModel.Mes                         = (int)mes;
                            celdaHeatMapViewModel.IdIndicador                 = indicador.IdIndicador;
                            celdaHeatMapViewModel.GrupoIndicador              = indicador.Grupo;
                            celdaHeatMapViewModel.NombreMes                   = mes.ToString();
                            celdaHeatMapViewModel.NombreIndicador             = indicador.NombreIndicador;
                            celdaHeatMapViewModel.TieneAccesoLecturaEscritura = indicador.TieneAccesoLecturaEscritura;
                            celdaHeatMapViewModel.EsAutomatico                = todosIndicadoresAutomaticos.Any(ia => ia.IndicadorViewModel.Grupo == celdaHeatMapViewModel.GrupoIndicador);

                            if (medicionesPorMes.Any(m => m.IndicadorViewModel.Grupo == indicador.Grupo && m.Mes == mes))
                            {
                                MedicionViewModel medicionPorMes = medicionesPorMes.First(m => m.IndicadorViewModel.Grupo == indicador.Grupo && m.Mes == mes);
                                celdaHeatMapViewModel.IdMedicion = medicionPorMes.MedicionId;

                                if (!medicionPorMes.NoAplica)
                                {
                                    celdaHeatMapViewModel.Medicion        = medicionPorMes.Valor;
                                    celdaHeatMapViewModel.ColorMeta       = ObtenerColorCeldaHeatMap(medicionPorMes);
                                    celdaHeatMapViewModel.MedicionCargada = true;
                                }
                                else
                                {
                                    celdaHeatMapViewModel.NoAplica = true;
                                }
                            }

                            celdasHeatMapViewModel.Add(celdaHeatMapViewModel);
                        }
                        i++;
                    }
                }
            }
            heatMapViewModel.Celdas = celdasHeatMapViewModel;
            return(heatMapViewModel);
        }
 public IList <IndicadorAutomaticoViewModel> Todos()
 {
     return(AutoMapper.Mapper.Map <IList <IndicadorAutomaticoViewModel> >(IndicadorAutomaticoRepository.Todos().ToList()));
 }
示例#4
0
        public async Task <int> Guardar(IndicadorViewModel indicadorViewModel, PersonaViewModel personaGuarda)
        {
            bool modificado = false;

            int mesActual = DateTimeHelper.OntenerFechaActual().Month;

            int idIndicadorOriginal = 0;

            if (indicadorViewModel.Id > 0)
            {
                Indicador indicadorOriginal = IndicadorRepository.GetById(indicadorViewModel.Id).First();

                if (HayCambios(indicadorOriginal, indicadorViewModel) && await MedicionRepository.Buscar(new MedicionViewModel {
                    IndicadorID = indicadorViewModel.Id
                }).AnyAsync(m => (int)m.Mes != mesActual))
                {
                    idIndicadorOriginal   = indicadorViewModel.Id;
                    indicadorViewModel.Id = 0;
                    modificado            = true;
                }
            }

            // Borrar los responsables previos
            await ResponsableIndicadorRepository.EliminarPorIndicador(indicadorViewModel.Id);

            // Borrar los interesados previos
            await InteresadoIndicadorRepository.EliminarPorIndicador(indicadorViewModel.Id);

            // Borrar los permisos previos
            await AccesoIndicadorRepository.EliminarPorIndicador(indicadorViewModel.Id);

            Indicador indicador = AutoMapper.Mapper.Map <Indicador>(indicadorViewModel);

            if (modificado)
            {
                indicador.FechaCreacion = indicador.FechaCreacion.Value.AddMinutes(1);
            }

            indicador.MetaAceptableMetaID = await GuardarMeta(indicadorViewModel.MetaAceptableViewModel);

            indicador.MetaAMejorarMetaID = await GuardarMeta(indicadorViewModel.MetaAMejorarViewModel);

            indicador.MetaExcelenteMetaID = await GuardarMeta(indicadorViewModel.MetaExcelenteViewModel);

            indicador.MetaInaceptableMetaID = await GuardarMeta(indicadorViewModel.MetaInaceptableViewModel);

            indicador.MetaSatisfactoriaMetaID = await GuardarMeta(indicadorViewModel.MetaSatisfactoriaViewModel);

            // Guardar el indicador
            await IndicadorRepository.Guardar(indicador);

            if (indicador.Grupo == 0)
            {
                indicador.Grupo = indicador.IndicadorID;
                await IndicadorRepository.Guardar(indicador);
            }

            if (modificado)
            {
                IndicadorAutomatico indicadorAutomatico = await IndicadorAutomaticoRepository.GetByIdIndicador(idIndicadorOriginal).FirstOrDefaultAsync();

                if (indicadorAutomatico != null)
                {
                    indicadorAutomatico.Indicador   = null;
                    indicadorAutomatico.IndicadorID = indicador.IndicadorID;
                    await IndicadorAutomaticoRepository.Guardar(indicadorAutomatico);

                    IndicadorAutomaticoViewModel indicadorAutomaticoViewModel = AutoMapper.Mapper.Map <IndicadorAutomaticoViewModel>(indicadorAutomatico);

                    IndicadorAutomaticoRepository.DetenerJob(indicadorAutomaticoViewModel);
                    IndicadorAutomaticoRepository.IniciarJob(indicadorAutomaticoViewModel);
                }
            }

            // Guardar los responsables
            await GuardarResponsables(indicadorViewModel.Responsables, indicador.IndicadorID);

            // Guardar los interesados
            await GuardarInteresados(indicadorViewModel.Interesados, indicador.IndicadorID);

            if (modificado)
            {
                // Si hay mediciones cargadas para el indicador que se esta modificando, actualizar la referencia al nuevo indicador
                IList <Medicion> mediciones = MedicionRepository.Buscar(new MedicionViewModel {
                    IndicadorID = idIndicadorOriginal, Mes = (Enums.Enum.Mes)mesActual
                }).ToList();

                if (mediciones != null && mediciones.Count > 0)
                {
                    foreach (Medicion medicion in mediciones)
                    {
                        medicion.IndicadorID = indicador.IndicadorID;
                        await MedicionRepository.Guardar(medicion);
                    }
                }
            }

            await AuditarModificacionIndicador(personaGuarda);

            return(indicador.IndicadorID);
        }