private static Estado GetFromDataReader(SqlDataReader reader)
 {
     try
     {
         var i = new Estado();
         i.Id = i.Id32 = Convert.ToInt32(reader["id"]);//num solicitud
         i.Nombre = reader["nombre"].ToString();
         i.Activo = Convert.ToBoolean(reader["activo"]);
         return i;
     }
     catch (Exception ex)
     {
         Log.EscribirLog(ex.Message);
         //throw;
         return null;
     }
 }
        private void btnGuardarComentario_Click(object sender, EventArgs e)
        {
            var exito = true;
            Estado Estado = new Estado();

            //Valida Datos Obligatorios
            if (this.cboEstado.SelectedItem == null || this.cboEstado.SelectedIndex < 0) {
                ctrldxError.SetError(this.cboEstado, "Debe Seleccionar un Tipo de Comentario",
                                     ErrorType.Critical);
                return;
            } else {
                ctrldxError.SetError(cboEstado, "", ErrorType.None);
            }
            if (txtComentario.Text == "") {
                ctrldxError.SetError(txtComentario, "Debe Ingresar un Comentario", ErrorType.Critical);
                return;
            } else {
                ctrldxError.SetError(this.txtComentario, "", ErrorType.None);
            }

            Cursor.Current = Cursors.WaitCursor;
            if (!ctrldxError.HasErrors) {
                ResultadoTransaccion resultado = new ResultadoTransaccion();

                var comentario = new Comentario {
                    EsHistorial = false,
                    Observacion = txtComentario.Text,
                    Usuario = Base.Usuario.UsuarioConectado.Usuario
                };
                var cotizacion = GetSelectedRow(gridViewSLeads);
                resultado = ClsComentario.GuardarMensaje(cotizacion, comentario);

                var comentarios = gridComentarios.DataSource as List<Comentario>;

                /*emailInformeFijo = System.Configuration.ConfigurationSettings.AppSettings.Get("EmailInformeFijo");
                emailInformeFcl = System.Configuration.ConfigurationSettings.AppSettings.Get("EmailInformeFCL");
                */
                var mailFijo = System.Configuration.ConfigurationSettings.AppSettings.Get("EmailInformeFijo");

                var xmldoc = new XmlDocument();
                xmldoc.Load(Path.Combine(Application.StartupPath, @"Cotizaciones\CotizacionSetting.xml"));
                var mailFCL = xmldoc.SelectSingleNode("/setting/cotizacionDirecta/notificaciones/FCL").InnerText;

                mailFijo = mailFijo + ";" + mailFCL;
                var listMail = new List<String>();
                foreach (var mail in mailFijo.Split(';')) {
                    if (!listMail.Contains(mail))
                        listMail.Add(mail);
                }
                foreach (var c in comentarios) {
                    if (!listMail.Contains(c.Usuario.Email))
                        listMail.Add(c.Usuario.Email);
                }
                var cot =
                    ClsCotizacionDirecta.ObtieneCotizacionDirecta(cotizacion.Id32).ObjetoTransaccion as
                    CotizacionDirecta;

                if (!listMail.Contains(cot.Usuario.Email))
                    listMail.Add(cot.Usuario.Email);

                var subjectComenterio =
                    xmldoc.SelectSingleNode("/setting/cotizacionDirecta/comentarios/subject").InnerText;
                var bodyComentario = xmldoc.SelectSingleNode("/setting/cotizacionDirecta/comentarios/body").InnerText;

                var subjectCambioEstado =
                    xmldoc.SelectSingleNode("/setting/cotizacionDirecta/cambiosDeEstado/subject").InnerText;
                var bodyCambioEstado =
                    xmldoc.SelectSingleNode("/setting/cotizacionDirecta/cambiosDeEstado/body").InnerText;
                var body = String.Empty;
                var subject = String.Empty;

                if (cboEstado.SelectedIndex != 0) {
                    body = bodyCambioEstado;
                    subject = subjectCambioEstado;
                } else {
                    body = bodyComentario;
                    subject = subjectComenterio;
                }

                subject = subject.Replace("[numero]", cotizacion.Numero + " - " + cotizacion.Cliente);
                body = body.Replace("[usuario]", comentario.Usuario.NombreCompleto);
                body = body.Replace("[estado]", ((Estado)cboEstado.SelectedItem).Nombre);
                body = body.Replace("[comentario]", comentario.Observacion);

                var destinatarios = String.Join(";", listMail.ToArray());
                new EnvioMailObject().EnviarEmail(destinatarios, subject, body);

                if (cboEstado.SelectedIndex != 0) {
                    Estado = (Estado)cboEstado.SelectedItem;
                    resultado = CotizacionDirectaEstado.ModificarEstado(cotizacion.Id32, Estado.Id32);
                    if (resultado.Estado == Enums.EstadoTransaccion.Aceptada) {
                        LimpiarFormularioMensaje();
                        CargarGrillaCotizaciones();
                        MessageBox.Show(resultado.Descripcion, "Sistema Comercial Craft", MessageBoxButtons.OK,
                                        MessageBoxIcon.Information);
                    } else {
                        MessageBox.Show(resultado.Descripcion, "Sistema Comercial Craft", MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                    }
                } else {
                    LimpiarFormularioMensaje();
                }
                Cursor.Current = Cursors.Default;
                if (Seleccion == "cot")
                    FocusCotizacion();
            }
        }