using Entidades; using Microsoft.EntityFrameworkCore; using System.Runtime.Intrinsics.Arm; namespace Modelo { public sealed class RepositorioLote : Repositorio { public RepositorioLote(Context context) { this.context = context; } public override List Listar() { return context.Lotes .AsNoTracking() .Include(x => x.Producto) .ToList(); } public Lote ObtenerPorId(int Tid) { Lote lot = context.Lotes.First(x => x.Id == Tid); return lot ?? new Lote(); } public void Add(Remito rem) { foreach (var detalle in rem.Lotes) { detalle.IdRemito = rem.Id; Add(detalle); } } public override void Add(Lote t) { t.Producto = (t.Producto.EsPerecedero) ? context.ProductoPercederos.First(x => x.Id == t.Producto.Id) : context.ProductoNoPercederos.First(x => x.Id == t.Producto.Id); context.Lotes.Add(t); Guardar(); } public override void Del(Lote t) { Lote lot = context.Lotes.First(x => x.Id == t.Id); if (lot == null) return; lot.Habilitado = false; } public override void Mod(Lote t) { context.Lotes.Update(t); } public bool DisminuirStock(DetalleFactura detalleFactura) { var detalle = context.DetalleFacturas.First(x => x.Id == detalleFactura.Id); bool ret = false; int cantidad = detalle.Cantidad; while (cantidad > 0) { var elementoAdisminuir = context.Lotes.Where(x => x.Habilitado == true) .First(x => x.Producto.Id == detalle.Producto.Id); cantidad -= elementoAdisminuir.Cantidad; if (cantidad > 0) { elementoAdisminuir.Cantidad = 0; elementoAdisminuir.Habilitado = false; } else if (cantidad == 0) { elementoAdisminuir.Cantidad = 0; elementoAdisminuir.Habilitado = false; ret = true; } else { elementoAdisminuir.Cantidad = -cantidad; ret = true; } context.Lotes.Update(elementoAdisminuir); } context.DetalleFacturas.Update(detalle); return ret; } } }