Subversion Repositories SmartDukaan

Rev

Rev 31020 | Rev 31238 | 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;
31110 tejbeer 5
import java.time.Duration;
30859 tejbeer 6
import java.time.LocalDate;
7
import java.time.LocalDateTime;
30929 tejbeer 8
import java.util.ArrayList;
30859 tejbeer 9
import java.util.Arrays;
10
import java.util.HashMap;
30967 tejbeer 11
import java.util.HashSet;
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
 
30859 tejbeer 168
				sdCreditRequirement.setUpdateTimestamp(LocalDateTime.now());
169
			}
170
 
171
		}
172
 
30922 tejbeer 173
		model.addAttribute("customRetailerMap", customRetailerMap);
174
		model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
175
		return "sd-credit";
30921 tejbeer 176
	}
177
 
30859 tejbeer 178
	@RequestMapping(value = "/creditRequirement", method = RequestMethod.POST)
179
	public String sdCredit(HttpServletRequest request, @RequestBody SdCreditRequirementModel sdCreditRequirementModel,
180
			Model model) throws Exception {
181
 
182
		LOGGER.info("sdCreditRequirementModel {} ", sdCreditRequirementModel);
183
 
184
		int fofoId = sdCreditRequirementModel.getFofoId();
185
 
186
		SDCreditRequirement sdCreditRequirement = sdCreditRequirementRepository
187
				.selectByFofoId(sdCreditRequirementModel.getFofoId());
188
 
189
		FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(sdCreditRequirementModel.getFofoId());
190
		sdCreditRequirement.setSecurityCheck(sdCreditRequirementModel.getSecurityCheck());
191
		// sdCreditRequirement.setSecurityCheck(2);
192
 
193
		sdCreditRequirement.setInterestRate(sdCreditRequirementModel.getInterest());
194
		sdCreditRequirement.setFreeDays(sdCreditRequirementModel.getFreeDays());
195
		sdCreditRequirement.setLimit(sdCreditRequirementModel.getLimit());
30865 tejbeer 196
		BigDecimal utilizedLimit = new BigDecimal(sdCreditService.getUtilizationAmount(fofoId));
197
 
198
		BigDecimal availableLimit = sdCreditRequirement.getLimit().subtract(utilizedLimit);
199
 
30909 tejbeer 200
		LOGGER.info("utilizedLimit {} ", utilizedLimit);
201
 
202
		LOGGER.info("availableLimit {} ", availableLimit);
203
 
30859 tejbeer 204
		sdCreditRequirement.setUtilizedAmount(utilizedLimit);
205
 
206
		sdCreditRequirement.setCreditDays(15);
207
		sdCreditRequirement.setUpdateTimestamp(LocalDateTime.now());
208
 
209
		if (sdCreditRequirement.getSecurityCheck() > 0) {
210
 
211
			CreditAccount creditAccount = creditAccountRepository
212
					.selectByFofoIdAndGateway(sdCreditRequirementModel.getFofoId(), Gateway.SDDIRECT);
213
			if (creditAccount == null) {
214
				creditAccount = new CreditAccount();
215
				creditAccount.setFofoId(sdCreditRequirementModel.getFofoId());
216
				creditAccount.setGateway(Gateway.SDDIRECT);
217
				creditAccount.setCreditStatus(CreditStatus.SANCTIONED);
218
				creditAccount.setActive(false);
219
 
220
				creditAccount.setUpdatedOn(LocalDateTime.now());
221
 
222
				creditAccountRepository.persist(creditAccount);
223
			}
224
 
225
			creditAccount.setInterestRate(sdCreditRequirement.getInterestRate().floatValue());
226
			creditAccount.setSanctionedAmount(sdCreditRequirement.getLimit().floatValue());
227
			creditAccount.setAvailableAmount(availableLimit.floatValue());
228
			creditAccount.setFreeDays(sdCreditRequirement.getFreeDays());
229
			creditAccount.setUpdatedOn(LocalDateTime.now());
230
 
231
		}
232
		LOGGER.info("sdCreditRequirement {} ", sdCreditRequirement);
233
 
234
		CustomRetailer customRetailer = retailerService.getFofoRetailer(sdCreditRequirementModel.getFofoId());
235
 
30865 tejbeer 236
		sdCreditRequirement = sdCreditRequirementRepository.selectByFofoId(sdCreditRequirementModel.getFofoId());
237
 
30859 tejbeer 238
		Map<Integer, SDCreditRequirement> sdCreditRequirementMap = new HashMap<>();
239
		sdCreditRequirementMap.put(sdCreditRequirement.getFofoId(), sdCreditRequirement);
240
		model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
241
		model.addAttribute("customRetailer", customRetailer);
242
 
243
		return "sd-credit-requirement-row";
244
 
245
	}
246
 
247
	@RequestMapping(value = "/getSanctionRequest", method = RequestMethod.GET)
248
	public String getSanctionRequest(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
249
 
250
		List<SanctionRequest> sanctionRequests = sanctionRequestRepository.selectByDate(LocalDate.now());
251
 
31020 tejbeer 252
		if (!sanctionRequests.isEmpty()) {
30859 tejbeer 253
 
31020 tejbeer 254
			List<Integer> fofoIds = sanctionRequests.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
30859 tejbeer 255
 
31110 tejbeer 256
			Map<Integer, Long> partnerCreditDaysMap = new HashMap<>();
257
 
258
			Map<Integer, Integer> partnerActiveLoanMap = new HashMap<>();
259
 
260
			for (Integer fofoId : fofoIds) {
261
				List<Loan> loans = loanRepository.selectActiveLoan(fofoId);
262
 
263
				if (!loans.isEmpty()) {
264
 
265
					partnerActiveLoanMap.put(fofoId, loans.size());
266
					Loan loan = loans.get(loans.size() - 1);
267
 
268
					long daysBetween = Duration.between(loan.getCreatedOn(), LocalDateTime.now()).toDays();
269
 
270
					partnerCreditDaysMap.put(fofoId, daysBetween);
271
 
272
				}
273
				model.addAttribute("partnerCreditDaysMap", partnerCreditDaysMap);
274
				model.addAttribute("partnerActiveLoanMap", partnerActiveLoanMap);
275
 
276
			}
277
 
31020 tejbeer 278
			Map<Integer, SDCreditRequirement> sdCreditRequirementMap = sdCreditRequirementRepository.selectAll()
279
					.stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
30967 tejbeer 280
 
31020 tejbeer 281
			Map<Integer, UserWallet> userWalletMap = userWalletRepository.selectByRetailerIds(new HashSet<>(fofoIds))
282
					.stream().collect(Collectors.toMap(x -> x.getUserId(), x -> x));
30859 tejbeer 283
 
284
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(fofoIds);
285
			Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = partnerDailyInvestmentRepository
30955 tejbeer 286
					.selectAll(fofoIds, LocalDate.now().minusDays(1)).stream()
287
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
30859 tejbeer 288
 
289
			model.addAttribute("customRetailerMap", customRetailerMap);
290
 
291
			model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
31020 tejbeer 292
			model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
30859 tejbeer 293
 
31020 tejbeer 294
			model.addAttribute("userWalletMap", userWalletMap);
295
 
30859 tejbeer 296
		}
297
 
298
		model.addAttribute("sanctionRequests", sanctionRequests);
299
 
300
		model.addAttribute("sanctionStatus", SanctionStatus.values());
301
		return "sanction-request";
302
 
303
	}
304
 
305
	@RequestMapping(value = "/sanctionRequest", method = RequestMethod.POST)
306
	public String sanctionRequest(HttpServletRequest request, @RequestBody SanctionRequestModel sanctionRequestModel,
307
			Model model) throws Exception {
308
 
309
		LOGGER.info("sanctionRequestModel {} ", sanctionRequestModel);
310
		Map<Integer, SDCreditRequirement> sdCreditRequirementMap = sdCreditRequirementRepository.selectAll().stream()
311
				.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
312
 
313
		SanctionRequest sanctionRequest = sanctionRequestRepository.selectById(sanctionRequestModel.getId());
314
		List<Integer> fofoIds = sanctionRequestRepository.selectByDate(LocalDate.now()).stream().map(x -> x.getFofoId())
315
				.collect(Collectors.toList());
316
 
317
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(fofoIds);
318
 
319
		LOGGER.info("freeDays {} ", sdCreditRequirementMap.get(sanctionRequest.getFofoId()).getFreeDays());
320
 
321
		if (sanctionRequestModel.getStatus().equals(SanctionStatus.APPROVED)) {
322
			CustomRetailer customRetailer = customRetailerMap.get(sanctionRequest.getFofoId());
323
			sanctionRequest.setApprovalTimestamp(LocalDateTime.now());
324
			BigDecimal availableAmount = sdCreditService.getAvailableAmount(sanctionRequest.getFofoId());
325
 
326
			String title = "Sanction Request Approved";
327
			String url = "http://app.smartdukaan.com/pages/home/credit";
30989 tejbeer 328
			String message = "Congratulations! Your credit limit is increased for today Rs."
30859 tejbeer 329
					+ sanctionRequest.getApprovalAmount().setScale(2, RoundingMode.HALF_UP)
30989 tejbeer 330
					+ ". Your total available limit is Rs." + availableAmount.setScale(2, RoundingMode.HALF_UP) + ".";
30859 tejbeer 331
			notificationService.sendNotification(sanctionRequest.getFofoId(), title, MessageType.notification, title,
332
					message, url);
30989 tejbeer 333
			com.spice.profitmandi.dao.entity.user.User user = userUserRepository
334
					.selectById(sanctionRequest.getFofoId());
30859 tejbeer 335
 
30989 tejbeer 336
			Address address = addressRepository.selectById(user.getAddressId());
337
 
338
			notificationService.sendWhatsappMessage(message, title, address.getPhoneNumber());
339
 
30859 tejbeer 340
			AuthUser authUser = authRepository.selectById(sanctionRequest.getAuthId());
341
 
30989 tejbeer 342
			String empMessage = "Congratulations! Your Partner " + customRetailer.getBusinessName()
343
					+ " credit limit is increased for today Rs."
344
					+ sanctionRequest.getApprovalAmount().setScale(2, RoundingMode.HALF_UP)
345
					+ " and total available limit is Rs." + availableAmount.setScale(2, RoundingMode.HALF_UP) + ".";
30859 tejbeer 346
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
30989 tejbeer 347
			sendNotificationModel.setCampaignName("Sanction Request");
348
			sendNotificationModel.setTitle("title");
349
			sendNotificationModel.setMessage(empMessage);
30859 tejbeer 350
			sendNotificationModel.setType("url");
351
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/credit");
352
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
353
			sendNotificationModel.setMessageType(MessageType.notification);
354
			sendNotificationModel
355
					.setUserIds(Arrays.asList(userRepository.selectByEmailId(authUser.getEmailId()).getId()));
356
			System.out.println(sendNotificationModel);
357
			notificationService.sendNotification(sendNotificationModel);
358
 
30989 tejbeer 359
			notificationService.sendWhatsappMessage(empMessage, title, authUser.getMobileNumber());
360
 
30859 tejbeer 361
		}
362
 
363
		if (sdCreditRequirementMap.get(sanctionRequest.getFofoId()).getFreeDays() >= sanctionRequestModel
364
				.getFreeDays()) {
365
			sanctionRequest.setFreeDays(sanctionRequestModel.getFreeDays());
366
		} else {
367
			throw new ProfitMandiBusinessException("Free Days", "Free Days", "Free Days is not more than "
368
					+ sdCreditRequirementMap.get(sanctionRequest.getFofoId()).getFreeDays() + " days ");
369
		}
370
 
371
		sanctionRequest.setApprovalAmount(sanctionRequestModel.getApprovalAmount());
372
		sanctionRequest.setStatus(sanctionRequestModel.getStatus());
31020 tejbeer 373
		sanctionRequest.setStockHold(sanctionRequestModel.isStockHold());
30859 tejbeer 374
 
375
		Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = partnerDailyInvestmentRepository
30955 tejbeer 376
				.selectAll(fofoIds, LocalDate.now().minusDays(1)).stream()
377
				.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
30967 tejbeer 378
 
379
		Map<Integer, UserWallet> userWalletMap = userWalletRepository.selectByRetailerIds(new HashSet<>(fofoIds))
380
				.stream().collect(Collectors.toMap(x -> x.getUserId(), x -> x));
381
 
30859 tejbeer 382
		sanctionRequest = sanctionRequestRepository.selectById(sanctionRequestModel.getId());
383
		model.addAttribute("customRetailerMap", customRetailerMap);
384
		model.addAttribute("sanctionRequest", sanctionRequest);
385
		model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
386
		model.addAttribute("sdCreditRequirementMap", sdCreditRequirementMap);
30967 tejbeer 387
		model.addAttribute("userWalletMap", userWalletMap);
30859 tejbeer 388
 
389
		model.addAttribute("sanctionStatus", SanctionStatus.values());
390
 
391
		return "sanction-request-row";
392
 
393
	}
394
 
30936 tejbeer 395
	List<String> emails = Arrays.asList("kamini.sharma@smartdukaan.com", "neeraj.gupta@smartdukaan.com",
396
			"amit.gupta@smartdukaan.com");
397
 
30929 tejbeer 398
	@RequestMapping(value = "/getLoans", method = RequestMethod.GET)
399
	public String getLoans(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
400
 
30936 tejbeer 401
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
402
		String email = loginDetails.getEmailId();
30929 tejbeer 403
 
30936 tejbeer 404
		AuthUser authUser = authRepository.selectByEmailOrMobile(email);
405
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
406
 
407
		Set<Integer> fofoIds = storeGuyMap.get(authUser.getEmailId());
408
 
409
		if (emails.contains(authUser.getEmailId())) {
410
			fofoIds = storeGuyMap.get("tarun.verma@smartdukaan.com");
411
			LOGGER.info("fofoIds" + fofoIds);
412
		}
413
 
414
		LOGGER.info("fofoIds" + fofoIds);
415
		if (fofoIds == null) {
416
			throw new ProfitMandiBusinessException("you are not authorized", "", "you are not authorized" + " " + "");
417
		}
418
 
419
		List<Loan> loans = loanRepository.selectAllLoans(new ArrayList<>(fofoIds));
420
 
421
		List<Integer> loanFofoIds = loans.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
422
 
30929 tejbeer 423
		List<SDCreditRequirement> sdCreditRequirements = sdCreditRequirementRepository
30936 tejbeer 424
				.selectByFofoIds(new ArrayList<>(loanFofoIds));
30929 tejbeer 425
 
426
		Map<Integer, Long> loanCountMap = loans.stream()
427
				.collect(Collectors.groupingBy(x -> x.getFofoId(), Collectors.counting()));
428
 
429
		Map<Integer, UserWallet> userWalletMap = userWalletRepository.selectByRetailerIds(fofoIds).stream()
430
				.collect(Collectors.toMap(x -> x.getUserId(), x -> x));
431
		Map<Integer, CurrentPartnerDailyInvestment> currentPartnerDailyInvestmentMap = currentPartnerDailyInvestmentRepository
432
				.selectAll().stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
433
 
434
		model.addAttribute("userWalletMap", userWalletMap);
435
 
436
		model.addAttribute("currentPartnerDailyInvestmentMap", currentPartnerDailyInvestmentMap);
437
 
438
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(new ArrayList<>(fofoIds));
439
		model.addAttribute("sdCreditRequirements", sdCreditRequirements);
440
		model.addAttribute("loanCountMap", loanCountMap);
441
		model.addAttribute("customRetailerMap", customRetailerMap);
442
		return "loan-summary";
443
 
444
	}
445
 
446
	@RequestMapping(value = "/getLoanSummary", method = RequestMethod.GET)
447
	public String getLoanSummary(HttpServletRequest request, @RequestParam int fofoId, Model model)
448
			throws ProfitMandiBusinessException {
449
 
450
		SDCreditResponseOut sdCreditResponseOut = sdCreditService.sdDirectService(fofoId);
451
		CustomRetailer customRetailer = retailerService.getFofoRetailer(fofoId);
452
 
453
		model.addAttribute("customRetailer", customRetailer);
454
		model.addAttribute("loanSummary", sdCreditResponseOut.getLoans());
455
 
456
		return "loan-summary-detail";
457
 
458
	}
459
 
31020 tejbeer 460
	@RequestMapping(value = "/getSanctionHoldOrder", method = RequestMethod.GET)
461
	public String getSanctionHoldOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
462
 
463
		List<Order> allOrders = orderRepository.selectHoldOrder();
464
 
465
		LOGGER.info("allOrders {}", allOrders);
466
 
467
		if (!allOrders.isEmpty()) {
468
			Map<Integer, Double> transactionAmountMap = allOrders.stream().collect(
469
					Collectors.groupingBy(Order::getTransactionId, Collectors.summingDouble(x -> x.getTotalAmount())));
470
 
471
			Map<Integer, List<Order>> transactionOrdersMap = allOrders.stream()
472
					.collect(Collectors.groupingBy(Order::getTransactionId, Collectors.toList()));
473
 
474
			List<SanctionRequest> sanctionRequests = sanctionRequestRepository
475
					.selectByTransactionId(new ArrayList<>(transactionAmountMap.keySet()));
476
 
477
			model.addAttribute("transactionAmountMap", transactionAmountMap);
478
 
479
			model.addAttribute("transactionOrdersMap", transactionOrdersMap);
480
 
481
			model.addAttribute("sanctionRequests", sanctionRequests);
482
 
483
			Map<Integer, Double> transactionCreditMap = new HashMap<>();
484
			for (Entry<Integer, List<Order>> transactionOrderEntry : transactionOrdersMap.entrySet()) {
485
 
486
				List<Order> orders = transactionOrderEntry.getValue();
487
 
488
				LocalDateTime createDate = orders.get(0).getCreateTimestamp();
489
 
490
				int fofoId = orders.get(0).getRetailerId();
491
 
492
				double loanSettleAmount = loanStatementRepository.selectByDateAndFofoId(createDate, fofoId).stream()
493
						.filter(x -> x.getAmount().doubleValue() > 0)
494
						.collect(Collectors.summingDouble(x -> x.getAmount().doubleValue()));
495
 
496
				transactionCreditMap.put(transactionOrderEntry.getKey(), loanSettleAmount);
497
 
498
			}
499
 
500
			model.addAttribute("transactionCreditMap", transactionCreditMap);
501
 
502
		}
503
 
504
		return "sanction-order-hold";
505
 
506
	}
507
 
508
	@RequestMapping(value = "/unholdOrder", method = RequestMethod.POST)
509
	public String unholdOrder(HttpServletRequest request, @RequestParam int transactionId, Model model)
510
			throws Exception {
511
 
512
		List<Order> orders = orderRepository.selectAllByTransactionId(transactionId);
513
 
514
		LOGGER.info("orders" + orders);
515
 
516
		if (!orders.isEmpty()) {
517
			orders.forEach(x -> x.setShipmentHold(false));
518
		}
519
 
520
		double totalAmount = orders.stream().collect(Collectors.summingDouble(x -> x.getTotalAmount()));
521
 
522
		try {
523
 
524
			List<String> authUserEmail = csService.getAuthUserIdByPartnerId(orders.get(0).getRetailerId()).stream()
525
					.map(x -> x.getEmailId()).collect(Collectors.toList());
526
 
527
			authUserEmail.add("vinay.p@smartdukaan.com");
528
			authUserEmail.add("shivam.gupta@smartdukaan.com");
529
 
530
			String[] emailTo = authUserEmail.toArray(new String[authUserEmail.size()]);
531
 
532
			String[] ccTo = { "tarun.verma@smartdukaan.com", "kamini.sharma@smartdukaan.com" };
533
 
534
			String subject = "Dispatched " + (orders.get(0).getRetailerName());
535
			String message = String.format("Dear Team, \n" + "Kindly note the meterial for the "
536
					+ orders.get(0).getRetailerName() + "of Rs." + totalAmount + " is dispatched.");
537
 
538
			LOGGER.info("message" + message);
539
 
540
			Utils.sendMailWithAttachments(mailSender, emailTo, ccTo, subject, message);
541
		} catch (Exception e) {
542
 
543
			e.printStackTrace();
544
 
545
		}
546
 
547
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
548
 
549
		return "response";
550
 
551
	}
552
 
30859 tejbeer 553
}