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); }
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); } }