public ParoModel BuscarParo(string nombre)
        {
            ParoModel paroModelo = null;

            Paro paro = db.Paro.Where(c => c.descripcion.Contains(nombre)).FirstOrDefault();

            if (paro != null)
            {
                paroModelo = new ParoModel()
                {
                    Indice = paro.id_paro,
                    Nombre = paro.descripcion
                };
            }

            return(paroModelo);
        }
        public ParoModel BuscarParo(long indice)
        {
            ParoModel paroModelo = null;

            Paro paro = db.Paro.Where(c => c.id_paro == indice).FirstOrDefault();

            if (paro != null)
            {
                paroModelo = new ParoModel()
                {
                    Indice = paro.id_paro,
                    Nombre = paro.descripcion
                };
            }

            return(paroModelo);
        }
        public ActionResult CrearIndicador(IndicadorModel modelo)
        {
            string Mensaje         = string.Empty;
            bool   Estado          = false;
            long   IndiceIndicador = 0;
            long   IndiceUsuario   = 1;

            // Crea el indicador
            try
            {
                IndiceIndicador = indicadorBusiness.CrearIndicador(modelo);

                Estado = true;
            }
            catch (Exception e)
            {
                Mensaje = e.Message;
            }

            // Agrega los rechazos del indicador
            try
            {
                if (Estado)
                {
                    if (modelo.ListaRechazos != null && modelo.ListaRechazos.Count > 0)
                    {
                        foreach (var rechazoItem in modelo.ListaRechazos)
                        {
                            rechazoBusiness.AgregarRechazo(IndiceIndicador, rechazoItem.Indice, rechazoItem.Cantidad);
                        }
                    }

                    Estado = true;
                }
            }
            catch (Exception e)
            {
                Mensaje = e.Message;
            }

            // Agrega los paros del indicador
            try
            {
                if (Estado)
                {
                    if (modelo.ListaParos != null && modelo.ListaParos.Count > 0)
                    {
                        foreach (var paroItem in modelo.ListaParos)
                        {
                            long   IndiceParo = paroItem.Indice;
                            string NombreParo = paroItem.Nombre;
                            int    Cantidad   = paroItem.Cantidad;
                            string Folio      = paroItem.Folio;

                            if (NombreParo.Equals("Sin causa asignada", StringComparison.InvariantCultureIgnoreCase))
                            {
                                ParoModel paroModelo = paroBusiness.BuscarParo(NombreParo);

                                if (paroModelo != null)
                                {
                                    IndiceParo = paroModelo.Indice;
                                }
                                else
                                {
                                    IndiceParo = paroBusiness.CrearParo(modelo.IndiceProceso, NombreParo, 1, null);
                                    if (IndiceParo <= 0)
                                    {
                                        continue;
                                    }
                                }
                            }

                            paroBusiness.AgregarParo(IndiceIndicador, IndiceParo, Cantidad, Folio);
                        }
                    }

                    Estado = true;
                }
            }
            catch (Exception e)
            {
                Mensaje = e.Message;
            }

            // Actualizar el indicador de tiempo del proceso
            try
            {
                if (Estado)
                {
                    indicadorBusiness.ActualizarIndicadorTiempo(modelo.IndiceProceso, modelo.Fecha, modelo.Ciclo);

                    Estado = true;
                }
            }
            catch (Exception e)
            {
                Mensaje = e.Message;
            }

            // Agrega entrada a la bitácora de movimientos del indicador
            try
            {
                if (Estado)
                {
                    indicadorBusiness.AgregarEntradaMovimientoIndicador(IndiceUsuario, IndiceIndicador, 1);

                    Estado = true;
                }
            }
            catch (Exception e)
            {
                Mensaje = e.Message;
            }

            object data = new { Estado, Mensaje, IndiceIndicador };

            return(Json(data, JsonRequestBehavior.AllowGet));
        }