/// <summary> /// Guarda un lote en la base de datos. /// </summary> /// <param name="lote">El lote a guardar.</param> public void GuardarLote(LoteModelo lote) { lote.ValidarLote(); using IDbConnection conexion = new SQLiteConnection(stringConexion); var q = @"insert into Lotes (ProductoId, UnidadesCompradas, UnidadesDisponibles, Inversion, PrecioVentaUnidad, FechaCreacion) values (@ProductoId, @UnidadesCompradas, @UnidadesDisponibles, @Inversion, @PrecioVentaUnidad, strftime('%s', 'now'))"; lote.UnidadesDisponibles = lote.UnidadesCompradas; var parametros = new { ProductoId = lote.Producto.Id, UnidadesCompradas = lote.UnidadesCompradas, UnidadesDisponibles = lote.UnidadesDisponibles, Inversion = SqliteMoneda.ConvertirAInterna(lote.Inversion), PrecioVentaUnidad = SqliteMoneda.ConvertirAInterna(lote.PrecioVentaUnidad) }; conexion.Execute(q, parametros); q = "select max(Id) from Lotes"; lote.Id = conexion.ExecuteScalar <int>(q); }
/// <summary> /// Edita un lote de la base de datos. /// </summary> /// <param name="lote"> /// El lote a editar. /// </param> /// <remarks> /// Los valores lote.UnidadesDisponibles y lote.PrecioVentaUnidad /// se usan para sobreescribir las respectivas columnas en la tabla lotes /// de la base de datos, en la respectiva fila identificada por lote.Id. /// No se permite agregar mas unidades al lote, /// por lo que lote.UnidadesDisponibles debe ser menor o igual /// al valor actual almacenado en la base de datos. /// </remarks> public void EditarLote(LoteModelo lote) { lote.ValidarLote(); using IDbConnection conexion = new SQLiteConnection(stringConexion); var q = @"update lotes set UnidadesDisponibles = @UnidadesDisponibles, PrecioVentaUnidad = @PrecioVentaUnidad where Id = @Id"; var parametros = new { UnidadesDisponibles = lote.UnidadesDisponibles, PrecioVentaUnidad = SqliteMoneda.ConvertirAInterna(lote.PrecioVentaUnidad), Id = lote.Id }; conexion.Execute(q, parametros); }
/// <summary> /// Guarda una lista de ventas a la base de datos. /// </summary> /// <param name="ventas">Lista de ventas a guardar.</param> public void GuardarVentas(List <VentaModelo> ventas) { ventas.ValidarVentas(); using IDbConnection conexion = new SQLiteConnection(stringConexion); conexion.Open(); using var transaccion = conexion.BeginTransaction(); try { var q = @"insert into ventas (LoteId, Unidades, PrecioVentaUnidad, ClienteId, Fecha) values (@LoteId, @Unidades, @PrecioVentaUnidad, @ClienteId, strftime('%s', 'now'))"; foreach (var venta in ventas) { var parametros = new { LoteId = venta.Lote.Id, Unidades = venta.Unidades, PrecioVentaUnidad = SqliteMoneda.ConvertirAInterna(venta.PrecioVentaUnidad), ClienteId = venta.Cliente?.Id }; conexion.Execute(q, parametros); conexion.Execute("update Lotes set UnidadesDisponibles = UnidadesDisponibles - @UnidadesVendidas where Id = @Id", new { UnidadesVendidas = venta.Unidades, Id = venta.Lote.Id } ); } transaccion.Commit(); } catch { transaccion.Rollback(); throw; } }