Subversion Repositories SmartDukaan

Rev

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