Subversion Repositories SmartDukaan

Rev

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