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