Subversion Repositories SmartDukaan

Rev

Rev 30989 | Rev 31110 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
30859 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
3
import java.math.BigDecimal;
4
import java.math.RoundingMode;
5
import java.time.LocalDate;
6
import java.time.LocalDateTime;
30929 tejbeer 7
import java.util.ArrayList;
30859 tejbeer 8
import java.util.Arrays;
9
import java.util.HashMap;
30967 tejbeer 10
import java.util.HashSet;
31020 tejbeer 11
import java.util.LinkedHashMap;
30859 tejbeer 12
import java.util.List;
13
import java.util.Map;
14
import java.util.Map.Entry;
30929 tejbeer 15
import java.util.Set;
30859 tejbeer 16
import java.util.stream.Collectors;
17
 
18
import javax.servlet.http.HttpServletRequest;
19
import javax.transaction.Transactional;
20
 
21
import org.apache.logging.log4j.LogManager;
22
import org.apache.logging.log4j.Logger;
23
import org.springframework.beans.factory.annotation.Autowired;
31020 tejbeer 24
import org.springframework.mail.javamail.JavaMailSender;
30859 tejbeer 25
import org.springframework.stereotype.Controller;
26
import org.springframework.ui.Model;
27
import org.springframework.web.bind.annotation.RequestBody;
28
import org.springframework.web.bind.annotation.RequestMapping;
29
import org.springframework.web.bind.annotation.RequestMethod;
30929 tejbeer 30
import org.springframework.web.bind.annotation.RequestParam;
30859 tejbeer 31
 
32
import com.spice.profitmandi.common.enumuration.MessageType;
33
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
34
import com.spice.profitmandi.common.model.CustomRetailer;
35
import com.spice.profitmandi.common.model.SendNotificationModel;
31020 tejbeer 36
import com.spice.profitmandi.common.util.Utils;
30859 tejbeer 37
import com.spice.profitmandi.dao.entity.auth.AuthUser;
38
import com.spice.profitmandi.dao.entity.dtr.CreditAccount;
39
import com.spice.profitmandi.dao.entity.dtr.CreditStatus;
30913 tejbeer 40
import com.spice.profitmandi.dao.entity.fofo.CurrentPartnerDailyInvestment;
30859 tejbeer 41
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
42
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
30929 tejbeer 43
import com.spice.profitmandi.dao.entity.transaction.Loan;
31020 tejbeer 44
import com.spice.profitmandi.dao.entity.transaction.Order;
30859 tejbeer 45
import com.spice.profitmandi.dao.entity.transaction.SDCreditRequirement;
46
import com.spice.profitmandi.dao.entity.transaction.SanctionRequest;
30929 tejbeer 47
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
30989 tejbeer 48
import com.spice.profitmandi.dao.entity.user.Address;
30859 tejbeer 49
import com.spice.profitmandi.dao.enumuration.fofo.Gateway;
50
import com.spice.profitmandi.dao.enumuration.transaction.SanctionStatus;
30929 tejbeer 51
import com.spice.profitmandi.dao.model.SDCreditResponseOut;
30859 tejbeer 52
import com.spice.profitmandi.dao.model.SanctionRequestModel;
53
import com.spice.profitmandi.dao.model.SdCreditRequirementModel;
54
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30936 tejbeer 55
import com.spice.profitmandi.dao.repository.cs.CsService;
30859 tejbeer 56
import com.spice.profitmandi.dao.repository.dtr.CreditAccountRepository;
57
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
58
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
30913 tejbeer 59
import com.spice.profitmandi.dao.repository.fofo.CurrentPartnerDailyInvestmentRepository;
30859 tejbeer 60
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
30929 tejbeer 61
import com.spice.profitmandi.dao.repository.transaction.LoanRepository;
31020 tejbeer 62
import com.spice.profitmandi.dao.repository.transaction.LoanStatementRepository;
63
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
30859 tejbeer 64
import com.spice.profitmandi.dao.repository.transaction.SDCreditRequirementRepository;
65
import com.spice.profitmandi.dao.repository.transaction.SanctionRequestRepository;
30929 tejbeer 66
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
30989 tejbeer 67
import com.spice.profitmandi.dao.repository.user.AddressRepository;
30859 tejbeer 68
import com.spice.profitmandi.service.NotificationService;
69
import com.spice.profitmandi.service.transaction.SDCreditService;
70
import com.spice.profitmandi.service.user.RetailerService;
30936 tejbeer 71
import com.spice.profitmandi.web.model.LoginDetails;
72
import com.spice.profitmandi.web.util.CookiesProcessor;
31020 tejbeer 73
import com.spice.profitmandi.web.util.MVCResponseSender;
30859 tejbeer 74
 
75
@Controller
76
@Transactional(rollbackOn = Throwable.class)
77
public class SDCreditController {
78
 
79
	@Autowired
80
	private RetailerService retailerService;
81
 
82
	@Autowired
83
	SDCreditRequirementRepository sdCreditRequirementRepository;
84
 
85
	@Autowired
86
	SanctionRequestRepository sanctionRequestRepository;
87
 
88
	@Autowired
89
	PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
90
 
91
	@Autowired
92
	private FofoStoreRepository fofoStoreRepository;
93
 
94
	@Autowired
95
	private CreditAccountRepository creditAccountRepository;
96
 
97
	@Autowired
98
	private SDCreditService sdCreditService;
99
 
100
	@Autowired
101
	private NotificationService notificationService;
102
 
103
	@Autowired
104
	private AuthRepository authRepository;
105
 
106
	@Autowired
107
	private UserRepository userRepository;
108
 
30913 tejbeer 109
	@Autowired
110
	private CurrentPartnerDailyInvestmentRepository currentPartnerDailyInvestmentRepository;
111
 
30929 tejbeer 112
	@Autowired
113
	private UserWalletRepository userWalletRepository;
114
 
115
	@Autowired
116
	LoanRepository loanRepository;
117
 
30936 tejbeer 118
	@Autowired
119
	private CookiesProcessor cookiesProcessor;
120
 
121
	@Autowired
122
	private CsService csService;
123
 
30989 tejbeer 124
	@Autowired
125
	AddressRepository addressRepository;
126
 
127
	@Autowired
31020 tejbeer 128
	OrderRepository orderRepository;
129
 
130
	@Autowired
131
	private LoanStatementRepository loanStatementRepository;
132
 
133
	@Autowired
30989 tejbeer 134
	private com.spice.profitmandi.dao.repository.user.UserRepository userUserRepository;
135
 
31020 tejbeer 136
	@Autowired
137
	private JavaMailSender mailSender;
138
 
139
	@Autowired
140
	private MVCResponseSender mvcResponseSender;
141
 
30859 tejbeer 142
	private static final Logger LOGGER = LogManager.getLogger(SDCreditController.class);
143
 
144
	@RequestMapping(value = "/getSDCreditReq", method = RequestMethod.GET)
145
	public String getSDCreditReq(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
146
 
147
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(true);
148
 
149
		Map<Integer, SDCreditRequirement> sdCreditRequirementMap = sdCreditRequirementRepository.selectAll().stream()
150
				.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
151
		for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailerMap.entrySet()) {
152
			int fofoId = customRetailerEntry.getKey();
153
 
154
			SDCreditRequirement sdCreditRequirement = sdCreditRequirementMap.get(customRetailerEntry.getKey());
155
 
30923 tejbeer 156
			if (sdCreditRequirement != null) {
30913 tejbeer 157
 
30923 tejbeer 158
				BigDecimal utilizedLimit = new BigDecimal(sdCreditService.getUtilizationAmount(fofoId));
30910 tejbeer 159
 
30923 tejbeer 160
				BigDecimal availableLimit = sdCreditRequirement.getLimit().subtract(utilizedLimit);
30910 tejbeer 161
 
30923 tejbeer 162
				LOGGER.info("utilizedLimit {} ", utilizedLimit);
30910 tejbeer 163
 
30923 tejbeer 164
				LOGGER.info("availableLimit {} ", availableLimit);
30910 tejbeer 165
 
30923 tejbeer 166
				sdCreditRequirement.setUtilizedAmount(utilizedLimit);
30910 tejbeer 167
 
30923 tejbeer 168
				sdCreditRequirement.setAvailableLimit(availableLimit);
169
 
30859 tejbeer 170
				sdCreditRequirement.setUpdateTimestamp(LocalDateTime.now());
171
			}
172
 
173
		}
174
 
30922 tejbeer 175
		model.addAttribute("customRetailerMap", customRetailerMap);
176
		model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
177
		return "sd-credit";
30921 tejbeer 178
	}
179
 
30859 tejbeer 180
	@RequestMapping(value = "/creditRequirement", method = RequestMethod.POST)
181
	public String sdCredit(HttpServletRequest request, @RequestBody SdCreditRequirementModel sdCreditRequirementModel,
182
			Model model) throws Exception {
183
 
184
		LOGGER.info("sdCreditRequirementModel {} ", sdCreditRequirementModel);
185
 
186
		int fofoId = sdCreditRequirementModel.getFofoId();
187
 
188
		SDCreditRequirement sdCreditRequirement = sdCreditRequirementRepository
189
				.selectByFofoId(sdCreditRequirementModel.getFofoId());
190
 
191
		FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(sdCreditRequirementModel.getFofoId());
192
		sdCreditRequirement.setSecurityCheck(sdCreditRequirementModel.getSecurityCheck());
193
		// sdCreditRequirement.setSecurityCheck(2);
194
 
195
		sdCreditRequirement.setInterestRate(sdCreditRequirementModel.getInterest());
196
		sdCreditRequirement.setFreeDays(sdCreditRequirementModel.getFreeDays());
197
		sdCreditRequirement.setLimit(sdCreditRequirementModel.getLimit());
30865 tejbeer 198
		BigDecimal utilizedLimit = new BigDecimal(sdCreditService.getUtilizationAmount(fofoId));
199
 
200
		BigDecimal availableLimit = sdCreditRequirement.getLimit().subtract(utilizedLimit);
201
 
30909 tejbeer 202
		LOGGER.info("utilizedLimit {} ", utilizedLimit);
203
 
204
		LOGGER.info("availableLimit {} ", availableLimit);
205
 
30859 tejbeer 206
		sdCreditRequirement.setUtilizedAmount(utilizedLimit);
207
 
208
		sdCreditRequirement.setAvailableLimit(availableLimit);
209
		sdCreditRequirement.setCreditDays(15);
210
		sdCreditRequirement.setUpdateTimestamp(LocalDateTime.now());
211
 
212
		if (sdCreditRequirement.getSecurityCheck() > 0) {
213
 
214
			CreditAccount creditAccount = creditAccountRepository
215
					.selectByFofoIdAndGateway(sdCreditRequirementModel.getFofoId(), Gateway.SDDIRECT);
216
			if (creditAccount == null) {
217
				creditAccount = new CreditAccount();
218
				creditAccount.setFofoId(sdCreditRequirementModel.getFofoId());
219
				creditAccount.setGateway(Gateway.SDDIRECT);
220
				creditAccount.setCreditStatus(CreditStatus.SANCTIONED);
221
				creditAccount.setActive(false);
222
 
223
				creditAccount.setUpdatedOn(LocalDateTime.now());
224
 
225
				creditAccountRepository.persist(creditAccount);
226
			}
227
 
228
			creditAccount.setInterestRate(sdCreditRequirement.getInterestRate().floatValue());
229
			creditAccount.setSanctionedAmount(sdCreditRequirement.getLimit().floatValue());
230
			creditAccount.setAvailableAmount(availableLimit.floatValue());
231
			creditAccount.setFreeDays(sdCreditRequirement.getFreeDays());
232
			creditAccount.setUpdatedOn(LocalDateTime.now());
233
 
234
		}
235
		LOGGER.info("sdCreditRequirement {} ", sdCreditRequirement);
236
 
237
		CustomRetailer customRetailer = retailerService.getFofoRetailer(sdCreditRequirementModel.getFofoId());
238
 
30865 tejbeer 239
		sdCreditRequirement = sdCreditRequirementRepository.selectByFofoId(sdCreditRequirementModel.getFofoId());
240
 
30859 tejbeer 241
		Map<Integer, SDCreditRequirement> sdCreditRequirementMap = new HashMap<>();
242
		sdCreditRequirementMap.put(sdCreditRequirement.getFofoId(), sdCreditRequirement);
243
		model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
244
		model.addAttribute("customRetailer", customRetailer);
245
 
246
		return "sd-credit-requirement-row";
247
 
248
	}
249
 
250
	@RequestMapping(value = "/getSanctionRequest", method = RequestMethod.GET)
251
	public String getSanctionRequest(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
252
 
253
		List<SanctionRequest> sanctionRequests = sanctionRequestRepository.selectByDate(LocalDate.now());
254
 
31020 tejbeer 255
		if (!sanctionRequests.isEmpty()) {
30859 tejbeer 256
 
31020 tejbeer 257
			List<Integer> fofoIds = sanctionRequests.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
30859 tejbeer 258
 
31020 tejbeer 259
			Map<Integer, SDCreditRequirement> sdCreditRequirementMap = sdCreditRequirementRepository.selectAll()
260
					.stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
30967 tejbeer 261
 
31020 tejbeer 262
			Map<Integer, UserWallet> userWalletMap = userWalletRepository.selectByRetailerIds(new HashSet<>(fofoIds))
263
					.stream().collect(Collectors.toMap(x -> x.getUserId(), x -> x));
30859 tejbeer 264
 
265
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(fofoIds);
266
			Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = partnerDailyInvestmentRepository
30955 tejbeer 267
					.selectAll(fofoIds, LocalDate.now().minusDays(1)).stream()
268
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
30859 tejbeer 269
 
270
			model.addAttribute("customRetailerMap", customRetailerMap);
271
 
272
			model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
31020 tejbeer 273
			model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
30859 tejbeer 274
 
31020 tejbeer 275
			model.addAttribute("userWalletMap", userWalletMap);
276
 
30859 tejbeer 277
		}
278
 
279
		model.addAttribute("sanctionRequests", sanctionRequests);
280
 
281
		model.addAttribute("sanctionStatus", SanctionStatus.values());
282
		return "sanction-request";
283
 
284
	}
285
 
286
	@RequestMapping(value = "/sanctionRequest", method = RequestMethod.POST)
287
	public String sanctionRequest(HttpServletRequest request, @RequestBody SanctionRequestModel sanctionRequestModel,
288
			Model model) throws Exception {
289
 
290
		LOGGER.info("sanctionRequestModel {} ", sanctionRequestModel);
291
		Map<Integer, SDCreditRequirement> sdCreditRequirementMap = sdCreditRequirementRepository.selectAll().stream()
292
				.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
293
 
294
		SanctionRequest sanctionRequest = sanctionRequestRepository.selectById(sanctionRequestModel.getId());
295
		List<Integer> fofoIds = sanctionRequestRepository.selectByDate(LocalDate.now()).stream().map(x -> x.getFofoId())
296
				.collect(Collectors.toList());
297
 
298
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(fofoIds);
299
 
300
		LOGGER.info("freeDays {} ", sdCreditRequirementMap.get(sanctionRequest.getFofoId()).getFreeDays());
301
 
302
		if (sanctionRequestModel.getStatus().equals(SanctionStatus.APPROVED)) {
303
			CustomRetailer customRetailer = customRetailerMap.get(sanctionRequest.getFofoId());
304
			sanctionRequest.setApprovalTimestamp(LocalDateTime.now());
305
			BigDecimal availableAmount = sdCreditService.getAvailableAmount(sanctionRequest.getFofoId());
306
 
307
			String title = "Sanction Request Approved";
308
			String url = "http://app.smartdukaan.com/pages/home/credit";
30989 tejbeer 309
			String message = "Congratulations! Your credit limit is increased for today Rs."
30859 tejbeer 310
					+ sanctionRequest.getApprovalAmount().setScale(2, RoundingMode.HALF_UP)
30989 tejbeer 311
					+ ". Your total available limit is Rs." + availableAmount.setScale(2, RoundingMode.HALF_UP) + ".";
30859 tejbeer 312
			notificationService.sendNotification(sanctionRequest.getFofoId(), title, MessageType.notification, title,
313
					message, url);
30989 tejbeer 314
			com.spice.profitmandi.dao.entity.user.User user = userUserRepository
315
					.selectById(sanctionRequest.getFofoId());
30859 tejbeer 316
 
30989 tejbeer 317
			Address address = addressRepository.selectById(user.getAddressId());
318
 
319
			notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
320
 
30859 tejbeer 321
			AuthUser authUser = authRepository.selectById(sanctionRequest.getAuthId());
322
 
30989 tejbeer 323
			String empMessage = "Congratulations! Your Partner " + customRetailer.getBusinessName()
324
					+ " credit limit is increased for today Rs."
325
					+ sanctionRequest.getApprovalAmount().setScale(2, RoundingMode.HALF_UP)
326
					+ " and total available limit is Rs." + availableAmount.setScale(2, RoundingMode.HALF_UP) + ".";
30859 tejbeer 327
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
30989 tejbeer 328
			sendNotificationModel.setCampaignName("Sanction Request");
329
			sendNotificationModel.setTitle("title");
330
			sendNotificationModel.setMessage(empMessage);
30859 tejbeer 331
			sendNotificationModel.setType("url");
332
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/credit");
333
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
334
			sendNotificationModel.setMessageType(MessageType.notification);
335
			sendNotificationModel
336
					.setUserIds(Arrays.asList(userRepository.selectByEmailId(authUser.getEmailId()).getId()));
337
			System.out.println(sendNotificationModel);
338
			notificationService.sendNotification(sendNotificationModel);
339
 
30989 tejbeer 340
			notificationService.sendWhatsappMessage(empMessage, title, authUser.getMobileNumber());
341
 
30859 tejbeer 342
		}
343
 
344
		if (sdCreditRequirementMap.get(sanctionRequest.getFofoId()).getFreeDays() >= sanctionRequestModel
345
				.getFreeDays()) {
346
			sanctionRequest.setFreeDays(sanctionRequestModel.getFreeDays());
347
		} else {
348
			throw new ProfitMandiBusinessException("Free Days", "Free Days", "Free Days is not more than "
349
					+ sdCreditRequirementMap.get(sanctionRequest.getFofoId()).getFreeDays() + " days ");
350
		}
351
 
352
		sanctionRequest.setApprovalAmount(sanctionRequestModel.getApprovalAmount());
353
		sanctionRequest.setStatus(sanctionRequestModel.getStatus());
31020 tejbeer 354
		sanctionRequest.setStockHold(sanctionRequestModel.isStockHold());
30859 tejbeer 355
 
356
		Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = partnerDailyInvestmentRepository
30955 tejbeer 357
				.selectAll(fofoIds, LocalDate.now().minusDays(1)).stream()
358
				.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
30967 tejbeer 359
 
360
		Map<Integer, UserWallet> userWalletMap = userWalletRepository.selectByRetailerIds(new HashSet<>(fofoIds))
361
				.stream().collect(Collectors.toMap(x -> x.getUserId(), x -> x));
362
 
30859 tejbeer 363
		sanctionRequest = sanctionRequestRepository.selectById(sanctionRequestModel.getId());
364
		model.addAttribute("customRetailerMap", customRetailerMap);
365
		model.addAttribute("sanctionRequest", sanctionRequest);
366
		model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
367
		model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
30967 tejbeer 368
		model.addAttribute("userWalletMap", userWalletMap);
30859 tejbeer 369
 
370
		model.addAttribute("sanctionStatus", SanctionStatus.values());
371
 
372
		return "sanction-request-row";
373
 
374
	}
375
 
30936 tejbeer 376
	List<String> emails = Arrays.asList("kamini.sharma@smartdukaan.com", "neeraj.gupta@smartdukaan.com",
377
			"amit.gupta@smartdukaan.com");
378
 
30929 tejbeer 379
	@RequestMapping(value = "/getLoans", method = RequestMethod.GET)
380
	public String getLoans(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
381
 
30936 tejbeer 382
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
383
		String email = loginDetails.getEmailId();
30929 tejbeer 384
 
30936 tejbeer 385
		AuthUser authUser = authRepository.selectByEmailOrMobile(email);
386
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
387
 
388
		Set<Integer> fofoIds = storeGuyMap.get(authUser.getEmailId());
389
 
390
		if (emails.contains(authUser.getEmailId())) {
391
			fofoIds = storeGuyMap.get("tarun.verma@smartdukaan.com");
392
			LOGGER.info("fofoIds" + fofoIds);
393
		}
394
 
395
		LOGGER.info("fofoIds" + fofoIds);
396
		if (fofoIds == null) {
397
			throw new ProfitMandiBusinessException("you are not authorized", "", "you are not authorized" + " " + "");
398
		}
399
 
400
		List<Loan> loans = loanRepository.selectAllLoans(new ArrayList<>(fofoIds));
401
 
402
		List<Integer> loanFofoIds = loans.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
403
 
30929 tejbeer 404
		List<SDCreditRequirement> sdCreditRequirements = sdCreditRequirementRepository
30936 tejbeer 405
				.selectByFofoIds(new ArrayList<>(loanFofoIds));
30929 tejbeer 406
 
407
		Map<Integer, Long> loanCountMap = loans.stream()
408
				.collect(Collectors.groupingBy(x -> x.getFofoId(), Collectors.counting()));
409
 
410
		Map<Integer, UserWallet> userWalletMap = userWalletRepository.selectByRetailerIds(fofoIds).stream()
411
				.collect(Collectors.toMap(x -> x.getUserId(), x -> x));
412
		Map<Integer, CurrentPartnerDailyInvestment> currentPartnerDailyInvestmentMap = currentPartnerDailyInvestmentRepository
413
				.selectAll().stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
414
 
415
		model.addAttribute("userWalletMap", userWalletMap);
416
 
417
		model.addAttribute("currentPartnerDailyInvestmentMap", currentPartnerDailyInvestmentMap);
418
 
419
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(new ArrayList<>(fofoIds));
420
		model.addAttribute("sdCreditRequirements", sdCreditRequirements);
421
		model.addAttribute("loanCountMap", loanCountMap);
422
		model.addAttribute("customRetailerMap", customRetailerMap);
423
		return "loan-summary";
424
 
425
	}
426
 
427
	@RequestMapping(value = "/getLoanSummary", method = RequestMethod.GET)
428
	public String getLoanSummary(HttpServletRequest request, @RequestParam int fofoId, Model model)
429
			throws ProfitMandiBusinessException {
430
 
431
		SDCreditResponseOut sdCreditResponseOut = sdCreditService.sdDirectService(fofoId);
432
		CustomRetailer customRetailer = retailerService.getFofoRetailer(fofoId);
433
 
434
		model.addAttribute("customRetailer", customRetailer);
435
		model.addAttribute("loanSummary", sdCreditResponseOut.getLoans());
436
 
437
		return "loan-summary-detail";
438
 
439
	}
440
 
31020 tejbeer 441
	@RequestMapping(value = "/getSanctionHoldOrder", method = RequestMethod.GET)
442
	public String getSanctionHoldOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
443
 
444
		List<Order> allOrders = orderRepository.selectHoldOrder();
445
 
446
		LOGGER.info("allOrders {}", allOrders);
447
 
448
		if (!allOrders.isEmpty()) {
449
			Map<Integer, Double> transactionAmountMap = allOrders.stream().collect(
450
					Collectors.groupingBy(Order::getTransactionId, Collectors.summingDouble(x -> x.getTotalAmount())));
451
 
452
			Map<Integer, List<Order>> transactionOrdersMap = allOrders.stream()
453
					.collect(Collectors.groupingBy(Order::getTransactionId, Collectors.toList()));
454
 
455
			List<SanctionRequest> sanctionRequests = sanctionRequestRepository
456
					.selectByTransactionId(new ArrayList<>(transactionAmountMap.keySet()));
457
 
458
			model.addAttribute("transactionAmountMap", transactionAmountMap);
459
 
460
			model.addAttribute("transactionOrdersMap", transactionOrdersMap);
461
 
462
			model.addAttribute("sanctionRequests", sanctionRequests);
463
 
464
			Map<Integer, Double> transactionCreditMap = new HashMap<>();
465
			for (Entry<Integer, List<Order>> transactionOrderEntry : transactionOrdersMap.entrySet()) {
466
 
467
				List<Order> orders = transactionOrderEntry.getValue();
468
 
469
				LocalDateTime createDate = orders.get(0).getCreateTimestamp();
470
 
471
				int fofoId = orders.get(0).getRetailerId();
472
 
473
				double loanSettleAmount = loanStatementRepository.selectByDateAndFofoId(createDate, fofoId).stream()
474
						.filter(x -> x.getAmount().doubleValue() > 0)
475
						.collect(Collectors.summingDouble(x -> x.getAmount().doubleValue()));
476
 
477
				transactionCreditMap.put(transactionOrderEntry.getKey(), loanSettleAmount);
478
 
479
			}
480
 
481
			model.addAttribute("transactionCreditMap", transactionCreditMap);
482
 
483
		}
484
 
485
		return "sanction-order-hold";
486
 
487
	}
488
 
489
	@RequestMapping(value = "/unholdOrder", method = RequestMethod.POST)
490
	public String unholdOrder(HttpServletRequest request, @RequestParam int transactionId, Model model)
491
			throws Exception {
492
 
493
		List<Order> orders = orderRepository.selectAllByTransactionId(transactionId);
494
 
495
		LOGGER.info("orders" + orders);
496
 
497
		if (!orders.isEmpty()) {
498
			orders.forEach(x -> x.setShipmentHold(false));
499
		}
500
 
501
		double totalAmount = orders.stream().collect(Collectors.summingDouble(x -> x.getTotalAmount()));
502
 
503
		try {
504
 
505
			List<String> authUserEmail = csService.getAuthUserIdByPartnerId(orders.get(0).getRetailerId()).stream()
506
					.map(x -> x.getEmailId()).collect(Collectors.toList());
507
 
508
			authUserEmail.add("vinay.p@smartdukaan.com");
509
			authUserEmail.add("shivam.gupta@smartdukaan.com");
510
 
511
			String[] emailTo = authUserEmail.toArray(new String[authUserEmail.size()]);
512
 
513
			String[] ccTo = { "tarun.verma@smartdukaan.com", "kamini.sharma@smartdukaan.com" };
514
 
515
			String subject = "Dispatched " + (orders.get(0).getRetailerName());
516
			String message = String.format("Dear Team, \n" + "Kindly note the meterial for the "
517
					+ orders.get(0).getRetailerName() + "of Rs." + totalAmount + " is dispatched.");
518
 
519
			LOGGER.info("message" + message);
520
 
521
			Utils.sendMailWithAttachments(mailSender, emailTo, ccTo, subject, message);
522
		} catch (Exception e) {
523
 
524
			e.printStackTrace();
525
 
526
		}
527
 
528
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
529
 
530
		return "response";
531
 
532
	}
533
 
30859 tejbeer 534
}