check stock lookup methods
This commit is contained in:
@@ -6,6 +6,7 @@ public interface IStockRepository
|
|||||||
{
|
{
|
||||||
// Balance
|
// Balance
|
||||||
Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId);
|
Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId);
|
||||||
|
Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId, Guid? itemBatchId, Guid? itemSerialNumberId);
|
||||||
Task<List<StockBalance>> GetBalancesByLocationAsync(Guid locationId, LocationType locationType);
|
Task<List<StockBalance>> GetBalancesByLocationAsync(Guid locationId, LocationType locationType);
|
||||||
Task<List<StockBalance>> GetBalancesAsync(Guid? locationId, LocationType? locationType, Guid? itemId, int page, int pageSize);
|
Task<List<StockBalance>> GetBalancesAsync(Guid? locationId, LocationType? locationType, Guid? itemId, int page, int pageSize);
|
||||||
Task<int> GetBalancesCountAsync(Guid? locationId, LocationType? locationType, Guid? itemId);
|
Task<int> GetBalancesCountAsync(Guid? locationId, LocationType? locationType, Guid? itemId);
|
||||||
@@ -20,4 +21,12 @@ public interface IStockRepository
|
|||||||
void UpdateMovement(StockMovement movement);
|
void UpdateMovement(StockMovement movement);
|
||||||
Task<List<StockMovement>> GetMovementsAsync(Guid? locationId, Guid? itemId, MovementType? type, DateTime? from, DateTime? to, int page, int pageSize);
|
Task<List<StockMovement>> GetMovementsAsync(Guid? locationId, Guid? itemId, MovementType? type, DateTime? from, DateTime? to, int page, int pageSize);
|
||||||
Task<int> GetMovementsCountAsync(Guid? locationId, Guid? itemId, MovementType? type, DateTime? from, DateTime? to);
|
Task<int> GetMovementsCountAsync(Guid? locationId, Guid? itemId, MovementType? type, DateTime? from, DateTime? to);
|
||||||
|
|
||||||
|
// Batches — a null batchNumber always creates a fresh expiry-only lot (no dedup possible on null).
|
||||||
|
Task<ItemBatch?> FindBatchAsync(Guid itemId, string batchNumber);
|
||||||
|
Task AddItemBatchAsync(ItemBatch batch);
|
||||||
|
|
||||||
|
// Serial numbers
|
||||||
|
Task<bool> SerialNumberExistsAsync(Guid itemId, string serialNumber);
|
||||||
|
Task AddItemSerialNumberAsync(ItemSerialNumber serial);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,14 @@ public class StockRepository(AppDBContext db) : IStockRepository
|
|||||||
public Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId) =>
|
public Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId) =>
|
||||||
db.StockBalances
|
db.StockBalances
|
||||||
.Include(b => b.Item)
|
.Include(b => b.Item)
|
||||||
.FirstOrDefaultAsync(b => b.FK_ItemId == itemId && b.LocationId == locationId);
|
.FirstOrDefaultAsync(b => b.FK_ItemId == itemId && b.LocationId == locationId
|
||||||
|
&& b.FK_ItemBatchId == null && b.FK_ItemSerialNumberId == null);
|
||||||
|
|
||||||
|
public Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId, Guid? itemBatchId, Guid? itemSerialNumberId) =>
|
||||||
|
db.StockBalances
|
||||||
|
.Include(b => b.Item)
|
||||||
|
.FirstOrDefaultAsync(b => b.FK_ItemId == itemId && b.LocationId == locationId
|
||||||
|
&& b.FK_ItemBatchId == itemBatchId && b.FK_ItemSerialNumberId == itemSerialNumberId);
|
||||||
|
|
||||||
public Task<List<StockBalance>> GetBalancesByLocationAsync(Guid locationId, LocationType locationType) =>
|
public Task<List<StockBalance>> GetBalancesByLocationAsync(Guid locationId, LocationType locationType) =>
|
||||||
db.StockBalances
|
db.StockBalances
|
||||||
@@ -90,4 +97,16 @@ public class StockRepository(AppDBContext db) : IStockRepository
|
|||||||
if (to.HasValue) query = query.Where(m => m.CreatedAt <= to.Value);
|
if (to.HasValue) query = query.Where(m => m.CreatedAt <= to.Value);
|
||||||
return query.CountAsync();
|
return query.CountAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task<ItemBatch?> FindBatchAsync(Guid itemId, string batchNumber) =>
|
||||||
|
db.ItemBatches.FirstOrDefaultAsync(b => b.FK_ItemId == itemId && b.BatchNumber == batchNumber);
|
||||||
|
|
||||||
|
public async Task AddItemBatchAsync(ItemBatch batch) =>
|
||||||
|
await db.ItemBatches.AddAsync(batch);
|
||||||
|
|
||||||
|
public Task<bool> SerialNumberExistsAsync(Guid itemId, string serialNumber) =>
|
||||||
|
db.ItemSerialNumbers.AnyAsync(s => s.FK_ItemId == itemId && s.SerialNumber == serialNumber);
|
||||||
|
|
||||||
|
public async Task AddItemSerialNumberAsync(ItemSerialNumber serial) =>
|
||||||
|
await db.ItemSerialNumbers.AddAsync(serial);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user