Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
        }