Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
        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);
                }
            }
        }
Esempio n. 6
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. 7
0
        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;
            }
        }
Esempio n. 8
0
        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; }
        }
Esempio n. 9
0
 public string TimbraYEnviaASunat(string ruc, string usuario, string usuarioPassword, DocumentoVentaGP documentoGP)
 {
     throw new NotImplementedException();
 }
Esempio n. 10
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);
        }