| Line 81... |
Line 81... |
| 81 |
@Qualifier("fofoInventoryItemRepository")
|
81 |
@Qualifier("fofoInventoryItemRepository")
|
| 82 |
private InventoryItemRepository inventoryItemRepository;
|
82 |
private InventoryItemRepository inventoryItemRepository;
|
| 83 |
|
83 |
|
| 84 |
@Autowired
|
84 |
@Autowired
|
| 85 |
private ActivatedImeiRepository activatedImeiRepository;
|
85 |
private ActivatedImeiRepository activatedImeiRepository;
|
| 86 |
|
86 |
|
| 87 |
@Autowired
|
87 |
@Autowired
|
| 88 |
private PartnerTypeChangeService partnerTypeChangeService;
|
88 |
private PartnerTypeChangeService partnerTypeChangeService;
|
| 89 |
|
89 |
|
| 90 |
@Autowired
|
90 |
@Autowired
|
| 91 |
private PurchaseService purchaseService;
|
91 |
private PurchaseService purchaseService;
|
| Line 402... |
Line 402... |
| 402 |
public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
|
402 |
public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
|
| 403 |
LOGGER.info("Trying to process SchemeIn with purchaseId [{}] and retailerId [{}]", purchaseId, retailerId);
|
403 |
LOGGER.info("Trying to process SchemeIn with purchaseId [{}] and retailerId [{}]", purchaseId, retailerId);
|
| 404 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
|
404 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
|
| 405 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(retailerId,
|
405 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(retailerId,
|
| 406 |
purchase.getCreateTimestamp().toLocalDate());
|
406 |
purchase.getCreateTimestamp().toLocalDate());
|
| 407 |
LOGGER.info("purchase is completed = {}", (purchase.getCompleteTimestamp() != null));
|
- |
|
| 408 |
if (purchase.getCompleteTimestamp() != null) {
|
- |
|
| 409 |
List<Scheme> schemes = schemeRepository.selectActiveAll(SchemeType.IN, partnerType,
|
407 |
List<Scheme> schemes = schemeRepository.selectActiveAll(SchemeType.IN, partnerType,
|
| 410 |
purchase.getCompleteTimestamp(), false);
|
408 |
purchase.getCreateTimestamp(), false);
|
| 411 |
float totalCashback = 0;
|
409 |
float totalCashback = 0;
|
| 412 |
if (schemes.isEmpty()) {
|
410 |
if (schemes.isEmpty()) {
|
| 413 |
return;
|
411 |
return;
|
| 414 |
}
|
412 |
}
|
| 415 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
|
413 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
|
| 416 |
|
- |
|
| 417 |
Set<Integer> itemIds = inventoryItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
|
- |
|
| 418 |
LocalDateTime billingDate = purchaseService.getBillingDateOfPurchase(purchaseId);
|
- |
|
| 419 |
Set<Integer> itemIdsSet = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds).stream()
|
- |
|
| 420 |
.filter(x -> x.getEolDate() == null || x.getEolDate().isAfter(billingDate)).map(x -> x.getItemId())
|
- |
|
| 421 |
.collect(Collectors.toSet());
|
- |
|
| 422 |
// Only consider inventory items that were not returned
|
- |
|
| 423 |
inventoryItems = inventoryItems.stream().filter(x -> itemIdsSet.contains(x.getItemId()))
|
- |
|
| 424 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET_BAD))
|
- |
|
| 425 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET)).collect(Collectors.toList());
|
- |
|
| 426 |
LOGGER.info(inventoryItems);
|
- |
|
| 427 |
if (inventoryItems.size() == 0)
|
- |
|
| 428 |
return;
|
- |
|
| 429 |
Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap = this.toInventoryItemSchemesMap(schemes,
|
- |
|
| 430 |
inventoryItems);
|
- |
|
| 431 |
|
- |
|
| 432 |
if (inventoryItemSchemesMap.isEmpty()) {
|
- |
|
| 433 |
return;
|
- |
|
| 434 |
}
|
- |
|
| 435 |
Map<InventoryItem, Set<Scheme>> allInventoryItemSchemesMap = new HashMap<>();
|
- |
|
| 436 |
|
- |
|
| 437 |
for (Map.Entry<InventoryItem, Set<Scheme>> inventoryItemSchemesEntry : inventoryItemSchemesMap.entrySet()) {
|
- |
|
| 438 |
Set<Scheme> allSchemes = new HashSet<>();
|
- |
|
| 439 |
for (Scheme scheme : inventoryItemSchemesEntry.getValue()) {
|
- |
|
| 440 |
allSchemes.add(scheme);
|
- |
|
| 441 |
}
|
- |
|
| 442 |
allInventoryItemSchemesMap.put(inventoryItemSchemesEntry.getKey(), allSchemes);
|
- |
|
| 443 |
}
|
- |
|
| 444 |
|
414 |
|
| - |
|
415 |
Set<Integer> itemIds = inventoryItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
|
| - |
|
416 |
LocalDateTime billingDate = purchaseService.getBillingDateOfPurchase(purchaseId);
|
| - |
|
417 |
Set<Integer> itemIdsSet = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds).stream()
|
| - |
|
418 |
.filter(x -> x.getEolDate() == null || x.getEolDate().isAfter(billingDate)).map(x -> x.getItemId())
|
| - |
|
419 |
.collect(Collectors.toSet());
|
| - |
|
420 |
// Only consider inventory items that were not returned
|
| - |
|
421 |
inventoryItems = inventoryItems.stream().filter(x -> itemIdsSet.contains(x.getItemId()))
|
| - |
|
422 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET_BAD))
|
| - |
|
423 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET)).collect(Collectors.toList());
|
| - |
|
424 |
LOGGER.info(inventoryItems);
|
| - |
|
425 |
if (inventoryItems.size() == 0)
|
| 445 |
//
|
426 |
return;
|
| - |
|
427 |
Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap = this.toInventoryItemSchemesMap(schemes,
|
| - |
|
428 |
inventoryItems);
|
| 446 |
|
429 |
|
| 447 |
int itemsCount = 0;
|
430 |
if (inventoryItemSchemesMap.isEmpty()) {
|
| 448 |
for (Map.Entry<InventoryItem, Set<Scheme>> allInventoryItemSchemesEntry : allInventoryItemSchemesMap
|
- |
|
| 449 |
.entrySet()) {
|
431 |
return;
|
| 450 |
float inventoryItemCashback = 0;
|
- |
|
| 451 |
for (Scheme scheme : allInventoryItemSchemesEntry.getValue()) {
|
- |
|
| 452 |
InventoryItem inventoryItem = allInventoryItemSchemesEntry.getKey();
|
- |
|
| 453 |
float cashback = this.createSchemeInOut(scheme, inventoryItem);
|
- |
|
| 454 |
inventoryItemCashback += cashback;
|
- |
|
| 455 |
}
|
432 |
}
|
| 456 |
if (inventoryItemCashback > 0) {
|
- |
|
| 457 |
totalCashback += inventoryItemCashback;
|
433 |
Map<InventoryItem, Set<Scheme>> allInventoryItemSchemesMap = new HashMap<>();
|
| 458 |
itemsCount++;
|
- |
|
| 459 |
}
|
- |
|
| 460 |
}
|
- |
|
| 461 |
|
434 |
|
| - |
|
435 |
for (Map.Entry<InventoryItem, Set<Scheme>> inventoryItemSchemesEntry : inventoryItemSchemesMap.entrySet()) {
|
| - |
|
436 |
Set<Scheme> allSchemes = new HashSet<>();
|
| - |
|
437 |
for (Scheme scheme : inventoryItemSchemesEntry.getValue()) {
|
| - |
|
438 |
allSchemes.add(scheme);
|
| - |
|
439 |
}
|
| 462 |
LOGGER.info("Items count for purchase id {} is {}", purchaseId, itemsCount);
|
440 |
allInventoryItemSchemesMap.put(inventoryItemSchemesEntry.getKey(), allSchemes);
|
| - |
|
441 |
}
|
| - |
|
442 |
|
| - |
|
443 |
//
|
| - |
|
444 |
|
| 463 |
if (itemsCount > 0) {
|
445 |
int itemsCount = 0;
|
| - |
|
446 |
for (Map.Entry<InventoryItem, Set<Scheme>> allInventoryItemSchemesEntry : allInventoryItemSchemesMap
|
| - |
|
447 |
.entrySet()) {
|
| 464 |
walletService.addAmountToWallet(
|
448 |
float inventoryItemCashback = 0;
|
| 465 |
retailerId, purchaseId, WalletReferenceType.SCHEME_IN, "Added for SCHEME IN against invoice "
|
449 |
for (Scheme scheme : allInventoryItemSchemesEntry.getValue()) {
|
| 466 |
+ purchase.getPurchaseReference() + " (total " + itemsCount + " pcs)",
|
450 |
InventoryItem inventoryItem = allInventoryItemSchemesEntry.getKey();
|
| 467 |
totalCashback, purchase.getCreateTimestamp());
|
451 |
float cashback = this.createSchemeInOut(scheme, inventoryItem);
|
| 468 |
LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
|
452 |
inventoryItemCashback += cashback;
|
| - |
|
453 |
}
|
| 469 |
purchase.getPurchaseReference(), itemsCount);
|
454 |
if (inventoryItemCashback > 0) {
|
| 470 |
purchase.setCashback(purchase.getCashback() + totalCashback);
|
455 |
totalCashback += inventoryItemCashback;
|
| 471 |
purchaseRepository.persist(purchase);
|
456 |
itemsCount++;
|
| 472 |
}
|
457 |
}
|
| 473 |
}
|
458 |
}
|
| - |
|
459 |
|
| - |
|
460 |
LOGGER.info("Items count for purchase id {} is {}", purchaseId, itemsCount);
|
| - |
|
461 |
if (itemsCount > 0) {
|
| - |
|
462 |
walletService.addAmountToWallet(
|
| - |
|
463 |
retailerId, purchaseId, WalletReferenceType.SCHEME_IN, "Added for SCHEME IN against invoice "
|
| - |
|
464 |
+ purchase.getPurchaseReference() + " (total " + itemsCount + " pcs)",
|
| - |
|
465 |
totalCashback, purchase.getCreateTimestamp());
|
| - |
|
466 |
LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
|
| - |
|
467 |
purchase.getPurchaseReference(), itemsCount);
|
| - |
|
468 |
purchase.setCashback(purchase.getCashback() + totalCashback);
|
| - |
|
469 |
purchaseRepository.persist(purchase);
|
| - |
|
470 |
}
|
| 474 |
}
|
471 |
}
|
| 475 |
|
472 |
|
| 476 |
private float createSchemeInOut(Scheme scheme, InventoryItem inventoryItem) {
|
473 |
private float createSchemeInOut(Scheme scheme, InventoryItem inventoryItem) {
|
| 477 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByScheme(scheme.getId(), inventoryItem.getId());
|
474 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByScheme(scheme.getId(), inventoryItem.getId());
|
| 478 |
float amountToCredit = 0;
|
475 |
float amountToCredit = 0;
|
| Line 482... |
Line 479... |
| 482 |
amountToCredit = this.getAmount(inventoryItem, scheme);
|
479 |
amountToCredit = this.getAmount(inventoryItem, scheme);
|
| 483 |
schemeInOut.setSchemeId(scheme.getId());
|
480 |
schemeInOut.setSchemeId(scheme.getId());
|
| 484 |
schemeInOut.setInventoryItemId(inventoryItem.getId());
|
481 |
schemeInOut.setInventoryItemId(inventoryItem.getId());
|
| 485 |
schemeInOut.setAmount(amountToCredit);
|
482 |
schemeInOut.setAmount(amountToCredit);
|
| 486 |
schemeInOutRepository.persist(schemeInOut);
|
483 |
schemeInOutRepository.persist(schemeInOut);
|
| 487 |
if(scheme.getType().equals(SchemeType.ACTIVATION)) {
|
484 |
if (scheme.getType().equals(SchemeType.ACTIVATION)) {
|
| 488 |
schemeInOut.setStatus(SchemePayoutStatus.PENDING);
|
485 |
schemeInOut.setStatus(SchemePayoutStatus.PENDING);
|
| 489 |
schemeInOut.setStatusDescription("Activation pending for IMEI#" + inventoryItem.getSerialNumber());
|
486 |
schemeInOut.setStatusDescription("Activation pending for IMEI#" + inventoryItem.getSerialNumber());
|
| 490 |
return 0;
|
487 |
return 0;
|
| 491 |
} else if(scheme.getType().equals(SchemeType.INVESTMENT)) {
|
488 |
} else if (scheme.getType().equals(SchemeType.INVESTMENT)) {
|
| 492 |
schemeInOut.setStatus(SchemePayoutStatus.PENDING);
|
489 |
schemeInOut.setStatus(SchemePayoutStatus.PENDING);
|
| 493 |
schemeInOut.setStatusDescription("Subject to investment days maintained");
|
490 |
schemeInOut.setStatusDescription("Subject to investment days maintained");
|
| 494 |
return 0;
|
491 |
return 0;
|
| 495 |
} else {
|
492 |
} else {
|
| 496 |
schemeInOut.setStatus(SchemePayoutStatus.CREDITED);
|
493 |
schemeInOut.setStatus(SchemePayoutStatus.CREDITED);
|
| 497 |
if(scheme.getType().equals(SchemeType.IN)) {
|
494 |
if (scheme.getType().equals(SchemeType.IN)) {
|
| 498 |
schemeInOut.setStatusDescription("Credited for GRN of IMEI#" + inventoryItem.getSerialNumber());
|
495 |
schemeInOut.setStatusDescription("Credited for GRN of IMEI#" + inventoryItem.getSerialNumber());
|
| 499 |
}
|
496 |
}
|
| 500 |
schemeInOut.setStatusDescription("Credited for sale of IMEI#" + inventoryItem.getSerialNumber());
|
497 |
schemeInOut.setStatusDescription("Credited for sale of IMEI#" + inventoryItem.getSerialNumber());
|
| 501 |
schemeInOut.setCreditTimestamp(LocalDateTime.now());
|
498 |
schemeInOut.setCreditTimestamp(LocalDateTime.now());
|
| 502 |
}
|
499 |
}
|
| Line 574... |
Line 571... |
| 574 |
}
|
571 |
}
|
| 575 |
|
572 |
|
| 576 |
float totalCashback = 0;
|
573 |
float totalCashback = 0;
|
| 577 |
int count = 0;
|
574 |
int count = 0;
|
| 578 |
|
575 |
|
| 579 |
List<Scheme> allActiveSchemes = schemeRepository
|
576 |
List<Scheme> allActiveSchemes = schemeRepository.selectActiveAll(SchemeType.OUT, partnerType,
|
| 580 |
.selectActiveAll(SchemeType.OUT, partnerType, fofoOrder.getCreateTimestamp(), false);
|
577 |
fofoOrder.getCreateTimestamp(), false);
|
| 581 |
allActiveSchemes.addAll(schemeRepository.selectActiveAll(SchemeType.ACTIVATION, partnerType, fofoOrder.getCreateTimestamp(), false));
|
578 |
allActiveSchemes.addAll(schemeRepository.selectActiveAll(SchemeType.ACTIVATION, partnerType,
|
| - |
|
579 |
fofoOrder.getCreateTimestamp(), false));
|
| 582 |
allActiveSchemes.addAll(schemeRepository.selectActiveAll(SchemeType.INVESTMENT, partnerType, fofoOrder.getCreateTimestamp(), false));
|
580 |
allActiveSchemes.addAll(schemeRepository.selectActiveAll(SchemeType.INVESTMENT, partnerType,
|
| - |
|
581 |
fofoOrder.getCreateTimestamp(), false));
|
| 583 |
|
582 |
|
| 584 |
for (InventoryItem inventoryItem : inventoryItems) {
|
583 |
for (InventoryItem inventoryItem : inventoryItems) {
|
| 585 |
float itemCashback = 0;
|
584 |
float itemCashback = 0;
|
| 586 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(inventoryItem.getPurchaseId(), retailerId);
|
- |
|
| 587 |
Set<Integer> schemeIds = new HashSet<>(
|
585 |
Set<Integer> schemeIds = new HashSet<>(
|
| 588 |
schemeItemRepository.selectSchemeIdByItemId(inventoryItem.getItemId()));
|
586 |
schemeItemRepository.selectSchemeIdByItemId(inventoryItem.getItemId()));
|
| 589 |
if (purchase.getCompleteTimestamp() == null) {
|
- |
|
| 590 |
continue;
|
- |
|
| 591 |
}
|
- |
|
| 592 |
allActiveSchemes = allActiveSchemes.stream().filter(x -> schemeIds.contains(x.getId())).collect(Collectors.toList());
|
587 |
allActiveSchemes = allActiveSchemes.stream().filter(x -> schemeIds.contains(x.getId()))
|
| - |
|
588 |
.collect(Collectors.toList());
|
| 593 |
for (Scheme scheme : allActiveSchemes) {
|
589 |
for (Scheme scheme : allActiveSchemes) {
|
| 594 |
itemCashback += this.createSchemeInOut(scheme, inventoryItem);
|
590 |
itemCashback += this.createSchemeInOut(scheme, inventoryItem);
|
| 595 |
}
|
591 |
}
|
| 596 |
if (itemCashback > 0) {
|
592 |
if (itemCashback > 0) {
|
| 597 |
count++;
|
593 |
count++;
|
| Line 614... |
Line 610... |
| 614 |
float amountToRollback = 0;
|
610 |
float amountToRollback = 0;
|
| 615 |
List<SchemeInOut> schemes = schemeInOutRepository.selectByInventoryItemIds(inventoryItemIdSet);
|
611 |
List<SchemeInOut> schemes = schemeInOutRepository.selectByInventoryItemIds(inventoryItemIdSet);
|
| 616 |
for (SchemeInOut schemeInOut : schemes) {
|
612 |
for (SchemeInOut schemeInOut : schemes) {
|
| 617 |
if (schemeInOut.getRolledBackTimestamp() == null) {
|
613 |
if (schemeInOut.getRolledBackTimestamp() == null) {
|
| 618 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
614 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
| 619 |
if(schemeInOut.getStatus().equals(SchemePayoutStatus.CREDITED)) {
|
615 |
if (schemeInOut.getStatus().equals(SchemePayoutStatus.CREDITED)) {
|
| 620 |
amountToRollback += schemeInOut.getAmount();
|
616 |
amountToRollback += schemeInOut.getAmount();
|
| 621 |
}
|
617 |
}
|
| 622 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
618 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
| 623 |
schemeInOut.setStatusDescription(rollbackReason);
|
619 |
schemeInOut.setStatusDescription(rollbackReason);
|
| 624 |
}
|
620 |
}
|
| 625 |
}
|
621 |
}
|
| 626 |
if (amountToRollback > 0) {
|
622 |
if (amountToRollback > 0) {
|
| 627 |
int inventoryItemId = inventoryItemIds.get(0);
|
623 |
int inventoryItemId = inventoryItemIds.get(0);
|
| 628 |
InventoryItem ii = inventoryItemRepository.selectById(inventoryItemId);
|
624 |
InventoryItem ii = inventoryItemRepository.selectById(inventoryItemId);
|
| 629 |
Integer fofoId = ii.getFofoId();
|
625 |
Integer fofoId = ii.getFofoId();
|
| 630 |
//Purchase p = purchaseRepository.selectById(ii.getPurchaseId());
|
626 |
// Purchase p = purchaseRepository.selectById(ii.getPurchaseId());
|
| 631 |
// TODO//
|
627 |
// TODO//
|
| 632 |
walletService.rollbackAmountFromWallet(fofoId, amountToRollback, ii.getPurchaseId(),
|
628 |
walletService.rollbackAmountFromWallet(fofoId, amountToRollback, ii.getPurchaseId(),
|
| 633 |
WalletReferenceType.SCHEME_IN, rollbackReason, LocalDateTime.now());
|
629 |
WalletReferenceType.SCHEME_IN, rollbackReason, LocalDateTime.now());
|
| 634 |
}
|
630 |
}
|
| 635 |
}
|
631 |
}
|
| Line 670... |
Line 666... |
| 670 |
}
|
666 |
}
|
| 671 |
return schemes;
|
667 |
return schemes;
|
| 672 |
}
|
668 |
}
|
| 673 |
|
669 |
|
| 674 |
@Override
|
670 |
@Override
|
| 675 |
//This is being called to reverse schemes while processing price Drop
|
671 |
// This is being called to reverse schemes while processing price Drop
|
| 676 |
public void reverseSchemes(List<InventoryItem> inventoryItems, int priceDropId, String reversalReason)
|
672 |
public void reverseSchemes(List<InventoryItem> inventoryItems, int priceDropId, String reversalReason)
|
| 677 |
throws ProfitMandiBusinessException {
|
673 |
throws ProfitMandiBusinessException {
|
| 678 |
PriceDrop priceDrop = priceDropRepository.selectById(priceDropId);
|
674 |
PriceDrop priceDrop = priceDropRepository.selectById(priceDropId);
|
| 679 |
Map<Integer, List<InventoryItem>> purchaseInventoryListMap = inventoryItems.stream()
|
675 |
Map<Integer, List<InventoryItem>> purchaseInventoryListMap = inventoryItems.stream()
|
| 680 |
.collect(Collectors.groupingBy(InventoryItem::getPurchaseId, Collectors.toList()));
|
676 |
.collect(Collectors.groupingBy(InventoryItem::getPurchaseId, Collectors.toList()));
|
| Line 688... |
Line 684... |
| 688 |
Map<Integer, InventoryItem> inventoryItemsMap = purchaseInventoryItemList.stream()
|
684 |
Map<Integer, InventoryItem> inventoryItemsMap = purchaseInventoryItemList.stream()
|
| 689 |
.collect(Collectors.toMap(x -> x.getId(), x -> x));
|
685 |
.collect(Collectors.toMap(x -> x.getId(), x -> x));
|
| 690 |
|
686 |
|
| 691 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(inventoryItemsMap.keySet());
|
687 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(inventoryItemsMap.keySet());
|
| 692 |
LOGGER.info("Scheme InOuts , {}", schemeInOuts);
|
688 |
LOGGER.info("Scheme InOuts , {}", schemeInOuts);
|
| 693 |
if(schemeInOuts.size() == 0) {
|
689 |
if (schemeInOuts.size() == 0) {
|
| 694 |
continue;
|
690 |
continue;
|
| 695 |
}
|
691 |
}
|
| 696 |
List<Integer> schemeIds = schemeInOuts.stream().map(x -> x.getSchemeId()).collect(Collectors.toList());
|
692 |
List<Integer> schemeIds = schemeInOuts.stream().map(x -> x.getSchemeId()).collect(Collectors.toList());
|
| 697 |
Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds, 0, schemeIds.size())
|
693 |
Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds, 0, schemeIds.size())
|
| 698 |
.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
694 |
.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
| Line 704... |
Line 700... |
| 704 |
}
|
700 |
}
|
| 705 |
if (scheme.getType().equals(SchemeType.IN) && schemeInOut.getRolledBackTimestamp() == null) {
|
701 |
if (scheme.getType().equals(SchemeType.IN) && schemeInOut.getRolledBackTimestamp() == null) {
|
| 706 |
float newAmount = getAmount(ii, scheme);
|
702 |
float newAmount = getAmount(ii, scheme);
|
| 707 |
if (schemeInOut.getAmount() - newAmount >= 0.01f) {
|
703 |
if (schemeInOut.getAmount() - newAmount >= 0.01f) {
|
| 708 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
704 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
| 709 |
|
705 |
|
| 710 |
SchemeInOut sioNew = new SchemeInOut();
|
706 |
SchemeInOut sioNew = new SchemeInOut();
|
| 711 |
sioNew.setAmount(newAmount);
|
707 |
sioNew.setAmount(newAmount);
|
| 712 |
sioNew.setStatus(schemeInOut.getStatus());
|
708 |
sioNew.setStatus(schemeInOut.getStatus());
|
| 713 |
sioNew.setStatusDescription(schemeInOut.getStatusDescription());
|
709 |
sioNew.setStatusDescription(schemeInOut.getStatusDescription());
|
| 714 |
sioNew.setInventoryItemId(schemeInOut.getInventoryItemId());
|
710 |
sioNew.setInventoryItemId(schemeInOut.getInventoryItemId());
|
| 715 |
sioNew.setSchemeId(schemeInOut.getSchemeId());
|
711 |
sioNew.setSchemeId(schemeInOut.getSchemeId());
|
| 716 |
schemeInOutRepository.persist(sioNew);
|
712 |
schemeInOutRepository.persist(sioNew);
|
| 717 |
|
713 |
|
| 718 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
714 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
| 719 |
schemeInOut.setStatusDescription("Pricedrop processed, new entries added");
|
715 |
schemeInOut.setStatusDescription("Pricedrop processed, new entries added");
|
| 720 |
//IF not credited then dont consider any credit/debit for that sio entry
|
716 |
// IF not credited then dont consider any credit/debit for that sio entry
|
| 721 |
if(schemeInOut.getCreditTimestamp()!=null) {
|
717 |
if (schemeInOut.getCreditTimestamp() != null) {
|
| 722 |
amountToCredit += sioNew.getAmount();
|
718 |
amountToCredit += sioNew.getAmount();
|
| 723 |
amountToDebit += schemeInOut.getAmount();
|
719 |
amountToDebit += schemeInOut.getAmount();
|
| 724 |
}
|
720 |
}
|
| 725 |
}
|
721 |
}
|
| 726 |
|
722 |
|
| Line 739... |
Line 735... |
| 739 |
}
|
735 |
}
|
| 740 |
}
|
736 |
}
|
| 741 |
}
|
737 |
}
|
| 742 |
|
738 |
|
| 743 |
@Override
|
739 |
@Override
|
| 744 |
//Always being called from cancel order means no SCHEME IN is considered
|
740 |
// Always being called from cancel order means no SCHEME IN is considered
|
| 745 |
public void reverseSchemes(List<InventoryItem> inventoryItems, int reversalReference, String reversalReason,
|
741 |
public void reverseSchemes(List<InventoryItem> inventoryItems, int reversalReference, String reversalReason,
|
| 746 |
SchemeType schemeType) throws ProfitMandiBusinessException {
|
742 |
SchemeType schemeType) throws ProfitMandiBusinessException {
|
| 747 |
Map<Integer, InventoryItem> inventoryItemsMap = inventoryItems.stream()
|
743 |
Map<Integer, InventoryItem> inventoryItemsMap = inventoryItems.stream()
|
| 748 |
.collect(Collectors.toMap(x -> x.getId(), x -> x));
|
744 |
.collect(Collectors.toMap(x -> x.getId(), x -> x));
|
| 749 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(inventoryItemsMap.keySet());
|
745 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(inventoryItemsMap.keySet());
|
| Line 754... |
Line 750... |
| 754 |
for (SchemeInOut schemeInOut : schemeInOuts) {
|
750 |
for (SchemeInOut schemeInOut : schemeInOuts) {
|
| 755 |
Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
|
751 |
Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
|
| 756 |
if (scheme.getType().equals(schemeType)) {
|
752 |
if (scheme.getType().equals(schemeType)) {
|
| 757 |
if (schemeInOut.getRolledBackTimestamp() == null) {
|
753 |
if (schemeInOut.getRolledBackTimestamp() == null) {
|
| 758 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
754 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
| 759 |
if(schemeInOut.getStatus().equals(SchemePayoutStatus.CREDITED)) {
|
755 |
if (schemeInOut.getStatus().equals(SchemePayoutStatus.CREDITED)) {
|
| 760 |
amountToRollback += schemeInOut.getAmount();
|
756 |
amountToRollback += schemeInOut.getAmount();
|
| 761 |
}
|
757 |
}
|
| 762 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
758 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
| 763 |
schemeInOut.setStatusDescription(reversalReason);
|
759 |
schemeInOut.setStatusDescription(reversalReason);
|
| 764 |
}
|
760 |
}
|
| 765 |
}
|
761 |
}
|
| 766 |
}
|
762 |
}
|
| 767 |
int fofoId = inventoryItems.get(0).getFofoId();
|
763 |
int fofoId = inventoryItems.get(0).getFofoId();
|
| 768 |
WalletReferenceType walletReferenceType = schemeType.equals(SchemeType.OUT) ? WalletReferenceType.SCHEME_OUT
|
764 |
WalletReferenceType walletReferenceType = schemeType.equals(SchemeType.OUT) ? WalletReferenceType.SCHEME_OUT
|
| 769 |
: schemeType.equals(SchemeType.INVESTMENT) ? WalletReferenceType.INVESTMENT_PAYOUT : WalletReferenceType.ACTIVATION_SCHEME;
|
765 |
: schemeType.equals(SchemeType.INVESTMENT) ? WalletReferenceType.INVESTMENT_PAYOUT
|
| - |
|
766 |
: WalletReferenceType.ACTIVATION_SCHEME;
|
| 770 |
if (amountToRollback > 0) {
|
767 |
if (amountToRollback > 0) {
|
| 771 |
// TODO//
|
768 |
// TODO//
|
| 772 |
walletService.rollbackAmountFromWallet(fofoId, amountToRollback, reversalReference, walletReferenceType,
|
769 |
walletService.rollbackAmountFromWallet(fofoId, amountToRollback, reversalReference, walletReferenceType,
|
| 773 |
reversalReason, LocalDateTime.now());
|
770 |
reversalReason, LocalDateTime.now());
|
| 774 |
}
|
771 |
}
|
| Line 826... |
Line 823... |
| 826 |
*
|
823 |
*
|
| 827 |
* }
|
824 |
* }
|
| 828 |
*/
|
825 |
*/
|
| 829 |
|
826 |
|
| 830 |
@Override
|
827 |
@Override
|
| 831 |
public List<Scheme> selectSchemeByPartnerType(PartnerType partnerType, LocalDate onDate, int itemId, boolean isAdmin, int offset,
|
828 |
public List<Scheme> selectSchemeByPartnerType(PartnerType partnerType, LocalDate onDate, int itemId,
|
| 832 |
int limit) throws ProfitMandiBusinessException {
|
829 |
boolean isAdmin, int offset, int limit) throws ProfitMandiBusinessException {
|
| 833 |
Session session = sessionFactory.getCurrentSession();
|
830 |
Session session = sessionFactory.getCurrentSession();
|
| 834 |
CriteriaBuilder cb = session.getCriteriaBuilder();
|
831 |
CriteriaBuilder cb = session.getCriteriaBuilder();
|
| 835 |
CriteriaQuery<Scheme> query = cb.createQuery(Scheme.class);
|
832 |
CriteriaQuery<Scheme> query = cb.createQuery(Scheme.class);
|
| 836 |
Root<Scheme> scheme = query.from(Scheme.class);
|
833 |
Root<Scheme> scheme = query.from(Scheme.class);
|
| 837 |
List<PartnerType> pt = new ArrayList<>();
|
834 |
List<PartnerType> pt = new ArrayList<>();
|
| Line 842... |
Line 839... |
| 842 |
cb.desc(cb.isNull(scheme.get("expireTimestamp")));
|
839 |
cb.desc(cb.isNull(scheme.get("expireTimestamp")));
|
| 843 |
|
840 |
|
| 844 |
Predicate p3 = null;
|
841 |
Predicate p3 = null;
|
| 845 |
Predicate finalPredicate = null;
|
842 |
Predicate finalPredicate = null;
|
| 846 |
if (itemId != 0) {
|
843 |
if (itemId != 0) {
|
| 847 |
|
844 |
|
| 848 |
List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(itemId);
|
845 |
List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(itemId);
|
| 849 |
LOGGER.info("schemeId" + schemeIds);
|
846 |
LOGGER.info("schemeId" + schemeIds);
|
| 850 |
if(schemeIds.isEmpty()) {
|
847 |
if (schemeIds.isEmpty()) {
|
| 851 |
return new ArrayList<>();
|
848 |
return new ArrayList<>();
|
| 852 |
}
|
849 |
}
|
| 853 |
p3 = cb.in(scheme.get("id")).value(schemeIds);
|
850 |
p3 = cb.in(scheme.get("id")).value(schemeIds);
|
| 854 |
if (!isAdmin) {
|
851 |
if (!isAdmin) {
|
| 855 |
|
852 |
|
| Line 912... |
Line 909... |
| 912 |
}
|
909 |
}
|
| 913 |
|
910 |
|
| 914 |
return session.createQuery(query).getSingleResult();
|
911 |
return session.createQuery(query).getSingleResult();
|
| 915 |
|
912 |
|
| 916 |
}
|
913 |
}
|
| 917 |
|
914 |
|
| 918 |
@Override
|
915 |
@Override
|
| 919 |
public void processActivation() throws ProfitMandiBusinessException {
|
916 |
public void processActivation() throws ProfitMandiBusinessException {
|
| 920 |
List<SchemeInOut> pendingPayouts = schemeInOutRepository.selectAllPending();
|
917 |
List<SchemeInOut> pendingPayouts = schemeInOutRepository.selectAllPending();
|
| 921 |
List<Integer> schemeIds = new ArrayList<>();
|
918 |
List<Integer> schemeIds = new ArrayList<>();
|
| 922 |
Set<Integer> inventoryIds = new HashSet<>();
|
919 |
Set<Integer> inventoryIds = new HashSet<>();
|
| 923 |
for (SchemeInOut pendingPayout: pendingPayouts) {
|
920 |
for (SchemeInOut pendingPayout : pendingPayouts) {
|
| 924 |
schemeIds.add(pendingPayout.getSchemeId());
|
921 |
schemeIds.add(pendingPayout.getSchemeId());
|
| 925 |
}
|
922 |
}
|
| 926 |
Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds, 0, 0).stream()
|
923 |
Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds, 0, 0).stream()
|
| 927 |
.filter(x->x.getType().equals(SchemeType.ACTIVATION)).collect(Collectors.toMap(x->x.getId(), x->x));
|
924 |
.filter(x -> x.getType().equals(SchemeType.ACTIVATION))
|
| - |
|
925 |
.collect(Collectors.toMap(x -> x.getId(), x -> x));
|
| 928 |
pendingPayouts = pendingPayouts.stream().filter(x->schemesMap.get(x.getSchemeId())!=null).collect(Collectors.toList());
|
926 |
pendingPayouts = pendingPayouts.stream().filter(x -> schemesMap.get(x.getSchemeId()) != null)
|
| - |
|
927 |
.collect(Collectors.toList());
|
| 929 |
|
928 |
|
| 930 |
for (SchemeInOut pendingPayout: pendingPayouts) {
|
929 |
for (SchemeInOut pendingPayout : pendingPayouts) {
|
| 931 |
inventoryIds.add(pendingPayout.getInventoryItemId());
|
930 |
inventoryIds.add(pendingPayout.getInventoryItemId());
|
| 932 |
}
|
931 |
}
|
| 933 |
Map<Integer, InventoryItem> inventoryItemMap = inventoryItemRepository.selectByIds(inventoryIds).stream().collect(Collectors.toMap(x->x.getId(), x->x));
|
932 |
Map<Integer, InventoryItem> inventoryItemMap = inventoryItemRepository.selectByIds(inventoryIds).stream()
|
| - |
|
933 |
.collect(Collectors.toMap(x -> x.getId(), x -> x));
|
| 934 |
Map<String, InventoryItem> serialNumberMap = inventoryItemMap.values().stream(). collect(Collectors.toMap(x->x.getSerialNumber(), x->x));
|
934 |
Map<String, InventoryItem> serialNumberMap = inventoryItemMap.values().stream()
|
| 935 |
|
- |
|
| - |
|
935 |
.collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x));
|
| 936 |
|
936 |
|
| - |
|
937 |
List<ActivatedImei> activatedImeis = activatedImeiRepository
|
| 937 |
List<ActivatedImei> activatedImeis = activatedImeiRepository.selectBySerialNumbers(new ArrayList<>(serialNumberMap.keySet()));
|
938 |
.selectBySerialNumbers(new ArrayList<>(serialNumberMap.keySet()));
|
| 938 |
|
939 |
|
| 939 |
Map<String, ActivatedImei> activatedImeiMap = activatedImeis.stream().collect(Collectors.toMap(x->x.getSerialNumber(), x->x));
|
940 |
Map<String, ActivatedImei> activatedImeiMap = activatedImeis.stream()
|
| - |
|
941 |
.collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x));
|
| 940 |
for(SchemeInOut pendingPayout : pendingPayouts) {
|
942 |
for (SchemeInOut pendingPayout : pendingPayouts) {
|
| 941 |
InventoryItem ii = inventoryItemMap.get(pendingPayout.getInventoryItemId());
|
943 |
InventoryItem ii = inventoryItemMap.get(pendingPayout.getInventoryItemId());
|
| 942 |
String serialNumber = ii.getSerialNumber();
|
944 |
String serialNumber = ii.getSerialNumber();
|
| 943 |
ActivatedImei activatedImei = activatedImeiMap.get(serialNumber);
|
945 |
ActivatedImei activatedImei = activatedImeiMap.get(serialNumber);
|
| 944 |
if(activatedImei == null) {
|
946 |
if (activatedImei == null) {
|
| 945 |
continue;
|
947 |
continue;
|
| 946 |
}
|
948 |
}
|
| 947 |
Scheme scheme = schemesMap.get(pendingPayout.getSchemeId());
|
949 |
Scheme scheme = schemesMap.get(pendingPayout.getSchemeId());
|
| 948 |
if(activatedImei.getActivationTimestamp().isBefore(scheme.getEndDateTime())
|
950 |
if (activatedImei.getActivationTimestamp().isBefore(scheme.getEndDateTime())
|
| 949 |
&& activatedImei.getActivationTimestamp().isAfter(scheme.getStartDateTime())) {
|
951 |
&& activatedImei.getActivationTimestamp().isAfter(scheme.getStartDateTime())) {
|
| 950 |
int fofoId = ii.getFofoId();
|
952 |
int fofoId = ii.getFofoId();
|
| 951 |
//Get latest order Id
|
953 |
// Get latest order Id
|
| 952 |
int orderId = scanRecordRepository.selectByInventoryItemId(ii.getId()).stream().filter(x->x.getOrderId() > 0).
|
954 |
int orderId = scanRecordRepository.selectByInventoryItemId(ii.getId()).stream()
|
| - |
|
955 |
.filter(x -> x.getOrderId() > 0)
|
| 953 |
sorted(Comparator.comparing(ScanRecord::getCreateTimestamp).reversed()).findFirst().get().getOrderId();
|
956 |
.sorted(Comparator.comparing(ScanRecord::getCreateTimestamp).reversed()).findFirst().get()
|
| - |
|
957 |
.getOrderId();
|
| 954 |
FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(orderId);
|
958 |
FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(orderId);
|
| 955 |
walletService.addAmountToWallet(fofoId, orderId, WalletReferenceType.ACTIVATION_SCHEME, "Activation margin for Imei#" + serialNumber,
|
959 |
walletService.addAmountToWallet(fofoId, orderId, WalletReferenceType.ACTIVATION_SCHEME,
|
| - |
|
960 |
"Activation margin for Imei#" + serialNumber, pendingPayout.getAmount(),
|
| 956 |
pendingPayout.getAmount(), fofoOrder.getCreateTimestamp());
|
961 |
fofoOrder.getCreateTimestamp());
|
| 957 |
pendingPayout.setCreditTimestamp(LocalDateTime.now());
|
962 |
pendingPayout.setCreditTimestamp(LocalDateTime.now());
|
| 958 |
pendingPayout.setStatus(SchemePayoutStatus.CREDITED);
|
963 |
pendingPayout.setStatus(SchemePayoutStatus.CREDITED);
|
| 959 |
pendingPayout.setStatusDescription("Activation margin credited");
|
964 |
pendingPayout.setStatusDescription("Activation margin credited");
|
| 960 |
} else {
|
965 |
} else {
|
| 961 |
pendingPayout.setStatus(SchemePayoutStatus.REJECTED);
|
966 |
pendingPayout.setStatus(SchemePayoutStatus.REJECTED);
|
| 962 |
pendingPayout.setRolledBackTimestamp(LocalDateTime.now());;
|
967 |
pendingPayout.setRolledBackTimestamp(LocalDateTime.now());
|
| - |
|
968 |
;
|
| - |
|
969 |
pendingPayout.setStatusDescription(
|
| 963 |
pendingPayout.setStatusDescription("Rejected, activated on " + FormattingUtils.formatDate(activatedImei.getActivationTimestamp()));
|
970 |
"Rejected, activated on " + FormattingUtils.formatDate(activatedImei.getActivationTimestamp()));
|
| 964 |
}
|
971 |
}
|
| 965 |
}
|
972 |
}
|
| 966 |
}
|
973 |
}
|
| 967 |
|
974 |
|
| 968 |
}
|
975 |
}
|