|
|
@@ -616,7 +616,7 @@ open class StockTakeRecordService( |
|
|
val warehouse = ill.warehouse |
|
|
val warehouse = ill.warehouse |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
//.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
val stockTakeRecord = if (stockTakeId != null && inventoryLot?.id != null && warehouse?.id != null) { |
|
|
val stockTakeRecord = if (stockTakeId != null && inventoryLot?.id != null && warehouse?.id != null) { |
|
|
stockTakeRecordsMap[Pair(inventoryLot.id, warehouse.id)] |
|
|
stockTakeRecordsMap[Pair(inventoryLot.id, warehouse.id)] |
|
|
@@ -770,7 +770,7 @@ open class StockTakeRecordService( |
|
|
|
|
|
|
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
//.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
availableQty.compareTo(BigDecimal.ZERO) > 0 || recordKeySet.contains(Pair(lotId, whId)) |
|
|
availableQty.compareTo(BigDecimal.ZERO) > 0 || recordKeySet.contains(Pair(lotId, whId)) |
|
|
} |
|
|
} |
|
|
@@ -873,7 +873,7 @@ open class StockTakeRecordService( |
|
|
val warehouse = ill.warehouse |
|
|
val warehouse = ill.warehouse |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
//.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
InventoryLotDetailResponse( |
|
|
InventoryLotDetailResponse( |
|
|
id = ill.id ?: 0L, |
|
|
id = ill.id ?: 0L, |
|
|
@@ -972,7 +972,7 @@ open class StockTakeRecordService( |
|
|
val warehouse = ill.warehouse |
|
|
val warehouse = ill.warehouse |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
// .subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
val inventoryLotLineId = ill.id |
|
|
val inventoryLotLineId = ill.id |
|
|
val stockTakeLine = |
|
|
val stockTakeLine = |
|
|
if (effectiveStockTakeId != null && inventoryLotLineId != null) { |
|
|
if (effectiveStockTakeId != null && inventoryLotLineId != null) { |
|
|
@@ -1062,7 +1062,7 @@ open class StockTakeRecordService( |
|
|
val warehouse = ill.warehouse |
|
|
val warehouse = ill.warehouse |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
// .subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
val stockTakeRecord = if (stockTakeId != null && inventoryLot?.id != null && warehouse?.id != null) { |
|
|
val stockTakeRecord = if (stockTakeId != null && inventoryLot?.id != null && warehouse?.id != null) { |
|
|
stockTakeRecordsMap[Pair(inventoryLot.id, warehouse.id)] |
|
|
stockTakeRecordsMap[Pair(inventoryLot.id, warehouse.id)] |
|
|
@@ -1161,7 +1161,7 @@ open class StockTakeRecordService( |
|
|
// 2. 计算 availableQty |
|
|
// 2. 计算 availableQty |
|
|
val availableQty = (inventoryLotLine.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (inventoryLotLine.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(inventoryLotLine.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(inventoryLotLine.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(inventoryLotLine.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
//.subtract(inventoryLotLine.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
// 3. 新建、更新預建記錄之第一次盤點、或第二次盤點 |
|
|
// 3. 新建、更新預建記錄之第一次盤點、或第二次盤點 |
|
|
val stockTakeRecord: StockTakeRecord = if (request.stockTakeRecordId != null) { |
|
|
val stockTakeRecord: StockTakeRecord = if (request.stockTakeRecordId != null) { |
|
|
@@ -1303,12 +1303,8 @@ open class StockTakeRecordService( |
|
|
println("Found ${inventoryLotLines.size} inventory lot lines") |
|
|
println("Found ${inventoryLotLines.size} inventory lot lines") |
|
|
|
|
|
|
|
|
// 4. 使用 stockTakeId 获取已创建的记录,建立映射以排除它们 |
|
|
// 4. 使用 stockTakeId 获取已创建的记录,建立映射以排除它们 |
|
|
val existingRecordsMap = stockTakeRecordRepository.findAll() |
|
|
|
|
|
.filter { |
|
|
|
|
|
!it.deleted && |
|
|
|
|
|
it.stockTake?.id == request.stockTakeId && |
|
|
|
|
|
it.warehouse?.id in warehouseIds |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
val existingRecordsMap = stockTakeRecordRepository |
|
|
|
|
|
.findAllByStockTakeIdAndWarehouseIdInAndDeletedIsFalse(request.stockTakeId, warehouseIds) |
|
|
.associateBy { |
|
|
.associateBy { |
|
|
Pair(it.inventoryLotId ?: 0L, it.warehouse?.id ?: 0L) |
|
|
Pair(it.inventoryLotId ?: 0L, it.warehouse?.id ?: 0L) |
|
|
} |
|
|
} |
|
|
@@ -1350,7 +1346,7 @@ open class StockTakeRecordService( |
|
|
// 计算 availableQty |
|
|
// 计算 availableQty |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
// .subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
// 使用 availableQty 作为 qty,badQty 为 0 |
|
|
// 使用 availableQty 作为 qty,badQty 为 0 |
|
|
val qty = availableQty |
|
|
val qty = availableQty |
|
|
@@ -1398,12 +1394,6 @@ open class StockTakeRecordService( |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
if (successCount > 0) { |
|
|
if (successCount > 0) { |
|
|
val existingRecordsCount = stockTakeRecordRepository.findAll() |
|
|
|
|
|
.filter { |
|
|
|
|
|
!it.deleted && |
|
|
|
|
|
it.stockTake?.id == request.stockTakeId |
|
|
|
|
|
} |
|
|
|
|
|
.count() |
|
|
|
|
|
checkAndUpdateStockTakeStatus(request.stockTakeId, request.stockTakeSection) |
|
|
checkAndUpdateStockTakeStatus(request.stockTakeId, request.stockTakeSection) |
|
|
} |
|
|
} |
|
|
println("batchSaveStockTakeRecords completed: success=$successCount, errors=$errorCount") |
|
|
println("batchSaveStockTakeRecords completed: success=$successCount, errors=$errorCount") |
|
|
@@ -1585,15 +1575,11 @@ open fun batchSaveApproverStockTakeRecords( |
|
|
?: throw IllegalArgumentException("Stock take not found: ${request.stockTakeId}") |
|
|
?: throw IllegalArgumentException("Stock take not found: ${request.stockTakeId}") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val stockTakeRecords = stockTakeRecordRepository.findAll() |
|
|
|
|
|
.filter { |
|
|
|
|
|
!it.deleted && |
|
|
|
|
|
it.stockTake?.id == request.stockTakeId && |
|
|
|
|
|
it.stockTakeSection == request.stockTakeSection && |
|
|
|
|
|
// 只处理已经有 picker 盘点记录的行(第一或第二次盘点任意一个非 null 即视为已盘点) |
|
|
|
|
|
(it.pickerFirstStockTakeQty != null || it.pickerSecondStockTakeQty != null) && |
|
|
|
|
|
it.approverStockTakeQty == null // 只处理未审批的记录 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
val stockTakeRecords = stockTakeRecordRepository |
|
|
|
|
|
.findPendingApproverRecordsByStockTakeAndSection( |
|
|
|
|
|
stockTakeId = request.stockTakeId, |
|
|
|
|
|
stockTakeSection = request.stockTakeSection |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
println("Found ${stockTakeRecords.size} records to process") |
|
|
println("Found ${stockTakeRecords.size} records to process") |
|
|
|
|
|
|
|
|
@@ -1711,14 +1697,12 @@ open fun batchSaveApproverStockTakeRecordsAll( |
|
|
|
|
|
|
|
|
val roundStockTakeIds: Set<Long> = resolveRoundStockTakeIds(stockTake) |
|
|
val roundStockTakeIds: Set<Long> = resolveRoundStockTakeIds(stockTake) |
|
|
|
|
|
|
|
|
var stockTakeRecords = stockTakeRecordRepository.findAll() |
|
|
|
|
|
|
|
|
var stockTakeRecords = stockTakeRecordRepository |
|
|
|
|
|
.findAllByStockTakeIdInAndDeletedIsFalse(roundStockTakeIds) |
|
|
.filter { |
|
|
.filter { |
|
|
!it.deleted && |
|
|
|
|
|
it.stockTake?.id != null && |
|
|
|
|
|
it.stockTake!!.id!! in roundStockTakeIds && |
|
|
|
|
|
// 只处理已经有 picker 盘点记录的行(第一或第二次盘点任意一个非 null 即视为已盘点) |
|
|
|
|
|
(it.pickerFirstStockTakeQty != null || it.pickerSecondStockTakeQty != null) && |
|
|
|
|
|
it.approverStockTakeQty == null |
|
|
|
|
|
|
|
|
// 只处理已经有 picker 盘点记录的行(第一或第二次盘点任意一个非 null 即视为已盘点) |
|
|
|
|
|
(it.pickerFirstStockTakeQty != null || it.pickerSecondStockTakeQty != null) && |
|
|
|
|
|
it.approverStockTakeQty == null |
|
|
} |
|
|
} |
|
|
val sectionParts = request.stockTakeSections |
|
|
val sectionParts = request.stockTakeSections |
|
|
?.split(",") |
|
|
?.split(",") |
|
|
@@ -1855,6 +1839,111 @@ if (itemParts.isNotEmpty()) { |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
open fun batchSaveApproverStockTakeRecordsByIds( |
|
|
|
|
|
request: BatchSaveApproverStockTakeByIdsRequest |
|
|
|
|
|
): BatchSaveApproverStockTakeRecordResponse { |
|
|
|
|
|
println("batchSaveApproverStockTakeRecordsByIds called for stockTakeId: ${request.stockTakeId}, ids=${request.recordIds.size}") |
|
|
|
|
|
if (request.recordIds.isEmpty()) { |
|
|
|
|
|
return BatchSaveApproverStockTakeRecordResponse(0, 0, listOf("No record IDs provided")) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
val user = userRepository.findById(request.approverId).orElse(null) |
|
|
|
|
|
val stockTake = stockTakeRepository.findByIdAndDeletedIsFalse(request.stockTakeId) |
|
|
|
|
|
?: throw IllegalArgumentException("Stock take not found: ${request.stockTakeId}") |
|
|
|
|
|
|
|
|
|
|
|
val idSet = request.recordIds.toSet() |
|
|
|
|
|
val stockTakeRecords = stockTakeRecordRepository.findAllById(request.recordIds) |
|
|
|
|
|
.filter { |
|
|
|
|
|
!it.deleted && |
|
|
|
|
|
(it.id in idSet) && |
|
|
|
|
|
(it.pickerFirstStockTakeQty != null || it.pickerSecondStockTakeQty != null) && |
|
|
|
|
|
it.approverStockTakeQty == null |
|
|
|
|
|
} |
|
|
|
|
|
println("Found ${stockTakeRecords.size} records to process by IDs") |
|
|
|
|
|
if (stockTakeRecords.isEmpty()) { |
|
|
|
|
|
return BatchSaveApproverStockTakeRecordResponse(0, 0, listOf("No records found matching criteria")) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var successCount = 0 |
|
|
|
|
|
var errorCount = 0 |
|
|
|
|
|
val errors = mutableListOf<String>() |
|
|
|
|
|
val processedStockTakes = mutableSetOf<Pair<Long, String>>() |
|
|
|
|
|
stockTakeRecords.forEach { record -> |
|
|
|
|
|
try { |
|
|
|
|
|
val qty: BigDecimal |
|
|
|
|
|
val badQty: BigDecimal |
|
|
|
|
|
|
|
|
|
|
|
if (record.pickerSecondStockTakeQty != null && record.pickerSecondStockTakeQty!! > BigDecimal.ZERO) { |
|
|
|
|
|
qty = record.pickerSecondStockTakeQty!! |
|
|
|
|
|
badQty = record.pickerSecondBadQty ?: BigDecimal.ZERO |
|
|
|
|
|
} else { |
|
|
|
|
|
qty = record.pickerFirstStockTakeQty ?: BigDecimal.ZERO |
|
|
|
|
|
badQty = record.pickerFirstBadQty ?: BigDecimal.ZERO |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
val bookQty = record.bookQty ?: BigDecimal.ZERO |
|
|
|
|
|
val varianceQty = qty.subtract(bookQty) |
|
|
|
|
|
|
|
|
|
|
|
record.apply { |
|
|
|
|
|
this.approverId = request.approverId |
|
|
|
|
|
this.approverName = user?.name |
|
|
|
|
|
this.approverStockTakeQty = qty |
|
|
|
|
|
this.approverBadQty = badQty |
|
|
|
|
|
this.varianceQty = varianceQty |
|
|
|
|
|
this.status = "completed" |
|
|
|
|
|
this.approverTime = java.time.LocalDateTime.now() |
|
|
|
|
|
this.lastSelect = if ( |
|
|
|
|
|
record.pickerSecondStockTakeQty != null && |
|
|
|
|
|
record.pickerSecondStockTakeQty!! > BigDecimal.ZERO |
|
|
|
|
|
) 2 else 1 |
|
|
|
|
|
if (this.stockTakeEndTime == null) { |
|
|
|
|
|
this.stockTakeEndTime = java.time.LocalDateTime.now() |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
stockTakeRecordRepository.save(record) |
|
|
|
|
|
|
|
|
|
|
|
if (varianceQty != BigDecimal.ZERO) { |
|
|
|
|
|
try { |
|
|
|
|
|
applyVarianceAdjustment(record.stockTake ?: stockTake, record, qty, varianceQty, request.approverId) |
|
|
|
|
|
} catch (e: Exception) { |
|
|
|
|
|
logger.error("Failed to apply variance adjustment for record ${record.id}", e) |
|
|
|
|
|
errorCount++ |
|
|
|
|
|
errors.add("Record ${record.id}: ${e.message}") |
|
|
|
|
|
return@forEach |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
completeStockTakeLineForApproverNoVariance(record.stockTake ?: stockTake, record, qty) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
val stId = record.stockTake?.id |
|
|
|
|
|
val section = record.stockTakeSection |
|
|
|
|
|
if (stId != null && section != null) { |
|
|
|
|
|
processedStockTakes.add(Pair(stId, section)) |
|
|
|
|
|
} |
|
|
|
|
|
successCount++ |
|
|
|
|
|
} catch (e: Exception) { |
|
|
|
|
|
errorCount++ |
|
|
|
|
|
val errorMsg = "Error processing record ${record.id}: ${e.message}" |
|
|
|
|
|
errors.add(errorMsg) |
|
|
|
|
|
logger.error(errorMsg, e) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (successCount > 0) { |
|
|
|
|
|
processedStockTakes.forEach { (stId, section) -> |
|
|
|
|
|
checkAndUpdateStockTakeStatus(stId, section) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
println("batchSaveApproverStockTakeRecordsByIds completed: success=$successCount, errors=$errorCount") |
|
|
|
|
|
return BatchSaveApproverStockTakeRecordResponse( |
|
|
|
|
|
successCount = successCount, |
|
|
|
|
|
errorCount = errorCount, |
|
|
|
|
|
errors = errors |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* stockTakeRecord 上存的是 inventory_lot.id(批次),不是 inventory_lot_line.id;用倉庫 + 批次找唯一庫存行。 |
|
|
* stockTakeRecord 上存的是 inventory_lot.id(批次),不是 inventory_lot_line.id;用倉庫 + 批次找唯一庫存行。 |
|
|
*/ |
|
|
*/ |
|
|
@@ -1980,10 +2069,11 @@ private fun applyVarianceAdjustment( |
|
|
// 避免同一批多筆盤虧時每筆都用同一個 inventory.onHandQty 導致 balance 錯誤。 |
|
|
// 避免同一批多筆盤虧時每筆都用同一個 inventory.onHandQty 導致 balance 錯誤。 |
|
|
val itemIdForLedger = inventoryLot.item?.id |
|
|
val itemIdForLedger = inventoryLot.item?.id |
|
|
?: throw IllegalArgumentException("Item ID not found for stock take ledger") |
|
|
?: throw IllegalArgumentException("Item ID not found for stock take ledger") |
|
|
val latestLedger = stockLedgerRepository.findLatestByItemId(itemIdForLedger).firstOrNull() |
|
|
|
|
|
|
|
|
val latestLedger = stockLedgerRepository.findFirstByItemIdAndDeletedFalseOrderByDateDescIdDesc(itemIdForLedger) |
|
|
val previousBalance = latestLedger?.balance |
|
|
val previousBalance = latestLedger?.balance |
|
|
?: (inventory.onHandQty ?: BigDecimal.ZERO).toDouble() |
|
|
?: (inventory.onHandQty ?: BigDecimal.ZERO).toDouble() |
|
|
val newBalance = previousBalance - qtyToRemove.toDouble() |
|
|
val newBalance = previousBalance - qtyToRemove.toDouble() |
|
|
|
|
|
|
|
|
val stockLedger = StockLedger().apply { |
|
|
val stockLedger = StockLedger().apply { |
|
|
this.inventory = inventory |
|
|
this.inventory = inventory |
|
|
this.itemId = inventoryLot.item?.id |
|
|
this.itemId = inventoryLot.item?.id |
|
|
@@ -1996,7 +2086,8 @@ private fun applyVarianceAdjustment( |
|
|
this.uomId = latestLine.stockUom?.uom?.id ?: inventory.uom?.id |
|
|
this.uomId = latestLine.stockUom?.uom?.id ?: inventory.uom?.id |
|
|
this.date = LocalDate.now() |
|
|
this.date = LocalDate.now() |
|
|
} |
|
|
} |
|
|
stockLedgerRepository.saveAndFlush(stockLedger) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
stockLedgerRepository.save(stockLedger) |
|
|
|
|
|
|
|
|
val newOutQty = (latestLine.outQty ?: zero).add(qtyToRemove) |
|
|
val newOutQty = (latestLine.outQty ?: zero).add(qtyToRemove) |
|
|
val updateRequest = SaveInventoryLotLineRequest( |
|
|
val updateRequest = SaveInventoryLotLineRequest( |
|
|
@@ -2058,10 +2149,11 @@ private fun applyVarianceAdjustment( |
|
|
|
|
|
|
|
|
val itemIdForLedger = inventoryLot.item?.id |
|
|
val itemIdForLedger = inventoryLot.item?.id |
|
|
?: throw IllegalArgumentException("Item ID not found for stock take ledger (in)") |
|
|
?: throw IllegalArgumentException("Item ID not found for stock take ledger (in)") |
|
|
val latestLedger = stockLedgerRepository.findLatestByItemId(itemIdForLedger).firstOrNull() |
|
|
|
|
|
|
|
|
val latestLedger = stockLedgerRepository.findFirstByItemIdAndDeletedFalseOrderByDateDescIdDesc(itemIdForLedger) |
|
|
val previousBalance = latestLedger?.balance |
|
|
val previousBalance = latestLedger?.balance |
|
|
?: (inventory.onHandQty ?: BigDecimal.ZERO).toDouble() |
|
|
?: (inventory.onHandQty ?: BigDecimal.ZERO).toDouble() |
|
|
val newBalance = previousBalance + plusQty.toDouble() |
|
|
val newBalance = previousBalance + plusQty.toDouble() |
|
|
|
|
|
|
|
|
val stockLedger = StockLedger().apply { |
|
|
val stockLedger = StockLedger().apply { |
|
|
this.inventory = inventory |
|
|
this.inventory = inventory |
|
|
this.itemId = inventoryLot.item?.id |
|
|
this.itemId = inventoryLot.item?.id |
|
|
@@ -2074,7 +2166,8 @@ private fun applyVarianceAdjustment( |
|
|
this.uomId = latestLine.stockUom?.uom?.id ?: inventory.uom?.id |
|
|
this.uomId = latestLine.stockUom?.uom?.id ?: inventory.uom?.id |
|
|
this.date = LocalDate.now() |
|
|
this.date = LocalDate.now() |
|
|
} |
|
|
} |
|
|
stockLedgerRepository.saveAndFlush(stockLedger) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
stockLedgerRepository.save(stockLedger) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
open fun updateStockTakeRecordStatusToNotMatch(stockTakeRecordId: Long): StockTakeRecord { |
|
|
open fun updateStockTakeRecordStatusToNotMatch(stockTakeRecordId: Long): StockTakeRecord { |
|
|
@@ -2146,7 +2239,7 @@ open fun getInventoryLotDetailsByStockTakeSectionNotMatch( |
|
|
val warehouse = ill.warehouse |
|
|
val warehouse = ill.warehouse |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
// .subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
val inventoryLotLineId = ill.id |
|
|
val inventoryLotLineId = ill.id |
|
|
val stockTakeLine = |
|
|
val stockTakeLine = |
|
|
if (effectiveStockTakeId != null && inventoryLotLineId != null) { |
|
|
if (effectiveStockTakeId != null && inventoryLotLineId != null) { |
|
|
@@ -2238,7 +2331,7 @@ open fun getInventoryLotDetailsByStockTakeSectionNotMatch( |
|
|
val warehouse = ill.warehouse |
|
|
val warehouse = ill.warehouse |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
val availableQty = (ill.inQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.outQty ?: BigDecimal.ZERO) |
|
|
.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
//.subtract(ill.holdQty ?: BigDecimal.ZERO) |
|
|
|
|
|
|
|
|
val stockTakeRecord = if (stockTakeId != null && inventoryLot?.id != null && warehouse?.id != null) { |
|
|
val stockTakeRecord = if (stockTakeId != null && inventoryLot?.id != null && warehouse?.id != null) { |
|
|
stockTakeRecordsMap[Pair(inventoryLot.id, warehouse.id)] |
|
|
stockTakeRecordsMap[Pair(inventoryLot.id, warehouse.id)] |
|
|
|