Subversion Repositories SmartDukaan

Rev

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

Rev 31362 Rev 32050
Line 65... Line 65...
65
 
65
 
66
@Controller
66
@Controller
67
@Transactional(rollbackOn = Throwable.class)
67
@Transactional(rollbackOn = Throwable.class)
68
public class LogisticsController {
68
public class LogisticsController {
69
 
69
 
70
	@Autowired
70
    @Autowired
71
	private OrderRepository orderRepository;
71
    private OrderRepository orderRepository;
72
 
72
 
73
	@Autowired
73
    @Autowired
74
	private ProviderRepository providerRepository;
74
    private ProviderRepository providerRepository;
75
 
75
 
76
	@Autowired
76
    @Autowired
77
	private ProviderDetailsRepository providerDetailsRepository;
77
    private ProviderDetailsRepository providerDetailsRepository;
78
 
78
 
79
	@Autowired
79
    @Autowired
80
	private MVCResponseSender mvcResponseSender;
80
    private MVCResponseSender mvcResponseSender;
81
 
81
 
82
	@Autowired
82
    @Autowired
83
	private ProviderTatRepository providerTatRepository;
83
    private ProviderTatRepository providerTatRepository;
84
 
84
 
85
	@Autowired
85
    @Autowired
86
	private PublicHolidaysRepository publicHolidaysRepository;
86
    private PublicHolidaysRepository publicHolidaysRepository;
87
 
87
 
88
	@Autowired
88
    @Autowired
89
	private LogisticsService logisticsService;
89
    private LogisticsService logisticsService;
90
 
90
 
91
	@Autowired
91
    @Autowired
92
	private UserAccountRepository userAccountRepository;
92
    private UserAccountRepository userAccountRepository;
93
 
93
 
94
	@Autowired
94
    @Autowired
95
	private NotificationService notificationService;
95
    private NotificationService notificationService;
96
 
96
 
97
	@Autowired
97
    @Autowired
98
	private AuthRepository authRepository;
98
    private AuthRepository authRepository;
99
 
99
 
100
	@Autowired
100
    @Autowired
101
	private PositionRepository positionRepository;
101
    private PositionRepository positionRepository;
102
 
102
 
103
	@Autowired
103
    @Autowired
104
	private CookiesProcessor cookiesProcessor;
104
    private CookiesProcessor cookiesProcessor;
105
 
105
 
106
	@Autowired
106
    @Autowired
107
	CsService csService;
107
    CsService csService;
108
 
108
 
109
	@Autowired
109
    @Autowired
110
	private Gson gson;
110
    private Gson gson;
111
 
111
 
112
	@Autowired
112
    @Autowired
113
	private AddressRepository addressRepository;
113
    private AddressRepository addressRepository;
114
 
114
 
115
	@Autowired
115
    @Autowired
116
	private UserRepository userUserRepository;
116
    private UserRepository userUserRepository;
117
 
117
 
118
	@Autowired
118
    @Autowired
119
	private BluedartService blueDartService;
119
    private BluedartService blueDartService;
120
 
120
 
121
	private static final Logger LOGGER = LogManager.getLogger(LogisticsController.class);
121
    private static final Logger LOGGER = LogManager.getLogger(LogisticsController.class);
122
 
122
 
123
	@RequestMapping(value = "/logistics", method = RequestMethod.GET)
123
    @RequestMapping(value = "/logistics", method = RequestMethod.GET)
124
	public String logistics(HttpServletRequest request, Model model) throws Exception {
124
    public String logistics(HttpServletRequest request, Model model) throws Exception {
125
		ProviderTat pt = providerTatRepository.selectByProviderId(1, 7678, "110018");
125
        ProviderTat pt = providerTatRepository.selectByProviderId(1, 7678, "110018");
126
 
126
 
127
		return "logistics";
127
        return "logistics";
128
 
128
 
129
	}
129
    }
130
 
130
 
131
	@RequestMapping(value = "/authorisedWarehouses")
131
    @RequestMapping(value = "/authorisedWarehouses")
132
	public String authorisedWarehouses(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
132
    public String authorisedWarehouses(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
133
 
133
 
134
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
134
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
135
		String email = loginDetails.getEmailId();
135
        String email = loginDetails.getEmailId();
136
 
136
 
137
		AuthUser authUser = authRepository.selectByEmailOrMobile(email);
137
        AuthUser authUser = authRepository.selectByEmailOrMobile(email);
138
		List<Position> positions = positionRepository.selectAll(authUser.getId());
138
        List<Position> positions = positionRepository.selectAll(authUser.getId());
139
 
139
 
140
		List<Position> warehousePositions = positions.stream()
-
 
141
				.filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_WAREHOUSE)
140
        List<Position> warehousePositions = positions.stream().filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_WAREHOUSE).collect(Collectors.toList());
142
				.collect(Collectors.toList());
-
 
143
		Set<CustomRetailer> positionRetailers = new HashSet<>();
141
        Set<CustomRetailer> positionRetailers = new HashSet<>();
144
		csService.getPositionCustomRetailerMap(warehousePositions).values().forEach(customRetailers -> {
142
        csService.getPositionCustomRetailerMap(warehousePositions).values().forEach(customRetailers -> {
145
			positionRetailers.addAll(customRetailers);
143
            positionRetailers.addAll(customRetailers);
146
 
144
 
147
		});
145
        });
148
 
146
 
149
		Map<Integer, String> warehouseMap = this.getWarehouses(positionRetailers);
147
        Map<Integer, String> warehouseMap = this.getWarehouses(positionRetailers);
150
		JSONArray response = new JSONArray();
148
        JSONArray response = new JSONArray();
151
 
149
 
152
		warehouseMap.keySet().stream().filter(x -> warehouseMap.get(x) != null).forEach(x -> {
150
        warehouseMap.keySet().stream().filter(x -> warehouseMap.get(x) != null).forEach(x -> {
153
			response.put(new JSONObject().put("id", x).put("name", warehouseMap.get(x)));
151
            response.put(new JSONObject().put("id", x).put("name", warehouseMap.get(x)));
154
		});
152
        });
155
 
153
 
156
		LOGGER.info("response1", response.toString());
154
        LOGGER.info("response1", response.toString());
157
 
155
 
158
		model.addAttribute("response1", response.toString());
156
        model.addAttribute("response1", response.toString());
159
 
157
 
160
		return "response";
158
        return "response";
161
	}
159
    }
162
 
160
 
163
	@RequestMapping(value = "/billedOrderFileUploader", method = RequestMethod.POST)
161
    @RequestMapping(value = "/billedOrderFileUploader", method = RequestMethod.POST)
164
	public String getBilledOrderFileUploader(HttpServletRequest request, Model model, HttpServletResponse response,
162
    public String getBilledOrderFileUploader(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
165
			@RequestPart MultipartFile file) throws Throwable {
-
 
166
 
163
 
167
		LOGGER.info("file" + file.toString());
164
        LOGGER.info("file" + file.toString());
168
		String fileName = file.getName();
165
        String fileName = file.getName();
169
 
166
 
170
		String fileNames = file.getOriginalFilename();
167
        String fileNames = file.getOriginalFilename();
171
 
168
 
172
		LOGGER.info("fileName" + fileName);
169
        LOGGER.info("fileName" + fileName);
173
		LOGGER.info("fileNames" + fileNames);
170
        LOGGER.info("fileNames" + fileNames);
174
 
171
 
175
		List<CSVRecord> records = FileUtil.readFile(file);
172
        List<CSVRecord> records = FileUtil.readFile(file);
176
 
173
 
177
		List<BilledOrderListModel> billedOrderList = new ArrayList<BilledOrderListModel>();
174
        List<BilledOrderListModel> billedOrderList = new ArrayList<BilledOrderListModel>();
178
		for (CSVRecord record : records) {
175
        for (CSVRecord record : records) {
179
			BilledOrderListModel blm = createBilleOrder(record);
176
            BilledOrderListModel blm = createBilleOrder(record);
180
			billedOrderList.add(blm);
177
            billedOrderList.add(blm);
181
			LOGGER.info("records" + record.get(1));
178
            LOGGER.info("records" + record.get(1));
182
		}
179
        }
183
 
180
 
184
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
181
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
185
		String email = loginDetails.getEmailId();
182
        String email = loginDetails.getEmailId();
186
 
183
 
187
		AuthUser authUser = authRepository.selectByEmailOrMobile(email);
184
        AuthUser authUser = authRepository.selectByEmailOrMobile(email);
188
		List<Position> positions = positionRepository.selectAll(authUser.getId());
185
        List<Position> positions = positionRepository.selectAll(authUser.getId());
189
 
186
 
190
		List<Position> warehousePositions = positions.stream()
-
 
191
				.filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_WAREHOUSE)
187
        List<Position> warehousePositions = positions.stream().filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_WAREHOUSE).collect(Collectors.toList());
192
				.collect(Collectors.toList());
-
 
193
		Set<CustomRetailer> positionRetailers = new HashSet<>();
188
        Set<CustomRetailer> positionRetailers = new HashSet<>();
194
		csService.getPositionCustomRetailerMap(warehousePositions).values().forEach(customRetailers -> {
189
        csService.getPositionCustomRetailerMap(warehousePositions).values().forEach(customRetailers -> {
195
			positionRetailers.addAll(customRetailers);
190
            positionRetailers.addAll(customRetailers);
196
 
191
 
197
		});
192
        });
198
 
193
 
199
		LOGGER.info("positionRetailers" + positionRetailers);
194
        LOGGER.info("positionRetailers" + positionRetailers);
200
		List<Integer> fofoIds = new ArrayList<>();
195
        List<Integer> fofoIds = new ArrayList<>();
201
		List<Integer> warehouseIds = new ArrayList<>();
196
        List<Integer> warehouseIds = new ArrayList<>();
202
		if (!positionRetailers.isEmpty()) {
197
        if (!positionRetailers.isEmpty()) {
203
			fofoIds.addAll(positionRetailers.stream().map(x -> x.getPartnerId()).collect(Collectors.toList()));
198
            fofoIds.addAll(positionRetailers.stream().map(x -> x.getPartnerId()).collect(Collectors.toList()));
204
 
199
 
205
			warehouseIds = this.getWarehouses(positionRetailers).entrySet().stream().map(x -> x.getKey())
200
            warehouseIds = this.getWarehouses(positionRetailers).entrySet().stream().map(x -> x.getKey()).collect(Collectors.toList());
206
					.collect(Collectors.toList());
-
 
207
 
201
 
208
		}
202
        }
209
 
203
 
210
		LOGGER.info("fofoIds" + fofoIds);
204
        LOGGER.info("fofoIds" + fofoIds);
211
 
205
 
212
		LOGGER.info("warehouseIds" + warehouseIds);
206
        LOGGER.info("warehouseIds" + warehouseIds);
213
 
207
 
214
		Map<String, DispatchNotificationModel> dispatchNotication = new HashMap<>();
208
        Map<String, DispatchNotificationModel> dispatchNotication = new HashMap<>();
215
 
209
 
216
		if (!billedOrderList.isEmpty()) {
210
        if (!billedOrderList.isEmpty()) {
217
			List<Order> ords = orderRepository.selectByInvoiceNumbers(
211
            List<Order> ords = orderRepository.selectByInvoiceNumbers(
218
					billedOrderList.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toList()));
212
                    billedOrderList.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toList()));
219
 
213
 
220
			List<Integer> shippingWarehouseIds = ords.stream().map(x -> x.getWarehouseId())
214
            List<Integer> shippingWarehouseIds = ords.stream().map(x -> x.getWarehouseId()).collect(Collectors.toList());
221
					.collect(Collectors.toList());
-
 
222
 
215
 
223
			if (!warehouseIds.containsAll(shippingWarehouseIds)) {
216
            if (!warehouseIds.containsAll(shippingWarehouseIds)) {
224
				throw new ProfitMandiBusinessException("Uploaded File", "",
217
                throw new ProfitMandiBusinessException("Uploaded File", "", "Partners are not belong to the same warehouse");
225
						"Partners are not belong to the same warehouse");
-
 
226
 
218
 
227
			}
219
            }
228
 
220
 
229
			Map<String, Set<Integer>> invoicefofoIdmap = ords.stream().collect(Collectors.groupingBy(
221
            Map<String, Set<Integer>> invoicefofoIdmap = ords.stream().collect(Collectors.groupingBy(
230
					x -> x.getInvoiceNumber(), Collectors.mapping(Order::getRetailerId, Collectors.toSet())));
222
                    x -> x.getInvoiceNumber(), Collectors.mapping(Order::getRetailerId, Collectors.toSet())));
231
 
223
 
232
			LOGGER.info("invoicefofoIdmap" + invoicefofoIdmap);
224
            LOGGER.info("invoicefofoIdmap" + invoicefofoIdmap);
233
 
225
 
234
			Map<String, Set<String>> airbillInvoiceNumberMap = billedOrderList.stream()
-
 
235
					.collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(),
-
 
236
							Collectors.mapping(BilledOrderListModel::getInvoiceNumber, Collectors.toSet())));
226
            Map<String, Set<String>> airbillInvoiceNumberMap = billedOrderList.stream().collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.mapping(BilledOrderListModel::getInvoiceNumber, Collectors.toSet())));
237
 
227
 
238
			LOGGER.info("airbillInvoiceNumberMap" + airbillInvoiceNumberMap);
228
            LOGGER.info("airbillInvoiceNumberMap" + airbillInvoiceNumberMap);
239
 
229
 
240
			for (Entry<String, Set<String>> aim : airbillInvoiceNumberMap.entrySet()) {
230
            for (Entry<String, Set<String>> aim : airbillInvoiceNumberMap.entrySet()) {
241
				Set<String> InvoceNumbers = aim.getValue();
231
                Set<String> InvoceNumbers = aim.getValue();
242
				Set<Integer> fofoId = new HashSet<>();
232
                Set<Integer> fofoId = new HashSet<>();
243
				for (String InvoceNumber : InvoceNumbers) {
233
                for (String InvoceNumber : InvoceNumbers) {
244
					if (invoicefofoIdmap.get(InvoceNumber) != null) {
234
                    if (invoicefofoIdmap.get(InvoceNumber) != null) {
245
						fofoId.addAll(invoicefofoIdmap.get(InvoceNumber));
235
                        fofoId.addAll(invoicefofoIdmap.get(InvoceNumber));
246
					}
236
                    }
247
				}
237
                }
248
				LOGGER.info("fofoId" + fofoId);
238
                LOGGER.info("fofoId" + fofoId);
249
 
239
 
250
				if (fofoId.size() > 1) {
240
                if (fofoId.size() > 1) {
251
					throw new ProfitMandiBusinessException("Uploaded File", "",
-
 
252
							"Waybill " + aim.getKey() + " number cannot have invoices with different Retailers");
241
                    throw new ProfitMandiBusinessException("Uploaded File", "", "Waybill " + aim.getKey() + " number cannot have invoices with different Retailers");
253
				}
242
                }
254
			}
243
            }
255
 
244
 
256
			Map<String, List<BilledOrderListModel>> blueDartAirbillBilledOrderMap = billedOrderList.stream()
245
            Map<String, List<BilledOrderListModel>> blueDartAirbillBilledOrderMap = billedOrderList.stream().filter(x -> x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.toList()));
257
					.filter(x -> x.getLogisticsProviderName().equals("BlueDart"))
-
 
258
					.collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.toList()));
-
 
259
 
246
 
260
			List<BilledOrderListModel> orderList = billedOrderList.stream()
-
 
261
					.filter(x -> !x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
247
            List<BilledOrderListModel> orderList = billedOrderList.stream().filter(x -> !x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
262
 
248
 
263
			if (!blueDartAirbillBilledOrderMap.isEmpty()) {
249
            if (!blueDartAirbillBilledOrderMap.isEmpty()) {
264
				List<BilledOrderListModel> blueDartorderList = billedOrderList.stream()
-
 
265
						.filter(x -> x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
250
                List<BilledOrderListModel> blueDartorderList = billedOrderList.stream().filter(x -> x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
266
 
251
 
267
				List<Integer> unserviceablePincode = new ArrayList<>();
252
                List<Integer> unserviceablePincode = new ArrayList<>();
268
 
253
 
269
				for (BilledOrderListModel billedOrder : blueDartorderList) {
254
                for (BilledOrderListModel billedOrder : blueDartorderList) {
270
 
255
 
271
					Provider provider = providerRepository.selectByName(billedOrder.getLogisticsProviderName());
256
                    Provider provider = providerRepository.selectByName(billedOrder.getLogisticsProviderName());
272
 
257
 
273
					List<Order> orders = orderRepository.selectByInvoiceNumber(billedOrder.getInvoiceNumber());
258
                    List<Order> orders = orderRepository.selectByInvoiceNumber(billedOrder.getInvoiceNumber());
274
 
259
 
275
					for (Order order : orders) {
260
                    for (Order order : orders) {
276
						ProviderTat providerTat = providerTatRepository.selectByProviderId(provider.getId(),
261
                        ProviderTat providerTat = providerTatRepository.selectByProviderId(provider.getId(), order.getWarehouseId(), order.getRetailerPinCode());
277
								order.getWarehouseId(), order.getRetailerPinCode());
-
 
278
						if (providerTat == null) {
262
                        if (providerTat == null) {
279
							unserviceablePincode.add(order.getId());
263
                            unserviceablePincode.add(order.getId());
280
						}
264
                        }
281
					}
265
                    }
282
 
266
 
283
				}
267
                }
284
 
268
 
285
				if (!unserviceablePincode.isEmpty()) {
269
                if (!unserviceablePincode.isEmpty()) {
286
					throw new ProfitMandiBusinessException("Uploaded File", "",
-
 
287
							"Orders " + unserviceablePincode + " Unserviceable Pincode");
270
                    throw new ProfitMandiBusinessException("Uploaded File", "", "Orders " + unserviceablePincode + " Unserviceable Pincode");
288
 
271
 
289
				}
272
                }
290
 
273
 
291
				List<BilledOrderListModel> blueDartOrders = blueDartService
-
 
292
						.getAirwayBillNo(blueDartAirbillBilledOrderMap, authUser.getEmailId());
274
                List<BilledOrderListModel> blueDartOrders = blueDartService.getAirwayBillNo(blueDartAirbillBilledOrderMap, authUser.getEmailId());
293
 
275
 
294
				orderList.addAll(blueDartOrders);
276
                orderList.addAll(blueDartOrders);
295
			}
277
            }
296
 
278
 
297
			for (BilledOrderListModel bl : orderList) {
279
            for (BilledOrderListModel bl : orderList) {
298
				List<Order> orders = orderRepository.selectByInvoiceNumber(bl.getInvoiceNumber());
280
                List<Order> orders = orderRepository.selectByInvoiceNumber(bl.getInvoiceNumber());
299
 
281
 
300
				Provider provider = providerRepository.selectByName(bl.getLogisticsProviderName());
282
                Provider provider = providerRepository.selectByName(bl.getLogisticsProviderName());
301
 
283
 
302
				if (provider == null) {
284
                if (provider == null) {
303
					throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
285
                    throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
304
				}
286
                }
305
				if (!orders.isEmpty()) {
287
                if (!orders.isEmpty()) {
306
					dispatchNotication = logisticsService.markedOrderShippedDetail(orders, provider, dispatchNotication,
288
                    dispatchNotication = logisticsService.markedOrderShippedDetail(orders, provider, dispatchNotication, bl.getAirwayBillNumber());
307
							bl.getAirwayBillNumber());
-
 
308
 
289
 
309
				} else {
290
                } else {
310
					throw new ProfitMandiBusinessException("Uploaded File", "", "No Order Found");
291
                    throw new ProfitMandiBusinessException("Uploaded File", "", "No Order Found");
311
				}
292
                }
312
 
293
 
313
				LOGGER.info("dispatchNotication" + dispatchNotication);
294
                LOGGER.info("dispatchNotication" + dispatchNotication);
314
			}
295
            }
315
 
296
 
316
			if (!dispatchNotication.isEmpty()) {
297
            if (!dispatchNotication.isEmpty()) {
317
 
298
 
318
				for (Entry<String, DispatchNotificationModel> dn : dispatchNotication.entrySet()) {
299
                for (Entry<String, DispatchNotificationModel> dn : dispatchNotication.entrySet()) {
319
 
300
 
320
					Provider pr = providerRepository.selectById(dn.getValue().getProviderId());
301
                    Provider pr = providerRepository.selectById(dn.getValue().getProviderId());
321
 
302
 
322
					String title = "Order Shipped";
303
                    String title = "Order Shipped";
323
 
304
 
324
					com.spice.profitmandi.dao.entity.user.User user = userUserRepository
305
                    com.spice.profitmandi.dao.entity.user.User user = userUserRepository.selectById(dn.getValue().getFofoId());
325
							.selectById(dn.getValue().getFofoId());
-
 
326
 
306
 
327
					Address address = addressRepository.selectById(user.getAddressId());
307
                    Address address = addressRepository.selectById(user.getAddressId());
328
 
308
 
329
					Set<String> invoiceNumber = new HashSet<>();
309
                    Set<String> invoiceNumber = new HashSet<>();
330
					invoiceNumber.addAll(dn.getValue().getInvoiceNumber());
310
                    invoiceNumber.addAll(dn.getValue().getInvoiceNumber());
331
 
311
 
332
					String message = String.format("Dear partner, your items with Invoice Number "
-
 
333
							+ String.join(",", invoiceNumber) + " worth Rs." + dn.getValue().getTotalAmount()
-
 
334
							+ " and qty " + dn.getValue().getTotalQty() + " has been shipped through " + pr.getName()
312
                    String message = String.format("Dear partner, your items with Invoice Number " + String.join(",", invoiceNumber) + " worth Rs." + dn.getValue().getTotalAmount() + " and qty " + dn.getValue().getTotalQty() + " has been shipped through " + pr.getName() + " via your track id " + dn.getKey() + " and will be delivered by " + dn.getValue().getDate().format(DateTimeFormatter.ofPattern("dd-MM-yyyy")) + ".");
335
							+ " via your track id " + dn.getKey() + " and will be delivered by "
-
 
336
							+ dn.getValue().getDate().format(DateTimeFormatter.ofPattern("dd-MM-yyyy")) + ".");
-
 
337
 
313
 
338
					SendNotificationModel sendNotificationModel = new SendNotificationModel();
314
                    SendNotificationModel sendNotificationModel = new SendNotificationModel();
339
					sendNotificationModel.setCampaignName("Order Shipped");
315
                    sendNotificationModel.setCampaignName("Order Shipped");
340
					sendNotificationModel.setTitle(title);
316
                    sendNotificationModel.setTitle(title);
341
					sendNotificationModel.setMessage(message);
317
                    sendNotificationModel.setMessage(message);
342
					sendNotificationModel.setType("url");
318
                    sendNotificationModel.setType("url");
343
					sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
319
                    sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
344
					sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
320
                    sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
345
					sendNotificationModel.setMessageType(MessageType.notification);
321
                    sendNotificationModel.setMessageType(MessageType.notification);
346
					int userId = userAccountRepository.selectUserIdByRetailerId(dn.getValue().getFofoId());
322
                    int userId = userAccountRepository.selectUserIdByRetailerId(dn.getValue().getFofoId());
347
					sendNotificationModel.setUserIds(Arrays.asList(userId));
323
                    sendNotificationModel.setUserIds(Arrays.asList(userId));
348
					notificationService.sendNotification(sendNotificationModel);
324
                    notificationService.sendNotification(sendNotificationModel);
349
					notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
325
                    notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
350
				}
326
                }
351
 
327
 
352
			}
328
            }
353
		}
329
        }
354
 
330
 
355
		LOGGER.info("dispatchNotication" + dispatchNotication);
331
        LOGGER.info("dispatchNotication" + dispatchNotication);
356
		LOGGER.info("billedOrderList" + billedOrderList);
332
        LOGGER.info("billedOrderList" + billedOrderList);
357
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
333
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
358
		return "response";
334
        return "response";
359
 
335
 
360
	}
336
    }
361
 
337
 
362
	private BilledOrderListModel createBilleOrder(CSVRecord record) {
338
    private BilledOrderListModel createBilleOrder(CSVRecord record) {
363
		BilledOrderListModel bol = new BilledOrderListModel();
339
        BilledOrderListModel bol = new BilledOrderListModel();
364
		bol.setInvoiceNumber(record.get(0));
340
        bol.setInvoiceNumber(record.get(0));
365
		bol.setLogisticsProviderName(record.get(1));
341
        bol.setLogisticsProviderName(record.get(1));
366
		bol.setAirwayBillNumber(record.get(2));
342
        bol.setAirwayBillNumber(record.get(2));
367
		bol.setWeight(Double.valueOf(record.get(3)));
343
        bol.setWeight(Double.valueOf(record.get(3)));
368
 
344
 
369
		return bol;
345
        return bol;
370
	}
346
    }
371
 
347
 
372
	@RequestMapping(value = "/provider", method = RequestMethod.GET)
348
    @RequestMapping(value = "/provider", method = RequestMethod.GET)
373
	public String provider(HttpServletRequest request, Model model) throws Exception {
349
    public String provider(HttpServletRequest request, Model model) throws Exception {
374
		List<Provider> providers = providerRepository.selectAll();
350
        List<Provider> providers = providerRepository.selectAll();
375
		List<Integer> providerIds = providers.stream().map(x -> x.getId()).collect(Collectors.toList());
351
        List<Integer> providerIds = providers.stream().map(x -> x.getId()).collect(Collectors.toList());
376
		Map<Integer, ProviderDetails> providerDetails = providerDetailsRepository
352
        Map<Integer, ProviderDetails> providerDetails = providerDetailsRepository.selectByProviderIds(providerIds, DeliveryType.PREPAID, true).stream().collect(Collectors.toMap(x -> x.getProviderId(), x -> x));
377
				.selectByProviderIds(providerIds, DeliveryType.PREPAID, true).stream()
-
 
378
				.collect(Collectors.toMap(x -> x.getProviderId(), x -> x));
-
 
379
		model.addAttribute("providers", providers);
353
        model.addAttribute("providers", providers);
380
		model.addAttribute("providerDetails", providerDetails);
354
        model.addAttribute("providerDetails", providerDetails);
381
 
355
 
382
		model.addAttribute("deliveryTypes", DeliveryType.values());
356
        model.addAttribute("deliveryTypes", DeliveryType.values());
383
 
357
 
384
		return "provider";
358
        return "provider";
385
 
359
 
386
	}
360
    }
387
 
361
 
388
	@RequestMapping(value = "/createProvider", method = RequestMethod.POST)
362
    @RequestMapping(value = "/createProvider", method = RequestMethod.POST)
389
	public String createProvider(HttpServletRequest request, @RequestBody ProviderDetailModel providerDetailModel,
363
    public String createProvider(HttpServletRequest request, @RequestBody ProviderDetailModel providerDetailModel, Model model) throws Exception {
390
			Model model) throws Exception {
-
 
391
 
364
 
392
		Provider provider = new Provider();
365
        Provider provider = new Provider();
393
		provider.setName(providerDetailModel.getName());
366
        provider.setName(providerDetailModel.getName());
394
		provider.setActive(providerDetailModel.isProvideractive());
367
        provider.setActive(providerDetailModel.isProvideractive());
395
		provider.setBundleWeightLimit(0);
368
        provider.setBundleWeightLimit(0);
396
		provider.setGroupShipmentAllowed(true);
369
        provider.setGroupShipmentAllowed(true);
397
		provider.setPickupType(PickUpType.COURIER);
370
        provider.setPickupType(PickUpType.COURIER);
398
		provider.setMaxCODLimit(0);
371
        provider.setMaxCODLimit(0);
399
 
372
 
400
		providerRepository.persist(provider);
373
        providerRepository.persist(provider);
401
 
374
 
402
		ProviderDetails pd = new ProviderDetails();
375
        ProviderDetails pd = new ProviderDetails();
403
		pd.setAccountNo(providerDetailModel.getAccountNo());
376
        pd.setAccountNo(providerDetailModel.getAccountNo());
404
		pd.setEmail(providerDetailModel.getEmail());
377
        pd.setEmail(providerDetailModel.getEmail());
405
		pd.setPhone(providerDetailModel.getMobile());
378
        pd.setPhone(providerDetailModel.getMobile());
406
		pd.setProviderId(provider.getId());
379
        pd.setProviderId(provider.getId());
407
		pd.setActive(true);
380
        pd.setActive(true);
408
		pd.setType(DeliveryType.PREPAID);
381
        pd.setType(DeliveryType.PREPAID);
409
		providerDetailsRepository.persist(pd);
382
        providerDetailsRepository.persist(pd);
410
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
383
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
411
 
384
 
412
		return "response";
385
        return "response";
413
 
386
 
414
	}
387
    }
415
 
388
 
416
	@RequestMapping(value = "/providerTat", method = RequestMethod.GET)
389
    @RequestMapping(value = "/providerTat", method = RequestMethod.GET)
417
	public String providerTat(HttpServletRequest request, Model model) throws Exception {
390
    public String providerTat(HttpServletRequest request, Model model) throws Exception {
418
 
391
 
419
		List<Provider> providers = providerRepository.selectAll();
392
        List<Provider> providers = providerRepository.selectAll();
420
		model.addAttribute("providers", providers);
393
        model.addAttribute("providers", providers);
421
		return "provider-tat";
394
        return "provider-tat";
422
 
395
 
423
	}
396
    }
424
 
397
 
425
	@RequestMapping(value = "/getProviderTat", method = RequestMethod.GET)
398
    @RequestMapping(value = "/getProviderTat", method = RequestMethod.GET)
426
	public String getProviderTat(HttpServletRequest request, @RequestParam int providerId, Model model)
399
    public String getProviderTat(HttpServletRequest request, @RequestParam int providerId, Model model) throws Exception {
427
			throws Exception {
-
 
428
		List<ProviderTat> providerTat = providerTatRepository.selectByProviderId(providerId);
400
        List<ProviderTat> providerTat = providerTatRepository.selectByProviderId(providerId);
429
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
401
        Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
430
 
402
 
431
		providerTat = providerTat.stream().filter(x -> warehouseMap.containsKey(x.getWarehouseLocation()))
403
        providerTat = providerTat.stream().filter(x -> warehouseMap.containsKey(x.getWarehouseLocation())).collect(Collectors.toList());
432
				.collect(Collectors.toList());
-
 
433
 
404
 
434
		Map<Integer, Provider> providerIdMap = new HashMap<>();
405
        Map<Integer, Provider> providerIdMap = new HashMap<>();
435
		Provider provider = providerRepository.selectById(providerId);
406
        Provider provider = providerRepository.selectById(providerId);
436
		providerIdMap.put(provider.getId(), provider);
407
        providerIdMap.put(provider.getId(), provider);
437
 
408
 
438
		LOGGER.info("providerTat" + providerTat);
409
        LOGGER.info("providerTat" + providerTat);
439
		model.addAttribute("providerTat", providerTat);
410
        model.addAttribute("providerTat", providerTat);
440
		model.addAttribute("warehouseMap", warehouseMap);
411
        model.addAttribute("warehouseMap", warehouseMap);
441
		model.addAttribute("providerIdMap", providerIdMap);
412
        model.addAttribute("providerIdMap", providerIdMap);
442
 
413
 
443
		return "provider-tat-detail";
414
        return "provider-tat-detail";
444
 
415
 
445
	}
416
    }
446
 
417
 
447
	@RequestMapping(value = "/providerTatFileUploader", method = RequestMethod.POST)
418
    @RequestMapping(value = "/providerTatFileUploader", method = RequestMethod.POST)
448
	public String providerTatFileUploader(HttpServletRequest request, Model model, HttpServletResponse response,
419
    public String providerTatFileUploader(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
449
			@RequestPart MultipartFile file) throws Throwable {
-
 
450
 
420
 
451
		LOGGER.info("file" + file.toString());
421
        LOGGER.info("file" + file.toString());
452
		String fileName = file.getName();
422
        String fileName = file.getName();
453
 
423
 
454
		String fileNames = file.getOriginalFilename();
424
        String fileNames = file.getOriginalFilename();
455
 
425
 
456
		LOGGER.info("fileName" + fileName);
426
        LOGGER.info("fileName" + fileName);
457
		LOGGER.info("fileNames" + fileNames);
427
        LOGGER.info("fileNames" + fileNames);
458
		List<CSVRecord> records = FileUtil.readFile(file);
428
        List<CSVRecord> records = FileUtil.readFile(file);
459
 
429
 
460
		List<ProviderTatModel> providerTatList = new ArrayList<>();
430
        List<ProviderTatModel> providerTatList = new ArrayList<>();
461
		for (CSVRecord record : records) {
431
        for (CSVRecord record : records) {
462
			ProviderTatModel sgr = createProviderTat(record);
432
            ProviderTatModel sgr = createProviderTat(record);
463
			providerTatList.add(sgr);
433
            providerTatList.add(sgr);
464
 
434
 
465
		}
435
        }
466
		if (!providerTatList.isEmpty()) {
436
        if (!providerTatList.isEmpty()) {
467
 
437
 
468
			for (ProviderTatModel pt : providerTatList) {
438
            for (ProviderTatModel pt : providerTatList) {
469
 
439
 
470
				Provider provider = providerRepository.selectByName(pt.getProviderName());
440
                Provider provider = providerRepository.selectByName(pt.getProviderName());
471
 
441
 
472
				if (provider == null) {
442
                if (provider == null) {
473
					throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
443
                    throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
474
				}
444
                }
475
 
445
 
476
				Map<String, Integer> warehouseMap = ProfitMandiConstants.WAREHOUSE_NAME_MAP;
446
                Map<String, Integer> warehouseMap = ProfitMandiConstants.WAREHOUSE_NAME_MAP;
477
				ProviderTat providerTat = providerTatRepository.selectByProviderId(provider.getId(),
447
                ProviderTat providerTat = providerTatRepository.selectByProviderId(provider.getId(), warehouseMap.get(pt.getWarehouseName()), pt.getPincode());
478
						warehouseMap.get(pt.getWarehouseName()), pt.getPincode());
-
 
479
 
448
 
480
				LOGGER.info("providerTat" + providerTat);
449
                LOGGER.info("providerTat" + providerTat);
481
				if (providerTat == null) {
450
                if (providerTat == null) {
482
					LOGGER.info("providerTat" + providerTat);
451
                    LOGGER.info("providerTat" + providerTat);
483
					providerTat = new ProviderTat();
452
                    providerTat = new ProviderTat();
484
					providerTat.setDestinationPin(pt.getPincode());
453
                    providerTat.setDestinationPin(pt.getPincode());
485
					providerTat.setProviderId(provider.getId());
454
                    providerTat.setProviderId(provider.getId());
486
					providerTat.setWarehouseLocation(warehouseMap.get(pt.getWarehouseName()));
455
                    providerTat.setWarehouseLocation(warehouseMap.get(pt.getWarehouseName()));
487
					providerTat.setDeliveryTime(pt.getTat());
456
                    providerTat.setDeliveryTime(pt.getTat());
488
					providerTatRepository.persist(providerTat);
457
                    providerTatRepository.persist(providerTat);
489
				} else {
458
                } else {
490
					LOGGER.info("providerTat else" + providerTat);
459
                    LOGGER.info("providerTat else" + providerTat);
491
					providerTat.setDeliveryTime(pt.getTat());
460
                    providerTat.setDeliveryTime(pt.getTat());
492
				}
461
                }
493
 
462
 
494
			}
463
            }
495
		}
464
        }
496
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
465
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
497
		return "response";
466
        return "response";
498
 
467
 
499
	}
468
    }
500
 
469
 
501
	private ProviderTatModel createProviderTat(CSVRecord record) {
470
    private ProviderTatModel createProviderTat(CSVRecord record) {
502
		ProviderTatModel ptm = new ProviderTatModel();
471
        ProviderTatModel ptm = new ProviderTatModel();
503
		ptm.setProviderName(record.get(0));
472
        ptm.setProviderName(record.get(0));
504
		ptm.setWarehouseName(record.get(1));
473
        ptm.setWarehouseName(record.get(1));
505
		ptm.setPincode(record.get(2));
474
        ptm.setPincode(record.get(2));
506
		ptm.setTat(Integer.parseInt(record.get(3)));
475
        ptm.setTat(Integer.parseInt(record.get(3)));
507
 
476
 
508
		return ptm;
477
        return ptm;
509
	}
478
    }
510
 
479
 
511
	@RequestMapping(value = "/publicProviderHolidays", method = RequestMethod.GET)
480
    @RequestMapping(value = "/publicProviderHolidays", method = RequestMethod.GET)
512
	public String publicProviderHolidays(HttpServletRequest request, Model model) throws Exception {
481
    public String publicProviderHolidays(HttpServletRequest request, Model model) throws Exception {
513
 
482
 
514
		List<PublicHolidays> publicHolidays = publicHolidaysRepository
-
 
515
				.selectAllByDate(LocalDate.of(LocalDate.now().getYear(), 1, 1));
483
        List<PublicHolidays> publicHolidays = publicHolidaysRepository.selectAllByDate(LocalDate.of(LocalDate.now().getYear(), 1, 1));
516
 
484
 
517
		model.addAttribute("publicHolidays", publicHolidays);
485
        model.addAttribute("publicHolidays", publicHolidays);
518
		return "public-provider-holiday";
486
        return "public-provider-holiday";
519
 
487
 
520
	}
488
    }
521
 
489
 
522
	@RequestMapping(value = "/createPublicHoliday", method = RequestMethod.POST)
490
    @RequestMapping(value = "/createPublicHoliday", method = RequestMethod.POST)
523
	public String createPublicHoliday(HttpServletRequest request, @RequestParam LocalDate date,
491
    public String createPublicHoliday(HttpServletRequest request, @RequestParam LocalDate date, @RequestParam String occassion, Model model) throws Exception {
524
			@RequestParam String occassion, Model model) throws Exception {
-
 
525
 
492
 
526
		PublicHolidays ph = new PublicHolidays();
493
        PublicHolidays ph = new PublicHolidays();
527
		ph.setDate(date);
494
        ph.setDate(date);
528
		ph.setHolidayDate(LocalDate.now().atStartOfDay());
495
        ph.setHolidayDate(LocalDate.now().atStartOfDay());
529
		ph.setOccasion(occassion);
496
        ph.setOccasion(occassion);
530
		publicHolidaysRepository.persist(ph);
497
        publicHolidaysRepository.persist(ph);
531
 
498
 
532
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
499
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
533
		return "response";
500
        return "response";
534
	}
501
    }
535
 
502
 
536
	@RequestMapping(value = "/downloadUploadShippingTemplate", method = RequestMethod.GET)
503
    @RequestMapping(value = "/downloadUploadShippingTemplate", method = RequestMethod.GET)
537
	public ResponseEntity<?> downloadUploadShippingTemplate(HttpServletRequest request, @RequestParam int warehouseId)
504
    public ResponseEntity<?> downloadUploadShippingTemplate(HttpServletRequest request, @RequestParam int warehouseId) throws Exception {
538
			throws Exception {
-
 
539
 
505
 
540
		List<List<?>> rows = new ArrayList<>();
506
        List<List<?>> rows = new ArrayList<>();
541
 
507
 
542
		List<Order> orders = orderRepository.selectAllByWarehouseAndStatus(warehouseId, OrderStatus.BILLED);
508
        List<Order> orders = orderRepository.selectAllByWarehouseAndStatus(warehouseId, OrderStatus.BILLED);
543
 
509
 
544
		if (orders.isEmpty()) {
510
        if (orders.isEmpty()) {
545
			throw new ProfitMandiBusinessException("Template File", "", "No order has been billed");
511
            throw new ProfitMandiBusinessException("Template File", "", "No order has been billed");
546
 
512
 
547
		}
513
        }
548
		Set<String> invoiceNumbers = orders.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toSet());
514
        Set<String> invoiceNumbers = orders.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toSet());
549
 
515
 
550
		for (String invoiceNumber : invoiceNumbers) {
516
        for (String invoiceNumber : invoiceNumbers) {
551
			rows.add(Arrays.asList(invoiceNumber));
517
            rows.add(Arrays.asList(invoiceNumber));
552
 
518
 
553
		}
519
        }
554
 
520
 
555
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
-
 
556
				.getCSVByteStream(Arrays.asList("Invoice Number", "Provider", "AWB", "Weight(Kg)"), rows);
521
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Invoice Number", "Provider", "AWB", "Weight(Kg)"), rows);
557
 
522
 
558
		final HttpHeaders headers = new HttpHeaders();
523
        final HttpHeaders headers = new HttpHeaders();
559
		headers.set("Content-Type", "text/csv");
524
        headers.set("Content-Type", "text/csv");
560
		headers.set("Content-disposition", "inline; filename=upload-shipping-template.csv");
525
        headers.set("Content-disposition", "inline; filename=upload-shipping-template.csv");
561
		headers.setContentLength(baos.toByteArray().length);
526
        headers.setContentLength(baos.toByteArray().length);
562
 
527
 
563
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
528
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
564
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
529
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
565
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
530
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
566
 
531
 
567
	}
532
    }
568
 
533
 
569
	private Map<Integer, String> getWarehouses(Set<CustomRetailer> positionRetailers) {
534
    private Map<Integer, String> getWarehouses(Set<CustomRetailer> positionRetailers) {
570
		Map<Integer, String> warehouses = new HashMap<>();
535
        Map<Integer, String> warehouses = new HashMap<>();
571
		positionRetailers.stream().forEach(x -> {
536
        positionRetailers.stream().forEach(x -> {
572
			if (x.getWarehouseId() != 0) {
537
            if (x.getWarehouseId() != 0) {
573
				warehouses.put(x.getWarehouseId(), ProfitMandiConstants.WAREHOUSE_MAP.get(x.getWarehouseId()));
538
                warehouses.put(x.getWarehouseId(), ProfitMandiConstants.WAREHOUSE_MAP.get(x.getWarehouseId()));
574
			}
539
            }
575
		});
540
        });
576
		return warehouses;
541
        return warehouses;
577
 
542
 
578
	}
543
    }
579
 
544
 
580
	@RequestMapping(value = "/downloadProviderTatTemplate", method = RequestMethod.GET)
545
    @RequestMapping(value = "/downloadProviderTatTemplate", method = RequestMethod.GET)
581
	public ResponseEntity<?> downloadProviderTatTemplate(HttpServletRequest request) throws Exception {
546
    public ResponseEntity<?> downloadProviderTatTemplate(HttpServletRequest request) throws Exception {
582
		List<List<?>> rows = new ArrayList<>();
547
        List<List<?>> rows = new ArrayList<>();
583
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
548
        Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
584
		for (Entry<Integer, String> warehouse : warehouseMap.entrySet()) {
549
        for (Entry<Integer, String> warehouse : warehouseMap.entrySet()) {
585
			rows.add(Arrays.asList("Delhivery", warehouse.getValue(), "110018", "-"));
550
            rows.add(Arrays.asList("Delhivery", warehouse.getValue(), "110018", "-"));
586
		}
551
        }
587
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
552
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
588
				Arrays.asList("Provider Name", "Source Warehouse", "Destination Pincode", "TAT in days"), rows);
553
                Arrays.asList("Provider Name", "Source Warehouse", "Destination Pincode", "TAT in days"), rows);
589
 
554
 
590
		final HttpHeaders headers = new HttpHeaders();
555
        final HttpHeaders headers = new HttpHeaders();
591
		headers.set("Content-Type", "text/csv");
556
        headers.set("Content-Type", "text/csv");
592
		headers.set("Content-disposition", "inline; filename=provider-tat-template.csv");
557
        headers.set("Content-disposition", "inline; filename=provider-tat-template.csv");
593
		headers.setContentLength(baos.toByteArray().length);
558
        headers.setContentLength(baos.toByteArray().length);
594
 
559
 
595
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
560
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
596
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
561
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
597
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
562
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
598
 
563
 
599
	}
564
    }
600
 
565
 
601
	@RequestMapping(value = "/downloadDelayDayTemplate", method = RequestMethod.GET)
566
    @RequestMapping(value = "/downloadDelayDayTemplate", method = RequestMethod.GET)
602
	public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
567
    public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
603
		List<List<?>> rows = new ArrayList<>();
568
        List<List<?>> rows = new ArrayList<>();
604
		rows.add(Arrays.asList("-", "-", "Vehicle Delay"));
569
        rows.add(Arrays.asList("-", "-", "Vehicle Delay"));
605
		rows.add(Arrays.asList("-", "-", "Vehicle Breakdown"));
570
        rows.add(Arrays.asList("-", "-", "Vehicle Breakdown"));
606
 
571
 
607
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
-
 
608
				.getCSVByteStream(Arrays.asList("AirwayBillNumber", "Delay Day", "Reason"), rows);
572
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("AirwayBillNumber", "Delay Day", "Reason"), rows);
609
 
573
 
610
		final HttpHeaders headers = new HttpHeaders();
574
        final HttpHeaders headers = new HttpHeaders();
611
		headers.set("Content-Type", "text/csv");
575
        headers.set("Content-Type", "text/csv");
612
		headers.set("Content-disposition", "inline; filename=delay-day-template.csv");
576
        headers.set("Content-disposition", "inline; filename=delay-day-template.csv");
613
		headers.setContentLength(baos.toByteArray().length);
577
        headers.setContentLength(baos.toByteArray().length);
614
 
578
 
615
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
579
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
616
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
580
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
617
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
581
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
618
 
582
 
619
	}
583
    }
620
 
584
 
621
	@RequestMapping(value = "/delayDayFileUpload", method = RequestMethod.POST)
585
    @RequestMapping(value = "/delayDayFileUpload", method = RequestMethod.POST)
622
	public String delayDayFileUpload(HttpServletRequest request, Model model, HttpServletResponse response,
586
    public String delayDayFileUpload(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
623
			@RequestPart MultipartFile file) throws Throwable {
-
 
624
 
587
 
625
		List<CSVRecord> records = FileUtil.readFile(file);
588
        List<CSVRecord> records = FileUtil.readFile(file);
626
 
589
 
627
		List<DelayDayModel> delayDayList = new ArrayList<>();
590
        List<DelayDayModel> delayDayList = new ArrayList<>();
628
		for (CSVRecord record : records) {
591
        for (CSVRecord record : records) {
629
			DelayDayModel ddm = createDelayDay(record);
592
            DelayDayModel ddm = createDelayDay(record);
630
			delayDayList.add(ddm);
593
            delayDayList.add(ddm);
631
 
594
 
632
		}
595
        }
633
 
596
 
634
		if (!delayDayList.isEmpty()) {
597
        if (!delayDayList.isEmpty()) {
635
 
598
 
636
			List<Order> vorders = orderRepository.selectByAirwayBillNumber(
599
            List<Order> vorders = orderRepository.selectByAirwayBillNumber(
637
					delayDayList.stream().map(x -> x.getAirwayBIllNumber()).collect(Collectors.toList()));
600
                    delayDayList.stream().map(x -> x.getAirwayBIllNumber()).collect(Collectors.toList()));
638
 
601
 
639
			List<Order> filteredorders = vorders.stream().filter(x -> x.getStatus() != (OrderStatus.SHIPPED_FROM_WH))
602
            List<Order> filteredorders = vorders.stream().filter(x -> x.getStatus() != (OrderStatus.SHIPPED_FROM_WH)).collect(Collectors.toList());
640
					.collect(Collectors.toList());
-
 
641
 
603
 
642
			if (!filteredorders.isEmpty()) {
604
            if (!filteredorders.isEmpty()) {
643
				throw new ProfitMandiBusinessException("Upload File",
-
 
644
						String.join(",",
-
 
645
								filteredorders.stream().map(x -> x.getAirwayBillNumber()).collect(Collectors.toList())),
605
                throw new ProfitMandiBusinessException("Upload File", String.join(",", filteredorders.stream().map(x -> x.getAirwayBillNumber()).collect(Collectors.toList())), "Order status should be shipped from warehouse");
646
						"Order status should be shipped from warehouse");
-
 
647
 
606
 
648
			}
607
            }
649
 
608
 
650
			Map<String, List<Order>> airwayBillOrderMap = vorders.stream()
609
            Map<String, List<Order>> airwayBillOrderMap = vorders.stream().collect(Collectors.groupingBy(Order::getAirwayBillNumber));
651
					.collect(Collectors.groupingBy(Order::getAirwayBillNumber));
-
 
652
 
610
 
653
			for (DelayDayModel ddm : delayDayList) {
611
            for (DelayDayModel ddm : delayDayList) {
654
				List<Order> orders = airwayBillOrderMap.get(ddm.getAirwayBIllNumber());
612
                List<Order> orders = airwayBillOrderMap.get(ddm.getAirwayBIllNumber());
655
 
613
 
656
				if (!orders.isEmpty()) {
614
                if (!orders.isEmpty()) {
657
 
615
 
658
					Double totalAmount = orders.stream().mapToDouble(x -> x.getTotalAmount()).sum();
616
                    Double totalAmount = orders.stream().mapToDouble(x -> x.getTotalAmount()).sum();
659
 
617
 
660
					List<String> invoiceNumbers = orders.stream().map(x -> x.getInvoiceNumber())
618
                    List<String> invoiceNumbers = orders.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toList());
661
							.collect(Collectors.toList());
-
 
662
 
619
 
663
					int totalQty = orders.stream().mapToInt(x -> x.getLineItem().getQuantity()).sum();
620
                    int totalQty = orders.stream().mapToInt(x -> x.getLineItem().getQuantity()).sum();
664
 
621
 
665
					Order order = orders.get(0);
622
                    Order order = orders.get(0);
666
					ProviderTat pt = providerTatRepository.selectByProviderId(order.getLogisticsProviderId(),
623
                    ProviderTat pt = providerTatRepository.selectByProviderId(order.getLogisticsProviderId(), order.getWarehouseId(), order.getRetailerPinCode());
667
							order.getWarehouseId(), order.getRetailerPinCode());
-
 
668
 
624
 
669
					LocalDate deliveryDate = logisticsService.calculateDeliveryTimeline(
625
                    LocalDate deliveryDate = logisticsService.calculateDeliveryTimeline(
670
							order.getShippingTimestamp().toLocalDate(), pt, ddm.getDelayDay());
626
                            order.getShippingTimestamp().toLocalDate(), pt, ddm.getDelayDay());
671
 
627
 
672
					orders.forEach(x -> x.setExpectedDeliveryTime(deliveryDate.atStartOfDay()));
628
                    orders.forEach(x -> x.setExpectedDeliveryTime(deliveryDate.atStartOfDay()));
673
 
629
 
674
					String title = "Order Update";
630
                    String title = "Order Update";
675
					String message = String
-
 
676
							.format("Dear partner, your items with Invoice Number " + String.join(",", invoiceNumbers)
-
 
677
									+ " worth Rs." + totalAmount + " and qty " + totalQty + " has been shipped through "
631
                    String message = String.format("Dear partner, your items with Invoice Number " + String.join(",", invoiceNumbers) + " worth Rs." + totalAmount + " and qty " + totalQty + " has been shipped through " + providerRepository.selectById(order.getLogisticsProviderId()).getName() + " via your track id " + ddm.getAirwayBIllNumber() + " has been delayed due to " + ddm.getReason() + " and will be delivered by " + deliveryDate.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))) + ".";
678
									+ providerRepository.selectById(order.getLogisticsProviderId()).getName()
-
 
679
									+ " via your track id " + ddm.getAirwayBIllNumber() + " has been delayed due to "
-
 
680
									+ ddm.getReason() + " and will be delivered by "
-
 
681
									+ deliveryDate.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")))
-
 
682
							+ ".";
-
 
683
 
632
 
684
					com.spice.profitmandi.dao.entity.user.User user = userUserRepository
633
                    com.spice.profitmandi.dao.entity.user.User user = userUserRepository.selectById(order.getRetailerId());
685
							.selectById(order.getRetailerId());
-
 
686
 
634
 
687
					Address address = addressRepository.selectById(user.getAddressId());
635
                    Address address = addressRepository.selectById(user.getAddressId());
688
 
636
 
689
					SendNotificationModel sendNotificationModel = new SendNotificationModel();
637
                    SendNotificationModel sendNotificationModel = new SendNotificationModel();
690
					sendNotificationModel.setCampaignName("Order Update");
638
                    sendNotificationModel.setCampaignName("Order Update");
691
					sendNotificationModel.setTitle(title);
639
                    sendNotificationModel.setTitle(title);
692
					sendNotificationModel.setMessage(message);
640
                    sendNotificationModel.setMessage(message);
693
					sendNotificationModel.setType("url");
641
                    sendNotificationModel.setType("url");
694
					sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
642
                    sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
695
					sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
643
                    sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
696
					sendNotificationModel.setMessageType(MessageType.notification);
644
                    sendNotificationModel.setMessageType(MessageType.notification);
697
					int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
645
                    int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
698
					sendNotificationModel.setUserIds(Arrays.asList(userId));
646
                    sendNotificationModel.setUserIds(Arrays.asList(userId));
699
					notificationService.sendNotification(sendNotificationModel);
647
                    notificationService.sendNotification(sendNotificationModel);
700
					notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
648
                    notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
701
				} else {
649
                } else {
702
					throw new ProfitMandiBusinessException("Upload File", "",
-
 
703
							"No order available for " + ddm.getAirwayBIllNumber() + " airwaybill Number");
650
                    throw new ProfitMandiBusinessException("Upload File", "", "No order available for " + ddm.getAirwayBIllNumber() + " airwaybill Number");
704
 
651
 
705
				}
652
                }
706
			}
653
            }
707
		}
654
        }
708
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
655
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
709
		return "response";
656
        return "response";
710
 
657
 
711
	}
658
    }
712
 
659
 
713
	private DelayDayModel createDelayDay(CSVRecord record) {
660
    private DelayDayModel createDelayDay(CSVRecord record) {
714
		DelayDayModel ddm = new DelayDayModel();
661
        DelayDayModel ddm = new DelayDayModel();
715
		ddm.setAirwayBIllNumber(record.get(0));
662
        ddm.setAirwayBIllNumber(record.get(0));
716
		ddm.setDelayDay(Integer.parseInt(record.get(1)));
663
        ddm.setDelayDay(Integer.parseInt(record.get(1)));
717
		ddm.setReason(record.get(2));
664
        ddm.setReason(record.get(2));
718
		return ddm;
665
        return ddm;
719
	}
666
    }
720
 
667
 
721
	@RequestMapping(value = "/downloadMarkDeliveredTemplate", method = RequestMethod.GET)
668
    @RequestMapping(value = "/downloadMarkDeliveredTemplate", method = RequestMethod.GET)
722
	public ResponseEntity<?> downloadMarkDeliveredTemplate(HttpServletRequest request) throws Exception {
669
    public ResponseEntity<?> downloadMarkDeliveredTemplate(HttpServletRequest request) throws Exception {
723
		List<List<?>> rows = new ArrayList<>();
670
        List<List<?>> rows = new ArrayList<>();
724
 
671
 
725
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
-
 
726
				.getCSVByteStream(Arrays.asList("AirwayBillNumber", "Delivered On", "Delivered By"), rows);
672
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("AirwayBillNumber", "Delivered On", "Delivered By"), rows);
727
 
673
 
728
		final HttpHeaders headers = new HttpHeaders();
674
        final HttpHeaders headers = new HttpHeaders();
729
		headers.set("Content-Type", "text/csv");
675
        headers.set("Content-Type", "text/csv");
730
		headers.set("Content-disposition", "inline; filename=mark-delivered-template.csv");
676
        headers.set("Content-disposition", "inline; filename=mark-delivered-template.csv");
731
		headers.setContentLength(baos.toByteArray().length);
677
        headers.setContentLength(baos.toByteArray().length);
732
 
678
 
733
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
679
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
734
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
680
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
735
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
681
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
736
 
682
 
737
	}
683
    }
738
 
684
 
739
	@RequestMapping(value = "/markDeliveredFileUpload", method = RequestMethod.POST)
685
    @RequestMapping(value = "/markDeliveredFileUpload", method = RequestMethod.POST)
740
	public String markDeliveredFileUpload(HttpServletRequest request, Model model, HttpServletResponse response,
686
    public String markDeliveredFileUpload(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
741
			@RequestPart MultipartFile file) throws Throwable {
-
 
742
 
687
 
743
		List<CSVRecord> records = FileUtil.readFile(file);
688
        List<CSVRecord> records = FileUtil.readFile(file);
744
 
689
 
745
		List<MarkDeliveredModel> deliveredList = new ArrayList<>();
690
        List<MarkDeliveredModel> deliveredList = new ArrayList<>();
746
		for (CSVRecord record : records) {
691
        for (CSVRecord record : records) {
747
			MarkDeliveredModel ddm = createMarkDeliveredModel(record);
692
            MarkDeliveredModel ddm = createMarkDeliveredModel(record);
748
			deliveredList.add(ddm);
693
            deliveredList.add(ddm);
749
 
694
 
750
		}
695
        }
751
 
696
 
752
		if (!deliveredList.isEmpty()) {
697
        if (!deliveredList.isEmpty()) {
753
 
698
 
754
			List<Order> vorders = orderRepository.selectByAirwayBillNumber(
699
            List<Order> vorders = orderRepository.selectByAirwayBillNumber(
755
					deliveredList.stream().map(x -> x.getAirwayBillNumber()).collect(Collectors.toList()));
700
                    deliveredList.stream().map(x -> x.getAirwayBillNumber()).collect(Collectors.toList()));
756
 
701
 
757
			List<Order> filteredorders = vorders.stream()
-
 
758
					.filter(x -> (!x.getStatus().equals(OrderStatus.SHIPPED_FROM_WH)
702
            List<Order> filteredorders = vorders.stream().filter(x -> (!x.getStatus().equals(OrderStatus.SHIPPED_FROM_WH) && !x.getStatus().equals(OrderStatus.DELIVERY_SUCCESS))).collect(Collectors.toList());
759
							&& !x.getStatus().equals(OrderStatus.DELIVERY_SUCCESS)))
-
 
760
					.collect(Collectors.toList());
-
 
761
 
703
 
762
			LOGGER.info("filteredOrder" + filteredorders);
704
            LOGGER.info("filteredOrder" + filteredorders);
763
 
705
 
764
			if (!filteredorders.isEmpty()) {
706
            if (!filteredorders.isEmpty()) {
765
				throw new ProfitMandiBusinessException("Upload File",
-
 
766
						String.join(",",
-
 
767
								filteredorders.stream().map(x -> x.getAirwayBillNumber()).collect(Collectors.toList())),
707
                throw new ProfitMandiBusinessException("Upload File", String.join(",", filteredorders.stream().map(x -> x.getAirwayBillNumber()).collect(Collectors.toList())), "Order status should be shipped from warehouse");
768
						"Order status should be shipped from warehouse");
-
 
769
 
708
 
770
			}
709
            }
771
 
710
 
772
			Map<String, List<Order>> airwayBillOrderMap = vorders.stream()
711
            Map<String, List<Order>> airwayBillOrderMap = vorders.stream().collect(Collectors.groupingBy(Order::getAirwayBillNumber));
773
					.collect(Collectors.groupingBy(Order::getAirwayBillNumber));
-
 
774
 
712
 
775
			for (MarkDeliveredModel dl : deliveredList) {
713
            for (MarkDeliveredModel dl : deliveredList) {
776
 
714
 
777
				List<Order> orders = airwayBillOrderMap.get(dl.getAirwayBillNumber());
715
                List<Order> orders = airwayBillOrderMap.get(dl.getAirwayBillNumber());
778
				if (orders != null) {
716
                if (orders != null) {
779
					for (Order order : orders) {
717
                    for (Order order : orders) {
780
						order.setDeliveryTimestamp(dl.getDeliveredOn());
718
                        order.setDeliveryTimestamp(dl.getDeliveredOn());
781
						order.setStatus(OrderStatus.DELIVERY_SUCCESS);
719
                        order.setStatus(OrderStatus.DELIVERY_SUCCESS);
782
						order.setStatusDescription("Order Delivered");
720
                        order.setStatusDescription("Order Delivered");
783
 
721
 
784
					}
722
                    }
785
 
723
 
786
					com.spice.profitmandi.dao.entity.user.User user = userUserRepository
724
                    com.spice.profitmandi.dao.entity.user.User user = userUserRepository.selectById(orders.get(0).getRetailerId());
787
							.selectById(orders.get(0).getRetailerId());
-
 
788
 
725
 
789
					Address address = addressRepository.selectById(user.getAddressId());
726
                    Address address = addressRepository.selectById(user.getAddressId());
790
 
727
 
791
					String title = "Order Delivered";
728
                    String title = "Order Delivered";
792
 
729
 
793
					SendNotificationModel sendNotificationModel = new SendNotificationModel();
730
                    SendNotificationModel sendNotificationModel = new SendNotificationModel();
794
					sendNotificationModel.setCampaignName("Order Delivered");
731
                    sendNotificationModel.setCampaignName("Order Delivered");
795
					sendNotificationModel.setTitle(title);
732
                    sendNotificationModel.setTitle(title);
796
					sendNotificationModel.setMessage(String.format("Dear partner, your SmartDukaan Order "
-
 
797
							+ dl.getAirwayBillNumber() + "has been delivered to you in a safe, sealed bag by "
733
                    sendNotificationModel.setMessage(String.format("Dear partner, your SmartDukaan Order " + dl.getAirwayBillNumber() + " has been delivered on" + dl.getDeliveredOn().format(DateTimeFormatter.ofPattern("dd-MM-yyyy")) + " to you in a safe, sealed bag by " + dl.getDeliveredBy() + "."));
798
							+ dl.getDeliveredBy() + "."));
-
 
799
					sendNotificationModel.setType("url");
734
                    sendNotificationModel.setType("url");
800
					sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
735
                    sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
801
					sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
736
                    sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
802
					sendNotificationModel.setMessageType(MessageType.notification);
737
                    sendNotificationModel.setMessageType(MessageType.notification);
803
					int userId = userAccountRepository.selectUserIdByRetailerId(orders.get(0).getRetailerId());
738
                    int userId = userAccountRepository.selectUserIdByRetailerId(orders.get(0).getRetailerId());
804
					sendNotificationModel.setUserIds(Arrays.asList(userId));
739
                    sendNotificationModel.setUserIds(Arrays.asList(userId));
805
					notificationService.sendNotification(sendNotificationModel);
740
                    notificationService.sendNotification(sendNotificationModel);
806
 
741
 
807
					String message = String.format("Dear partner, Your SmartDukaan Order " + dl.getAirwayBillNumber()
742
                    String message = String.format("Dear partner, Your SmartDukaan Order " + dl.getAirwayBillNumber() + " has been delivered to you in a safe sealed bag.");
808
							+ " has been delivered to you in a safe sealed bag.");
-
 
809
 
743
 
810
					notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
744
                    notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
811
 
745
 
812
				} else {
746
                } else {
813
					throw new ProfitMandiBusinessException("Upload File", "",
-
 
814
							"No order available for " + dl.getAirwayBillNumber() + " airwaybill Number");
747
                    throw new ProfitMandiBusinessException("Upload File", "", "No order available for " + dl.getAirwayBillNumber() + " airwaybill Number");
815
 
748
 
816
				}
749
                }
817
			}
750
            }
818
		}
751
        }
819
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
752
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
820
		return "response";
753
        return "response";
821
 
754
 
822
	}
755
    }
823
 
756
 
824
	private MarkDeliveredModel createMarkDeliveredModel(CSVRecord record) {
757
    private MarkDeliveredModel createMarkDeliveredModel(CSVRecord record) {
825
		MarkDeliveredModel mdm = new MarkDeliveredModel();
758
        MarkDeliveredModel mdm = new MarkDeliveredModel();
826
		mdm.setAirwayBillNumber(record.get(0));
759
        mdm.setAirwayBillNumber(record.get(0));
827
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
760
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
828
		LOGGER.info(record.get(1));
761
        LOGGER.info(record.get(1));
829
		LocalDate dateTime = LocalDate.parse(record.get(1), formatter);
762
        LocalDate dateTime = LocalDate.parse(record.get(1), formatter);
830
		mdm.setDeliveredOn(dateTime.atStartOfDay());
763
        mdm.setDeliveredOn(dateTime.atStartOfDay());
831
		mdm.setDeliveredBy(record.get(2));
764
        mdm.setDeliveredBy(record.get(2));
832
		return mdm;
765
        return mdm;
833
	}
766
    }
834
 
767
 
835
	@RequestMapping(value = "/delayBillingTemplate", method = RequestMethod.GET)
768
    @RequestMapping(value = "/delayBillingTemplate", method = RequestMethod.GET)
836
	public ResponseEntity<?> delayBillingTemplate(HttpServletRequest request) throws Exception {
769
    public ResponseEntity<?> delayBillingTemplate(HttpServletRequest request) throws Exception {
837
		List<List<?>> rows = new ArrayList<>();
770
        List<List<?>> rows = new ArrayList<>();
838
 
771
 
839
		rows.add(Arrays.asList("-",
-
 
840
				"Shipment on hold, low invoice value, please ensure order value of minimum Rs. 40,000."));
772
        rows.add(Arrays.asList("-", "Shipment on hold, low invoice value, please ensure order value of minimum Rs. 40,000."));
841
 
773
 
842
		rows.add(Arrays.asList("-", "Order Billed,Shipping will be done tomorrow."));
774
        rows.add(Arrays.asList("-", "Order Billed,Shipping will be done tomorrow."));
843
 
775
 
844
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
-
 
845
				.getCSVByteStream(Arrays.asList("Invoice Number", "Reason"), rows);
776
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Invoice Number", "Reason"), rows);
846
 
777
 
847
		final HttpHeaders headers = new HttpHeaders();
778
        final HttpHeaders headers = new HttpHeaders();
848
		headers.set("Content-Type", "text/csv");
779
        headers.set("Content-Type", "text/csv");
849
		headers.set("Content-disposition", "inline; filename=delay-billing-template.csv");
780
        headers.set("Content-disposition", "inline; filename=delay-billing-template.csv");
850
		headers.setContentLength(baos.toByteArray().length);
781
        headers.setContentLength(baos.toByteArray().length);
851
 
782
 
852
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
783
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
853
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
784
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
854
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
785
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
855
 
786
 
856
	}
787
    }
857
 
788
 
858
	@RequestMapping(value = "/getDelayBillingFileUploader", method = RequestMethod.POST)
789
    @RequestMapping(value = "/getDelayBillingFileUploader", method = RequestMethod.POST)
859
	public String getDelayBillingFileUploader(HttpServletRequest request, Model model, HttpServletResponse response,
790
    public String getDelayBillingFileUploader(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
860
			@RequestPart MultipartFile file) throws Throwable {
-
 
861
 
791
 
862
		LOGGER.info("file" + file.toString());
792
        LOGGER.info("file" + file.toString());
863
		String fileName = file.getName();
793
        String fileName = file.getName();
864
 
794
 
865
		String fileNames = file.getOriginalFilename();
795
        String fileNames = file.getOriginalFilename();
866
 
796
 
867
		LOGGER.info("fileName" + fileName);
797
        LOGGER.info("fileName" + fileName);
868
		LOGGER.info("fileNames" + fileNames);
798
        LOGGER.info("fileNames" + fileNames);
869
 
799
 
870
		List<CSVRecord> records = FileUtil.readFile(file);
800
        List<CSVRecord> records = FileUtil.readFile(file);
871
 
801
 
872
		List<DelayBillingModel> delayBillingModel = new ArrayList<DelayBillingModel>();
802
        List<DelayBillingModel> delayBillingModel = new ArrayList<DelayBillingModel>();
873
		for (CSVRecord record : records) {
803
        for (CSVRecord record : records) {
874
			DelayBillingModel dbm = new DelayBillingModel();
804
            DelayBillingModel dbm = new DelayBillingModel();
875
			dbm.setInvoiceNumber(record.get(0));
805
            dbm.setInvoiceNumber(record.get(0));
876
			dbm.setReason(record.get(1));
806
            dbm.setReason(record.get(1));
877
			delayBillingModel.add(dbm);
807
            delayBillingModel.add(dbm);
878
 
808
 
879
		}
809
        }
880
 
810
 
881
		if (!delayBillingModel.isEmpty()) {
811
        if (!delayBillingModel.isEmpty()) {
882
			for (DelayBillingModel delayBilling : delayBillingModel) {
812
            for (DelayBillingModel delayBilling : delayBillingModel) {
883
 
813
 
884
				List<Order> orders = orderRepository.selectByInvoiceNumber(delayBilling.getInvoiceNumber());
814
                List<Order> orders = orderRepository.selectByInvoiceNumber(delayBilling.getInvoiceNumber());
885
 
815
 
886
				for (Order order : orders) {
816
                for (Order order : orders) {
887
					order.setDelayReasonText(delayBilling.getReason());
817
                    order.setDelayReasonText(delayBilling.getReason());
888
 
818
 
889
					if (!order.getStatus().equals(OrderStatus.BILLED)) {
819
                    if (!order.getStatus().equals(OrderStatus.BILLED)) {
890
						throw new ProfitMandiBusinessException("Upload File", "",
-
 
891
								"Order" + order.getInvoiceNumber() + "status should be Billed");
820
                        throw new ProfitMandiBusinessException("Upload File", "", "Order" + order.getInvoiceNumber() + "status should be Billed");
892
 
821
 
893
					}
822
                    }
894
				}
823
                }
895
 
824
 
896
				SendNotificationModel sendNotificationModel = new SendNotificationModel();
825
                SendNotificationModel sendNotificationModel = new SendNotificationModel();
897
				sendNotificationModel.setCampaignName("Order Hold");
826
                sendNotificationModel.setCampaignName("Order Hold");
898
				sendNotificationModel.setTitle("Order Hold");
827
                sendNotificationModel.setTitle("Order Hold");
899
				sendNotificationModel.setMessage(
828
                sendNotificationModel.setMessage(
900
						String.format("Dear partner, your SmartDukaan order " + delayBilling.getInvoiceNumber()
829
                        String.format("Dear partner, your SmartDukaan order " + delayBilling.getInvoiceNumber() + " has been delayed due to" + delayBilling.getReason() + "."));
901
								+ " has been delayed due to" + delayBilling.getReason() + "."));
-
 
902
				sendNotificationModel.setType("url");
830
                sendNotificationModel.setType("url");
903
				sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
831
                sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
904
				sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
832
                sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
905
				sendNotificationModel.setMessageType(MessageType.notification);
833
                sendNotificationModel.setMessageType(MessageType.notification);
906
				int userId = userAccountRepository.selectUserIdByRetailerId(orders.get(0).getRetailerId());
834
                int userId = userAccountRepository.selectUserIdByRetailerId(orders.get(0).getRetailerId());
907
				sendNotificationModel.setUserIds(Arrays.asList(userId));
835
                sendNotificationModel.setUserIds(Arrays.asList(userId));
908
				notificationService.sendNotification(sendNotificationModel);
836
                notificationService.sendNotification(sendNotificationModel);
909
			}
837
            }
910
		}
838
        }
911
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
839
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
912
 
840
 
913
		return "response";
841
        return "response";
914
	}
842
    }
915
 
843
 
916
	@RequestMapping(value = "/getAwbNumber", method = RequestMethod.GET)
844
    @RequestMapping(value = "/getAwbNumber", method = RequestMethod.GET)
917
	public String getAwbNumber(HttpServletRequest request, Model model) throws Exception {
845
    public String getAwbNumber(HttpServletRequest request, Model model) throws Exception {
918
 
846
 
919
		List<Order> orders = orderRepository.selectByInvoiceNumber("NSLCK7931");
847
        List<Order> orders = orderRepository.selectByInvoiceNumber("NSLCK7931");
920
 
848
 
921
		// blueDartService.getAirwayBillNo(orders.2);
849
        // blueDartService.getAirwayBillNo(orders.2);
922
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
850
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
923
 
851
 
924
		return "response";
852
        return "response";
925
	}
853
    }
926
}
854
}