Ejemplo 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);
        }
Ejemplo n.º 2
0
 public void Procesar()
 {
     foreach (var reporte in reportes)
     {
         reporte.InversionUnidadesProducto = SqliteMoneda.ConvertirAOriginal(reporte.InversionUnidadesProducto);
     }
 }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
 public void Procesar()
 {
     foreach (var reporte in reportes)
     {
         reporte.InversionLote     = SqliteMoneda.ConvertirAOriginal(reporte.InversionLote);
         reporte.PrecioVentaUnidad = SqliteMoneda.ConvertirAOriginal(reporte.PrecioVentaUnidad);
     }
 }
Ejemplo n.º 5
0
 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);
     }
 }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
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;
            }
        }