Example #1
0
        public static ResAcc FacturaDevolucion(VentaFacturaDevolucion oFacturaDev, List<VentaFacturaDevolucionDetalle> oDetalle)
        {
            // Se generan datos predeterminados o globales, en caso de que apliquen
            oFacturaDev.Fecha = (oFacturaDev.Fecha != DateTime.MinValue ? oFacturaDev.Fecha : DateTime.Now);
            oFacturaDev.SucursalID = (oFacturaDev.SucursalID > 0 ? oFacturaDev.SucursalID : Theos.SucursalID);

            // Aquí tal vez se podría llenar el número de Factura*

            // Se guarda la nota de crédito
            Datos.Guardar<VentaFacturaDevolucion>(oFacturaDev);

            // Se guarda el detalle
            foreach (var oDevolucion in oDetalle)
            {
                oDevolucion.VentaFacturaDevolucionID = oFacturaDev.VentaFacturaDevolucionID;
                Datos.Guardar<VentaFacturaDevolucionDetalle>(oDevolucion);

                // Aquí se debe guardar el dato de número de factura en el folio de la venta original
                // ...
            }

            return new ResAcc(true);
        }
Example #2
0
        public static ResAcc FacturaDevolucion(VentaFacturaDevolucion oFacturaDev, List <VentaFacturaDevolucionDetalle> oDetalle)
        {
            // Se generan datos predeterminados o globales, en caso de que apliquen
            oFacturaDev.Fecha      = (oFacturaDev.Fecha != DateTime.MinValue ? oFacturaDev.Fecha : DateTime.Now);
            oFacturaDev.SucursalID = (oFacturaDev.SucursalID > 0 ? oFacturaDev.SucursalID : Theos.SucursalID);

            // Aquí tal vez se podría llenar el número de Factura*


            // Se guarda la nota de crédito
            Datos.Guardar <VentaFacturaDevolucion>(oFacturaDev);

            // Se guarda el detalle
            foreach (var oDevolucion in oDetalle)
            {
                oDevolucion.VentaFacturaDevolucionID = oFacturaDev.VentaFacturaDevolucionID;
                Datos.Guardar <VentaFacturaDevolucionDetalle>(oDevolucion);

                // Aquí se debe guardar el dato de número de factura en el folio de la venta original
                // ...
            }

            return(new ResAcc(true));
        }
Example #3
0
        public static ResAcc<int> GenerarFacturaCancelacion(int iFacturaID, List<int> oIdsDevoluciones)
        {
            // Se obtiene el folio fiscal
            var oFactura = Datos.GetEntity<VentaFactura>(c => c.VentaFacturaID == iFacturaID && c.Estatus);
            string sFolioFiscal = oFactura.FolioFiscal;

            // Se generan los datos de la cancelación
            DateTime dAhora = DateTime.Now;
            var oFacturaDevolucion = new VentaFacturaDevolucion()
            {
                VentaFacturaID = iFacturaID,
                Fecha = dAhora,
                EsCancelacion = true
            };
            // Se genera el detalle de la devolución de factura, con los Ids de las devoluciones incluidas
            var oFacturaDevDet = new List<VentaFacturaDevolucionDetalle>();
            foreach (int iDevolucionID in oIdsDevoluciones)
                oFacturaDevDet.Add(new VentaFacturaDevolucionDetalle() { VentaDevolucionID = iDevolucionID });
            Guardar.FacturaDevolucion(oFacturaDevolucion, oFacturaDevDet);

            // Se manda cancelar la factura, y completar los procesos correspondientes
            var ResCanc = VentasLoc.GenerarFacturaCancelacion(sFolioFiscal, oFacturaDevolucion.VentaFacturaDevolucionID);

            /* Ya no se sale, pues aunque haya error, se deben guardar los datos, ya que la venta sí se canceló
            if (ResC.Error)
                return new ResAcc<bool>(false, ResC.Mensaje);
            */

            var Res = new ResAcc<int>(ResCanc.Exito, ResCanc.Mensaje);
            Res.Respuesta = oFacturaDevolucion.VentaFacturaDevolucionID;

            return Res;
        }
Example #4
0
        /*
        public static ResAcc<int> GenerarFacturaDevolucion(int iDevolucionID, int iUsuarioID)
        {
            // Se crea la instancia de la clase de Facturación Electrónica
            var oFacturaE = new FacturaElectronica();
            var oConfig = Config.ValoresVarios("Facturacion.");
            // Se llenan los valores de configuración y los datos del emisor
            VentasProc.FeLlenarDatosComunes(ref oFacturaE, oConfig);

            // Se llenan los datos generales de la factura
            DateTime dAhora = DateTime.Now;
            var oDev = General.GetEntity<VentasDevolucionesView>(q => q.VentaDevolucionID == iDevolucionID);

            // Se obtiene el nombre del vendedor
            var oUsuario = General.GetEntity<Usuario>(q => q.UsuarioID == iUsuarioID && q.Estatus);
            string sVendedores = oUsuario.NombrePersona;
            oFacturaE.Adicionales = new Dictionary<string, string>();
            oFacturaE.Adicionales.Add("Vendedor", sVendedores);

            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.Egreso;
            oFacturaE.TasaDeImpuesto = GlobalClass.ConfiguracionGlobal.IVA.ToString();
            oFacturaE.MetodoDePago = oDev.FormaDePago;

            // Se llenan los datos del receptor
            var oVenta = General.GetEntity<Venta>(q => q.VentaID == oDev.VentaID && q.Estatus);
            int iClienteID = oVenta.ClienteID;
            var ResRec = VentasProc.FeLlenarDatosReceptor(ref oFacturaE, iClienteID);
            if (ResRec.Error)
                return new ResAcc<int>(false, ResRec.Mensaje);

            // Se llenan los conceptos de la factura
            var oDevDetalle = General.GetListOf<VentasDevolucionesDetalleView>(q => q.VentaDevolucionID == oDev.VentaDevolucionID);
            oFacturaE.Conceptos = new List<Concepto>();
            foreach (var oDet in oDevDetalle)
            {
                oFacturaE.Conceptos.Add(new Concepto()
                {
                    Identificador = oDet.NumeroParte,
                    Cantidad = oDet.Cantidad,
                    Unidad = oDet.NombreMedida,
                    Descripcion = oDet.NombreParte,
                    ValorUnitario = oDet.PrecioUnitario,
                    Iva = oDet.Iva
                });
            }

            // Se comienza a procesar la facturación electrónica

            // Se envía la factura y se obtiene el Xml generado
            var ResXml = VentasProc.FeEnviarFactura(ref oFacturaE);
            bool bFacturada = ResXml.Exito;
            // if (ResXml.Error)
            //    return new ResAcc<int>(false, ResXml.Mensaje);

            string sCfdiTimbrado = ResXml.Respuesta;

            // Se guarda la información
            var oVentaFactura = General.GetEntity<VentasFacturasDetalleView>(q => q.VentaID == oVenta.VentaID);
            var oFolioFactura = VentasProc.GenerarFolioDeFacturaDevolucion();
            oFacturaE.Serie = oFolioFactura["Serie"];
            oFacturaE.Folio = oFolioFactura["Folio"];
            var oFacturaDevolucion = new VentaFacturaDevolucion()
            {
                VentaFacturaID = oVentaFactura.VentaFacturaID,
                Fecha = dAhora,
                FolioFiscal = (oFacturaE.Timbre == null ? "" : oFacturaE.Timbre.FolioFiscal),
                Serie = oFacturaE.Serie,
                Folio = oFacturaE.Folio,
                EsCancelacion = false,
                Procesada = bFacturada,
                FechaProcesada = (bFacturada ? ((DateTime?)dAhora) : null)
            };
            var oFacturaDevDet = new List<VentaFacturaDevolucionDetalle>();
            oFacturaDevDet.Add(new VentaFacturaDevolucionDetalle() { VentaDevolucionID = iDevolucionID });
            Guardar.FacturaDevolucion(oFacturaDevolucion, oFacturaDevDet);

            //
            oFacturaE.Adicionales.Add("FacturaOrigen", (oVentaFactura.Serie + oVentaFactura.Folio));

            // Se manda guardar la factura, en pdf y xml
            if (bFacturada)
                VentasProc.FeGuardarArchivosFacturaDevolucion(ref oFacturaE, sCfdiTimbrado, (oFacturaE.Serie + oFacturaE.Folio));

            // Se manda la nota de crédito generada, por correo
            VentasProc.EnviarFacturaDevolucionPorCorreo(oFacturaDevolucion.VentaFacturaDevolucionID);

            // Se manda imprimir la factura
            // ..

            return new ResAcc<int>(bFacturada, oFacturaDevolucion.VentaFacturaDevolucionID);
        }
        */
        public static ResAcc<int> GenerarFacturaDevolucion(List<VentasPagosDetalleView> oFormasDePago, int iVentaID, List<ProductoVenta> oDetalle, int iUsuarioID
            , bool bEsDevolucion, int iId)
        {
            // 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 obtiene el nombre del vendedor
            var oUsuario = Datos.GetEntity<Usuario>(q => q.UsuarioID == iUsuarioID && q.Estatus);
            string sVendedores = oUsuario.NombrePersona;
            oFacturaE.Adicionales = new Dictionary<string, string>();
            oFacturaE.Adicionales.Add("Vendedor", sVendedores);

            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.Egreso;
            oFacturaE.TasaDeImpuesto = GlobalClass.ConfiguracionGlobal.IVA.ToString();
            oFacturaE.MetodoDePago = VentasLoc.GenerarMetodoDePagoFactura(oFormasDePago);
            // Se agraga la cadena del método de pago, como adicional
            oFacturaE.Adicionales.Add("LeyendaDePago", VentasLoc.GenerarCadenaMetodoDePagoFactura(oFormasDePago));

            // Se llenan los datos del receptor
            // var oVenta = General.GetEntity<Venta>(q => q.VentaID == iVentaID && q.Estatus);
            var oVentaFactV = Datos.GetEntity<VentasFacturasDetalleAvanzadoView>(c => c.VentaID == iVentaID);
            int iClienteID = oVentaFactV.ClienteID.Valor();
            var ResRec = VentasLoc.FeLlenarDatosReceptor(ref oFacturaE, iClienteID);
            if (ResRec.Error)
                return new ResAcc<int>(false, ResRec.Mensaje);

            // Se llenan los conceptos de la factura
            decimal mUnitarioTotal = 0, mIvaTotal = 0;
            oFacturaE.Conceptos = new List<Concepto>();
            foreach (var oDet in oDetalle)
            {
                oFacturaE.Conceptos.Add(new Concepto()
                {
                    Identificador = oDet.NumeroDeParte,
                    Cantidad = oDet.Cantidad,
                    Unidad = oDet.UnidadDeMedida,
                    Descripcion = oDet.NombreDeParte,
                    ValorUnitario = oDet.PrecioUnitario,
                    Iva = oDet.Iva
                });

                mUnitarioTotal += oDet.PrecioUnitario;
                mIvaTotal += oDet.Iva;
            }

            // Se comienza a procesar la facturación electrónica

            // Se envía la factura y se obtiene el Xml generado
            var ResXml = VentasLoc.FeEnviarFactura(ref oFacturaE);
            bool bFacturada = ResXml.Exito;
            /* if (ResXml.Error)
                return new ResAcc<int>(false, ResXml.Mensaje);
            */
            string sCfdiTimbrado = ResXml.Respuesta;

            // Se guarda la información
            // var oVentaFactura = General.GetEntity<VentasFacturasDetalleAvanzadoView>(q => q.VentaID == iVentaID);
            var oFolioFactura = VentasLoc.GenerarFolioDeFacturaDevolucion();
            oFacturaE.Serie = oFolioFactura["Serie"];
            oFacturaE.Folio = oFolioFactura["Folio"];
            var oFacturaDevolucion = new VentaFacturaDevolucion()
            {
                VentaFacturaID = oVentaFactV.VentaFacturaID.Valor(),
                Fecha = dAhora,
                FolioFiscal = (oFacturaE.Timbre == null ? "" : oFacturaE.Timbre.FolioFiscal),
                Serie = oFacturaE.Serie,
                Folio = oFacturaE.Folio,
                EsCancelacion = false,
                Procesada = bFacturada,
                FechaProcesada = (bFacturada ? ((DateTime?)dAhora) : null),
                Subtotal = mUnitarioTotal,
                Iva = mIvaTotal
            };
            var oFacturaDevDet = new List<VentaFacturaDevolucionDetalle>();
            var oRegFacDevDet = new VentaFacturaDevolucionDetalle();
            if (bEsDevolucion)
                oRegFacDevDet.VentaDevolucionID = iId;
            else
                oRegFacDevDet.VentaGarantiaID = iId;
            oFacturaDevDet.Add(oRegFacDevDet);
            Guardar.FacturaDevolucion(oFacturaDevolucion, oFacturaDevDet);

            // Quizá sea buena opción marcar (de alguna forma) el registro de VentaFacturaDetalle como cancelada, si es que fue una cancelación de la Venta

            //
            oFacturaE.Adicionales.Add("FacturaOrigen", (oVentaFactV.Serie + oVentaFactV.Folio));

            // Se manda guardar la factura, en pdf y xml
            if (bFacturada)
                VentasLoc.FeGuardarArchivosFacturaDevolucion(ref oFacturaE, sCfdiTimbrado, (oFacturaE.Serie + oFacturaE.Folio));

            // Se manda la nota de crédito generada, por correo
            VentasLoc.EnviarFacturaDevolucionPorCorreo(oFacturaDevolucion.VentaFacturaDevolucionID);

            // Se manda imprimir la factura
            // ..

            return new ResAcc<int>(bFacturada, oFacturaDevolucion.VentaFacturaDevolucionID);
        }