コード例 #1
0
  @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;
  }