/// <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); }
public void Procesar() { foreach (var reporte in reportes) { reporte.InversionUnidadesProducto = SqliteMoneda.ConvertirAOriginal(reporte.InversionUnidadesProducto); } }
/// <summary> /// Carga y retorna un lote de la base de datos a partir de su id. /// </summary> /// <param name="id">Id del lote.</param> /// <returns>El lote encontrado. Si no se encontro se retorna <see langword="null"/>.</returns> public LoteModelo CargarLote_PorId(int id) { using IDbConnection conexion = new SQLiteConnection(stringConexion); var q = $@"select lotes.Id, lotes.UnidadesCompradas, lotes.UnidadesDisponibles, lotes.Inversion, lotes.PrecioVentaUnidad, datetime(lotes.FechaCreacion, 'unixepoch', 'localtime') as 'FechaCreacion', p.* from Lotes join productos p on p.id = lotes.ProductoId where lotes.id = @loteId"; LoteModelo f(LoteModelo l, ProductoModelo p) { l.Producto = p; return(l); } var lote = conexion.Query <LoteModelo, ProductoModelo, LoteModelo>(q, f, new { loteId = id }).FirstOrDefault(); if (lote == null) { return(null); } lote.Inversion = SqliteMoneda.ConvertirAOriginal(lote.Inversion); lote.PrecioVentaUnidad = SqliteMoneda.ConvertirAOriginal(lote.PrecioVentaUnidad); return(lote); }
public void Procesar() { foreach (var reporte in reportes) { reporte.InversionLote = SqliteMoneda.ConvertirAOriginal(reporte.InversionLote); reporte.PrecioVentaUnidad = SqliteMoneda.ConvertirAOriginal(reporte.PrecioVentaUnidad); } }
public void Procesar() { // Convertir representacion interna de la moneda a la representacion original. foreach (var reporte in reportes) { reporte.InversionLote = SqliteMoneda.ConvertirAOriginal(reporte.InversionLote); reporte.PrecioVentaUnidad = SqliteMoneda.ConvertirAOriginal(reporte.PrecioVentaUnidad); } }
/// <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> /// Carga y retorna una venta a partir del id especificado. /// </summary> /// <param name="id">El id de la venta.</param> /// <returns>La venta si existe, <see langword="null"/> si no. </returns> public VentaModelo CargarVenta_PorId(int ventaId) { using IDbConnection conexion = new SQLiteConnection(stringConexion); var q = @"select v.Id, v.Unidades, v.PrecioVentaUnidad, v.LoteId, datetime(v.Fecha, 'unixepoch', 'localtime') as 'Fecha', l.*, p.*, c.* from ventas v join lotes l on l.Id = v.LoteId join productos p on p.Id = l.ProductoId left join clientes c on c.Id = v.ClienteId where v.id = @ventaId"; VentaModelo map(VentaModelo v, LoteModelo l, ProductoModelo p, ClienteModelo c) { l.Producto = p; v.Lote = l; v.Cliente = c; return(v); } var parametros = new { ventaId = ventaId }; var resultados = conexion.Query <VentaModelo, LoteModelo, ProductoModelo, ClienteModelo, VentaModelo>(q, map, parametros); var venta = resultados.FirstOrDefault(); if (venta == null) { return(null); } venta.PrecioVentaUnidad = SqliteMoneda.ConvertirAOriginal(venta.PrecioVentaUnidad); venta.Lote.Inversion = SqliteMoneda.ConvertirAOriginal(venta.Lote.Inversion); venta.Lote.PrecioVentaUnidad = SqliteMoneda.ConvertirAOriginal(venta.Lote.PrecioVentaUnidad); return(venta); }
/// <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; } }