using GB5Shared.DTO.Framework.Login;
using MMDAL.DTO.StockValuation;
using System.Data.Common;
namespace MMDAL.CustomCode.FifoLayerCost;
public interface IFifoLayerCostDAL
{
Task CreateCostLayerAsync(
long costLayerId, int itemId, int skuId, int storeId, int ouid,
decimal quantity, decimal unitCost,
int objectTypeId, int objectId, long stockLedgerId,
DateOnly layerDate,
LoginDTO login, DbTransaction tx, CancellationToken ct);
///
/// Returns slices consumed from open cost layers for this issue quantity.
/// isLifo=false → FIFO; isLifo=true → LIFO.
///
Task> AllocateLayersAsync(
int itemId, int skuId, int storeId, int ouid,
decimal issueQty, bool isLifo,
LoginDTO login, CancellationToken ct);
///
/// Decrements TCOSTLAYER.RemainingQuantity for a consumed slice.
/// Marks ISFULLYCONSUMED=1 when remaining drops to zero.
///
Task ConsumeLayerAsync(
long costLayerId, decimal consumedQty,
LoginDTO login, DbTransaction tx, CancellationToken ct);
///
/// Records each layer consumption in TCOSTLAYERDETAIL for audit.
///
Task InsertLayerConsumptionAsync(
long costLayerDetailId, long costLayerId, long issueStockLedgerId,
decimal consumedQuantity, decimal unitCost,
LoginDTO login, DbTransaction tx, CancellationToken ct);
Task> GetOpenCostLayersAsync(
int itemId, int skuId, int storeId, int ouid,
LoginDTO login, CancellationToken ct);
}