private void btnEmitir_Click(object sender, EventArgs e)
        {
            FbData fb = new FbData();

            string sql   = "";
            string clase = "";

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (Convert.ToBoolean(row.Cells[0].Value) == true)
                {
                    var tipo   = row.Cells[1].Value;
                    var numero = row.Cells[2].Value;


                    #region aplicaredondeoimpuesto

                    clase = Getclasefactura(tipo);

                    if (chkImpuesto.Checked)
                    {
                        sql = "update oedet set vlr_iva = (((price*qtyship)-totaldct) * porc_iva / 100) where tipo = '" + clase + "' and number = " + numero.ToString();

                        fb.ExecuteNonQuery(sql);



                        sql = "update oe set salestax = (select sum(vlr_iva) from oedet where oedet.tipo = oe.tipo and oedet.number = oe.number) " +
                              " where oe.tipo = '" + clase + "' and number = " + numero.ToString();

                        fb.ExecuteNonQuery(sql);

                        sql = "update oe set total = subtotal + salestax - coalesce(disc1,0) - coalesce(disc2,0) - coalesce(disc3,0) " +
                              " where oe.tipo = '" + clase + "' and number = " + numero.ToString();

                        fb.ExecuteNonQuery(sql);
                    }


                    #endregion

                    FacturaElectronica fe = new FacturaElectronica();


                    #region validar datos

                    var f = new FacturaEnc();

                    FbData db = new FbData();

                    var sqlciiu = "select FIRST 1 actividad_eco_enc.cod_internacional " +
                                  " from actividad_eco_enc, actividad_eco_det " +
                                  " where actividad_eco_enc.codact = actividad_eco_det.codact " +
                                  " and actividad_eco_det.principal = 'S' " +
                                  " and actividad_eco_det.id_n = OE.ID_N";


                    sql = "SELECT OE.ID_EMPRESA, " +
                          "OE.ID_SUCURSAL, TIPDOC.SIGLA AS TIPO,OE.NUMBER, OE.FECHA, OE.DUEDATE FECHAVENC, CUST.ID_N, CUST.CV,CUST.COMPANY, CUST.ADDR1 direccion,CUST.PHONE1 telefono1, " +
                          " CIUDADES.CODIGO COD_CIUDAD,SHIPTO.CITY,SHIPTO.COD_DPTO,SHIPTO.DEPARTAMENTO,SHIPTO.EMAIL,OE.OCNUMERO,OE.NROREMISION,OE.COMMENTS, " +
                          " TRIBUTARIA_TIPODOCUMENTO.TDOC CODTIPOIDENTIFICACION,TRIBUTARIA_TIPODOCUMENTO.DESCRIPCION DESCTIPOIDENTIFICACION, " +
                          " TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO CODTIPOPERSONA,TRIBUTARIA_TIPOCONTRIBUYENTE.DESCRIPCION DESCRIPCIONTIPOPERSONA, " +
                          "(OE.SUBTOTAL - OE.DESTOTAL) VLRBRUTO,OE.SUBTOTAL,OE.SALESTAX IMPUESTO,OE.TOTAL,coalesce(OE.PORCRTFTE,0) PORCRTFTE,coalesce(OE.DISC1,0) retefuente, " +
                          " coalesce(OE.DISC3,0) RETEIVA,coalesce(OE.DISC2,0) RETEICA,OE.DESTOTAL,coalesce((" + sqlciiu + "),'') CODIGOCIIU,OE.DEV_FACTURA CRUCENUMERO, OE.DEV_TIPOFAC CRUCETIPO,OE.CUFE " +
                          " FROM CUST,OE,SHIPTO,TRIBUTARIA,TRIBUTARIA_TIPOCONTRIBUYENTE,TRIBUTARIA_TIPODOCUMENTO,TIPDOC,CIUDADES " +
                          " WHERE((CUST.ID_N = OE.ID_N) " +
                          " AND(CUST.ID_N = SHIPTO.ID_N) " +
                          " AND(OE.ID_N = TRIBUTARIA.ID_N) " +
                          " AND(OE.SHIPTO = SHIPTO.SUCCLIENTE) " +
                          " AND(SHIPTO.CITY = CIUDADES.CIUDAD AND CIUDADES.ID_DEPTO = SHIPTO.COD_DPTO) " +
                          " AND (OE.TIPO = TIPDOC.CLASE) " +
                          " AND(TRIBUTARIA.TDOC = TRIBUTARIA_TIPODOCUMENTO.TDOC) " +
                          " AND(TRIBUTARIA.TIPO_CONTRIBUYENTE = TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO OR TRIBUTARIA.TIPO_CONTRIBUYENTE = 0 )) " +
                          " AND(((OE.ID_EMPRESA = 1) " +
                          " AND(TIPDOC.SIGLA = '" + tipo + "') " +
                          " AND(OE.NUMBER = " + numero + ")))";


                    var da = db.DataReader(sql);

                    DataTable dt = new DataTable();

                    da.Fill(dt);

                    try
                    {
                        var r = dt.Rows[0];

                        var correoe = r["email"].ToString().Trim();

                        if (correoe == "")
                        {
                            MessageBox.Show("Verificar correo electronico " + numero.ToString());
                            LogText(tipo.ToString(), numero.ToString(), "Verificar correo electronico ");
                        }

                        var tipodoident = r["CODTIPOIDENTIFICACION"].ToString();
                        var ciiu        = r["CODIGOCIIU"].ToString();

                        if (tipodoident == "31" && ciiu == "")
                        {
                            MessageBox.Show("Verificar codigo ciiu tercero con nit " + numero.ToString());
                            LogText(tipo.ToString(), numero.ToString(), "Verificar codigo ciiu tercero con nit ");
                        }
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Verificar datos tributarios/direccion de envio " + numero.ToString());
                        LogText(tipo.ToString(), numero.ToString(), "Verificar datos tributarios/direccion de envio ");
                    }

                    #endregion



                    var data = fe.EnviarFactura(tipo.ToString().Trim(), Convert.ToInt32(numero));

                    //MessageBox.Show(tipo + "-" + numero.ToString() + data.mensaje);

                    if (data.codigo == 200 || data.codigo == 201)
                    {
                        //string clase =   Getclasefactura(tipo);

                        sql = "update oe set cufe = '" + data.cufe + "', procesadoDian ='S' where tipo='" + clase + "' and number=" + numero.ToString();

                        fb.ExecuteNonQuery(sql);
                    }

                    LogResult(tipo.ToString(), numero.ToString(), data);
                }
            }



            GetFacturas();
        }
        public FacturaEnc getfacturaenc(string tipo, int numero)
        {
            var f = new FacturaEnc();

            FbData db = new FbData();

            var sqlciiu = "select FIRST 1 actividad_eco_enc.cod_internacional " +
                          " from actividad_eco_enc, actividad_eco_det " +
                          " where actividad_eco_enc.codact = actividad_eco_det.codact " +
                          " and actividad_eco_det.principal = 'S' " +
                          " and actividad_eco_det.id_n = OE.ID_N";


            var sql = "SELECT OE.ID_EMPRESA, " +
                      "OE.ID_SUCURSAL, TIPDOC.SIGLA AS TIPO,OE.NUMBER, OE.FECHA, OE.DUEDATE FECHAVENC, CUST.ID_N, CUST.CV,CUST.COMPANY, SHIPTO.ADDR1 direccion,SHIPTO.PHONE1 telefono1, " +
                      " CIUDADES.CODIGO COD_CIUDAD,SHIPTO.CITY,SHIPTO.COD_DPTO,SHIPTO.DEPARTAMENTO,SHIPTO.EMAIL,OE.OCNUMERO,OE.NROREMISION,OE.COMMENTS, " +
                      " TRIBUTARIA_TIPODOCUMENTO.TDOC CODTIPOIDENTIFICACION,TRIBUTARIA_TIPODOCUMENTO.DESCRIPCION DESCTIPOIDENTIFICACION, " +
                      " TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO CODTIPOPERSONA,TRIBUTARIA_TIPOCONTRIBUYENTE.DESCRIPCION DESCRIPCIONTIPOPERSONA, " +
                      "(OE.SUBTOTAL - OE.DESTOTAL) VLRBRUTO,OE.SUBTOTAL,OE.SALESTAX IMPUESTO,OE.TOTAL,coalesce(OE.PORCRTFTE,0) PORCRTFTE,coalesce(OE.DISC1,0) retefuente, " +
                      " coalesce(OE.DISC3,0) RETEIVA,coalesce(OE.DISC2,0) RETEICA,OE.DESTOTAL,coalesce((" + sqlciiu + "),'') CODIGOCIIU,OE.DEV_FACTURA CRUCENUMERO, OE.DEV_TIPOFAC CRUCETIPO,OE.CUFE " +
                      "FROM CUST,OE,SHIPTO,TRIBUTARIA,TRIBUTARIA_TIPOCONTRIBUYENTE,TRIBUTARIA_TIPODOCUMENTO,TIPDOC,CIUDADES " +
                      "WHERE((CUST.ID_N = OE.ID_N) " +
                      " AND(CUST.ID_N = SHIPTO.ID_N) " +
                      " AND(OE.ID_N = TRIBUTARIA.ID_N) " +
                      " AND(OE.SHIPTO = SHIPTO.SUCCLIENTE) " +
                      " AND(SHIPTO.CITY = CIUDADES.CIUDAD AND CIUDADES.ID_DEPTO = SHIPTO.COD_DPTO) " +
                      " AND (OE.TIPO = TIPDOC.CLASE) " +
                      " AND(TRIBUTARIA.TDOC = TRIBUTARIA_TIPODOCUMENTO.TDOC) " +
                      " AND(TRIBUTARIA.TIPO_CONTRIBUYENTE = TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO OR TRIBUTARIA.TIPO_CONTRIBUYENTE = 0 )) " +
                      " AND(((OE.ID_EMPRESA = 1) " +
                      " AND(TIPDOC.SIGLA = '" + tipo + "') " +
                      " AND(OE.NUMBER = " + numero + ")))";


            var da = db.DataReader(sql);

            DataTable dt = new DataTable();

            da.Fill(dt);

            var r = dt.Rows[0];

            var codciudad = r["cod_ciudad"].ToString().Trim();
            var coddepto  = r["cod_dpto"].ToString().Trim();

            codciudad = (Convert.ToInt32(codciudad) + 100000).ToString().Substring(1, 5);
            coddepto  = (Convert.ToInt32(coddepto) + 100).ToString().Substring(1, 2);

            f.numero             = Convert.ToInt32(r["number"].ToString());
            f.tipodoc            = r["tipo"].ToString().Trim();
            f.prefijo            = r["tipo"].ToString().Trim();
            f.fecha              = Convert.ToDateTime(r["fecha"].ToString());
            f.fechavence         = Convert.ToDateTime(r["fechavenc"].ToString());
            f.nit                = r["id_n"].ToString().Trim();
            f.dv                 = r["cv"].ToString().Trim();
            f.company            = r["company"].ToString().Trim();
            f.direccion          = r["direccion"].ToString().Trim();
            f.telefono1          = r["telefono1"].ToString().Trim().Replace(" ", "");
            f.codciudad          = codciudad; //r["cod_ciudad"].ToString().Trim();
            f.ciudad             = r["city"].ToString().Trim();
            f.coddepto           = coddepto;  // r["cod_dpto"].ToString().Trim();
            f.departamento       = r["departamento"].ToString().Trim();
            f.correoe            = r["email"].ToString().Trim();
            f.numordencompra     = r["ocnumero"].ToString().Trim();
            f.numremision        = r["nroremision"].ToString().Trim();
            f.comentario         = r["comments"].ToString().Trim();
            f.tipoIdentificacion = r["CODTIPOIDENTIFICACION"].ToString();
            f.tipoPersona        = r["CODTIPOPERSONA"].ToString();
            f.vlrbruto           = Math.Abs(Convert.ToDecimal(r["vlrbruto"].ToString()));
            f.subtotal           = Math.Abs(Convert.ToDecimal(r["subtotal"].ToString()));
            f.impuesto           = Math.Abs(Convert.ToDecimal(r["impuesto"].ToString()));
            f.total              = Math.Abs(Convert.ToDecimal(r["total"].ToString()));
            f.baseretencion      = Math.Abs(Convert.ToDecimal(r["subtotal"].ToString()));
            f.porcretefuente     = Math.Abs(Convert.ToDecimal(r["PORCRTFTE"].ToString()));
            f.retefuente         = Math.Abs(Convert.ToDecimal(r["retefuente"].ToString()));
            f.porcreteica        = 0; //Convert.ToDecimal(r["dv"].ToString());
            f.reteica            = Math.Abs(Convert.ToDecimal(r["RETEICA"].ToString()));
            f.porcreteiva        = 0; //Convert.ToDecimal(r["dv"].ToString());
            f.reteiva            = Math.Abs(Convert.ToDecimal(r["RETEIVA"].ToString()));
            f.descuentos         = Convert.ToDecimal(r["DESTOTAL"].ToString());
            f.codigociiu         = r["CODIGOCIIU"].ToString();
            f.cufe               = r["cufe"].ToString();
            f.crucenumero        = r["crucenumero"].ToString();
            f.crucetipo          = r["crucetipo"].ToString();


            //List<FacturaEnc> lf = new List<FacturaEnc>();
            //foreach (DataRow row in dt.Rows)
            //{
            //    FacturaEnc fe = new FacturaEnc();
            //    fe.numero = Convert.ToInt32(row["Numero"].ToString());

            //    lf.Add(fe);
            //}


            return(f);
        }