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; }
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); }