示例#1
0
        public ActionResult EnviarEjecutor(string id)
        {
            try
            {
                SolicitudRepository sr      = new SolicitudRepository();
                string estadoInicial        = "Aprobado_x_RM";
                string accionSiguiente      = "RM.Enviar_Ejec";
                string nombreUsuario        = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).UserData;
                string codigoPase           = String.Empty;
                string responsableEjecucion = String.Empty;

                Usuario ux        = new UsuarioRepository().Obtener(nombreUsuario);
                int     ventanaId = int.Parse(Request.Form["cboVentana"]);

                AreaRepository ar    = new AreaRepository();
                List <Area>    areas = ar.Listar("");

                string[]           keys = Request.Form.AllKeys;
                int                solicitudId;
                AmbienteRepository ambienteRepository = new AmbienteRepository();

                List <Solicitud> solicitudes = new List <Solicitud>();
                List <Ambiente>  ambientes   = new List <Ambiente>();

                #region Validar si se están marcando solicitudes de regularización
                var listaReg = new List <string>();
                foreach (var key in keys)
                {
                    if (String.Compare(key.Substring(0, 3), "chk") == 0 && String.Compare(key, "chkTodos") != 0)
                    {
                        if (String.Compare(Request.Form[key], "on") == 0)
                        {
                            solicitudId = int.Parse(key.Substring(3));
                            var s = sr.Obtener(solicitudId);
                            if (s.Regularizacion)
                            {
                                listaReg.Add("S" + s.Id.ToString().PadLeft(6, '0'));
                            }
                        }
                    }
                }
                if (listaReg.Count() > 0)
                {
                    var sbMensaje = new StringBuilder();
                    sbMensaje.Append("<p>No se pueden enviar al ejecutor las siguientes solicitudes de regularizacion</p>");
                    sbMensaje.Append("<ul>");
                    foreach (var item in listaReg)
                    {
                        sbMensaje.Append("<li>" + item + "</li>");
                    }
                    sbMensaje.Append("</ul>");
                    var hv = new HomeView();
                    hv.Mensaje = sbMensaje.ToString();
                    return(View("Mensaje", hv));
                }
                #endregion

                #region Validar si existen areas asignadas a las solicitudes marcadas para enviar
                StringBuilder ambienteEnviar = new StringBuilder();
                StringBuilder validacion     = new StringBuilder();
                validacion.Append("<p>Las siguientes solicitudes no tienen asignados en sus formularios los ejecutores</p>");
                validacion.Append("<ul>");
                bool areasVacias = false;

                foreach (string key in keys)
                {
                    if (String.Compare(key.Substring(0, 3), "chk") == 0 && String.Compare(key, "chkTodos") != 0 && String.Compare(Request.Form[key], "on") == 0)
                    {
                        solicitudId = int.Parse(key.Substring(3));
                        Solicitud s = sr.Obtener(solicitudId);
                        s.Ambiente = ambienteRepository.Obtener(s.Ambiente.Id);
                        if (!ambientes.Exists(p => p.Id == s.Ambiente.Id))
                        {
                            ambientes.Add(s.Ambiente);
                            ambienteEnviar.Append(s.Ambiente.Nombre);
                            ambienteEnviar.Append(",");
                        }
                        if (!Util.Util.ExisteArea(s))
                        {
                            areasVacias = true;
                            validacion.Append("<li>S" + s.Id.ToString().PadLeft(6, '0') + "</li>");
                        }
                    }
                }
                validacion.Append("</ul>");
                if (areasVacias)
                {
                    HomeView hv = new HomeView();
                    hv.Mensaje = validacion.ToString();
                    return(View("Mensaje", hv));
                }
                #endregion
                string listaAmbientes = ambienteEnviar.ToString().Substring(0, ambienteEnviar.ToString().Length - 1);

                string        url = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
                StringBuilder sb  = new StringBuilder();
                sb.Append("<table border='1' style='border-collapse:collapse;width:100%;font-family:Arial;font-size:12px;'>");
                sb.Append("<thead>");
                sb.Append("<tr><th style='background-color:#002060;color:#ffffff;'>AMBIENTE</th><th style='background-color:#002060;color:#ffffff;'>SOLICITUD</th><th style='background-color:#002060;color:#ffffff;'>RESPONSABLE DE EJECUCION</th><th style='background-color:#002060;color:#ffffff;'>ANALISTA DESARROLLO</th><th style='background-color:#002060;color:#ffffff;'>PROYECTO</th><th style='background-color:#002060;color:#ffffff;'>FORMULARIO</th></tr>");
                sb.Append("</thead>");
                sb.Append("<tbody>");

                foreach (string key in keys)
                {
                    if (String.Compare(key.Substring(0, 3), "chk") == 0 && String.Compare(key, "chkTodos") != 0)
                    {
                        if (String.Compare(Request.Form[key], "on") == 0)
                        {
                            solicitudId = int.Parse(key.Substring(3));
                            Solicitud s = sr.Obtener(solicitudId);

                            solicitudes.Add(s);
                            List <SolicitudArchivo> solicitudesArchivo = Util.Util.ListarArchivos(s);
                            string solicitudRFC = (s.Ambiente.Final && !String.IsNullOrEmpty(s.RFC)) ? s.RFC : String.Concat("S", s.Id.ToString().PadLeft(6, '0'));
                            foreach (SolicitudArchivo sa in solicitudesArchivo)
                            {
                                if (sa.Area.Correos.Count() > 0)
                                {
                                    responsableEjecucion = sa.Area.Nombre;
                                }
                                else
                                {
                                    responsableEjecucion = s.AnalistaTestProd;
                                }


                                //sb.Append("<tr><td>" + s.Ambiente.Nombre + "</td><td>S" + s.Id.ToString().PadLeft(6, '0') + "</td><td>" + sa.SarID + "</td><td style='background-color:" + sa.Area.Color + ";'>" + responsableEjecucion + "</td><td>" + s.AnalistaDesarrollo + "</td><td>" + s.Proyecto.Codigo + "</td>");
                                sb.Append("<tr><td>" + s.Ambiente.Nombre + "</td><td>" + solicitudRFC + "</td><td style='background-color:" + sa.Area.Color + ";'>" + responsableEjecucion + "</td><td>" + s.AnalistaDesarrollo + "</td><td>" + s.Proyecto.Codigo + " - " + s.Proyecto.Nombre + "</td>");
                                sb.Append("<td>");
                                foreach (Archivo archivo in sa.Archivos)
                                {
                                    sb.Append("<a href='" + url + "/Home/ObtenerArchivo/S" + s.Id.ToString().PadLeft(6, '0') + "-" + archivo.Id.ToString() + "'>" + archivo.Nombre + "</a><br/>");
                                }
                                sb.Append("</td></tr>");
                            }
                            foreach (var otros in s.Aprobaciones)
                            {
                                if (otros.Area != null && otros.Area.Id != 0)
                                {
                                    sb.Append("<tr><td>" + s.Ambiente.Nombre + "</td><td>" + solicitudRFC + "</td><td style='background-color:" + otros.Area.Color + ";'>" + responsableEjecucion + "</td><td>" + s.AnalistaDesarrollo + "</td><td>" + s.Proyecto.Codigo + " - " + s.Proyecto.Nombre + "</td>");
                                    sb.Append("<td>");
                                    sb.Append("<a href='" + url + "/Solicitud/ObtenerAprobacion/" + otros.Id.ToString() + "'>" + otros.Nombre + "</a><br/>");
                                    sb.Append("</td></tr>");
                                }
                            }

                            string estado = sr.ObtenerEstado("RM", estadoInicial, accionSiguiente);

                            s.Estado = estado;
                            if (ventanaId == 0)
                            {
                                s.Ventana           = null;
                                s.EjecutarEmergente = false;
                            }
                            else if (ventanaId == -1)
                            {
                                s.Ventana           = null;
                                s.EjecutarEmergente = true;
                            }
                            else if (ventanaId > 0)
                            {
                                s.Ventana           = new VentanaRepository().Obtener(ventanaId);
                                s.EjecutarEmergente = false;
                            }
                            else
                            {
                                s.Ventana           = null;
                                s.EjecutarEmergente = false;
                            }

                            Log log = new Log();
                            log.Usuario    = ux;
                            log.Accion     = accionSiguiente;
                            log.Comentario = "Se envía a los ejecutores";
                            log.Estado     = s.Estado;
                            log.FechaHora  = DateTime.Now;
                            s.Logs.Add(log);

                            sr.ActualizarRMSolicitadoxSol(s);
                            s.Logs = s.Logs.OrderByDescending(p => p.FechaHora).ToList();
                            EstadoRepository er      = new EstadoRepository();
                            List <Estado>    estados = er.Listar();
                            Estado           estadoX = estados.FirstOrDefault(p => p.Nombre == s.Estado);
                            if (estadoX != null && estadoX.EnviarCorreo)
                            {
                                Util.Util.EnviarCorreo(url, s, "Solicitud S" + s.Id.ToString().PadLeft(6, '0') + (s.Emergente ? " EMERGENTE/Normal Urgente " : " ") + s.Estado);
                            }
                        }
                    }
                }

                sb.Append("</tbody>");
                sb.Append("</table>");

                string ventana = String.Empty;
                if (ventanaId == -1)
                {
                    ventana = "Emergente";
                }
                else if (ventanaId > 0)
                {
                    VentanaRepository vr        = new VentanaRepository();
                    Ventana           vv        = vr.Obtener(ventanaId);
                    string            horaHasta = String.Empty;
                    if (vv.Hasta.HasValue)
                    {
                        horaHasta = " - " + vv.Hasta.Value.ToString("HH:mm");
                    }
                    ventana = String.Concat("Normal a horas ", vv.Desde.ToString("HH:mm"), horaHasta);
                }
                else
                {
                    ventana = Util.Util.ObtenerDescripcionVentana(solicitudes);
                }
                StringBuilder sbPrevio     = new StringBuilder();
                var           mensajeEnvio = Request.Form["txtMensajeEnvio"];
                sbPrevio.Append(mensajeEnvio);
                //sbPrevio.Append("Estimados<br/><br/>");
                //sbPrevio.Append("Se envía la relación de pases a ejecutarse en la ventana: " + ventana + "<br/><br/>");
                var asunto = Request.Form["txtAsunto"];

                /*StringBuilder sb2 = new StringBuilder();
                 * sb2.Append("Pases a ejecutar");
                 * sb2.Append(" Ventana: " + ventana);
                 * sb2.Append(" - Ambiente: " + listaAmbientes.ToUpper());
                 */
                Util.Util.EnviarCorreo(solicitudes.ToArray(), asunto, sbPrevio.ToString() + sb.ToString(), true, true, true, true, true, true, true, true);

                return(View("Mensaje", new HomeView {
                    Mensaje = "Se envió el correo a los ejecutores"
                }));
            }
            catch (Exception ex)
            {
                return(View("Mensaje", new HomeView {
                    Mensaje = ex.Message
                }));
            }
        }