Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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;
            }
        }