/// <summary>
 /// Inserta un Asunto
 /// </summary>
 internal int Insert(Models.Asunto oAsunto)
 {
     try
     {
         SqlParameter[] dbparams = new SqlParameter[20] {
             Param(enumDBFields.t305_idproyectosubnodo, oAsunto.t305_idproyectosubnodo),
             Param(enumDBFields.T382_alerta, oAsunto.T382_alerta),
             Param(enumDBFields.T382_desasunto, oAsunto.T382_desasunto),
             Param(enumDBFields.T382_desasuntolong, oAsunto.T382_desasuntolong),
             Param(enumDBFields.T382_dpto, oAsunto.T382_dpto),
             Param(enumDBFields.T382_estado, byte.Parse(oAsunto.T382_estado)),
             Param(enumDBFields.T382_etp, oAsunto.T382_etp),
             Param(enumDBFields.T382_etr, oAsunto.T382_etr),
             Param(enumDBFields.T382_ffin, oAsunto.T382_ffin),
             Param(enumDBFields.T382_flimite, oAsunto.T382_flimite),
             Param(enumDBFields.T382_fnotificacion, oAsunto.T382_fnotificacion),
             Param(enumDBFields.T382_notificador, oAsunto.T382_notificador),
             Param(enumDBFields.T382_obs, oAsunto.T382_obs),
             Param(enumDBFields.T382_prioridad, byte.Parse(oAsunto.T382_prioridad)),
             Param(enumDBFields.T382_refexterna, oAsunto.T382_refexterna),
             Param(enumDBFields.T382_registrador, oAsunto.T382_registrador),
             Param(enumDBFields.T382_responsable, oAsunto.T382_responsable),
             Param(enumDBFields.T382_severidad, byte.Parse(oAsunto.T382_severidad)),
             Param(enumDBFields.T382_sistema, oAsunto.T382_sistema),
             Param(enumDBFields.T384_idtipo, oAsunto.T384_idtipo),
         };
         //return (int)cDblib.Execute("SUP_ASUNTO_I", dbparams);
         return((int)cDblib.ExecuteScalar("SUP_ASUNTO_I", dbparams));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        public int grabar(Models.Asunto DatosGenerales, List <Models.AsuntoRecursos> Integrantes)
        {
            int  idReferencia;
            bool bConTransaccion = false;
            Guid methodOwnerID   = new Guid("5590F1B4-7073-4B5F-A4DB-9F301648D151");

            OpenDbConn();
            if (cDblib.Transaction.ownerID.Equals(new Guid()))
            {
                bConTransaccion = true;
            }
            if (bConTransaccion)
            {
                cDblib.beginTransaction(methodOwnerID);
            }
            try
            {
                DAL.Asunto         oAsunto          = new DAL.Asunto(cDblib);
                DAL.AsuntoEstado   oAsuntoEstadoDAL = new DAL.AsuntoEstado(cDblib);
                DAL.AsuntoRecursos oRecursoDAL      = new DAL.AsuntoRecursos(cDblib);

                Models.AsuntoEstado oAsuntoEstado = new Models.AsuntoEstado();

                oAsuntoEstado.T385_codestado = byte.Parse(DatosGenerales.T382_estado);
                oAsuntoEstado.T385_idautor   = (int)HttpContext.Current.Session["NUM_EMPLEADO_ENTRADA"];

                if (DatosGenerales.T382_idasunto == -1)
                {
                    idReferencia = oAsunto.Insert(DatosGenerales);

                    oAsuntoEstado.T382_idasunto = idReferencia;
                    oAsuntoEstadoDAL.Insert(oAsuntoEstado);
                }
                else
                {
                    oAsunto.Update(DatosGenerales);
                    idReferencia = DatosGenerales.T382_idasunto;

                    if (DatosGenerales.T382_estado_anterior != DatosGenerales.T382_estado)
                    {
                        oAsuntoEstado.T382_idasunto = idReferencia;
                        oAsuntoEstadoDAL.Insert(oAsuntoEstado);
                    }
                }

                foreach (Models.AsuntoRecursos oRecurso in Integrantes)
                {
                    switch (oRecurso.accionBD)
                    {
                    case "I":
                        //Inserción
                        oRecurso.T382_idasunto = idReferencia;
                        oRecursoDAL.Insert(oRecurso);
                        break;

                    case "D":
                        //delete
                        oRecursoDAL.Delete(oRecurso);
                        break;

                    case "U":
                        //update
                        oRecursoDAL.Update(oRecurso);
                        break;
                    }
                }

                if (bConTransaccion)
                {
                    cDblib.commitTransaction(methodOwnerID);
                }

                return(idReferencia);
            }
            catch (Exception ex)
            {
                //rollback
                if (cDblib.Transaction.ownerID.Equals(new Guid()))
                {
                    cDblib.rollbackTransaction(methodOwnerID);
                }
                throw new Exception(ex.Message);
            }
            finally
            {
                //nota.Dispose();
            }
        }
        /// <summary>
        /// Obtiene un Asunto a partir del id
        /// </summary>
        internal Models.Asunto Select(int t382_idasunto)
        {
            Models.Asunto oAsuntoPE = null;
            IDataReader   dr        = null;

            try
            {
                SqlParameter[] dbparams = new SqlParameter[1] {
                    Param(enumDBFields.T382_idasunto, t382_idasunto)
                };

                dr = cDblib.DataReader("SUP_ASUNTO_S", dbparams);
                if (dr.Read())
                {
                    oAsuntoPE                        = new Models.Asunto();
                    oAsuntoPE.t303_idnodo            = Convert.ToInt32(dr["t303_idnodo"]);
                    oAsuntoPE.t301_idproyecto        = Convert.ToInt32(dr["t301_idproyecto"]);
                    oAsuntoPE.t305_idproyectosubnodo = Convert.ToInt32(dr["t305_idproyectosubnodo"]);
                    oAsuntoPE.T382_alerta            = Convert.ToString(dr["T382_alerta"]);
                    oAsuntoPE.T382_desasunto         = Convert.ToString(dr["T382_desasunto"]);
                    oAsuntoPE.T382_desasuntolong     = Convert.ToString(dr["T382_desasuntolong"]);
                    oAsuntoPE.T382_dpto              = Convert.ToString(dr["T382_dpto"]);
                    oAsuntoPE.T382_estado            = Convert.ToString(dr["T382_estado"]);
                    oAsuntoPE.T382_etp               = Convert.ToDouble(dr["T382_etp"]);
                    oAsuntoPE.T382_etr               = Convert.ToDouble(dr["T382_etr"]);
                    oAsuntoPE.T382_fcreacion         = Convert.ToDateTime(dr["T382_fcreacion"]);
                    if (!Convert.IsDBNull(dr["T382_ffin"]))
                    {
                        oAsuntoPE.T382_ffin = Convert.ToDateTime(dr["T382_ffin"]);
                    }
                    if (!Convert.IsDBNull(dr["T382_flimite"]))
                    {
                        oAsuntoPE.T382_flimite = Convert.ToDateTime(dr["T382_flimite"]);
                    }
                    oAsuntoPE.T382_fnotificacion = Convert.ToDateTime(dr["T382_fnotificacion"]);
                    oAsuntoPE.T382_idasunto      = Convert.ToInt32(dr["T382_idasunto"]);
                    oAsuntoPE.T382_notificador   = Convert.ToString(dr["T382_notificador"]);
                    oAsuntoPE.T382_obs           = Convert.ToString(dr["T382_obs"]);
                    oAsuntoPE.T382_prioridad     = Convert.ToString(dr["T382_prioridad"]);
                    oAsuntoPE.T382_refexterna    = Convert.ToString(dr["T382_refexterna"]);
                    oAsuntoPE.T382_registrador   = Convert.ToInt32(dr["T382_registrador"]);
                    oAsuntoPE.T382_responsable   = Convert.ToInt32(dr["T382_responsable"]);
                    oAsuntoPE.T382_severidad     = Convert.ToString(dr["T382_severidad"]);
                    oAsuntoPE.T382_sistema       = Convert.ToString(dr["T382_sistema"]);
                    oAsuntoPE.T384_idtipo        = Convert.ToInt32(dr["T384_idtipo"]);
                    if (!Convert.IsDBNull(dr["Tipo"]))
                    {
                        oAsuntoPE.T384_destipo = Convert.ToString(dr["Tipo"]);
                    }
                    oAsuntoPE.Registrador = Convert.ToString(dr["Registrador"]);
                    oAsuntoPE.Responsable = Convert.ToString(dr["Responsable"]);
                }
                return(oAsuntoPE);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (dr != null)
                {
                    if (!dr.IsClosed)
                    {
                        dr.Close();
                    }
                    dr.Dispose();
                }
            }
        }
        public void EnviarCorreo(Models.Asunto DatosGenerales, List <Models.AsuntoRecursos> Integrantes, bool bAlta)
        {
            string        sTexto = "", sTO = "", sToAux = "", sAux, sIdResponsable, slMails;
            string        sAsunto     = "";
            ArrayList     aListCorreo = new ArrayList();
            StringBuilder sb          = new StringBuilder();

            sIdResponsable = DatosGenerales.T382_responsable.ToString();
            slMails        = DatosGenerales.T382_alerta.ToString();

            if (slMails == "" && sIdResponsable == "")
            {
                return;
            }
            sAsunto = "Alerta de asunto en Bitácora de proyecto económico.";
            if (bAlta)
            {
                sb.Append("<BR>SUPER le informa de la generación del siguiente asunto:<BR><BR>");
            }
            else
            {
                sb.Append("<BR>SUPER le informa de la modificación del siguiente asunto:<BR><BR>");
            }

            sb.Append("<label style='width:120px'>Proyecto económico: </label>" + DatosGenerales.t301_idproyecto.ToString() + @" - " + DatosGenerales.DesPE + "<br>");
            sb.Append("<label style='width:120px'>Asunto: </label><b>" + DatosGenerales.T382_idasunto.ToString() + @" - " + DatosGenerales.T382_desasunto + "</b><br><br>");
            sb.Append("<b>Información del asunto:</b><br>");

            sb.Append("<label style='width:120px'>Responsable: </label>" + DatosGenerales.Responsable + "<br>");
            if (DatosGenerales.T382_flimite == null)
            {
                sAux = "";
            }
            else
            {
                sAux = DatosGenerales.T382_flimite.ToString().Substring(0, 10);
            }

            sb.Append("<label style='width:120px'>F/Límite: </label>" + sAux + "<br>");

            if (DatosGenerales.T382_ffin == null)
            {
                sAux = "";
            }
            else
            {
                sAux = DatosGenerales.T382_ffin.ToString().Substring(0, 10);
            }

            sb.Append("<label style='width:120px'>F/Fin: </label>" + sAux + "<br>");
            sb.Append("<label style='width:120px'>Ref. Externa: </label>" + DatosGenerales.T382_refexterna.ToString() + "<br>");
            sb.Append("<label style='width:120px'>Esfuerzo planificado: </label>" + double.Parse(DatosGenerales.T382_etp.ToString()).ToString("N") + "<br>");
            sb.Append("<label style='width:120px'>Esfuerzo real: </label>" + double.Parse(DatosGenerales.T382_etr.ToString()).ToString("N") + "<br>");
            sb.Append("<label style='width:120px'>Severidad: </label>" + DatosGenerales.DesSeveridad + "<br>");
            sb.Append("<label style='width:120px'>Prioridad: </label>" + DatosGenerales.DesPrioridad + "<br>");
            sb.Append("<label style='width:120px'>Tipo: </label>" + DatosGenerales.T384_destipo + "<br>");
            sb.Append("<label style='width:120px'>Estado: </label>" + DatosGenerales.DesEstado + "<br>");
            sb.Append("<label style='width:120px'>Sistema afectado: </label>" + DatosGenerales.T382_sistema + "<br><br>");
            //descripcion larga
            sb.Append("<b><label style='width:120px'>Descripción: </label></b>" + DatosGenerales.T382_desasuntolong + "<br><br>");
            //observaciones
            sb.Append("<b><label style='width:120px'>Observaciones: </label></b>" + DatosGenerales.T382_obs + "<br><br>");
            //Departamento
            sb.Append("<b><label style='width:120px'>Departamento: </label></b>" + DatosGenerales.T382_dpto + "<br><br>");

            //Obtengo la lista de e-mail a los que alertar
            if (!slMails.Contains(";"))
            {
                slMails += ";";
            }
            string[] aMails = Regex.Split(slMails, ";");
            //Genero una tabla con la lista de e-mails a notificar
            sb.Append("<b><label style='width:400px'>Relación de e-mails a notificar: </label></b> <br>");
            sb.Append("<table width='400px' style='padding:10px;'>");
            sb.Append("<colgroup><col style='width:400px;' /></colgroup>");
            sb.Append("<tbody>");
            for (int i = 0; i < aMails.Length; i++)
            {
                sToAux = aMails[i].Trim();
                if (sToAux != "")
                {
                    sb.Append("<tr><td style='padding-left:5px;font-size:11px;'>");
                    sTO  = sToAux;
                    sAux = sTO.Substring(0, 2);
                    if (sAux == "\r\n")
                    {
                        sTO = sTO.Substring(2);
                    }
                    sb.Append(sTO);
                    sb.Append("</td></tr>");
                }
            }
            sb.Append("</tbody>");
            sb.Append("</table><br>");
            //Genero una tabla con la lista de profesionales a notificar
            sb.Append("<b><label style='width:400px'>Relación de profesionales asignados: </label> </b><br>");
            sb.Append("<table width='400px' style='padding:10px;'>");
            sb.Append("<colgroup><col style='width:400px;' /></colgroup>");
            sb.Append("<tbody>");

            foreach (Models.AsuntoRecursos oRecurso in Integrantes)
            {
                if (oRecurso.accionBD != "D")
                {
                    sb.Append("<tr><td style='padding-left:5px;font-size:11px;'>");
                    sb.Append(oRecurso.nomRecurso);
                    sb.Append("</td></tr>");
                }
            }

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

            sTexto = sb.ToString();

            //Envío e-mail al responsable del asunto
            if (sIdResponsable != "")
            {
                BLL.Recursos    oRecursos     = new BLL.Recursos();
                Models.Recursos oRecursoModel = new Models.Recursos();
                try
                {
                    oRecursoModel = oRecursos.establecerUsuarioIAP("", int.Parse(sIdResponsable));
                }
                catch (Exception ex)
                {
                    throw new Exception(System.Uri.EscapeDataString("Error al obtener el código de red" + ex.Message));
                }
                finally
                {
                    oRecursos.Dispose();
                }
                sTO = oRecursoModel.t001_codred;
                string[] aMail = { sAsunto, sTexto, sTO };
                aListCorreo.Add(aMail);
            }
            //Obtengo la lista de e-mail a los que alertar y envío un correo a cada uno
            for (int i = 0; i < aMails.Length; i++)
            {
                if (aMails[i] != "")
                {
                    sTO = aMails[i];
                    //sTO.Replace((char)10, (char)160);
                    //sTO.Replace((char)13, (char)160);
                    sAux = sTO.Substring(0, 2);
                    if (sAux == "\r\n")
                    {
                        sTO = sTO.Substring(2);
                    }
                    sTO.Trim();
                    string[] aMail = { sAsunto, sTexto, sTO };
                    aListCorreo.Add(aMail);
                }
            }
            //Obtengo la lista de profesionales a los que notificar y envío un correo a cada uno

            foreach (Models.AsuntoRecursos oRecurso in Integrantes)
            {
                if (oRecurso.T388_notificar)
                {
                    string[] aMail = { sAsunto, sTexto, oRecurso.mail };
                    aListCorreo.Add(aMail);
                }
            }

            Correo.EnviarCorreos(aListCorreo);
        }