public string GetData(int nroFactura, int idCliente, int nroAtencion, string urlPdfFactura) { logFacturas.Info("Se recibe factura con siguietnes datos:Factura Internacional:" + nroFactura + " IdCliente:" + idCliente + " nroAtencion:" + nroAtencion + " urlPdf:" + urlPdfFactura); try { Int32 _idContrato = 0; Decimal _Valtotal = 0; Decimal _ValDescuento = 0; Decimal _ValDescuentoT = 0; Decimal _ValPagos = 0; Decimal _ValImpuesto = 0; Decimal _ValCobrar = 0; DateTime _FecFactura = DateTime.Now; Decimal _valPos = 0; string _direccionCliente = string.Empty; string _IdUsuarioR = string.Empty; string _usrNombre = string.Empty; string _usrNumDocumento = string.Empty; //Byte _usrIdTipoDoc = 0; Int32 _idTercero = 0; string _numDocCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _ciudad = string.Empty; string _departamento = string.Empty; string _correoCliente = string.Empty; Byte _tipoDocCliente = 0; string _razonSocial = string.Empty; string _repLegal = string.Empty; string _RegimenFiscal = string.Empty; Byte _tipoDocClienteDian = 0; Int16 _idNaturaleza = 0; //int concepto = 0; FormaPago formaPagoTmp = new FormaPago(); //string monedaFactura = "USD"; //Fin de Inicializacion documentoRoot documentoF2 = new documentoRoot(); Documento facturaEnviar = new Documento(); facturaEnviar.identificadorTransaccion = "bf37ed2a-ea9b-436a-88d7-2dbf9e1e0006"; facturaEnviar.URLPDF = urlPdfFactura; facturaEnviar.NITFacturador = Properties.Settings.Default.NitHusi; facturaEnviar.prefijo = Properties.Settings.Default.Prefijo; facturaEnviar.numeroDocumento = nroFactura.ToString(); facturaEnviar.tipoDocumento = 1; facturaEnviar.subTipoDocumento = "01"; facturaEnviar.tipoOperacion = "10"; facturaEnviar.generaRepresentacionGrafica = false; //ClienteInternacional cliente; string urlClientes = $"{Properties.Settings.Default.urlServicioClientes}ClienteJuridico?idFactura={nroFactura}"; logFacturas.Info("URL de Request:" + urlClientes); HttpWebRequest peticion = WebRequest.Create(urlClientes) as HttpWebRequest; peticion.Method = "GET"; peticion.ContentType = "application/json"; HttpWebResponse respuestaClientes = peticion.GetResponse() as HttpWebResponse; StreamReader sr = new StreamReader(respuestaClientes.GetResponseStream()); string infCliente = sr.ReadToEnd(); logFacturas.Info("Cliente:" + infCliente); ClienteJuridicoConsulta cliente = JsonConvert.DeserializeObject <ClienteJuridicoConsulta>(infCliente); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryFacturaEnc = @"SELECT c.idtercero,b.idcontrato,a.valtotalUSD as ValorTotalFactura, a.* FROM facfacturapacint a INNER JOIN facfactura b on a.idfactura=b.idfactura INNER JOIN concontrato c on b.idcontrato=c.idcontrato WHERE a.indhabilitado=1 and a.idfactura=@nroFactura"; SqlCommand cmdFacturaEnc = new SqlCommand(qryFacturaEnc, conn); cmdFacturaEnc.Parameters.Add("@nroFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdFacturaEnc = cmdFacturaEnc.ExecuteReader(); if (rdFacturaEnc.HasRows) { rdFacturaEnc.Read(); _idContrato = rdFacturaEnc.GetInt32(1); _Valtotal = Math.Round(rdFacturaEnc.GetDecimal(36), 2); _ValDescuento = Math.Round(rdFacturaEnc.GetDecimal(38), 2); //ValDescuentoUSD _ValDescuentoT = Math.Round(rdFacturaEnc.GetDecimal(38), 2); _ValPagos = Math.Round(rdFacturaEnc.GetDecimal(40), 2); _ValImpuesto = 0; // Math.Round(rdFacturaEnc.GetDecimal(5), 0); _ValCobrar = _Valtotal - _ValDescuento - _ValDescuentoT + _ValImpuesto; _FecFactura = rdFacturaEnc.GetDateTime(13); _valPos = Math.Round(rdFacturaEnc.GetDecimal(36), 2); _idTercero = rdFacturaEnc.GetInt32(0); // Decimal _valNoPos = 0; _IdUsuarioR = rdFacturaEnc.GetString(43); //_usrNombre = $"{rdFacturaEnc.GetString(16)} {rdFacturaEnc.GetString(17)}"; //_usrNumDocumento = rdFacturaEnc.GetString(18); //_usrIdTipoDoc = rdFacturaEnc.GetByte(49); _razonSocial = rdFacturaEnc.GetString(6); _repLegal = rdFacturaEnc.GetString(11); _direccionCliente = rdFacturaEnc.GetString(8); _numDocCliente = rdFacturaEnc.GetString(7); _municipioCliente = rdFacturaEnc.GetString(9); _telefonoCliente = rdFacturaEnc.GetString(10); } string qryDatosGenerales = @"SELECT ter.NumDocumento,ter.IdTipoDoc,ter.NomTercero,ter.CodTercero,con.NomRepComercial,ter.IdTercero,ter.idRegimen,ter.IdNaturaleza FROM facFactura fact INNER JOIN ASI_USUA usr ON fact.IdUsuarioR = usr.IdUsuario INNER JOIN conContrato con ON fact.IdContrato = con.IdContrato INNER JOIN genTercero ter ON con.IdTercero = ter.IdTercero WHERE IdFactura = @idFactura"; SqlCommand cmdDatosGenerales = new SqlCommand(qryDatosGenerales, conn); cmdDatosGenerales.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDatosGenerales = cmdDatosGenerales.ExecuteReader(); if (rdDatosGenerales.HasRows) { rdDatosGenerales.Read(); _idNaturaleza = rdDatosGenerales.GetInt16(7); _tipoDocCliente = rdDatosGenerales.GetByte(1); } } string formatoWrk = formatosFecha.formatofecha(_FecFactura); facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = "USD"; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; List <DetallesItem> detalleProductos = new List <DetallesItem>(); //****************** CLIENTE // Variables Inicializacion //string _direccionCliente = string.Empty; //string _telefonoCliente = string.Empty; //string _municipioCliente = string.Empty; //string _departamento = string.Empty; int _localizacionCliente = 0; //string _correoCliente = string.Empty; using (SqlConnection connx = new SqlConnection(Properties.Settings.Default.DBConexion)) { connx.Open(); string qryDatosCliente1 = @"SELECT IdLocalizaTipo,DesLocalizacion,B.nom_dipo,A.IdLugar,RIGHT(B.cod_dipo,5),cod_dipo FROM genTerceroLocaliza A LEFT JOIN GEN_DIVI_POLI B ON A.IdLugar=B.IdLugar WHERE IdTercero=@idTercero and IdLocalizaTipo IN (2,3) ORDER BY IdLocalizaTipo"; SqlCommand cmdDatosCliente1 = new SqlCommand(qryDatosCliente1, connx); cmdDatosCliente1.Parameters.Add("@idTercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdDatosCliente1 = cmdDatosCliente1.ExecuteReader(); if (rdDatosCliente1.HasRows) { while (rdDatosCliente1.Read()) { if (rdDatosCliente1.GetInt32(0) == 2) { _direccionCliente = rdDatosCliente1.GetString(1); //_municipioCliente = rdDatosCliente1.GetString(5); //_municipioCliente = "533"; _municipioCliente = "00000"; int inicio = _direccionCliente.Length - 12; _ciudad = _direccionCliente.Substring(inicio, 10); _localizacionCliente = rdDatosCliente1.GetInt32(3); } else if (rdDatosCliente1.GetInt32(0) == 3) { _telefonoCliente = rdDatosCliente1.GetString(1); if (_telefonoCliente.Length > 10) { _telefonoCliente = _telefonoCliente.Substring(0, 10); } } } } //connx.Open(); string qryDatosCliente3 = @"SELECT A.Correo FROM concontratocorreo A INNER JOIN facFactura B ON A.IdContrato=B.IdContrato WHERE A.indhabilitado=1 AND B.idFactura=@idFactura UNION ALL SELECT A.Deslocalizacion As Correo FROM gentercerolocaliza A INNER JOIN conContrato C ON C.IdTercero=A.IdTercero INNER JOIN facFactura D ON D.IdContrato=C.IdContrato LEFT JOIN concontratocorreo B ON B.indhabilitado=1 and B.idcontrato=D.IdContrato WHERE B.idcontrato is null and A.IdLocalizaTipo=1 and A.indhabilitado=1 and D.IdFactura=@idFactura"; SqlCommand cmdDatosCliente3 = new SqlCommand(qryDatosCliente3, connx); cmdDatosCliente3.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDatosCliente3 = cmdDatosCliente3.ExecuteReader(); if (rdDatosCliente3.HasRows) { rdDatosCliente3.Read(); _correoCliente = rdDatosCliente3.GetString(0); } else { _correoCliente = ""; } } List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(cliente.cuenta_correo.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); facturaEnviar.notificaciones = notificaciones; Adquiriente adquirienteTmp = new Adquiriente(); //adquirienteTmp.identificacion = _numDocCliente; //if (_tipoDocCliente == 1)//TODO: validar la Homologacion para este campo //{ // adquirienteTmp.tipoIdentificacion = 31; //} //else if (_tipoDocCliente == 2) //{ // adquirienteTmp.tipoIdentificacion = 13; //} using (SqlConnection connXX = new SqlConnection(Properties.Settings.Default.DBConexion)) { connXX.Open(); string qryTipoDocDian = "SELECT TipoDocDian FROM homologaTipoDocDian WHERE IdTipoDoc=@tipoDoc"; SqlCommand cmdTipoDocDian = new SqlCommand(qryTipoDocDian, connXX); cmdTipoDocDian.Parameters.Add("@tipoDoc", SqlDbType.TinyInt).Value = cliente.TipoDoc_Cliente; Int16 tipoDoc = Int16.Parse(cmdTipoDocDian.ExecuteScalar().ToString()); _tipoDocClienteDian = byte.Parse(tipoDoc.ToString()); } adquirienteTmp.tipoIdentificacion = _tipoDocClienteDian; adquirienteTmp.identificacion = cliente.NroDoc_Cliente; adquirienteTmp.codigoInterno = cliente.IdTercero.ToString(); adquirienteTmp.razonSocial = cliente.NomTercero; adquirienteTmp.nombreSucursal = cliente.NomTercero; adquirienteTmp.correo = cliente.cuenta_correo.Trim().Split(';')[0]; adquirienteTmp.telefono = cliente.telefono; //adquirienteTmp.codigoInterno = _idTercero.ToString(); //adquirienteTmp.razonSocial = _razonSocial; //adquirienteTmp.nombreSucursal = _razonSocial; //adquirienteTmp.correo = _correoCliente.Trim(); //adquirienteTmp.telefono = _telefonoCliente; if (_RegimenFiscal.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } //TODO: Aqui insertar lo que se defina de Responsabilidades RUT documentoF2.adquiriente.responsabilidadesRUT if (_idNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (_idNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = cliente.codigoPais; // "AW"; ubicacionCliente.codigoMunicipio = _municipioCliente; ubicacionCliente.departamento = cliente.Nombre_Depto; // "Aruba"; ubicacionCliente.direccion = cliente.direccion; // _direccionCliente; ubicacionCliente.ciudad = cliente.Nom_Municipio; // _ciudad; adquirienteTmp.ubicacion = ubicacionCliente; documentoF2.adquiriente = adquirienteTmp; double TotalGravadoIva = 0; //double TotalGravadoIca = 0; #region MyRegion // idenCliente.SchemeID = "31"; //idenCliente.ID = _numDocCliente; //Cliente.AdditionalAccountID = "1"; //TODO: Tipo de contribuyente. Buscar en SAHI //datosCliente.PartyIdentification = idenCliente; //datosCliente.Name = _razonSocial; //objDireccionCliente.Line = _direccionCliente; //objDireccionCliente.CityName = _municipioCliente; //objDireccionCliente.CountryCode = "AW"; //TODO: DEfinir de Donde Obtener(Pais del Cliente) desde Base de Datos //objDireccionCliente.CitySubdivisionName = ""; //TODO: De Donde Se obtiene de la Base de Datos. Especificidad en la direccion(Barrio, Edifico etc) //objDireccionCliente.Department = ""; //ubicacionFisicaCliente.Address = objDireccionCliente; //datosCliente.PhysicalLocation = ubicacionFisicaCliente; //RegimenCliente.TaxLevelCode = "2";// TODO: Validar si este codigo (TaxLevelCode) es Fijo. ?? //datosCliente.PartyTaxScheme = RegimenCliente; //string primerNombre = string.Empty; //string segundoNombre = string.Empty; //string Apellidos = string.Empty; //if (_repLegal.Length > 1) //{ // string[] nombreRepresentante = _repLegal.Split(' '); // if (nombreRepresentante.Length == 2) // { // primerNombre = nombreRepresentante[0]; // segundoNombre = " "; // Apellidos = nombreRepresentante[1]; // } // else if (nombreRepresentante.Length > 2) // { // primerNombre = nombreRepresentante[0]; // segundoNombre = nombreRepresentante[1]; // Apellidos = nombreRepresentante[2]; // } // if (nombreRepresentante.Length > 3) // { // Apellidos = Apellidos + nombreRepresentante[3]; // } //} //repLegalCliente.FirstName = _razonSocial; //repLegalCliente.MiddleName = " "; //repLegalCliente.FamilyName = " "; //repLegalCliente.Telephone = " "; //repLegalCliente.Email = _correoCliente; // TODO: DEfinir la ubicacion de Envio de las cuentas de correo. ////Cliente.Party.PartyTaxScheme.TaxLevelCode = "2"; // Regimen Comun; //datosCliente.Person = repLegalCliente; //Cliente.Party = datosCliente; #endregion #region MyRegion // ivaFactura.ID = "01"; //taxIVA.Amount = 0; //taxIVA.Currency = monedaFactura; //ivaFactura.TaxAmount = taxIVA; //ivaFactura.TaxEvidenceIndicator = "true"; //ipoconsumoFactura.ID = "02"; //taxCONSUMO.Amount = 0; //taxCONSUMO.Currency = monedaFactura; //ipoconsumoFactura.TaxAmount = taxCONSUMO; //ipoconsumoFactura.TaxEvidenceIndicator = "true"; //icaFactura.ID = "03"; //taxICA.Amount = 0; //taxICA.Currency = monedaFactura; //icaFactura.TaxAmount = taxICA; //icaFactura.TaxEvidenceIndicator = "true"; //camposAdicionalesICA.Amount = _Valtotal.TomarDecimales(2); //camposAdicionalesICA.Currency = monedaFactura; //icaFactura.TaxableAmount = camposAdicionalesICA; //icaFactura.Percent = 0; //impuestosFactura.Add(ivaFactura); //impuestosFactura.Add(ipoconsumoFactura); //impuestosFactura.Add(icaFactura); //// Queda pendiente Definir el porque de los campos adicionales en la documentacion del Servicio. //lineaExtCant.Amount = _ValCobrar.TomarDecimales(2); //lineaExtCant.Currency = monedaFactura; //subtotalesFactura.LineExtensionAmount = lineaExtCant; //// aqui va el TaxExclusiveAmount //totalImpuesto.Amount = _Valtotal; //Total Base Imponible (Importe Bruto + Cargos- Descuentos): Base imponible para el cálculo de los impuestos. Todos los impuestos los calculan sobre una misma base??? //totalImpuesto.Currency = monedaFactura; //subtotalesFactura.TaxExclusiveAmount = totalImpuesto; //Decimal totalFacturapago = _Valtotal.TomarDecimales(2) + _ValImpuesto.TomarDecimales(2) - _ValPagos.TomarDecimales(2); //totalPagar.Amount = totalFacturapago.TomarDecimales(2); //totalPagar.Currency = monedaFactura; //subtotalesFactura.PayableAmount = totalPagar; #endregion //************************************************************ Detalle de Factura Internacional *********************************************************** using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { string qryFactura = @"select c.idtercero,b.idcontrato,a.* from facfacturapacint a inner join facfactura b on a.idfactura = b.idfactura inner join concontrato c on b.idcontrato = c.idcontrato where a.indhabilitado = 1 and a.idfactura =@idFactura"; conexion01.Open(); SqlCommand cmdFactura = new SqlCommand(qryFactura, conexion01); cmdFactura.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; //cmdFactura.Parameters.Add("@idAtencion", SqlDbType.Int).Value = nroAtencion; SqlDataReader rdFactura = cmdFactura.ExecuteReader(); if (rdFactura.HasRows) { rdFactura.Read(); string strDetalleFac = @"SELECT b.idfactura,d.cantidad,case when d.cantidad=1 then d.valtotalusd else d.valunitusd end as Valorunitario, d.valtotalUSD as Valortotal , d.* FROM facfacturapacint a INNER JOIN facfactura b on a.idfactura=b.idfactura INNER JOIN facfacturapacintdet d on a.idfacturapacint=d.idfacturapacint INNER JOIN facfacturapacintdetorden e on d.IdFacturaPacInt=e.IdFacturaPacInt AND d.IdCategoria=e.IdCategoria AND d.IdProducto=e.IdProducto AND d.IdMovimiento=e.IdMovimiento INNER JOIN concontrato c on b.idcontrato=c.idcontrato WHERE a.indhabilitado=1 and a.idfactura=@idFactura ORDER BY e.Idorden"; SqlCommand cmdDetalleFac = new SqlCommand(strDetalleFac, conexion01); cmdDetalleFac.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDetalleFac = cmdDetalleFac.ExecuteReader(); if (rdDetalleFac.HasRows) { Int16 nroLinea = 1; while (rdDetalleFac.Read()) { try { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdDetalleFac.GetString(7); lineaProducto.valorCodigoInterno = codigoProducto; double valorUnitario = double.Parse(rdDetalleFac.GetDecimal(2).ToString()); double cantidad = double.Parse(rdDetalleFac.GetInt32(1).ToString()).TomarDecimales(2); lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.descripcion = rdDetalleFac.GetString(8); lineaProducto.unidades = double.Parse(rdDetalleFac.GetInt32(1).ToString()).TomarDecimales(2); lineaProducto.unidadMedida = "94";// rdDetalleFac.GetString(19); lineaProducto.valorUnitarioBruto = double.Parse(rdDetalleFac.GetDecimal(2).ToString()); //lineaProducto.valorBruto = double.Parse(rdDetalleFac.GetDecimal(3).ToString()).TomarDecimales(2); lineaProducto.valorBruto = valorUnitario * cantidad; lineaProducto.valorBrutoMoneda = "USD"; TibutosDetalle tributosWRKIva = new TibutosDetalle(); tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; tributosWRKIva.porcentaje = 0; tributosWRKIva.valorBase = double.Parse(rdDetalleFac.GetDecimal(3).ToString()); tributosWRKIva.valorImporte = double.Parse(rdDetalleFac.GetDecimal(3).ToString()) * 0; TotalGravadoIva = TotalGravadoIva + double.Parse(rdDetalleFac.GetDecimal(3).ToString()); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); lineaProducto.tributos = listaTributos; detalleProductos.Add(lineaProducto); nroLinea++; } catch (Exception sqlExp) { string error = sqlExp.Message + " " + sqlExp.StackTrace; throw; } } } else // Si No hay Detalle de Productos { logFacturas.Info("No se encontro Detalle de productos para la factura. " + strDetalleFac); } } else // No se encuentra Informacion de la Factura y Atencion { logFacturas.Info("No se encontro Informacion de Factura y Atencion." + qryFactura); } } #region MyRegion //peticion.AccountingCustomerParty = Cliente; ////peticion.TaxTotal = impuestosFactura; //peticion.LegalMonetaryTotal = subtotalesFactura; //peticion.DocumentLines = detalleProductos; //objData.OriginalRequest = peticion; //facturaEnviar.Data = objData; //facturaEnviar.Data.OriginalRequest.AccountingCustomerParty.Party = Cliente.Party; //facturaEnviar.Data.OriginalRequest.TaxTotal = impuestosFactura; //facturaEnviar.Data.OriginalRequest.LegalMonetaryTotal = subtotalesFactura; //facturaEnviar.Data.OriginalRequest.DocumentLines = detalleProductos; #endregion documentoF2.detalles = detalleProductos; List <TributosItem> tributosTMP = new List <TributosItem>(); List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributos = new DetalleTributos() // Un Objeto por cada Tipo de Iva { valorImporte = 0, valorBase = TotalGravadoIva, porcentaje = 0 }; tributosDetalle.Add(detalleTributos); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = 0, detalles = tributosDetalle // DEtalle de los Ivas }; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP; double difRedondeo = 0; if (Math.Abs(TotalGravadoIva - double.Parse(_Valtotal.ToString())) > 0) { difRedondeo = Math.Abs(TotalGravadoIva - double.Parse(_Valtotal.ToString())); } if (difRedondeo > 1.04) { throw new Exception("El valor de Redondeos, es superior a 1.04"); } ///<summary> ///Inicio de Totales de la Factura /// </summary Totales totalesTmp = new Totales() { valorBruto = double.Parse(_Valtotal.ToString()), valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = double.Parse(_Valtotal.ToString()), valorTotalConImpuestos = double.Parse(_Valtotal.ToString()), valorNeto = double.Parse(_ValCobrar.ToString()), valorRedondeo = difRedondeo.TomarDecimales(2) }; double tasa = 0; string monedaDestino = String.Empty; DateTime fechaTrm = DateTime.Now; using (SqlConnection connX1 = new SqlConnection(Properties.Settings.Default.DBConexion)) { connX1.Open(); string qryTasa = "SELECT Trm,FechaTrm,MonedaOrigen FROM facFacturaTasaTrm WHERE idFactura=@idFactura"; SqlCommand cmdTasa = new SqlCommand(qryTasa, connX1); cmdTasa.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdTasa = cmdTasa.ExecuteReader(); if (rdTasa.HasRows) { rdTasa.Read(); tasa = rdTasa.GetDouble(0); fechaTrm = rdTasa.GetDateTime(1); monedaDestino = rdTasa.GetString(2); } else { logFacturas.Info($"No se encontro Tasa de Cambio para la Factura Numero:{nroFactura}"); } } formatoWrk = formatosFecha.formatofecha(fechaTrm); TRM tasaInf = new TRM(); tasaInf.valor = tasa; tasaInf.monedaDestino = monedaDestino; tasaInf.fecha = formatoWrk.Split('T')[0]; facturaEnviar.TRM = tasaInf; documentoF2.totales = totalesTmp; logFacturas.Info("Numero de Productos Procesados, para JSon:" + detalleProductos.Count); //**************************************** try { //string urlConsumo = Properties.Settings.Default.urlFacturaElectronica + Properties.Settings.Default.recursoFacturaE; string urlConsumo = Properties.Settings.Default.urlFacturaElectronica;// + Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; //request.Timeout = 60 * 1000; documentoF2.documento = facturaEnviar; string facturaJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Factura:" + facturaJson); request.Method = "POST"; request.ContentType = "application/json"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(facturaJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arreglo string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; logFacturas.Info("Codigo Status:" + response.StatusCode); logFacturas.Info("Descripcion Status:" + response.StatusDescription); StreamReader LecturaRespuesta = new StreamReader(response.GetResponseStream()); string strsb = LecturaRespuesta.ReadToEnd(); logFacturas.Info("Respuesta:" + strsb); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(strsb); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string strActualiza = @"UPDATE dbo.facFacturaTempWEBService SET identificador=@identificador WHERE IdFactura=@nrofactura"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, conn); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nrofactura", SqlDbType.Int).Value = nroFactura; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Factura Actualizada con UUID en facFacturaTempWEBService"); using (WebClient webClient = new WebClient()) { try { string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Factura...Terminada"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML...Terminada"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facFacturaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facFacturaTempWSAdvertencias(IdFactura,CodAdvertencia,FecRegistro,DescripcionAdv) VALUES(@IdFactura, @CodAdvertencia, @FecRegistro, @DescripcionAdv)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn); cmdInsertarAdvertencia.Parameters.Add("@IdFactura", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdFactura"].Value = nroFactura; cmdInsertarAdvertencia.Parameters["@CodAdvertencia"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionAdv"].Value = itemAdv.mensaje; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroFactura.ToString(); } } } valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No fue Posible Realizar la Descarga de Archivos de la Factura con Identificadotr:{respuesta.resultado.UUID} Estado Proceso de Factura:{respuesta.esExitoso}"); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info("Se ha presentado una Falla durante la descarga de los objetos de la factura:" + webEx1.Message + " " + webEx1.InnerException.Message); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info("No fue posible descargar los archivos.PDF, XML y QR !!! Causa:" + exx.Message); valorRpta = "98"; } } } else { valorRpta = "98"; logFacturas.Info("!!! No fue posible Actualizar la Factura en la Tabla: facFacturaTempWEBService !!!"); } } return(valorRpta); } else { using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryInsertaError = @"INSERT INTO facFacturaTempWEBServiceError (IdFactura,CodError,DescripcionError,FecRegistro) VALUES(@IdFactura, @CodError, @DescripcionError, @FecRegistro)"; SqlCommand cmdInsertarError = new SqlCommand(qryInsertaError, conn); cmdInsertarError.Parameters.Add("@IdFactura", SqlDbType.Int).Value = nroFactura; cmdInsertarError.Parameters.Add("@CodError", SqlDbType.VarChar).Value = respuesta.codigo; cmdInsertarError.Parameters.Add("@DescripcionError", SqlDbType.NVarChar).Value = respuesta.mensaje; cmdInsertarError.Parameters.Add("@FecRegistro", SqlDbType.DateTime).Value = DateTime.Parse(respuesta.fecha); if (cmdInsertarError.ExecuteNonQuery() > 0) { valorRpta = nroFactura.ToString(); string qryDetErr = @"INSERT INTO facFacturaTempWSErrorDetalle (IdFactura,CodError,consecutivo,FecRegistro,DescripcionError) VALUES(@IdFactura, @CodError, @consecutivo, @FecRegistro, @DescripcionError)"; SqlCommand cmdDetErr = new SqlCommand(qryDetErr, conn); cmdDetErr.Parameters.Add("@IdFactura", SqlDbType.Int); cmdDetErr.Parameters.Add("@CodError", SqlDbType.VarChar); cmdDetErr.Parameters.Add("@consecutivo", SqlDbType.Int); cmdDetErr.Parameters.Add("@FecRegistro", SqlDbType.DateTime); cmdDetErr.Parameters.Add("@DescripcionError", SqlDbType.NVarChar); List <ErroresItem> listaErrores = new List <ErroresItem>(); int consecutivo = 1; foreach (ErroresItem itemErr in respuesta.errores) { cmdDetErr.Parameters["@IdFactura"].Value = nroFactura; cmdDetErr.Parameters["@CodError"].Value = itemErr.codigo; cmdDetErr.Parameters["@consecutivo"].Value = consecutivo; cmdDetErr.Parameters["@FecRegistro"].Value = DateTime.Parse(respuesta.fecha); cmdDetErr.Parameters["@DescripcionError"].Value = itemErr.mensaje; if (cmdDetErr.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Errores:codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Errores: Codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } } } else { valorRpta = "99"; } } } return(valorRpta); } catch (Exception e) { logFacturas.Warn("Se ha presentado una excepcion:" + e.Message + " Pila de LLamdos:" + e.StackTrace); return("98"); } } catch (Exception exp) { logFacturas.Warn("Se ha presentado una Excepcion:" + exp.Message + "Pila de LLamadas:" + exp.StackTrace); return("99"); } }
public string GetData(Int32 nroFactura, Int32 idCliente, Int32 nroAtencion, string urlPdfFactura) { logFacturas.Info("Se recibe factura con siguientes datos:Factura x Actividad:" + nroFactura + " IdCliente:" + idCliente + " nroAtencion:" + nroAtencion + " urlPdf:" + urlPdfFactura); try { // Inicializacion Int32 _idContrato = 0; Decimal _Valtotal = 0; Decimal _ValDescuento = 0; Decimal _ValDescuentoT = 0; Decimal _ValPagos = 0; Decimal _ValImpuesto = 0; Decimal _ValCobrar = 0; DateTime _FecFactura = DateTime.Now; Decimal _valPos = 0; Decimal _valNoPos = 0; Int32 _IdUsuarioR = 0; Int32 _idTercero = 0; Byte _tipoDocClienteDian = 0; string _usrNombre = string.Empty; string _usrNumDocumento = string.Empty; Byte _usrIdTipoDoc = 0; string _numDocCliente = string.Empty; Byte _tipoDocCliente = 0; string _razonSocial = string.Empty; string _repLegal = string.Empty; string _RegimenFiscal = string.Empty; Int16 _idNaturaleza = 0; int concepto = 0; FormaPago formaPagoTmp = new FormaPago(); List <AnticiposItem> anticiposWrk = new List <AnticiposItem>(); //Fin de Inicializacion documentoRoot documentoF2 = new documentoRoot(); Documento facturaEnviar = new Documento(); facturaEnviar.identificadorTransaccion = "D7F719C2 - 75F4 - 4F06 - B7CB - F583FC28DBEE"; facturaEnviar.URLPDF = urlPdfFactura; facturaEnviar.NITFacturador = Properties.Settings.Default.NitHusi; facturaEnviar.prefijo = Properties.Settings.Default.Prefijo; facturaEnviar.numeroDocumento = nroFactura.ToString(); facturaEnviar.tipoDocumento = 1; facturaEnviar.subTipoDocumento = "01"; facturaEnviar.tipoOperacion = "10"; facturaEnviar.generaRepresentacionGrafica = false; // ClienteJuridico cliente = new ClienteJuridico(); string urlClientes = $"{Properties.Settings.Default.urlServicioClientes}ClienteJuridico?idFactura={nroFactura}"; logFacturas.Info("URL de Request:" + urlClientes); HttpWebRequest peticion = WebRequest.Create(urlClientes) as HttpWebRequest; peticion.Method = "GET"; peticion.ContentType = "application/json"; HttpWebResponse respuestaClientes = peticion.GetResponse() as HttpWebResponse; StreamReader sr = new StreamReader(respuestaClientes.GetResponseStream()); string infCliente = sr.ReadToEnd(); logFacturas.Info("Cliente:" + infCliente); ClienteJuridicoConsulta cliente = JsonConvert.DeserializeObject <ClienteJuridicoConsulta>(infCliente); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryFacturaEnc = @"SELECT fact.idContrato,Valtotal,ValDescuento,ValDescuentoT,ValPagos,ValImpuesto,ValCobrar,FecFactura,valPos,valNoPos,fact.IdUsuarioR, usr.nom_usua,usr.NumDocumento,usr.IdTipoDoc,ter.NumDocumento,ter.IdTipoDoc,ter.NomTercero,ter.CodTercero,con.NomRepComercial,ter.IdTercero,ter.idRegimen,ter.IdNaturaleza FROM facFactura fact INNER JOIN ASI_USUA usr ON fact.IdUsuarioR = usr.IdUsuario INNER JOIN conContrato con ON fact.IdContrato=con.IdContrato INNER JOIN genTercero ter ON con.IdTercero=ter.IdTercero WHERE IdFactura = @nroFactura"; SqlCommand cmdFacturaEnc = new SqlCommand(qryFacturaEnc, conn); cmdFacturaEnc.Parameters.Add("@nroFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdFacturaEnc = cmdFacturaEnc.ExecuteReader(); if (rdFacturaEnc.HasRows) { rdFacturaEnc.Read(); _idContrato = rdFacturaEnc.GetInt32(0); _Valtotal = Math.Round(rdFacturaEnc.GetDecimal(1), 2); _ValDescuento = Math.Round(rdFacturaEnc.GetDecimal(2), 2); _ValDescuentoT = Math.Round(rdFacturaEnc.GetDecimal(3), 2); _ValPagos = Math.Round(rdFacturaEnc.GetDecimal(4), 2); _ValImpuesto = Math.Round(rdFacturaEnc.GetDecimal(5), 2); _ValCobrar = Math.Round(rdFacturaEnc.GetDecimal(6), 2); _FecFactura = rdFacturaEnc.GetDateTime(7); _valPos = Math.Round(rdFacturaEnc.GetDecimal(8), 2); _valNoPos = Math.Round(rdFacturaEnc.GetDecimal(9), 2); _IdUsuarioR = rdFacturaEnc.GetInt32(10); _usrNombre = rdFacturaEnc.GetString(11); _usrNumDocumento = rdFacturaEnc.GetString(12); _usrIdTipoDoc = rdFacturaEnc.GetByte(13); _numDocCliente = rdFacturaEnc.GetString(14); _tipoDocCliente = rdFacturaEnc.GetByte(15); _razonSocial = rdFacturaEnc.GetString(16); _repLegal = rdFacturaEnc.GetString(18); _idTercero = rdFacturaEnc.GetInt32(19); _RegimenFiscal = rdFacturaEnc.GetString(20); _idNaturaleza = rdFacturaEnc.GetInt16(21); } if (_ValPagos > 0) { string Consultapagos = "SELECT IdConcepto,Valor FROM facFacAtenConcepto WHERE IdFactura=@idFactura"; SqlCommand cmdConsultaPagos = new SqlCommand(Consultapagos, conn); cmdConsultaPagos.Parameters.Add("@idfactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdConsultapagos = cmdConsultaPagos.ExecuteReader(); if (rdConsultapagos.HasRows) { while (rdConsultapagos.Read()) { AnticiposItem anticipoWrk = new AnticiposItem(); anticipoWrk.comprobante = $"{rdConsultapagos.GetInt32(0)}-{nroFactura}"; anticipoWrk.valorAnticipo = double.Parse(rdConsultapagos.GetDouble(1).ToString()); anticiposWrk.Add(anticipoWrk); } } } } string formatoWrk = formatosFecha.formatofecha(_FecFactura); facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = "COP"; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; List <DetallesItem> detalleProductos = new List <DetallesItem>(); //****************** CLIENTE // Variables Inicializacion string _direccionCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _departamento = string.Empty; //int _localizacionCliente = 0; string _correoCliente = string.Empty; //**** Adquiriente adquirienteTmp = new Adquiriente { identificacion = cliente.NroDoc_Cliente, codigoInterno = cliente.IdTercero.ToString(), razonSocial = cliente.NomTercero, nombreSucursal = cliente.NomTercero, correo = cliente.cuenta_correo.Trim().Split(';')[0], telefono = cliente.telefono }; using (SqlConnection connXX = new SqlConnection(Properties.Settings.Default.DBConexion)) { connXX.Open(); string qryTipoDocDian = "SELECT TipoDocDian FROM homologaTipoDocDian WHERE IdTipoDoc=@tipoDoc"; SqlCommand cmdTipoDocDian = new SqlCommand(qryTipoDocDian, connXX); cmdTipoDocDian.Parameters.Add("@tipoDoc", SqlDbType.TinyInt).Value = cliente.TipoDoc_Cliente; Int16 tipoDoc = Int16.Parse(cmdTipoDocDian.ExecuteScalar().ToString()); _tipoDocClienteDian = byte.Parse(tipoDoc.ToString()); } adquirienteTmp.tipoIdentificacion = _tipoDocClienteDian; //if (_tipoDocCliente == 1)//TODO: validar la Homologacion para este campo //{ // adquirienteTmp.tipoIdentificacion = 31; //} //else if (_tipoDocCliente == 2) //{ // adquirienteTmp.tipoIdentificacion = 13; //} List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(cliente.cuenta_correo.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); facturaEnviar.notificaciones = notificaciones; if (_RegimenFiscal.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } //TODO: Aqui insertar lo que se defina de Responsabilidades RUT documentoF2.adquiriente.responsabilidadesRUT if (cliente.IdNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (cliente.IdNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = cliente.codigoPais; ubicacionCliente.departamento = cliente.Nombre_Depto; ubicacionCliente.codigoMunicipio = cliente.codMunicipio; ubicacionCliente.direccion = cliente.direccion; if (!cliente.codigoPais.Equals("CO")) { TRM tasaInf = new TRM(); tasaInf.valor = 1; tasaInf.monedaDestino = "COP"; tasaInf.fecha = formatoWrk.Split('T')[0]; facturaEnviar.TRM = tasaInf; } adquirienteTmp.ubicacion = ubicacionCliente; documentoF2.adquiriente = adquirienteTmp; #region MyRegion //TODO:Definir Los pagos por Copago y Cuota Moderadora, si se envian como Anticipos y Abonos //TODO:Definir si aplica para algun caso. Cargos y Descuentos //List<TributosItem> tributosTMP = new List<TributosItem>(); //List<DetalleTributos> tributosDetalle = new List<DetalleTributos>(); //DetalleTributos detalleTributos = new DetalleTributos() // Un Objeto por cada Tipo de Iva //{ // valorImporte = 0, // valorBase = 0, // porcentaje = 0 //}; //tributosDetalle.Add(detalleTributos); //TributosItem itemTributo = new TributosItem() //{ // id = "01", //Total de Iva // nombre = "Iva", // esImpuesto = true, // valorImporteTotal = 0, // detalles = tributosDetalle // DEtalle de los Ivas //}; //tributosTMP.Add(itemTributo); //documentoF2.tributos = tributosTMP; /////<summary> /////Inicio de Totales de la Factura ///// </summary> #endregion double TotalGravadoIva = 0; //double TotalGravadoIca = 0; //List<AnticiposItem> anticiposWrk = new List<AnticiposItem>(); //AnticiposItem anticipoWrk = new AnticiposItem(); //anticipoWrk.comprobante = "22"; //anticipoWrk.valorAnticipo = double.Parse(_ValPagos.ToString()); //anticiposWrk.Add(anticipoWrk); documentoF2.anticipos = anticiposWrk; //************************************************************ Detalle de Factura por Actividad *********************************************************** using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { string qryFactura = "SELECT IdFactura,NumFactura,IdDestino,IdTransaccion,IdPlan,IdContrato,ValTotal,ValDescuento,ValDescuentoT,ValPagos,ValImpuesto,ValCobrar,IndNotaCred,IndTipoFactura,CodEnti,CodEsor,FecFactura,Ruta,IdCausal,IdUsuarioR,IndHabilitado,IdNoFacturado,valPos,valNoPos FROM facFactura WHERE idFactura=@idFactura AND idDestino=@idAtencion"; conexion01.Open(); SqlCommand cmdFactura = new SqlCommand(qryFactura, conexion01); cmdFactura.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; cmdFactura.Parameters.Add("@idAtencion", SqlDbType.Int).Value = nroAtencion; SqlDataReader rdFactura = cmdFactura.ExecuteReader(); if (rdFactura.HasRows) { rdFactura.Read(); string strDetalleFac = @"SELECT isnull(h.NumAutorizacionInicial,'0') AS Nro_Autorizacion, upper(isnull(J.CodProMan,CASE ISNULL(f.REGCUM,'0') WHEN '0' THEN P.CodProducto ELSE F.REGCUM END )) as Cod_Servicio, upper(( isnull(J.NomPRoman,P.NomProducto)) ) as Des_Servicio, f.Cantidad as Cantidad, f.ValTotal as Vlr_Unitario_Serv, isnull(AD.ValTotal,round(F.Cantidad*F.ValTotal,0)) as Vlr_Total_Serv, a.IdFactura,F.IdProducto,p.codproducto,p.NomProducto,F.IdMovimiento,F.ValDescuento,F.CantidadFNC,F.IdTasaVenta,F.ValTasa,F.ValCuotaMod,F.indPos,F.Regcum, p.IdProductoTipo, --dbo.unidadProducto (p.IdProducto,p.IdProductoTipo) as 'Unidad' 'Unidad' as 'Unidad',O.idOrden FROM facfactura a INNER JOIN concontrato b on a.idcontrato=b.idcontrato INNER JOIN admatencion c on a.iddestino=c.idatencion INNER JOIN admcliente d on d.idcliente=c.idcliente INNER JOIN gentipodoc e on e.idtipodoc=d.idtipodoc INNER JOIN facfacturadet f on f.idfactura=a.idfactura INNER JOIN facFacturaDetOrden O on f.idFactura=O.idFactura AND f.idProducto=O.idProducto AND f.idMovimiento=O.idMovimiento LEFT JOIN facFacturaDetAjuDec AD ON AD.IdFactura = F.IdFactura and AD.IdProducto = F.IdProducto and AD.IdMovimiento = F.IdMovimiento INNER JOIN proproducto p on p.idproducto=f.idproducto AND p.IdProductoTipo not IN (8,12) INNER JOIN facmovimiento g on g.idmovimiento=f.idmovimiento and g.iddestino=a.iddestino LEFT JOIN admatencioncontrato h on h.idatencion=a.iddestino and a.idcontrato=h.idcontrato and a.idplan=h.idplan and h.indhabilitado=1 LEFT JOIN contarifa i on i.idtarifa=b.idtarifa LEFT JOIN conManualAltDet J ON J.IdProducto = F.IdProducto AND J.IndHabilitado = 1 AND J.IdManual = i.IdManual WHERE a.IndTipoFactura='ACT' AND a.idfactura= @idFactura ORDER BY A.IdFactura,o.Idorden"; //logFacturas.Info("consulta de Productos:" + strDetalleFac); SqlCommand cmdDetalleFac = new SqlCommand(strDetalleFac, conexion01); logFacturas.Info("Nro Factura:" + rdFactura.GetInt32(0)); cmdDetalleFac.Parameters.Add("@idFactura", SqlDbType.Int).Value = rdFactura.GetInt32(0); SqlDataReader rdDetalleFac = cmdDetalleFac.ExecuteReader(); if (rdDetalleFac.HasRows) { Int16 nroLinea = 1; while (rdDetalleFac.Read()) { try { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); DetallesItem lineaProducto = new DetallesItem(); // lineaProducto.Item=XXXXXXX CAmpo de consecutivo. lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdDetalleFac.GetString(1); lineaProducto.valorCodigoInterno = codigoProducto; if (rdDetalleFac.GetInt16(18) == 5 || rdDetalleFac.GetInt16(18) == 6) { lineaProducto.codigoEstandar = "999"; } else { lineaProducto.codigoEstandar = "999"; } lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.descripcion = rdDetalleFac.GetString(2); lineaProducto.unidades = double.Parse(rdDetalleFac.GetDouble(3).ToString()); lineaProducto.unidadMedida = "94";// rdDetalleFac.GetString(19); lineaProducto.valorUnitarioBruto = double.Parse(rdDetalleFac.GetDouble(4).ToString()); lineaProducto.valorBruto = double.Parse(rdDetalleFac.GetDouble(5).ToString()); lineaProducto.valorBrutoMoneda = "COP"; TibutosDetalle tributosWRKIva = new TibutosDetalle(); tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; tributosWRKIva.porcentaje = 0; tributosWRKIva.valorBase = double.Parse(rdDetalleFac.GetDouble(5).ToString()); tributosWRKIva.valorImporte = rdDetalleFac.GetDouble(5) * 0; TotalGravadoIva = TotalGravadoIva + rdDetalleFac.GetDouble(5); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); //TibutosDetalle tributosWRKIca = new TibutosDetalle(); //tributosWRKIca.id = "02"; //tributosWRKIca.nombre = "ICA"; //tributosWRKIca.esImpuesto = true; //tributosWRKIca.porcentaje = 0; //tributosWRKIca.valorBase = double.Parse(rdDetalleFac.GetDouble(5).ToString()); //tributosWRKIca.valorImporte = rdDetalleFac.GetDouble(5) * 0; //TotalGravadoIca = TotalGravadoIca + rdDetalleFac.GetDouble(5); //tributosWRKIca.tributoFijoUnidades = 0; //tributosWRKIca.tributoFijoValorImporte = 0; //listaTributos.Add(tributosWRKIca); lineaProducto.tributos = listaTributos; detalleProductos.Add(lineaProducto); nroLinea++; } catch (Exception sqlExp) { string error = sqlExp.Message + " " + sqlExp.StackTrace; throw; } } logFacturas.Info("Numero de productos procesados" + nroLinea); } else // Si No hay Detalle de Productos { logFacturas.Info("No se encontro Detalle de productos para la factura. " + strDetalleFac); } } else // No se encuentra Informacion de la Factura y Atencion { logFacturas.Info("No se encontro Informacion de Factura y Atencion." + qryFactura); } } documentoF2.detalles = detalleProductos; List <TributosItem> tributosTMP = new List <TributosItem>(); List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributos = new DetalleTributos() // Un Objeto por cada Tipo de Iva { valorImporte = 0, valorBase = TotalGravadoIva, porcentaje = 0 }; tributosDetalle.Add(detalleTributos); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = 0, detalles = tributosDetalle // DEtalle de los Ivas }; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP; ///<summary> ///Inicio de Totales de la Factura /// </summary> Totales totalesTmp = new Totales() { valorBruto = double.Parse(_Valtotal.ToString()), valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = TotalGravadoIva, valorTotalConImpuestos = double.Parse(_Valtotal.ToString()) + double.Parse(_ValImpuesto.ToString()), valorNeto = double.Parse(_ValCobrar.ToString()) }; documentoF2.totales = totalesTmp; logFacturas.Info("Numero de Productos Procesados, para JSon:" + detalleProductos.Count); try { //string urlConsumo = Properties.Settings.Default.urlFacturaElectronica + Properties.Settings.Default.recursoFacturaE; string urlConsumo = Properties.Settings.Default.urlFacturaElectronica;// + Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; request.Timeout = 30 * 1000; documentoF2.documento = facturaEnviar; string facturaJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Factura:" + facturaJson); request.Method = "POST"; request.ContentType = "application/json"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(facturaJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arreglo string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; logFacturas.Info("Codigo Status:" + response.StatusCode); logFacturas.Info("Descripcion Status:" + response.StatusDescription); StreamReader lectura = new StreamReader(response.GetResponseStream()); string strsb = lectura.ReadToEnd(); logFacturas.Info("Respuesta:" + strsb); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(strsb); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string strActualiza = @"UPDATE dbo.facFacturaTempWEBService SET identificador=@identificador WHERE IdFactura=@nrofactura"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, conn); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nrofactura", SqlDbType.Int).Value = nroFactura; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Factura Actualizada con UUID en facFacturaTempWEBService"); using (WebClient webClient = new WebClient()) { try { string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Factura...Terminada"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML...Terminada"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facFacturaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facFacturaTempWSAdvertencias(IdFactura,CodAdvertencia,FecRegistro,DescripcionAdv) VALUES(@IdFactura, @CodAdvertencia, @FecRegistro, @DescripcionAdv)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn); cmdInsertarAdvertencia.Parameters.Add("@IdFactura", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdFactura"].Value = nroFactura; cmdInsertarAdvertencia.Parameters["@CodAdvertencia"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionAdv"].Value = itemAdv.mensaje; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroFactura.ToString(); } } } else { logFacturas.Info($"No existen advertencias de DIAN !!! factura{nroFactura}"); valorRpta = nroFactura.ToString(); } valorRpta = nroFactura.ToString(); } else { logFacturas.Info("No fue Posible Realizar la Descarga de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info("Se ha presentado una Falla durante la descarga de los objetos de la factura:" + webEx1.Message + " " + webEx1.InnerException.Message); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info($"No fue posible descargar los archivos.PDF, XML y QR !!! Causa:{exx.Message} Pila:{exx.StackTrace}"); valorRpta = "98"; } } }
/// <summary> /// /Nota Credito Internacional. Con Iva. Monesa Extranjera y COP. /// </summary> /// <param name="nroNotaCredito"></param> /// <param name="idCliente"></param> /// <param name="nroAtencion"></param> /// <param name="monedaNota"></param> /// <param name="nroFactura"></param> /// <param name="urlPdfNotaCredito"></param> /// <returns></returns> public string getData(int nroNotaCredito, int idCliente, int nroAtencion, string monedaNota, int nroFactura, string urlPdfNotaCredito) { logFacturas.Info("Se recibe Nota Credito con siguientes datos:nroNota:" + nroNotaCredito + " IdCliente:" + idCliente + " nroAtencion:" + nroAtencion + " urlPdf:" + urlPdfNotaCredito); try { #region inicializar Decimal _Valtotal = 0; Decimal _ValPagos = 0; Decimal _ValCobrar = 0; DateTime _FecNotaCredito = DateTime.Now; Int32 _idMovimiento = 0; Int32 _idTercero = 0; Int32 _facturaRelacionada = 0; string _repLegal = string.Empty; string DescNota = string.Empty; Int16 _codigoCausal = 0; Int32 _tipoDocClienteDian = 0; double _valorImporteIva = 0; double _porcentajeIva = 0; double _totalBruto = 0; double _totalSinImpto = 0; double _totalConImpto = 0; double _valorNeto = 0; #endregion //Fin de Inicializacion documentoRoot documentoF2 = new documentoRoot(); Documento NotaCreditoEnviar = new Documento(); NotaCreditoEnviar.identificadorTransaccion = "D7F719C2 - 75F4 - 4F06 - B7CB - F583FC28DBEE"; NotaCreditoEnviar.URLPDF = urlPdfNotaCredito; NotaCreditoEnviar.NITFacturador = Properties.Settings.Default.NitHusi; NotaCreditoEnviar.prefijo = Properties.Settings.Default.PrefijoNotasNC; NotaCreditoEnviar.numeroDocumento = nroNotaCredito.ToString(); NotaCreditoEnviar.tipoDocumento = 2; NotaCreditoEnviar.subTipoDocumento = "91"; NotaCreditoEnviar.tipoOperacion = "10"; //Standar NotaCreditoEnviar.generaRepresentacionGrafica = false; bool facXRel = false; using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryEspeciales = "SELECT IdDestino,IndTipoFactura FROM facFactura where IdFactura=@idFactura"; SqlCommand cmdEspeciales = new SqlCommand(qryEspeciales, conn); cmdEspeciales.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdEspeciales = cmdEspeciales.ExecuteReader(); if (rdEspeciales.HasRows) { if (rdEspeciales.Read()) { if (rdEspeciales.GetInt32(0) == 0 && rdEspeciales.GetString(1) == "RAC") { facXRel = true; } } } } string urlClientes = string.Empty; if (idCliente == 0 && nroAtencion == 0 && !facXRel) { urlClientes = $"{Properties.Settings.Default.urlServicioClientes}ClienteInternacional?idFactura={nroFactura}"; } else { urlClientes = $"{Properties.Settings.Default.urlServicioClientes}ClienteJuridico?idFactura={nroFactura}"; } logFacturas.Info("URL de Request:" + urlClientes); HttpWebRequest peticion = WebRequest.Create(urlClientes) as HttpWebRequest; peticion.Method = "GET"; peticion.ContentType = "application/json"; HttpWebResponse respuestaClientes = peticion.GetResponse() as HttpWebResponse; StreamReader sr = new StreamReader(respuestaClientes.GetResponseStream()); string infCliente = sr.ReadToEnd(); logFacturas.Info("Cliente:" + infCliente); Cliente cliente = JsonConvert.DeserializeObject <Cliente>(infCliente); //****************** CLIENTE // Variables Inicializacion string _direccionCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _departamento = string.Empty; //int _localizacionCliente = 0; string _correoCliente = string.Empty; //**** string codCufeFactura = string.Empty; List <DetallesItem> detalleProductos = new List <DetallesItem>(); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); //string codCufeFact = "SELECT CodCUFE FROM facFacturaTempWEBService WHERE IdFactura=@idFactura"; string qrycodCufeFact = @"SELECT CodCufe FROM facFacturaTempWEBService WHERE idFactura = @idFactura UNION SELECT CodCufe FROM facFacturaTempWEBServiceHist WHERE idFactura = @idFactura"; SqlCommand cmdCodCufe = new SqlCommand(qrycodCufeFact, conn); cmdCodCufe.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdCufe = cmdCodCufe.ExecuteReader(); if (rdCufe.HasRows) { rdCufe.Read(); codCufeFactura = rdCufe.GetString(0); } else { List <ErroresItem> detalle = new List <ErroresItem>(); ErroresItem item = new ErroresItem(); item.codigo = "990102"; item.mensaje = "No se ha encontrado el CUFE, para la Factura afectada con esta Nota Credito. CUFE de Factura NO existe. Revisar SAHI"; detalle.Add(item); return(UtilidadRespuestas.insertarErrorND("NC", nroNotaCredito, "9901", "CUFE de la FacturaRelacionada No Encontado", DateTime.Now, detalle)); } string qryNotaCredito = @"SELECT B.IdCuenta,B.NumDocumento,B.IdCausal,B.fecMovimiento,B.FecRegistro,B.ValMonto,C.PorcentajeIVA,C.ValMontoIVA,C.FechaTRM,C.ValorTRM, cxcCta.IdCuenta,cxcCta.IdTercero,cxcCta.IdCliente,cxcCta.NomCliente,cxcCta.IdTipoDocCliente,cxcCta.NumDocumento,cxcCta.NumDocRespaldo,cxcCta.ValFactura, B.IdMovimiento,6 as 'Causal' FROM cxcTipoMovimientoEfectoNotas A INNER JOIN cxcCarteraMovi B ON A.IdTipoMovimiento=B.IdTipoMovimiento INNER JOIN cxcCuenta cxcCta ON cxcCta.IdCuenta=B.IdCuenta INNER JOIN cxcCarteraMoviNoNota C ON B.IdMovimiento=C.IdMovimiento WHERE A.Indhabilitado=1 AND C.IdNumeroNota=@nroNotaCredito AND A.IndTipoNota='C' AND ISNULL(C.ValorTRM,0)=0 UNION SELECT B.IdCuenta,B.NumDocumento,B.IdCausal,B.fecMovimiento,B.FecRegistro,c.ValMontoInte,c.PorcentajeIVA,c.ValMontoIVAInte,c.FechaTRM,c.ValorTRM, cxcCta.IdCuenta,cxcCta.IdTercero,cxcCta.IdCliente,cxcCta.NomCliente,cxcCta.IdTipoDocCliente,cxcCta.NumDocumento,cxcCta.NumDocRespaldo,cxcCta.ValFactura, B.IdMovimiento,6 as 'Causal' FROM cxcTipoMovimientoEfectoNotas A INNER JOIN cxcCarteraMovi B ON A.IdTipoMovimiento=B.IdTipoMovimiento INNER JOIN cxcCuenta cxcCta ON cxcCta.IdCuenta=B.IdCuenta INNER JOIN cxcCarteraMoviNoNota C ON B.IdMovimiento=C.IdMovimiento WHERE A.Indhabilitado=1 and C.IdNumeroNota=@nroNotaCredito and A.IndTipoNota='C' AND ISNULL(C.ValorTRM,0)>0"; SqlCommand cmdNotaCredito = new SqlCommand(qryNotaCredito, conn); cmdNotaCredito.Parameters.Add("@nroNotaCredito", SqlDbType.VarChar).Value = nroNotaCredito; SqlDataReader rdNotaCredito = cmdNotaCredito.ExecuteReader(); if (rdNotaCredito.HasRows) { rdNotaCredito.Read(); _idMovimiento = rdNotaCredito.GetInt32(18); var valorTNota = rdNotaCredito["ValMonto"]; _Valtotal = Decimal.Parse(valorTNota.ToString()); _ValCobrar = Decimal.Parse(valorTNota.ToString()); _FecNotaCredito = rdNotaCredito.GetDateTime(3); _facturaRelacionada = nroFactura; _idTercero = cliente.IdTercero; _codigoCausal = short.Parse(rdNotaCredito.GetInt32(19).ToString()); } else { List <ErroresItem> detalle = new List <ErroresItem>(); ErroresItem item = new ErroresItem(); item.codigo = "990101"; item.mensaje = "No hay informacion disponible de la Nota Credito, para obtener informacion necesaria. La Nota NO existe. Revisar SAHI"; detalle.Add(item); return(UtilidadRespuestas.insertarErrorND("NC", nroNotaCredito, "9901", "Informacion de la Nota Credito No Encontada", DateTime.Now, detalle)); } FormaPago formaPagoTmp = new FormaPago(); string formatoWrk = formatosFecha.formatofecha(_FecNotaCredito); NotaCreditoEnviar.fechaEmision = formatoWrk.Split('T')[0]; NotaCreditoEnviar.horaEmision = formatoWrk.Split('T')[1]; NotaCreditoEnviar.moneda = monedaNota; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; NotaCreditoEnviar.formaPago = formaPagoTmp; Adquiriente adquirienteTmp = new Adquiriente(); using (SqlConnection connXX = new SqlConnection(Properties.Settings.Default.DBConexion)) { connXX.Open(); string qryTipoDocDian = "SELECT TipoDocDian FROM homologaTipoDocDian WHERE IdTipoDoc=@tipoDoc"; SqlCommand cmdTipoDocDian = new SqlCommand(qryTipoDocDian, connXX); cmdTipoDocDian.Parameters.Add("@tipoDoc", SqlDbType.TinyInt).Value = cliente.TipoDoc_Cliente; logFacturas.Info($" cliente.TipoDoc_Cliente:{ cliente.TipoDoc_Cliente}"); Int16 tipoDoc = Int16.Parse(cmdTipoDocDian.ExecuteScalar().ToString()); _tipoDocClienteDian = Int32.Parse(tipoDoc.ToString()); logFacturas.Info($"_tipoDocClienteDian:{_tipoDocClienteDian}"); } adquirienteTmp.tipoIdentificacion = _tipoDocClienteDian; adquirienteTmp.identificacion = cliente.NroDoc_Cliente; adquirienteTmp.codigoInterno = cliente.IdTercero.ToString(); adquirienteTmp.razonSocial = cliente.NomTercero; adquirienteTmp.nombreSucursal = cliente.NomTercero; adquirienteTmp.correo = cliente.cuenta_correo.Trim().Split(';')[0]; if (cliente.telefono.Length > 10) { cliente.telefono = cliente.telefono.Substring(0, 10); } adquirienteTmp.telefono = cliente.telefono; if (cliente.idRegimen.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(cliente.cuenta_correo.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); NotaCreditoEnviar.notificaciones = notificaciones; //TODO: Aqui insertar lo que se defina de Responsabilidades RUT documentoF2.adquiriente.responsabilidadesRUT if (cliente.IdNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (cliente.IdNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } SqlCommand sqlValidaFactura = new SqlCommand("spFACEIdentificadorTipoOperaNota", conexion01); sqlValidaFactura.CommandType = CommandType.StoredProcedure; sqlValidaFactura.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdValidaFactura = sqlValidaFactura.ExecuteReader(); if (rdValidaFactura.HasRows) { rdValidaFactura.Read(); if (rdValidaFactura.GetInt32(0) == 0) { NotaCreditoEnviar.tipoOperacion = "10"; //Standar } else { NotaCreditoEnviar.tipoOperacion = "22"; //Standar } } else { logFacturas.Error($"No hay Datos de Factura, para la Factura:{nroFactura}"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = cliente.codigoPais; ubicacionCliente.departamento = cliente.Nombre_Depto; //ubicacionCliente.codigoMunicipio = cliente.codMunicipio; if (cliente.codigoPais == "CO") { ubicacionCliente.codigoMunicipio = cliente.codMunicipio;// "00000"; // se ajusta para factura 6180330 Cliente Internacional } else { ubicacionCliente.codigoMunicipio = "00000"; } ubicacionCliente.direccion = cliente.direccion; adquirienteTmp.ubicacion = ubicacionCliente; documentoF2.adquiriente = adquirienteTmp; double TotalGravadoIva = 0; //double TotalGravadoIca = 0; //************************************************************ Detalle de Nota Credito *********************************************************** using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); try { SqlCommand sqlValidaDet = new SqlCommand("spTraeDetalleNotasIVAMonExt", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idNota", SqlDbType.Int).Value = nroNotaCredito; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { while (rdValidaDet.Read()) { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdValidaDet.GetString(0); lineaProducto.valorCodigoInterno = codigoProducto; lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.descripcion = rdValidaDet.GetString(1); lineaProducto.unidades = double.Parse(rdValidaDet.GetInt32(2).ToString()); //Siempre es uno por definicion lineaProducto.unidadMedida = "94"; // rdDetalleFac.GetString(19); lineaProducto.valorUnitarioBruto = double.Parse(rdValidaDet.GetDecimal(3).ToString()); _totalSinImpto = double.Parse(rdValidaDet.GetDecimal(3).ToString()); lineaProducto.valorBruto = double.Parse(rdValidaDet.GetDecimal(3).ToString()); _totalBruto = double.Parse(rdValidaDet.GetDecimal(3).ToString()); _totalConImpto = double.Parse(rdValidaDet.GetDecimal(4).ToString()); _valorNeto = double.Parse(rdValidaDet.GetDecimal(4).ToString()); lineaProducto.valorBrutoMoneda = monedaNota; TibutosDetalle tributosWRKIva = new TibutosDetalle(); tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; tributosWRKIva.porcentaje = double.Parse(rdValidaDet.GetDecimal(9).ToString()); //******************************** _porcentajeIva = double.Parse(rdValidaDet.GetDecimal(9).ToString()); tributosWRKIva.valorBase = double.Parse(rdValidaDet.GetDecimal(3).ToString()); tributosWRKIva.valorImporte = double.Parse(rdValidaDet.GetDecimal(8).ToString()); _valorImporteIva = double.Parse(rdValidaDet.GetDecimal(8).ToString()); TotalGravadoIva = TotalGravadoIva + double.Parse(rdValidaDet.GetDecimal(3).ToString()); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); lineaProducto.tributos = listaTributos; detalleProductos.Add(lineaProducto); } } else { string qryTipoNota = @"SELECT IdMovimiento,NumDocumento,DesMovimiento,b.IdTipoHomologoDian from cxccarteramovi a inner join CXCTIPOMOVIMIENTOEFECTONOTAS b on a.idtipomovimiento=b.idtipomovimiento and b.indhabilitado=1 WHERE a.IdMovimiento=@idMovimiento"; SqlCommand cmdTipoNota = new SqlCommand(qryTipoNota, conexion01); cmdTipoNota.Parameters.Add("@idMovimiento", SqlDbType.Int).Value = _idMovimiento; SqlDataReader rdTipoNota = cmdTipoNota.ExecuteReader(); if (rdTipoNota.HasRows) { rdTipoNota.Read(); DescNota = rdTipoNota.GetString(2); DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = "NC1"; lineaProducto.valorCodigoInterno = codigoProducto; lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.descripcion = DescNota; lineaProducto.unidades = 1; // double.Parse(rdValidaDet.GetInt32(2).ToString()); lineaProducto.unidadMedida = "94"; // rdDetalleFac.GetString(19); lineaProducto.valorUnitarioBruto = double.Parse(_Valtotal.ToString()); lineaProducto.valorBruto = double.Parse(_Valtotal.ToString()); lineaProducto.valorBrutoMoneda = monedaNota; detalleProductos.Add(lineaProducto); } } } catch (Exception sqlExp) { string errorSQL = sqlExp.Message + " " + sqlExp.StackTrace; logFacturas.Warn("Se ha presentado una excepcion de SQL" + errorSQL); throw; } } string ObservacionesNota = string.Empty; string qryObservaciones = @"SELECT Top 1 isnull(b.NomCausal, A.DesMovimiento) Observacion FROM cxcCarteraMovi A LEFT JOIN genCausal B ON A.IdCausal = B.IdCausal WHERE IdMovimiento = @idMovimiento"; using (SqlCommand cmdObservaciones = new SqlCommand(qryObservaciones, conn)) { cmdObservaciones.Parameters.Add("@idMovimiento", SqlDbType.Int).Value = _idMovimiento; SqlDataReader rdObservaciones = cmdObservaciones.ExecuteReader(); if (rdObservaciones.HasRows) { rdObservaciones.Read(); ObservacionesNota = rdObservaciones.GetString(0); } else { if (_codigoCausal == 6) { ObservacionesNota = $"Nota Credito por Concepto de Otros Motivos No codificados Factura{nroFactura} "; } else if (_codigoCausal == 2) { ObservacionesNota = $"Anulacion de Factura:{nroFactura}"; } } } DocumentosAfectadosItem itemAfectado = new DocumentosAfectadosItem(); itemAfectado.numeroDocumento = $"{Properties.Settings.Default.Prefijo}-{_facturaRelacionada.ToString()}"; //todo: Ingresar el nro de Factura o Nota; itemAfectado.UUID = codCufeFactura; //todo:Ingresar el UUID del Docuemtno afectado itemAfectado.codigoCausal = _codigoCausal; //itemAfectado.fecha = formatosFecha.formatofecha(DateTime.Now); //todo: registrar fechz de la factura o Nota afectada List <string> observaciones = new List <string>(); observaciones.Add(ObservacionesNota); itemAfectado.observaciones = observaciones; List <DocumentosAfectadosItem> DocumentosAfectados = new List <DocumentosAfectadosItem>(); DocumentosAfectados.Add(itemAfectado); NotaCreditoEnviar.documentosAfectados = DocumentosAfectados; documentoF2.detalles = detalleProductos; List <TributosItem> tributosTMP = new List <TributosItem>(); List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributos = new DetalleTributos() // Un Objeto por cada Tipo de Iva { valorImporte = _valorImporteIva, valorBase = TotalGravadoIva, porcentaje = _porcentajeIva }; tributosDetalle.Add(detalleTributos); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = _valorImporteIva, detalles = tributosDetalle // Detalle de los Ivas }; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP; ///<summary> ///Inicio de Totales de la Factura /// </summary> Totales totalesTmp = new Totales() { valorBruto = _totalBruto, valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = _totalSinImpto, valorTotalConImpuestos = _totalConImpto,// + double.Parse(_ValImpuesto.ToString()), valorNeto = _valorNeto }; documentoF2.totales = totalesTmp; logFacturas.Info("Numero de Productos Procesados, para JSon:" + detalleProductos.Count); try { //string urlConsumo = Properties.Settings.Default.urlFacturaElectronica + Properties.Settings.Default.recursoFacturaE; string urlConsumo = Properties.Settings.Default.urlFacturaElectronica;// + Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; //request.Timeout = 60 * 1000; documentoF2.documento = NotaCreditoEnviar; string NotaCreditoJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Nota Credito::" + NotaCreditoJson); request.Method = "POST"; request.ContentType = "application/json"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(NotaCreditoJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arreglo string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; logFacturas.Info("Codigo Status:" + response.StatusCode); logFacturas.Info("Descripcion Status:" + response.StatusDescription); StreamReader lecturaDatos = new StreamReader(response.GetResponseStream()); string datosRespuesta = lecturaDatos.ReadToEnd(); logFacturas.Info("Respuesta:" + datosRespuesta); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(datosRespuesta); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection connUpdate = new SqlConnection(Properties.Settings.Default.DBConexion)) { connUpdate.Open(); string strActualiza = @"UPDATE dbo.facNotaTempWEBService SET identificador=@identificador WHERE IdNota=@nroNota AND IdTipoNota=@idTipoNota"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, connUpdate); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nroNota", SqlDbType.Int).Value = nroNotaCredito; cmdActualiza.Parameters.Add("@idTipoNota", SqlDbType.VarChar).Value = "NC"; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Nota Credito Actualizada con UUID en facNotaTempWEBService"); using (WebClient webClient = new WebClient()) { try { //string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfNC + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Nota Credito...Terminada en: {carpetaDescarga}"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfNC + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML(ZIP) Nota Credito...Terminada en {carpetaDescarga}"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facNotaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn3); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Nota Credito con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facNotaTempWSAdvertencias(IdNota,CodAdvertencia,FecRegistro,DescripcionAdv,idTipoNota) VALUES(@IdNota, @CodAdvertencia, @FecRegistro, @DescripcionAdv,@idTipoNota)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn3); cmdInsertarAdvertencia.Parameters.Add("@IdNota", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); cmdInsertarAdvertencia.Parameters.Add("@idTipoNota", SqlDbType.VarChar); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdNota"].Value = nroNotaCredito; cmdInsertarAdvertencia.Parameters["@CodAdvertencia"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionAdv"].Value = itemAdv.mensaje; cmdInsertarAdvertencia.Parameters["@idTipoNota"].Value = "NCE"; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroNotaCredito.ToString(); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroNotaCredito.ToString(); } } } valorRpta = nroNotaCredito.ToString(); } else { logFacturas.Info("No fue Posible Actualizar la Tabla facNotaTempWEBService de la Nota Credito con Identificador:" + respuesta.resultado.UUID); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info($"Se ha presentado una Falla durante la descarga de los objetos de la factura: {webEx1.Message} InnerException: {webEx1.InnerException.Message}"); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info("No fue posible descargar los archivos.PDF, XML y QR !!! Causa:" + exx.Message); valorRpta = "98"; } } } else { logFacturas.Info("!!! No fue posible Actualizar la Factura en la Tabla: facFacturaTempWEBService !!!"); } } } else { using (SqlConnection connError = new SqlConnection(Properties.Settings.Default.DBConexion)) { connError.Open(); string qryInsertaError = @"INSERT INTO facNotaTempWEBServiceError (IdTipoNota,IdNota,CodError,DescripcionError,FecRegistro) VALUES(@idTipo,@IdNota, @CodError, @DescripcionError, @FecRegistro)"; SqlCommand cmdInsertarError = new SqlCommand(qryInsertaError, connError); cmdInsertarError.Parameters.AddWithValue("@idTipo", SqlDbType.VarChar).Value = "NC"; cmdInsertarError.Parameters.Add("@IdNota", SqlDbType.Int).Value = nroNotaCredito; cmdInsertarError.Parameters.Add("@CodError", SqlDbType.VarChar).Value = respuesta.codigo; cmdInsertarError.Parameters.Add("@DescripcionError", SqlDbType.NVarChar).Value = respuesta.mensaje; cmdInsertarError.Parameters.Add("@FecRegistro", SqlDbType.DateTime).Value = DateTime.Parse(respuesta.fecha); if (cmdInsertarError.ExecuteNonQuery() > 0) { valorRpta = nroNotaCredito.ToString(); string qryDetErr = @"INSERT INTO facNotaTempWSErrorDetalle (IdNota,CodError,consecutivo,FecRegistro,DescripcionError) VALUES(@IdNota, @CodError, @consecutivo, @FecRegistro, @DescripcionError)"; SqlCommand cmdDetErr = new SqlCommand(qryDetErr, conn); cmdDetErr.Parameters.Add("@IdNota", SqlDbType.Int); cmdDetErr.Parameters.Add("@CodError", SqlDbType.VarChar); cmdDetErr.Parameters.Add("@consecutivo", SqlDbType.Int); cmdDetErr.Parameters.Add("@FecRegistro", SqlDbType.DateTime); cmdDetErr.Parameters.Add("@DescripcionError", SqlDbType.NVarChar); List <ErroresItem> listaErrores = new List <ErroresItem>(); int consecutivo = 1; foreach (ErroresItem itemErr in respuesta.errores) { cmdDetErr.Parameters["@IdNota"].Value = nroNotaCredito; cmdDetErr.Parameters["@CodError"].Value = itemErr.codigo; cmdDetErr.Parameters["@consecutivo"].Value = consecutivo; cmdDetErr.Parameters["@FecRegistro"].Value = DateTime.Parse(respuesta.fecha); cmdDetErr.Parameters["@DescripcionError"].Value = itemErr.mensaje; if (cmdDetErr.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Errores Nota Credito:codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); consecutivo++; } else { logFacturas.Info($"No es Posible Insertar Detalle de Errores Nota Credito: Codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } consecutivo++; } } else { valorRpta = "99"; } } } return(valorRpta); } catch (WebException wExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + wExp01.Message + " Pila de LLamados:" + wExp01.StackTrace); return("93"); } catch (NotSupportedException nsExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + nsExp01.Message + " Pila de LLamados:" + nsExp01.StackTrace); return("94"); } catch (ProtocolViolationException pexp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + pexp01.Message + " Pila de LLamados:" + pexp01.StackTrace); return("95"); } catch (InvalidOperationException inExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + inExp01.Message + " Pila de LLamados:" + inExp01.StackTrace); return("96"); } catch (HttpListenerException httpExp) { logFacturas.Warn("Se ha presentado una excepcion Http:" + httpExp.Message + " Pila de LLamados:" + httpExp.StackTrace); return("97"); } catch (Exception e) { logFacturas.Warn("Se ha presentado una excepcion:" + e.Message + " Pila de LLamados:" + e.StackTrace); return("98"); } } } catch (Exception ex1) { logFacturas.Warn("Se ha presentado una excepcion:" + ex1.Message + " Pila de LLamados:" + ex1.StackTrace); return("98"); } }
public string GetData(int nroFactura, int idCliente, string urlPdfFactura, string moneda) { #region Definicion de Factura logFacturas.Info($"****************************************************** Factura Numero: {nroFactura} ***********************************"); logFacturas.Info("Se recibe factura con siguientes datos nroFactura: " + nroFactura + " IdCliente:" + idCliente + " urlPdf:" + urlPdfFactura); try { decimal _Valtotal = 0; double TotalGravadoIva = 0; double TotalExcentoIva = 0; double ValorTotalIva = 0; Int32 ValorTasaIva = 0; double ValorBruto = 0; Decimal _ValPagos = 0; decimal _ValCobrar = 0; DateTime _FecFactura = DateTime.Now; Decimal _valorIva = 0; Int32 _IdUsuarioR = 0; Int32 _idTercero = 0; string _usrNombre = string.Empty; string _usrNumDocumento = string.Empty; string _numDocCliente = string.Empty; Byte _tipoDocCliente = 0; string _razonSocial = string.Empty; string _repLegal = string.Empty; string _RegimenFiscal = string.Empty; string _Ciudad = string.Empty; Int16 _idNaturaleza = 0; int concepto = 0; string _Pais = string.Empty; FormaPago formaPagoTmp = new FormaPago(); //Fin de Inicializacion documentoRoot documentoF2 = new documentoRoot(); Documento facturaEnviar = new Documento(); facturaEnviar.identificadorTransaccion = "cb601e82-f1c7-42fe-ba93-6afd6807137f"; facturaEnviar.URLPDF = urlPdfFactura; facturaEnviar.NITFacturador = Properties.Settings.Default.NitHusi; facturaEnviar.prefijo = Properties.Settings.Default.Prefijo; facturaEnviar.numeroDocumento = nroFactura.ToString(); facturaEnviar.tipoDocumento = 1; facturaEnviar.subTipoDocumento = "01"; facturaEnviar.tipoOperacion = "10"; facturaEnviar.generaRepresentacionGrafica = false; using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); //string qryFacturaEnc = @"SELECT b.numdocrespaldo,IdTipoDocRespaldo,B.IdTercero,B.IdCliente,nomcliente,IdTipoDocCliente,B.NumDocumento,ValMonto,ValSaldo,FecRegistroC,FecRadicacion,IndEstado,ValFactura,a.IdUsuarioR,t.NomTercero,t.IdNaturaleza from cxcfacmanual a //inner join cxccuenta b on a.idcuenta=b.idcuenta //inner join genTercero t ON b.IdTercero=t.IdTercero //WHERE b.numdocrespaldo=@nroFactura"; string qryFacturaEnc = @"SELECT b.numdocrespaldo,IdTipoDocRespaldo,B.IdTercero,B.IdCliente,nomcliente,tdoc.TipoDocDian,B.NumDocumento,ValMonto,ValSaldo,FecRegistroC,FecRadicacion,IndEstado,ValFactura,a.IdUsuarioR,t.NomTercero,t.IdNaturaleza from cxcfacmanual a inner join cxccuenta b on a.idcuenta=b.idcuenta inner join genTercero t ON b.IdTercero=t.IdTercero inner join homologaTipoDocDian tdoc on b.IdTipoDocCliente=tdoc.IdTipoDoc WHERE b.numdocrespaldo=@nroFactura"; //**************REvisar los campos que se afectan SqlCommand cmdFacturaEnc = new SqlCommand(qryFacturaEnc, conn); cmdFacturaEnc.Parameters.Add("@nroFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdFacturaEnc = cmdFacturaEnc.ExecuteReader(); if (rdFacturaEnc.HasRows) { rdFacturaEnc.Read(); string valorTf = Math.Round(rdFacturaEnc.GetDouble(12), 0).ToString(); _Valtotal = Decimal.Parse(valorTf); _ValPagos = 0; _ValCobrar = Decimal.Parse(Math.Round(rdFacturaEnc.GetDouble(12), 0).ToString()); _FecFactura = rdFacturaEnc.GetDateTime(9); _IdUsuarioR = rdFacturaEnc.GetInt32(13); _numDocCliente = rdFacturaEnc.GetString(6); _tipoDocCliente = rdFacturaEnc.GetByte(5); _razonSocial = rdFacturaEnc.GetString(4); _repLegal = rdFacturaEnc.GetString(4); _idTercero = rdFacturaEnc.GetInt32(2); _idNaturaleza = rdFacturaEnc.GetInt16(15); } else { return("No se encontro Informacion General de Encabezado de Factura."); } if (_ValPagos > 0) { string Consultapagos = "SELECT IdConcepto FROM facFacAtenConcepto WHERE IdFactura=@idFactura"; SqlCommand cmdConsultaPagos = new SqlCommand(Consultapagos, conn); cmdConsultaPagos.Parameters.Add("@idfactura", SqlDbType.Int).Value = nroFactura; concepto = int.Parse(cmdConsultaPagos.ExecuteScalar().ToString()); } } string formatoWrk = formatosFecha.formatofecha(_FecFactura); facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = "COP"; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; List <DetallesItem> detalleProductos = new List <DetallesItem>(); //****************** CLIENTE // Variables Inicializacion string _direccionCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _departamento = string.Empty; int _localizacionCliente = 0; string _correoCliente = string.Empty; using (SqlConnection connx = new SqlConnection(Properties.Settings.Default.DBConexion)) { connx.Open(); string qryDatosCliente1 = @"SELECT IdLocalizaTipo,DesLocalizacion,B.nom_dipo,A.IdLugar,SUBSTRING(B.cod_dipo,5,5) AS 'Ciudad', pd.CodigoAlfa2,pd.NombreComun,c.nom_dipo as Depto, substring(c.cod_dipo, 5, 2) as CodDepto FROM genTerceroLocaliza A LEFT JOIN GEN_DIVI_POLI B ON A.IdLugar = B.IdLugar INNER JOIN GEN_PAISES_DIAN AS pd ON cod_dipo_sahi = substring(cod_dipo, 1, 3) inner join GEN_DIVI_POLI as c ON substring(c.cod_dipo,1,6) = substring(b.cod_dipo, 1, 6) AND c.tip_dipo = 'D' WHERE IdTercero = @idTercero and IdLocalizaTipo IN(2, 3) ORDER BY IdLocalizaTipo "; SqlCommand cmdDatosCliente1 = new SqlCommand(qryDatosCliente1, connx); cmdDatosCliente1.Parameters.Add("@idTercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdDatosCliente1 = cmdDatosCliente1.ExecuteReader(); if (rdDatosCliente1.HasRows) { while (rdDatosCliente1.Read()) { if (rdDatosCliente1.GetInt32(0) == 2) { _direccionCliente = rdDatosCliente1.GetString(1); _localizacionCliente = rdDatosCliente1.GetInt32(3); _Pais = rdDatosCliente1.GetString(5); _Ciudad = rdDatosCliente1.GetString(2); _departamento = rdDatosCliente1.GetString(7); if (rdDatosCliente1.GetSqlString(5) == "CO") { _municipioCliente = rdDatosCliente1.GetString(4); } else { _municipioCliente = "00000"; //Ajustado Para Facturas Administrativas, Clientes Extranjeros, Facturado eb Pessos 2020-08-03 } } else if (rdDatosCliente1.GetInt32(0) == 3) { _telefonoCliente = rdDatosCliente1.GetString(1); if (_telefonoCliente.Length > 10) { _telefonoCliente = _telefonoCliente.Substring(0, 10); } else if (_telefonoCliente.Length == 0) { _telefonoCliente = "5716519494"; } } } } else { _telefonoCliente = "5716519494"; } string qryDatosCliente2 = @"SELECT COD_DEPTO,COD_MPIO,DPTO,NOM_MPIO FROM GEN_DIVI_POLI A INNER JOIN HUSI_Divipola HB ON a.num_ptel=COD_DEPTO WHERE a.IdLugar=@idLugar"; SqlCommand cmdDatosCliente2 = new SqlCommand(qryDatosCliente2, connx); cmdDatosCliente2.Parameters.Add("@idLugar", SqlDbType.Int).Value = _localizacionCliente; SqlDataReader rdDatosCliente2 = cmdDatosCliente2.ExecuteReader(); if (rdDatosCliente2.HasRows && _Pais == "CO") { rdDatosCliente2.Read(); _departamento = rdDatosCliente2.GetString(2); } string qryDatosCliente3 = @"SELECT A.Correo FROM concontratocorreo A INNER JOIN facFactura B ON A.IdContrato=B.IdContrato WHERE A.indhabilitado=1 AND B.idFactura=@idFactura UNION ALL SELECT A.Deslocalizacion As Correo FROM gentercerolocaliza A INNER JOIN conContrato C ON C.IdTercero=A.IdTercero INNER JOIN facFactura D ON D.IdContrato=C.IdContrato LEFT JOIN concontratocorreo B ON B.indhabilitado=1 and B.idcontrato=D.IdContrato WHERE B.idcontrato is null and A.IdLocalizaTipo=1 and A.indhabilitado=1 and D.IdFactura=@idFactura"; SqlCommand cmdDatosCliente3 = new SqlCommand(qryDatosCliente3, connx); cmdDatosCliente3.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDatosCliente3 = cmdDatosCliente3.ExecuteReader(); if (rdDatosCliente3.HasRows) { rdDatosCliente3.Read(); if (rdDatosCliente3.IsDBNull(0)) { _correoCliente = "*****@*****.**"; } else { if (rdDatosCliente3.GetString(0).Length == 0) { _correoCliente = "*****@*****.**"; } else { _correoCliente = rdDatosCliente3.GetString(0); } } } else { _correoCliente = "*****@*****.**"; } List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(_correoCliente.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); if (_correoCliente.Length > 0) { facturaEnviar.notificaciones = notificaciones; } Adquiriente adquirienteTmp = new Adquiriente(); adquirienteTmp.identificacion = _numDocCliente; adquirienteTmp.tipoIdentificacion = _tipoDocCliente; adquirienteTmp.codigoInterno = _idTercero.ToString(); adquirienteTmp.razonSocial = _razonSocial; adquirienteTmp.nombreSucursal = _razonSocial; adquirienteTmp.correo = _correoCliente.Trim().Split(';')[0]; if (_telefonoCliente.Length == 0) { _telefonoCliente = "5716519494"; } adquirienteTmp.telefono = _telefonoCliente; if (_RegimenFiscal.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } //TODO: Aqui insertar lo que se defina de Responsabilidades RUT documentoF2.adquiriente.responsabilidadesRUT if (_idNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (_idNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = _Pais; ubicacionCliente.codigoMunicipio = _municipioCliente; ubicacionCliente.ciudad = _Ciudad; ubicacionCliente.direccion = _direccionCliente; adquirienteTmp.ubicacion = ubicacionCliente; ubicacionCliente.departamento = _departamento; documentoF2.adquiriente = adquirienteTmp; documentoF2.documento = facturaEnviar; List <AnticiposItem> anticiposWrk = new List <AnticiposItem>(); AnticiposItem anticipoWrk = new AnticiposItem(); anticipoWrk.comprobante = "22"; anticipoWrk.valorAnticipo = double.Parse(_ValPagos.ToString()); anticiposWrk.Add(anticipoWrk); documentoF2.anticipos = anticiposWrk; //************************************************************ Detalle de Factura por Administrativa ********************************************* using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open();//***este select sigue igual, con 4 columnas string strDetalleFac = @"SELECT top 1000 b.numdocrespaldo as factura,CONVERT(VARCHAR,c.IdCuenta)+'-'+CONVERT(varchar,C.num_regi) AS codProducto,c.Descripcion,c.Cantidad,c.val_unit, c.val_unit*c.Cantidad as valBruto,ISNULL(c.Vr_IVA,0) AS ValorIva,ISNULL(c.Porcen_IVA,0) as 'PorcentajeIva',c.* FROM cxcfacmanual a INNER JOIN cxccuenta b on a.idcuenta = b.idcuenta INNER JOIN cxcfacmanualconc c on c.IdCuenta = a.idcuenta WHERE c.val_unit_inte is null and NumDocRespaldo = @idFactura ORDER BY c.num_regi"; SqlCommand cmdDetalleFac = new SqlCommand(strDetalleFac, conexion01); cmdDetalleFac.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDetalleFac = cmdDetalleFac.ExecuteReader(); if (rdDetalleFac.HasRows) { Int16 nroLinea = 1; while (rdDetalleFac.Read()) { try { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); //Tributos para lalinea de producto DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdDetalleFac.GetString(1); lineaProducto.descripcion = rdDetalleFac.GetString(2); lineaProducto.valorCodigoInterno = codigoProducto; lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.unidades = double.Parse(rdDetalleFac.GetInt32(3).ToString()); lineaProducto.unidadMedida = "94"; lineaProducto.valorUnitarioBruto = double.Parse(rdDetalleFac.GetSqlMoney(4).ToString()); lineaProducto.valorBruto = double.Parse(rdDetalleFac.GetSqlMoney(5).ToString()); lineaProducto.valorBrutoMoneda = "COP"; ValorBruto += double.Parse(rdDetalleFac.GetSqlMoney(5).ToString()); TibutosDetalle tributosWRKIva = new TibutosDetalle(); //Detalle de tributos, para el producto tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; tributosWRKIva.porcentaje = double.Parse(rdDetalleFac.GetInt32(16).ToString()).TomarDecimales(2); tributosWRKIva.valorBase = double.Parse(rdDetalleFac.GetSqlMoney(5).ToString()); tributosWRKIva.valorImporte = double.Parse(rdDetalleFac.GetSqlDouble(6).ToString()).TomarDecimales(2); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); lineaProducto.tributos = listaTributos; if (rdDetalleFac.GetInt32(16) > 0) { ValorTasaIva = rdDetalleFac.GetInt32(16); TotalGravadoIva += double.Parse(rdDetalleFac.GetSqlMoney(5).ToString()); ValorTotalIva += double.Parse(rdDetalleFac.GetSqlDouble(6).ToString()).TomarDecimales(2); } else { TotalExcentoIva += double.Parse(rdDetalleFac.GetSqlMoney(5).ToString()); } detalleProductos.Add(lineaProducto); nroLinea++; // Para moneda extranjera:vr_Total_Inte-vr_IVA_Inte de la tabla } catch (Exception sqlExp) { string error = $"Mensaje de Error:{sqlExp.Message} Traza de la Pila:{sqlExp.StackTrace}"; logFacturas.Warn($"Se ha presentado una Excepcion:{error}"); throw; } } } else // Si No hay Detalle de Productos { } } #endregion //***************************** Finalizacion Y Liquidacion ************************************************************************************** documentoF2.detalles = detalleProductos; ///<summary> List <TributosItem> tributosTMP = new List <TributosItem>(); //Segmento de Iva pata Totales de Factura List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributosItem = new DetalleTributos(); // Un Objeto por cada Tipo de Iva //***estos valores se deben tomar del select o Tabla //double valorImporte = double.Parse(_valorIva.ToString()); //double valorBase = double.Parse((_Valtotal - _valorIva).ToString()); //double porcentaje = Math.Round(((valorImporte / valorBase) * 100).TomarDecimales(2), 0); //detalleTributosItem.valorImporte = valorImporte; //detalleTributosItem.valorBase = valorBase; //detalleTributosItem.porcentaje = porcentaje; detalleTributosItem.valorImporte = ValorTotalIva; detalleTributosItem.valorBase = TotalGravadoIva; detalleTributosItem.porcentaje = double.Parse(ValorTasaIva.ToString()).TomarDecimales(2); tributosDetalle.Add(detalleTributosItem); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = ValorTotalIva, detalles = tributosDetalle // Detalle de los Ivas }; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP;/// Totales totalesTmp = new Totales() { valorBruto = ValorBruto, // double.Parse(ValorBruto.ToString()), valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = ValorBruto, valorTotalConImpuestos = ValorBruto - double.Parse(_ValPagos.ToString()) + double.Parse(ValorTotalIva.ToString()), valorNeto = ValorBruto - double.Parse(_ValPagos.ToString()) + double.Parse(ValorTotalIva.ToString()) //double.Parse(_ValCobrar.ToString()) }; documentoF2.totales = totalesTmp; logFacturas.Info("Numero de Productos procesados, para JSon:" + detalleProductos.Count); try { string urlConsumo = Properties.Settings.Default.urlFacturaElectronica; //+ Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; request.Timeout = 60 * 1000; string facturaJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Factura:" + facturaJson); request.Method = "POST"; request.ContentType = "application/json"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(facturaJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arregle string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; logFacturas.Info("Codigo Status:" + response.StatusCode); logFacturas.Info("Descripcion Status:" + response.StatusDescription); StreamReader sr = new StreamReader(response.GetResponseStream()); string strsb = sr.ReadToEnd(); logFacturas.Info("Respuesta Recibida Transfiriendo:" + strsb); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(strsb); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string strActualiza = @"UPDATE dbo.facFacturaTempWEBService SET identificador=@identificador WHERE IdFactura=@nrofactura"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, conn); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nrofactura", SqlDbType.Int).Value = nroFactura; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Factura Actualizada con UUID en facFacturaTempWEBService"); using (WebClient webClient = new WebClient()) { try { string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Factura...Terminada"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML...Terminada"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facFacturaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facFacturaTempWSAdvertencias(IdFactura,CodAdvertencia,FecRegistro,DescripcionAdv) VALUES(@IdFactura, @CodAdvertencia, @FecRegistro, @DescripcionAdv)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn); cmdInsertarAdvertencia.Parameters.Add("@IdFactura", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdFactura"].Value = nroFactura; cmdInsertarAdvertencia.Parameters["@CodError"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionError"].Value = itemAdv.mensaje; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); } } } valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No fue Posible Realizar la Descarga de Archivos de la Factura con Identificadotr:{respuesta.resultado.UUID} Estado Proceso de Factura:{respuesta.esExitoso}"); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info("Se ha presentado una Falla durante la descarga de los objetos de la factura:" + webEx1.Message + " " + webEx1.InnerException.Message); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info($"No fue posible descargar los archivos.PDF, XML y QR !!! Causa:{exx.Message} Pila:{exx.StackTrace}"); valorRpta = "98"; } } } else { valorRpta = "98"; logFacturas.Info("!!! No fue posible Actualizar la Factura en la Tabla: facFacturaTempWEBService !!!"); } } return(valorRpta); } else { using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryInsertaError = @"INSERT INTO facFacturaTempWEBServiceError (IdFactura,CodError,DescripcionError,FecRegistro) VALUES(@IdFactura, @CodError, @DescripcionError, @FecRegistro)"; SqlCommand cmdInsertarError = new SqlCommand(qryInsertaError, conn); cmdInsertarError.Parameters.Add("@IdFactura", SqlDbType.Int).Value = nroFactura; cmdInsertarError.Parameters.Add("@CodError", SqlDbType.VarChar).Value = respuesta.codigo; cmdInsertarError.Parameters.Add("@DescripcionError", SqlDbType.NVarChar).Value = respuesta.mensaje; cmdInsertarError.Parameters.Add("@FecRegistro", SqlDbType.DateTime).Value = DateTime.Parse(respuesta.fecha); if (cmdInsertarError.ExecuteNonQuery() > 0) { valorRpta = nroFactura.ToString(); string qryDetErr = @"INSERT INTO facFacturaTempWSErrorDetalle (IdFactura,CodError,consecutivo,FecRegistro,DescripcionError) VALUES(@IdFactura, @CodError, @consecutivo, @FecRegistro, @DescripcionError)"; SqlCommand cmdDetErr = new SqlCommand(qryDetErr, conn); cmdDetErr.Parameters.Add("@IdFactura", SqlDbType.Int); cmdDetErr.Parameters.Add("@CodError", SqlDbType.VarChar); cmdDetErr.Parameters.Add("@consecutivo", SqlDbType.Int); cmdDetErr.Parameters.Add("@FecRegistro", SqlDbType.DateTime); cmdDetErr.Parameters.Add("@DescripcionError", SqlDbType.NVarChar); List <ErroresItem> listaErrores = new List <ErroresItem>(); int consecutivo = 1; foreach (ErroresItem itemErr in respuesta.errores) { cmdDetErr.Parameters["@IdFactura"].Value = nroFactura; cmdDetErr.Parameters["@CodError"].Value = itemErr.codigo; cmdDetErr.Parameters["@consecutivo"].Value = consecutivo; cmdDetErr.Parameters["@FecRegistro"].Value = DateTime.Parse(respuesta.fecha); cmdDetErr.Parameters["@DescripcionError"].Value = itemErr.mensaje; if (cmdDetErr.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Errores:codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Errores: Codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } } } else { valorRpta = "99"; } } } return(valorRpta); // } //else //{ // logFacturas.Info("!!! Recuperacion Documentos de la Factura, No fue posible. No se Actualiza la Factura en facFacturaTempWEBService !!!"); // logFacturas.Warn("Respuesta recibida:" + strsb); // //*Aqui se debe insertar en la tabla de fallas // return "Recuperacion Documentos de la Factura, No fue posible. No se Actualiza la Factura en facFacturaTempWEBService"; //} } catch (WebException wExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + wExp01.Message + " Pila de LLamados:" + wExp01.StackTrace); return("93"); } catch (NotSupportedException nsExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + nsExp01.Message + " Pila de LLamados:" + nsExp01.StackTrace); return("94"); } catch (ProtocolViolationException pexp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + pexp01.Message + " Pila de LLamados:" + pexp01.StackTrace); return("95"); } catch (InvalidOperationException inExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + inExp01.Message + " Pila de LLamados:" + inExp01.StackTrace); return("96"); } catch (HttpListenerException httpExp) { logFacturas.Warn("Se ha presentado una excepcion Http:" + httpExp.Message + " Pila de LLamados:" + httpExp.StackTrace); return("97"); } catch (Exception e) { logFacturas.Warn("Se ha presentado una excepcion:" + e.Message + " Pila de LLamados:" + e.StackTrace); return("98"); } } } catch (Exception exp) { logFacturas.Warn("Se ha presentado una Excepcion:" + exp.Message + "Pila de LLamadas:" + exp.StackTrace); return("99"); } }
public string GetData(int nroFactura, int idCliente, int nroAtencion, string urlPdfFactura) { logFacturas.Info("Se recibe factura con siguietnes datos:Factura por Relacion:" + nroFactura + " IdCliente:" + idCliente + " nroAtencion:" + nroAtencion + " urlPdf:" + urlPdfFactura); try { Int32 _idContrato = 0; Decimal _Valtotal = 0; Decimal _ValDescuento = 0; Decimal _ValDescuentoT = 0; Decimal _ValPagos = 0; Decimal _ValImpuesto = 0; Decimal _ValCobrar = 0; DateTime _FecFactura = DateTime.Now; Decimal _valPos = 0; Decimal _valNoPos = 0; Int32 _IdUsuarioR = 0; Int32 _idTercero = 0; string _usrNombre = string.Empty; string _usrNumDocumento = string.Empty; Byte _usrIdTipoDoc = 0; string _numDocCliente = string.Empty; Byte _tipoDocCliente = 0; string _razonSocial = string.Empty; string _repLegal = string.Empty; string _RegimenFiscal = string.Empty; Int16 _idNaturaleza = 0; int concepto = 0; FormaPago formaPagoTmp = new FormaPago(); documentoRoot documentoF2 = new documentoRoot(); Documento facturaEnviar = new Documento(); facturaEnviar.identificadorTransaccion = "D7F719C2 - 75F4 - 4F06 - B7CB - F583FC28DBEE"; facturaEnviar.URLPDF = urlPdfFactura; facturaEnviar.NITFacturador = Properties.Settings.Default.NitHusi; facturaEnviar.prefijo = Properties.Settings.Default.Prefijo; facturaEnviar.numeroDocumento = nroFactura.ToString(); facturaEnviar.tipoDocumento = 1; facturaEnviar.subTipoDocumento = "01"; facturaEnviar.tipoOperacion = "10"; facturaEnviar.generaRepresentacionGrafica = false; using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryFacturaEnc = @"SELECT fact.idContrato,Valtotal,ValDescuento,ValDescuentoT,ValPagos,ValImpuesto,ValCobrar,FecFactura,valPos,valNoPos,fact.IdUsuarioR, usr.nom_usua,usr.NumDocumento,usr.IdTipoDoc,ter.NumDocumento,ter.IdTipoDoc,ter.NomTercero,ter.CodTercero,con.NomRepComercial,ter.IdTercero,ter.idRegimen,ter.IdNaturaleza FROM facFactura fact INNER JOIN ASI_USUA usr ON fact.IdUsuarioR = usr.IdUsuario INNER JOIN conContrato con ON fact.IdContrato=con.IdContrato INNER JOIN genTercero ter ON con.IdTercero=ter.IdTercero WHERE IdFactura = @nroFactura"; SqlCommand cmdFacturaEnc = new SqlCommand(qryFacturaEnc, conn); cmdFacturaEnc.Parameters.Add("@nroFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdFacturaEnc = cmdFacturaEnc.ExecuteReader(); if (rdFacturaEnc.HasRows) { rdFacturaEnc.Read(); _idContrato = rdFacturaEnc.GetInt32(0); _Valtotal = Math.Round(rdFacturaEnc.GetDecimal(1), 0); _ValDescuento = Math.Round(rdFacturaEnc.GetDecimal(2), 0); _ValDescuentoT = Math.Round(rdFacturaEnc.GetDecimal(3), 0); _ValPagos = Math.Round(rdFacturaEnc.GetDecimal(4), 0); _ValImpuesto = Math.Round(rdFacturaEnc.GetDecimal(5), 0); _ValCobrar = Math.Round(rdFacturaEnc.GetDecimal(6), 0); _FecFactura = rdFacturaEnc.GetDateTime(7); if (rdFacturaEnc.IsDBNull(8)) { _valPos = 0; } else { _valPos = Math.Round(rdFacturaEnc.GetDecimal(8), 0); } if (rdFacturaEnc.IsDBNull(9)) { _valNoPos = 0; } else { _valNoPos = Math.Round(rdFacturaEnc.GetDecimal(9), 0); } _IdUsuarioR = rdFacturaEnc.GetInt32(10); _usrNombre = rdFacturaEnc.GetString(11); _usrNumDocumento = rdFacturaEnc.GetString(12); _usrIdTipoDoc = rdFacturaEnc.GetByte(13); _numDocCliente = rdFacturaEnc.GetString(14); _tipoDocCliente = rdFacturaEnc.GetByte(15); _razonSocial = rdFacturaEnc.GetString(16); _repLegal = rdFacturaEnc.GetString(18); _idTercero = rdFacturaEnc.GetInt32(19); _RegimenFiscal = rdFacturaEnc.GetString(20); _idNaturaleza = rdFacturaEnc.GetInt16(21); } if (_ValPagos > 0) { string Consultapagos = "SELECT IdConcepto FROM facFacAtenConcepto WHERE IdFactura=@idFactura"; SqlCommand cmdConsultaPagos = new SqlCommand(Consultapagos, conn); cmdConsultaPagos.Parameters.Add("@idfactura", SqlDbType.Int).Value = nroFactura; concepto = int.Parse(cmdConsultaPagos.ExecuteScalar().ToString()); } } string formatoWrk = formatosFecha.formatofecha(_FecFactura); facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = "COP"; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; List <DetallesItem> detalleProductos = new List <DetallesItem>(); //****************** CLIENTE // Variables Inicializacion string _direccionCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _departamento = string.Empty; int _localizacionCliente = 0; string _correoCliente = string.Empty; #region MyRegion //**** //eFactura facturaEnviar = new eFactura(); //AdditionalInformation iteminfAdicionalEnc = new AdditionalInformation(); //List<AdditionalInformation> InformacionAdicionalEn = new List<AdditionalInformation>(); //if (concepto == 1 && concepto > 0) //{ // InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "2", Value = _ValPagos.ToString() }); // InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "3", Value = "0" }); //} //else //{ // InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "2", Value = "0" }); // InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "3", Value = _ValPagos.ToString() }); //} //Data objData = new Data //{ // UrlPdf = urlPdfFactura //}; //OriginalRequest peticion = new OriginalRequest //{ // //Currency = _monedaFactura, // EventName = "FAC-SYNC", // DocumentType = "Invoice", // BroadCastDate = DateTime.Now.ToString("yyyy-MM-dd"), // BroadCastTime = DateTime.Now.ToString("HH:mm:ss"), // IdMotivo = "1", // BillType = "1", // InvoiceId = nroFactura.ToString(), // Prefix = Properties.Settings.Default.Prefijo, // IdBusiness = "860015536", // AdditionalInformation = InformacionAdicionalEn //}; //peticion.DocumentType = "01"; //TODO:Agregar todos los campos adicionales //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "3", Value = "Codigo Habilitacion HUSI" }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "4", Value = "0" }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "5", Value = 0.ToString() }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "6", Value = nroAtencion.ToString() }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "7", Value = "2018-09-16" }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "8", Value = "2018-09-23" }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "9", Value = "0" }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "10", Value = "0" }); //InformacionAdicionalEn.Add(new AdditionalInformation() { Position = "11", Value = "false" }); //// SellerSupplierParty datosHUSI = new SellerSupplierParty(); //AccountingCustomerParty Cliente = new AccountingCustomerParty(); //Address objDireccionHusi = new Address(); //Address1 objDireccionCliente = new Address1(); //TaxTotal ivaFactura = new TaxTotal(); //TaxTotal ipoconsumoFactura = new TaxTotal(); //TaxTotal icaFactura = new TaxTotal(); //List<TaxTotal> impuestosFactura = new List<TaxTotal>(); //LegalMonetaryTotal subtotalesFactura = new LegalMonetaryTotal(); //LineExtensionAmount lineaExtCant = new LineExtensionAmount(); //TaxExclusiveAmount totalImpuesto = new TaxExclusiveAmount(); //PayableAmount totalPagar = new PayableAmount(); //Contract contrato = new Contract(); //Party datosHospital = new Party(); //Party1 datosCliente = new Party1(); //PhysicalLocation ubicacionFisicaHusi = new PhysicalLocation(); //PhysicalLocation1 ubicacionFisicaCliente = new PhysicalLocation1(); //PartyTaxScheme RegimenImpuesto = new PartyTaxScheme(); //PartyTaxScheme RegimenCliente = new PartyTaxScheme(); //PartyIdentification idenHusi = new PartyIdentification(); //PartyIdentification idenCliente = new PartyIdentification(); //Person repLegalHusi = new Person(); //Person1 repLegalCliente = new Person1(); ////********** Definicion Elementos del Detalle de Factura //List<DocumentLine> detalleProductos = new List<DocumentLine>(); //SubDetalle subDetProducto = new SubDetalle(); //TaxAmount taxIVA = new TaxAmount(); //TaxAmount taxCONSUMO = new TaxAmount(); //TaxAmount taxICA = new TaxAmount(); //TaxableAmount camposAdicionalesICA = new TaxableAmount(); ////********** Fin Definicion de Detalle de Factura //contrato.ID = _idContrato.ToString(); //contrato.IssueDate = _FecFactura.ToString("yyyy-MM-dd"); //contrato.ContractType = "1"; //// datosHUSI.Contract = contrato; ////********** //// datosHUSI.AdditionalAccountID = "1"; //datosHospital.Name = "Hospital Universitario San Ignacio"; //idenHusi.ID = "860015536"; //idenHusi.SchemeID = "31"; //datosHospital.PartyIdentification = idenHusi; //objDireccionHusi.Line = "Kra 7 No. 40-62"; //objDireccionHusi.CityName = "Bogota D.C"; //objDireccionHusi.CountryCode = "57"; //objDireccionHusi.Department = "Cundinamarca"; //ubicacionFisicaHusi.Address = objDireccionHusi; //datosHospital.PhysicalLocation = ubicacionFisicaHusi; //repLegalHusi.FirstName = "JULIO"; //repLegalHusi.MiddleName = "CESAR"; //repLegalHusi.FamilyName = "CASTELLANOS RAMIREZ"; //datosHospital.Person = repLegalHusi; //RegimenImpuesto.TaxLevelCode = "2"; //datosHospital.PartyTaxScheme = RegimenImpuesto; //// datosHUSI.Party = datosHospital; ////****************** CLIENTE //// Variables Inicializacion //string _direccionCliente = string.Empty; //string _telefonoCliente = string.Empty; //string _municipioCliente = string.Empty; //string _departamento = string.Empty; //int _localizacionCliente = 0; //string _correoCliente = string.Empty; ////**** #endregion using (SqlConnection connx = new SqlConnection(Properties.Settings.Default.DBConexion)) { connx.Open(); string qryDatosCliente1 = @"SELECT IdLocalizaTipo,DesLocalizacion,B.nom_dipo,A.IdLugar,RIGHT(B.cod_dipo,5) FROM genTerceroLocaliza A LEFT JOIN GEN_DIVI_POLI B ON A.IdLugar=B.IdLugar WHERE IdTercero=@idTercero and IdLocalizaTipo IN (2,3) ORDER BY IdLocalizaTipo"; SqlCommand cmdDatosCliente1 = new SqlCommand(qryDatosCliente1, connx); cmdDatosCliente1.Parameters.Add("@idTercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdDatosCliente1 = cmdDatosCliente1.ExecuteReader(); if (rdDatosCliente1.HasRows) { while (rdDatosCliente1.Read()) { if (rdDatosCliente1.GetInt32(0) == 2) { _direccionCliente = rdDatosCliente1.GetString(1); _municipioCliente = rdDatosCliente1.GetString(4); _localizacionCliente = rdDatosCliente1.GetInt32(3); } else if (rdDatosCliente1.GetInt32(0) == 3) { _telefonoCliente = rdDatosCliente1.GetString(1); if (_telefonoCliente.Length > 10) { _telefonoCliente = _telefonoCliente.Substring(0, 10); } } } } string qryDatosCliente2 = @"SELECT COD_DEPTO,COD_MPIO,DPTO,NOM_MPIO FROM GEN_DIVI_POLI A INNER JOIN HUSI_Divipola HB ON a.num_ptel=COD_DEPTO WHERE a.IdLugar=@idLugar"; SqlCommand cmdDatosCliente2 = new SqlCommand(qryDatosCliente2, connx); cmdDatosCliente2.Parameters.Add("@idLugar", SqlDbType.Int).Value = _localizacionCliente; SqlDataReader rdDatosCliente2 = cmdDatosCliente2.ExecuteReader(); if (rdDatosCliente2.HasRows) { rdDatosCliente2.Read(); _departamento = rdDatosCliente2.GetString(2); } string qryDatosCliente3 = @"SELECT A.Correo FROM concontratocorreo A INNER JOIN facFactura B ON A.IdContrato=B.IdContrato WHERE A.indhabilitado=1 AND B.idFactura=@idFactura UNION ALL SELECT A.Deslocalizacion As Correo FROM gentercerolocaliza A INNER JOIN conContrato C ON C.IdTercero=A.IdTercero INNER JOIN facFactura D ON D.IdContrato=C.IdContrato LEFT JOIN concontratocorreo B ON B.indhabilitado=1 and B.idcontrato=D.IdContrato WHERE B.idcontrato is null and A.IdLocalizaTipo=1 and A.indhabilitado=1 and D.IdFactura=@idFactura"; SqlCommand cmdDatosCliente3 = new SqlCommand(qryDatosCliente3, connx); cmdDatosCliente3.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDatosCliente3 = cmdDatosCliente3.ExecuteReader(); if (rdDatosCliente3.HasRows) { rdDatosCliente3.Read(); _correoCliente = rdDatosCliente3.GetString(0); } else { _correoCliente = "*****@*****.**"; } } List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(_correoCliente.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); facturaEnviar.notificaciones = notificaciones; Adquiriente adquirienteTmp = new Adquiriente(); adquirienteTmp.identificacion = _numDocCliente; if (_tipoDocCliente == 1)//TODO: validar la Homologacion para este campo { adquirienteTmp.tipoIdentificacion = 31; } else if (_tipoDocCliente == 2) { adquirienteTmp.tipoIdentificacion = 13; } adquirienteTmp.codigoInterno = _idTercero.ToString(); adquirienteTmp.razonSocial = _razonSocial; adquirienteTmp.nombreSucursal = _razonSocial; adquirienteTmp.correo = _correoCliente.Trim().Split(';')[0]; adquirienteTmp.telefono = _telefonoCliente; if (_RegimenFiscal.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } //TODO: Aqui insertar lo que se defina de Responsabilidades RUT documentoF2.adquiriente.responsabilidadesRUT if (_idNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (_idNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = "CO"; ubicacionCliente.codigoMunicipio = _municipioCliente; ubicacionCliente.direccion = _direccionCliente; adquirienteTmp.ubicacion = ubicacionCliente; documentoF2.adquiriente = adquirienteTmp; #region MyRegion //TODO:Definir Los pagos por Copago y Cuota Moderadora, si se envian como Anticipos y Abonos //TODO:Definir si aplica para algun caso. Cargos y Descuentos //List<TributosItem> tributosTMP = new List<TributosItem>(); //List<DetalleTributos> tributosDetalle = new List<DetalleTributos>(); //DetalleTributos detalleTributos = new DetalleTributos() // Un Objeto por cada Tipo de Iva //{ // valorImporte = 0, // valorBase = 0, // porcentaje = 0 //}; //tributosDetalle.Add(detalleTributos); //TributosItem itemTributo = new TributosItem() //{ // id = "01", //Total de Iva // nombre = "Iva", // esImpuesto = true, // valorImporteTotal = 0, // detalles = tributosDetalle // DEtalle de los Ivas //}; //tributosTMP.Add(itemTributo); //documentoF2.tributos = tributosTMP; #endregion ///<summary> ///Inicio de Totales de la Factura /// </summary> double TotalGravadoIva = 0; double TotalGravadoIca = 0; #region MyRegion //Totales totalesTmp = new Totales() //{ // valorBruto = double.Parse(_Valtotal.ToString()), // valorAnticipos = double.Parse(_ValPagos.ToString()), // valorTotalSinImpuestos = double.Parse(_Valtotal.ToString()), // valorTotalConImpuestos = double.Parse(_Valtotal.ToString()) + double.Parse(_ValImpuesto.ToString()), // valorNeto = double.Parse(_ValCobrar.ToString()) //}; //documentoF2.totales = totalesTmp; #endregion List <AnticiposItem> anticiposWrk = new List <AnticiposItem>(); AnticiposItem anticipoWrk = new AnticiposItem(); anticipoWrk.comprobante = "22"; anticipoWrk.valorAnticipo = double.Parse(_ValPagos.ToString()); anticiposWrk.Add(anticipoWrk); documentoF2.anticipos = anticiposWrk; //************************************************************ Detalle de Factura using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { string qryFactura = "SELECT IdFactura,NumFactura,IdDestino,IdTransaccion,IdPlan,IdContrato,ValTotal,ValDescuento,ValDescuentoT,ValPagos,ValImpuesto,ValCobrar,IndNotaCred,IndTipoFactura,CodEnti,CodEsor,FecFactura,Ruta,IdCausal,IdUsuarioR,IndHabilitado,IdNoFacturado,valPos,valNoPos FROM facFactura WHERE idFactura=@idFactura AND idDestino=@idAtencion"; conexion01.Open(); SqlCommand cmdFactura = new SqlCommand(qryFactura, conexion01); cmdFactura.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; cmdFactura.Parameters.Add("@idAtencion", SqlDbType.Int).Value = nroAtencion; SqlDataReader rdFactura = cmdFactura.ExecuteReader(); if (rdFactura.HasRows) { rdFactura.Read(); string strDetalleFac = @"SELECT UNI.Cod_Servicio,UNI.Des_Servicio,UNI.Cantidad,UNI.Vlr_Unitario_Serv,UNI.Vlr_Total_Serv,UNI.idProducto,UNI.CodProducto,UNI.nomproducto,O.idOrden FROM ( SELECT upper(isnull(J.CodProMan,CASE ISNULL(f.REGCUM,'0') WHEN '0' THEN P.CodProducto ELSE F.REGCUM END )) as Cod_Servicio, upper(( isnull(J.NomPRoman,P.NomProducto)) ) as Des_Servicio,SUM(f.Cantidad) as Cantidad, f.ValTotal as Vlr_Unitario_Serv, SUM(isnull(AD.ValTotal,round(F.Cantidad*F.ValTotal,0))) as Vlr_Total_Serv, p.idProducto,p.CodProducto,p.nomproducto FROM facfactura a INNER JOIN concontrato b on a.idcontrato=b.idcontrato INNER JOIN facfacturadet f on f.idfactura=a.idfactura LEFT JOIN facFacturaDetAjuDec AD ON AD.IdFactura = F.IdFactura and AD.IdProducto = F.IdProducto and AD.IdMovimiento = F.IdMovimiento INNER JOIN proproducto p on p.idproducto=f.idproducto AND p.IdProductoTipo not IN (8,12) INNER JOIN facmovimiento g on g.idmovimiento=f.idmovimiento INNER JOIN admatencion c on g.iddestino=c.idatencion INNER JOIN admcliente d on d.idcliente=c.idcliente INNER JOIN gentipodoc e on e.idtipodoc=d.idtipodoc LEFT JOIN admatencioncontrato h on h.idatencion=g.iddestino and a.idcontrato=h.idcontrato and a.idplan=h.idplan and h.indhabilitado=1 LEFT JOIN contarifa i on i.idtarifa=b.idtarifa LEFT JOIN conManualAltDet J ON J.IdProducto = F.IdProducto AND J.IndHabilitado = 1 AND J.IdManual = i.IdManual WHERE a.IndTipoFactura='RAC' AND a.idfactura=@idFactura GROUP BY upper(isnull(J.CodProMan,CASE ISNULL(f.REGCUM,'0') WHEN '0' THEN P.CodProducto ELSE F.REGCUM END )),upper(( isnull(J.NomPRoman,P.NomProducto))),f.ValTotal, p.idProducto,p.CodProducto,p.nomproducto ) as UNI INNER JOIN facFacturaDetOrden O on O.idFactura=@idFactura AND UNI.idProducto=O.idProducto ORDER BY o.Idorden"; SqlCommand cmdDetalleFac = new SqlCommand(strDetalleFac, conexion01); cmdDetalleFac.Parameters.Add("@idFactura", SqlDbType.Int).Value = rdFactura.GetInt32(0); SqlDataReader rdDetalleFac = cmdDetalleFac.ExecuteReader(); if (rdDetalleFac.HasRows) { Int16 nroLinea = 1; while (rdDetalleFac.Read()) { try { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdDetalleFac.GetString(0); lineaProducto.valorCodigoInterno = codigoProducto; #region MyRegion //if (rdDetalleFac.GetInt16(18) == 5 || rdDetalleFac.GetInt16(18) == 6) //{ // lineaProducto.codigoEstandar = "999"; //} //else //{ // lineaProducto.codigoEstandar = "999"; //} #endregion lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.descripcion = rdDetalleFac.GetString(1); lineaProducto.unidades = double.Parse(rdDetalleFac.GetDouble(2).ToString()); lineaProducto.unidadMedida = "94";// rdDetalleFac.GetString(19); lineaProducto.valorUnitarioBruto = double.Parse(rdDetalleFac.GetDouble(3).ToString()); lineaProducto.valorBruto = double.Parse(rdDetalleFac.GetDouble(4).ToString()); lineaProducto.valorBrutoMoneda = "COP"; TibutosDetalle tributosWRKIva = new TibutosDetalle(); tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; tributosWRKIva.porcentaje = 0; tributosWRKIva.valorBase = double.Parse(rdDetalleFac.GetDouble(4).ToString()); tributosWRKIva.valorImporte = rdDetalleFac.GetDouble(4) * 0; TotalGravadoIva = TotalGravadoIva + rdDetalleFac.GetDouble(4); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); #region MyRegion //TibutosDetalle tributosWRKIca = new TibutosDetalle(); //tributosWRKIca.id = "02"; //tributosWRKIca.nombre = "ICA"; //tributosWRKIca.esImpuesto = true; //tributosWRKIca.porcentaje = 0; //tributosWRKIca.valorBase = double.Parse(rdDetalleFac.GetDouble(4).ToString()); //tributosWRKIca.valorImporte = rdDetalleFac.GetDouble(4) * 0; //TotalGravadoIca = TotalGravadoIca+ rdDetalleFac.GetDouble(4); //tributosWRKIca.tributoFijoUnidades = 0; //tributosWRKIca.tributoFijoValorImporte = 0; //listaTributos.Add(tributosWRKIca); #endregion lineaProducto.tributos = listaTributos; detalleProductos.Add(lineaProducto); nroLinea++; } catch (Exception sqlExp) { string error = sqlExp.Message + " " + sqlExp.StackTrace; throw; } } } else // Si No hay Detalle de Productos { logFacturas.Info("No se encontro Detalle de productos para la factura. " + strDetalleFac); } } else // No se encuentra Informacion de la Factura y Atencion { logFacturas.Info("No se encontro Informacion nde Factura y Atencion." + qryFactura); } } documentoF2.detalles = detalleProductos; List <TributosItem> tributosTMP = new List <TributosItem>(); List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributos = new DetalleTributos() // Un Objeto por cada Tipo de Iva { valorImporte = 0, valorBase = TotalGravadoIva, porcentaje = 0 }; tributosDetalle.Add(detalleTributos); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = 0, detalles = tributosDetalle // DEtalle de los Ivas }; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP; Totales totalesTmp = new Totales() { valorBruto = double.Parse(_Valtotal.ToString()), valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = TotalGravadoIva + TotalGravadoIca, valorTotalConImpuestos = double.Parse(_Valtotal.ToString()) + double.Parse(_ValImpuesto.ToString()), valorNeto = double.Parse(_ValCobrar.ToString()) }; documentoF2.totales = totalesTmp; logFacturas.Info("Numero de Productos procesados, para JSon:" + detalleProductos.Count); ////************************************** Adicionar elementos a la Factura ********************************** try { string urlConsumo = Properties.Settings.Default.urlFacturaElectronica;// + Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; //request.Timeout = 60 * 1000; documentoF2.documento = facturaEnviar; string facturaJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Factura:" + facturaJson); request.Method = "POST"; request.ContentType = "application/json"; //string Usuario = "administrador"; //string Clave = "Transfiriendo@2016"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(facturaJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arreglo string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; StreamReader sr = new StreamReader(response.GetResponseStream()); string strsb = sr.ReadToEnd(); logFacturas.Info("Respuesta:" + strsb); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(strsb); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string strActualiza = @"UPDATE dbo.facFacturaTempWEBService SET identificador=@identificador WHERE IdFactura=@nrofactura"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, conn); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nrofactura", SqlDbType.Int).Value = nroFactura; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Factura Actualizada con UUID en facFacturaTempWEBService"); using (WebClient webClient = new WebClient()) { try { string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Factura...Terminada"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML...Terminada"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facFacturaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facFacturaTempWSAdvertencias(IdFactura,CodAdvertencia,FecRegistro,DescripcionAdv) VALUES(@IdFactura, @CodAdvertencia, @FecRegistro, @DescripcionAdv)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn); cmdInsertarAdvertencia.Parameters.Add("@IdFactura", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdFactura"].Value = nroFactura; cmdInsertarAdvertencia.Parameters["@CodAdvertencia"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionAdv"].Value = itemAdv.mensaje; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje} Estado del Proceso de la Factura:{respuesta.esExitoso}"); valorRpta = nroFactura.ToString(); } } } valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No fue Posible Realizar la Descarga de Archivos de la Factura con Identificadotr:{respuesta.resultado.UUID} Estado Proceso de Factura:{respuesta.esExitoso}"); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info("Se ha presentado una Falla durante la descarga de los objetos de la factura:" + webEx1.Message + " " + webEx1.InnerException.Message); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info("No fue posible descargar los archivos.PDF, XML y QR !!! Causa:" + exx.Message); valorRpta = "98"; } } } else { logFacturas.Info("!!! No fue posible Actualizar la Factura en la Tabla: facFacturaTempWEBService !!!"); } } } else { using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryInsertaError = @"INSERT INTO facFacturaTempWEBServiceError (IdFactura,CodError,DescripcionError,FecRegistro) VALUES(@IdFactura, @CodError, @DescripcionError, @FecRegistro)"; SqlCommand cmdInsertarError = new SqlCommand(qryInsertaError, conn); cmdInsertarError.Parameters.Add("@IdFactura", SqlDbType.Int).Value = nroFactura; cmdInsertarError.Parameters.Add("@CodError", SqlDbType.VarChar).Value = respuesta.codigo; cmdInsertarError.Parameters.Add("@DescripcionError", SqlDbType.NVarChar).Value = respuesta.mensaje; cmdInsertarError.Parameters.Add("@FecRegistro", SqlDbType.DateTime).Value = DateTime.Parse(respuesta.fecha); if (cmdInsertarError.ExecuteNonQuery() > 0) { valorRpta = nroFactura.ToString(); string qryDetErr = @"INSERT INTO facFacturaTempWSErrorDetalle (IdFactura,CodError,consecutivo,FecRegistro,DescripcionError) VALUES(@IdFactura, @CodError, @consecutivo, @FecRegistro, @DescripcionError)"; SqlCommand cmdDetErr = new SqlCommand(qryDetErr, conn); cmdDetErr.Parameters.Add("@IdFactura", SqlDbType.Int); cmdDetErr.Parameters.Add("@CodError", SqlDbType.VarChar); cmdDetErr.Parameters.Add("@consecutivo", SqlDbType.Int); cmdDetErr.Parameters.Add("@FecRegistro", SqlDbType.DateTime); cmdDetErr.Parameters.Add("@DescripcionError", SqlDbType.NVarChar); List <ErroresItem> listaErrores = new List <ErroresItem>(); int consecutivo = 1; foreach (ErroresItem itemErr in respuesta.errores) { cmdDetErr.Parameters["@IdFactura"].Value = nroFactura; cmdDetErr.Parameters["@CodError"].Value = itemErr.codigo; cmdDetErr.Parameters["@consecutivo"].Value = consecutivo; cmdDetErr.Parameters["@FecRegistro"].Value = DateTime.Parse(respuesta.fecha); cmdDetErr.Parameters["@DescripcionError"].Value = itemErr.mensaje; if (cmdDetErr.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Errores:codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Errores: Codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } } } else { valorRpta = "99"; } } } return(valorRpta); } catch (Exception e) { logFacturas.Warn("Se ha presentado una excepcion:" + e.Message + " Pila de LLamdos:" + e.StackTrace); return("98"); } } catch (Exception exp) { logFacturas.Warn("Se ha presentado una Excepcion:" + exp.Message + "Pila de LLamadas:" + exp.StackTrace); return("99"); } }
public string GetData(int nroFactura, int idCliente, string urlPdfFactura, string moneda) { logFacturas.Info("***************************************************************************************************************************"); logFacturas.Info("Se recibe factura con siguientes datos nroFactura: " + nroFactura + " IdCliente:" + idCliente + " urlPdf:" + urlPdfFactura); try { decimal _Valtotal = 0; double TotalGravadoIva = 0; double TotalExcentoIva = 0; double ValorTotalIva = 0; Int32 ValorTasaIva = 0; double ValorBruto = 0; Decimal _ValPagos = 0; decimal _ValCobrar = 0; DateTime _FecFactura = DateTime.Now; //Decimal _valPos = 0; //Decimal _valNoPos = 0; Decimal _valorIvaPesos = 0; //double tasaIva = 0; //Int32 _IdUsuarioR = 0; Int32 _idTercero = 0; string _usrNombre = string.Empty; string _usrNumDocumento = string.Empty; //Byte _usrIdTipoDoc = 0; string _numDocCliente = string.Empty; //Byte _tipoDocCliente = 0; Byte _tipoDocClienteDian = 0; string _razonSocial = string.Empty; string _repLegal = string.Empty; string _RegimenFiscal = string.Empty; //Int16 _idNaturaleza = 0; int concepto = 0; FormaPago formaPagoTmp = new FormaPago(); documentoRoot documentoF2 = new documentoRoot(); Documento facturaEnviar = new Documento(); facturaEnviar.identificadorTransaccion = "3462c5-c24b-464e-ad46-da9c6cd94de3"; facturaEnviar.URLPDF = urlPdfFactura; facturaEnviar.NITFacturador = Properties.Settings.Default.NitHusi; facturaEnviar.prefijo = Properties.Settings.Default.Prefijo; facturaEnviar.numeroDocumento = nroFactura.ToString(); facturaEnviar.tipoDocumento = 1; facturaEnviar.subTipoDocumento = "01"; facturaEnviar.tipoOperacion = "10"; facturaEnviar.moneda = moneda; facturaEnviar.generaRepresentacionGrafica = false; //ClienteInternacional cliente = new ClienteInternacional(); string urlClientes = $"{Properties.Settings.Default.urlServicioClientes}ClienteInternacional?idFactura={nroFactura}"; logFacturas.Info("URL de Request:" + urlClientes); HttpWebRequest peticion = WebRequest.Create(urlClientes) as HttpWebRequest; peticion.Method = "GET"; peticion.ContentType = "application/json"; HttpWebResponse respuestaClientes = peticion.GetResponse() as HttpWebResponse; StreamReader sr = new StreamReader(respuestaClientes.GetResponseStream()); string infCliente = sr.ReadToEnd(); logFacturas.Info("Cliente:" + infCliente); Cliente cliente = JsonConvert.DeserializeObject <Cliente>(infCliente); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryFacturaEnc = @"SELECT b.numdocrespaldo,IdTipoDocRespaldo,B.IdTercero,B.IdCliente,nomcliente,tdoc.TipoDocDian,B.NumDocumento,ValMonto,ValSaldo,FecRegistroC,FecRadicacion,IndEstado,ValFactura,a.IdUsuarioR,t.NomTercero,t.IdNaturaleza from cxcfacmanual a inner join cxccuenta b on a.idcuenta=b.idcuenta inner join genTercero t ON b.IdTercero=t.IdTercero inner join homologaTipoDocDian tdoc on b.IdTipoDocCliente=tdoc.IdTipoDoc WHERE b.numdocrespaldo=@nroFactura"; SqlCommand cmdFacturaEnc = new SqlCommand(qryFacturaEnc, conn); cmdFacturaEnc.Parameters.Add("@nroFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdFacturaEnc = cmdFacturaEnc.ExecuteReader(); if (rdFacturaEnc.HasRows) { rdFacturaEnc.Read(); string valorTf = Math.Round(rdFacturaEnc.GetDouble(12), 0).ToString(); // Valor Toal de la factura Incluido el IVA _Valtotal = Decimal.Parse(valorTf); _ValPagos = 0; //_ValImpuesto = 0; _ValCobrar = Decimal.Parse(Math.Round(rdFacturaEnc.GetDouble(12), 0).ToString()); // Valor a Cobrar cliente.FecFactura = rdFacturaEnc.GetDateTime(9); _tipoDocClienteDian = rdFacturaEnc.GetByte(5); } else { return("No se encontro Informacion General de Encabezado de Factura."); } if (_ValPagos > 0) { string Consultapagos = "SELECT IdConcepto FROM facFacAtenConcepto WHERE IdFactura=@idFactura"; SqlCommand cmdConsultaPagos = new SqlCommand(Consultapagos, conn); cmdConsultaPagos.Parameters.Add("@idfactura", SqlDbType.Int).Value = nroFactura; concepto = int.Parse(cmdConsultaPagos.ExecuteScalar().ToString()); } } string formatoWrk = formatosFecha.formatofecha(_FecFactura); facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = moneda; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; List <DetallesItem> detalleProductos = new List <DetallesItem>(); //****************** CLIENTE // Variables Inicializacion string _direccionCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _departamento = string.Empty; //int _localizacionCliente = 0; string _correoCliente = string.Empty; string codigoPais = string.Empty; using (SqlConnection connx = new SqlConnection(Properties.Settings.Default.DBConexion)) { connx.Open(); List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(cliente.cuenta_correo.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); facturaEnviar.notificaciones = notificaciones; string qryIvaFact = @"SELECT sum(a.val_cuen) as totalIva FROM cxcfacmanualdet a inner join cxccuenta b on a.idcuenta=b.idcuenta and b.numdocrespaldo=@factura WHERE a.cod_cuen in ( select replace (val_camp, ';','') from gen_enti_dato where nom_camp='CXC_FIVA')"; SqlCommand cmdIvaFact = new SqlCommand(qryIvaFact, connx); cmdIvaFact.Parameters.Add("@factura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdIvaFact = cmdIvaFact.ExecuteReader(); if (rdIvaFact.HasRows) { rdIvaFact.Read(); if (!rdIvaFact.IsDBNull(0)) { _valorIvaPesos = rdIvaFact.GetDecimal(0); /// valor del IVA de la Factura } } string qryPais = @"SELECT CodigoAlfa2 FROM GEN_DIVI_POLI a LEFT JOIN GEN_DIVI_POLI b on substring(a.cod_dipo,1,3) = b.cod_dipo LEFT JOIN GEN_PAISES_DIAN c on c.idLugarSAHI = b.IdLugar WHERE a.IdLugar = @idLugar"; SqlCommand cmdPais = new SqlCommand(qryPais, connx); cmdPais.Parameters.Add("@idLugar", SqlDbType.VarChar).Value = cliente.idLugar; SqlDataReader rdCodigoPais = cmdPais.ExecuteReader(); if (rdCodigoPais.HasRows) { rdCodigoPais.Read(); if (rdCodigoPais.IsDBNull(0)) { codigoPais = "CO"; } else { codigoPais = rdCodigoPais.GetString(0); } } else { codigoPais = "CO"; } } Adquiriente adquirienteTmp = new Adquiriente(); adquirienteTmp.identificacion = cliente.NroDoc_Cliente; adquirienteTmp.tipoIdentificacion = _tipoDocClienteDian; adquirienteTmp.codigoInterno = cliente.IdTercero.ToString(); adquirienteTmp.razonSocial = cliente.NomTercero; adquirienteTmp.nombreSucursal = cliente.NomTercero; adquirienteTmp.correo = cliente.cuenta_correo.Trim().Split(';')[0]; adquirienteTmp.telefono = cliente.telefono; if (cliente.idRegimen.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } if (cliente.IdNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (cliente.IdNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = codigoPais; if (cliente.codigoPais == "CO") { ubicacionCliente.codigoMunicipio = cliente.codMunicipio;// "00000"; // se ajusta para factura 6180330 Cliente Internacional } else { ubicacionCliente.codigoMunicipio = "00000"; } ubicacionCliente.departamento = cliente.Nombre_Depto; ubicacionCliente.ciudad = cliente.Nom_Municipio; ubicacionCliente.direccion = cliente.direccion; adquirienteTmp.ubicacion = ubicacionCliente; documentoF2.adquiriente = adquirienteTmp; List <AnticiposItem> anticiposWrk = new List <AnticiposItem>(); AnticiposItem anticipoWrk = new AnticiposItem(); anticipoWrk.comprobante = "22"; anticipoWrk.valorAnticipo = double.Parse(_ValPagos.ToString()); anticiposWrk.Add(anticipoWrk); documentoF2.anticipos = anticiposWrk; //************************************************************ Detalle de Factura por Administrativa Moneda Extranjera *********************************************************** using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); string strDetalleFac = @"SELECT top 1000 b.numdocrespaldo as factura,CONVERT(VARCHAR,c.IdCuenta)+'-'+CONVERT(varchar,C.num_regi) AS codProducto,c.Descripcion,c.Cantidad,c.val_unit, c.val_unit* c.Cantidad as valBruto,ISNULL(c.Vr_IVA, 0) AS ValorIva, ISNULL(c.Porcen_IVA, 0) as 'PorcentajeIva',c.* FROM cxcfacmanual a INNER JOIN cxccuenta b on a.idcuenta = b.idcuenta INNER JOIN cxcfacmanualconc c on c.IdCuenta = a.idcuenta WHERE c.val_unit_inte is NOT null and NumDocRespaldo = @idFactura ORDER BY c.num_regi"; SqlCommand cmdDetalleFac = new SqlCommand(strDetalleFac, conexion01); cmdDetalleFac.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDetalleFac = cmdDetalleFac.ExecuteReader(); if (rdDetalleFac.HasRows) { #region MyRegion //Int16 nroLinea = 1; //while (rdDetalleFac.Read()) //{ // tasaIva = ((double.Parse(_valorIvaPesos.ToString())) / (double.Parse(rdDetalleFac.GetDecimal(6).ToString())) * 100).TomarDecimales(2); ; // tasaIva = Math.Round(tasaIva, 0); // try // { // List<TibutosDetalle> listaTributos = new List<TibutosDetalle>(); // DetallesItem lineaProducto = new DetallesItem(); // lineaProducto.tipoDetalle = 1; // Linea Normal // string codigoProducto = rdDetalleFac.GetInt32(1).ToString(); // lineaProducto.valorCodigoInterno = codigoProducto; // lineaProducto.codigoEstandar = "999"; // lineaProducto.valorCodigoEstandar = codigoProducto; // lineaProducto.descripcion = rdDetalleFac.GetString(4); // lineaProducto.unidades = double.Parse(rdDetalleFac.GetInt32(3).ToString()); // lineaProducto.unidadMedida = "94";// rdDetalleFac.GetString(19); // lineaProducto.valorUnitarioBruto = double.Parse(rdDetalleFac.GetDecimal(7).ToString()); // ValBrutoProd = ValBrutoProd + (double.Parse(rdDetalleFac.GetDecimal(7).ToString()) * double.Parse(rdDetalleFac.GetInt32(3).ToString())); // lineaProducto.valorBruto = double.Parse(rdDetalleFac.GetInt32(3).ToString()) * double.Parse(rdDetalleFac.GetDecimal(7).ToString()); // lineaProducto.valorBrutoMoneda = moneda; // //detalleProductos.Add(lineaProducto); // TibutosDetalle tributosWRKIva = new TibutosDetalle(); // tributosWRKIva.id = "01"; // tributosWRKIva.nombre = "Iva"; // tributosWRKIva.esImpuesto = true; // tributosWRKIva.porcentaje = double.Parse(tasaIva.ToString()); // tributosWRKIva.valorBase = double.Parse(rdDetalleFac.GetDecimal(7).ToString()); // _totalIvaProd = _totalIvaProd+((double.Parse(rdDetalleFac.GetDecimal(7).ToString()) * double.Parse(tasaIva.ToString())) / 100).TomarDecimales(2); // tributosWRKIva.valorImporte = ((double.Parse(rdDetalleFac.GetDecimal(7).ToString()) * double.Parse(tasaIva.ToString()))/100).TomarDecimales(2); // TotalGravadoIva = TotalGravadoIva + double.Parse(rdDetalleFac.GetDecimal(7).ToString()); // tributosWRKIva.tributoFijoUnidades = 0; // tributosWRKIva.tributoFijoValorImporte = 0; // listaTributos.Add(tributosWRKIva); // lineaProducto.tributos = listaTributos; // detalleProductos.Add(lineaProducto); // nroLinea++; // } // catch (Exception sqlExp) // { // string error = $"Mensaje de Error:{sqlExp.Message} Traza de la Pila:{sqlExp.StackTrace}"; // logFacturas.Warn($"Se ha presentado una Excepcion:{error}"); // throw; // } //} #endregion Int16 nroLinea = 1; while (rdDetalleFac.Read()) { try { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); //Tributos para lalinea de producto DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdDetalleFac.GetString(1); lineaProducto.descripcion = rdDetalleFac.GetString(2); lineaProducto.valorCodigoInterno = codigoProducto; lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.unidades = double.Parse(rdDetalleFac.GetInt32(3).ToString()); lineaProducto.unidadMedida = "94"; lineaProducto.valorUnitarioBruto = double.Parse(rdDetalleFac.GetSqlMoney(14).ToString()).TomarDecimales(2); lineaProducto.valorBrutoMoneda = moneda; // "COP"; double totalUnitario = lineaProducto.valorUnitarioBruto * lineaProducto.unidades; lineaProducto.valorBruto = totalUnitario.TomarDecimales(2); // double.Parse(rdDetalleFac.GetSqlDouble(18).ToString()); ValorBruto += totalUnitario.TomarDecimales(2); // double.Parse(rdDetalleFac.GetSqlDouble(18).ToString()); TibutosDetalle tributosWRKIva = new TibutosDetalle(); //Detalle de tributos, para el producto tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; tributosWRKIva.porcentaje = double.Parse(rdDetalleFac.GetInt32(16).ToString()).TomarDecimales(2); tributosWRKIva.valorBase = totalUnitario;// double.Parse(rdDetalleFac.GetSqlDouble(18).ToString()); tributosWRKIva.valorImporte = double.Parse(rdDetalleFac.GetSqlDouble(19).ToString()).TomarDecimales(2); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); lineaProducto.tributos = listaTributos; if (rdDetalleFac.GetInt32(16) > 0) { ValorTasaIva = rdDetalleFac.GetInt32(16); TotalGravadoIva += totalUnitario;// double.Parse(rdDetalleFac.GetSqlMoney(14).ToString()); ValorTotalIva += double.Parse(rdDetalleFac.GetSqlDouble(19).ToString()).TomarDecimales(2); } else { TotalExcentoIva += totalUnitario;// double.Parse(rdDetalleFac.GetSqlDouble(18).ToString()); } detalleProductos.Add(lineaProducto); nroLinea++; // Para moneda extranjera:vr_Total_Inte-vr_IVA_Inte de la tabla } catch (Exception sqlExp) { string error = $"Mensaje de Error:{sqlExp.Message} Traza de la Pila:{sqlExp.StackTrace}"; logFacturas.Warn($"Se ha presentado una Excepcion:{error}"); throw; } } } else // Si No hay Detalle de Productos { } } documentoF2.detalles = detalleProductos; List <TributosItem> tributosTMP = new List <TributosItem>(); //Segmento de Iva pata Totales de Factura List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributosItem = new DetalleTributos(); // Un Objeto por cada Tipo de Iva //***estos valores se deben tomar del select o Tabla //double valorImporte = double.Parse(_valorIva.ToString()); //double valorBase = double.Parse((_Valtotal - _valorIva).ToString()); //double porcentaje = Math.Round(((valorImporte / valorBase) * 100).TomarDecimales(2), 0); //detalleTributosItem.valorImporte = valorImporte; //detalleTributosItem.valorBase = valorBase; //detalleTributosItem.porcentaje = porcentaje; detalleTributosItem.valorImporte = ValorTotalIva; detalleTributosItem.valorBase = TotalGravadoIva; detalleTributosItem.porcentaje = double.Parse(ValorTasaIva.ToString()).TomarDecimales(2); tributosDetalle.Add(detalleTributosItem); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = ValorTotalIva, detalles = tributosDetalle // Detalle de los Ivas }; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP;/// Totales totalesTmp = new Totales() { valorBruto = ValorBruto, // double.Parse(ValorBruto.ToString()), valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = ValorBruto, valorTotalConImpuestos = ValorBruto - double.Parse(_ValPagos.ToString()) + double.Parse(ValorTotalIva.ToString()), valorNeto = ValorBruto - double.Parse(_ValPagos.ToString()) + double.Parse(ValorTotalIva.ToString()) //double.Parse(_ValCobrar.ToString()) }; documentoF2.totales = totalesTmp; logFacturas.Info("Numero de Productos procesados, para JSon:" + detalleProductos.Count); double tasa = 0; string monedaDestino = String.Empty; DateTime fechaTrm = DateTime.Now; using (SqlConnection connX1 = new SqlConnection(Properties.Settings.Default.DBConexion)) { connX1.Open(); string qryTasa = "SELECT Trm,FechaTrm,MonedaOrigen FROM facFacturaTasaTrm WHERE idFactura=@idFactura"; SqlCommand cmdTasa = new SqlCommand(qryTasa, connX1); cmdTasa.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdTasa = cmdTasa.ExecuteReader(); if (rdTasa.HasRows) { rdTasa.Read(); tasa = rdTasa.GetDouble(0); fechaTrm = rdTasa.GetDateTime(1); monedaDestino = rdTasa.GetString(2); } else { logFacturas.Info($"No se encontro Tasa de Cambio para la Factura Numero:{nroFactura}"); } } formatoWrk = formatosFecha.formatofecha(fechaTrm); TRM tasaInf = new TRM(); tasaInf.valor = tasa; tasaInf.monedaDestino = monedaDestino; tasaInf.fecha = formatoWrk.Split('T')[0]; facturaEnviar.TRM = tasaInf; logFacturas.Info("Numero de Productos procesados, para JSon:" + detalleProductos.Count); try { string urlConsumo = Properties.Settings.Default.urlFacturaElectronica;// + Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; //request.Timeout = 60 * 1000; documentoF2.documento = facturaEnviar; string facturaJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Factura:" + facturaJson); request.Method = "POST"; request.ContentType = "application/json"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(facturaJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arregle string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; logFacturas.Info("Codigo Status:" + response.StatusCode); logFacturas.Info("Descripcion Status:" + response.StatusDescription); StreamReader lectorDatos = new StreamReader(response.GetResponseStream()); string datosRespuesta = lectorDatos.ReadToEnd(); logFacturas.Info("Respuesta Recibida Transfiriendo:" + datosRespuesta); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(datosRespuesta); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string strActualiza = @"UPDATE dbo.facFacturaTempWEBService SET identificador=@identificador WHERE IdFactura=@nrofactura"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, conn); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nrofactura", SqlDbType.Int).Value = nroFactura; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Factura Actualizada con UUID en facFacturaTempWEBService"); using (WebClient webClient = new WebClient()) { try { string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Factura...Terminada"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML...Terminada"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facFacturaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facFacturaTempWSAdvertencias(IdFactura,CodAdvertencia,FecRegistro,DescripcionAdv) VALUES(@IdFactura, @CodAdvertencia, @FecRegistro, @DescripcionAdv)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn); cmdInsertarAdvertencia.Parameters.Add("@IdFactura", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdFactura"].Value = nroFactura; cmdInsertarAdvertencia.Parameters["@CodAdvertencia"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionAdv"].Value = itemAdv.mensaje; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); } } } valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No fue Posible Realizar la Descarga de Archivos de la Factura con Identificadotr:{respuesta.resultado.UUID} Estado Proceso de Factura:{respuesta.esExitoso}"); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info("Se ha presentado una Falla durante la descarga de los objetos de la factura:" + webEx1.Message + " " + webEx1.InnerException.Message); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info("No fue posible descargar los archivos.PDF, XML y QR !!! Causa:" + exx.Message); valorRpta = "98"; } } } else { logFacturas.Info("!!! No fue posible Actualizar la Factura en la Tabla: facFacturaTempWEBService !!!"); } } } else { using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryInsertaError = @"INSERT INTO facFacturaTempWEBServiceError (IdFactura,CodError,DescripcionError,FecRegistro) VALUES(@IdFactura, @CodError, @DescripcionError, @FecRegistro)"; SqlCommand cmdInsertarError = new SqlCommand(qryInsertaError, conn); cmdInsertarError.Parameters.Add("@IdFactura", SqlDbType.Int).Value = nroFactura; cmdInsertarError.Parameters.Add("@CodError", SqlDbType.VarChar).Value = respuesta.codigo; cmdInsertarError.Parameters.Add("@DescripcionError", SqlDbType.NVarChar).Value = respuesta.mensaje; cmdInsertarError.Parameters.Add("@FecRegistro", SqlDbType.DateTime).Value = DateTime.Parse(respuesta.fecha); if (cmdInsertarError.ExecuteNonQuery() > 0) { valorRpta = nroFactura.ToString(); string qryDetErr = @"INSERT INTO facFacturaTempWSErrorDetalle (IdFactura,CodError,consecutivo,FecRegistro,DescripcionError) VALUES(@IdFactura, @CodError, @consecutivo, @FecRegistro, @DescripcionError)"; SqlCommand cmdDetErr = new SqlCommand(qryDetErr, conn); cmdDetErr.Parameters.Add("@IdFactura", SqlDbType.Int); cmdDetErr.Parameters.Add("@CodError", SqlDbType.VarChar); cmdDetErr.Parameters.Add("@consecutivo", SqlDbType.Int); cmdDetErr.Parameters.Add("@FecRegistro", SqlDbType.DateTime); cmdDetErr.Parameters.Add("@DescripcionError", SqlDbType.NVarChar); List <ErroresItem> listaErrores = new List <ErroresItem>(); int consecutivo = 1; foreach (ErroresItem itemErr in respuesta.errores) { cmdDetErr.Parameters["@IdFactura"].Value = nroFactura; cmdDetErr.Parameters["@CodError"].Value = itemErr.codigo; cmdDetErr.Parameters["@consecutivo"].Value = consecutivo; cmdDetErr.Parameters["@FecRegistro"].Value = DateTime.Parse(respuesta.fecha); cmdDetErr.Parameters["@DescripcionError"].Value = itemErr.mensaje; if (cmdDetErr.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Errores:codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Errores: Codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } consecutivo++; } } else { valorRpta = "99"; } } } return(valorRpta); //} //else //{ // logFacturas.Info("!!! Recuperacion Documentos de la Factura, No fue posible. No se Actualiza la Factura en facFacturaTempWEBService !!!"); // logFacturas.Warn("Respuesta recibida:" + strsb); // //*Aqui se debe insertar en la tabla de fallas // return "Recuperacion Documentos de la Factura, No fue posible. No se Actualiza la Factura en facFacturaTempWEBService"; //} //} } catch (WebException wExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + wExp01.Message + " Pila de LLamados:" + wExp01.StackTrace); return("93"); } catch (NotSupportedException nsExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + nsExp01.Message + " Pila de LLamados:" + nsExp01.StackTrace); return("94"); } catch (ProtocolViolationException pexp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + pexp01.Message + " Pila de LLamados:" + pexp01.StackTrace); return("95"); } catch (InvalidOperationException inExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + inExp01.Message + " Pila de LLamados:" + inExp01.StackTrace); return("96"); } catch (HttpListenerException httpExp) { logFacturas.Warn("Se ha presentado una excepcion Http:" + httpExp.Message + " Pila de LLamados:" + httpExp.StackTrace); return("97"); } catch (Exception e) { logFacturas.Warn("Se ha presentado una excepcion:" + e.Message + " Pila de LLamados:" + e.StackTrace); return("98"); } } catch (Exception exp) { logFacturas.Warn("Se ha presentado una Excepcion:" + exp.Message + "Pila de LLamadas:" + exp.StackTrace); return("99"); } }
public string GetData(int nroFactura, int idCliente, string urlPdfFactura, string moneda) { logFacturas.Info($"Se recibe factura con siguientes datos:Factura x Actividad:{nroFactura} IdCliente:{idCliente} urlPdf:{urlPdfFactura}"); try { decimal _Valtotal = 0; double TotalGravadoIva = 0; double TotalExcentoIva = 0; double ValorTotalIva = 0; Int32 ValorTasaIva = 0; double ValorBruto = 0; Decimal _ValPagos = 0; decimal _ValCobrar = 0; // Inicializacion //Int32 _idContrato = 0; //Decimal _ValDescuento = 0; //Decimal _ValDescuentoT = 0; //Decimal _ValImpuesto = 0; Decimal _valorIva = 0; DateTime _FecFactura = DateTime.Now; //Decimal _valPos = 0; //Decimal _valNoPos = 0; Int32 _IdUsuarioR = 0; Int32 _idTercero = 0; string _usrNombre = string.Empty; string _usrNumDocumento = string.Empty; //Byte _usrIdTipoDoc = 0; string _numDocCliente = string.Empty; Byte _tipoDocCliente = 0; string _razonSocial = string.Empty; string _repLegal = string.Empty; string _RegimenFiscal = string.Empty; Int16 _idNaturaleza = 0; int concepto = 0; FormaPago formaPagoTmp = new FormaPago(); //Fin de Inicializacion documentoRoot documentoF2 = new documentoRoot(); Documento facturaEnviar = new Documento(); facturaEnviar.identificadorTransaccion = "78ed919a-6382-48a8-acdc-0ae8c3e3761f"; facturaEnviar.URLPDF = urlPdfFactura; facturaEnviar.NITFacturador = Properties.Settings.Default.NitHusi; facturaEnviar.prefijo = Properties.Settings.Default.Prefijo; facturaEnviar.numeroDocumento = nroFactura.ToString(); facturaEnviar.tipoDocumento = 1; facturaEnviar.subTipoDocumento = "01"; facturaEnviar.tipoOperacion = "10"; facturaEnviar.generaRepresentacionGrafica = false; using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryFacturaEnc = @"SELECT b.numdocrespaldo,IdTipoDocRespaldo,B.IdTercero,B.IdCliente,nomcliente,IdTipoDocCliente,B.NumDocumento,ValMonto,ValSaldo,FecRegistroC,FecRadicacion,IndEstado,ValFactura,a.IdUsuarioR,t.NomTercero,t.IdNaturaleza from cxcfacmanual a inner join cxccuenta b on a.idcuenta=b.idcuenta inner join genTercero t ON b.IdTercero=t.IdTercero WHERE b.numdocrespaldo=@nroFactura"; SqlCommand cmdFacturaEnc = new SqlCommand(qryFacturaEnc, conn); cmdFacturaEnc.Parameters.Add("@nroFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdFacturaEnc = cmdFacturaEnc.ExecuteReader(); if (rdFacturaEnc.HasRows) { rdFacturaEnc.Read(); //_idContrato = rdFacturaEnc.GetInt32(0); string valorTf = Math.Round(rdFacturaEnc.GetDouble(12), 0).ToString(); _Valtotal = Decimal.Parse(valorTf); //_ValDescuento = 0; //_ValDescuentoT = 0; _ValPagos = 0; //_ValImpuesto = 0; _ValCobrar = Decimal.Parse(Math.Round(rdFacturaEnc.GetDouble(12), 0).ToString()); _FecFactura = rdFacturaEnc.GetDateTime(9); //_valPos = 0; //_valNoPos = 0; _IdUsuarioR = rdFacturaEnc.GetInt32(13); //_usrNombre = rdFacturaEnc.GetString(11); //_usrNumDocumento = rdFacturaEnc.GetString(12); //_usrIdTipoDoc = rdFacturaEnc.GetByte(13); _numDocCliente = rdFacturaEnc.GetString(6); _tipoDocCliente = rdFacturaEnc.GetByte(5); _razonSocial = rdFacturaEnc.GetString(4); _repLegal = rdFacturaEnc.GetString(4); _idTercero = rdFacturaEnc.GetInt32(2); _idNaturaleza = rdFacturaEnc.GetInt16(15); } if (_ValPagos > 0) { string Consultapagos = "SELECT IdConcepto FROM facFacAtenConcepto WHERE IdFactura=@idFactura"; SqlCommand cmdConsultaPagos = new SqlCommand(Consultapagos, conn); cmdConsultaPagos.Parameters.Add("@idfactura", SqlDbType.Int).Value = nroFactura; concepto = int.Parse(cmdConsultaPagos.ExecuteScalar().ToString()); } } string formatoWrk = formatosFecha.formatofecha(_FecFactura); facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = "COP"; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; List <DetallesItem> detalleProductos = new List <DetallesItem>(); //****************** CLIENTE // Variables Inicializacion string _direccionCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _departamento = string.Empty; int _localizacionCliente = 0; string _correoCliente = string.Empty; //**** using (SqlConnection connx = new SqlConnection(Properties.Settings.Default.DBConexion)) { connx.Open(); // string qryDatosCliente1 = @"SELECT C.DirCasa,C.DirOficina,IdLugarCliente,C.TelCasa,C.TelCelular,C.TelOficina,C.CorreoE,pp.nom_dipo,RIGHT(PP.cod_dipo,5) AS 'Codigo' FROM facfactura F //INNER JOIN admAtencion A ON F.IdDestino=A.IdAtencion //INNER JOIN admCliente C ON A.IdCliente=C.IdCliente //INNER JOIN GEN_DIVI_POLI PP ON c.IdLugarCliente=PP.IdLugar //WHERE IdFactura=@idFactura"; string qryDatosCliente = @"SELECT IdLocalizaTipo,DesLocalizacion,B.nom_dipo,A.IdLugar,RIGHT(B.cod_dipo,5) FROM genTerceroLocaliza A LEFT JOIN GEN_DIVI_POLI B ON A.IdLugar=B.IdLugar WHERE IdTercero=@idTercero and IdLocalizaTipo IN (2,3) ORDER BY IdLocalizaTipo"; SqlCommand cmdDatosCliente = new SqlCommand(qryDatosCliente, connx); //logFacturas.Info($"_idTercero, para la busqueda del Correo, Administrativa, particular PN:{_idTercero}"); cmdDatosCliente.Parameters.Add("@idTercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdDatosCliente = cmdDatosCliente.ExecuteReader(); if (rdDatosCliente.HasRows) { while (rdDatosCliente.Read()) { if (rdDatosCliente.GetInt32(0) == 2) { _direccionCliente = rdDatosCliente.GetString(1); } else if (rdDatosCliente.GetInt32(0) == 3) { _localizacionCliente = rdDatosCliente.GetInt32(3); _municipioCliente = rdDatosCliente.GetString(4); _telefonoCliente = rdDatosCliente.GetString(1); if (_telefonoCliente.Length > 10) { _telefonoCliente = _telefonoCliente.Substring(0, 10); } else if (_telefonoCliente.Length == 0) { _telefonoCliente = "5716519494"; } } } //** qryDatosCliente = @"SELECT C.DirCasa,C.DirOficina,IdLugarCliente,C.TelCasa,C.TelCelular,C.TelOficina,C.CorreoE,pp.nom_dipo,RIGHT(PP.cod_dipo,5) AS 'Codigo' FROM admCliente C INNER JOIN genTercero T ON C.idtercero = T.IdTercero INNER JOIN GEN_DIVI_POLI PP ON c.IdLugarCliente = PP.IdLugar WHERE T.IdTercero = @idTercero "; using (SqlCommand cmdCorreo = new SqlCommand(qryDatosCliente, connx)) { logFacturas.Info($"_idTercero, para la busqueda del Correo, Administrativa, particular PN:{_idTercero}"); cmdCorreo.Parameters.Add("@idTercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdCorreo = cmdCorreo.ExecuteReader(); if (rdCorreo.HasRows) { rdCorreo.Read(); if (rdCorreo.IsDBNull(6)) { _correoCliente = "*****@*****.**"; } else { if (rdCorreo.GetString(6).Length == 0) { _correoCliente = "*****@*****.**"; } else { _correoCliente = rdCorreo.GetString(6); } } } else { _correoCliente = "*****@*****.**"; } } //** } else { qryDatosCliente = @"SELECT C.DirCasa,C.DirOficina,IdLugarCliente,C.TelCasa,C.TelCelular,C.TelOficina,C.CorreoE,pp.nom_dipo,RIGHT(PP.cod_dipo,5) AS 'Codigo' FROM admCliente C INNER JOIN genTercero T ON C.idtercero = T.IdTercero INNER JOIN GEN_DIVI_POLI PP ON c.IdLugarCliente = PP.IdLugar WHERE T.IdTercero = @idTercero "; using (SqlCommand cmdCorreo = new SqlCommand(qryDatosCliente, connx)) { logFacturas.Info($"_idTercero, para la busqueda del Correo, Administrativa, particular PN:{_idTercero}"); cmdCorreo.Parameters.Add("@idTercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdCorreo = cmdCorreo.ExecuteReader(); if (rdCorreo.HasRows) { rdCorreo.Read(); if (rdCorreo.IsDBNull(6)) { _correoCliente = "*****@*****.**"; } else { if (rdCorreo.GetString(6).Length == 0) { _correoCliente = "*****@*****.**"; } else { _correoCliente = rdCorreo.GetString(6); _localizacionCliente = rdCorreo.GetInt32(2); _municipioCliente = rdCorreo.GetString(8); _direccionCliente = rdCorreo.GetString(0); } } } else { _correoCliente = "*****@*****.**"; } } } // string qryuCorreo = @"SELECT CorreoE FROM genTercero T //INNER JOIN admCliente C ON T.IdCliente = C.IdCliente //WHERE T.IdTercero = @idTercero"; string qryDatosCliente2 = @"SELECT COD_DEPTO,COD_MPIO,DPTO,NOM_MPIO FROM GEN_DIVI_POLI A INNER JOIN HUSI_Divipola HB ON a.num_ptel=COD_DEPTO WHERE a.IdLugar=@idLugar"; SqlCommand cmdDatosCliente2 = new SqlCommand(qryDatosCliente2, connx); cmdDatosCliente2.Parameters.Add("@idLugar", SqlDbType.Int).Value = _localizacionCliente; SqlDataReader rdDatosCliente2 = cmdDatosCliente2.ExecuteReader(); if (rdDatosCliente2.HasRows) { rdDatosCliente2.Read(); _departamento = rdDatosCliente2.GetString(2); } string qryIvaFact = @"SELECT sum(a.val_cuen) as totalIva FROM cxcfacmanualdet a inner join cxccuenta b on a.idcuenta=b.idcuenta and b.numdocrespaldo=@factura WHERE a.cod_cuen in ( select replace (val_camp, ';','') from gen_enti_dato where nom_camp='CXC_FIVA')"; SqlCommand cmdIvaFact = new SqlCommand(qryIvaFact, connx); cmdIvaFact.Parameters.Add("@factura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdIvaFact = cmdIvaFact.ExecuteReader(); if (rdIvaFact.HasRows) { rdIvaFact.Read(); if (!rdIvaFact.IsDBNull(0)) { _valorIva = Math.Round(rdIvaFact.GetDecimal(0), 0); } } } if (_telefonoCliente.Length == 0) { _telefonoCliente = "5716519494"; } Adquiriente adquirienteTmp = new Adquiriente { identificacion = _numDocCliente, codigoInterno = _idTercero.ToString(), razonSocial = _razonSocial, nombreSucursal = _razonSocial, correo = _correoCliente.Trim().Split(';')[0], telefono = _telefonoCliente, }; using (SqlConnection connXX = new SqlConnection(Properties.Settings.Default.DBConexion)) { connXX.Open(); string qryTipoDocDian = "SELECT TipoDocDian FROM homologaTipoDocDian WHERE IdTipoDoc=@tipoDoc"; SqlCommand cmdTipoDocDian = new SqlCommand(qryTipoDocDian, connXX); cmdTipoDocDian.Parameters.Add("@tipoDoc", SqlDbType.TinyInt).Value = _tipoDocCliente; Int16 tipoDoc = Int16.Parse(cmdTipoDocDian.ExecuteScalar().ToString()); _tipoDocCliente = byte.Parse(tipoDoc.ToString()); } adquirienteTmp.tipoIdentificacion = _tipoDocCliente; List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(_correoCliente.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); facturaEnviar.notificaciones = notificaciones; if (_RegimenFiscal.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } //TODO: Aqui insertar lo que se defina de Responsabilidades RUT documentoF2.adquiriente.responsabilidadesRUT if (_idNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (_idNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = "CO"; ubicacionCliente.codigoMunicipio = _municipioCliente; ubicacionCliente.direccion = _direccionCliente; adquirienteTmp.ubicacion = ubicacionCliente; documentoF2.adquiriente = adquirienteTmp; //double TotalGravadoIva = 0; //double TotalGravadoIca = 0; List <AnticiposItem> anticiposWrk = new List <AnticiposItem>(); AnticiposItem anticipoWrk = new AnticiposItem(); anticipoWrk.comprobante = "22"; anticipoWrk.valorAnticipo = double.Parse(_ValPagos.ToString()); anticiposWrk.Add(anticipoWrk); documentoF2.anticipos = anticiposWrk; List <TributosItem> tributosTMP = new List <TributosItem>(); List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributos = new DetalleTributos(); // Un Objeto por cada Tipo de Iva double valorImporte = double.Parse(_valorIva.ToString()); double valorBase = double.Parse((_Valtotal - _valorIva).ToString()); double porcentaje = Math.Round(((valorImporte / valorBase) * 100).TomarDecimales(2), 0); detalleTributos.valorImporte = valorImporte; detalleTributos.valorBase = valorBase; detalleTributos.porcentaje = porcentaje; tributosDetalle.Add(detalleTributos); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = valorImporte, detalles = tributosDetalle // Detalle de los Ivas }; //tributosTMP.Add(itemTributo); //************************************************************ Detalle de Factura por Administrativa Particular *********************************************************** using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); //string strDetalleFac = @"SELECT top 10 b.numdocrespaldo, c.* FROM cxcfacmanual a string strDetalleFac = @"SELECT top 1000 b.numdocrespaldo as factura,CONVERT(VARCHAR,c.IdCuenta)+'-'+CONVERT(varchar,C.num_regi) AS codProducto, c.* FROM cxcfacmanual a INNER JOIN cxccuenta b on a.idcuenta = b.idcuenta INNER JOIN cxcfacmanualconc c on c.IdCuenta = a.idcuenta WHERE c.val_unit_inte is null and NumDocRespaldo = @idFactura ORDER BY c.num_regi"; SqlCommand cmdDetalleFac = new SqlCommand(strDetalleFac, conexion01); cmdDetalleFac.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDetalleFac = cmdDetalleFac.ExecuteReader(); if (rdDetalleFac.HasRows) { Int16 nroLinea = 1; while (rdDetalleFac.Read()) { try { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); //Tributos para lalinea de producto DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdDetalleFac.GetString(1); lineaProducto.descripcion = rdDetalleFac.GetString(5); lineaProducto.valorCodigoInterno = codigoProducto; lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; double cantidad = double.Parse(rdDetalleFac.GetInt32(4).ToString()); lineaProducto.unidades = cantidad;// double.Parse(rdDetalleFac.GetInt32(4).ToString()); lineaProducto.unidadMedida = "94"; double valUnitario = double.Parse(rdDetalleFac.GetSqlMoney(6).ToString()); lineaProducto.valorUnitarioBruto = valUnitario; // double.Parse(rdDetalleFac.GetSqlMoney(6).ToString()); lineaProducto.valorBruto = valUnitario * cantidad; //double.Parse(rdDetalleFac.GetSqlMoney(6).ToString()); lineaProducto.valorBrutoMoneda = "COP"; double totalProducto = valUnitario * cantidad; ValorBruto += totalProducto; //double.Parse(rdDetalleFac.GetSqlMoney(6).ToString()); int tasaIva = 0; TibutosDetalle tributosWRKIva = new TibutosDetalle(); //Detalle de tributos, para el producto tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; if (rdDetalleFac.IsDBNull(10)) { tributosWRKIva.porcentaje = 0; } else { tasaIva = (rdDetalleFac.GetInt32(10)); tributosWRKIva.porcentaje = double.Parse(rdDetalleFac.GetInt32(10).ToString()).TomarDecimales(2); //************************** } tributosWRKIva.valorBase = totalProducto; // double.Parse(rdDetalleFac.GetSqlMoney(6).ToString()); tributosWRKIva.valorImporte = double.Parse(rdDetalleFac.GetSqlDouble(11).ToString()).TomarDecimales(2); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); lineaProducto.tributos = listaTributos; if (rdDetalleFac.GetInt32(10) > 0) { ValorTasaIva = rdDetalleFac.GetInt32(10); TotalGravadoIva += totalProducto;// double.Parse(rdDetalleFac.GetSqlMoney(5).ToString()); ValorTotalIva += double.Parse(rdDetalleFac.GetSqlDouble(11).ToString()).TomarDecimales(2); } else { TotalExcentoIva += totalProducto;// double.Parse(rdDetalleFac.GetSqlMoney(5).ToString()); } detalleProductos.Add(lineaProducto); nroLinea++; } catch (Exception sqlExp) { string error = $"Mensaje de Error:{sqlExp.Message} Traza de la Pila:{sqlExp.StackTrace}"; logFacturas.Warn($"Se ha presentado una Excepcion:{error}"); throw; } } } else // Si No hay Detalle de Productos { //todo: Insertar la funcion para el cargue de errores } } //***************************** Finalizacion Y Liquidacion documentoF2.detalles = detalleProductos; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP; ///<summary> ///Inicio de Totales de la Factura /// </summary> Totales totalesTmp = new Totales() { valorBruto = double.Parse(valorBase.ToString()), valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = valorBase, valorTotalConImpuestos = double.Parse(valorBase.ToString()) + double.Parse(valorImporte.ToString()), valorNeto = double.Parse(_ValCobrar.ToString()) }; documentoF2.totales = totalesTmp; documentoF2.documento = facturaEnviar; logFacturas.Info("Numero de Productos procesados, para JSon:" + detalleProductos.Count); try { string urlConsumo = Properties.Settings.Default.urlFacturaElectronica; //+ Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; request.Timeout = 60 * 1000; string facturaJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Factura:" + facturaJson); request.Method = "POST"; request.ContentType = "application/json"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(facturaJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arregle string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; logFacturas.Info("Codigo Status:" + response.StatusCode); logFacturas.Info("Descripcion Status:" + response.StatusDescription); StreamReader sr = new StreamReader(response.GetResponseStream()); string strsb = sr.ReadToEnd(); logFacturas.Info("Respuesta Recibida Transfiriendo:" + strsb); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(strsb); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string strActualiza = @"UPDATE dbo.facFacturaTempWEBService SET identificador=@identificador WHERE IdFactura=@nrofactura"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, conn); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nrofactura", SqlDbType.Int).Value = nroFactura; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Factura Actualizada con UUID en facFacturaTempWEBService"); using (WebClient webClient = new WebClient()) { try { string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Factura...Terminada"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML...Terminada"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facFacturaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facFacturaTempWSAdvertencias(IdFactura,CodAdvertencia,FecRegistro,DescripcionAdv) VALUES(@IdFactura, @CodAdvertencia, @FecRegistro, @DescripcionAdv)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn); cmdInsertarAdvertencia.Parameters.Add("@IdFactura", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdFactura"].Value = nroFactura; cmdInsertarAdvertencia.Parameters["@CodError"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionError"].Value = itemAdv.mensaje; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); } } } valorRpta = nroFactura.ToString(); } else { valorRpta = "99"; logFacturas.Info($"No fue Posible Realizar la Descarga de Archivos de la Factura con Identificadotr:{respuesta.resultado.UUID} Estado Proceso de Factura:{respuesta.esExitoso}"); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info("Se ha presentado una Falla durante la descarga de los objetos de la factura:" + webEx1.Message + " " + webEx1.InnerException.Message); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info($"No fue posible descargar los archivos.PDF, XML y QR !!! Causa:{exx.Message} Pila:{exx.StackTrace}"); valorRpta = "98"; } } } else { valorRpta = "98"; logFacturas.Info("!!! No fue posible Actualizar la Factura en la Tabla: facFacturaTempWEBService !!!"); } } return(valorRpta); } else { using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryInsertaError = @"INSERT INTO facFacturaTempWEBServiceError (IdFactura,CodError,DescripcionError,FecRegistro) VALUES(@IdFactura, @CodError, @DescripcionError, @FecRegistro)"; SqlCommand cmdInsertarError = new SqlCommand(qryInsertaError, conn); cmdInsertarError.Parameters.Add("@IdFactura", SqlDbType.Int).Value = nroFactura; cmdInsertarError.Parameters.Add("@CodError", SqlDbType.VarChar).Value = respuesta.codigo; cmdInsertarError.Parameters.Add("@DescripcionError", SqlDbType.NVarChar).Value = respuesta.mensaje; cmdInsertarError.Parameters.Add("@FecRegistro", SqlDbType.DateTime).Value = DateTime.Parse(respuesta.fecha); if (cmdInsertarError.ExecuteNonQuery() > 0) { valorRpta = nroFactura.ToString(); string qryDetErr = @"INSERT INTO facFacturaTempWSErrorDetalle (IdFactura,CodError,consecutivo,FecRegistro,DescripcionError) VALUES(@IdFactura, @CodError, @consecutivo, @FecRegistro, @DescripcionError)"; SqlCommand cmdDetErr = new SqlCommand(qryDetErr, conn); cmdDetErr.Parameters.Add("@IdFactura", SqlDbType.Int); cmdDetErr.Parameters.Add("@CodError", SqlDbType.VarChar); cmdDetErr.Parameters.Add("@consecutivo", SqlDbType.Int); cmdDetErr.Parameters.Add("@FecRegistro", SqlDbType.DateTime); cmdDetErr.Parameters.Add("@DescripcionError", SqlDbType.NVarChar); List <ErroresItem> listaErrores = new List <ErroresItem>(); int consecutivo = 1; foreach (ErroresItem itemErr in respuesta.errores) { cmdDetErr.Parameters["@IdFactura"].Value = nroFactura; cmdDetErr.Parameters["@CodError"].Value = itemErr.codigo; cmdDetErr.Parameters["@consecutivo"].Value = consecutivo; cmdDetErr.Parameters["@FecRegistro"].Value = DateTime.Parse(respuesta.fecha); cmdDetErr.Parameters["@DescripcionError"].Value = itemErr.mensaje; if (cmdDetErr.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Errores:codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } else { logFacturas.Info($"No es Posible Insertar Detalle de Errores: Codigo{itemErr.codigo} Mensaje:{itemErr.mensaje}"); } } } else { valorRpta = "99"; } } } return(valorRpta); // } //else //{ // logFacturas.Info("!!! Recuperacion Documentos de la Factura, No fue posible. No se Actualiza la Factura en facFacturaTempWEBService !!!"); // logFacturas.Warn("Respuesta recibida:" + strsb); // //*Aqui se debe insertar en la tabla de fallas // return "Recuperacion Documentos de la Factura, No fue posible. No se Actualiza la Factura en facFacturaTempWEBService"; //} } catch (WebException wExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + wExp01.Message + " Pila de LLamados:" + wExp01.StackTrace); return("93"); } catch (NotSupportedException nsExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + nsExp01.Message + " Pila de LLamados:" + nsExp01.StackTrace); return("94"); } catch (ProtocolViolationException pexp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + pexp01.Message + " Pila de LLamados:" + pexp01.StackTrace); return("95"); } catch (InvalidOperationException inExp01) { logFacturas.Warn("Se ha presentado una excepcion Http:" + inExp01.Message + " Pila de LLamados:" + inExp01.StackTrace); return("96"); } catch (HttpListenerException httpExp) { logFacturas.Warn("Se ha presentado una excepcion Http:" + httpExp.Message + " Pila de LLamados:" + httpExp.StackTrace); return("97"); } catch (Exception e) { logFacturas.Warn("Se ha presentado una excepcion:" + e.Message + " Pila de LLamados:" + e.StackTrace); return("98"); } } catch (Exception exp) { logFacturas.Warn("Se ha presentado una Excepcion:" + exp.Message + "Pila de LLamadas:" + exp.StackTrace); return("99"); } }
public string GetData(int nroFactura, int idCliente, int nroAtencion, string urlPdfFactura) { logFacturas.Info($"Se recibe factura con siguientes datos:Factura por Paquete:{ nroFactura} IdCliente:{ idCliente} nroAtencion:{ nroAtencion} urlPdf:{ urlPdfFactura}"); try { Int32 _idContrato = 0; Decimal _Valtotal = 0; Decimal _ValDescuento = 0; Decimal _ValDescuentoT = 0; Decimal _ValPagos = 0; Decimal _ValImpuesto = 0; //Int32 totalIvaFactura = 0; Decimal _ValCobrar = 0; DateTime _FecFactura = DateTime.Now; Decimal _valPos = 0; Decimal _valNoPos = 0; Int32 _IdUsuarioR = 0; string _usrNombre = string.Empty; string _usrNumDocumento = string.Empty; Byte _usrIdTipoDoc = 0; string _numDocCliente = string.Empty; Byte _tipoDocCliente = 0; string _razonSocial = string.Empty; string _repLegal = string.Empty; Int32 _idTercero = 0; string _RegimenFiscal = string.Empty; Int16 _idNaturaleza = 0; int concepto = 0; FormaPago formaPagoTmp = new FormaPago(); List <AnticiposItem> anticiposWrk = new List <AnticiposItem>(); //Fin de Inicializacion documentoRoot documentoF2 = new documentoRoot(); Documento facturaEnviar = new Documento(); facturaEnviar.identificadorTransaccion = "D7F719C2 - 75F4 - 4F06 - B7CB - F583FC28DBEE"; facturaEnviar.URLPDF = urlPdfFactura; facturaEnviar.NITFacturador = Properties.Settings.Default.NitHusi; facturaEnviar.prefijo = Properties.Settings.Default.Prefijo; facturaEnviar.numeroDocumento = nroFactura.ToString(); facturaEnviar.tipoDocumento = 1; facturaEnviar.subTipoDocumento = "01"; facturaEnviar.tipoOperacion = "10"; facturaEnviar.generaRepresentacionGrafica = false; using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string qryFacturaEnc = @"SELECT fact.idContrato,Valtotal,ValDescuento,ValDescuentoT,ValPagos,ValImpuesto,ValCobrar,FecFactura,valPos,valNoPos,fact.IdUsuarioR, usr.nom_usua,usr.NumDocumento,usr.IdTipoDoc,ter.IdTercero,ter.idRegimen,ter.IdNaturaleza,Cli.NomCliente,Cli.ApeCliente,cli.NumDocumento,Cli.IdTipoDoc FROM facFactura fact INNER JOIN ASI_USUA usr ON fact.IdUsuarioR = usr.IdUsuario INNER JOIN admAtencion Atn ON fact.IdDestino=Atn.IdAtencion INNER JOIN AdmCliente Cli ON Atn.IdCliente=Cli.IdCliente INNER JOIN genTercero ter ON Cli.IdTercero=ter.IdTercero WHERE IdFactura = @nroFactura"; SqlCommand cmdFacturaEnc = new SqlCommand(qryFacturaEnc, conn); cmdFacturaEnc.Parameters.Add("@nroFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdFacturaEnc = cmdFacturaEnc.ExecuteReader(); if (rdFacturaEnc.HasRows) { rdFacturaEnc.Read(); _idContrato = rdFacturaEnc.GetInt32(0); _Valtotal = Math.Round(rdFacturaEnc.GetDecimal(1), 0); _ValDescuento = Math.Round(rdFacturaEnc.GetDecimal(2), 0); _ValDescuentoT = Math.Round(rdFacturaEnc.GetDecimal(3), 0); _ValPagos = Math.Round(rdFacturaEnc.GetDecimal(4), 0); _ValImpuesto = Math.Round(rdFacturaEnc.GetDecimal(5), 0); _ValCobrar = Math.Round(rdFacturaEnc.GetDecimal(6), 0); _FecFactura = rdFacturaEnc.GetDateTime(7); _valPos = Math.Round(rdFacturaEnc.GetDecimal(8), 0); _valNoPos = Math.Round(rdFacturaEnc.GetDecimal(9), 0); _IdUsuarioR = rdFacturaEnc.GetInt32(10); _usrNombre = rdFacturaEnc.GetString(11); _usrNumDocumento = rdFacturaEnc.GetString(12); _usrIdTipoDoc = rdFacturaEnc.GetByte(13); _numDocCliente = rdFacturaEnc.GetString(19); _tipoDocCliente = rdFacturaEnc.GetByte(20); _razonSocial = $"{rdFacturaEnc.GetString(17)} {rdFacturaEnc.GetString(18)}"; //_repLegal = rdFacturaEnc.GetString(18); _idTercero = rdFacturaEnc.GetInt32(14); _RegimenFiscal = rdFacturaEnc.GetString(15); _idNaturaleza = rdFacturaEnc.GetInt16(16); } if (_ValPagos > 0) { string Consultapagos = "SELECT IdConcepto,Valor FROM facFacAtenConcepto WHERE IdFactura=@idFactura"; SqlCommand cmdConsultaPagos = new SqlCommand(Consultapagos, conn); cmdConsultaPagos.Parameters.Add("@idfactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdConsultapagos = cmdConsultaPagos.ExecuteReader(); if (rdConsultapagos.HasRows) { while (rdConsultapagos.Read()) { AnticiposItem anticipoWrk = new AnticiposItem(); anticipoWrk.comprobante = $"{rdConsultapagos.GetInt32(0)}-{nroFactura}"; anticipoWrk.valorAnticipo = double.Parse(rdConsultapagos.GetDouble(1).ToString()); anticiposWrk.Add(anticipoWrk); } } } } string formatoWrk = formatosFecha.formatofecha(_FecFactura); facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = "COP"; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; List <DetallesItem> detalleProductos = new List <DetallesItem>(); //****************** CLIENTE // Variables Inicializacion string _direccionCliente = string.Empty; string _telefonoCliente = string.Empty; string _municipioCliente = string.Empty; string _departamento = string.Empty; int _localizacionCliente = 0; string _correoCliente = string.Empty; facturaEnviar.fechaEmision = formatoWrk.Split('T')[0]; facturaEnviar.horaEmision = formatoWrk.Split('T')[1]; facturaEnviar.moneda = "COP"; formaPagoTmp.tipoPago = 1; formaPagoTmp.codigoMedio = "10"; facturaEnviar.formaPago = formaPagoTmp; using (SqlConnection connx = new SqlConnection(Properties.Settings.Default.DBConexion)) { connx.Open(); string qryDatosCliente1 = @"SELECT C.DirCasa,C.DirOficina,IdLugarCliente,C.TelCasa,C.TelCelular,C.TelOficina,C.CorreoE,pp.nom_dipo,SUBSTRING(PP.cod_dipo,5,5) AS 'Codigo' FROM facfactura F INNER JOIN admAtencion A ON F.IdDestino=A.IdAtencion INNER JOIN admCliente C ON A.IdCliente=C.IdCliente INNER JOIN GEN_DIVI_POLI PP ON c.IdLugarCliente=PP.IdLugar WHERE IdFactura=@idFactura"; SqlCommand cmdDatosCliente1 = new SqlCommand(qryDatosCliente1, connx); cmdDatosCliente1.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; SqlDataReader rdDatosCliente = cmdDatosCliente1.ExecuteReader(); if (rdDatosCliente.HasRows) { rdDatosCliente.Read(); if (rdDatosCliente.GetString(0).Length > 0) { _direccionCliente = rdDatosCliente.GetString(0); } else if (rdDatosCliente.GetString(1).Length > 0) { _direccionCliente = rdDatosCliente.GetString(1); } else { _direccionCliente = "Cra 7 No:40-62 Bogota"; } _municipioCliente = rdDatosCliente.GetString(8); _localizacionCliente = rdDatosCliente.GetInt32(2); if (rdDatosCliente.IsDBNull(6)) { _correoCliente = "*****@*****.**"; } else { _correoCliente = rdDatosCliente.GetString(6); } if (rdDatosCliente.GetString(3).Length > 0) { _telefonoCliente = rdDatosCliente.GetString(3); } else if (rdDatosCliente.GetString(4).Length > 0) { _telefonoCliente = rdDatosCliente.GetString(4); } else if (rdDatosCliente.GetString(5).Length > 0) { _telefonoCliente = rdDatosCliente.GetString(1); } if (_telefonoCliente.Length > 10) { _telefonoCliente = _telefonoCliente.Substring(0, 10); } } string qryDatosCliente2 = @"SELECT COD_DEPTO,COD_MPIO,DPTO,NOM_MPIO FROM GEN_DIVI_POLI A INNER JOIN HUSI_Divipola HB ON a.num_ptel=COD_DEPTO WHERE a.IdLugar=@idLugar"; SqlCommand cmdDatosCliente2 = new SqlCommand(qryDatosCliente2, connx); cmdDatosCliente2.Parameters.Add("@idLugar", SqlDbType.Int).Value = _localizacionCliente; SqlDataReader rdDatosCliente2 = cmdDatosCliente2.ExecuteReader(); if (rdDatosCliente2.HasRows) { rdDatosCliente2.Read(); _departamento = rdDatosCliente2.GetString(2); } } Adquiriente adquirienteTmp = new Adquiriente { identificacion = _numDocCliente, codigoInterno = _idTercero.ToString(), razonSocial = _razonSocial, nombreSucursal = _razonSocial, correo = _correoCliente.Trim().Split(';')[0], telefono = _telefonoCliente, }; using (SqlConnection connXX = new SqlConnection(Properties.Settings.Default.DBConexion)) { connXX.Open(); string qryTipoDocDian = "SELECT TipoDocDian FROM homologaTipoDocDian WHERE IdTipoDoc=@tipoDoc"; SqlCommand cmdTipoDocDian = new SqlCommand(qryTipoDocDian, connXX); cmdTipoDocDian.Parameters.Add("@tipoDoc", SqlDbType.TinyInt).Value = _tipoDocCliente; Int16 tipoDoc = Int16.Parse(cmdTipoDocDian.ExecuteScalar().ToString()); _tipoDocCliente = byte.Parse(tipoDoc.ToString()); } adquirienteTmp.tipoIdentificacion = _tipoDocCliente; List <NotificacionesItem> notificaciones = new List <NotificacionesItem>(); NotificacionesItem notificaItem = new NotificacionesItem(); notificaItem.tipo = 1; List <string> valorNotificacion = new List <string>(); valorNotificacion.Add(_correoCliente.Trim()); notificaItem.valor = valorNotificacion; notificaciones.Add(notificaItem); facturaEnviar.notificaciones = notificaciones; if (_RegimenFiscal.Equals("C")) { adquirienteTmp.tipoRegimen = "48"; } else { adquirienteTmp.tipoRegimen = "49"; } //TODO: Aqui insertar lo que se defina de Responsabilidades RUT documentoF2.adquiriente.responsabilidadesRUT if (_idNaturaleza == 3) { adquirienteTmp.tipoPersona = "1"; } else if (_idNaturaleza == 4) { adquirienteTmp.tipoPersona = "2"; } else { adquirienteTmp.tipoPersona = "0"; } List <string> responsanbilidadesR = new List <string>(); using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); SqlCommand sqlValidaDet = new SqlCommand("spTerceroResponsabilidadRut", conexion01); sqlValidaDet.CommandType = CommandType.StoredProcedure; sqlValidaDet.Parameters.Add("@idtercero", SqlDbType.Int).Value = _idTercero; SqlDataReader rdValidaDet = sqlValidaDet.ExecuteReader(); if (rdValidaDet.HasRows) { rdValidaDet.Read(); responsanbilidadesR.Add(rdValidaDet.GetString(0)); } else { responsanbilidadesR.Add("R-99-PN"); } } adquirienteTmp.responsabilidadesRUT = responsanbilidadesR; Ubicacion ubicacionCliente = new Ubicacion(); ubicacionCliente.pais = "CO"; ubicacionCliente.codigoMunicipio = _municipioCliente; ubicacionCliente.direccion = _direccionCliente; adquirienteTmp.ubicacion = ubicacionCliente; documentoF2.adquiriente = adquirienteTmp; double TotalGravadoIva = 0; double TotalGravadoIca = 0; ///<summary> ///Inicio de Totales de la Factura /// </summary> ////List<AnticiposItem> anticiposWrk = new List<AnticiposItem>(); ////AnticiposItem anticipoWrk = new AnticiposItem(); ////anticipoWrk.comprobante = "22"; ////anticipoWrk.valorAnticipo = double.Parse(_ValPagos.ToString()); ////anticiposWrk.Add(anticipoWrk); documentoF2.anticipos = anticiposWrk; //************************************************************ Detalle de Factura using (SqlConnection conexion01 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conexion01.Open(); string qryFactura = "SELECT IdFactura,NumFactura,IdDestino,IdTransaccion,IdPlan,IdContrato,ValTotal,ValDescuento,ValDescuentoT,ValPagos,ValImpuesto,ValCobrar,IndNotaCred,IndTipoFactura,CodEnti,CodEsor,FecFactura,Ruta,IdCausal,IdUsuarioR,IndHabilitado,IdNoFacturado,valPos,valNoPos FROM facFactura WHERE idFactura=@idFactura AND idDestino=@idAtencion"; SqlCommand cmdFactura = new SqlCommand(qryFactura, conexion01); cmdFactura.Parameters.Add("@idFactura", SqlDbType.Int).Value = nroFactura; cmdFactura.Parameters.Add("@idAtencion", SqlDbType.Int).Value = nroAtencion; SqlDataReader rdFactura = cmdFactura.ExecuteReader(); if (rdFactura.HasRows) { rdFactura.Read(); string strDetalleFac = @"SELECT isnull(h.NumAutorizacionInicial,'0') AS Nro_Autorizacion, upper(isnull(J.CodProMan,CASE ISNULL(f.REGCUM,'0') WHEN '0' THEN P.CodProducto ELSE F.REGCUM END )) as Cod_Servicio, upper(( isnull(J.NomPRoman,P.NomProducto)) ) as Des_Servicio, f.Cantidad as Cantidad, f.ValTotal as Vlr_Unitario_Serv, isnull(AD.ValTotal,round(F.Cantidad*F.ValTotal,0)) as Vlr_Total_Serv,O.idOrden FROM facfactura a INNER JOIN concontrato b on a.idcontrato=b.idcontrato INNER JOIN admatencion c on a.iddestino=c.idatencion INNER JOIN admcliente d on d.idcliente=c.idcliente INNER JOIN gentipodoc e on e.idtipodoc=d.idtipodoc INNER JOIN facfacturadet f on f.idfactura=a.idfactura LEFT JOIN facFacturaDetAjuDec AD ON AD.IdFactura = F.IdFactura and AD.IdProducto = F.IdProducto and AD.IdMovimiento = F.IdMovimiento INNER JOIN facFacturaDetOrden O on f.idFactura=O.idFactura AND f.idProducto=O.idProducto AND f.idMovimiento=O.idMovimiento INNER JOIN proproducto p on p.idproducto=f.idproducto AND p.IdProductoTipo IN (8,12) INNER JOIN facmovimiento g on g.idmovimiento=f.idmovimiento and g.iddestino=a.iddestino LEFT JOIN admatencioncontrato h on h.idatencion=a.iddestino and a.idcontrato=h.idcontrato and a.idplan=h.idplan and h.indhabilitado=1 LEFT JOIN contarifa i on i.idtarifa=b.idtarifa LEFT JOIN conManualAltDet J ON J.IdProducto = F.IdProducto AND J.IndHabilitado = 1 AND J.IdManual = i.IdManual WHERE a.IndTipoFactura='PAQ' AND a.IdFactura=@idFactura UNION ALL SELECT isnull(h.NumAutorizacionInicial,'0') AS Nro_Autorizacion, upper(isnull(J.CodProMan,CASE ISNULL(f.REGCUM,'0') WHEN '0' THEN P.CodProducto ELSE F.REGCUM END )) as Cod_Servicio, upper(( isnull(J.NomPRoman,P.NomProducto)) ) as Des_Servicio, f.Cantidad as Cantidad, f.ValTotal as Vlr_Unitario_Serv, isnull(AD.ValTotal,round(F.Cantidad*F.ValTotal,0)) as Vlr_Total_Serv,O.idOrden FROM facfactura a INNER JOIN concontrato b on a.idcontrato=b.idcontrato INNER JOIN admatencion c on a.iddestino=c.idatencion INNER JOIN admcliente d on d.idcliente=c.idcliente INNER JOIN gentipodoc e on e.idtipodoc=d.idtipodoc INNER JOIN facfacturadet f on f.idfactura=a.idfactura LEFT JOIN facFacturaDetAjuDec AD ON AD.IdFactura = F.IdFactura and AD.IdProducto = F.IdProducto and AD.IdMovimiento = F.IdMovimiento INNER JOIN facFacturaDetOrden O on f.idFactura=O.idFactura AND f.idProducto=O.idProducto AND f.idMovimiento=O.idMovimiento INNER JOIN proproducto p on p.idproducto=f.idproducto AND p.IdProductoTipo not IN (8,12,5) INNER JOIN facmovimiento g on g.idmovimiento=f.idmovimiento and g.iddestino=a.iddestino and g.IdProcPrincipal=2513 LEFT JOIN admatencioncontrato h on h.idatencion=a.iddestino and a.idcontrato=h.idcontrato and a.idplan=h.idplan and h.indhabilitado=1 LEFT JOIN contarifa i on i.idtarifa=b.idtarifa LEFT JOIN conManualAltDet J ON J.IdProducto = F.IdProducto AND J.IndHabilitado = 1 AND J.IdManual = i.IdManual WHERE a.IndTipoFactura='PAQ' AND a.idfactura=@idFactura UNION ALL SELECT isnull(h.NumAutorizacionInicial,'0') AS Nro_Autorizacion, upper(isnull(J.CodProMan,CASE ISNULL(f.REGCUM,'0') WHEN '0' THEN P.CodProducto ELSE F.REGCUM END )) as Cod_Servicio, upper(( isnull(J.NomPRoman,P.NomProducto)) ) as Des_Servicio, f.Cantidad as Cantidad, f.ValTotal as Vlr_Unitario_Serv, isnull(AD.ValTotal,round(F.Cantidad*F.ValTotal,0)) as Vlr_Total_Serv,O.idOrden FROM facfactura a INNER JOIN concontrato b on a.idcontrato=b.idcontrato INNER JOIN admatencion c on a.iddestino=c.idatencion INNER JOIN admcliente d on d.idcliente=c.idcliente INNER JOIN gentipodoc e on e.idtipodoc=d.idtipodoc INNER JOIN facfacturadet f on f.idfactura=a.idfactura LEFT JOIN facFacturaDetAjuDec AD ON AD.IdFactura = F.IdFactura and AD.IdProducto = F.IdProducto and AD.IdMovimiento = F.IdMovimiento INNER JOIN facFacturaDetOrden O on f.idFactura=O.idFactura AND f.idProducto=O.idProducto AND f.idMovimiento=O.idMovimiento INNER JOIN proproducto p on p.idproducto=f.idproducto AND p.IdProductoTipo not IN (8,12,5) INNER JOIN facmovimiento g on g.idmovimiento=f.idmovimiento and g.iddestino=a.iddestino and g.IdProcPrincipal<>2513 LEFT JOIN vwFacProcPrincAsocPaq PQ on PQ.idfactura = a.idfactura and g.IdProcPrincipal=PQ.IdProcPrincipal LEFT JOIN admatencioncontrato h on h.idatencion=a.iddestino and a.idcontrato=h.idcontrato and a.idplan=h.idplan and h.indhabilitado=1 LEFT JOIN contarifa i on i.idtarifa=b.idtarifa LEFT JOIN conManualAltDet J ON J.IdProducto = F.IdProducto AND J.IndHabilitado = 1 AND J.IdManual = i.IdManual WHERE PQ.idfactura is null and a.IndTipoFactura='PAQ' AND a.idfactura=@idFactura UNION ALL SELECT isnull(h.NumAutorizacionInicial,'0') AS Nro_Autorizacion, upper(isnull(J.CodProMan,CASE ISNULL(f.REGCUM,'0') WHEN '0' THEN P.CodProducto ELSE F.REGCUM END )) as Cod_Servicio, upper(( isnull(J.NomPRoman,P.NomProducto)) ) as Des_Servicio, f.Cantidad as Cantidad, f.ValTotal as Vlr_Unitario_Serv, isnull(AD.ValTotal,round(F.Cantidad*F.ValTotal,0)) as Vlr_Total_Serv,O.idOrden FROM facfactura a INNER JOIN concontrato b on a.idcontrato=b.idcontrato INNER JOIN admatencion c on a.iddestino=c.idatencion INNER JOIN admcliente d on d.idcliente=c.idcliente INNER JOIN gentipodoc e on e.idtipodoc=d.idtipodoc INNER JOIN facfacturadet f on f.idfactura=a.idfactura LEFT JOIN facFacturaDetAjuDec AD ON AD.IdFactura = F.IdFactura and AD.IdProducto = F.IdProducto and AD.IdMovimiento = F.IdMovimiento INNER JOIN facFacturaDetOrden O on f.idFactura=O.idFactura AND f.idProducto=O.idProducto AND f.idMovimiento=O.idMovimiento INNER JOIN proproducto p on p.idproducto=f.idproducto AND p.IdProductoTipo not IN (8,12) INNER JOIN facmovimiento g on g.idmovimiento=f.idmovimiento and g.iddestino=a.iddestino INNER JOIN ( select distinct IdMovimiento,IdProductoCx,IdProcPrincipal from facMovimientoDetCx ) GX ON GX.IdMovimiento=g.IdMovimiento AND GX.IdProductoCx=f.IdProducto LEFT JOIN vwFacProcPrincAsocPaq PQ on PQ.idfactura = a.idfactura and GX.IdProcPrincipal=PQ.IdProcPrincipal LEFT JOIN admatencioncontrato h on h.idatencion=a.iddestino and a.idcontrato=h.idcontrato and a.idplan=h.idplan and h.indhabilitado=1 LEFT JOIN contarifa i on i.idtarifa=b.idtarifa LEFT JOIN conManualAltDet J ON J.IdProducto = F.IdProducto AND J.IndHabilitado = 1 AND J.IdManual = i.IdManual WHERE PQ.idfactura is null and a.IndTipoFactura='PAQ' AND a.idfactura=@idFactura ORDER BY o.Idorden"; SqlCommand cmdDetalleFac = new SqlCommand(strDetalleFac, conexion01); cmdDetalleFac.Parameters.Add("@idFactura", SqlDbType.Int).Value = rdFactura.GetInt32(0); SqlDataReader rdDetalleFac = cmdDetalleFac.ExecuteReader(); if (rdDetalleFac.HasRows) { Int16 nroLinea = 1; while (rdDetalleFac.Read()) // Armar Detalle Fase II { try { List <TibutosDetalle> listaTributos = new List <TibutosDetalle>(); DetallesItem lineaProducto = new DetallesItem(); lineaProducto.tipoDetalle = 1; // Linea Normal string codigoProducto = rdDetalleFac.GetString(1); lineaProducto.valorCodigoInterno = codigoProducto; lineaProducto.codigoEstandar = "999"; lineaProducto.valorCodigoEstandar = codigoProducto; lineaProducto.descripcion = rdDetalleFac.GetString(2); lineaProducto.unidades = double.Parse(rdDetalleFac.GetDouble(3).ToString()); lineaProducto.unidadMedida = "94";// rdDetalleFac.GetString(19); lineaProducto.valorUnitarioBruto = double.Parse(rdDetalleFac.GetDouble(4).ToString()); lineaProducto.valorBruto = double.Parse(rdDetalleFac.GetDouble(5).ToString()); lineaProducto.valorBrutoMoneda = "COP"; TibutosDetalle tributosWRKIva = new TibutosDetalle(); tributosWRKIva.id = "01"; tributosWRKIva.nombre = "Iva"; tributosWRKIva.esImpuesto = true; tributosWRKIva.porcentaje = 0; tributosWRKIva.valorBase = double.Parse(rdDetalleFac.GetDouble(5).ToString()); tributosWRKIva.valorImporte = rdDetalleFac.GetDouble(5) * 0; TotalGravadoIva = TotalGravadoIva + rdDetalleFac.GetDouble(5); tributosWRKIva.tributoFijoUnidades = 0; tributosWRKIva.tributoFijoValorImporte = 0; listaTributos.Add(tributosWRKIva); TibutosDetalle tributosWRKIca = new TibutosDetalle(); tributosWRKIca.id = "02"; tributosWRKIca.nombre = "ICA"; tributosWRKIca.esImpuesto = true; tributosWRKIca.porcentaje = 0; tributosWRKIca.valorBase = double.Parse(rdDetalleFac.GetDouble(5).ToString()); tributosWRKIca.valorImporte = rdDetalleFac.GetDouble(5) * 0; TotalGravadoIca = TotalGravadoIca + rdDetalleFac.GetDouble(5); tributosWRKIca.tributoFijoUnidades = 0; tributosWRKIca.tributoFijoValorImporte = 0; //listaTributos.Add(tributosWRKIca); lineaProducto.tributos = listaTributos; detalleProductos.Add(lineaProducto); nroLinea++; } catch (Exception sqlExp) { logFacturas.Warn($"Se ha presentado Excepcion: {sqlExp.Message } Pilade llamados:{sqlExp.StackTrace}"); throw; } } } else // Si No hay Detalle de Productos { logFacturas.Info("No se encontro Detalle de productos para la factura. " + strDetalleFac); } } else // No se encuentra Informacion de la Factura y Atencion { logFacturas.Info("No se encontro Informacion de Factura y Atencion En facFactura." + qryFactura + " Parametros:::: Numero Factura:" + nroFactura + " Numero de Atencion:" + nroAtencion); } } List <TributosItem> tributosTMP = new List <TributosItem>(); List <DetalleTributos> tributosDetalle = new List <DetalleTributos>(); DetalleTributos detalleTributos = new DetalleTributos() // Un Objeto por cada Tipo de Iva { valorImporte = 0, valorBase = TotalGravadoIva, porcentaje = 0 }; tributosDetalle.Add(detalleTributos); TributosItem itemTributo = new TributosItem() { id = "01", //Total de Iva nombre = "Iva", esImpuesto = true, valorImporteTotal = 0, detalles = tributosDetalle // DEtalle de los Ivas }; tributosTMP.Add(itemTributo); documentoF2.tributos = tributosTMP; Totales totalesTmp = new Totales() { valorBruto = double.Parse(_Valtotal.ToString()), valorAnticipos = double.Parse(_ValPagos.ToString()), valorTotalSinImpuestos = double.Parse(_Valtotal.ToString()), valorTotalConImpuestos = TotalGravadoIva, valorNeto = double.Parse(_ValCobrar.ToString()) }; documentoF2.totales = totalesTmp; documentoF2.detalles = detalleProductos; try { //string urlConsumo = Properties.Settings.Default.urlFacturaElectronica + Properties.Settings.Default.recursoFacturaE; string urlConsumo = Properties.Settings.Default.urlFacturaElectronica;// + Properties.Settings.Default.recursoFacturaE; logFacturas.Info("URL de Request:" + urlConsumo); HttpWebRequest request = WebRequest.Create(urlConsumo) as HttpWebRequest; //request.Timeout = 60 * 1000; documentoF2.documento = facturaEnviar; string facturaJson = JsonConvert.SerializeObject(documentoF2); logFacturas.Info("Json de la Factura:" + facturaJson); request.Method = "POST"; request.ContentType = "application/json"; string Usuario = Properties.Settings.Default.usuario; string Clave = Properties.Settings.Default.clave; string credenciales = Convert.ToBase64String(Encoding.ASCII.GetBytes(Usuario + ":" + Clave)); request.Headers.Add("Authorization", "Basic " + credenciales); Byte[] data = Encoding.UTF8.GetBytes(facturaJson); Stream st = request.GetRequestStream(); st.Write(data, 0, data.Length); st.Close(); int loop1, loop2; NameValueCollection valores; valores = request.Headers; // Pone todos los nombres en un Arreglo string[] arr1 = valores.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { logFacturas.Info("Key: " + arr1[loop1] + "<br>"); // Todos los valores string[] arr2 = valores.GetValues(arr1[loop1]); for (loop2 = 0; loop2 < arr2.Length; loop2++) { logFacturas.Info("Value " + loop2 + ": " + arr2[loop2]); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; logFacturas.Info("Codigo Status:" + response.StatusCode); logFacturas.Info("Descripcion Status:" + response.StatusDescription); StreamReader sr = new StreamReader(response.GetResponseStream()); string strsb = sr.ReadToEnd(); logFacturas.Info("Respuesta:" + strsb); string valorRpta = "00"; RespuestaTransfiriendo respuesta = JsonConvert.DeserializeObject <RespuestaTransfiriendo>(strsb); if (respuesta.esExitoso) { logFacturas.Info($"PDF:{respuesta.resultado.URLPDF}"); logFacturas.Info($"XML:{respuesta.resultado.URLXML}"); logFacturas.Info($"UUID:{ respuesta.resultado.UUID}"); logFacturas.Info($"QR:{respuesta.resultado.QR}"); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn.Open(); string strActualiza = @"UPDATE dbo.facFacturaTempWEBService SET identificador=@identificador WHERE IdFactura=@nrofactura"; SqlCommand cmdActualiza = new SqlCommand(strActualiza, conn); cmdActualiza.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualiza.Parameters.Add("@nrofactura", SqlDbType.Int).Value = nroFactura; if (cmdActualiza.ExecuteNonQuery() > 0) { logFacturas.Info("Factura Actualizada con UUID en facFacturaTempWEBService"); using (WebClient webClient = new WebClient()) { try { string carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".pdf"; logFacturas.Info("Carpeta de Descarga:" + carpetaDescarga); webClient.DownloadFile(respuesta.resultado.URLPDF, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de PDF Factura...Terminada"); carpetaDescarga = Properties.Settings.Default.urlDescargaPdfFACT + DateTime.Now.Year + @"\" + respuesta.resultado.UUID + ".XML"; webClient.DownloadFile(respuesta.resultado.URLXML, carpetaDescarga); //System.Threading.Thread.Sleep(1000); logFacturas.Info($"Descarga de XML...Terminada"); using (SqlConnection conn3 = new SqlConnection(Properties.Settings.Default.DBConexion)) { conn3.Open(); string qryActualizaTempWEBService = @"UPDATE dbo.facFacturaTempWEBService SET CodCUFE=@cufe,cadenaQR=@cadenaQR WHERE identificador=@identificador"; SqlCommand cmdActualizaTempWEBService = new SqlCommand(qryActualizaTempWEBService, conn); cmdActualizaTempWEBService.Parameters.Add("@cufe", SqlDbType.VarChar).Value = respuesta.resultado.UUID; cmdActualizaTempWEBService.Parameters.Add("@cadenaQR", SqlDbType.NVarChar).Value = respuesta.resultado.QR; cmdActualizaTempWEBService.Parameters.Add("@identificador", SqlDbType.VarChar).Value = respuesta.resultado.UUID; if (cmdActualizaTempWEBService.ExecuteNonQuery() > 0) { logFacturas.Info("Descarga Existosa de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID + " Destino:" + carpetaDescarga); if (!(respuesta.advertencias is null)) { string qryAdvertencia = @"INSERT INTO dbo.facFacturaTempWSAdvertencias(IdFactura,CodAdvertencia,FecRegistro,DescripcionAdv) VALUES(@IdFactura, @CodAdvertencia, @FecRegistro, @DescripcionAdv)"; SqlCommand cmdInsertarAdvertencia = new SqlCommand(qryAdvertencia, conn); cmdInsertarAdvertencia.Parameters.Add("@IdFactura", SqlDbType.Int); cmdInsertarAdvertencia.Parameters.Add("@CodAdvertencia", SqlDbType.VarChar); cmdInsertarAdvertencia.Parameters.Add("@DescripcionAdv", SqlDbType.NVarChar); cmdInsertarAdvertencia.Parameters.Add("@FecRegistro", SqlDbType.DateTime); foreach (AdvertenciasItem itemAdv in respuesta.advertencias) { cmdInsertarAdvertencia.Parameters["@IdFactura"].Value = nroFactura; cmdInsertarAdvertencia.Parameters["@CodAdvertencia"].Value = itemAdv.codigo; //cmdInsertarAdvertencia.Parameters["@consecutivo"].Value = consecutivo; cmdInsertarAdvertencia.Parameters["@FecRegistro"].Value = DateTime.Now; cmdInsertarAdvertencia.Parameters["@DescripcionAdv"].Value = itemAdv.mensaje; if (cmdInsertarAdvertencia.ExecuteNonQuery() > 0) { logFacturas.Info($"Se Inserta Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroFactura.ToString(); } else { logFacturas.Info($"No es Posible Insertar Detalle de Advertencias: Codigo Advertencia{itemAdv.codigo} Mensaje Advertencia:{itemAdv.mensaje}"); valorRpta = nroFactura.ToString(); } } } else { logFacturas.Info($"No existen advertencias de DIAN !!! factura{nroFactura}"); valorRpta = nroFactura.ToString(); } valorRpta = nroFactura.ToString(); } else { logFacturas.Info("No fue Posible Realizar la Descarga de Archivos de la Factura con Identificadotr:" + respuesta.resultado.UUID); } } } catch (NotSupportedException nSuppExp) { logFacturas.Info("Se ha presentado una NotSupportedException durante la descarga de los objetos de la Factura:" + nSuppExp.Message + " " + nSuppExp.InnerException.Message); valorRpta = "9X"; } catch (ArgumentNullException argNull) { logFacturas.Info("Se ha presentado una ArgumentNullException durante la descarga de los objetos de la Factura:" + argNull.Message + " " + argNull.InnerException.Message); valorRpta = "9X"; } catch (WebException webEx1) { logFacturas.Info("Se ha presentado una Falla durante la descarga de los objetos de la factura:" + webEx1.Message + " " + webEx1.InnerException.Message); logFacturas.Warn($"Pila de Mensajes:::::{webEx1.StackTrace}"); valorRpta = "93"; } catch (Exception exx) { logFacturas.Info($"No fue posible descargar los archivos.PDF, XML y QR !!! Causa:{exx.Message} Pila:{exx.StackTrace}"); valorRpta = "98"; } } }