Exemplo n.º 1
0
        public static ResAcc Venta(Venta oVenta, List <VentaDetalle> Detalle)
        {
            bool bMod = (oVenta.VentaID > 0);

            if (bMod)
            {
                throw new Exception("No se ha programado funcionalidad para cuando la Venta ya exista.");
            }

            // Se generan datos predeterminados o globales, en caso de que apliquen
            oVenta.Fecha                 = (oVenta.Fecha != DateTime.MinValue ? oVenta.Fecha : DateTime.Now);
            oVenta.VentaEstatusID        = (oVenta.VentaEstatusID > 0 ? oVenta.VentaEstatusID : Cat.VentasEstatus.Realizada);
            oVenta.RealizoUsuarioID      = (oVenta.RealizoUsuarioID > 0 ? oVenta.RealizoUsuarioID : Theos.UsuarioID);
            oVenta.SucursalID            = (oVenta.SucursalID > 0 ? oVenta.SucursalID : Theos.SucursalID);
            oVenta.ComisionistaClienteID = (oVenta.ComisionistaClienteID > 0 ? oVenta.ComisionistaClienteID : null);
            oVenta.ClienteVehiculoID     = (oVenta.ClienteVehiculoID > 0 ? oVenta.ClienteVehiculoID : null);

            // Se obtiene el folio correspondiente

            /* string sFolio = Config.Valor("Ventas.Folio");
             * Config.EstablecerValor("Ventas.Folio", (Util.ConvertirEntero(sFolio) + 1).ToString().PadLeft(7, '0'));
             * oVenta.Folio = sFolio; */

            // Se guarda la venta
            Datos.Guardar <Venta>(oVenta);

            // Se guarda el detalle
            foreach (var ParteDetalle in Detalle)
            {
                if (ParteDetalle.VentaDetalleID > 0)
                {
                    continue;                                   // No es una venta nueva, no se ha especificado que hacer en estos casos
                }
                ParteDetalle.VentaID = oVenta.VentaID;
                Datos.Guardar <VentaDetalle>(ParteDetalle);

                // Se afecta la existencia
                // AdmonProc.AgregarExistencia(ParteDetalle.ParteID, oVenta.SucursalID, (ParteDetalle.Cantidad * -1), Cat.Tablas.Venta, oVenta.VentaID);
                // Se meten datos a kardex que se actualizarán posteriormente, al cobrar la venta
                AdmonProc.AfectarExistenciaYKardex(ParteDetalle.ParteID, oVenta.SucursalID, Cat.OperacionesKardex.Venta, null, oVenta.RealizoUsuarioID, "", "", ""
                                                   , (ParteDetalle.Cantidad * -1), 0, Cat.Tablas.Venta, oVenta.VentaID);
            }

            // Se generar datos relevantes al cliente comisionista, si hubiera
            if (oVenta.ComisionistaClienteID.Valor() > 0)
            {
                // Se calcula el importe de la comisión
                decimal mComision = UtilDatos.VentaComisionCliente(oVenta.VentaID, oVenta.ComisionistaClienteID.Valor());
                // Se genera una nota de crédito, por la comisión
                if (mComision > 0)
                {
                    VentasProc.GenerarNotaDeCredito(oVenta.ComisionistaClienteID.Valor(), mComision, "", Cat.OrigenesNotaDeCredito.Comision, oVenta.VentaID);
                }
            }

            return(new ResAcc(true));
        }
Exemplo n.º 2
0
        public static ResAcc VentaDevolucion(VentaDevolucion oDevolucion, List <VentaDevolucionDetalle> oDetalle)
        {
            // Se generan datos predeterminados o globales, en caso de que apliquen
            oDevolucion.Fecha      = (oDevolucion.Fecha != DateTime.MinValue ? oDevolucion.Fecha : DateTime.Now);
            oDevolucion.SucursalID = (oDevolucion.SucursalID > 0 ? oDevolucion.SucursalID : Theos.SucursalID);

            // Se guarda la devolución
            Datos.Guardar <VentaDevolucion>(oDevolucion);

            // Se guarda el detalle
            VentaDetalle oParteVenta;

            foreach (var ParteDetalle in oDetalle)
            {
                ParteDetalle.VentaDevolucionID = oDevolucion.VentaDevolucionID;
                Datos.Guardar <VentaDevolucionDetalle>(ParteDetalle);

                // Se quita el producto de la venta
                oParteVenta = Datos.GetEntity <VentaDetalle>(q => q.Estatus &&
                                                             q.VentaID == oDevolucion.VentaID &&
                                                             q.ParteID == ParteDetalle.ParteID &&
                                                             q.Cantidad == ParteDetalle.Cantidad &&
                                                             q.PrecioUnitario == ParteDetalle.PrecioUnitario &&
                                                             q.Iva == ParteDetalle.Iva);

                oParteVenta.Estatus = false;
                Datos.Guardar <VentaDetalle>(oParteVenta, false);

                // Se afecta la existencia
                // AdmonProc.AgregarExistencia(ParteDetalle.ParteID, GlobalClass.SucursalID, ParteDetalle.Cantidad, Cat.Tablas.VentaDevolucion, oDevolucion.VentaDevolucionID);
                var oDevV = Datos.GetEntity <VentasDevolucionesView>(c => c.VentaDevolucionID == oDevolucion.VentaDevolucionID);
                AdmonProc.AfectarExistenciaYKardex(ParteDetalle.ParteID, Theos.SucursalID, Cat.OperacionesKardex.VentaCancelada, oDevV.FolioDeVenta
                                                   , oDevV.RealizoUsuarioID, oDevV.Cliente, oDevV.ClienteID.ToString(), oDevV.Sucursal, ParteDetalle.Cantidad
                                                   , (ParteDetalle.PrecioUnitario + ParteDetalle.Iva), Cat.Tablas.VentaDevolucion, oDevolucion.VentaDevolucionID);
            }

            // Si es cancelación, se cambia el estatus de la venta
            var oVenta = Datos.GetEntity <Venta>(c => c.VentaID == oDevolucion.VentaID && c.Estatus);

            if (oDevolucion.EsCancelacion)
            {
                // Se verifica si la venta ha tenido pagos
                var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == oDevolucion.VentaID);
                oVenta.VentaEstatusID = (oVentaV.Pagado > 0 ? Cat.VentasEstatus.Cancelada : Cat.VentasEstatus.CanceladaSinPago);
                Datos.Guardar <Venta>(oVenta);
            }

            // Se verifican notas de crédito que pudieran cancelarse, por cliente comisionista
            if (oVenta.ComisionistaClienteID > 0)
            {
                // Se calcula el importe de la comisión que se debe quitar
                var          oComisionista = Datos.GetEntity <Cliente>(q => q.ClienteID == oVenta.ComisionistaClienteID && q.Estatus);
                decimal      mComision     = 0;
                PreciosParte oPrecios;
                foreach (var ParteD in oDetalle)
                {
                    oPrecios   = new PreciosParte(ParteD.ParteID);
                    mComision += (((ParteD.PrecioUnitario + ParteD.Iva) - oPrecios.ObtenerPrecio(oComisionista.ListaDePrecios)) * ParteD.Cantidad);
                }
                // Se genera una nota de crédito negativa
                if (mComision > 0)
                {
                    VentasProc.GenerarNotaDeCredito(oComisionista.ClienteID, (mComision * -1), "", Cat.OrigenesNotaDeCredito.Devolucion, oVenta.VentaID);
                }
            }

            return(new ResAcc(true));
        }