@Transactional public void reconcileAddRV( User loggedOnUser, List<RvLineItem> rvLineItems, ReconciliationVoucher reconciliationVoucher) { if (reconciliationVoucher == null || reconciliationVoucher.getId() == null) { // reconciliationVoucher = new ReconciliationVoucher(); reconciliationVoucher.setCreateDate(new Date()); reconciliationVoucher.setCreatedBy(loggedOnUser); reconciliationVoucher.setReconciliationType( EnumReconciliationType.Add.asReconciliationType()); } reconciliationVoucher = (ReconciliationVoucher) reconciliationVoucherDao.save(reconciliationVoucher); logger.debug("rvLineItems@Save: " + rvLineItems.size()); for (RvLineItem rvLineItem : rvLineItems) { Sku sku = rvLineItem.getSku(); if (sku == null) { sku = skuService.getSKU(rvLineItem.getProductVariant(), reconciliationVoucher.getWarehouse()); } if (rvLineItem.getQty() != null && rvLineItem.getQty() == 0 && rvLineItem.getId() != null) { getBaseDao().delete(rvLineItem); } else if (rvLineItem.getId() == null) { Long additionType = rvLineItem.getReconciliationType().getId(); EnumReconciliationType enumReconciliationType = EnumReconciliationType.getEnumReconciliationTypeById(additionType); InvTxnType invTxnType = null; switch (enumReconciliationType) { case AddDamage: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_ADD_DAMAGED); break; case AddExpired: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_ADD_EXPIRED); break; case AddBatchMismatch: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_ADD_BATCH_MISMATCH); break; case CustomerReturn: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_CUSTOMER_RETURN); break; case PharmaReturn: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_PHARMA_RETURN); break; case AddFreeVariant: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_ADD_FREE_VARIANT_RECONCILE); break; case AddIncorrectCounting: invTxnType = inventoryService.getInventoryTxnType(EnumInvTxnType.RV_ADD_INCORRECT_COUNTING); break; } rvLineItem.setSku(sku); rvLineItem.setReconciliationVoucher(reconciliationVoucher); rvLineItem = (RvLineItem) getBaseDao().save(rvLineItem); SkuGroup skuGroup = null; if (productVariantInventoryDao.getPVIForRV(sku, rvLineItem).isEmpty()) { // Create batch and checkin inv // SkuGroup skuGroup = // adminInventoryService.createSkuGroup(rvLineItem.getBatchNumber(), // rvLineItem.getMfgDate(), rvLineItem.getExpiryDate(), rvLineItem.getCostPrice(), // rvLineItem.getMrp(), null, reconciliationVoucher, null, sku); skuGroup = adminInventoryService.createSkuGroupWithoutBarcode( rvLineItem.getBatchNumber(), rvLineItem.getMfgDate(), rvLineItem.getExpiryDate(), rvLineItem.getCostPrice(), rvLineItem.getMrp(), null, reconciliationVoucher, null, sku); adminInventoryService.createSkuItemsAndCheckinInventory( skuGroup, rvLineItem.getQty(), null, null, rvLineItem, null, invTxnType, loggedOnUser); rvLineItem.setSkuGroup(skuGroup); } rvLineItem.setReconciledQty(rvLineItem.getQty()); rvLineItem = (RvLineItem) getBaseDao().save(rvLineItem); // Add PVI Entry with -1 and set sku item status to expired if ((additionType.intValue()) == (EnumReconciliationType.AddExpired.getId().intValue())) { for (SkuItem skuItem : skuGroup.getSkuItems()) { adminInventoryService.inventoryCheckinCheckout( sku, skuItem, null, null, null, rvLineItem, null, EnumInvTxnType.RV_ADD_EXPIRED_AUTOMATIC_DELETION.asInvTxnType(), -1L, userService.getLoggedInUser()); skuItem.setSkuItemStatus(EnumSkuItemStatus.Expired.getSkuItemStatus()); skuGroupService.saveSkuItem(skuItem); } } // Check inventory health now. inventoryService.checkInventoryHealth(rvLineItem.getSku().getProductVariant()); } } }