Subversion Repositories SmartDukaan

Rev

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