public ActionResult confirm(int rid)
        {
            TRM t = new TRM();
            var r = (from i in t.Requestinfos where i.Request_id == rid select i).FirstOrDefault();

            r.Status = "confirmed";
            t.SaveChanges();
            return(RedirectToAction("Requestprocess", "Login"));
        }
Пример #2
0
        public ActionResult Index(string re, string sk, DateTime st, DateTime en)
        {
            ASSESMENTEntities ctx = new ASSESMENTEntities();
            TRM tr = new TRM();

            tr.REQUESTNAME = re;
            tr.SKILL       = sk;
            tr.STARTDATE   = st;
            tr.ENDDATE     = en;
            ctx.TRMs.Add(tr);
            ctx.SaveChanges();
            return(View());
        }
        public ActionResult Spocdb(int trainer, int exicutive)
        {
            int rid = int.Parse(Session["Request_id"].ToString());
            TRM t   = new TRM();
            var r   = (from i in t.Requestinfos where i.Request_id == rid select i).FirstOrDefault();

            r.Exicutive_id = exicutive;
            r.Trainer_id   = trainer;
            r.Status       = "assigned";
            t.SaveChanges();

            return(RedirectToAction("Requestprocess", "Login"));
        }
        public ActionResult Loginprocess(string un, string pass)
        {
            TRM t = new TRM();

            var res = t.Logininfos.Where(m => m.User_name == un && m.Password == pass).FirstOrDefault();

            if (res != null)
            {
                Session["rid"] = res.Role_id;
                Session["id"]  = res.Id;
                return(RedirectToAction("Requestprocess", "Login"));
            }
            return(View());
        }
        public ActionResult AddRequest(string sk, DateTime sd, DateTime ed, string rn)
        {
            TRM         t = new TRM();
            Requestinfo r = new Requestinfo();

            r.Skill      = sk;
            r.Start_date = sd;
            r.End_date   = ed;
            r.Status     = "Request";
            int id = int.Parse(Session["id"].ToString());

            r.pm_id   = id;
            r.Reqname = rn;
            t.Requestinfos.Add(r);
            t.SaveChanges();
            return(RedirectToAction("Requestprocess", "Login"));
        }
        public ActionResult Spocsub(int rid)
        {
            Session["Request_id"] = rid;

            TRM t   = new TRM();
            var obj = t.Logininfos.Where(i => i.Role_id == 3);

            SelectListItem[] trainers = new SelectListItem[obj.Count()];
            int j = 0;

            foreach (var i in obj)
            {
                trainers[j] = new SelectListItem()
                {
                    Text = i.Id.ToString(), Value = i.Id.ToString()
                };
                j++;
            }
            ViewBag.trainers = trainers;
            var obj1 = t.Logininfos.Where(i => i.Role_id == 4);

            SelectListItem[] exicutives = new SelectListItem[obj1.Count()];
            j = 0;
            foreach (var i in obj1)
            {
                exicutives[j] = new SelectListItem()
                {
                    Text = i.Id.ToString(), Value = i.Id.ToString()
                };
                j++;
            }
            ViewBag.exicutives = exicutives;


            return(View());
        }
Пример #7
0
        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");
            }
        }
Пример #8
0
        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";
                                    }
                                }
                            }
Пример #9
0
        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");
            }
        }