private List <ImpuestoType> ImpuestoFactura(ComprobanteElectronicoCRI value, int numeroLinea)
        {
            List <ImpuestoType> detalleImpuesto = new List <ImpuestoType>();

            if (value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto.Count == 0)
            {
                return(detalleImpuesto);
            }
            for (int n = 0; n <= value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto.Count - 1; n++)
            {
                ImpuestoType lineaImpuesto = new ImpuestoType
                {
                    Codigo      = (ImpuestoTypeCodigo)Enum.Parse(typeof(ImpuestoTypeCodigo), value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].Codigo),//Codigo del Impuesto
                    Tarifa      = value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].Tarifa.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                    Monto       = value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].Monto.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                    Exoneracion = new ExoneracionType
                    {
                        TipoDocumento     = (ExoneracionTypeTipoDocumento)Enum.Parse(typeof(ExoneracionTypeTipoDocumento), value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].ExoneracionTipoDocumento),
                        NumeroDocumento   = value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].ExoneracionNumeroDocumento,
                        NombreInstitucion = value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].ExoneracionNombreInstitucion,
                        FechaEmision      = value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].ExoneracionFechaEmision,
                        MontoImpuesto     = value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].ExoneracionMontoImpuesto.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                        PorcentajeCompra  = value.ListaComprobanteElectronicoCRIDetalle[numeroLinea].ListaComprobanteElectronicoCRIDetalleImpuesto[n].ExoneracionPorcentajeCompra.ToString()
                    }
                };
                detalleImpuesto.Add(lineaImpuesto);
            }
            return(detalleImpuesto);
        }
Example #2
0
        private List <FacturaElectronicaLineaDetalle> GetDetalleFromFacturaDB(ICollection <Factura_Detalle> items)
        {
            List <FacturaElectronicaLineaDetalle> lst = new List <FacturaElectronicaLineaDetalle>();
            int NumeroLinea = 1;

            foreach (Factura_Detalle q in items)
            {
                FacturaElectronicaLineaDetalle fd = new FacturaElectronicaLineaDetalle()
                {
                    Cantidad        = q.Cantidad,
                    CodigoComercial = new CodigoType[] {
                        new CodigoType()
                        {
                            Codigo = q.Codigo,
                            Tipo   = CodigoTypeTipo.Item01
                        }
                    },
                    Detalle         = q.ProductoServicio,
                    NumeroLinea     = NumeroLinea.ToString(),
                    PrecioUnitario  = q.PrecioUnitario,
                    SubTotal        = q.SubTotal,
                    UnidadMedida    = EnumUtils.SetTypeString <UnidadMedidaType>(q.Unidad_Medida),
                    MontoTotal      = q.Monto_Total,
                    MontoTotalLinea = q.Monto_Total_Linea,
                };

                if (q.Monto_Descuento.HasValue && q.Monto_Descuento.Value != 0)
                {
                    fd.Descuento = new DescuentoType[] {
                        new DescuentoType()
                        {
                            MontoDescuento      = q.Monto_Descuento.Value,
                            NaturalezaDescuento = string.IsNullOrEmpty(q.Naturaleza_Descuento) ? "No se indica" : q.Naturaleza_Descuento
                        }
                    };
                }



                if (q.Factura_Detalle_Impuesto != null && q.Factura_Detalle_Impuesto.Count > 0)
                {
                    List <ImpuestoType> impuestoD = new List <ImpuestoType>();
                    foreach (Factura_Detalle_Impuesto impuesto in q.Factura_Detalle_Impuesto)
                    {
                        if (impuesto.Exento)
                        {
                            //exento parcial
                            if (!string.IsNullOrWhiteSpace(impuesto.Exoneracion_PorcentajeCompra) && impuesto.Exoneracion_MontoImpuesto.HasValue)//exento parcial
                            {
                                ImpuestoType impuestoHacienda = new ImpuestoType()
                                {
                                    Codigo          = EnumUtils.SetTypeString <ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                    Monto           = impuesto.Impuesto_Monto,
                                    TarifaSpecified = true,
                                    Tarifa          = impuesto.Impuesto_Tarifa,
                                    Exoneracion     = new ExoneracionType()
                                    {
                                        FechaEmision          = impuesto.Exoneracion_FechaEmision.Value,
                                        MontoExoneracion      = impuesto.Exoneracion_MontoImpuesto.Value,
                                        NombreInstitucion     = impuesto.Exoneracion_NombreInstitucion,
                                        NumeroDocumento       = impuesto.Exoneracion_NumeroDocumento,
                                        PorcentajeExoneracion = impuesto.Exoneracion_PorcentajeCompra,
                                        TipoDocumento         = EnumUtils.SetTypeString <ExoneracionTypeTipoDocumento>(impuesto.Exoneracion_TipoDocumento)
                                    },
                                };

                                if (!string.IsNullOrEmpty(impuesto.CodigoTarifa))
                                {
                                    impuestoHacienda.CodigoTarifa          = EnumUtils.SetTypeString <ImpuestoTypeCodigoTarifa>(impuesto.CodigoTarifa);
                                    impuestoHacienda.CodigoTarifaSpecified = true;
                                }
                                else
                                {
                                    impuestoHacienda.CodigoTarifaSpecified = false;
                                }

                                if (impuesto.FactorIVA.HasValue && impuesto.FactorIVA > 0)
                                {
                                    impuestoHacienda.FactorIVA = impuesto.FactorIVA.Value;
                                }


                                impuestoD.Add(impuestoHacienda);
                            }
                            else if (impuesto.Impuesto_Tarifa != 0) //exento linea total todo a 0
                            {
                                impuestoD.Add(new ImpuestoType()
                                {
                                    Codigo = EnumUtils.SetTypeString <ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                    Monto  = 0,
                                    Tarifa = 0,
                                });
                            }
                        }
                        else//gravado
                        {
                            impuestoD.Add(new ImpuestoType()
                            {
                                Codigo = EnumUtils.SetTypeString <ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                Monto  = impuesto.Impuesto_Monto,
                                Tarifa = impuesto.Impuesto_Tarifa,
                            });
                        }
                    }

                    if (impuestoD.Count != 0)
                    {
                        fd.Impuesto = impuestoD.ToArray();
                    }
                }


                lst.Add(fd);
                NumeroLinea++;
            }

            return(lst);
        }
        public static ResponseType setDocumento(DataTable Fac, DataTable impFactura)
        {
            Procesos.responseStatus = "";
            DateTime _createdDate;

            _createdDate      = DateTime.Now;
            Procesos.dateSend = _createdDate;
            try
            {
                int i = 0;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
                ServiceClient client    = new ServiceClient();
                DocumentType  oDocument = new DocumentType();
                ResponseType  oResponse = new ResponseType();

                SoftwareSeguridadType oSeguridad = new SoftwareSeguridadType();
                oSeguridad.TipoDocumento    = Procesos.Buscar_ValorCab("TipoDocumento", i, Fac);
                oSeguridad.GuidEmpresa      = Procesos.Buscar_ValorCab("GuidEmpresa", i, Fac);
                oSeguridad.GuidOrigen       = Procesos.Buscar_ValorCab("GuidOrigen", i, Fac);
                oSeguridad.HashSeguridad    = Procesos.Buscar_ValorCab("HashSeguridad", i, Fac);
                oSeguridad.ClaveTecnica     = Procesos.Buscar_ValorCab("ClaveTecnica", i, Fac);
                oSeguridad.CodigoErp        = Procesos.Buscar_ValorCab("CodigoErp", i, Fac);
                oSeguridad.NumeroDocumento  = Procesos.Buscar_ValorCab("NumeroDocumento", i, Fac);
                oDocument.SoftwareSeguridad = oSeguridad;

                EmisorType oEmisor = new EmisorType();
                oEmisor.EmiTipoPersona        = Convert.ToInt32(Procesos.Buscar_ValorCab("EmiTipoPersona", i, Fac));
                oEmisor.EmiTipoIdentificacion = Convert.ToInt32(Procesos.Buscar_ValorCab("EmiTipoIdentificacion", i, Fac));
                oEmisor.EmiIdentificacion     = Procesos.Buscar_ValorCab("EmiIdentificacion", i, Fac);
                oEmisor.EmiDVIdentificacion   = Procesos.Buscar_ValorCab("EmiDVIdentificacion", i, Fac);
                oDocument.EmisorData          = oEmisor;

                CompradorType oComprador = new CompradorType();
                oComprador.CompradorTipoPersona        = Procesos.Buscar_ValorCab("CompradorTipoPersona", i, Fac);
                oComprador.CompradorTipoIdentificacion = Procesos.Buscar_ValorCab("CompradorTipoIdentificacion", i, Fac);
                oComprador.CompradorIdentificacion     = Procesos.Buscar_ValorCab("CompradorIdentificacion", i, Fac);
                oComprador.CompradorDVIdentificacion   = Procesos.Buscar_ValorCab("CompradorDVIdentificacion", i, Fac);
                oComprador.CompradorTipoRegimen        = Procesos.Buscar_ValorCab("CompradorTipoRegimen", i, Fac);
                oComprador.CompradorRespFiscal         = Procesos.Buscar_ValorCab("CompradorRespFiscal", i, Fac);
                oComprador.CompradorImpuesto           = Procesos.Buscar_ValorCab("CompradorImpuesto", i, Fac);
                oComprador.CompradorRazonSocial        = Procesos.Buscar_ValorCab("CompradorRazonSocial", i, Fac);
                oComprador.CompradorPrimerNombre       = Procesos.Buscar_ValorCab("CompradorPrimerNombre", i, Fac);
                oComprador.CompradorSegundoNombre      = Procesos.Buscar_ValorCab("CompradorSegundoNombre", i, Fac);
                oComprador.CompradorApellidos          = Procesos.Buscar_ValorCab("CompradorApellidos", i, Fac);
                oComprador.CompradorNombreCompleto     = Procesos.Buscar_ValorCab("CompradorNombreCompleto", i, Fac);
                oComprador.CompradorPais              = Procesos.Buscar_ValorCab("CompradorPais", i, Fac);
                oComprador.CompradorNombrePais        = Procesos.Buscar_ValorCab("CompradorNombrePais", i, Fac);
                oComprador.CompradorDepartamento      = Procesos.Buscar_ValorCab("CompradorDepartamento", i, Fac);
                oComprador.CompradorCodDepartamento   = Procesos.Buscar_ValorCab("CompradorCodDepartamento", i, Fac);
                oComprador.CompradorCiudad            = Procesos.Buscar_ValorCab("CompradorCiudad", i, Fac);
                oComprador.CompradorCodCiudad         = Procesos.Buscar_ValorCab("CompradorCodCiudad", i, Fac);
                oComprador.CompradorCodPostal         = Procesos.Buscar_ValorCab("CompradorCodPostal", i, Fac);
                oComprador.CompradorDireccion         = Procesos.Buscar_ValorCab("CompradorDireccion", i, Fac);
                oComprador.CompradorEnviarCorreo      = Convert.ToBoolean(Procesos.Buscar_ValorCab("CompradorEnviarCorreo", i, Fac));
                oComprador.CompradorTelefonoCont      = Procesos.Buscar_ValorCab("CompradorTelefonoCont", i, Fac);
                oComprador.CompradorCorreoElectronico = Procesos.Buscar_ValorCab("CompradorCorreoElectronico", i, Fac);
                oDocument.CompradorFactura            = oComprador;

                EncabezadoType oEncabezado = new EncabezadoType();
                oEncabezado.FacTipoFactura        = Procesos.Buscar_ValorCab("FacTipoFactura", i, Fac);
                oEncabezado.FacCodOperacion       = Procesos.Buscar_ValorCab("FacCodOperacion", i, Fac);
                oEncabezado.FacFechaHoraFactura   = Procesos.Buscar_ValorCab("FacFechaHoraFactura", i, Fac);
                oEncabezado.FacFechaIni           = Procesos.Buscar_ValorCab("FacFechaIni", i, Fac);
                oEncabezado.FacFechaFin           = Procesos.Buscar_ValorCab("FacFechaFin", i, Fac);
                oEncabezado.FacRefContigencia     = Procesos.Buscar_ValorCab("FacRefContigencia", i, Fac);
                oEncabezado.FacTipoRefContigencia = Procesos.Buscar_ValorCab("FacTipoRefContigencia", i, Fac);
                oEncabezado.FacFechaContingencia  = Procesos.Buscar_ValorCab("FacFechaContingencia", i, Fac);
                oDocument.EncabezadoData          = oEncabezado;

                InfoMonetarioType oInfoMoneda = new InfoMonetarioType();
                oInfoMoneda.FacCodMoneda          = Procesos.Buscar_ValorCab("FacCodMoneda", i, Fac);
                oInfoMoneda.FacTotalImporteBruto  = Procesos.Buscar_ValorCab("FacTotalImporteBruto", i, Fac);
                oInfoMoneda.FacTotalCargos        = Procesos.Buscar_ValorCab("FacTotalCargos", i, Fac);
                oInfoMoneda.FacTotalDescuentos    = Procesos.Buscar_ValorCab("FacTotalDescuentos", i, Fac);
                oInfoMoneda.FacTotalBaseImponible = Procesos.Buscar_ValorCab("FacTotalBaseImponible", i, Fac);
                oInfoMoneda.FacTotalBrutoMasImp   = Procesos.Buscar_ValorCab("FacTotalBrutoMasImp", i, Fac);
                oInfoMoneda.FacTotalAnticipos     = Procesos.Buscar_ValorCab("FacTotalAnticipos", i, Fac);
                oInfoMoneda.FacTotalFactura       = Procesos.Buscar_ValorCab("FacTotalFactura", i, Fac);
                oDocument.InfoMonetarioData       = oInfoMoneda;

                FormaPagoType oFormaPago = new FormaPagoType();
                oDocument.lsFormaPago        = new FormaPagoType[1];
                oFormaPago.FacMetodoPago     = Procesos.Buscar_ValorCab("FacMetodoPago", i, Fac);
                oFormaPago.FacFormaPago      = Procesos.Buscar_ValorCab("FacFormaPago", i, Fac);
                oFormaPago.FacVencimientoFac = Procesos.Buscar_ValorCab("FacVencimientoFac", i, Fac);
                oDocument.lsFormaPago[0]     = oFormaPago;


                i = 0;
                if (impFactura.Rows.Count > 0)
                {
                    foreach (DataRow _row in impFactura.Rows)
                    {
                        ImpuestoType oImpuestos = new ImpuestoType();
                        oDocument.LsImpuestos          = new ImpuestoType[impFactura.Rows.Count];
                        oImpuestos.CodigoImpuesto      = Procesos.Buscar_ValorCab("CodigoImpuesto", i, impFactura);
                        oImpuestos.NombreImpuesto      = Procesos.Buscar_ValorCab("NombreImpuesto", i, impFactura);
                        oImpuestos.EsRetencionImpuesto = Convert.ToBoolean(Procesos.Buscar_ValorCab("EsRetencionImpuesto", i, impFactura));
                        oImpuestos.BaseImponible       = Procesos.Buscar_ValorCab("BaseImponible", i, impFactura);
                        oImpuestos.Porcentaje          = Procesos.Buscar_ValorCab("Porcentaje", i, impFactura);
                        oImpuestos.ValorImpuesto       = Procesos.Buscar_ValorCab("ValorImpuesto", i, impFactura);
                        oDocument.LsImpuestos[i]       = oImpuestos;
                        i++;
                    }
                }

                i = 0;
                if (Fac.Rows.Count > 0)
                {
                    foreach (DataRow _row in Fac.Rows)
                    {
                        DetalleType oDetalle = new DetalleType();
                        oDocument.LsDetalle         = new DetalleType[Fac.Rows.Count];
                        oDetalle.DetFacConsecutivo  = Convert.ToInt32(Procesos.Buscar_ValorCab("DetFacConsecutivo", i, Fac));
                        oDetalle.Codigo             = Procesos.Buscar_ValorCab("Codigo", i, Fac);
                        oDetalle.CodigoEstandar     = Procesos.Buscar_ValorCab("CodigoEstandar", i, Fac);
                        oDetalle.Codificacion       = Procesos.Buscar_ValorCab("Codificacion", i, Fac);
                        oDetalle.Descripcion        = Procesos.Buscar_ValorCab("Descripcion", i, Fac);
                        oDetalle.Cantidad           = Procesos.Buscar_ValorCab("Cantidad", i, Fac);
                        oDetalle.UnidadMedida       = Procesos.Buscar_ValorCab("UnidadMedida", i, Fac);
                        oDetalle.PrecioUnitario     = Procesos.Buscar_ValorCab("PrecioUnitario", i, Fac);
                        oDetalle.PrecioSinImpuestos = Procesos.Buscar_ValorCab("PrecioSinImpuestos", i, Fac);
                        oDetalle.PrecioTotal        = Procesos.Buscar_ValorCab("PrecioTotal", i, Fac);
                        oDocument.LsDetalle[i]      = oDetalle;
                        i++;
                    }
                }

                i = 0;
                if (Fac.Rows.Count > 0)
                {
                    foreach (DataRow _row in Fac.Rows)
                    {
                        ImpuestoDetalleType oImpuDetalle = new ImpuestoDetalleType();
                        oDocument.LsDetalleImpuesto      = new ImpuestoDetalleType[Fac.Rows.Count];
                        oImpuDetalle.Secuencia           = Convert.ToInt32(Procesos.Buscar_ValorCab("Secuencia", i, Fac));
                        oImpuDetalle.CodigoImpuesto      = Procesos.Buscar_ValorCab("CodigoImpuesto", i, Fac);
                        oImpuDetalle.NombreImpuesto      = Procesos.Buscar_ValorCab("NombreImpuesto", i, Fac);
                        oImpuDetalle.EsRetencionImpuesto = Convert.ToBoolean(Procesos.Buscar_ValorCab("EsRetencionImpuesto", i, Fac));
                        oImpuDetalle.BaseImponible       = Procesos.Buscar_ValorCab("BaseImponible", i, Fac);
                        oImpuDetalle.Porcentaje          = Procesos.Buscar_ValorCab("Porcentaje", i, Fac);
                        oImpuDetalle.ValorImpuesto       = Procesos.Buscar_ValorCab("ValorImpuesto", i, Fac);
                        oDocument.LsDetalleImpuesto[i]   = oImpuDetalle;
                        i++;
                    }
                }

                i = 0;

                AutorizacionType oAutorizacion = new AutorizacionType();
                oAutorizacion.AutFechaInicio     = Procesos.Buscar_ValorCab("AutFechaInicio", i, Fac);
                oAutorizacion.AutFechaFinal      = Procesos.Buscar_ValorCab("AutFechaFinal", i, Fac);
                oAutorizacion.AutNumAutorizacion = Procesos.Buscar_ValorCab("AutNumAutorizacion", i, Fac);
                oAutorizacion.AutPrefijo         = Procesos.Buscar_ValorCab("AutPrefijo", i, Fac);
                oAutorizacion.AutSecuenciaInicio = Procesos.Buscar_ValorCab("AutSecuenciaInicio", i, Fac);
                oAutorizacion.AutSecuenciaFinal  = Procesos.Buscar_ValorCab("AutSecuenciaFinal", i, Fac);
                oDocument.AutorizacionFactura    = oAutorizacion;

                var serxml = new System.Xml.Serialization.XmlSerializer(oDocument.GetType());
                var ms     = new MemoryStream();
                serxml.Serialize(ms, oDocument);
                string xml = Encoding.UTF8.GetString(ms.ToArray());
                Procesos.requestSend = xml;
                Procesos.EscribirLogFileTXT(xml);

                oResponse = client.SetDocument(oDocument);

                client.Close();

                return(oResponse);
            }
            catch (Exception ex)
            {
                Procesos.EscribirLogFileTXT("setDocumento: " + ex.Message);
                return(null);
            }
        }