Subversion Repositories SmartDukaan

Rev

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