Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
32817 amit.gupta 1
package com.smartdukaan.cron.scheduled;
2
 
3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
4
import com.spice.profitmandi.dao.entity.transaction.Order;
5
import com.spice.profitmandi.dao.entity.warehouse.WarehouseInventoryItem;
6
import com.spice.profitmandi.dao.entity.warehouse.WarehouseScan;
7
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
8
import com.spice.profitmandi.dao.repository.warehouse.WarehouseScanRepository;
9
import com.spice.profitmandi.service.transaction.ReturnService;
10
import com.spice.profitmandi.service.wallet.WalletService;
11
import com.spice.profitmandi.service.warehouse.WarehouseInventoryService;
12
import in.shop2020.model.v1.order.OrderStatus;
13
import in.shop2020.model.v1.order.WalletReferenceType;
14
import in.shop2020.warehouse.Scan;
15
import in.shop2020.warehouse.ScanType;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.stereotype.Component;
18
 
19
import java.time.LocalDateTime;
20
import java.util.HashMap;
21
import java.util.List;
22
import java.util.Map;
23
import java.util.stream.Collectors;
24
 
25
@Component
26
public class TransactionRelatedTasks {
27
    @Autowired
28
    private ReturnService returnService;
29
    @Autowired
30
    private OrderRepository orderRepository;
31
 
32
    @Autowired
33
    WarehouseScanRepository warehouseScanRepository;
34
 
35
    @Autowired
36
    WarehouseInventoryService warehouseInventoryService;
37
 
38
    @Autowired
39
    WalletService walletService;
40
 
41
    public void reverseRTO(List<String> invoiceNumbers) throws ProfitMandiBusinessException {
42
        Map<String, List<Order>> invoiceOrderMap = orderRepository.selectByInvoiceNumbers(invoiceNumbers).stream().collect(Collectors.groupingBy(x -> x.getInvoiceNumber()));
43
        List<Integer> rtoOrderIds = invoiceOrderMap.values().stream().flatMap(x -> x.stream()).map(x -> x.getId()).collect(Collectors.toList());
44
        Map<Integer, List<WarehouseScan>> orderIdWarehouseScanMap = warehouseScanRepository.selectAllByOrderIds(rtoOrderIds).stream().filter(x -> x.getType().equals(ScanType.SALE_RET)).collect(Collectors.groupingBy(x -> x.getOrderId()));
45
 
46
        for (Map.Entry<String, List<Order>> invoiceOrdersEntry : invoiceOrderMap.entrySet()) {
47
            String invoiceNumber = invoiceOrdersEntry.getKey();
48
            List<Order> orders = invoiceOrdersEntry.getValue();
49
            int transactionId = orders.get(0).getTransactionId();
50
            int fofoId = orders.get(0).getRetailerId();
51
            Float walletAmount = 0f;
52
            for (Order order : orders) {
53
                order.setRefundBy(null);
54
                order.setRefundTimestamp(null);
55
                order.setRefundReason(null);
56
                order.setStatusDescription("");
57
                order.setReceiverReturnTimestamp(null);
58
                order.getWalletAmount();
59
                if (order.getShippingTimestamp() != null) {
60
                    order.setStatus(OrderStatus.SHIPPED_FROM_WH);
61
                } else {
62
                    order.setStatus(OrderStatus.BILLED);
63
                }
64
                walletAmount += order.getWalletAmount();
65
                List<WarehouseScan> warehouseScans = orderIdWarehouseScanMap.get(order.getId());
66
                for (WarehouseScan warehouseScan : warehouseScans) {
67
                    warehouseInventoryService.addQuantity(warehouseScan.getInventoryItemId(), warehouseScan.getQuantity());
68
                    warehouseScanRepository.delete(warehouseScan);
69
                }
70
                //Find inventory items and remove return entries
71
            }
72
            walletService.rollbackAmountFromWallet(fofoId, walletAmount, transactionId, WalletReferenceType.PURCHASE, "RTO reversed for invoice - " + invoiceNumber, LocalDateTime.now());
73
 
74
        }
75
 
76
    }
77
}
78
 
79
//RTOs should also come in curtomer return report