| Line 6... |
Line 6... |
| 6 |
import com.smartdukaan.cron.scheduled.amazon.shop.AmazonPurchaseService;
|
6 |
import com.smartdukaan.cron.scheduled.amazon.shop.AmazonPurchaseService;
|
| 7 |
import com.smartdukaan.cron.scheduled.amazon.shop.OrderSummary;
|
7 |
import com.smartdukaan.cron.scheduled.amazon.shop.OrderSummary;
|
| 8 |
import com.smartdukaan.cron.scheduled.amazon.shop.model.OrderRow;
|
8 |
import com.smartdukaan.cron.scheduled.amazon.shop.model.OrderRow;
|
| 9 |
import com.smartdukaan.cron.scheduled.ambreports.AbmReportSender;
|
9 |
import com.smartdukaan.cron.scheduled.ambreports.AbmReportSender;
|
| 10 |
import com.spice.profitmandi.common.enumuration.ItemType;
|
10 |
import com.spice.profitmandi.common.enumuration.ItemType;
|
| - |
|
11 |
import com.spice.profitmandi.common.enumuration.PurchaseReturnStatus;
|
| 11 |
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
|
12 |
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
|
| 12 |
import com.spice.profitmandi.common.model.CustomRetailer;
|
13 |
import com.spice.profitmandi.common.model.CustomRetailer;
|
| 13 |
import com.spice.profitmandi.common.model.ImeiDropSummaryModel;
|
14 |
import com.spice.profitmandi.common.model.ImeiDropSummaryModel;
|
| 14 |
import com.spice.profitmandi.common.model.InvoicePdfModel;
|
15 |
import com.spice.profitmandi.common.model.InvoicePdfModel;
|
| 15 |
import com.spice.profitmandi.common.model.ProfitMandiConstants;
|
16 |
import com.spice.profitmandi.common.model.ProfitMandiConstants;
|
| Line 276... |
Line 277... |
| 276 |
|
277 |
|
| 277 |
@Autowired
|
278 |
@Autowired
|
| 278 |
private DebitNoteRepository debitNoteRepository;
|
279 |
private DebitNoteRepository debitNoteRepository;
|
| 279 |
|
280 |
|
| 280 |
@Autowired
|
281 |
@Autowired
|
| - |
|
282 |
private PurchaseReturnOrderRepository purchaseReturnOrderRepository;
|
| - |
|
283 |
|
| - |
|
284 |
@Autowired
|
| 281 |
private OfferService offerService;
|
285 |
private OfferService offerService;
|
| 282 |
|
286 |
|
| 283 |
@Autowired
|
287 |
@Autowired
|
| 284 |
private GenericRepository genericRepository;
|
288 |
private GenericRepository genericRepository;
|
| 285 |
|
289 |
|
| Line 807... |
Line 811... |
| 807 |
continue;
|
811 |
continue;
|
| 808 |
}
|
812 |
}
|
| 809 |
}
|
813 |
}
|
| 810 |
}
|
814 |
}
|
| 811 |
|
815 |
|
| 812 |
public void cancelDn(String debitNoteNumber) throws Exception {
|
816 |
public void cancelDn(String debitNoteNumber, boolean recreatePri) throws Exception {
|
| 813 |
DebitNote debitNote = debitNoteRepository.selectDebitNoteByNumber(debitNoteNumber);
|
817 |
DebitNote debitNote = debitNoteRepository.selectDebitNoteByNumber(debitNoteNumber);
|
| 814 |
|
818 |
|
| 815 |
List<PurchaseReturnItem> purchaseReturnItems = purchaseReturnItemRepository
|
819 |
List<PurchaseReturnItem> purchaseReturnItems = purchaseReturnItemRepository
|
| 816 |
.selectAllByDebitNoteId(debitNote.getId());
|
820 |
.selectAllByDebitNoteId(debitNote.getId());
|
| - |
|
821 |
|
| - |
|
822 |
// Block cancellation if any item is already refunded
|
| - |
|
823 |
boolean hasReturned = purchaseReturnItems.stream()
|
| - |
|
824 |
.anyMatch(x -> PurchaseReturnStatus.RETURNED.equals(x.getStatus()));
|
| - |
|
825 |
if (hasReturned) {
|
| - |
|
826 |
throw new Exception("Cannot cancel DN " + debitNoteNumber + " - items already returned and refunded to wallet");
|
| - |
|
827 |
}
|
| - |
|
828 |
|
| 817 |
// Select all inventory Item
|
829 |
// Select all inventory Item
|
| 818 |
Set<Integer> inventoryItemIds = purchaseReturnItems.stream().map(x -> x.getInventoryItemId())
|
830 |
Set<Integer> inventoryItemIds = purchaseReturnItems.stream().map(x -> x.getInventoryItemId())
|
| 819 |
.collect(Collectors.toSet());
|
831 |
.collect(Collectors.toSet());
|
| 820 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds);
|
832 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds);
|
| - |
|
833 |
|
| - |
|
834 |
// Reverse wallet refund if already processed
|
| - |
|
835 |
List<PurchaseReturnOrder> purchaseReturnOrders = purchaseReturnOrderRepository.selectByDebitNoteId(debitNote.getId());
|
| - |
|
836 |
for (PurchaseReturnOrder pro : purchaseReturnOrders) {
|
| - |
|
837 |
if (pro.getRefundTimestamp() != null && pro.getRefundAmount() != null && pro.getRefundAmount() > 0) {
|
| - |
|
838 |
walletService.consumeAmountFromWallet(debitNote.getFofoId(), debitNote.getId(),
|
| - |
|
839 |
WalletReferenceType.PURCHASE, "Reversed - DN cancelled " + debitNoteNumber,
|
| - |
|
840 |
pro.getRefundAmount(), LocalDateTime.now());
|
| - |
|
841 |
LOGGER.info("Reversed wallet refund of {} for DN {}", pro.getRefundAmount(), debitNoteNumber);
|
| - |
|
842 |
}
|
| - |
|
843 |
}
|
| - |
|
844 |
|
| 821 |
for (InventoryItem inventoryItem : inventoryItems) {
|
845 |
for (InventoryItem inventoryItem : inventoryItems) {
|
| 822 |
if (!StringUtils.isEmpty(inventoryItem.getSerialNumber())) {
|
846 |
if (!StringUtils.isEmpty(inventoryItem.getSerialNumber())) {
|
| 823 |
inventoryItem.setGoodQuantity(1);
|
847 |
inventoryItem.setGoodQuantity(1);
|
| 824 |
inventoryItem.setLastScanType(ScanType.PURCHASE);
|
848 |
inventoryItem.setLastScanType(ScanType.PURCHASE);
|
| 825 |
ScanRecord sr = scanRecordRepository.selectByInventoryItemId(inventoryItem.getId()).stream()
|
849 |
scanRecordRepository.selectByInventoryItemId(inventoryItem.getId()).stream()
|
| 826 |
.filter(x -> x.getType().equals(ScanType.PURCHASE_RET)).findFirst().get();
|
850 |
.filter(x -> x.getType().equals(ScanType.PURCHASE_RET)).findFirst()
|
| 827 |
scanRecordRepository.delete(sr);
|
851 |
.ifPresent(sr -> scanRecordRepository.delete(sr));
|
| 828 |
CurrentInventorySnapshot cis = currentInventorySnapshotRepository
|
852 |
CurrentInventorySnapshot cis = currentInventorySnapshotRepository
|
| 829 |
.selectByItemAndFofoId(inventoryItem.getItemId(), inventoryItem.getFofoId());
|
853 |
.selectByItemAndFofoId(inventoryItem.getItemId(), inventoryItem.getFofoId());
|
| 830 |
if (cis == null) {
|
854 |
if (cis == null) {
|
| 831 |
cis = new CurrentInventorySnapshot();
|
855 |
cis = new CurrentInventorySnapshot();
|
| 832 |
cis.setFofoId(inventoryItem.getFofoId());
|
856 |
cis.setFofoId(inventoryItem.getFofoId());
|
| 833 |
cis.setItemId(inventoryItem.getId());
|
857 |
cis.setItemId(inventoryItem.getItemId());
|
| 834 |
currentInventorySnapshotRepository.persist(cis);
|
858 |
currentInventorySnapshotRepository.persist(cis);
|
| 835 |
}
|
859 |
}
|
| 836 |
cis.setAvailability(cis.getAvailability() + 1);
|
860 |
cis.setAvailability(cis.getAvailability() + 1);
|
| 837 |
schemeService.processSchemeIn(inventoryItem.getPurchaseId(), inventoryItem.getFofoId());
|
861 |
schemeService.processSchemeIn(inventoryItem.getPurchaseId(), inventoryItem.getFofoId());
|
| 838 |
}
|
862 |
}
|
| 839 |
}
|
863 |
}
|
| - |
|
864 |
|
| - |
|
865 |
if (recreatePri) {
|
| - |
|
866 |
// Reset PRIs to CREATED so partner can re-initiate DN without re-requesting
|
| - |
|
867 |
for (PurchaseReturnItem pri : purchaseReturnItems) {
|
| - |
|
868 |
pri.setStatus(PurchaseReturnStatus.CREATED);
|
| - |
|
869 |
pri.setDebitNoteId(0);
|
| - |
|
870 |
pri.setApproveTimestamp(null);
|
| - |
|
871 |
pri.setDenyTimestamp(null);
|
| - |
|
872 |
pri.setRefundTimestamp(null);
|
| - |
|
873 |
pri.setCreateTimestamp(LocalDateTime.now());
|
| - |
|
874 |
}
|
| - |
|
875 |
} else {
|
| 840 |
purchaseReturnItems.stream().forEach(x -> purchaseReturnItemRepository.delete(x));
|
876 |
purchaseReturnItems.forEach(x -> purchaseReturnItemRepository.delete(x));
|
| - |
|
877 |
}
|
| - |
|
878 |
LOGGER.info("Cancelled DN {} recreatePri={}", debitNoteNumber, recreatePri);
|
| 841 |
}
|
879 |
}
|
| 842 |
|
880 |
|
| 843 |
public void processPd(int priceDropId) throws ProfitMandiBusinessException {
|
881 |
public void processPd(int priceDropId) throws ProfitMandiBusinessException {
|
| 844 |
priceDropService.processPriceDrop(priceDropId, false);
|
882 |
priceDropService.processPriceDrop(priceDropId, false);
|
| 845 |
}
|
883 |
}
|