@Transactional public RvLineItem reconcileSKUItems( ReconciliationVoucher reconciliationVoucher, ReconciliationType reconciliationType, SkuItem skuItem, String remarks) { SkuGroup skuGroup = skuItem.getSkuGroup(); Sku sku = skuGroup.getSku(); Long subtractionType = reconciliationType.getId(); EnumReconciliationType subtractTypeEnum = EnumReconciliationType.getEnumReconciliationTypeById(subtractionType); InvTxnType invTxnType = null; SkuItemStatus skuItemStatus = null; switch (subtractTypeEnum) { case SubtractDamage: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_SUBTRACT_DAMAGED); skuItemStatus = EnumSkuItemStatus.Damaged.getSkuItemStatus(); break; case SubtractExpired: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_SUBTRACT_EXPIRED); skuItemStatus = EnumSkuItemStatus.Expired.getSkuItemStatus(); break; case Lost: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_LOST_PILFERAGE); skuItemStatus = EnumSkuItemStatus.Lost.getSkuItemStatus(); break; case SubtractBatchMismatch: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_SUBTRACT_BATCH_MISMATCH); skuItemStatus = EnumSkuItemStatus.BatchMismatch.getSkuItemStatus(); break; case MrpMismatch: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_MRP_MISMATCH); skuItemStatus = EnumSkuItemStatus.MrpMismatch.getSkuItemStatus(); break; case NonMoving: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_NON_MOVING); skuItemStatus = EnumSkuItemStatus.NonMoving.getSkuItemStatus(); break; case SubtractFreeVariant: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_SUBTRACT_FREE_VARIANT_RECONCILE); skuItemStatus = EnumSkuItemStatus.FreeVariant.getSkuItemStatus(); break; case SubtractIncorrectCounting: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_SUBTRACT_INCORRECT_COUNTING); skuItemStatus = EnumSkuItemStatus.IncorrectCounting.getSkuItemStatus(); break; } RvLineItem rvLineItem = reconciliationVoucherDao.getRvLineItems( reconciliationVoucher, sku, skuGroup, reconciliationType); if (rvLineItem == null) { rvLineItem = createRVLineItemWithBasicDetails(skuGroup, sku); } rvLineItem.setReconciliationType(reconciliationType); rvLineItem.setReconciliationVoucher(reconciliationVoucher); rvLineItem.setRemarks(remarks); if (rvLineItem.getReconciledQty() != null) { rvLineItem.setReconciledQty(rvLineItem.getReconciledQty() + 1L); rvLineItem.setQty(rvLineItem.getQty() + 1L); } else { rvLineItem.setReconciledQty(1L); rvLineItem.setQty(1L); } rvLineItem = (RvLineItem) getBaseDao().save(rvLineItem); adminInventoryService.inventoryCheckinCheckout( sku, skuItem, null, null, null, rvLineItem, null, invTxnType, -1L, userService.getLoggedInUser()); if (skuItemStatus != null) { skuItem.setSkuItemStatus(skuItemStatus); } skuItem = skuGroupService.saveSkuItem(skuItem); if (reconciliationType.getId().equals(EnumReconciliationType.SubtractDamage.getId())) { adminInventoryService.damageInventoryCheckin(skuItem, null); } // Check inventory health now. inventoryService.checkInventoryHealth(rvLineItem.getSku().getProductVariant()); return rvLineItem; }