Subversion Repositories SmartDukaan

Rev

Rev 35848 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 35848 Rev 36053
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
    }