Пример #1
0
        /// <summary>
        /// Agrega el concepto y su respectivo impuesto trasladado
        /// Este metodo solo debe ser llamado cuendo el concepto tenga
        /// Uno y solo un impuesto por trasladar o retener (No excento)
        /// </summary>
        /// <param name="nConcepto"></param>
        /// <param name="nImpuesto"></param>
        /// <param name="nTasaOCuota"></param>
        /// <param name="nBase"></param>
        /// <param name="nImporte"></param>
        /// <param name="nTipoFactor"></param>
        /// <param name="isTraslado"></param>
        public void AddConcepto(ComprobanteConcepto nConcepto, string nImpuesto, decimal nTasaOCuota, decimal nBase, decimal nImporte, string nTipoFactor, bool isTraslado = true)
        {
            nConcepto.Impuestos = new ComprobanteConceptoImpuestos();

            if (isTraslado)
            {
                //Solo Un traslado
                conceptoTraslado                 = new ComprobanteConceptoImpuestosTraslado();
                conceptoTraslado.Impuesto        = nImpuesto;
                conceptoTraslado.TasaOCuota      = nTasaOCuota;
                conceptoTraslado.Base            = nBase;
                conceptoTraslado.Importe         = nImporte;
                conceptoTraslado.TipoFactor      = nTipoFactor;
                nConcepto.Importe                = Math.Round(nConcepto.Cantidad * nConcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero);
                nConcepto.Impuestos.Traslados    = new ComprobanteConceptoImpuestosTraslado[1];
                nConcepto.Impuestos.Traslados[0] = conceptoTraslado;
                conceptos.Add(nConcepto);
            }
            else
            {
                //Solo Un traslado
                conceptoRetencion                  = new ComprobanteConceptoImpuestosRetencion();
                conceptoRetencion.Impuesto         = nImpuesto;
                conceptoRetencion.TasaOCuota       = nTasaOCuota;
                conceptoRetencion.Base             = nBase;
                conceptoRetencion.Importe          = nImporte;
                conceptoRetencion.TipoFactor       = nTipoFactor;
                nConcepto.Importe                  = Math.Round(nConcepto.Cantidad * nConcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero);
                nConcepto.Impuestos.Retenciones    = new ComprobanteConceptoImpuestosRetencion[1];
                nConcepto.Impuestos.Retenciones[0] = conceptoRetencion;
                conceptos.Add(nConcepto);
            }
        }
Пример #2
0
        /// <summary>
        /// Agrega el concepto y su respectivo impuesto trasladado y retencion
        /// Solo debe ser llamado cuando el concepto tenga un impuesto y una
        /// retencion.
        /// </summary>
        /// <param name="nConcepto"></param>
        /// <param name="trasladoImpuesto"></param>
        /// <param name="trasladoTasaOCuota"></param>
        /// <param name="trasladoBase"></param>
        /// <param name="trasladoImporte"></param>
        /// <param name="trasladoTipoFactor"></param>
        /// <param name="retencionImpuesto"></param>
        /// <param name="retencionTasaOCuota"></param>
        /// <param name="retencionBase"></param>
        /// <param name="retencionImporte"></param>
        /// <param name="retencionTipoFactor"></param>
        public void AddConcepto(ComprobanteConcepto nConcepto, string trasladoImpuesto, decimal trasladoTasaOCuota, decimal trasladoBase, decimal trasladoImporte, string trasladoTipoFactor, string retencionImpuesto, decimal retencionTasaOCuota, decimal retencionBase, decimal retencionImporte, string retencionTipoFactor)
        {
            nConcepto.Impuestos = new ComprobanteConceptoImpuestos();
            nConcepto.Importe   = Math.Round(nConcepto.Cantidad * nConcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero);

            //Solo Un traslado
            conceptoTraslado                 = new ComprobanteConceptoImpuestosTraslado();
            conceptoTraslado.Impuesto        = trasladoImpuesto;
            conceptoTraslado.TasaOCuota      = trasladoTasaOCuota;
            conceptoTraslado.Base            = trasladoBase;
            conceptoTraslado.Importe         = trasladoImporte;
            conceptoTraslado.TipoFactor      = trasladoTipoFactor;
            nConcepto.Impuestos.Traslados    = new ComprobanteConceptoImpuestosTraslado[1];
            nConcepto.Impuestos.Traslados[0] = conceptoTraslado;

            //Solo una retencion
            conceptoRetencion                  = new ComprobanteConceptoImpuestosRetencion();
            conceptoRetencion.Impuesto         = retencionImpuesto;
            conceptoRetencion.TasaOCuota       = retencionTasaOCuota;
            conceptoRetencion.Base             = retencionBase;
            conceptoRetencion.Importe          = retencionImporte;
            conceptoRetencion.TipoFactor       = retencionTipoFactor;
            nConcepto.Impuestos.Retenciones    = new ComprobanteConceptoImpuestosRetencion[1];
            nConcepto.Impuestos.Retenciones[0] = conceptoRetencion;

            conceptos.Add(nConcepto);
        }
Пример #3
0
        private void AddConceptoStandard()
        {
            var concepto = new ComprobanteConcepto();

            concepto.ClaveProdServ = "84111506";
            concepto.Cantidad      = 1;
            concepto.ClaveUnidad   = "ACT";
            concepto.Descripcion   = "Pago";
            concepto.ValorUnitario = 0;
            concepto.Importe       = 0;
            conceptos.Add(concepto);
        }
Пример #4
0
        /// <summary>
        /// Agrega el concepto con sus respectivas colecciones de impuestos
        /// cuando ambas colecciones toman valor null por defecto, entonces
        /// el concepto se grava excento
        /// </summary>
        /// <param name="pconcepto"> Concepto</param>
        /// <param name="traslados"> Impuestos trasladados</param>
        /// <param name="retenciones">Impuestos retenidos </param>
        public void AddConcepto(ComprobanteConcepto pconcepto, List <ComprobanteConceptoImpuestosTraslado> traslados = null, List <ComprobanteConceptoImpuestosRetencion> retenciones = null)
        {
            pconcepto.Impuestos = new ComprobanteConceptoImpuestos();

            if (traslados == null)
            {
                if (retenciones == null)
                {
                    // Concepto excento
                    conceptoTraslado = new ComprobanteConceptoImpuestosTraslado
                    {
                        Base       = pconcepto.Cantidad * pconcepto.ValorUnitario,
                        Impuesto   = Constants.STANDARD_TAX,
                        TipoFactor = Constants.STANDARD_TYPE_FACTOR
                    };
                    pconcepto.Importe                = Math.Round(pconcepto.Cantidad * pconcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero);
                    pconcepto.Impuestos.Traslados    = new ComprobanteConceptoImpuestosTraslado[1];
                    pconcepto.Impuestos.Traslados[0] = conceptoTraslado;
                    conceptos.Add(pconcepto);
                }
                else
                {
                    //Una o varias retenciones
                    pconcepto.Impuestos.Retenciones = retenciones.ToArray();
                    conceptos.Add(pconcepto);
                }
            }
            else
            {
                if (retenciones == null)
                {
                    //Uno o varios traslados
                    pconcepto.Impuestos.Traslados = traslados.ToArray();
                    conceptos.Add(pconcepto);
                }
                else
                {
                    //Una o varias retenciones y Uno o varios traslados
                    pconcepto.Impuestos.Retenciones = retenciones.ToArray();
                    pconcepto.Impuestos.Traslados   = traslados.ToArray();
                    conceptos.Add(pconcepto);
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Obtener información Nodo Concepto
        /// </summary>
        /// <param name="idComprobante">ID Comprobante</param>
        /// <returns>Lista de modelo ComprobanteConcepto</returns>
        public async Task <List <ComprobanteConcepto> > ObtenerNodoConcepto(string idComprobante)
        {
            List <ComprobanteConcepto> respuesta = new List <ComprobanteConcepto>();

            try
            {
                var resultado = await _baseDatos.SelectAsync <NodoConcepto>(_queryNodoConcepto + idComprobante);

                if ((resultado?.Any() ?? false))
                {
                    var parte = new List <ComprobanteConceptoParte>();

                    foreach (var dato in resultado)
                    {
                        var concepto = new ComprobanteConcepto();
                        concepto.ClaveProdServ      = dato.claveProdServ;
                        concepto.NoIdentificacion   = !string.IsNullOrEmpty(dato.noIdentificacion) ? dato.noIdentificacion : null;
                        concepto.Cantidad           = TruncarDecimal(dato.cantidad, dato.decimales, false);
                        concepto.ClaveUnidad        = dato.claveUnidad;
                        concepto.Descripcion        = dato.descripcion;
                        concepto.ValorUnitario      = TruncarDecimal(dato.valorUnitario, dato.decimales, true);
                        concepto.Importe            = TruncarDecimal(dato.importe, dato.decimales, true);
                        concepto.Descuento          = TruncarDecimal(Convert.ToDecimal(dato.descuento), dato.decimales, true);
                        concepto.DescuentoSpecified = Convert.ToDecimal(dato.descuento) > 0 ? true : false;
                        concepto.Impuestos          = await ObtenerNodoConceptoImpuesto(dato.id.ToString());

                        concepto.InformacionAduanera = !string.IsNullOrEmpty(dato.aduanaNumeroPedimento) ? ObtenerNodoConceptoInformacionAduanera(dato.aduanaNumeroPedimento).ToArray() : null;
                        concepto.Parte = (parte = await ObtenerNodoConceptoParte(dato.id.ToString())) != null?parte.ToArray() : null;

                        respuesta.Add(concepto);
                    }
                }
                else
                {
                    respuesta = null;
                }
            }
            catch (Exception ex)
            {
                respuesta = null;
            }

            return(respuesta);
        }
Пример #6
0
        //Inicizalizar
        public void Inicializar()
        {
            //Controladores
            ventaController    = new VentaController();
            ventapController   = new VentapController();
            clienteController  = new ClienteController();
            empresaController  = new EmpresaController();
            dymErrorController = new DymErrorController();

            //Utils
            respuestaCFDI  = new RespuestaCFDi();
            timbradoClient = new TimbradoClient();
            selloDigital   = new SelloDigital();
            transformador  = new XslCompiledTransform();

            //Comprobante
            comprobante = new Comprobante();
            emisor      = new ComprobanteEmisor();
            receptor    = new ComprobanteReceptor();


            // Nivel concepto
            conceptos         = new List <ComprobanteConcepto>();
            concepto          = new ComprobanteConcepto();
            impuestosConcepto = new List <ComprobanteConceptoImpuestosTraslado>();
            ivaConcepto       = new ComprobanteConceptoImpuestosTraslado();
            iepsConcepto      = new ComprobanteConceptoImpuestosTraslado();



            //Nivel comprobante
            impuestosComprobante      = new List <ComprobanteImpuestosTraslado>();
            totalImpuestosComprobante = new ComprobanteImpuestos();
            ivaComprobante            = new ComprobanteImpuestosTraslado();
            iepsComprobante           = new ComprobanteImpuestosTraslado();


            //inicializacion de propiedades
            empresa  = empresaController.SelectTopOne();
            partidas = ventapController.SelectPartidas(Venta.VentaId);
            cliente  = clienteController.SelectOne(Venta.ClienteId);
            s        = "";
        }
        private ComprobanteConcepto contruyeConceptos(CFDIEmpleado cfdiEmpleado)
        {
            ComprobanteConcepto concepto = new ComprobanteConcepto();

            concepto.Cantidad      = (UtileriasSat.castNumerosToBigDecimal(1)); //@pendiente el cast
            concepto.Descripcion   = ("Pago de nómina");                        //@
            concepto.ClaveProdServ = ("84111505");                              //84111505
            concepto.ClaveUnidad   = ("ACT");
            //no hay necesidad de poner el nodo impuesto
            Double totalPercepcion = 0.0, totalDeduciones = 0.0, totalOtrosPagos = 0.00;
            List <CFDIReciboConcepto> conceptos = cfdiEmpleado.cfdiRecibo.cfdiReciboConcepto;

            if (conceptos != null)
            {
                int i;
                for (i = 0; i < conceptos.Count(); i++)
                {
                    if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.PERCEPCION), StringComparison.OrdinalIgnoreCase))
                    {
                        if (conceptos[i].otroPago)
                        {
                            totalOtrosPagos = totalOtrosPagos + (conceptos[i].importeExento) + (conceptos[i].importeGravable);
                        }
                        else
                        {
                            totalPercepcion = totalPercepcion + conceptos[i].importeExento + conceptos[i].importeGravable;
                        }
                    }
                    else if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.DEDUCCION), StringComparison.OrdinalIgnoreCase))
                    {
                        totalDeduciones = totalDeduciones + conceptos[i].importeExento + conceptos[i].importeGravable;
                    }
                }
            }
            concepto.Descuento     = UtileriasSat.castNumerosToBigDecimal(totalDeduciones);
            concepto.Importe       = (UtileriasSat.castNumerosToBigDecimal(totalPercepcion + totalOtrosPagos)); //@//pendiente la conversion
            concepto.ValorUnitario = (UtileriasSat.castNumerosToBigDecimal(totalPercepcion + totalOtrosPagos)); //@//pendiente la conversion
            return(concepto);
        }
Пример #8
0
        private void Factura()
        {
            try
            {
                cFDIHelper.Initialize("I");
                invoiceService.Initialize("I");

                //var repository = new MoqFilesRepository(context);
                //repository.AddFile(Constants.CerPath, "cer");
                //repository.AddFile(Constants.KeyPath, "key");
                //repository.AddPassword(csdService.EncodeToBase64(Constants.Pass), "pass");
                //return;


                var certificatedb = context.SatFiles.FirstOrDefault(x => x.Type.ToLower().Equals("cer"));
                var privateKeydb  = context.SatFiles.FirstOrDefault(x => x.Type.ToLower().Equals("key"));
                var passworddb    = context.SatFiles.FirstOrDefault(x => x.Type.ToLower().Equals("pass"));


                var mxCertificate = new MxCertificate(certificatedb);
                var mxPrivateKey  = new MxPrivateKey(privateKeydb);
                var password      = passworddb.Base64File.DecodeFromBase64();


                cFDIHelper.CertificateBytes = mxCertificate.CertificateBytes();
                cFDIHelper.PrivateKeyBytes  = mxPrivateKey.PrivateKeyBytes();
                cFDIHelper.Password         = password;
                cFDIHelper.XSLTPath         = Constants.XSLT_PATH;


                invoiceService.Comprobante.Fecha             = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
                invoiceService.Comprobante.Sello             = "MiCadenaDeSello";
                invoiceService.Comprobante.NoCertificado     = mxCertificate.CertificateNumber();
                invoiceService.Comprobante.Certificado       = certificatedb.Base64File;
                invoiceService.Comprobante.Moneda            = "MXN";
                invoiceService.Comprobante.TipoDeComprobante = "I";
                invoiceService.Comprobante.LugarExpedicion   = "38020";
                invoiceService.Comprobante.TipoDeComprobante = "I";
                invoiceService.Comprobante.Serie             = "F";
                invoiceService.Comprobante.FormaPago         = "01";
                invoiceService.Comprobante.MetodoPago        = "PUE";


                //Concepto 1
                var concepto1 = new ComprobanteConcepto();
                concepto1.ClaveProdServ    = "01010101";
                concepto1.ClaveUnidad      = "H87";
                concepto1.NoIdentificacion = "P001";
                concepto1.Unidad           = "Tonelada";
                concepto1.Descripcion      = "Producto ACERO";
                concepto1.Cantidad         = 1.5M;
                concepto1.ValorUnitario    = 1500000;
                concepto1.Descuento        = 10;
                concepto1.Importe          = 2250000;
                invoiceService.AddConcepto(concepto1, "002", 0.160000m, 2250000, 360000, "Tasa", "003", 0.530000m, 2250000, 1192500, "Tasa");



                //Concepto 2
                var concepto2 = new ComprobanteConcepto();
                concepto2.ClaveProdServ    = "01010101";
                concepto2.ClaveUnidad      = "H87";
                concepto2.NoIdentificacion = "P001";
                concepto2.Unidad           = "Tonelada";
                concepto2.Descripcion      = "Producto ALUMINIO";
                concepto2.Cantidad         = 1.6M;
                concepto2.ValorUnitario    = 1500;
                concepto2.Descuento        = 10;
                concepto2.Importe          = 2400;
                invoiceService.AddConcepto(concepto2, "002", 0.160000m, 2400, 384, "Tasa", "003", 0.530000m, 2400, 1272, "Tasa");

                //Concepto 3
                var concepto3 = new ComprobanteConcepto();
                concepto3.ClaveProdServ    = "01010101";
                concepto3.ClaveUnidad      = "H87";
                concepto3.NoIdentificacion = "P003";
                concepto3.Unidad           = "Tonelada";
                concepto3.Descripcion      = "Producto ZAMAC";
                concepto3.Cantidad         = 1.7M;
                concepto3.ValorUnitario    = 10000;
                concepto3.Descuento        = 10;
                concepto3.Importe          = 17000;
                invoiceService.AddConcepto(concepto3, "002", 0.160000m, 17000, 2720, "Tasa", "002", 0.160000m, 17000, 2720, "Tasa");



                //Emisor
                invoiceService.AddEmisor("XIA190128J61", "XENON INDUSTRIAL ARTICLES S DE CV", "601");

                //Receptor
                invoiceService.AddReceptor("MEJJ940824C61", "JESUS MENDOZA JUAREZ", "G01");


                invoiceService.Comprobante = invoiceService.CalculaComprobante();



                //1  SerializeToXmlStringFile
                var xmlStringFile = cFDIHelper.SerializeToXmlStringFile(invoiceService.Comprobante);



                //2 Get candena orginal and Sign
                var cadenaOriginal = cFDIHelper.GetOriginalStringByXmlStringFile(xmlStringFile);
                invoiceService.Comprobante.Sello = cFDIHelper.Sign(cadenaOriginal);

                //3 SerializeToXmlStringFile (again but signed)
                xmlStringFile = cFDIHelper.SerializeToXmlStringFile(invoiceService.Comprobante);

                File.WriteAllText("Invoice.XML", xmlStringFile);

                var response = wsHelperTest.Transmit(xmlStringFile);
                MessageBox.Show(response.Status);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
Пример #9
0
        public static void CreaFactura()
        {
            string pathCer      = Directory.GetCurrentDirectory() + @"/Fiel/Certifiado.cer";
            string pathKey      = Directory.GetCurrentDirectory() + @"/Fiel/Key.key";
            string clavePrivada = "12345678a";

            //Obtenemos el numero
            string numeroCertificado, aa, b, c;

            SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado);


            //Llenamos la clase COMPROBANTE--------------------------------------------------------
            Comprobante oComprobante = new Comprobante();

            oComprobante.Version = "3.3";
            oComprobante.Serie   = "H";
            oComprobante.Folio   = "1";
            oComprobante.Fecha   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            // oComprobante.Sello = "faltante"; //sig video
            oComprobante.FormaPago     = "1";
            oComprobante.NoCertificado = numeroCertificado;
            // oComprobante.Certificado = ""; //sig video
            oComprobante.SubTotal          = 10m;
            oComprobante.Moneda            = "MXN";
            oComprobante.Total             = 10;
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago        = "PUE";
            oComprobante.LugarExpedicion   = "44860";



            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            oEmisor.Rfc           = "AATJ9502061EA";
            oEmisor.Nombre        = "Jorge Humberto Alvarado Tostado";
            oEmisor.RegimenFiscal = "612";

            ComprobanteReceptor oReceptor = new ComprobanteReceptor();

            oReceptor.Nombre  = "Pepe SA DE CV";
            oReceptor.Rfc     = "BIO091204LB1";
            oReceptor.UsoCFDI = "G03";

            //asigno emisor y receptor
            oComprobante.Emisor   = oEmisor;
            oComprobante.Receptor = oReceptor;


            List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>();
            ComprobanteConcepto        oConcepto    = new ComprobanteConcepto();

            oConcepto.Importe       = 10m;
            oConcepto.ClaveProdServ = "92111704";
            oConcepto.Cantidad      = 1;
            oConcepto.ClaveUnidad   = "H87";
            oConcepto.Descripcion   = "Un misil para la guerra";
            oConcepto.ValorUnitario = 10m;


            lstConceptos.Add(oConcepto);

            oComprobante.Conceptos = lstConceptos.ToArray();


            //Creamos el xml
            CreateXML(oComprobante);

            string cadenaOriginal = "";
            string pathxsl        = Directory.GetCurrentDirectory() + @"/Fiel/cadenaoriginal_3_3.xslt";

            System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true);
            transformador.Load(pathxsl);

            using (StringWriter sw = new StringWriter())
                using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings))
                {
                    transformador.Transform(pathXML, xwo);
                    cadenaOriginal = sw.ToString();
                }


            SelloDigital oSelloDigital = new SelloDigital();

            oComprobante.Certificado = oSelloDigital.Certificado(pathCer);
            oComprobante.Sello       = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada);

            CreateXML(oComprobante);

            ////TIMBRE DEL XML
            ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi();

            byte[] bXML = System.IO.File.ReadAllBytes(pathXML);

            ServiceReferenceFC.TimbradoClient oTimbrado = new ServiceReferenceFC.TimbradoClient();

            respuestaCFDI = oTimbrado.TimbrarTest("TEST010101ST1", "a", bXML);

            if (respuestaCFDI.Documento == null)
            {
                Console.WriteLine(respuestaCFDI.Mensaje);
            }
            else
            {
                System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento);
            }
        }
Пример #10
0
        public static string CreaFactura(string folio, string formaPago, string metodoDePago, List <ProductoSat> productos, float subtotal, string rfc, string rz, string usoCFDI, string mail)
        {
            string pathCer      = Directory.GetCurrentDirectory() + @"/Fiel/Certifiado.cer";
            string pathKey      = Directory.GetCurrentDirectory() + @"/Fiel/Key.key";
            string clavePrivada = "Jorge1995";

            //Obtenemos el numero
            string numeroCertificado, aa, b, c;

            SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado);


            //Llenamos la clase COMPROBANTE--------------------------------------------------------
            string      subt            = subtotal.ToString();
            string      impuetosImporte = (subtotal * 0.16).ToString();
            float       t            = subtotal * 1.16f;
            string      ts           = t.ToString();
            Comprobante oComprobante = new Comprobante();

            oComprobante.Version = "3.3";
            oComprobante.Serie   = "H";
            oComprobante.Folio   = folio;
            oComprobante.Fecha   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            //oComprobante.Fecha = "2019-06-11T10:52:20";
            //oComprobante.Sello = "faltante"; //sig video
            oComprobante.FormaPago     = formaPago;
            oComprobante.NoCertificado = numeroCertificado;
            // oComprobante.Certificado = ""; //sig video
            oComprobante.SubTotal          = decimal.Parse(subt);
            oComprobante.Moneda            = "MXN";
            oComprobante.Total             = decimal.Parse(ts);
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago        = "PUE";
            oComprobante.LugarExpedicion   = "44860";



            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            oEmisor.Rfc           = "AATJ9502061EA";
            oEmisor.Nombre        = "Jorge Humberto Alvarado Tostado";
            oEmisor.RegimenFiscal = "612";

            ComprobanteReceptor oReceptor = new ComprobanteReceptor();

            oReceptor.Nombre  = rz;
            oReceptor.Rfc     = rfc;
            oReceptor.UsoCFDI = usoCFDI;

            //asigno emisor y receptor
            oComprobante.Emisor   = oEmisor;
            oComprobante.Receptor = oReceptor;


            List <ComprobanteConcepto>           lstConceptos = new List <ComprobanteConcepto>();
            ComprobanteConcepto                  oConcepto;
            ComprobanteConceptoImpuestos         impuestos;
            ComprobanteConceptoImpuestosTraslado imAux;

            ComprobanteConceptoImpuestosTraslado[] impuestosTrasladados;

            foreach (ProductoSat a in productos)
            {
                oConcepto               = new ComprobanteConcepto();
                impuestos               = new ComprobanteConceptoImpuestos();
                imAux                   = new ComprobanteConceptoImpuestosTraslado();
                impuestosTrasladados    = new ComprobanteConceptoImpuestosTraslado[1];
                oConcepto.Importe       = Math.Round(decimal.Parse((a.Subtotal).ToString()), 3);
                oConcepto.ClaveProdServ = a.CodigoSAT;
                oConcepto.Cantidad      = decimal.Parse(a.Cantidad.ToString());
                oConcepto.ClaveUnidad   = "H87";
                oConcepto.Descripcion   = a.Descripcion;
                oConcepto.ValorUnitario = decimal.Parse((a.Precio).ToString());
                //Impuestos
                imAux.Base                = decimal.Parse(a.Subtotal.ToString());
                imAux.ImporteSpecified    = true;
                imAux.TasaOCuotaSpecified = true;
                imAux.TipoFactor          = "Tasa";
                imAux.Importe             = Math.Round(decimal.Parse((a.Subtotal * 0.16).ToString()), 3);
                imAux.TasaOCuota          = decimal.Parse("0.160000");
                imAux.Impuesto            = "002";
                impuestosTrasladados[0]   = imAux;
                impuestos.Traslados       = impuestosTrasladados;
                oConcepto.Impuestos       = impuestos;
                lstConceptos.Add(oConcepto);
            }
            oComprobante.Conceptos = lstConceptos.ToArray();

            ComprobanteImpuestos         imComprobante           = new ComprobanteImpuestos();
            ComprobanteImpuestosTraslado imComprobanteTraladados = new ComprobanteImpuestosTraslado();

            ComprobanteImpuestosTraslado[] imComprobanteTraladadosArray = new ComprobanteImpuestosTraslado[1];

            imComprobanteTraladados.TipoFactor = "Tasa";
            imComprobanteTraladados.TasaOCuota = decimal.Parse("0.160000");
            imComprobanteTraladados.Impuesto   = "002";
            imComprobanteTraladados.Importe    = Math.Round(decimal.Parse(impuetosImporte), 3);

            imComprobanteTraladadosArray[0] = imComprobanteTraladados;

            imComprobante.Traslados = imComprobanteTraladadosArray;

            imComprobante.TotalImpuestosTrasladadosSpecified = true;
            imComprobante.TotalImpuestosTrasladados          = Math.Round(decimal.Parse(impuetosImporte), 2);
            oComprobante.Impuestos = imComprobante;



            //Creamos el xml
            CreateXML(oComprobante);

            string cadenaOriginal = "";
            string pathxsl        = Directory.GetCurrentDirectory() + @"/Fiel/cadenaoriginal_3_3.xslt";

            System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true);
            transformador.Load(pathxsl);

            using (StringWriter sw = new StringWriter())
                using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings))
                {
                    transformador.Transform(pathXML, xwo);
                    cadenaOriginal = sw.ToString();
                }


            SelloDigital oSelloDigital = new SelloDigital();

            oComprobante.Certificado = oSelloDigital.Certificado(pathCer);
            oComprobante.Sello       = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada);

            CreateXML(oComprobante);

            ////TIMBRE DEL XML
            ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi();

            byte[] bXML = System.IO.File.ReadAllBytes(pathXML);

            ServiceReferenceFC.TimbradoClient oTimbrado = new ServiceReferenceFC.TimbradoClient();

            respuestaCFDI = oTimbrado.Timbrar("AATJ9502061EA", "827984aaddd4126c9c67", bXML);

            if (respuestaCFDI.Documento == null)
            {
                return(respuestaCFDI.Mensaje);
            }
            else
            {
                System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento);
                ServiceReferenceFC.TimbradoClient pdf = new ServiceReferenceFC.TimbradoClient();
                bXML          = System.IO.File.ReadAllBytes(pathXML);
                respuestaCFDI = pdf.PDF("AATJ9502061EA", "827984aaddd4126c9c67", bXML, null);
                System.IO.File.WriteAllBytes(pathPDF, respuestaCFDI.Documento);
                Sql.InsertarFactura(folio, bXML);
                Sql.InsertarDatos("UPDATE  `venta` SET `facturada`= 1 WHERE id_venta=" + folio);
                string pXMl = @path + "\\" + folio + ".xml";
                string pPDF = @path + "\\" + folio + ".pdf";
                File.Move(pathXML, pXMl);
                File.Move(pathPDF, pPDF);
                try
                {
                    Email(mail, pXMl, pPDF);
                }
                catch (Exception e)
                {
                    return("Error: " + e.Message);
                }

                File.Delete(pXMl);
                File.Delete(pPDF);
            }
            return("");
        }
        static void Main(string[] args)
        {
            Comprobante comprobante = new Comprobante();


            ////////////Comprobante/////////////////////
            comprobante.Version           = "3.3";
            comprobante.Serie             = "S";
            comprobante.Folio             = "1";
            comprobante.Fecha             = DateTime.Now;           //CAMBIAR LA FECHA A FORMATO ORIGINAL
            comprobante.Sello             = "Falta";                //EL SELLO FALTA DE IMPLEMENTARCE
            comprobante.FormaPago         = "99";
            comprobante.NoCertificado     = "23456789998765432123"; //FALTA EN NUMERO DE CERTIFICADO
            comprobante.Certificado       = "";                     //FALTA EL CERTIFICADO
            comprobante.SubTotal          = 100;
            comprobante.Descuento         = 1;
            comprobante.Moneda            = "MXN";
            comprobante.Total             = 99;
            comprobante.TipoDeComprobante = "I";
            comprobante.MetodoPago        = "PUE";
            comprobante.LugarExpedicion   = "20131";



            ////////EMISOR////////////////////////////////////
            ComprobanteEmisor emisor = new ComprobanteEmisor();

            emisor.Rfc           = "POWE870601DM7";
            emisor.Nombre        = "una razón";
            emisor.RegimenFiscal = "605";

            ////////RESEPTOR////////////////////////////////////
            ComprobanteReceptor receptor = new ComprobanteReceptor();

            receptor.Nombre  = "Test";
            receptor.Rfc     = "TEST1234566546";
            receptor.UsoCFDI = "P01";

            //Asignacion de emisor y reseptor al a los atributos del objeto Comprobante
            comprobante.Emisor   = emisor;
            comprobante.Receptor = receptor;

            //Creacion de lista ComproboanteConcepto
            List <ComprobanteConcepto> conceptos    = new List <ComprobanteConcepto>();
            ComprobanteConcepto        compConcepto = new ComprobanteConcepto();

            compConcepto.Importe       = 10;
            compConcepto.ClaveProdServ = "92111704";
            compConcepto.Cantidad      = 1;
            compConcepto.ClaveUnidad   = "C81";
            compConcepto.Descripcion   = "Un misil para la guerra";
            compConcepto.ValorUnitario = 100;
            compConcepto.Descuento     = 1;



            conceptos.Add(compConcepto);

            comprobante.Conceptos = conceptos.ToArray();

            //Serializamos////////////////////////////////////////////////////////
            string pathXML = @"C:\Users\ivanr\Documents\github\FacturacionDigital-CFDI\FacturacionDigital-CFDI\xml\myFirstXML.xml";

            XmlSerializer xmlSerializer = new XmlSerializer(typeof(Comprobante));

            string Sxml = "";

            using (var sww = new StringWriter())
            {
                using (XmlWriter writer = XmlWriter.Create(sww))
                {
                    xmlSerializer.Serialize(writer, comprobante);
                    Sxml = sww.ToString();
                }
            }

            ///////GUARDAMOS EL STRING EN UN ARCHIVO//////////////////////////

            File.WriteAllText(pathXML, Sxml);
        }
Пример #12
0
        static private void Main(string[] args)
        {
            //obtener numero de certificado-----------------------------------------------------------------------------------
            //modifiquen por su path

            //string pathCer = path + @"CFDI 3.3_MIO\CSD01_AAA010101AAA.cer";
            // string pathKey = path + @"CFDI 3.3_MIO\CSD01_AAA010101AAA.key";
            // string clavePrivada = "12345678a";

            //OBTENEMOS EL NUMERO
            //string numeroCertificado, aa, b, c;



            //LLEMANOS LA CLASE COMPROBATE
            Comprobante oComprobante = new Comprobante();

            oComprobante.Version           = "3.3";
            oComprobante.Serie             = "H";
            oComprobante.Folio             = "1";
            oComprobante.Fecha             = DateTime.Now.ToString("yyyy-MM-ddtHH:mm:ss");
            oComprobante.Sello             = "";
            oComprobante.FormaPago         = "99";
            oComprobante.NoCertificado     = "";
            oComprobante.Certificado       = "";
            oComprobante.SubTotal          = 10m;
            oComprobante.Descuento         = 1;
            oComprobante.Moneda            = "MXN";
            oComprobante.Total             = 9;
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago        = "PUE";
            oComprobante.LugarExpedicion   = "20131";

            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            oEmisor.Rfc           = "POWE8710601DM7";
            oEmisor.Nombre        = "UNA RAZON";
            oEmisor.RegimenFiscal = "605";

            ComprobanteReceptor oReceptor = new ComprobanteReceptor();

            oReceptor.Nombre  = "PEPE SA DE CV";
            oReceptor.Rfc     = "PEPE0808013H1";
            oReceptor.UsoCFDI = "P01";

            oComprobante.Emisor   = oEmisor;
            oComprobante.Receptor = oReceptor;

            List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>();
            ComprobanteConcepto        oConcepto    = new ComprobanteConcepto();

            oConcepto.Importe       = 19.2m;
            oConcepto.ClaveProdServ = "92111704";
            oConcepto.Cantidad      = 1;
            oConcepto.ClaveUnidad   = "C81";
            oConcepto.Descripcion   = "un misil para la guerra";
            oConcepto.ValorUnitario = 10m;
            oConcepto.Descuento     = 1;

            lstConceptos.Add(oConcepto);

            oComprobante.Conceptos = lstConceptos.ToArray();


            XML(oComprobante);
        }
Пример #13
0
 private void xml2()
 {
     Models.Configuration configuracion = new Models.Configuration();
     Models.Client        clientes      = new Models.Client();
     Models.Product       productos     = new Models.Product();
     using (configuracion)
     {
         using (clientes)
         {
             using (productos)
             {
                 List <Models.Configuration> config = configuracion.getConfiguration();
                 DateTime            dt             = DateTime.Now;
                 DateTime            x            = Convert.ToDateTime(String.Format("{0:s}", dt));
                 Comprobante         oComprobante = new Comprobante();
                 ComprobanteEmisor   oEmisor      = new ComprobanteEmisor();
                 ComprobanteReceptor oReceptor    = new ComprobanteReceptor();
                 string username = "******";
                 string password = "******";
                 string CertFile = config[0].Cer;
                 string KeyFile = config[0].Key;
                 string KeyPass = config[0].Pass;
                 string Errores = "";
                 string noCertificado, aa, b, c;
                 SelloDigital.leerCER(CertFile, out aa, out b, out c, out noCertificado);
                 oComprobante.Folio             = txtFolio.Text;
                 oComprobante.Version           = "3.3";
                 oComprobante.Fecha             = x.ToString("yyyy-MM-ddTHH:mm:ss");
                 oComprobante.Serie             = "A";
                 oComprobante.NoCertificado     = noCertificado;
                 oComprobante.SubTotal          = Convert.ToDecimal(DoFormat(Convert.ToDouble(txtSubtotal.Text)));
                 oComprobante.Moneda            = "MXN";
                 oComprobante.Total             = Convert.ToDecimal(DoFormat(Convert.ToDouble(txtSubtotal.Text)));
                 oComprobante.TipoDeComprobante = "I";
                 oComprobante.FormaPago         = txtFpago.Text;
                 oComprobante.CondicionesDePago = "CONTADO";
                 oComprobante.MetodoPago        = txtMPago.Text;
                 oComprobante.LugarExpedicion   = config[0].Cp;
                 oEmisor.Rfc           = config[0].RFC;
                 oEmisor.Nombre        = config[0].Razon_social;
                 oEmisor.RegimenFiscal = config[0].Regimen;
                 List <Models.Client> cliente                             = clientes.getClientbyId(Convert.ToInt16(txtIdCliente.Text));
                 oReceptor.Rfc         = cliente[0].RFC;
                 oReceptor.UsoCFDI     = txtUsoCfdi.Text;
                 oReceptor.Nombre      = txtCliente.Text;
                 oComprobante.Emisor   = oEmisor;
                 oComprobante.Receptor = oReceptor;
                 List <Models.Product>      producto                      = null;
                 List <ComprobanteConcepto> lstConceptos                  = new List <ComprobanteConcepto>();
                 foreach (DataGridViewRow row in dtProductos.Rows)
                 {
                     ComprobanteConcepto oConcepto = new ComprobanteConcepto();
                     producto = productos.getProductById(Convert.ToInt16(row.Cells["id_producto"].Value.ToString()));
                     List <ComprobanteConceptoImpuestosTraslado> Ltraslados  = new List <ComprobanteConceptoImpuestosTraslado>();
                     ComprobanteConceptoImpuestos         oConoceptoimpuesto = new ComprobanteConceptoImpuestos();
                     ComprobanteConceptoImpuestosTraslado oConcepto_traslado = new ComprobanteConceptoImpuestosTraslado();
                     oConcepto.ClaveProdServ = producto[0].Code_sat;
                     oConcepto.Cantidad      = Convert.ToDecimal(row.Cells["cantidad"].Value.ToString());
                     oConcepto.ClaveUnidad   = producto[0].Medida_sat;
                     oConcepto.Descripcion   = row.Cells["descripcion"].Value.ToString();
                     oConcepto.ValorUnitario = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["pu"].Value.ToString())));
                     oConcepto.Importe       = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["total"].Value.ToString())));
                     //oConcepto.Descuento = Convert.ToDecimal(0);
                     oConcepto.Unidad                       = "PIEZA";
                     oConcepto.NoIdentificacion             = producto[0].Code1;
                     oConcepto_traslado.Base                = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["total"].Value.ToString())));
                     oConcepto_traslado.Impuesto            = "002";
                     oConcepto_traslado.TipoFactor          = "Tasa";
                     oConcepto_traslado.TasaOCuota          = Convert.ToDecimal("0.000000");
                     oConcepto_traslado.Importe             = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["total"].Value.ToString()))) * 0;
                     oConcepto_traslado.TasaOCuotaSpecified = true;
                     oConcepto_traslado.ImporteSpecified    = true;
                     Ltraslados.Add(oConcepto_traslado);
                     oConoceptoimpuesto.Traslados = Ltraslados.ToArray();
                     oConcepto.Impuestos          = oConoceptoimpuesto;
                     lstConceptos.Add(oConcepto);
                 }
                 oComprobante.Conceptos = lstConceptos.ToArray();
                 ComprobanteImpuestos                oImpuuestos          = new ComprobanteImpuestos();
                 List <ComprobanteImpuestos>         lImpuestos           = new List <ComprobanteImpuestos>();
                 ComprobanteImpuestosTraslado        oImpuestos_traslados = new ComprobanteImpuestosTraslado();
                 List <ComprobanteImpuestosTraslado> lImpuestos_traslados = new List <ComprobanteImpuestosTraslado>();
                 oImpuestos_traslados.Impuesto   = "002";
                 oImpuestos_traslados.TipoFactor = "Tasa";
                 oImpuestos_traslados.TasaOCuota = Convert.ToDecimal("0.000000");
                 oImpuestos_traslados.Importe    = Convert.ToDecimal("0.00");
                 lImpuestos_traslados.Add(oImpuestos_traslados);
                 oImpuuestos.TotalImpuestosRetenidos            = Convert.ToDecimal(0.00);
                 oImpuuestos.TotalImpuestosTrasladadosSpecified = true;
                 oImpuuestos.Traslados  = lImpuestos_traslados.ToArray();
                 oComprobante.Impuestos = oImpuuestos;
                 xml(oComprobante, config[0].Ruta_factura + txtFolio.Text + ".xml");
                 string CadenaOriginal                                    = "";
                 string path_cad                                          = @"XSLT\cadenaoriginal_3_3.xslt";
                 System.Xml.Xsl.XslCompiledTransform transformador        = new System.Xml.Xsl.XslCompiledTransform(true);
                 transformador.Load(path_cad);
                 using (StringWriter sw = new StringWriter())
                 {
                     using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings))
                     {
                         transformador.Transform(config[0].Ruta_factura + txtFolio.Text + ".xml", xwo);
                         CadenaOriginal = sw.ToString();
                     }
                 }
                 SelloDigital sellodigital = new SelloDigital();
                 oComprobante.Certificado = sellodigital.Certificado(CertFile);
                 oComprobante.Sello       = sellodigital.Sellar(CadenaOriginal, KeyFile, KeyPass);
                 xml(oComprobante, config[0].Ruta_factura + txtFolio.Text + ".xml");
                 timbrar();
             }
         }
     }
 }
Пример #14
0
        public bool Facturar()
        {
            Inicializar();
            if (Venta == null || partidas.Count == 0 || empresa == null || cliente == null)
            {
                Ambiente.Mensaje("Venta || partidas || empresa || Cliente == null");
                return(false);
            }

            if (cliente.Rfc == null)
            {
                Ambiente.Mensaje("PROCESO ABORTADO, RFC DEL CLIENTE NO ES VÁLIDO");
                return(false);
            }

            if (cliente.Rfc.Trim().Length == 0)
            {
                Ambiente.Mensaje("PROCESO ABORTADO, RFC DEL CLIENTE NO ES VÁLIDO");
                return(false);
            }

            SelloDigital.leerCER(empresa.RutaCer, out string a, out string b, out string c, out string NoCer);
            noCertificado = NoCer;

            //Encabezado
            comprobante.Version       = "3.3";
            comprobante.Serie         = "F";
            comprobante.Folio         = Venta.NoRef.ToString();
            comprobante.Fecha         = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            comprobante.FormaPago     = Venta.FormaPago1;
            comprobante.NoCertificado = noCertificado;
            comprobante.SubTotal      = Math.Round(Venta.SubTotal, 2);
            //comprobante.Descuento = 0;
            comprobante.Moneda            = "MXN";
            comprobante.Total             = Math.Round(Venta.Total, 2);
            comprobante.TipoDeComprobante = Venta.TipoComprobante;
            comprobante.MetodoPago        = Venta.MetodoPago;
            comprobante.LugarExpedicion   = empresa.Cp;

            //Emisor
            emisor.Rfc           = empresa.Rfc;
            emisor.Nombre        = empresa.RazonSocial;
            emisor.RegimenFiscal = empresa.RegimenFiscalId;

            //Receptor
            receptor.Nombre  = cliente.RazonSocial;
            receptor.Rfc     = cliente.Rfc;
            receptor.UsoCFDI = cliente.UsoCfdiid;

            //Asignar emisor y receptor al comprobante
            comprobante.Emisor   = emisor;
            comprobante.Receptor = receptor;

            //Agregar los conceptos
            totalIeps = 0;
            totalIva  = 0;
            /**********************************CONCEPTOS********************************/

            foreach (var p in partidas)
            {
                concepto          = new ComprobanteConcepto();
                impuestosConcepto = new List <ComprobanteConceptoImpuestosTraslado>();


                concepto.ClaveProdServ = "01010101";

                if (Venta.EsFacturaGlobal)
                {
                    concepto.ClaveUnidad = "ACT";
                }
                else
                {
                    concepto.ClaveUnidad = "H87";
                }

                //concepto.ClaveUnidad = p.ClaveUnidad;
                //concepto.ClaveProdServ = p.ClaveProdServ;
                concepto.Descripcion   = p.Descripcion;
                concepto.Cantidad      = p.Cantidad;
                concepto.ValorUnitario = p.Precio;
                concepto.Importe       = p.SubTotal;


                //Llenado del impuesto
                if (p.ImporteImpuesto1 == 0 && p.ImporteImpuesto2 == 0)
                {
                    /*EXCENTO DE IMPUESTOS (IVA EXCENTO)*/
                    ivaConcepto            = new ComprobanteConceptoImpuestosTraslado();
                    ivaConcepto.Base       = p.SubTotal;
                    ivaConcepto.Impuesto   = p.ClaveImpuesto1;
                    ivaConcepto.TipoFactor = "Exento";
                    impuestosConcepto.Add(ivaConcepto);
                }
                else if (p.ImporteImpuesto1 == 0 && p.ImporteImpuesto2 > 0)
                {
                    /*SOLO IEPS*/
                    iepsConcepto            = new ComprobanteConceptoImpuestosTraslado();
                    iepsConcepto.Base       = p.SubTotal;
                    iepsConcepto.TasaOCuota = p.Impuesto2;
                    iepsConcepto.TipoFactor = p.TasaOcuota2;
                    iepsConcepto.Impuesto   = p.ClaveImpuesto2;
                    iepsConcepto.Importe    = p.ImporteImpuesto2;
                    impuestosConcepto.Add(iepsConcepto);
                    totalIeps += p.ImporteImpuesto2;
                }
                else if (p.ImporteImpuesto1 > 0 && p.ImporteImpuesto2 == 0)
                {
                    /*SOLO IVA*/
                    ivaConcepto            = new ComprobanteConceptoImpuestosTraslado();
                    ivaConcepto.Base       = p.SubTotal;
                    ivaConcepto.TasaOCuota = p.Impuesto1;
                    ivaConcepto.TipoFactor = p.TasaOcuota1;
                    ivaConcepto.Impuesto   = p.ClaveImpuesto1;
                    ivaConcepto.Importe    = p.ImporteImpuesto1;
                    impuestosConcepto.Add(ivaConcepto);
                    totalIva += p.ImporteImpuesto1;
                }
                else if (p.ImporteImpuesto1 > 0 && p.ImporteImpuesto2 > 0)
                {
                    /*IVA + IEPS*/
                    ivaConcepto            = new ComprobanteConceptoImpuestosTraslado();
                    ivaConcepto.Base       = p.SubTotal;
                    ivaConcepto.TasaOCuota = p.Impuesto1;
                    ivaConcepto.TipoFactor = p.TasaOcuota1;
                    ivaConcepto.Impuesto   = p.ClaveImpuesto1;
                    ivaConcepto.Importe    = p.ImporteImpuesto1;
                    impuestosConcepto.Add(ivaConcepto);
                    totalIva += p.ImporteImpuesto1;

                    iepsConcepto            = new ComprobanteConceptoImpuestosTraslado();
                    iepsConcepto.Base       = p.SubTotal;
                    iepsConcepto.TasaOCuota = p.Impuesto2;
                    iepsConcepto.TipoFactor = p.TasaOcuota2;
                    iepsConcepto.Impuesto   = p.ClaveImpuesto2;
                    iepsConcepto.Importe    = p.ImporteImpuesto2;
                    impuestosConcepto.Add(iepsConcepto);
                    totalIeps += p.ImporteImpuesto2;
                }

                //Agregar los impuestos del concepto al concepto y agregar el concepto a la lista//
                concepto.Impuestos           = new ComprobanteConceptoImpuestos();
                concepto.Impuestos.Traslados = impuestosConcepto.ToArray();
                conceptos.Add(concepto);
            }

            /***************************************************************************/
            /********************Operaciones a nivel del comprobante********************/
            comprobante.Conceptos     = conceptos.ToArray();
            totalImpuestosComprobante = new ComprobanteImpuestos();
            impuestosComprobante      = new List <ComprobanteImpuestosTraslado>();
            ivaComprobante            = new ComprobanteImpuestosTraslado();
            iepsComprobante           = new ComprobanteImpuestosTraslado();

            if (totalIva > 0)
            {
                //Total IVA
                ivaComprobante.Importe    = totalIva;
                ivaComprobante.Impuesto   = "002";
                ivaComprobante.TipoFactor = "Tasa";
                ivaComprobante.TasaOCuota = 0.160000m;
                impuestosComprobante.Add(ivaComprobante);
            }

            if (totalIeps > 0)
            {
                //Total IEPS
                iepsComprobante.Importe    = totalIeps;
                iepsComprobante.Impuesto   = "003";
                iepsComprobante.TipoFactor = "Tasa";
                iepsComprobante.TasaOCuota = 0.080000m;
                impuestosComprobante.Add(iepsComprobante);
            }


            if ((totalIva + totalIeps) > 0)
            {
                //Total impuestos trasladados
                totalImpuestosComprobante.TotalImpuestosTrasladados = Math.Round(totalIva + totalIeps, 2);
                totalImpuestosComprobante.Traslados = impuestosComprobante.ToArray();
                comprobante.Impuestos = totalImpuestosComprobante;
            }


            /***************************************************************************/
            facturaActual = empresa.DirectorioComprobantes + "FACTURA " + Venta.NoRef.ToString() + "_" + Venta.CreatedBy + "_" + Ambiente.TimeText(Venta.CreatedAt) + ".XML";


            //Crear Xml
            Serializar(comprobante);
            cadenaOriginal          = GetCadenaOriginal();
            comprobante.Certificado = selloDigital.Certificado(empresa.RutaCer);
            comprobante.Sello       = selloDigital.Sellar(cadenaOriginal, empresa.RutaKey, empresa.ClavePrivada);
            Serializar(comprobante);
            return(Timbrar(facturaActual));
        }
Пример #15
0
        private void Button1_Click(object sender, EventArgs e)
        {
            //Obtener las variables
            string NoCertificado, aa, b, c;

            SelloDigital.leerCER(RutaCer, out aa, out b, out c, out NoCertificado);

            //Llenamos la clase COMPROBANTE--------------------------------------------------------
            oComprobante                   = new Comprobante();
            oComprobante.Version           = "3.3";
            oComprobante.Serie             = "H";
            oComprobante.Folio             = "1";
            oComprobante.Fecha             = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            oComprobante.FormaPago         = "99";
            oComprobante.NoCertificado     = NoCertificado;
            oComprobante.SubTotal          = 410.24m;
            oComprobante.Descuento         = 0;
            oComprobante.Moneda            = "MXN";
            oComprobante.Total             = 430.97m;
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago        = "PUE";
            oComprobante.LugarExpedicion   = "20131";
            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            // oEmisor.Rfc = "MEJJ940824C61";
            oEmisor.Rfc           = "AAA010101AAA"; //los sellos estan utilizando este rfc
            oEmisor.Nombre        = "JESUS MENDOZA JUAREZ";
            oEmisor.RegimenFiscal = "601";

            ComprobanteReceptor oReceptor = new ComprobanteReceptor();

            oReceptor.Nombre  = "DAVID RODRIGUEZ BALCAZAR";
            oReceptor.Rfc     = "ROBD8901188E1";
            oReceptor.UsoCFDI = "P01";

            //asigno emisor y receptor
            oComprobante.Emisor   = oEmisor;
            oComprobante.Receptor = oReceptor;

            List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>();
            //Conceptos
            ComprobanteConcepto oConcepto = new ComprobanteConcepto();

            oConcepto.Importe       = 45.6m;
            oConcepto.ClaveProdServ = "01010101";
            oConcepto.Cantidad      = 1;
            oConcepto.ClaveUnidad   = "C81";
            oConcepto.Descripcion   = "Un misil para la guerra";
            oConcepto.ValorUnitario = 45.6m;
            oConcepto.Descuento     = 0;

            //impuesto trasladado SOLO IVA
            List <ComprobanteConceptoImpuestosTraslado> lstImpuestosTrasladados = new List <ComprobanteConceptoImpuestosTraslado>();
            ComprobanteConceptoImpuestosTraslado        oImpuestoTrasladado     = new ComprobanteConceptoImpuestosTraslado();

            oImpuestoTrasladado.Base       = 45.6m;
            oImpuestoTrasladado.TasaOCuota = 0.160000m;
            oImpuestoTrasladado.TipoFactor = "Tasa";
            oImpuestoTrasladado.Impuesto   = "002";
            oImpuestoTrasladado.Importe    = 7.296m;
            lstImpuestosTrasladados.Add(oImpuestoTrasladado);

            oConcepto.Impuestos           = new ComprobanteConceptoImpuestos();
            oConcepto.Impuestos.Traslados = lstImpuestosTrasladados.ToArray();

            lstConceptos.Add(oConcepto);

            //Concepto 2 IVA e IEPS
            ComprobanteConcepto oConcepto2 = new ComprobanteConcepto();

            oConcepto2.Importe       = 55.98m;
            oConcepto2.ClaveProdServ = "01010101";
            oConcepto2.Cantidad      = 1;
            oConcepto2.ClaveUnidad   = "C81";
            oConcepto2.Descripcion   = "concepto iva e ieps";
            oConcepto2.ValorUnitario = 55.98m;
            oConcepto2.Descuento     = 0;

            List <ComprobanteConceptoImpuestosTraslado> lstImpuestosTrasladados2 = new List <ComprobanteConceptoImpuestosTraslado>();
            ComprobanteConceptoImpuestosTraslado        oImpuestoTrasladado2     = new ComprobanteConceptoImpuestosTraslado();

            oImpuestoTrasladado2.Base       = 55.98m;
            oImpuestoTrasladado2.TasaOCuota = 0.160000m;
            oImpuestoTrasladado2.TipoFactor = "Tasa";
            oImpuestoTrasladado2.Impuesto   = "002";
            oImpuestoTrasladado2.Importe    = 8.9568m;
            lstImpuestosTrasladados2.Add(oImpuestoTrasladado2);

            ComprobanteConceptoImpuestosTraslado oImpuestoTrasladadoIEPS = new ComprobanteConceptoImpuestosTraslado();

            oImpuestoTrasladadoIEPS.Base       = 55.98m;
            oImpuestoTrasladadoIEPS.TasaOCuota = 0.080000m; //debe corresponder con un valor del catalogo, exactamente
            oImpuestoTrasladadoIEPS.TipoFactor = "Tasa";
            oImpuestoTrasladadoIEPS.Impuesto   = "003";     //clave ieps 003
            oImpuestoTrasladadoIEPS.Importe    = 4.4784m;   //el 25% de 9 es 2.25
            lstImpuestosTrasladados2.Add(oImpuestoTrasladadoIEPS);

            oConcepto2.Impuestos           = new ComprobanteConceptoImpuestos();
            oConcepto2.Impuestos.Traslados = lstImpuestosTrasladados2.ToArray();

            lstConceptos.Add(oConcepto2);

            //concepto 3, iva exento 0----------------------------------------------------------
            ComprobanteConcepto oConcepto3 = new ComprobanteConcepto();

            oConcepto3.Importe       = 308.66m;
            oConcepto3.ClaveProdServ = "01010101";
            oConcepto3.Cantidad      = 1;
            oConcepto3.ClaveUnidad   = "C81";
            oConcepto3.Descripcion   = "concepto iva exento";
            oConcepto3.ValorUnitario = 308.66m;
            oConcepto3.Descuento     = 0;

            //impuesto trasladado iva exento
            List <ComprobanteConceptoImpuestosTraslado> lstImpuestosTrasladados3     = new List <ComprobanteConceptoImpuestosTraslado>();
            ComprobanteConceptoImpuestosTraslado        oImpuestoTrasladadoIVAExento = new ComprobanteConceptoImpuestosTraslado();

            oImpuestoTrasladadoIVAExento.Base = 308.66m;
            //  oImpuestoTrasladado.TasaOCuota = 0.160000m; exento no lleva tasa
            oImpuestoTrasladadoIVAExento.TipoFactor = "Exento";
            oImpuestoTrasladadoIVAExento.Impuesto   = "002"; //clave iva es 002
                                                             //oImpuestoTrasladado.Importe = 1.44m; exento no lleva importe
            lstImpuestosTrasladados3.Add(oImpuestoTrasladadoIVAExento);

            oConcepto3.Impuestos           = new ComprobanteConceptoImpuestos();
            oConcepto3.Impuestos.Traslados = lstImpuestosTrasladados3.ToArray();


            lstConceptos.Add(oConcepto3);

            oComprobante.Conceptos = lstConceptos.ToArray();

            //NODO IMPUESTO*************************************************************************************
            List <ComprobanteImpuestosTraslado> lstImpuestoTRANSLADADOS = new List <ComprobanteImpuestosTraslado>();
            ComprobanteImpuestos         oIMPUESTOS = new ComprobanteImpuestos();
            ComprobanteImpuestosTraslado oITIVA     = new ComprobanteImpuestosTraslado();
            ComprobanteImpuestosTraslado oITIEPS    = new ComprobanteImpuestosTraslado();

            oIMPUESTOS.TotalImpuestosTrasladados = 20.73m; //totales de impuestos trasladados

            //se agrupan los impuestos del mismo tipo, en este caso iva
            oITIVA.Importe    = 16.2528m;
            oITIVA.Impuesto   = "002";
            oITIVA.TipoFactor = "Tasa";
            oITIVA.TasaOCuota = 0.160000m;

            //ieps
            oITIEPS.Importe    = 4.4784m;
            oITIEPS.Impuesto   = "003";
            oITIEPS.TipoFactor = "Tasa";
            oITIEPS.TasaOCuota = 0.080000m;



            lstImpuestoTRANSLADADOS.Add(oITIVA);
            lstImpuestoTRANSLADADOS.Add(oITIEPS);
            oIMPUESTOS.Traslados = lstImpuestoTRANSLADADOS.ToArray();
            //agregamos impuesto a comprobante
            oComprobante.Impuestos = oIMPUESTOS;



            FacturaActual = "FACTURA_" + oComprobante.Serie + oComprobante.Folio + ".xml";

            //Crear Xml
            CreateXML(oComprobante);
            string cadenaOriginal = "";

            XslCompiledTransform transformador = new XslCompiledTransform(true);

            transformador.Load(RutaCO);

            using (StringWriter sw = new StringWriter())
                using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings))
                {
                    transformador.Transform(RutaComprobantes + FacturaActual, xwo);
                    cadenaOriginal = sw.ToString();
                }


            SelloDigital oSelloDigital = new SelloDigital();

            oComprobante.Certificado = oSelloDigital.Certificado(RutaCer);
            oComprobante.Sello       = oSelloDigital.Sellar(cadenaOriginal, RutaKey, ClavePrivada);

            CreateXML(oComprobante);

            //TIMBRE DEL XML
            WSTimbrado.RespuestaCFDi  respuestaCFDI = new WSTimbrado.RespuestaCFDi();
            WSTimbrado.TimbradoClient oTimbrado     = new WSTimbrado.TimbradoClient();

            byte[] bXML = File.ReadAllBytes(RutaComprobantes + FacturaActual);
            respuestaCFDI = oTimbrado.TimbrarTest("DGE131017IP1", "9616fb2b81e89673495f", bXML);

            if (respuestaCFDI.Documento == null)
            {
                MessageBox.Show(respuestaCFDI.Mensaje);
            }
            else
            {
                File.WriteAllBytes(RutaComprobantes + FacturaActual, respuestaCFDI.Documento);
                MessageBox.Show("Ok");

                Desearizar(FacturaActual);
                MessageBox.Show(oComprobante.TimbreFiscalDigital.UUID);
            }
        }
Пример #16
0
        static void Main(string[] args)
        {
            //Obtener numero certificado
            string pathCer      = @"F:\ProyectoFactura33\CSDAAA010101AAA\CSD01_AAA010101AAA.cer";
            string pathKey      = @"F:\ProyectoFactura33\CSDAAA010101AAA\CSD01_AAA010101AAA.key";
            string clavePrivada = "12345678a";


            //Obtenemos el numero de certificado
            string numeroCertificado, aa, b, c;

            SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado);


            //Llamamos la clase comprobante
            Comprobante oComprobante = new Comprobante();

            oComprobante.Version = "3.3";
            oComprobante.Serie   = "PF";
            oComprobante.Folio   = "026711";
            oComprobante.Fecha   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            //oComprobante.Sello = "Faltante";
            oComprobante.FormaPago     = "99";
            oComprobante.NoCertificado = numeroCertificado;
            //oComprobante.Certificado = "Faltante";
            oComprobante.SubTotal  = 336.00m;
            oComprobante.Descuento = 0;
            oComprobante.Moneda    = "MXN";
            //oComprobante.TipoCambio = 17.20m;
            oComprobante.Total             = 389.76m;
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago        = "PPD";
            oComprobante.LugarExpedicion   = "27000";
            oComprobante.CondicionesDePago = "30 DIAS DE CREDITO";


            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            oEmisor.Rfc           = "MEP900430F74";
            oEmisor.Nombre        = "MARATHON ELECTRICA DE PUEBLA S.A. DE C.V.";
            oEmisor.RegimenFiscal = "601";


            ComprobanteReceptor oReceptor = new ComprobanteReceptor();

            oReceptor.Nombre  = "JOCAR INGENIERIA EN MANTENIMIENTO S.A. DE C.V.";
            oReceptor.Rfc     = "JIM8410225I2";
            oReceptor.UsoCFDI = "G01";


            oComprobante.Emisor   = oEmisor;
            oComprobante.Receptor = oReceptor;


            List <ComprobanteConcepto> listConceptos = new List <ComprobanteConcepto>();

            ComprobanteConcepto oConcepto = new ComprobanteConcepto();

            oConcepto.ValorUnitario    = 3.36m;
            oConcepto.Unidad           = "M";
            oConcepto.NoIdentificacion = "SLYZ54 0";
            oConcepto.Importe          = 336.00m;
            oConcepto.Descripcion      = "CABLE THMW NYLON ROJO 16 AWG";
            oConcepto.ClaveProdServ    = "26121634";
            oConcepto.Cantidad         = 100m;

            listConceptos.Add(oConcepto);

            oComprobante.Conceptos = listConceptos.ToArray();

            List <ComprobanteImpuestosTraslado> listImpuestosTraslado = new List <ComprobanteImpuestosTraslado>();

            ComprobanteImpuestosTraslado oImpuestosTraslado = new ComprobanteImpuestosTraslado();

            oImpuestosTraslado.Importe = 53.76m;

            listImpuestosTraslado.Add(oImpuestosTraslado);


            //Creamos el xml selleado
            CreateXML(oComprobante);

            string cadenaOriginal = "";
            string pathxsl        = path + @"cadenaoriginal_3_3.xslt";

            System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true);
            transformador.Load(pathxsl);

            using (StringWriter sw = new StringWriter())
            {
                using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings))
                {
                    transformador.Transform(pathXML, xwo);
                    cadenaOriginal = sw.ToString();
                }
            }

            SelloDigital oSelloDigital = new SelloDigital();

            oComprobante.Certificado = oSelloDigital.Certificado(pathCer);
            oComprobante.Sello       = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada);

            CreateXML(oComprobante);

            //Timbre del XML

            ServiceReference.RespuestaCFDi respuestaCFDI = new ServiceReference.RespuestaCFDi();

            byte[] bXML = System.IO.File.ReadAllBytes(pathXML);

            ServiceReference.TimbradoClient oTimbrado = new ServiceReference.TimbradoClient();


            respuestaCFDI = oTimbrado.TimbrarTest("TEST010101ST1", "aaaaa", bXML);

            if (respuestaCFDI.Documento == null)
            {
                Console.WriteLine(respuestaCFDI.Mensaje);
            }
            else
            {
                System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento);
            }
        }