| 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));
|