Пример #1
0
        private static ResAcc<string> FeEnviarFactura(ref FacturaElectronica oFacturaE)
        {
            // Se genera el Xml inicial, con el formato que pide el Sat
            var ResXml = oFacturaE.GenerarFactura(true);
            if (ResXml.Error)
                return new ResAcc<string>(false, ResXml.Mensaje);
            string sCfdi = ResXml.Respuesta;

            // Se manda a timbrar el Xml con el proveedor Pac
            ResXml = oFacturaE.TimbrarFactura(sCfdi, !GlobalClass.Produccion);
            if (ResXml.Error)
                return new ResAcc<string>(false, ResXml.Mensaje);
            string sCfdiTimbrado = ResXml.Respuesta;

            var Res = new ResAcc<string>(true);
            Res.Respuesta = sCfdiTimbrado;
            return Res;
        }
Пример #2
0
        public static ResAcc<bool> ValidarDatosParaFactura(List<int> VentasIDs, int iClienteID)
        {
            // Se crea la instancia de la clase de Facturación Electrónica
            var oFacturaE = new FacturaElectronica();
            var oConfig = TheosProc.Config.ValoresVarios("Facturacion.");
            // Se llenan los valores de configuración y los datos del emisor
            VentasLoc.FeLlenarDatosComunes(ref oFacturaE, oConfig);

            // Se llenan los datos generales de la factura
            DateTime dAhora = DateTime.Now;

            // Se obtienen las ventas a facturar
            var oVentas = new List<VentasView>();

            foreach (int iVentaID in VentasIDs)
                oVentas.Add(Datos.GetEntity<VentasView>(q => q.VentaID == iVentaID));

            // Se llenan un dato "x" para simular el método de pago, pues no se tiene esa información todavía porque no se ha guardado la venta
            oFacturaE.MetodoDePago = "Efectivo";

            oFacturaE.Fecha = dAhora;
            oFacturaE.FormaDePago = "Una sola exhibición";
            oFacturaE.LugarDeExpedicion = string.Format("{0}, {1}", oConfig["Facturacion.Municipio"], oConfig["Facturacion.Estado"]);
            oFacturaE.TipoDeComprobante = Enumerados.TiposDeComprobante.Ingreso;
            oFacturaE.TasaDeImpuesto = GlobalClass.ConfiguracionGlobal.IVA.ToString();

            // Se llenan los datos del receptor
            var ResRec = VentasLoc.FeLlenarDatosReceptor(ref oFacturaE, iClienteID);
            if (ResRec.Error)
                return new ResAcc<bool>(false, ResRec.Mensaje);

            // Se llenan los conceptos de la factura
            oFacturaE.Conceptos = new List<Concepto>();
            List<VentasDetalleView> oVentaDetalle;
            foreach (var oVenta in oVentas)
            {
                oVentaDetalle = Datos.GetListOf<VentasDetalleView>(q => q.VentaID == oVenta.VentaID);
                foreach (var oConcepto in oVentaDetalle)
                {
                    oFacturaE.Conceptos.Add(new Concepto()
                    {
                        Identificador = oConcepto.ParteID.ToString(),
                        Cantidad = oConcepto.Cantidad,
                        Unidad = oConcepto.Medida,
                        Descripcion = oConcepto.NombreParte,
                        ValorUnitario = oConcepto.PrecioUnitario,
                        Iva = oConcepto.Iva
                    });
                }
            }

            // Se genera el Xml inicial, con el formato que pide el Sat
            var ResXml = oFacturaE.GenerarFactura(true);
            if (ResXml.Error)
                return new ResAcc<bool>(false, ResXml.Mensaje);

            return new ResAcc<bool>(true, true);
        }