Subversion Repositories SmartDukaan

Rev

Rev 37400 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 37400 Rev 37810
Line 2050... Line 2050...
2050
        return "reset-irn-panel";
2050
        return "reset-irn-panel";
2051
    }
2051
    }
2052
 
2052
 
2053
    @GetMapping("/getTransactionForIrnReset")
2053
    @GetMapping("/getTransactionForIrnReset")
2054
    public String getTransactionForIrnReset(@RequestParam String invoiceNumber, Model model) throws Exception {
2054
    public String getTransactionForIrnReset(@RequestParam String invoiceNumber, Model model) throws Exception {
2055
        List<String> invoiceNumbers = Arrays.asList(invoiceNumber.split(","));
2055
        List<String> invoiceNumbers = splitInvoiceNumbers(invoiceNumber);
2056
        List<EInvoiceDetails> eInvoiceDetailsList = eInvoiceDetailsRepository.selectByInvoiceNumbers(invoiceNumbers);
2056
        // A failed filing also leaves an einvoice_details row (irn NULL, irn_error_message set), so
2057
        if (invoiceNumbers.size() == eInvoiceDetailsList.size()) {
2057
        // only a row carrying an IRN means the invoice is already filed. Treating every row as filed
2058
            model.addAttribute("irnResetOrderModelList", new ArrayList<>());
2058
        // blocked exactly the failed invoices this panel exists to reset.
2059
            model.addAttribute("notEligibleInvoiceNumbers", invoiceNumber);
2059
        Set<String> irnFiledInvoices = eInvoiceDetailsRepository.selectByInvoiceNumbers(invoiceNumbers).stream()
2060
            return "eligible-irn-reset-orders";
2060
                .filter(x -> x.getIrn() != null)
2061
        }
-
 
2062
        Set<String> existingInvoiceInEInvoiceDtl = eInvoiceDetailsList.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toSet());
2061
                .map(EInvoiceDetails::getInvoiceNumber)
2063
        List<String> missingInvoiceInEInvoiceDtl = invoiceNumbers.stream().filter(x -> !existingInvoiceInEInvoiceDtl.contains(x)).collect(Collectors.toList());
2062
                .collect(Collectors.toSet());
2064
 
-
 
2065
        List<Order> orderList = orderRepository.selectByInvoiceNumbers(missingInvoiceInEInvoiceDtl).stream().filter(x -> x.getIrnGenerated() != null).collect(Collectors.toList());
2063
        Map<String, List<Order>> invoiceMap = orderRepository.selectByInvoiceNumbers(invoiceNumbers).stream()
2066
        Map<String, List<Order>> invoiceMap = orderList.stream().collect(Collectors.groupingBy(x -> x.getInvoiceNumber()));
2064
                .collect(Collectors.groupingBy(Order::getInvoiceNumber));
2067
        Set<String> notEligibleInvoiceNumbers = new HashSet<>();
2065
        LocalDate earlierDate = LocalDate.now().minusDays(5);
2068
        notEligibleInvoiceNumbers.addAll(existingInvoiceInEInvoiceDtl);
2066
        Map<String, String> notEligibleInvoices = new LinkedHashMap<>();
2069
        List<IrnResetOrderModel> irnResetOrderModelList = new ArrayList<>();
2067
        List<IrnResetOrderModel> irnResetOrderModelList = new ArrayList<>();
2070
        for (Map.Entry<String, List<Order>> invoiceMapEntry : invoiceMap.entrySet()) {
2068
        for (String invoice : invoiceNumbers) {
2071
            String invoice = invoiceMapEntry.getKey();
2069
            List<Order> orders = invoiceMap.get(invoice);
-
 
2070
            if (orders == null) {
2072
            List<Order> orders = invoiceMapEntry.getValue();
2071
                notEligibleInvoices.put(invoice, "invoice not found");
2073
            LocalDate earlierDate = LocalDate.now().minusDays(5);
2072
            } else if (irnFiledInvoices.contains(invoice)) {
-
 
2073
                notEligibleInvoices.put(invoice, "IRN already generated");
-
 
2074
            } else if (orders.stream().anyMatch(x -> x.getIrnGenerated() == null)) {
-
 
2075
                notEligibleInvoices.put(invoice, "already queued for IRN generation");
2074
            boolean isEligible = !orders.isEmpty() && orders.stream().allMatch(x -> x.getBillingTimestamp().toLocalDate().isAfter(earlierDate) && x.getIrnGenerated() != null);
2076
            } else if (!orders.stream().allMatch(x -> x.getBillingTimestamp().toLocalDate().isAfter(earlierDate))) {
-
 
2077
                notEligibleInvoices.put(invoice, "billed more than five days ago");
2075
            if (isEligible) {
2078
            } else {
2076
                Order order = orders.get(0);
2079
                Order order = orders.get(0);
2077
                FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(order.getRetailerId());
2080
                FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(order.getRetailerId());
2078
 
2081
 
2079
                IrnResetOrderModel irnResetOrderModel = new IrnResetOrderModel();
2082
                IrnResetOrderModel irnResetOrderModel = new IrnResetOrderModel();
2080
                irnResetOrderModel.setName(partnerOnBoardingPanelRepository.selectByCode(fofoStore.getCode()).getOutLetName());
2083
                irnResetOrderModel.setName(partnerOnBoardingPanelRepository.selectByCode(fofoStore.getCode()).getOutLetName());
2081
                irnResetOrderModel.setInvoiceNumber(order.getInvoiceNumber());
2084
                irnResetOrderModel.setInvoiceNumber(order.getInvoiceNumber());
2082
                irnResetOrderModel.setInvoiceDate(order.getBillingTimestamp());
2085
                irnResetOrderModel.setInvoiceDate(order.getBillingTimestamp());
2083
                irnResetOrderModel.setWarehouseId(ProfitMandiConstants.WAREHOUSE_MAP.get(order.getWarehouseId()));
2086
                irnResetOrderModel.setWarehouseId(ProfitMandiConstants.WAREHOUSE_MAP.get(order.getWarehouseId()));
2084
                irnResetOrderModel.setTotalOrderValue(orders.stream().mapToDouble(Order::getTotalAmount).sum());
2087
                irnResetOrderModel.setTotalOrderValue(orders.stream().mapToDouble(Order::getTotalAmount).sum());
2085
                irnResetOrderModelList.add(irnResetOrderModel);
2088
                irnResetOrderModelList.add(irnResetOrderModel);
2086
            } else {
-
 
2087
                notEligibleInvoiceNumbers.add(invoice);
-
 
2088
            }
2089
            }
2089
        }
2090
        }
2090
        model.addAttribute("irnResetOrderModelList", irnResetOrderModelList);
2091
        model.addAttribute("irnResetOrderModelList", irnResetOrderModelList);
2091
        model.addAttribute("notEligibleInvoiceNumbers", notEligibleInvoiceNumbers.stream().collect(Collectors.joining(", ")));
2092
        model.addAttribute("notEligibleInvoices", notEligibleInvoices);
2092
        return "eligible-irn-reset-orders";
2093
        return "eligible-irn-reset-orders";
2093
    }
2094
    }
2094
 
2095
 
-
 
2096
    // The panel joins with ", " — untrimmed, every invoice after the first matched no order.
-
 
2097
    private static List<String> splitInvoiceNumbers(String invoiceNumbers) {
-
 
2098
        return Arrays.stream(invoiceNumbers.split(","))
-
 
2099
                .map(String::trim)
-
 
2100
                .filter(x -> !x.isEmpty())
-
 
2101
                .distinct()
-
 
2102
                .collect(Collectors.toList());
-
 
2103
    }
-
 
2104
 
2095
    @PutMapping("/resetOrdersIrn")
2105
    @PutMapping("/resetOrdersIrn")
2096
    public String resetIrn(@RequestParam String invoiceNumbers, Model model) throws Exception {
2106
    public String resetIrn(@RequestParam String invoiceNumbers, Model model) throws Exception {
2097
        List<String> invoices = new ArrayList<>();
2107
        List<String> invoices = splitInvoiceNumbers(invoiceNumbers);
2098
        if (!invoiceNumbers.isEmpty()) {
-
 
2099
            invoices = Arrays.asList(invoiceNumbers.split(","));
-
 
2100
        }
-
 
2101
        List<Order> orderList = orderRepository.selectByInvoiceNumbers(invoices);
2108
        List<Order> orderList = orderRepository.selectByInvoiceNumbers(invoices);
2102
        orderList.forEach(order -> {
2109
        orderList.forEach(order -> {
2103
            order.setIrnGenerated(null);
2110
            order.setIrnGenerated(null);
2104
        });
2111
        });
2105
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
2112
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));