public void ArmarBaja(String motivoBaja) { DocumentoVentaGP docGP = new DocumentoVentaGP(); docGP.GetDatosDocumentoVenta(this.Sopnumbe, this.Soptype); _documentoBaja = new ComunicacionBaja { IdDocumento = string.Format("RA-{0:yyyyMMdd}-" + Utiles.Derecha(docGP.DocVenta.correlativo, 5), DateTime.Today), FechaEmision = DateTime.Today.ToString(FormatoFecha), FechaReferencia = DateTime.Today.ToString(FormatoFecha), Emisor = new Contribuyente() { NroDocumento = docGP.DocVenta.emisorNroDoc, TipoDocumento = docGP.DocVenta.emisorTipoDoc, Direccion = docGP.DocVenta.emisorDireccion, Urbanizacion = docGP.DocVenta.emisorUrbanizacion, Departamento = docGP.DocVenta.emisorDepartamento, Provincia = docGP.DocVenta.emisorProvincia, Distrito = docGP.DocVenta.emisorDistrito, NombreComercial = docGP.DocVenta.emisorNombre, NombreLegal = docGP.DocVenta.emisorNombre, Ubigeo = docGP.DocVenta.emisorUbigeo }, Bajas = new List <DocumentoBaja>() }; _documentoBaja.Bajas.Add(new DocumentoBaja { Id = 1, Correlativo = docGP.DocVenta.numero, TipoDocumento = docGP.DocVenta.tipoDocumento, Serie = docGP.DocVenta.serie, MotivoBaja = motivoBaja }); }
public string TimbraYEnviaServicioDeImpuesto(string ruc, string usuario, string usuarioPassword, DocumentoVentaGP documentoGP) { var docWs = ArmaDocumentoEnviarWS(documentoGP); DocumentResponse response = ServicioWS.Enviar("89ab70d025c1cb8c5bac3f5ac319a94728e42e3a", "3cfb75199b5d14cdb706a55555a055488b1fad6c", docWs, "0"); if (response.codigo == 200) { byte[] converbyte = Convert.FromBase64String(response.xml.ToString()); return(System.Text.Encoding.UTF8.GetString(converbyte)); } else { string docSerializado = string.Empty; XmlSerializer xml = new XmlSerializer(typeof(FacturaGeneral)); using (StringWriter sw = new StringWriter()) { xml.Serialize(sw, docWs); docSerializado = sw.ToString(); } //if (response.codigo == 202 || response.codigo == 207) // throw new ArgumentException(response.codigo.ToString() + " - " + response.mensaje + " - " + response.mensajesValidacion.ToString()); //else throw new TimeoutException("Excepción al conectarse con el Web Service de Facturación [TimbraYEnviaServicioDeImpuesto] " + response.codigo.ToString() + " - " + response.mensaje + Environment.NewLine + response.mensajesValidacion.ToString() + Environment.NewLine + docSerializado); } }
/// <summary> /// Arma el objeto FacturaGeneral que luego se debe enviar el web service /// </summary> /// <param name="documentoGP"></param> /// <returns></returns> private FacturaGeneral ArmaDocumentoEnviarWS(DocumentoVentaGP documentoGP) { //DocEnviarWS es el objeto del servicio web que se arma a traves del objeto documentoGP DocEnviarWS = new FacturaGeneral(); int i = 0; //FACTURA GENERAL DocEnviarWS.cantidadDecimales = documentoGP.DocVenta.cantidadDecimales.ToString(); DocEnviarWS.consecutivoDocumento = documentoGP.DocVenta.consecutivoDocumento; #region DATOS PRINCIPALES DEL CLIENTE DocEnviarWS.cliente = new Cliente(); DocEnviarWS.cliente.nombreRazonSocial = documentoGP.DocVenta.cliente_nombreRazonSocial; DocEnviarWS.cliente.numeroDocumento = documentoGP.DocVenta.cliente_numeroDocumento; DocEnviarWS.cliente.tipoIdentificacion = documentoGP.DocVenta.cliente_tipoIdentificacion.ToString(); DocEnviarWS.cliente.tipoPersona = documentoGP.DocVenta.cliente_tipoPersona; DocEnviarWS.cliente.notificar = documentoGP.DocVenta.cliente_notificar; //DocEnviarWS.cliente.telefono = documentoGP.DocVenta.cliente_telefono; DocEnviarWS.cliente.email = documentoGP.DocVenta.cliente_email; DocEnviarWS.cliente.numeroIdentificacionDV = documentoGP.DocVenta.cliente_numeroIdentificacionDV; if (!string.IsNullOrEmpty(documentoGP.DocVenta.cliente_nombreComercial)) { DocEnviarWS.cliente.nombreComercial = documentoGP.DocVenta.cliente_nombreComercial; } if (!string.IsNullOrEmpty(documentoGP.DocVenta.cliente_actividadEconomicaCIIU)) { DocEnviarWS.cliente.actividadEconomicaCIIU = documentoGP.DocVenta.cliente_actividadEconomicaCIIU; } #endregion #region DIRECCION DEL CLIENTE DocEnviarWS.cliente.direccionCliente = new Direccion(); Direccion direccion1 = new Direccion(); direccion1.ciudad = documentoGP.DocVenta.cliente_difCiudad; direccion1.codigoDepartamento = documentoGP.DocVenta.cliente_difcodigoDepartamento; //"11"; direccion1.departamento = documentoGP.DocVenta.cliente_difdepartamento; direccion1.direccion = documentoGP.DocVenta.cliente_difdireccion; //"Direccion"; direccion1.lenguaje = documentoGP.DocVenta.cliente_diflenguaje; //"es"; direccion1.municipio = documentoGP.DocVenta.cliente_difmunicipio; // "11001"; direccion1.pais = documentoGP.DocVenta.cliente_difpais; // "CO"; direccion1.zonaPostal = documentoGP.DocVenta.cliente_difzonapostal; //"110211"; DocEnviarWS.cliente.direccionCliente = direccion1; //FIN DIRECCION DEL CLIENTE #endregion #region DOCUMENTO REFERENCIADO int nre = documentoGP._LDocVentaRelacionados.Count(); if (nre != 0) { //if (documentoGP.DocVenta.tipoDocumento == "91" || documentoGP.DocVenta.tipoDocumento == "92") //{ DocEnviarWS.documentosReferenciados = new DocumentoReferenciado[nre * 2]; int cor = 0; int cor2 = 0; foreach (vwCfdiRelacionados relacionados in documentoGP._LDocVentaRelacionados) { DocumentoReferenciado referencia1 = new DocumentoReferenciado(); referencia1.codigoInterno = documentoGP.LDocVentaRelacionados[cor].discrepancyResponse.ToString(); //ver if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[cor].codigoEstatusDocumento)) { referencia1.codigoEstatusDocumento = documentoGP.LDocVentaRelacionados[cor].codigoEstatusDocumento; } if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[cor].cufeDocReferenciado)) { referencia1.cufeDocReferenciado = documentoGP.LDocVentaRelacionados[cor].cufeDocReferenciado; } if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[cor].numeroDocumento)) { referencia1.numeroDocumento = documentoGP.LDocVentaRelacionados[cor].numeroDocumento; } DocEnviarWS.documentosReferenciados[cor2] = referencia1; cor2++; DocumentoReferenciado referencia2 = new DocumentoReferenciado(); referencia2.codigoInterno = documentoGP.LDocVentaRelacionados[cor].billingReference.ToString(); //ver if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[cor].cufeDocReferenciado)) { referencia2.cufeDocReferenciado = documentoGP.LDocVentaRelacionados[cor].cufeDocReferenciado; } if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[cor].fecha.ToString())) { referencia2.fecha = Convert.ToDateTime(documentoGP.LDocVentaRelacionados[cor].fecha).ToString("yyyy-MM-dd"); } if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[cor].tipoCufe)) { referencia2.tipoCUFE = documentoGP.LDocVentaRelacionados[cor].tipoCufe; } if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[cor].numeroDocumento)) { referencia2.numeroDocumento = documentoGP.LDocVentaRelacionados[cor].numeroDocumento; } DocEnviarWS.documentosReferenciados[cor2] = referencia2; cor2++; cor++; } //} //if (documentoGP.DocVenta.tipoDocumento == "03") //{ // DocEnviarWS.documentosReferenciados = new DocumentoReferenciado[1]; // DocumentoReferenciado referencia1 = new DocumentoReferenciado(); // if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[0].codigoInterno.ToString())) // referencia1.codigoInterno = documentoGP.LDocVentaRelacionados[0].codigoInterno.ToString(); // if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[0].numeroDocumento.ToString())) // referencia1.numeroDocumento = documentoGP.LDocVentaRelacionados[0].numeroDocumento.ToString(); // if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[0].fecha.ToString())) // referencia1.fecha = documentoGP.LDocVentaRelacionados[0].fecha.ToString(); // if (!string.IsNullOrEmpty(documentoGP.LDocVentaRelacionados[0].tipoDocumento.ToString())) // referencia1.tipoDocumento = documentoGP.LDocVentaRelacionados[0].tipoDocumento.ToString(); // DocEnviarWS.documentosReferenciados[0] = referencia1; //} } #endregion FIN CLASE REFERENCIA #region DESTINATARIOS int des = documentoGP._clides.Count(); DocEnviarWS.cliente.destinatario = new Destinatario[des]; int p = 0; foreach (vwCfdiClienteDestinatario destinatarios_gp in documentoGP._clides) { var destinatario = new Destinatario(); destinatario.email = new string[] { destinatarios_gp.cliente_email }; destinatario.canalDeEntrega = destinatarios_gp.cliente_canalEntrega; DocEnviarWS.cliente.destinatario[p] = destinatario; p++; } //FIN DE DATOS DE CLIENTES VISTA DESTINATARIOS #endregion #region DETALLES TRIBUTARIOS DEL CLIENTE var imptri = documentoGP._facimpcab.GroupBy(ic => new { ic.codigoTotalImp }) .Select(impuTotales => new { CodigoTotalImp = impuTotales.Key.codigoTotalImp, SumMontoTotal = impuTotales.Sum(s => s.valorTotalImp), }); int ctr = imptri.Count(); DocEnviarWS.cliente.detallesTributarios = new Tributos[ctr]; int q = 0; foreach (var impcab in imptri) { Tributos tributos1 = new Tributos(); tributos1.codigoImpuesto = impcab.CodigoTotalImp; //"01"; DocEnviarWS.cliente.detallesTributarios[q] = tributos1; q++; } //FIN DETALLES TRIBUTOS #endregion #region DIRECCION FISCAL DEL CLIENTE Direccion direccionFiscal = new Direccion(); direccionFiscal.ciudad = documentoGP.DocVenta.cliente_difCiudad; direccionFiscal.codigoDepartamento = documentoGP.DocVenta.cliente_difcodigoDepartamento; //"11"; direccionFiscal.departamento = documentoGP.DocVenta.cliente_difdepartamento; direccionFiscal.direccion = documentoGP.DocVenta.cliente_difdireccion; //"Direccion"; direccionFiscal.lenguaje = documentoGP.DocVenta.cliente_diflenguaje; //"es"; direccionFiscal.municipio = documentoGP.DocVenta.cliente_difmunicipio; // "11001"; direccionFiscal.pais = documentoGP.DocVenta.cliente_difpais; // "CO"; direccionFiscal.zonaPostal = documentoGP.DocVenta.cliente_difzonapostal; //"110211"; DocEnviarWS.cliente.direccionFiscal = direccionFiscal; //FIN DIRECCION FISCAL #endregion #region INFORMACION LEGAL DEL CLIENTE DocEnviarWS.cliente.informacionLegalCliente = new InformacionLegal(); InformacionLegal informacionlegal1 = new InformacionLegal(); informacionlegal1.nombreRegistroRUT = documentoGP.DocVenta.cliente_nombreRegistroRUT; informacionlegal1.numeroIdentificacion = documentoGP.DocVenta.cliente_numeroIdentificacion; informacionlegal1.numeroIdentificacionDV = documentoGP.DocVenta.cliente_numeroIdentificacionDV; informacionlegal1.tipoIdentificacion = documentoGP.DocVenta.cliente_tipoIdentificacion.ToString(); DocEnviarWS.cliente.informacionLegalCliente = informacionlegal1; //FIN INFORMACION LEGAL DEL CLIENTE #endregion #region OBLIGACIONES //VIENE DE LA VISTA vwCfdiClienteObligacioS int cob = documentoGP._cliobl.Count(); DocEnviarWS.cliente.responsabilidadesRut = new Obligaciones[cob]; int obl = 0; foreach (vwCfdiClienteObligaciones obligaciones_gp in documentoGP._cliobl) { Obligaciones obligaciones1 = new Obligaciones(); obligaciones1.obligaciones = obligaciones_gp.cliente_obligaciones; obligaciones1.regimen = obligaciones_gp.cliente_regimen; DocEnviarWS.cliente.responsabilidadesRut[obl] = obligaciones1; obl++; } //FIN OBLIGACIONES DE LA VISTA vwCfdiClienteObligaciones #endregion //SECCION CONCEPTOS O DETALLES DE LA FACTURA DocEnviarWS.detalleDeFactura = new FacturaDetalle[documentoGP.LDocVentaConceptos.Count()]; i = 0; int toi = 0; decimal tsi = 0; decimal descuProrrateadoAcumulado = 0; foreach (vwCfdiConceptos detalleDeFactura_gp in documentoGP.LDocVentaConceptos) { #region FACTURA DETALLE var detalle1 = new FacturaDetalle(); detalle1.codigoProducto = detalleDeFactura_gp.facturadetalle_codigoproducto; detalle1.descripcion = detalleDeFactura_gp.facturadetalle_descripcion; detalle1.estandarCodigo = detalleDeFactura_gp.facturadetalle_estandarcodigo; detalle1.estandarCodigoProducto = detalleDeFactura_gp.facturadetalle_estandarcodigoproducto; detalle1.unidadMedida = detalleDeFactura_gp.facturadetalle_unidadMedida; detalle1.cantidadReal = Math.Round(detalleDeFactura_gp.facturadetalle_cantidadreal, 0).ToString(); detalle1.cantidadRealUnidadMedida = detalleDeFactura_gp.facturadetalle_cantidadrealunidadmedida; detalle1.cantidadUnidades = Math.Round(detalleDeFactura_gp.facturadetalle_cantidadunidades, 0).ToString(); detalle1.secuencia = detalleDeFactura_gp.facturadetalle_secuencia.ToString(); detalle1.precioVentaUnitario = Math.Round(detalleDeFactura_gp.facturadetalle_precioVentaUnitario, 2).ToString(); // "00000000000000.00"); detalle1.precioTotalSinImpuestos = Math.Round(detalleDeFactura_gp.facturadetalle_precioTotalSinImpuestos, 2).ToString(); //("00000000000000.00"); detalle1.precioTotal = Math.Round(Convert.ToDecimal(detalleDeFactura_gp.facturadetalle_precioTotal), 2).ToString(); tsi = tsi + detalleDeFactura_gp.facturadetalle_precioTotalSinImpuestos; //FIN DETALLES BASICOS #endregion var impuestosDelConcepto = documentoGP.facimpdet.Where(x => x.LNITMSEQ == detalleDeFactura_gp.LNITMSEQ); #region IMPUESTOS DETALLES DE FACTURA DETALLES int imp3 = impuestosDelConcepto.Count(); detalle1.impuestosDetalles = new FacturaImpuestos[imp3]; int j = 0; foreach (var regImpuestosDelConcepto in impuestosDelConcepto) { FacturaImpuestos facturaImpuestosDet = new FacturaImpuestos(); facturaImpuestosDet.baseImponibleTOTALImp = Math.Round(Convert.ToDecimal(regImpuestosDelConcepto.baseImponibleTotalImp), 2).ToString(); facturaImpuestosDet.codigoTOTALImp = regImpuestosDelConcepto.codigoTotalImp; facturaImpuestosDet.porcentajeTOTALImp = Math.Abs(Math.Round(Convert.ToDecimal(regImpuestosDelConcepto.porcentajeTotalImpAjustado), 2)).ToString(); facturaImpuestosDet.valorTOTALImp = Math.Round(Convert.ToDecimal(regImpuestosDelConcepto.valorTotalImp), 2).ToString(); if (!string.IsNullOrEmpty(regImpuestosDelConcepto.unidadMedida)) { facturaImpuestosDet.unidadMedida = regImpuestosDelConcepto.unidadMedida; } detalle1.impuestosDetalles[j] = facturaImpuestosDet; j++; } #endregion #region IMPUESTOS TOTALES DE FACTURA DETALLES var impTotalesDelConcepto = impuestosDelConcepto.GroupBy(ic => new { ic.codigoTotalImp }) .Select(impuTotales => new { CodigoTotalImp = impuTotales.Key.codigoTotalImp, SumMontoTotal = impuTotales.Sum(s => s.valorTotalImp), }); int imp4 = impTotalesDelConcepto.Count(); detalle1.impuestosTotales = new ImpuestosTotales[imp4]; j = 0; foreach (var regImpTotalesConcepto in impTotalesDelConcepto) { ImpuestosTotales impuestosTotales1 = new ImpuestosTotales(); impuestosTotales1.codigoTOTALImp = regImpTotalesConcepto.CodigoTotalImp; impuestosTotales1.montoTotal = Math.Round(Convert.ToDecimal(regImpTotalesConcepto.SumMontoTotal), 2).ToString(); detalle1.impuestosTotales[j] = impuestosTotales1; j++; } #endregion FIN IMPUESTOS TOTALES DE FACTURA DETALLE #region DESCUENTOS //Descuento por línea if (detalleDeFactura_gp.cargosdescuentos_monto != 0) { detalle1.cargosDescuentos = new CargosDescuentos[1]; CargosDescuentos cargosdescuentos1 = new CargosDescuentos(); cargosdescuentos1.codigo = documentoGP.DocVenta.cargosdescuentos_codigo.ToString(); cargosdescuentos1.descripcion = documentoGP.DocVenta.cargosdescuentos_descripcion.ToString(); cargosdescuentos1.indicador = documentoGP.DocVenta.cargosdescuentos_indicador.ToString(); cargosdescuentos1.monto = Math.Round(Convert.ToDecimal(detalleDeFactura_gp.cargosdescuentos_monto), 2).ToString(); cargosdescuentos1.montoBase = Math.Round(detalleDeFactura_gp.cargosdescuentos_montobase, 2).ToString(); cargosdescuentos1.porcentaje = Math.Round(Convert.ToDecimal(detalleDeFactura_gp.cargodescuentos_porcentaje), 2).ToString(); cargosdescuentos1.secuencia = detalleDeFactura_gp.cargosdescuentos_secuencia; detalle1.cargosDescuentos[0] = cargosdescuentos1; } //Descuento prorrateado else if (documentoGP.DocVenta.cargosdescuentos_monto != 0) { detalle1.cargosDescuentos = new CargosDescuentos[1]; CargosDescuentos cargosdescuentos1 = new CargosDescuentos(); cargosdescuentos1.codigo = documentoGP.DocVenta.cargosdescuentos_codigo.ToString(); cargosdescuentos1.descripcion = documentoGP.DocVenta.cargosdescuentos_descripcion.ToString(); cargosdescuentos1.indicador = documentoGP.DocVenta.cargosdescuentos_indicador.ToString(); cargosdescuentos1.montoBase = Math.Round(detalleDeFactura_gp.cargosdescuentos_montobase, 2).ToString(); var porcentajeDescuento = Math.Round(documentoGP.DocVenta.cargosdescuentos_monto / documentoGP.DocVenta.cargosdescuentos_montobase, 2); var descuentoProrrateado = Math.Round(Convert.ToDecimal(detalleDeFactura_gp.cargosdescuentos_montobase * porcentajeDescuento), 2); cargosdescuentos1.porcentaje = (100 * porcentajeDescuento).ToString(); cargosdescuentos1.monto = descuentoProrrateado.ToString(); descuProrrateadoAcumulado += descuentoProrrateado; if (i + 1 == documentoGP.LDocVentaConceptos.Count()) { descuentoProrrateado = documentoGP.DocVenta.cargosdescuentos_monto - (descuProrrateadoAcumulado - descuentoProrrateado); cargosdescuentos1.porcentaje = Math.Round(100 * descuentoProrrateado / detalleDeFactura_gp.cargosdescuentos_montobase, 2).ToString(); cargosdescuentos1.monto = Math.Round(descuentoProrrateado, 2).ToString(); } cargosdescuentos1.secuencia = detalleDeFactura_gp.cargosdescuentos_secuencia; detalle1.cargosDescuentos[0] = cargosdescuentos1; detalle1.precioTotalSinImpuestos = Math.Round(detalleDeFactura_gp.facturadetalle_precioTotalSinImpuestos - descuentoProrrateado, 2).ToString(); detalle1.precioTotal = Math.Round(Convert.ToDecimal(detalleDeFactura_gp.facturadetalle_precioTotal - descuentoProrrateado), 2).ToString(); } ////Descuento al primer item //else if (toi==0 && documentoGP.DocVenta.cargosdescuentos_monto != 0) // { // detalle1.cargosDescuentos = new CargosDescuentos[1]; // CargosDescuentos cargosdescuentos1 = new CargosDescuentos(); // cargosdescuentos1.codigo = documentoGP.DocVenta.cargosdescuentos_codigo.ToString(); // cargosdescuentos1.descripcion = documentoGP.DocVenta.cargosdescuentos_descripcion.ToString(); // cargosdescuentos1.indicador = documentoGP.DocVenta.cargosdescuentos_indicador.ToString(); // cargosdescuentos1.monto = Math.Round(documentoGP.DocVenta.cargosdescuentos_monto, 2).ToString(); // cargosdescuentos1.montoBase = Math.Round(detalleDeFactura_gp.cargosdescuentos_montobase, 2).ToString(); // cargosdescuentos1.porcentaje = Math.Round(documentoGP.DocVenta.cargosdescuentos_monto / detalleDeFactura_gp.cargosdescuentos_montobase, 2).ToString(); // cargosdescuentos1.secuencia = documentoGP.DocVenta.cargosdescuentos_secuencia.ToString(); // detalle1.cargosDescuentos[0] = cargosdescuentos1; // detalle1.precioTotalSinImpuestos = Math.Round(detalleDeFactura_gp.facturadetalle_precioTotalSinImpuestos - documentoGP.DocVenta.cargosdescuentos_monto, 2).ToString(); // detalle1.precioTotal = Math.Round(Convert.ToDecimal(detalleDeFactura_gp.facturadetalle_precioTotal - documentoGP.DocVenta.cargosdescuentos_monto), 2).ToString(); // } #endregion DocEnviarWS.detalleDeFactura[i] = detalle1; i++; toi = toi + 1; } //FIN SECCION DETALLES DE LA FACTURA #region MEDIOS DE PAGO. MEDIOS DE PAGO VIENE DE LA VISTA vwCfdiMediosDePago int mep = documentoGP._medpag.Count(); if (mep > 0) { DocEnviarWS.mediosDePago = new MediosDePago[mep]; for (int j = 0; j < mep; j++) { MediosDePago mediopago1 = new MediosDePago(); mediopago1.medioPago = documentoGP._medpag[j].mediopago; mediopago1.numeroDeReferencia = documentoGP._medpag[j].numeroreferencia; mediopago1.metodoDePago = documentoGP._medpag[j].metodopago; DocEnviarWS.mediosDePago[j] = mediopago1; } } #endregion MEDIOS DE PAGO DocEnviarWS.fechaEmision = Convert.ToDateTime(documentoGP.DocVenta.fechaEmision).ToString("yyyy-MM-dd 00:00:00"); DocEnviarWS.fechaVencimiento = Convert.ToDateTime(documentoGP.DocVenta.fechaVencimiento).ToString("yyyy-MM-dd"); #region Impuestos a nivel factura //SECCION IMPUESTOS GLOBALES O GENERALES int imp = documentoGP.facimpcab.Count(); DocEnviarWS.impuestosGenerales = new FacturaImpuestos[imp]; for (int j = 0; j < imp; j++) { FacturaImpuestos impuestosg1 = new FacturaImpuestos(); impuestosg1.baseImponibleTOTALImp = Math.Round(Convert.ToDecimal(documentoGP.facimpcab[j].baseImponibleTotalImp), 2).ToString(); impuestosg1.codigoTOTALImp = documentoGP.facimpcab[j].codigoTotalImp.ToString(); if (impuestosg1.codigoTOTALImp.Equals("07")) //rete ica { impuestosg1.porcentajeTOTALImp = Math.Abs(Convert.ToDecimal(documentoGP.facimpcab[j].porcentajeTotalImpAjustado)).ToString(); } else { impuestosg1.porcentajeTOTALImp = Math.Abs(Math.Round(Convert.ToDecimal(documentoGP.facimpcab[j].porcentajeTotalImpAjustado), 2)).ToString(); } impuestosg1.valorTOTALImp = Math.Round(Convert.ToDecimal(documentoGP.facimpcab[j].valorTotalImp), 2).ToString(); impuestosg1.unidadMedida = documentoGP.facimpcab[j].unidadMedida; DocEnviarWS.impuestosGenerales[j] = impuestosg1; } //FIN SECCION IMPUESTOS GENERALES //SECCION IMPUESTOS TOTALES var impuestosTotalesCab = documentoGP._facimpcab.GroupBy(ic => new { ic.codigoTotalImp }) .Select(impuTotales => new { CodigoTotalImp = impuTotales.Key.codigoTotalImp, SumMontoTotal = impuTotales.Sum(s => s.valorTotalImp), }); int imp2 = documentoGP._facimpcab.Count(); DocEnviarWS.impuestosTotales = new ImpuestosTotales[imp2]; int m = 0; foreach (var regImpuTotalesCab in impuestosTotalesCab) { ImpuestosTotales impuestototales1 = new ImpuestosTotales(); impuestototales1.codigoTOTALImp = regImpuTotalesCab.CodigoTotalImp; impuestototales1.montoTotal = Math.Round(Convert.ToDecimal(regImpuTotalesCab.SumMontoTotal), 2).ToString();// es una sumatoria de valorTotalImp DocEnviarWS.impuestosTotales[m] = impuestototales1; m++; } //FIN SECCION IMPUESTOS TOTALES #endregion DocEnviarWS.moneda = documentoGP.DocVenta.moneda.ToString(); DocEnviarWS.rangoNumeracion = documentoGP.DocVenta.rangonumeracion; DocEnviarWS.redondeoAplicado = documentoGP.DocVenta.redondeoaplicado.ToString(); //TASA DE CAMBIO //tasaDeCambio = new TasaDeCambio(); //DocEnviarWS.tasaDeCambio = new TasaDeCambio(); //TasaDeCambio tasadecambio1 = new TasaDeCambio(); //tasadecambio1.baseMonedaDestino = documentoGP.DocVenta.tc_baseMonedaDestino.ToString(); ; //tasadecambio1.fechaDeTasaDeCambio = documentoGP.DocVenta.tc_fechaDeTasaDeCambio; //tasadecambio1.monedaOrigen = documentoGP.DocVenta.tc_monedaOrigen; //tasadecambio1.monedaDestino = documentoGP.DocVenta.tc_monedaDestino; //tasadecambio1.tasaDeCambio = documentoGP.DocVenta.tasaDeCambio.ToString(); //DocEnviarWS.tasaDeCambio = tasadecambio1; //FIN TASA DE CAMBIO DocEnviarWS.tipoDocumento = documentoGP.DocVenta.tipoDocumento; DocEnviarWS.tipoOperacion = documentoGP.DocVenta.tipoOperacion; DocEnviarWS.totalBaseImponible = Math.Round(Convert.ToDecimal(documentoGP.DocVenta.totalBaseImponible), 2).ToString(); // ("0000000000000000.000000"); DocEnviarWS.totalBrutoConImpuesto = Math.Round(Convert.ToDecimal(documentoGP.DocVenta.totalBrutoconImpuestos), 2).ToString(); DocEnviarWS.totalMonto = Math.Round(Convert.ToDecimal(documentoGP.DocVenta.totalMonto), 2).ToString(); // ("0000000000000000.000000"); DocEnviarWS.totalProductos = toi.ToString(); // ("00000"); DocEnviarWS.totalSinImpuestos = Math.Round(Convert.ToDecimal(documentoGP.DocVenta.totalSinImpuestos), 2).ToString(); // ("0000000000000000.000000"); #region LEYENDAS if (!string.IsNullOrEmpty(documentoGP.LeyendasXml)) { XElement leyendasX = XElement.Parse(documentoGP.LeyendasXml); int numLeyendas = leyendasX.Elements().Count(); if (!string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault()?.Attribute("S")?.Value) && !string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault()?.Attribute("T")?.Value) && !string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault()?.Attribute("V")?.Value) ) { DocEnviarWS.informacionAdicional = new string[numLeyendas]; int idx = 0; foreach (XElement child in leyendasX.Elements()) { DocEnviarWS.informacionAdicional[idx] = child.Attribute("V").Value; idx++; } } } #endregion //FIN SECCION FACTURA FINAL return(DocEnviarWS); }
public async Task <string> TimbraYEnviaASunatAsync(string ruc, string usuario, string usuarioPassword, DocumentoVentaGP documentoGP) { var docWs = ArmaDocumentoEnviarWS(documentoGP); var response = await ServicioWS.EnviarAsync(ruc, usuario, usuarioPassword, docWs); if (response.codigo == 0) { byte[] converbyte = Convert.FromBase64String(response.xml.ToString()); return(System.Text.Encoding.UTF8.GetString(converbyte)); } else { if (response.codigo == 202 || response.codigo == 207) { throw new ArgumentException(response.codigo.ToString() + " - " + response.mensaje); } else { throw new TimeoutException("Excepción al conectarse con el Web Service de Facturación. [TimbraYEnviaASunatAsync] " + response.codigo.ToString() + " - " + response.mensaje + " " + debug_xml + " ruc: " + ruc + " USu: " + usuario + "/" + usuarioPassword); } } }
public string TimbraYEnviaASunat(string ruc, string usuario, string usuarioPassword, DocumentoVentaGP documentoGP) { var docWs = ArmaDocumentoEnviarWS(documentoGP); var response = ServicioWS.Enviar(ruc, usuario, usuarioPassword, docWs); if (response.codigo == 0) { byte[] converbyte = Convert.FromBase64String(response.xml.ToString()); return(System.Text.Encoding.UTF8.GetString(converbyte)); //return response.xml.ToString(); /*return "Mensaje XML: " + response.mensaje + Environment.NewLine + * "Código error: " + response.codigo + Environment.NewLine + * "Estatus: " + response.estatus + Environment.NewLine + * "Hora: " + response.hora + Environment.NewLine + * "Id Transacción: " + response.idtransaccion + Environment.NewLine + * "Numeración: " + response.numeracion + Environment.NewLine + * "CRC: " + response.crc + Environment.NewLine + * "DebugXML: " + debug_xml + Environment.NewLine + * "XML: " + converbyte.ToString();*/ } else { //using (StreamWriter sw = File.CreateText(ruc + documentoGP.DocVenta.serie + documentoGP.DocVenta.numero + DateTime.Today.ToLongDateString())) //{ // sw.WriteLine(debug_xml); //} if (response.codigo == 202 || response.codigo == 207) { throw new ArgumentException(response.codigo.ToString() + " - " + response.mensaje); } else { throw new TimeoutException("Excepción al conectarse con el Web Service de Facturación. " + response.codigo.ToString() + " - " + response.mensaje + " " + debug_xml); } } }
private DocumentoElectronico ArmaDocumentoEnviarWS(DocumentoVentaGP documentoGP) { DocEnviarWS = new DocumentoElectronico(); int i = 0; // Variable para loopear int correlativo = 1; // Variable para corre de productos; Boolean DescItemIGV = true; debug_xml = ""; //Seccion emisor DocEnviarWS.emisor = new Emisor(); DocEnviarWS.emisor.ruc = documentoGP.DocVenta.emisorNroDoc; //DocEnviarWS.emisor.nombreComercial = documentoGP.DocVenta.emisorNombre; //DocEnviarWS.emisor.lugarExpedicion = documentoGP.DocVenta.emmisor** /*DocEnviarWS.emisor.domicilioFiscal = documentoGP.DocVenta.emisorDireccion; * DocEnviarWS.emisor.urbanizacion = documentoGP.DocVenta.emisorUrbanizacion; * DocEnviarWS.emisor.distrito = documentoGP.DocVenta.emisorDistrito; * DocEnviarWS.emisor.provincia = documentoGP.DocVenta.emisorProvincia; * DocEnviarWS.emisor.departamento = documentoGP.DocVenta.emisorDepartamento; * DocEnviarWS.emisor.codigoPais = documentoGP.DocVenta.emisorCodPais; * DocEnviarWS.emisor.ubigeo = documentoGP.DocVenta.emisorUbigeo;*/ debug_xml = "<EMISOR>" + DocEnviarWS.emisor.ruc + "\r\n"; // SECCION RECEPTOR DocEnviarWS.receptor = new Receptor(); DocEnviarWS.receptor.email = documentoGP.DocVenta.emailTo; DocEnviarWS.receptor.notificar = documentoGP.DocVenta.emailTo.Trim() == string.Empty ? "NO" : "SI"; DocEnviarWS.receptor.numDocumento = documentoGP.DocVenta.receptorNroDoc; DocEnviarWS.receptor.direccion = documentoGP.DocVenta.receptorDireccion; DocEnviarWS.receptor.departamento = documentoGP.DocVenta.receptorCiudad; //DocEnviarWS.receptor.distrito = documentoGP.DocVenta.recep DocEnviarWS.receptor.pais = documentoGP.DocVenta.receptorPais; DocEnviarWS.receptor.provincia = documentoGP.DocVenta.receptorProvincia; DocEnviarWS.receptor.razonSocial = documentoGP.DocVenta.receptorNombre; // DocEnviarWS.receptor.telefono = documentoGP.DocVenta. DocEnviarWS.receptor.tipoDocumento = documentoGP.DocVenta.receptorTipoDoc; // DocEnviarWS.receptor.ubigeo = documentoGP.DocVenta.rece debug_xml = debug_xml + "<RECEPTOR>" + DocEnviarWS.receptor.tipoDocumento + ":" + DocEnviarWS.receptor.numDocumento + "\r\n"; debug_xml = debug_xml + " <RazonSocial>" + DocEnviarWS.receptor.razonSocial + "\r\n"; // SECCION COMROBANTE if (!string.IsNullOrEmpty(documentoGP.DocVenta.tipoOperacion)) { DocEnviarWS.codigoTipoOperacion = documentoGP.DocVenta.tipoOperacion; } else { DocEnviarWS.codigoTipoOperacion = "0101"; } DocEnviarWS.correlativo = documentoGP.DocVenta.numero; //DocEnviarWS.correlativo = "10000106"; // se usa para reenviar comprobante. DocEnviarWS.fechaEmision = documentoGP.DocVenta.fechaEmision.ToString("yyyy-MM-dd"); DocEnviarWS.fechaVencimiento = documentoGP.DocVenta.fechaVencimiento.ToString("yyyy-MM-dd"); DocEnviarWS.horaEmision = documentoGP.DocVenta.horaEmision; DocEnviarWS.idTransaccion = documentoGP.DocVenta.idDocumento; DocEnviarWS.serie = documentoGP.DocVenta.serie; DocEnviarWS.tipoDocumento = documentoGP.DocVenta.tipoDocumento; { debug_xml = debug_xml + "<COMPROBANTE>" + DocEnviarWS.serie + "-" + DocEnviarWS.correlativo + "\r\n"; debug_xml = debug_xml + " <tipoDocumento>" + DocEnviarWS.tipoDocumento + "\r\n"; debug_xml = debug_xml + " <codigoTipoOperacion>" + DocEnviarWS.codigoTipoOperacion + "\r\n"; debug_xml = debug_xml + " <FechaEmisio>" + DocEnviarWS.fechaEmision + "\r\n"; debug_xml = debug_xml + " <fechaVencimiento>" + DocEnviarWS.fechaVencimiento + "\r\n"; debug_xml = debug_xml + " <horaEmision>" + DocEnviarWS.horaEmision + "\r\n"; debug_xml = debug_xml + " <idTransaccion>" + DocEnviarWS.idTransaccion + "\r\n"; debug_xml = debug_xml + "<FIN COMPROBANTE>" + "\r\n"; } // FIN SECCION COMPROBANTE // SECCION Relacionado. VER mas adelante debug_xml = debug_xml + "<RELACIONADO NOTAS>" + documentoGP.LDocVentaRelacionados.Count() + "\r\n"; if (string.IsNullOrEmpty(documentoGP.DocVenta.cRelacionadoTipoDocAfectado)) { debug_xml = debug_xml + "<SIN DOC RELACIONADO>" + "\r\n"; } else { if (DocEnviarWS.tipoDocumento == "07" || DocEnviarWS.tipoDocumento == "08") { var relacionadoN = new RelacionadoNotas(); relacionadoN.codigoTipoNota = documentoGP.DocVenta.infoRelNotasCodigoTipoNota; relacionadoN.observaciones = documentoGP.DocVenta.infoRelNotasObservaciones; relacionadoN.numeroDocAfectado = documentoGP.DocVenta.cRelacionadoNumDocAfectado.Trim(); relacionadoN.tipoDocAfectado = documentoGP.DocVenta.cRelacionadoTipoDocAfectado; DocEnviarWS.relacionadoNotas = new RelacionadoNotas(); DocEnviarWS.relacionadoNotas = relacionadoN; debug_xml = debug_xml + " <TIPOAFECTADO>" + DocEnviarWS.relacionadoNotas.tipoDocAfectado + "\r\n"; debug_xml = debug_xml + " <DOCAFECTADO>" + DocEnviarWS.relacionadoNotas.numeroDocAfectado + "\r\n"; debug_xml = debug_xml + " <NOTA>" + DocEnviarWS.relacionadoNotas.codigoTipoNota + "\r\n"; debug_xml = debug_xml + " <observaciones>" + DocEnviarWS.relacionadoNotas.observaciones + "\r\n"; debug_xml = debug_xml + "<FIN RELACIONADO NOTAS>\r\n"; } else { if (DocEnviarWS.tipoDocumento == "01") { var relacionado = new Relacionado(); relacionado.numeroDocRelacionado = documentoGP.DocVenta.cRelacionadoNumDocAfectado.Trim(); relacionado.tipoDocRelacionado = documentoGP.DocVenta.cRelacionadoTipoDocAfectado; DocEnviarWS.relacionado = new Relacionado[1]; DocEnviarWS.relacionado[0] = relacionado; debug_xml = debug_xml + " <TIPOAFECTADO>" + DocEnviarWS.relacionado[0].numeroDocRelacionado + "\r\n"; debug_xml = debug_xml + " <DOCAFECTADO>" + DocEnviarWS.relacionado[0].tipoDocRelacionado + "\r\n"; debug_xml = debug_xml + "<FIN RELACIONADO NOTAS>\r\n"; } } } // debug_xml = debug_xml + "<RELACIONADO NOTAS>" + documentoGP.LDocVentaRelacionados.Count() + "\r\n"; foreach (vwCfdiRelacionados relacionado_gp in documentoGP.LDocVentaRelacionados) { if (DocEnviarWS.tipoDocumento == "07" || DocEnviarWS.tipoDocumento == "08") { var relacionadoN = new RelacionadoNotas(); relacionadoN.codigoTipoNota = documentoGP.DocVenta.infoRelNotasCodigoTipoNota; relacionadoN.observaciones = documentoGP.DocVenta.infoRelNotasObservaciones; relacionadoN.numeroDocAfectado = relacionado_gp.sopnumbeTo.Trim(); relacionadoN.tipoDocAfectado = relacionado_gp.tipoDocumento; DocEnviarWS.relacionadoNotas = new RelacionadoNotas(); DocEnviarWS.relacionadoNotas = relacionadoN; debug_xml = debug_xml + " <TIPOAFECTADO>" + DocEnviarWS.relacionadoNotas.tipoDocAfectado + "\r\n"; debug_xml = debug_xml + " <DOCAFECTADO>" + DocEnviarWS.relacionadoNotas.numeroDocAfectado + "\r\n"; debug_xml = debug_xml + " <NOTA>" + DocEnviarWS.relacionadoNotas.codigoTipoNota + "\r\n"; debug_xml = debug_xml + " <observaciones>" + DocEnviarWS.relacionadoNotas.observaciones + "\r\n"; debug_xml = debug_xml + "<FIN RELACIONADO NOTAS>\r\n"; } else { if (DocEnviarWS.tipoDocumento == "01") { var relacionado = new Relacionado(); relacionado.numeroDocRelacionado = relacionado_gp.sopnumbeTo.Trim();; relacionado.tipoDocRelacionado = relacionado_gp.tipoDocumento; DocEnviarWS.relacionado = new Relacionado[1]; DocEnviarWS.relacionado[0] = relacionado; debug_xml = debug_xml + " <TIPOAFECTADO>" + DocEnviarWS.relacionado[0].numeroDocRelacionado + "\r\n"; debug_xml = debug_xml + " <DOCAFECTADO>" + DocEnviarWS.relacionado[0].tipoDocRelacionado + "\r\n"; debug_xml = debug_xml + "<FIN RELACIONADO NOTAS>\r\n"; } } //Aumenta contadoresDocEnviarWS.producto[i]. i++; correlativo++; } // SECCION Producto. DocEnviarWS.producto = new Producto[documentoGP.LDocVentaConceptos.Count()]; debug_xml = debug_xml + "<CANT PROD>" + DocEnviarWS.producto.Count() + "\r\n"; i = 0; correlativo = 1; foreach (vwCfdiConceptos producto_gp in documentoGP.LDocVentaConceptos) { var producto = new Producto(); producto.cantidad = producto_gp.cantidad.ToString(); producto.codigoPLU = producto_gp.ITEMNMBR; producto.codigoPLUSunat = producto_gp.claveProdSunat.Trim(); producto.descripcion = producto_gp.ITEMDESC; producto.montoTotalImpuestoItem = producto_gp.montoIva.ToString("0.00"); producto.precioVentaUnitarioItem = producto_gp.precioUniConIva.ToString(); producto.unidadMedida = producto_gp.udemSunat; producto.valorReferencialUnitario = producto_gp.precioUniConIva.ToString(); producto.valorUnitarioBI = producto_gp.valorUni.ToString(); producto.valorVentaItemQxBI = string.Format("{0,14:0.00}", producto_gp.importe).Trim(); producto.numeroOrden = correlativo.ToString(); { debug_xml = debug_xml + "<PRODUCTO>" + correlativo + "\r\n"; debug_xml = debug_xml + " <cantidad>" + producto.cantidad + "\r\n"; debug_xml = debug_xml + " <codigoPLU>" + producto.codigoPLU + "\r\n"; debug_xml = debug_xml + " <codigoPLUSunat>" + producto.codigoPLUSunat + "\r\n"; debug_xml = debug_xml + " <descripcion>" + producto.descripcion + "\r\n"; debug_xml = debug_xml + " <montoTotalImpuestoItem>" + producto.montoTotalImpuestoItem + "\r\n"; debug_xml = debug_xml + " <precioVentaUnitarioItem>" + producto.precioVentaUnitarioItem + "\r\n"; debug_xml = debug_xml + " <unidadMedida>" + producto.unidadMedida + "\r\n"; debug_xml = debug_xml + " <valorReferencialUnitario>" + producto.valorReferencialUnitario + "\r\n"; debug_xml = debug_xml + " <valorUnitarioBI>" + producto.valorUnitarioBI + "\r\n"; debug_xml = debug_xml + " <valorVentaItemQxBI>" + producto.valorVentaItemQxBI + "\r\n"; debug_xml = debug_xml + " <numeroOrden>" + producto.numeroOrden + "\r\n"; } // SECCION PRODUCTO IGV producto.IGV = new ProductoIGV(); switch (producto_gp.tipoAfectacion.ToString().Trim()) { case "20": producto.IGV.baseImponible = producto_gp.montoImponibleExonera.ToString("0.00"); break; case "21": producto.IGV.baseImponible = producto_gp.montoImponibleGratuito.ToString("0.00"); break; case "30": producto.IGV.baseImponible = producto_gp.montoImponibleInafecto.ToString("0.00"); break; case "35": producto.IGV.baseImponible = producto_gp.montoImponibleInafecto.ToString("0.00"); break; case "40": producto.IGV.baseImponible = producto_gp.montoImponibleExporta.ToString("0.00"); break; default: producto.IGV.baseImponible = producto_gp.montoImponibleIva.ToString("0.00"); break; } producto.IGV.monto = producto_gp.montoIva.ToString("0.00"); producto.IGV.tipo = producto_gp.tipoAfectacion.ToString().Trim(); if (!string.IsNullOrEmpty(documentoGP.DocVenta.infoRelNotasCodigoTipoNota)) { producto.IGV.porcentaje = string.Format("{0,8:0.00}", producto_gp.porcentajeIva * 100).Trim(); } else { producto.IGV.porcentaje = string.Format("{0,8:0.00}", producto_gp.porcentajeIva * 100).Trim(); } { debug_xml = debug_xml + " <IGV>\r\n"; debug_xml = debug_xml + " <baseImponible>" + producto.IGV.baseImponible + "\r\n"; debug_xml = debug_xml + " <baseImponibleIVA>" + producto_gp.montoImponibleIva.ToString("0.00") + "\r\n"; debug_xml = debug_xml + " <baseImponibleExo>" + producto_gp.montoImponibleExonera.ToString("0.00") + "\r\n"; debug_xml = debug_xml + " <baseImponibleExp>" + producto_gp.montoImponibleExporta.ToString("0.00") + "\r\n"; debug_xml = debug_xml + " <baseImponibleGra>" + producto_gp.montoImponibleGratuito.ToString("0.00") + "\r\n"; debug_xml = debug_xml + " <baseImponibleIna>" + producto_gp.montoImponibleInafecto.ToString("0.00") + "\r\n"; debug_xml = debug_xml + " <porcentaje>" + producto.IGV.porcentaje + "\r\n"; debug_xml = debug_xml + " <monto>" + producto.IGV.monto + "\r\n"; debug_xml = debug_xml + " <tipo>" + producto.IGV.tipo + "\r\n"; } //SECCION PRODUCTO DESCUENTO if (producto_gp.descuento != 0) { producto.descuento = new ProductoDescuento(); producto.descuento.baseImponible = string.Format("{0,14:0.00}", producto_gp.descuentoBaseImponible).Trim(); producto.descuento.monto = string.Format("{0,14:0.00}", producto_gp.descuento).Trim(); producto.descuento.porcentaje = string.Format("{0,8:0.00000}", producto_gp.descuentoPorcentaje * 100).Trim(); producto.descuento.codigo = producto_gp.descuentoCodigo; if (producto_gp.descuentoCodigo == "01") { DescItemIGV = false; } { debug_xml = debug_xml + " <DESC ITEM>" + "\r\n"; debug_xml = debug_xml + " <baseImponible>" + producto.descuento.baseImponible + "\r\n"; debug_xml = debug_xml + " <monto>" + producto.descuento.monto + "\r\n"; debug_xml = debug_xml + " <porcentaje>" + producto.descuento.porcentaje + "\r\n"; debug_xml = debug_xml + " <codigo>" + producto.descuento.codigo + "\r\n"; } } DocEnviarWS.producto[i] = producto; debug_xml = debug_xml + " <PRODUCTO>" + DocEnviarWS.producto[i].codigoPLU + " Imp:" + DocEnviarWS.producto[i].valorVentaItemQxBI + "\r\n"; debug_xml = debug_xml + " IGVporc: " + DocEnviarWS.producto[i].IGV.porcentaje + "\r\n"; //Aumenta contadoresDocEnviarWS.producto[i]. i++; correlativo++; } debug_xml = debug_xml + "<FIN PRODUCTOS>\r\n"; // SECCION Descuentos Globales if (documentoGP.DocVenta.descuentoGlobalMonto != 0) { DocEnviarWS.descuentosGlobales = new DescuentosGlobales(); DocEnviarWS.descuentosGlobales.baseImponible = documentoGP.DocVenta.descuentoGlobalImponible.ToString("0.00"); DocEnviarWS.descuentosGlobales.monto = documentoGP.DocVenta.descuentoGlobalMonto.ToString("0.00"); if (DescItemIGV) { DocEnviarWS.descuentosGlobales.motivo = "02"; } else { DocEnviarWS.descuentosGlobales.motivo = "03"; } DocEnviarWS.descuentosGlobales.porcentaje = string.Format("{0,8:0.00000}", documentoGP.DocVenta.descuentoGlobalPorcentaje).Trim(); { debug_xml = debug_xml + "<DESCUENTOS GLOBALES>" + "\r\n"; debug_xml = debug_xml + " <baseImponible" + DocEnviarWS.descuentosGlobales.baseImponible + "\r\n"; debug_xml = debug_xml + " <porcentaje>" + DocEnviarWS.descuentosGlobales.porcentaje + "\r\n"; debug_xml = debug_xml + " <monto>" + DocEnviarWS.descuentosGlobales.monto + "\r\n"; debug_xml = debug_xml + " <motivo>" + DocEnviarWS.descuentosGlobales.motivo + "\r\n"; debug_xml = debug_xml + "<FIN DESCUENTOS GLOBALES>" + "\r\n"; } } else { debug_xml = debug_xml + "<SIN DESCUENTOS GLOBALES>" + "\r\n"; } //SECCION DETRACCIONES if (string.IsNullOrEmpty(documentoGP.DocVenta.codigoDetraccion) || documentoGP.DocVenta.codigoDetraccion.Trim() == "00") { debug_xml = debug_xml + "<SIN DETRACCIONES>" + "\r\n"; } else { debug_xml = debug_xml + "<DETRACCIONES>" + "\r\n"; var detracciones = new Detraccion(); detracciones.codigo = documentoGP.DocVenta.codigoDetraccion.Trim(); //detracciones.medioPago = documentoGP.DocVenta.medioPagoDetraccion.Trim(); detracciones.medioPago = "002"; detracciones.monto = string.Format("{0,14:0.00}", documentoGP.DocVenta.montoDetraccion).Trim(); detracciones.numCuentaBancodelaNacion = documentoGP.DocVenta.numCuentaBancoNacion.Trim(); detracciones.porcentaje = string.Format("{0,8:0.00}", documentoGP.DocVenta.porcentajeDetraccion).Trim(); DocEnviarWS.detraccion = new Detraccion[1]; DocEnviarWS.detraccion[0] = detracciones; { debug_xml = debug_xml + " <codigo>" + DocEnviarWS.detraccion[0].codigo + "\r\n"; debug_xml = debug_xml + " <medioPago>" + DocEnviarWS.detraccion[0].medioPago + "\r\n"; debug_xml = debug_xml + " <monto>" + DocEnviarWS.detraccion[0].monto + "\r\n"; debug_xml = debug_xml + " <numCuentaBancodelaNacion>" + DocEnviarWS.detraccion[0].numCuentaBancodelaNacion + "\r\n"; debug_xml = debug_xml + " <porcentaje>" + DocEnviarWS.detraccion[0].porcentaje + "\r\n"; } debug_xml = debug_xml + "<FIN DETRACCIONES>" + DocEnviarWS.detraccion[0].monto + "\r\n"; } //SECCION TOTALES debug_xml = debug_xml + "<TOTALES>" + "\r\n"; DocEnviarWS.totales = new Totales(); DocEnviarWS.totales.importeTotalPagar = documentoGP.DocVenta.montoTotalVenta.ToString("0.00"); DocEnviarWS.totales.importeTotalVenta = documentoGP.DocVenta.montoTotalVenta.ToString("0.00"); DocEnviarWS.totales.montoTotalImpuestos = documentoGP.DocVenta.montoTotalImpuestos.ToString("0.00"); DocEnviarWS.totales.subtotalValorVenta = string.Format("{0,14:0.00}", documentoGP.DocVenta.montoSubtotalValorVenta).Trim(); DocEnviarWS.totales.sumaTotalDescuentosporItem = string.Format("{0,14:0.00}", documentoGP.DocVenta.montoTotalDescuentosPorItem).Trim(); DocEnviarWS.totales.sumatoriaImpuestosOG = documentoGP.DocVenta.montoTotalImpuOperGratuitas.ToString("0.00"); DocEnviarWS.totales.totalIGV = documentoGP.DocVenta.montoTotalIgv.ToString("0.00"); { debug_xml = debug_xml + " <importeTotalPagar>" + DocEnviarWS.totales.importeTotalPagar + "\r\n"; debug_xml = debug_xml + " <importeTotalVenta>" + DocEnviarWS.totales.importeTotalVenta + "\r\n"; debug_xml = debug_xml + " <montoTotalImpuestos>" + DocEnviarWS.totales.montoTotalImpuestos + "\r\n"; debug_xml = debug_xml + " <subtotalValorVenta>" + DocEnviarWS.totales.subtotalValorVenta + "\r\n"; debug_xml = debug_xml + " <sumaTotalDescuentosporItem>" + DocEnviarWS.totales.sumaTotalDescuentosporItem + "\r\n"; debug_xml = debug_xml + " <sumatoriaImpuestosOG>" + DocEnviarWS.totales.sumatoriaImpuestosOG + "\r\n"; debug_xml = debug_xml + " <totalIGV>" + DocEnviarWS.totales.totalIGV + "\r\n"; debug_xml = debug_xml + "<FIN TOTALES>" + "\r\n"; } //SECCION SUBTOTALES DocEnviarWS.totales.subtotal = new Subtotal(); DocEnviarWS.totales.subtotal.IGV = documentoGP.DocVenta.montoSubtotalIvaImponible.ToString("0.00"); DocEnviarWS.totales.subtotal.exoneradas = documentoGP.DocVenta.montoSubtotalExonerado.ToString("0.00"); DocEnviarWS.totales.subtotal.exportacion = documentoGP.DocVenta.montoSubtotalExportacion.ToString("0.00"); DocEnviarWS.totales.subtotal.gratuitas = documentoGP.DocVenta.montoSubtotalGratuito.ToString("0.00"); DocEnviarWS.totales.subtotal.inafectas = documentoGP.DocVenta.montoSubtotalInafecto.ToString("0.00"); { debug_xml = debug_xml + " <SUBTOTALES>" + "\r\n"; debug_xml = debug_xml + " <IGV>" + DocEnviarWS.totales.subtotal.IGV + "\r\n"; debug_xml = debug_xml + " <exoneradas>" + DocEnviarWS.totales.subtotal.exoneradas + "\r\n"; debug_xml = debug_xml + " <exportacion>" + DocEnviarWS.totales.subtotal.exportacion + "\r\n"; debug_xml = debug_xml + " <gratuitas>" + DocEnviarWS.totales.subtotal.gratuitas + "\r\n"; debug_xml = debug_xml + " <inafectas>" + DocEnviarWS.totales.subtotal.inafectas + "\r\n"; debug_xml = debug_xml + " <FIN SUBTOTALES>" + "\r\n"; } //SECCION PAGO DocEnviarWS.pago = new Pago(); DocEnviarWS.pago.moneda = documentoGP.DocVenta.moneda; DocEnviarWS.pago.tipoCambio = documentoGP.DocVenta.xchgrate.ToString("0.00000"); DocEnviarWS.pago.fechaInicio = DateTime.Now.ToString("yyyy-MM-dd"); DocEnviarWS.pago.fechaFin = DateTime.Now.ToString("yyyy-MM-dd"); //SECCION PERSONALIZACION PDF if (!string.IsNullOrEmpty(documentoGP.LeyendasXml)) { XElement leyendasX = XElement.Parse(documentoGP.LeyendasXml); int numLeyendas = leyendasX.Elements().Count(); if (!string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault().Attribute("S").Value) && !string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault().Attribute("T").Value) && !string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault().Attribute("V").Value) ) { DocEnviarWS.personalizacionPDF = new PersonalizacionPDF[numLeyendas]; int idx = 0; foreach (XElement child in leyendasX.Elements()) { DocEnviarWS.personalizacionPDF[idx] = new PersonalizacionPDF(); DocEnviarWS.personalizacionPDF[idx].seccion = child.Attribute("S").Value; DocEnviarWS.personalizacionPDF[idx].titulo = child.Attribute("T").Value; DocEnviarWS.personalizacionPDF[idx].valor = child.Attribute("V").Value; idx++; } } } { debug_xml = debug_xml + "<PAGO>" + "\r\n"; debug_xml = debug_xml + " <moneda>" + DocEnviarWS.pago.moneda + "\r\n"; debug_xml = debug_xml + " <tipoCambio>" + DocEnviarWS.pago.tipoCambio + "\r\n"; debug_xml = debug_xml + "<FIN PAGO>" + "\r\n"; } debug_xml = debug_xml + "<LLAMADA>"; return(DocEnviarWS); }
public void ArmarDocElectronico() { try { DocumentoVentaGP docGP = new DocumentoVentaGP(); docGP.GetDatosDocumentoVenta(this.Sopnumbe, this.Soptype); _docElectronico = new DocumentoElectronico(); _docElectronico.TipoDocumento = docGP.DocVenta.tipoDocumento; _docElectronico.IdDocumento = docGP.DocVenta.idDocumento; _docElectronico.FechaEmision = this.Fechahora.ToString(); _docElectronico.Moneda = docGP.DocVenta.moneda; _docElectronico.Emisor.NroDocumento = docGP.DocVenta.emisorNroDoc; _docElectronico.Emisor.NombreComercial = docGP.DocVenta.emisorNombre; _docElectronico.Emisor.NombreLegal = docGP.DocVenta.emisorNombre; _docElectronico.Emisor.Ubigeo = docGP.DocVenta.emisorUbigeo; _docElectronico.Emisor.Direccion = docGP.DocVenta.emisorDireccion; _docElectronico.Emisor.Urbanizacion = docGP.DocVenta.emisorUrbanizacion; _docElectronico.Emisor.Departamento = docGP.DocVenta.emisorDepartamento; _docElectronico.Emisor.Provincia = docGP.DocVenta.emisorProvincia; _docElectronico.Emisor.Distrito = docGP.DocVenta.emisorDistrito; _docElectronico.Receptor.TipoDocumento = docGP.DocVenta.receptorTipoDoc; _docElectronico.Receptor.NroDocumento = docGP.DocVenta.receptorNroDoc; _docElectronico.Receptor.NombreComercial = docGP.DocVenta.receptorNombre; _docElectronico.Receptor.NombreLegal = docGP.DocVenta.receptorNombre; _docElectronico.TipoOperacion = docGP.DocVenta.tipoOperacion; _docElectronico.DescuentoGlobal = docGP.DocVenta.ORTDISAM; _docElectronico.TotalIgv = docGP.DocVenta.iva; _docElectronico.Gravadas = docGP.DocVenta.ivaImponible; _docElectronico.Inafectas = docGP.DocVenta.inafecta; _docElectronico.Exoneradas = docGP.DocVenta.exonerado; _docElectronico.Gratuitas = docGP.DocVenta.gratuito; _docElectronico.TotalVenta = docGP.DocVenta.total; _docElectronico.MontoEnLetras = docGP.DocVenta.montoEnLetras; lDetalleDocumento = new List <DetalleDocumento>(); int i = 1; foreach (vwCfdiConceptos d in docGP.LDocVentaConceptos) { lDetalleDocumento.Add(new DetalleDocumento() { CodigoItem = d.ITEMNMBR, Id = i, // Convert.ToInt16(d.id), Descripcion = d.Descripcion, Cantidad = d.cantidad, UnidadMedida = d.udemSunat, PrecioUnitario = d.valorUni, PrecioReferencial = Convert.ToDecimal(d.precioUniConIva), TotalVenta = Convert.ToDecimal(d.importe), TipoPrecio = d.tipoPrecio, Impuesto = d.orslstax, TipoImpuesto = d.tipoImpuesto, }); i++; } _docElectronico.Items = new List <DetalleDocumento>(); _docElectronico.Items = lDetalleDocumento; if (docGP.LDocVentaRelacionados.Count > 0) { _docElectronico.Relacionados = new List <DocumentoRelacionado>(); _docElectronico.Discrepancias = new List <Discrepancia>(); foreach (vwCfdiRelacionados d in docGP.LDocVentaRelacionados) { _docElectronico.Relacionados.Add(new DocumentoRelacionado() { NroDocumento = d.sopnumbeTo, TipoDocumento = d.tipoDocumento }); _docElectronico.Discrepancias.Add(new Discrepancia() { Tipo = docGP.DocVenta.discrepanciaTipo, Descripcion = docGP.DocVenta.discrepanciaDesc, NroReferencia = d.sopnumbeTo }); } } } catch (Exception) { throw; } }
public void ArmarResumenElectronico() { try { DocumentoVentaGP docGP = new DocumentoVentaGP(); docGP.GetDatosResumenBoletas(this.Sopnumbe, this.Soptype); _resumenElectronico = new ResumenDiarioNuevo() { IdDocumento = docGP.ResumenCab.numResumenDiario, FechaEmision = docGP.ResumenCab.docdate.ToString(FormatoFecha), //DateTime.Today.ToString(FormatoFecha), FechaReferencia = docGP.ResumenCab.docdate.ToString(FormatoFecha), Emisor = new Contribuyente() { NroDocumento = docGP.ResumenCab.emisorNroDoc, TipoDocumento = docGP.ResumenCab.emisorTipoDoc, Direccion = docGP.ResumenCab.emisorDireccion, Urbanizacion = docGP.ResumenCab.emisorUrbanizacion, Departamento = docGP.ResumenCab.emisorDepartamento, Provincia = docGP.ResumenCab.emisorProvincia, Distrito = docGP.ResumenCab.emisorDistrito, NombreComercial = docGP.ResumenCab.emisorNombre, NombreLegal = docGP.ResumenCab.emisorNombre, Ubigeo = docGP.ResumenCab.emisorUbigeo }, Resumenes = new List <GrupoResumenNuevo>() }; int i = 1; foreach (vwCfdiGeneraResumenDiario re in docGP.LDocResumenLineas) { var grn = new GrupoResumenNuevo() { Id = i, TipoDocumento = re.tipoDocumento, IdDocumento = re.sopnumbe, NroDocumentoReceptor = re.receptorNroDoc, TipoDocumentoReceptor = re.receptorTipoDoc, CodigoEstadoItem = 1, Moneda = re.moneda, TotalVenta = Convert.ToDecimal(re.total), TotalDescuentos = Convert.ToDecimal(re.totalDescuento), Gratuitas = Convert.ToDecimal(re.totalGratuito), Gravadas = Convert.ToDecimal(re.totalIvaImponible), Exoneradas = Convert.ToDecimal(re.totalExonerado), Inafectas = Convert.ToDecimal(re.totalInafecta), TotalIgv = Convert.ToDecimal(re.totalIva), DocumentoRelacionado = (re.tipoDocumento == "07" || re.tipoDocumento == "08") ? re.sopnumbeTo : null, TipoDocumentoRelacionado = (re.tipoDocumento == "07" || re.tipoDocumento == "08") ? re.tipoDocumentoTo : null //IdDocumento = re.serie, //Serie = re.serie, //CorrelativoInicio = Convert.ToInt32(re.iniRango), //CorrelativoFin = Convert.ToInt32(re.finRango), }; _resumenElectronico.Resumenes.Add(grn); i++; } } catch (Exception) { throw; } }
public string TimbraYEnviaASunat(string ruc, string usuario, string usuarioPassword, DocumentoVentaGP documentoGP) { throw new NotImplementedException(); }
/// <summary> /// Arma el objeto del servicio web /// </summary> /// <param name="documentoGP"></param> /// <returns></returns> private DocumentoElectronico ArmaDocumentoEnviarWS(DocumentoVentaGP documentoGP) { DocEnviarWS = new DocumentoElectronico(); int i = 0; // Variable para loopear int correlativo = 1; // Variable para corre de productos; Boolean DescItemIGV = true; debug_xml = ""; //Seccion emisor DocEnviarWS.emisor = new Emisor(); DocEnviarWS.emisor.ruc = documentoGP.DocVenta.emisorNroDoc; if (!string.IsNullOrEmpty(documentoGP.DocVenta.emisorUbigeo.Trim()) && !documentoGP.DocVenta.emisorUbigeo.ToLower().Contains("no existe tag") && !documentoGP.DocVenta.emisorUbigeo.ToLower().Equals("na")) { DocEnviarWS.emisor.lugarExpedicion = documentoGP.DocVenta.emisorUbigeo.Trim(); } //DocEnviarWS.emisor.nombreComercial = documentoGP.DocVenta.emisorNombre; /*DocEnviarWS.emisor.domicilioFiscal = documentoGP.DocVenta.emisorDireccion; * DocEnviarWS.emisor.urbanizacion = documentoGP.DocVenta.emisorUrbanizacion; * DocEnviarWS.emisor.distrito = documentoGP.DocVenta.emisorDistrito; * DocEnviarWS.emisor.provincia = documentoGP.DocVenta.emisorProvincia; * DocEnviarWS.emisor.departamento = documentoGP.DocVenta.emisorDepartamento; * DocEnviarWS.emisor.codigoPais = documentoGP.DocVenta.emisorCodPais; * DocEnviarWS.emisor.ubigeo = documentoGP.DocVenta.emisorUbigeo;*/ // SECCION RECEPTOR DocEnviarWS.receptor = new Receptor(); DocEnviarWS.receptor.email = documentoGP.DocVenta.emailTo; DocEnviarWS.receptor.notificar = documentoGP.DocVenta.emailTo.Trim() == string.Empty ? "NO" : "SI"; DocEnviarWS.receptor.numDocumento = documentoGP.DocVenta.receptorNroDoc; DocEnviarWS.receptor.direccion = documentoGP.DocVenta.receptorDireccion; DocEnviarWS.receptor.departamento = documentoGP.DocVenta.receptorCiudad; //DocEnviarWS.receptor.distrito = documentoGP.DocVenta.recep //DocEnviarWS.receptor.pais = documentoGP.DocVenta.receptorPais; DocEnviarWS.receptor.provincia = documentoGP.DocVenta.receptorProvincia; DocEnviarWS.receptor.razonSocial = documentoGP.DocVenta.receptorNombre; // DocEnviarWS.receptor.telefono = documentoGP.DocVenta. DocEnviarWS.receptor.tipoDocumento = documentoGP.DocVenta.receptorTipoDoc; // DocEnviarWS.receptor.ubigeo = documentoGP.DocVenta.rece // SECCION COMROBANTE DocEnviarWS.codigoTipoOperacion = documentoGP.DocVenta.tipoOperacion; DocEnviarWS.correlativo = documentoGP.DocVenta.numero; //DocEnviarWS.correlativo = "10000106"; // se usa para reenviar comprobante. DocEnviarWS.fechaEmision = documentoGP.DocVenta.fechaEmision.ToString("yyyy-MM-dd"); DocEnviarWS.fechaVencimiento = documentoGP.DocVenta.fechaVencimiento.ToString("yyyy-MM-dd"); DocEnviarWS.horaEmision = documentoGP.DocVenta.horaEmision; DocEnviarWS.idTransaccion = documentoGP.DocVenta.idDocumento; DocEnviarWS.serie = documentoGP.DocVenta.serie; DocEnviarWS.tipoDocumento = documentoGP.DocVenta.tipoDocumento; // FIN SECCION COMPROBANTE // SECCION Relacionado. VER mas adelante if (!string.IsNullOrEmpty(documentoGP.DocVenta.cRelacionadoTipoDocAfectado)) { if (DocEnviarWS.tipoDocumento == "07" || DocEnviarWS.tipoDocumento == "08") { var relacionadoN = new RelacionadoNotas(); relacionadoN.codigoTipoNota = documentoGP.DocVenta.infoRelNotasCodigoTipoNota; relacionadoN.observaciones = documentoGP.DocVenta.infoRelNotasObservaciones; relacionadoN.numeroDocAfectado = documentoGP.DocVenta.cRelacionadoNumDocAfectado.Trim(); relacionadoN.tipoDocAfectado = documentoGP.DocVenta.cRelacionadoTipoDocAfectado; DocEnviarWS.relacionadoNotas = new RelacionadoNotas(); DocEnviarWS.relacionadoNotas = relacionadoN; } else { if (DocEnviarWS.tipoDocumento == "01") { var relacionado = new Relacionado(); relacionado.numeroDocRelacionado = documentoGP.DocVenta.cRelacionadoNumDocAfectado.Trim(); relacionado.tipoDocRelacionado = documentoGP.DocVenta.cRelacionadoTipoDocAfectado; DocEnviarWS.relacionado = new Relacionado[1]; DocEnviarWS.relacionado[0] = relacionado; } } } foreach (vwCfdiRelacionados relacionado_gp in documentoGP.LDocVentaRelacionados) { if (DocEnviarWS.tipoDocumento == "07" || DocEnviarWS.tipoDocumento == "08") { var relacionadoN = new RelacionadoNotas(); relacionadoN.codigoTipoNota = documentoGP.DocVenta.infoRelNotasCodigoTipoNota; relacionadoN.observaciones = documentoGP.DocVenta.infoRelNotasObservaciones; relacionadoN.numeroDocAfectado = relacionado_gp.sopnumbeTo.Trim(); relacionadoN.tipoDocAfectado = relacionado_gp.tipoDocumento; DocEnviarWS.relacionadoNotas = new RelacionadoNotas(); DocEnviarWS.relacionadoNotas = relacionadoN; } else { if (DocEnviarWS.tipoDocumento == "01") { var relacionado = new Relacionado(); relacionado.numeroDocRelacionado = relacionado_gp.sopnumbeTo.Trim();; relacionado.tipoDocRelacionado = relacionado_gp.tipoDocumento; DocEnviarWS.relacionado = new Relacionado[1]; DocEnviarWS.relacionado[0] = relacionado; } } //Aumenta contadoresDocEnviarWS.producto[i]. i++; correlativo++; } // SECCION Producto. DocEnviarWS.producto = new Producto[documentoGP.LDocVentaConceptos.Count()]; i = 0; correlativo = 1; foreach (vwCfdiConceptos producto_gp in documentoGP.LDocVentaConceptos) { var producto = new Producto(); producto.cantidad = producto_gp.cantidad.ToString(); producto.codigoPLU = producto_gp.ITEMNMBR; producto.codigoPLUSunat = producto_gp.claveProdSunat.Trim(); producto.descripcion = producto_gp.ITEMDESC; producto.montoTotalImpuestoItem = producto_gp.montoIva.ToString("0.00"); producto.precioVentaUnitarioItem = producto_gp.precioUniConIva.ToString(); producto.unidadMedida = producto_gp.udemSunat; producto.valorReferencialUnitario = producto_gp.precioUniConIva.ToString(); producto.valorUnitarioBI = producto_gp.valorUni.ToString(); producto.valorVentaItemQxBI = string.Format("{0,14:0.00}", producto_gp.importe).Trim(); producto.numeroOrden = correlativo.ToString(); // SECCION PRODUCTO IGV producto.IGV = new ProductoIGV(); switch (producto_gp.tipoAfectacion.ToString().Trim()) { case "20": producto.IGV.baseImponible = producto_gp.montoImponibleExonera.ToString("0.00"); break; case "21": producto.IGV.baseImponible = producto_gp.montoImponibleGratuito.ToString("0.00"); break; case "30": producto.IGV.baseImponible = producto_gp.montoImponibleInafecto.ToString("0.00"); break; case "35": producto.IGV.baseImponible = producto_gp.montoImponibleInafecto.ToString("0.00"); break; case "40": producto.IGV.baseImponible = producto_gp.montoImponibleExporta.ToString("0.00"); break; default: producto.IGV.baseImponible = producto_gp.montoImponibleIva.ToString("0.00"); break; } producto.IGV.monto = producto_gp.montoIva.ToString("0.00"); producto.IGV.tipo = producto_gp.tipoAfectacion.ToString().Trim(); if (!string.IsNullOrEmpty(documentoGP.DocVenta.infoRelNotasCodigoTipoNota)) { producto.IGV.porcentaje = string.Format("{0,8:0.00}", producto_gp.porcentajeIva * 100).Trim(); } else { producto.IGV.porcentaje = string.Format("{0,8:0.00}", producto_gp.porcentajeIva * 100).Trim(); } //SECCION PRODUCTO DESCUENTO if (producto_gp.descuento != 0) { producto.descuento = new ProductoDescuento(); producto.descuento.baseImponible = string.Format("{0,14:0.00}", producto_gp.descuentoBaseImponible).Trim(); producto.descuento.monto = string.Format("{0,14:0.00}", producto_gp.descuento).Trim(); producto.descuento.porcentaje = string.Format("{0,8:0.00000}", producto_gp.descuentoPorcentaje * 100).Trim(); producto.descuento.codigo = producto_gp.descuentoCodigo; if (producto_gp.descuentoCodigo == "01") { DescItemIGV = false; } } DocEnviarWS.producto[i] = producto; //Aumenta contadoresDocEnviarWS.producto[i]. i++; correlativo++; } // SECCION Descuentos Globales if (documentoGP.DocVenta.descuentoGlobalMonto != 0) { DocEnviarWS.descuentosGlobales = new DescuentosGlobales(); DocEnviarWS.descuentosGlobales.baseImponible = documentoGP.DocVenta.descuentoGlobalImponible.ToString("0.00"); DocEnviarWS.descuentosGlobales.monto = documentoGP.DocVenta.descuentoGlobalMonto.ToString("0.00"); if (DescItemIGV) { DocEnviarWS.descuentosGlobales.motivo = "02"; } else { DocEnviarWS.descuentosGlobales.motivo = "03"; } DocEnviarWS.descuentosGlobales.porcentaje = string.Format("{0,8:0.00000}", documentoGP.DocVenta.descuentoGlobalPorcentaje).Trim(); } //SECCION DETRACCIONES if (!(string.IsNullOrEmpty(documentoGP.DocVenta.codigoDetraccion) || documentoGP.DocVenta.codigoDetraccion.Trim() == "00")) { var detracciones = new Detraccion(); detracciones.codigo = documentoGP.DocVenta.codigoDetraccion.Trim(); detracciones.medioPago = documentoGP.DocVenta.medioPagoDetraccion; detracciones.monto = string.Format("{0,14:0.00}", documentoGP.DocVenta.montoDetraccion).Trim(); detracciones.numCuentaBancodelaNacion = documentoGP.DocVenta.numCuentaBancoNacion.Trim(); detracciones.porcentaje = string.Format("{0,8:0.00}", documentoGP.DocVenta.porcentajeDetraccion).Trim(); DocEnviarWS.detraccion = new Detraccion[1]; DocEnviarWS.detraccion[0] = detracciones; } //SECCION TOTALES DocEnviarWS.totales = new Totales(); DocEnviarWS.totales.importeTotalPagar = documentoGP.DocVenta.montoTotalVenta.ToString("0.00"); DocEnviarWS.totales.importeTotalVenta = documentoGP.DocVenta.montoTotalVenta.ToString("0.00"); DocEnviarWS.totales.montoTotalImpuestos = documentoGP.DocVenta.montoTotalImpuestos.ToString("0.00"); DocEnviarWS.totales.subtotalValorVenta = string.Format("{0,14:0.00}", documentoGP.DocVenta.montoSubtotalValorVenta).Trim(); if (documentoGP.DocVenta.montoTotalDescuentosPorItem > 0) { DocEnviarWS.totales.sumaTotalDescuentosporItem = string.Format("{0,14:0.00}", documentoGP.DocVenta.montoTotalDescuentosPorItem).Trim(); } if (documentoGP.DocVenta.montoTotalImpuOperGratuitas > 0) { DocEnviarWS.totales.sumatoriaImpuestosOG = documentoGP.DocVenta.montoTotalImpuOperGratuitas.ToString("0.00"); } if (documentoGP.DocVenta.montoTotalIgv > 0) { DocEnviarWS.totales.totalIGV = documentoGP.DocVenta.montoTotalIgv.ToString("0.00"); } //SECCION SUBTOTALES DocEnviarWS.totales.subtotal = new Subtotal(); DocEnviarWS.totales.subtotal.IGV = documentoGP.DocVenta.montoSubtotalIvaImponible.ToString("0.00"); if (documentoGP.DocVenta.montoSubtotalExonerado > 0) { DocEnviarWS.totales.subtotal.exoneradas = documentoGP.DocVenta.montoSubtotalExonerado.ToString("0.00"); } if (documentoGP.DocVenta.montoSubtotalExportacion > 0) { DocEnviarWS.totales.subtotal.exportacion = documentoGP.DocVenta.montoSubtotalExportacion.ToString("0.00"); } if (documentoGP.DocVenta.montoSubtotalGratuito > 0) { DocEnviarWS.totales.subtotal.gratuitas = documentoGP.DocVenta.montoSubtotalGratuito.ToString("0.00"); } if (documentoGP.DocVenta.montoSubtotalInafecto > 0) { DocEnviarWS.totales.subtotal.inafectas = documentoGP.DocVenta.montoSubtotalInafecto.ToString("0.00"); } //Caso de exportación if (documentoGP.DocVenta.tipoOperacion.Substring(0, 2).Equals("02")) { DocEnviarWS.entregaBienoServicio = new Delivery(); DocEnviarWS.entregaBienoServicio.paisUsoServicio = documentoGP.DocVenta.receptorPais; } //SECCION PAGO DocEnviarWS.pago = new Pago(); DocEnviarWS.pago.moneda = documentoGP.DocVenta.moneda; DocEnviarWS.pago.tipoCambio = documentoGP.DocVenta.xchgrate.ToString("0.00000"); DocEnviarWS.pago.fechaInicio = DateTime.Now.ToString("yyyy-MM-dd"); DocEnviarWS.pago.fechaFin = DateTime.Now.ToString("yyyy-MM-dd"); //SECCION PERSONALIZACION PDF if (!string.IsNullOrEmpty(documentoGP.LeyendasXml)) { XElement leyendasX = XElement.Parse(documentoGP.LeyendasXml); int numLeyendas = leyendasX.Elements().Count(); if (!string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault().Attribute("S").Value) && !string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault().Attribute("T").Value) && !string.IsNullOrEmpty(leyendasX.Elements().FirstOrDefault().Attribute("V").Value) ) { DocEnviarWS.personalizacionPDF = new PersonalizacionPDF[numLeyendas]; int idx = 0; foreach (XElement child in leyendasX.Elements()) { DocEnviarWS.personalizacionPDF[idx] = new PersonalizacionPDF(); DocEnviarWS.personalizacionPDF[idx].seccion = child.Attribute("S").Value; DocEnviarWS.personalizacionPDF[idx].titulo = child.Attribute("T").Value; DocEnviarWS.personalizacionPDF[idx].valor = child.Attribute("V").Value; idx++; } } } XmlSerializer xml = new XmlSerializer(typeof(DocumentoElectronico)); using (StringWriter sw = new StringWriter()) { xml.Serialize(sw, DocEnviarWS); debug_xml = sw.ToString(); } return(DocEnviarWS); }