Subversion Repositories SmartDukaan

Rev

Rev 34069 | Rev 34096 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
23612 amit.gupta 1
package com.spice.profitmandi.web.controller;
2
 
3
import com.spice.profitmandi.common.enumuration.ReporticoProject;
4
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
33102 tejus.loha 5
import com.spice.profitmandi.common.model.CustomRetailer;
34066 aman.kumar 6
import com.spice.profitmandi.common.model.ProfitMandiConstants;
28106 amit.gupta 7
import com.spice.profitmandi.common.model.ReporticoUrlInfo;
23612 amit.gupta 8
import com.spice.profitmandi.common.services.ReporticoService;
30162 manish 9
import com.spice.profitmandi.common.util.FileUtil;
33102 tejus.loha 10
import com.spice.profitmandi.common.util.FormattingUtils;
26298 tejbeer 11
import com.spice.profitmandi.dao.entity.auth.AuthUser;
34066 aman.kumar 12
import com.spice.profitmandi.dao.entity.cs.Position;
33102 tejus.loha 13
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
14
import com.spice.profitmandi.dao.entity.fofo.PendingOrderItem;
33775 ranu 15
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
16
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
33102 tejus.loha 17
import com.spice.profitmandi.dao.model.*;
26298 tejbeer 18
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
19
import com.spice.profitmandi.dao.repository.cs.CsService;
34066 aman.kumar 20
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
28106 amit.gupta 21
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
23784 ashik.ali 22
import com.spice.profitmandi.dao.repository.dtr.RoleRepository;
33102 tejus.loha 23
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
24
import com.spice.profitmandi.dao.repository.fofo.PendingOrderItemRepository;
25
import com.spice.profitmandi.dao.repository.fofo.PendingOrderService;
33809 ranu 26
import com.spice.profitmandi.dao.repository.transaction.*;
23798 amit.gupta 27
import com.spice.profitmandi.service.authentication.RoleManager;
30162 manish 28
import com.spice.profitmandi.service.order.OrderService;
33775 ranu 29
import com.spice.profitmandi.service.transaction.TransactionService;
33102 tejus.loha 30
import com.spice.profitmandi.service.user.RetailerService;
33775 ranu 31
import com.spice.profitmandi.service.wallet.WalletService;
23612 amit.gupta 32
import com.spice.profitmandi.web.model.LoginDetails;
33
import com.spice.profitmandi.web.util.CookiesProcessor;
33775 ranu 34
import in.shop2020.model.v1.order.WalletReferenceType;
33092 tejus.loha 35
import org.apache.http.HttpResponse;
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.core.io.InputStreamResource;
40
import org.springframework.http.HttpHeaders;
41
import org.springframework.http.HttpStatus;
42
import org.springframework.http.ResponseEntity;
43
import org.springframework.stereotype.Controller;
44
import org.springframework.transaction.annotation.Transactional;
45
import org.springframework.ui.Model;
46
import org.springframework.web.bind.annotation.*;
23612 amit.gupta 47
 
33092 tejus.loha 48
import javax.servlet.http.HttpServletRequest;
49
import java.io.IOException;
50
import java.time.LocalDate;
51
import java.time.LocalDateTime;
52
import java.time.LocalTime;
53
import java.time.format.DateTimeFormatter;
54
import java.util.*;
33102 tejus.loha 55
import java.util.stream.Collectors;
33092 tejus.loha 56
 
23612 amit.gupta 57
@Controller
26298 tejbeer 58
@Transactional(rollbackFor = Throwable.class)
23612 amit.gupta 59
public class ReportsController {
33143 tejus.loha 60
    private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
61
    private static final Logger Logger = LogManager.getLogger(OrderController.class);
62
    @Autowired
63
    private RoleRepository roleRepository;
64
    @Autowired
65
    private FofoOrderRepository fofoOrderRepository;
66
    @Autowired
67
    private RetailerService retailerService;
68
    @Autowired
69
    private PendingOrderItemRepository pendingOrderItemRepository;
70
    @Autowired
71
    private PendingOrderService pendingOrderService;
72
    @Autowired
73
    private CookiesProcessor cookiesProcessor;
74
    @Autowired
75
    private FofoStoreRepository fofoStoreRepository;
76
    @Autowired
77
    private ReporticoService reporticoService;
78
    @Autowired
79
    private OrderRepository orderRepository;
80
    @Autowired
81
    private RoleManager roleManager;
82
    @Autowired
83
    private OrderService orderService;
84
    @Autowired
85
    private CsService csService;
86
    @Autowired
87
    private AuthRepository authRepository;
33775 ranu 88
    @Autowired
89
    private WalletService walletService;
90
    @Autowired
91
    private UserWalletHistoryRepository userWalletHistoryRepository;
92
    @Autowired
93
    private TransactionService transactionService;
33809 ranu 94
    @Autowired
95
    private LoanStatementRepository loanStatementRepository;
34066 aman.kumar 96
    @Autowired
97
    PositionRepository positionRepository;
26298 tejbeer 98
 
33186 amit.gupta 99
    @PostMapping(value = "/reports/{projectName}/{fileName}")
33143 tejus.loha 100
    public ResponseEntity<?> fetchReport(HttpServletRequest request, @PathVariable String fileName,
33187 amit.gupta 101
                                         @PathVariable ReporticoProject projectName, @RequestBody Map<String, String> paramsMap)
33143 tejus.loha 102
            throws ProfitMandiBusinessException, UnsupportedOperationException, IOException {
103
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
104
        HttpResponse response;
105
        if (roleManager.isAdmin(loginDetails.getRoleIds())) {
33102 tejus.loha 106
 
33143 tejus.loha 107
            if (fileName.equalsIgnoreCase("LeadsReport")) {
108
                if (paramsMap == null) {
109
                    paramsMap = new HashMap<String, String>();
110
                }
111
                Map<Integer, List<Integer>> mapping = csService.getL2L1Mapping();
33102 tejus.loha 112
 
33143 tejus.loha 113
                AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
33102 tejus.loha 114
 
33143 tejus.loha 115
                List<Integer> authIds = mapping.get(authUser.getId());
116
                if (authIds == null) {
117
                    authIds = new ArrayList<>();
118
                }
119
                authIds.add(authUser.getId());
33102 tejus.loha 120
 
33143 tejus.loha 121
                paramsMap.put("authId", authIds + "");
122
            }
123
        } else {
124
            if (paramsMap == null) {
125
                paramsMap = new HashMap<String, String>();
126
            }
26298 tejbeer 127
 
33143 tejus.loha 128
            paramsMap.put("MANUAL_fofoId", loginDetails.getFofoId() + "");
23764 amit.gupta 129
 
33143 tejus.loha 130
        }
131
        response = getAdminReportFile(loginDetails.getEmailId(), projectName, fileName + ".xml", paramsMap);
132
        HttpHeaders headers = new HttpHeaders();
133
        InputStreamResource is = new InputStreamResource(response.getEntity().getContent());
134
        headers.set("Content-Type", "application/vnd.ms-excel");
135
        headers.set("Content-disposition", "inline; filename=report-" + fileName + ".csv");
136
        headers.setContentLength(response.getEntity().getContentLength());
137
        return new ResponseEntity<InputStreamResource>(is, headers, HttpStatus.OK);
138
    }
26298 tejbeer 139
 
33143 tejus.loha 140
    private HttpResponse getAdminReportFile(String email, ReporticoProject projectName, String fileName,
141
                                            Map<String, String> reportParams) throws ProfitMandiBusinessException, IOException {
142
        return reporticoService.getReportFile(projectName, fileName, reportParams);
143
    }
26298 tejbeer 144
 
33143 tejus.loha 145
    @RequestMapping(value = "/collectionSummary", method = RequestMethod.GET)
146
    public String getCollectionSummary(HttpServletRequest request,
147
                                       Model model) throws ProfitMandiBusinessException {
148
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
149
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
150
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
151
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
152
        List<CollectionSummary> collectionSummaryList = orderRepository.selectCollectionSummary(fofoDetails.getFofoId(), currentStartMonth, currentDate);
153
        Logger.info("CollectionSummaryList {}", collectionSummaryList);
34069 aman.kumar 154
        boolean isRBM = false;
155
        if (isAdmin) {
156
            AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
157
            List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
158
            isRBM = positions.stream()
159
                    .anyMatch(position ->
160
                            ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
161
            Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
162
            if (isRBM && pp.containsKey(authUser.getId())) {
163
                Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
164
                Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
165
                    try {
166
                        return retailerService.getFofoRetailers(true).get(x);
167
                    } catch (ProfitMandiBusinessException e) {
168
                        // TODO Auto-generated catch block
169
                        return null;
170
                    }
171
                }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
172
                model.addAttribute("customRetailersMap", customRetailersMap);
173
            }
34066 aman.kumar 174
        }
175
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 176
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
177
        model.addAttribute("endDate", LocalDate.now());
178
        model.addAttribute("collectionSummaryList", collectionSummaryList);
179
        model.addAttribute("isAdmin", isAdmin);
180
        return "partner-collection-summary";
181
    }
26298 tejbeer 182
 
33143 tejus.loha 183
    @RequestMapping(value = "/collectionSummaryFetchReportByDate", method = RequestMethod.GET)
184
    public String getcollectionSummaryFetchReport(HttpServletRequest request,
185
                                                  @RequestParam(defaultValue = "0") int fofoId,
186
                                                  @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
187
                                                  @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
188
            throws Exception {
189
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
190
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
191
        if (isAdmin) {
192
            startDate = LocalDate.now().minusDays(30);
193
            endDate = LocalDate.now();
194
        }
34069 aman.kumar 195
        boolean isRBM = false;
196
        if (isAdmin) {
34066 aman.kumar 197
        AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
198
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 199
            isRBM = positions.stream()
34066 aman.kumar 200
                .anyMatch(position ->
201
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
202
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 203
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 204
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
205
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
206
                try {
207
                    return retailerService.getFofoRetailers(true).get(x);
208
                } catch (ProfitMandiBusinessException e) {
209
                    // TODO Auto-generated catch block
210
                    return null;
211
                }
212
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
213
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 214
            }
34066 aman.kumar 215
        }
216
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 217
        model.addAttribute("startDate", startDate);
218
        model.addAttribute("endDate", endDate);
219
        model.addAttribute("isAdmin", isAdmin);
23612 amit.gupta 220
 
26298 tejbeer 221
 
33143 tejus.loha 222
        if (isAdmin) {
223
            if (fofoId == 0) {
224
                //No need to send any data
225
                model.addAttribute("collectionSummaryList", new ArrayList<>());
226
                return "partner-collection-summary";
227
            } else {
228
                List<CollectionSummary> collectionSummaryList = orderRepository
229
                        .selectCollectionSummary(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
230
                model.addAttribute("collectionSummaryList", collectionSummaryList);
231
                return "partner-collection-summary";
232
            }
233
        } else {
234
            fofoId = fofoDetails.getFofoId();
235
            List<CollectionSummary> collectionSummaryList = orderRepository
236
                    .selectCollectionSummary(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
237
            model.addAttribute("collectionSummaryList", collectionSummaryList);
238
            return "partner-collection-summary";
26298 tejbeer 239
 
33143 tejus.loha 240
        }
241
    }
26298 tejbeer 242
 
33143 tejus.loha 243
    @RequestMapping(value = "/downloadCollectionSummary", method = RequestMethod.GET)
244
    public ResponseEntity<?> getDownloadCollectionSummary(HttpServletRequest request,
245
                                                          @RequestParam(defaultValue = "0") int fofoId,
246
                                                          @RequestParam(name = "startDate") LocalDate startDate,
247
                                                          @RequestParam(name = "endDate") LocalDate endDate, Model model) throws Exception {
248
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
249
        List<List<?>> rows = new ArrayList<>();
250
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
251
        List<CollectionSummary> collectionSummaryList = null;
252
        if (isAdmin) {
253
            if (fofoId == 0) {
254
                collectionSummaryList = new ArrayList<>();
255
            } else {
256
                collectionSummaryList = orderRepository.selectCollectionSummary(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
257
            }
258
        } else {
259
            collectionSummaryList = orderRepository.selectCollectionSummary(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
260
        }
261
        Logger.info("CollectionSummaryList {}", collectionSummaryList);
262
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
263
        for (CollectionSummary cs : collectionSummaryList) {
264
            rows.add(Arrays.asList(cs.getDate().format(
265
                            dateTimeFormatter), cs.getReferenceType(), cs.getCash(), cs.getPinelabs(), cs.getBajajFinserv(), cs.getHomeCredit(), cs.getPaytm(),
266
                    cs.getCapitalFirst(), cs.getZestMoney(), cs.getSamsungSure(), cs.getTotalAmount()));
267
        }
268
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
269
                .getCSVByteStream(Arrays.asList("Date", "Reference Type", "Cash", "Pinelabs", "Bajaj Finservice", "Home Credit", "Paymt",
270
                        "Capital First", "Zest Money", "Samsung Sure", "Total Amount"), rows);
271
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Collection Summary Report");
26298 tejbeer 272
 
33143 tejus.loha 273
        return responseEntity;
274
    }
26298 tejbeer 275
 
33143 tejus.loha 276
    @RequestMapping(value = "/franchiseeSalesReport", method = RequestMethod.GET)
277
    public String getFranchiseeSalesReport(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
278
                                           @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate)
279
            throws ProfitMandiBusinessException {
280
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
281
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
282
        if (startDate == null) {
283
            startDate = LocalDate.now().minusDays(30);
26298 tejbeer 284
 
33143 tejus.loha 285
        }
286
        endDate = LocalDate.now();
34069 aman.kumar 287
        boolean isRBM = false;
288
        if (isAdmin) {
34066 aman.kumar 289
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
290
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 291
            isRBM = positions.stream()
34066 aman.kumar 292
                .anyMatch(position ->
293
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
294
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 295
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 296
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
297
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
298
                try {
299
                    return retailerService.getFofoRetailers(true).get(x);
300
                } catch (ProfitMandiBusinessException e) {
301
                    // TODO Auto-generated catch block
302
                    return null;
303
                }
304
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
305
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 306
            }
34066 aman.kumar 307
        }
308
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 309
        model.addAttribute("startDate", startDate);
310
        model.addAttribute("endDate", endDate);
311
        model.addAttribute("isAdmin", isAdmin);
312
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
313
        if (isAdmin) {
314
            if (fofoId == 0) {
315
                //No need to pull any data
316
                model.addAttribute("focoSaleReportList", new ArrayList<>());
317
                return "foco-sale-report";
23637 amit.gupta 318
 
33143 tejus.loha 319
            }
320
        } else {
321
            fofoId = loginDetails.getFofoId();
322
        }
33102 tejus.loha 323
 
324
 
33143 tejus.loha 325
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoId);
33067 shampa 326
 
33143 tejus.loha 327
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoId, fs.getCode(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
328
        model.addAttribute("focoSaleReportList", focoSaleReportList);
329
        return "foco-sale-report";
330
    }
33067 shampa 331
 
33143 tejus.loha 332
    @RequestMapping(value = "/franchiseeSalesFetchReportByDate", method = RequestMethod.GET)
333
    public String getfranchiseeSalesFetchReport(HttpServletRequest request, Model model,
334
                                                @RequestParam(defaultValue = "0") int fofoId,
335
                                                @RequestParam(required = false) LocalDate startDate,
336
                                                @RequestParam(required = false) LocalDate endDate)
337
            throws Exception {
338
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
339
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
340
        if (startDate == null) {
33067 shampa 341
 
33143 tejus.loha 342
            startDate = LocalDate.now().minusDays(30);
343
            endDate = LocalDate.now();
344
        }
34069 aman.kumar 345
        boolean isRBM = false;
346
        if (isAdmin) {
34066 aman.kumar 347
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
348
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 349
            isRBM = positions.stream()
34066 aman.kumar 350
                .anyMatch(position ->
351
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
352
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 353
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 354
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
355
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
356
                try {
357
                    return retailerService.getFofoRetailers(true).get(x);
358
                } catch (ProfitMandiBusinessException e) {
359
                    // TODO Auto-generated catch block
360
                    return null;
361
                }
362
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
363
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 364
            }
34066 aman.kumar 365
        }
366
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 367
        model.addAttribute("startDate", startDate);
368
        model.addAttribute("endDate", endDate);
369
        model.addAttribute("isAdmin", isAdmin);
33102 tejus.loha 370
 
33143 tejus.loha 371
        // List<List<?>> rows = new ArrayList<>();
30162 manish 372
 
33143 tejus.loha 373
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
374
        if (isAdmin) {
375
            if (fofoId == 0) {
376
                //no need any data
377
                model.addAttribute("focoSaleReportList", new ArrayList<>());
378
                return "foco-sale-report";
379
            }
380
        } else {
381
            fofoId = loginDetails.getFofoId();
382
        }
383
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoId);
384
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoId, fs.getCode(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
385
        model.addAttribute("focoSaleReportList", focoSaleReportList);
386
        return "foco-sale-report";
387
    }
30162 manish 388
 
389
 
33143 tejus.loha 390
    @RequestMapping(value = "/downloadFranchiseeSales", method = RequestMethod.GET)
391
    public ResponseEntity<?> getdownloadFranchiseeSales(HttpServletRequest request,
392
                                                        @RequestParam(defaultValue = "0") int fofoId,
393
                                                        @RequestParam(name = "startDate") LocalDate startDate,
394
                                                        @RequestParam(name = "endDate") LocalDate endDate,
395
                                                        Model model)
396
            throws Exception {
397
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
33102 tejus.loha 398
 
33143 tejus.loha 399
        List<List<?>> rows = new ArrayList<>();
400
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
401
        List<FocoSaleReportModel> focoSaleReportList = null;
402
        FofoStore fs = null;
403
        if (isAdmin) {
404
            fs = fofoStoreRepository.selectByRetailerId(fofoId);
405
            if (fofoId == 0) {
406
                focoSaleReportList = new ArrayList<>();
407
            } else {
33102 tejus.loha 408
 
33143 tejus.loha 409
                focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoId,
34093 ranu 410
                        fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay().plusDays(1));
33143 tejus.loha 411
            }
33102 tejus.loha 412
 
33143 tejus.loha 413
        } else {
414
            fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
33102 tejus.loha 415
 
33143 tejus.loha 416
            focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
34093 ranu 417
                    fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay().plusDays(1));
33143 tejus.loha 418
        }
419
        LOGGER.info("FocoSaleReportList {}", focoSaleReportList);
420
        String partnerName = null;
421
        for (FocoSaleReportModel fsr : focoSaleReportList) {
422
            partnerName = fsr.getName();
423
            rows.add(Arrays.asList(fsr.getCode(), fsr.getName(), fsr.getCity(), fsr.getState(), fsr.getRegion(),
424
                    fsr.getItemId(), fsr.getBrand(), fsr.getModelName(), fsr.getModelNumber(), fsr.getColor(),
425
                    fsr.getQuantity(), fsr.getDp(), fsr.getSellingPrice(), fsr.getMop(), fsr.getSerialNumber(),
426
                    FormattingUtils.format(fsr.getCreateDate()), fsr.getCustomerName(), fsr.getCustomerPhone(),
427
                    fsr.getCustomerCity(), fsr.getCustomerPincode(), fsr.getInvoiceNumber(), fsr.getPurchaseReference(),
428
                    fsr.getCustomerGstNumber(), FormattingUtils.format(fsr.getCancelledTimestamp()),
429
                    FormattingUtils.format(fsr.getGrnCompleteDate()), fsr.getHygieneRating(), fsr.getRating(),
430
                    fsr.getStatus(), fsr.getRemark(), FormattingUtils.format(fsr.getCreatedTimestamp()),
431
                    FormattingUtils.format(fsr.getDisposedTimestamp()),
432
                    FormattingUtils.format(fsr.getNextTimestamp()),
433
                    FormattingUtils.format(fsr.getActivationTimestamp()),
434
                    FormattingUtils.format(fsr.getActivationTimestamp()), fsr.getLabel()));
33102 tejus.loha 435
 
33143 tejus.loha 436
        }
33102 tejus.loha 437
 
33143 tejus.loha 438
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
439
                Arrays.asList("Code", "Name", "City", "State", "Region", "Item Id", "Brand", "Model Name",
440
                        "Model Number", "Color", "Quantity", "Dp", "Selling_Price", "mop", "Serial Number",
441
                        "Create Date", "Customer Name", "Customer Phone", "Customer City", " Customer Pincode",
442
                        "Invoice  Number", "Purchase Reference", "Customer Gst Number", " Cancelled Timestamp",
443
                        "GRN Complete Date", "Hygiene Rating", "Rating", "Status", "Remark", "Created Timestamp",
444
                        "Disposed Timestamp", " Next Timestamp", "Activation Timestamp", "Create Timestamp", "Label"),
445
                rows);
33102 tejus.loha 446
 
33143 tejus.loha 447
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, partnerName + " Franchisee Sales Report");
33102 tejus.loha 448
 
33143 tejus.loha 449
        return responseEntity;
33102 tejus.loha 450
 
33143 tejus.loha 451
    }
33102 tejus.loha 452
 
33143 tejus.loha 453
    @RequestMapping(value = "/downloadWalletSummaryReport", method = RequestMethod.GET)
454
    public ResponseEntity<?> getDownloadWalletSummaryReport(HttpServletRequest request,
455
                                                            @RequestParam(defaultValue = "0", name = "fofoId") int fofoId,
456
                                                            @RequestParam(name = "startDate") LocalDate startDate,
457
                                                            @RequestParam(name = "endDate") LocalDate endDate, Model model)
458
            throws Exception {
33102 tejus.loha 459
 
33143 tejus.loha 460
        List<List<?>> rows = new ArrayList<>();
461
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
462
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
33815 ranu 463
        float openingBalance = 0;
464
        float openingPendingAmount = 0;
33143 tejus.loha 465
        List<WalletSummaryReportModel> walletSummartList = null;
466
        if (isAdmin) {
467
            if (fofoId == 0)
468
                walletSummartList = new ArrayList<>();
469
            else
33815 ranu 470
 
33143 tejus.loha 471
                walletSummartList = fofoOrderRepository.selectWalletSummaryReport(
472
                        fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33815 ranu 473
            openingBalance = walletService.getOpeningTill(fofoId, startDate.atStartOfDay());
474
            Map<Integer, Float> openingAmountMap = transactionService.getPendingIndentValueMap(startDate.atStartOfDay(), Optional.of(fofoId));
475
            openingPendingAmount = openingAmountMap.get(fofoId) == null ? 0 : openingAmountMap.get(fofoId);
476
 
33143 tejus.loha 477
        } else {
33102 tejus.loha 478
 
33143 tejus.loha 479
            walletSummartList = fofoOrderRepository.selectWalletSummaryReport(
480
                    fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33815 ranu 481
 
482
 
33143 tejus.loha 483
        }
33815 ranu 484
 
33143 tejus.loha 485
        LOGGER.info("walletSummartList {}", fofoId);
486
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
487
        String partnerDetail = null;
33815 ranu 488
// Headers for the table data
34066 aman.kumar 489
        rows.add(Arrays.asList(
490
//                "Id","Business_timestamp",
491
                "timestamp", "Reference_type", "Reference", "Amount", "Refundable_amount", "Running Balance", "Description"));
33143 tejus.loha 492
        for (WalletSummaryReportModel walletSummary : walletSummartList) {
493
            partnerDetail = walletSummary.getName() + "(" + walletSummary.getCode() + "-" + walletSummary.getPhone() + ")" + "-" + walletSummary.getEmail();
33102 tejus.loha 494
 
33143 tejus.loha 495
            rows.add(Arrays.asList(
34066 aman.kumar 496
//                    walletSummary.getId(),
497
//                    FormattingUtils.format(walletSummary.getBusinessTimestamp() != null ? walletSummary.getBusinessTimestamp() : walletSummary.getTimestamp()),
498
                    walletSummary.getTimestamp(),
499
                    walletSummary.getReferenceType(),
500
                    walletSummary.getReference(),
33143 tejus.loha 501
                    walletSummary.getAmount(),
502
                    walletSummary.getRefundableAmount(),
33815 ranu 503
                    openingBalance + walletSummary.getAmount(),
33143 tejus.loha 504
                    walletSummary.getDescription()
505
            ));
33102 tejus.loha 506
 
33143 tejus.loha 507
        }
33102 tejus.loha 508
 
33815 ranu 509
 
510
        float openingBalanceWithOpeningPendingAmount = openingPendingAmount + openingBalance;
33143 tejus.loha 511
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
33816 ranu 512
                .getCSVByteStream(Arrays.asList("Opening Balance - : " + openingBalanceWithOpeningPendingAmount), rows);
33143 tejus.loha 513
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, partnerDetail + " Wallet Statement Report");
33102 tejus.loha 514
 
33143 tejus.loha 515
        return responseEntity;
33102 tejus.loha 516
 
33143 tejus.loha 517
    }
33102 tejus.loha 518
 
33143 tejus.loha 519
    @RequestMapping(value = "/walletSummaryFetchReportByDate", method = RequestMethod.GET)
520
    public String getwalletSummaryFetchReport(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
521
                                              @RequestParam(required = false) LocalDate startDate,
522
                                              @RequestParam(required = false) LocalDate endDate)
523
            throws Exception {
524
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
525
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
526
        if (startDate == null) {
527
            startDate = LocalDate.now().minusDays(30);
528
        }
34011 tejus.loha 529
        if (endDate == null) {
530
            endDate = LocalDate.now();
531
        }
532
        List<WalletSummaryReportModel> walletSummartList = new ArrayList<>();
533
        float openingBalance = 0;
534
        float openingPendingAmount = 0;
33143 tejus.loha 535
        if (isAdmin) {
34011 tejus.loha 536
            if (fofoId > 0) {
537
                openingBalance = walletService.getOpeningTill(fofoId, startDate.atStartOfDay());
33815 ranu 538
                Map<Integer, Float> openingAmountMap = transactionService.getPendingIndentValueMap(startDate.atStartOfDay(), Optional.of(fofoId));
34011 tejus.loha 539
                openingPendingAmount = openingAmountMap.get(fofoId) == null ? 0 : openingAmountMap.get(fofoId);
540
                walletSummartList = fofoOrderRepository.selectWalletSummaryReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
541
                LOGGER.info("startDate - " + startDate.atStartOfDay());
542
                LOGGER.info("endDate - " + endDate.atTime(LocalTime.MAX));
33143 tejus.loha 543
            }
544
        } else {
34011 tejus.loha 545
            walletSummartList = fofoOrderRepository.selectWalletSummaryReport(loginDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33143 tejus.loha 546
        }
34069 aman.kumar 547
        boolean isRBM = false;
548
        if (isAdmin) {
34066 aman.kumar 549
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
550
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 551
            isRBM = positions.stream()
34066 aman.kumar 552
                .anyMatch(position ->
553
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
554
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 555
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 556
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
557
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
558
                try {
559
                    return retailerService.getFofoRetailers(true).get(x);
560
                } catch (ProfitMandiBusinessException e) {
561
                    // TODO Auto-generated catch block
562
                    return null;
563
                }
564
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
565
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 566
            }
34066 aman.kumar 567
        }
568
        model.addAttribute("isRBM", isRBM);
569
 
34011 tejus.loha 570
        LOGGER.info("walletSummartList {}", walletSummartList);
571
        model.addAttribute("walletSummartList", walletSummartList);
572
        model.addAttribute("openingBalance", (openingBalance + openingPendingAmount));
573
        model.addAttribute("startDate", startDate);
574
        model.addAttribute("endDate", endDate);
575
        model.addAttribute("isAdmin", isAdmin);
576
        return "wallet-summary-report";
33143 tejus.loha 577
    }
33102 tejus.loha 578
 
33143 tejus.loha 579
    @RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
580
    public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
581
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
582
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
34011 tejus.loha 583
        LocalDateTime startDate = LocalDateTime.now().minusDays(30);
584
        LocalDateTime endDate = LocalDateTime.now();
585
        List<WalletSummaryReportModel> walletSummartList = new ArrayList<>();
586
        if (!isAdmin) {
587
            walletSummartList = fofoOrderRepository
588
                    .selectWalletSummaryReport(fofoDetails.getFofoId(), startDate, endDate);
589
        }
34069 aman.kumar 590
        boolean isRBM = false;
591
        if (isAdmin) {
592
            AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
593
            List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
594
            isRBM = positions.stream()
595
                    .anyMatch(position ->
596
                            ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
597
            Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
598
            if (isRBM && pp.containsKey(authUser.getId())) {
599
                Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
600
                Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
601
                    try {
602
                        return retailerService.getFofoRetailers(true).get(x);
603
                    } catch (ProfitMandiBusinessException e) {
604
                        // TODO Auto-generated catch block
605
                        return null;
606
                    }
607
                }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
608
                model.addAttribute("customRetailersMap", customRetailersMap);
609
            }
34066 aman.kumar 610
        }
611
        model.addAttribute("isRBM", isRBM);
612
 
33143 tejus.loha 613
        LOGGER.info("walletSummartList {}", walletSummartList);
34011 tejus.loha 614
        model.addAttribute("startDate", startDate.toLocalDate());
615
        model.addAttribute("endDate", endDate.toLocalDate());
33143 tejus.loha 616
        model.addAttribute("walletSummartList", walletSummartList);
617
        model.addAttribute("isAdmin", isAdmin);
33102 tejus.loha 618
 
33143 tejus.loha 619
        return "wallet-summary-report";
620
    }
33102 tejus.loha 621
 
33143 tejus.loha 622
    @RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
623
    public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
624
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
625
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
34069 aman.kumar 626
        boolean isRBM = false;
627
        if (isAdmin) {
34066 aman.kumar 628
        AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
629
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 630
            isRBM = positions.stream()
34066 aman.kumar 631
                .anyMatch(position ->
632
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
633
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 634
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 635
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
636
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
637
                try {
638
                    return retailerService.getFofoRetailers(true).get(x);
639
                } catch (ProfitMandiBusinessException e) {
640
                    // TODO Auto-generated catch block
641
                    return null;
642
                }
643
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
644
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 645
            }
34066 aman.kumar 646
        }
647
        model.addAttribute("isRBM", isRBM);
33102 tejus.loha 648
 
33143 tejus.loha 649
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
650
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
33102 tejus.loha 651
 
33143 tejus.loha 652
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
653
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
654
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
33102 tejus.loha 655
 
33143 tejus.loha 656
        model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
657
        model.addAttribute("endDate", LocalDate.now());
658
        model.addAttribute("pendingIndentReports", pendingIndentReports);
659
        model.addAttribute("isAdmin", isAdmin);
33102 tejus.loha 660
 
661
 
33143 tejus.loha 662
        return "pending-indent-report";
663
    }
33102 tejus.loha 664
 
33143 tejus.loha 665
    @RequestMapping(value = "/pendingIndentFetchReportByDate", method = RequestMethod.GET)
666
    public String getpendingIndentFetchReport(
667
            HttpServletRequest request,
668
            @RequestParam(defaultValue = "0") int fofoId,
669
            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
670
            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate,
671
            Model model
672
    ) throws Exception {
673
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
674
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
675
        if (startDate == null) {
676
            startDate = LocalDate.now().minusDays(30);
677
            endDate = LocalDate.now();
678
        }
34069 aman.kumar 679
        boolean isRBM = false;
680
        if (isAdmin) {
34066 aman.kumar 681
        AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
682
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 683
            isRBM = positions.stream()
34066 aman.kumar 684
                .anyMatch(position ->
685
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
686
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 687
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 688
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
689
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
690
                try {
691
                    return retailerService.getFofoRetailers(true).get(x);
692
                } catch (ProfitMandiBusinessException e) {
693
                    // TODO Auto-generated catch block
694
                    return null;
695
                }
696
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
697
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 698
            }
34066 aman.kumar 699
        }
700
        model.addAttribute("isRBM", isRBM);
701
 
33143 tejus.loha 702
        model.addAttribute("startDate", startDate);
703
        model.addAttribute("endDate", endDate);
704
        model.addAttribute("isAdmin", isAdmin);
705
        if (isAdmin) {
706
            if (fofoId == 0) {
707
                model.addAttribute("pendingIndentReports", new ArrayList<>());
708
                return "pending-indent-report";
709
            } else {
710
                List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
711
                        .selectPendingIndentReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
712
                model.addAttribute("pendingIndentReports", pendingIndentReports);
713
                return "pending-indent-report";
714
            }
715
        } else {
716
            LocalDateTime currentDate = LocalDate.now().atStartOfDay();
717
            List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
718
                    .selectPendingIndentReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
719
            model.addAttribute("pendingIndentReports", pendingIndentReports);
720
            return "pending-indent-report";
33102 tejus.loha 721
 
33143 tejus.loha 722
        }
723
    }
33102 tejus.loha 724
 
725
 
33143 tejus.loha 726
    @RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
727
    public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request,
728
                                                            @RequestParam(defaultValue = "0") int fofoId,
729
                                                            @RequestParam(name = "startDate") LocalDate startDate,
730
                                                            @RequestParam(name = "endDate") LocalDate endDate, Model model)
731
            throws Exception {
732
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
733
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
33102 tejus.loha 734
        /*LocalDateTime currentDate = LocalDate.now().atStartOfDay();
735
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();*/
33143 tejus.loha 736
        List<PendingIndentReportModel> pendingIndentReports = null;
737
        List<List<?>> rows = new ArrayList<>();
738
        if (isAdmin) {
739
            if (fofoId == 0)
740
                pendingIndentReports = new ArrayList<>();
741
            else
742
                pendingIndentReports = fofoOrderRepository
743
                        .selectPendingIndentReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
744
        } else {
745
            pendingIndentReports = fofoOrderRepository
746
                    .selectPendingIndentReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33102 tejus.loha 747
 
33143 tejus.loha 748
        }
749
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
750
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
33102 tejus.loha 751
 
33143 tejus.loha 752
        for (PendingIndentReportModel pir : pendingIndentReports) {
33102 tejus.loha 753
 
33143 tejus.loha 754
            rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(),
755
                    pir.getCreatTimestamp().format(dateTimeFormatter), pir.getItemId(), pir.getBrand(),
756
                    pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(), pir.getUnitPrice(),
757
                    pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
758
                    pir.getBillingTimestamp() == null ? "" : pir.getBillingTimestamp().format(dateTimeFormatter)));
33102 tejus.loha 759
 
33143 tejus.loha 760
        }
33102 tejus.loha 761
 
33143 tejus.loha 762
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
763
                "Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
764
                "Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
33102 tejus.loha 765
 
33143 tejus.loha 766
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
33102 tejus.loha 767
 
33143 tejus.loha 768
        return responseEntity;
769
    }
33102 tejus.loha 770
 
33143 tejus.loha 771
    @RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
772
    public String getschemePayoutReport(HttpServletRequest request, Model model,
773
                                        @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate)
774
            throws ProfitMandiBusinessException {
33102 tejus.loha 775
 
33143 tejus.loha 776
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
777
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
778
        if (startDate == null) {
779
            startDate = LocalDate.now().minusDays(30);
780
            endDate = LocalDate.now();
781
        }
34069 aman.kumar 782
        boolean isRBM = false;
783
        if (isAdmin) {
34066 aman.kumar 784
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
785
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 786
            isRBM = positions.stream()
34066 aman.kumar 787
                .anyMatch(position ->
788
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
789
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 790
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 791
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
792
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
793
                try {
794
                    return retailerService.getFofoRetailers(true).get(x);
795
                } catch (ProfitMandiBusinessException e) {
796
                    // TODO Auto-generated catch block
797
                    return null;
798
                }
799
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
800
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 801
            }
34066 aman.kumar 802
        }
803
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 804
        model.addAttribute("startDate", startDate);
805
        model.addAttribute("endDate", endDate);
806
        model.addAttribute("isAdmin", isAdmin);
807
        //LOGGER.info("schemePayoutReports {}", schemePayoutReports);
808
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
809
                .selectSchemePayoutReport(loginDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
810
        model.addAttribute("schemePayoutReports", schemePayoutReports);
811
        return "scheme-payout-report";
33102 tejus.loha 812
 
33143 tejus.loha 813
    }
33102 tejus.loha 814
 
33143 tejus.loha 815
    @RequestMapping(value = "/schemePayoutFetchReportByDate", method = RequestMethod.GET)
816
    public String getschemePayoutFetchReportByDate(
817
            HttpServletRequest request,
818
            Model model,
819
            @RequestParam(defaultValue = "0") int fofoId,
820
            @RequestParam(required = false) LocalDate startDate,
821
            @RequestParam(required = false) LocalDate endDate)
822
            throws ProfitMandiBusinessException {
823
        //LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
824
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
825
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
826
        if (startDate == null) {
827
            startDate = LocalDate.now().minusDays(30);
828
            endDate = LocalDate.now();
829
        }
34069 aman.kumar 830
        boolean isRBM = false;
831
        if (isAdmin) {
34066 aman.kumar 832
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
833
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 834
            isRBM = positions.stream()
34066 aman.kumar 835
                .anyMatch(position ->
836
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
837
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 838
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 839
            List<Integer> fofoIds = pp.get(authUser.getId());
840
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
841
                try {
842
                    return retailerService.getFofoRetailers(true).get(x);
843
                } catch (ProfitMandiBusinessException e) {
844
                    // TODO Auto-generated catch block
845
                    return null;
846
                }
847
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
848
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 849
            }
34066 aman.kumar 850
        }
851
 
852
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 853
        model.addAttribute("startDate", startDate);
854
        model.addAttribute("endDate", endDate);
855
        model.addAttribute("isAdmin", isAdmin);
33102 tejus.loha 856
 
33143 tejus.loha 857
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
858
        if (isAdmin) {
859
            if (fofoId == 0) {
860
                //No need to pull any data
861
                model.addAttribute("schemePayoutReports", new ArrayList<>());
862
                return "scheme-payout-report";
33102 tejus.loha 863
 
33143 tejus.loha 864
            } else {
865
                List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
866
                        .selectSchemePayoutReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33102 tejus.loha 867
 
33143 tejus.loha 868
                model.addAttribute("schemePayoutReports", schemePayoutReports);
869
                return "scheme-payout-report";
870
            }
871
        } else {
872
            fofoId = loginDetails.getFofoId();
33102 tejus.loha 873
 
33143 tejus.loha 874
            List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
875
                    .selectSchemePayoutReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33102 tejus.loha 876
 
33143 tejus.loha 877
            model.addAttribute("schemePayoutReports", schemePayoutReports);
878
            return "scheme-payout-report";
879
        }
33102 tejus.loha 880
 
33143 tejus.loha 881
    }
33102 tejus.loha 882
 
33143 tejus.loha 883
    @RequestMapping(value = "/offerPayoutReport", method = RequestMethod.GET)
884
    public String getOfferPayoutReport(HttpServletRequest request, Model model, @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate) throws Exception {
885
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
886
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
34069 aman.kumar 887
        boolean isRBM = false;
888
        if (isAdmin) {
34066 aman.kumar 889
        AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
890
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 891
            isRBM = positions.stream()
34066 aman.kumar 892
                .anyMatch(position ->
893
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
894
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 895
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 896
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
897
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
898
                try {
899
                    return retailerService.getFofoRetailers(true).get(x);
900
                } catch (ProfitMandiBusinessException e) {
901
                    // TODO Auto-generated catch block
902
                    return null;
903
                }
904
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
905
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 906
            }
34066 aman.kumar 907
        }
908
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 909
        if (startDate == null) {
910
            startDate = LocalDate.now().minusDays(30);
911
            endDate = LocalDate.now();
912
        }
913
        model.addAttribute("startDate", startDate);
914
        model.addAttribute("endDate", endDate);
33102 tejus.loha 915
 
916
 
33143 tejus.loha 917
        List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
918
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
919
        LOGGER.info("offerPayoutDumpReports {}", offerPayoutDumpReports);
33102 tejus.loha 920
 
33143 tejus.loha 921
        model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
922
        model.addAttribute("isAdmin", isAdmin);
33102 tejus.loha 923
 
33143 tejus.loha 924
        return "offer-payout-dump-report";
925
    }
33102 tejus.loha 926
 
33143 tejus.loha 927
    @RequestMapping(value = "/offerPayoutFetchReportByDate", method = RequestMethod.GET)
928
    public String getofferPayoutFetchReportByDate(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
929
                                                  @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate)
930
            throws ProfitMandiBusinessException {
33102 tejus.loha 931
 
33143 tejus.loha 932
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
933
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
934
        if (startDate == null) {
935
            startDate = LocalDate.now().minusDays(30);
936
            endDate = LocalDate.now();
937
        }
34069 aman.kumar 938
        boolean isRBM = false;
939
        if (isAdmin) {
34066 aman.kumar 940
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
941
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 942
            isRBM = positions.stream()
34066 aman.kumar 943
                .anyMatch(position ->
944
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
945
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 946
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 947
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
948
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
949
                try {
950
                    return retailerService.getFofoRetailers(true).get(x);
951
                } catch (ProfitMandiBusinessException e) {
952
                    // TODO Auto-generated catch block
953
                    return null;
954
                }
955
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
956
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 957
            }
34066 aman.kumar 958
        }
959
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 960
        model.addAttribute("startDate", startDate);
961
        model.addAttribute("endDate", endDate);
962
        model.addAttribute("isAdmin", isAdmin);
963
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
964
        if (isAdmin) {
965
            if (fofoId == 0) {
966
                //No need to pull any data
967
                model.addAttribute("offerPayoutReports", new ArrayList<>());
968
                return "offer-payout-dump-report";
33102 tejus.loha 969
 
33143 tejus.loha 970
            } else {
971
                List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
972
                        .selectOfferPayoutDumpReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33102 tejus.loha 973
 
33143 tejus.loha 974
                model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
33102 tejus.loha 975
 
976
 
33143 tejus.loha 977
                return "offer-payout-dump-report";
33102 tejus.loha 978
 
33143 tejus.loha 979
            }
980
        } else {
981
            fofoId = loginDetails.getFofoId();
982
            List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
983
                    .selectOfferPayoutDumpReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33102 tejus.loha 984
 
33143 tejus.loha 985
            model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
33102 tejus.loha 986
 
987
 
33143 tejus.loha 988
            return "offer-payout-dump-report";
989
        }
990
    }
33102 tejus.loha 991
 
992
 
33143 tejus.loha 993
    @RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
994
    public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
995
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
33102 tejus.loha 996
 
33143 tejus.loha 997
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
998
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
33102 tejus.loha 999
 
33143 tejus.loha 1000
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1001
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
33102 tejus.loha 1002
 
33143 tejus.loha 1003
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1004
        model.addAttribute("endDate", LocalDate.now());
1005
        model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
33102 tejus.loha 1006
 
33143 tejus.loha 1007
        return "partner-billing-summary-report";
1008
    }
33102 tejus.loha 1009
 
33143 tejus.loha 1010
    @RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
1011
    public String getSelectPriceDropReport(HttpServletRequest request, @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1012
                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model) throws Exception {
1013
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1014
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
1015
        if (startDate == null) {
1016
            startDate = LocalDate.now().minusDays(30);
1017
            endDate = LocalDate.now();
1018
        }
34069 aman.kumar 1019
        boolean isRBM = false;
1020
        if (isAdmin) {
1021
            AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
1022
            List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
1023
            isRBM = positions.stream()
1024
                    .anyMatch(position ->
1025
                            ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
1026
            Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
1027
            if (pp.containsKey(authUser.getId())) {
1028
                Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
1029
                Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
1030
                    try {
1031
                        return retailerService.getFofoRetailer(x);
1032
                    } catch (ProfitMandiBusinessException e) {
1033
                        // TODO Auto-generated catch block
1034
                        return null;
1035
                    }
1036
                }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1037
                model.addAttribute("customRetailersMap", customRetailersMap);
1038
            }
34066 aman.kumar 1039
        }
1040
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 1041
        model.addAttribute("startDate", startDate);
1042
        model.addAttribute("endDate", endDate);
1043
        model.addAttribute("isAdmin", isAdmin);
1044
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1045
                startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33102 tejus.loha 1046
 
33143 tejus.loha 1047
        model.addAttribute("priceDropReports", priceDropReports);
33102 tejus.loha 1048
 
33143 tejus.loha 1049
        return "price-drop-report";
1050
    }
33102 tejus.loha 1051
 
33143 tejus.loha 1052
    @RequestMapping(value = "/priceDropFetchReportByDate", method = RequestMethod.GET)
1053
    public String getpriceDropFetchReportByDate(HttpServletRequest request,
1054
                                                @RequestParam(defaultValue = "0") int fofoId,
1055
                                                @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1056
                                                @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1057
            throws Exception {
33102 tejus.loha 1058
 
33143 tejus.loha 1059
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1060
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
1061
        if (startDate == null) {
1062
            startDate = LocalDate.now().minusDays(30);
1063
            endDate = LocalDate.now();
1064
        }
34069 aman.kumar 1065
        boolean isRBM = false;
1066
        if (isAdmin) {
1067
            AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
1068
            List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
1069
            isRBM = positions.stream()
1070
                    .anyMatch(position ->
1071
                            ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
1072
            Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
1073
            if (pp.containsKey(authUser.getId())) {
1074
                Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
1075
                Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
1076
                    try {
1077
                        return retailerService.getFofoRetailer(x);
1078
                    } catch (ProfitMandiBusinessException e) {
1079
                        // TODO Auto-generated catch block
1080
                        return null;
1081
                    }
1082
                }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1083
                model.addAttribute("customRetailersMap", customRetailersMap);
1084
            }
34066 aman.kumar 1085
        }
1086
        model.addAttribute("isRBM", isRBM);
33143 tejus.loha 1087
        model.addAttribute("startDate", startDate);
1088
        model.addAttribute("endDate", endDate);
1089
        model.addAttribute("isAdmin", isAdmin);
1090
        if (isAdmin) {
1091
            if (fofoId == 0) {
1092
                model.addAttribute("priceDropReports", new ArrayList<>());
1093
                return "price-drop-report";
1094
            } else {
1095
                List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoId,
1096
                        startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1097
                model.addAttribute("priceDropReports", priceDropReports);
1098
                return "price-drop-report";
1099
            }
33102 tejus.loha 1100
 
33143 tejus.loha 1101
        } else {
1102
            List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1103
                    startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1104
            model.addAttribute("priceDropReports", priceDropReports);
1105
            return "price-drop-report";
1106
        }
1107
    }
33102 tejus.loha 1108
 
1109
 
33143 tejus.loha 1110
    @RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
1111
    public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request,
1112
                                                              @RequestParam(defaultValue = "0") int fofoId,
1113
                                                              @RequestParam(name = "startDate") LocalDate startDate,
1114
                                                              @RequestParam(name = "endDate") LocalDate endDate, Model model)
1115
            throws Exception {
1116
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1117
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
1118
        List<List<?>> rows = new ArrayList<>();
1119
        List<PriceDropReportModel> priceDropReports = null;
1120
        if (isAdmin) {
1121
            if (fofoId == 0)
1122
                priceDropReports = new ArrayList<>();
1123
            else
1124
                priceDropReports = orderRepository.selectPriceDropReport(fofoId,
1125
                        startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1126
        } else {
1127
            fofoId = fofoDetails.getFofoId();
1128
            priceDropReports = orderRepository.selectPriceDropReport(fofoId,
1129
                    startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1130
        }
1131
        for (PriceDropReportModel pdr : priceDropReports) {
33102 tejus.loha 1132
 
33143 tejus.loha 1133
            rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
1134
                    FormattingUtils.formatDate(pdr.getAffectedOn()), pdr.getAmount(), FormattingUtils.format(pdr.getCreditTimestamp()), pdr.getImei(), pdr.getStatus(),
1135
                    FormattingUtils.format(pdr.getRejectedTimestamp()), pdr.getRejectionReason()));
33102 tejus.loha 1136
 
33143 tejus.loha 1137
        }
1138
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1139
                .getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
1140
                        "affected_on", "amount", "Credit Date", "Imei", "status", "Rejected Date", "Rejected Reason"), rows);
33102 tejus.loha 1141
 
33143 tejus.loha 1142
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
33102 tejus.loha 1143
 
33143 tejus.loha 1144
        return responseEntity;
33102 tejus.loha 1145
 
33143 tejus.loha 1146
    }
33102 tejus.loha 1147
 
33143 tejus.loha 1148
    @RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
1149
    public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
1150
                                                                    @RequestParam(name = "startDate") LocalDate startDate,
1151
                                                                    @RequestParam(name = "endDate") LocalDate endDate, Model model)
1152
            throws Exception {
33102 tejus.loha 1153
 
33143 tejus.loha 1154
        List<List<?>> rows = new ArrayList<>();
1155
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
33102 tejus.loha 1156
 
33143 tejus.loha 1157
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1158
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
33102 tejus.loha 1159
 
33143 tejus.loha 1160
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1161
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), startDate.atStartOfDay(),
1162
                        endDate.atTime(LocalTime.MAX));
33102 tejus.loha 1163
 
33143 tejus.loha 1164
        for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
33102 tejus.loha 1165
 
33143 tejus.loha 1166
            rows.add(Arrays.asList(pbsr.getId(),
1167
                    FormattingUtils.format(pbsr.getCreateTimestamp()),
1168
                    FormattingUtils.format(pbsr.getBillingTimestamp()),
1169
                    FormattingUtils.format(pbsr.getDeliveryTimestamp()),
1170
                    FormattingUtils.format(pbsr.getPartnerGrnTimestamp()),
1171
                    pbsr.getTransactionId(),
1172
                    pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(), pbsr.getStatusSubGroup(),
1173
                    pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(), pbsr.getItemId(),
1174
                    pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(), pbsr.getUnitPrice(),
1175
                    pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(), pbsr.getSellerName(), pbsr.getGstNumber(), pbsr.getHsnCode(), pbsr.getIgstRate(),
1176
                    pbsr.getCgstRate(), pbsr.getSgstRate()));
33102 tejus.loha 1177
 
33143 tejus.loha 1178
        }
33102 tejus.loha 1179
 
33143 tejus.loha 1180
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
1181
                "Created On", "Billed On", "Delivered On", "Grned On", "Transaction_id", "master_order_id",
1182
                "airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
1183
                "model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
1184
                "seller_name", "gst_number", "hsn_code", "igstrate", "cgstrate", "sgstrate"), rows);
33102 tejus.loha 1185
 
33143 tejus.loha 1186
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
33102 tejus.loha 1187
 
33143 tejus.loha 1188
        return responseEntity;
33102 tejus.loha 1189
 
1190
 
33143 tejus.loha 1191
    }
33102 tejus.loha 1192
 
33143 tejus.loha 1193
    @RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1194
    public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
1195
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
33102 tejus.loha 1196
 
33143 tejus.loha 1197
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1198
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
33102 tejus.loha 1199
 
33143 tejus.loha 1200
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1201
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1202
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
33102 tejus.loha 1203
 
33143 tejus.loha 1204
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1205
        model.addAttribute("endDate", LocalDate.now());
1206
        model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
33102 tejus.loha 1207
 
33143 tejus.loha 1208
        return "invoicewise-scheme-out-report";
1209
    }
33102 tejus.loha 1210
 
33143 tejus.loha 1211
    @RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1212
    public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
1213
            throws Exception {
1214
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
33102 tejus.loha 1215
 
33143 tejus.loha 1216
        List<List<?>> rows = new ArrayList<>();
1217
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1218
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
33102 tejus.loha 1219
 
33143 tejus.loha 1220
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1221
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1222
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
33102 tejus.loha 1223
 
33143 tejus.loha 1224
        for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
1225
            rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
1226
                    fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
33102 tejus.loha 1227
 
33143 tejus.loha 1228
        }
33102 tejus.loha 1229
 
33143 tejus.loha 1230
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1231
                Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
1232
                rows);
33102 tejus.loha 1233
 
33143 tejus.loha 1234
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
1235
                "invoice wise scheme out Summary Report");
33102 tejus.loha 1236
 
33143 tejus.loha 1237
        return responseEntity;
1238
    }
33102 tejus.loha 1239
 
33143 tejus.loha 1240
    @RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
1241
    public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request,
1242
                                                           @RequestParam(defaultValue = "0") int fofoId,
1243
                                                           @RequestParam(name = "startDate") LocalDate startDate,
1244
                                                           @RequestParam(name = "endDate") LocalDate endDate, Model model)
1245
            throws Exception {
1246
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
33102 tejus.loha 1247
 
33143 tejus.loha 1248
        List<List<?>> rows = new ArrayList<>();
33102 tejus.loha 1249
 
33143 tejus.loha 1250
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
33102 tejus.loha 1251
 
33143 tejus.loha 1252
        List<SchemePayoutReportModel> schemePayoutReports = null;
1253
        if (isAdmin) {
1254
            if (fofoId == 0)
1255
                schemePayoutReports = new ArrayList<>();
1256
            else
1257
                schemePayoutReports = fofoOrderRepository
1258
                        .selectSchemePayoutReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1259
        } else {
1260
            fofoId = fofoDetails.getFofoId();
1261
            schemePayoutReports = fofoOrderRepository
1262
                    .selectSchemePayoutReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1263
        }
1264
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
33102 tejus.loha 1265
 
33143 tejus.loha 1266
        for (SchemePayoutReportModel spr : schemePayoutReports) {
33102 tejus.loha 1267
 
33143 tejus.loha 1268
            rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
1269
                    spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
33646 amit.gupta 1270
                    spr.getName(), spr.getType(), spr.getAmount(), spr.getAmountType(), spr.getSioAmount(), spr.getPurchaseReference(),
33656 amit.gupta 1271
                    spr.getInvoiceNumber(), spr.getStatus(), spr.getStatusDescription(),
33646 amit.gupta 1272
                    FormattingUtils.formatDateTime(spr.getCreateTimestamp()), FormattingUtils.formatDateTime(spr.getRolledBackTimestamp())));
33102 tejus.loha 1273
 
33143 tejus.loha 1274
        }
33646 amit.gupta 1275
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item Id",
1276
                "Serial No", "Brand", "Model Name", "Model Number", "Color", "Scheme In Dp", "Scheme Out Dp",
33656 amit.gupta 1277
                "Scheme Id", "Name", "Scheme Type", "Amount", "Amount Type", "Amount Paid", "Purchase Invoice", "Sale Invoice", "Status",
33646 amit.gupta 1278
                "Description", "Created on", "Reversed On"), rows);
33102 tejus.loha 1279
 
33143 tejus.loha 1280
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
33102 tejus.loha 1281
 
33143 tejus.loha 1282
        return responseEntity;
1283
    }
33102 tejus.loha 1284
 
1285
 
33143 tejus.loha 1286
    @RequestMapping(value = "/offerPayoutDumpReportDownload", method = RequestMethod.GET)
1287
    public ResponseEntity<?> getOfferPayoutDumpReportDownload(HttpServletRequest request,
1288
                                                              @RequestParam(defaultValue = "0") int fofoId,
1289
                                                              @RequestParam(name = "startDate") LocalDate startDate,
1290
                                                              @RequestParam(name = "endDate") LocalDate endDate, Model model)
1291
            throws Exception {
1292
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1293
        List<List<?>> rows = new ArrayList<>();
1294
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
1295
        List<OfferPayoutDumpReportModel> offerPayoutReports = null;
1296
        if (isAdmin) {
1297
            if (fofoId == 0)
1298
                offerPayoutReports = new ArrayList<>();
1299
            else
1300
                offerPayoutReports = fofoOrderRepository
1301
                        .selectOfferPayoutDumpReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1302
        } else {
1303
            fofoId = fofoDetails.getFofoId();
1304
            offerPayoutReports = fofoOrderRepository
1305
                    .selectOfferPayoutDumpReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1306
        }
33102 tejus.loha 1307
 
1308
 
33143 tejus.loha 1309
        for (OfferPayoutDumpReportModel opdr : offerPayoutReports) {
33102 tejus.loha 1310
 
33143 tejus.loha 1311
            rows.add(Arrays.asList(opdr.getId(), opdr.getBrand(), opdr.getModelName(),
1312
                    opdr.getModelNumber(), opdr.getColor(), opdr.getSerialNumber(), opdr.getOfferId(),
1313
                    opdr.getName(), opdr.getType(),
1314
                    opdr.getSlabAmount(), opdr.getAmount(), opdr.getDescription(),
1315
                    opdr.getCreateTimestamp(), opdr.getRejectTimestamp()));
33102 tejus.loha 1316
 
33143 tejus.loha 1317
        }
1318
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Id",
1319
                "Brand", "Model Name", "Model Number", "Color", "Serial number",
1320
                "Offer Id", "Name", "Type", "Slab Amount", "Amount",
1321
                "Description", "Credited On", "Rejected On"), rows);
33102 tejus.loha 1322
 
33143 tejus.loha 1323
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Offer Payout Summary Report");
33102 tejus.loha 1324
 
33143 tejus.loha 1325
        return responseEntity;
1326
    }
33102 tejus.loha 1327
 
1328
 
33143 tejus.loha 1329
    @GetMapping("/getAllOnlineOrder")
1330
    public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
1331
            throws ProfitMandiBusinessException {
1332
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1333
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1334
        if (date == null) {
1335
            date = LocalDate.now().minusDays(3);
1336
        }
33102 tejus.loha 1337
 
33143 tejus.loha 1338
        LOGGER.info("date" + date);
1339
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1340
                .collect(Collectors.toList());
33102 tejus.loha 1341
 
33143 tejus.loha 1342
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
33102 tejus.loha 1343
 
33143 tejus.loha 1344
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1345
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1346
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
33102 tejus.loha 1347
 
33143 tejus.loha 1348
        model.addAttribute("customRetailersMap", customRetailersMap);
33102 tejus.loha 1349
 
33143 tejus.loha 1350
        List<PendingOrderItem> pendingOrderItem = null;
33102 tejus.loha 1351
 
33143 tejus.loha 1352
        pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
33102 tejus.loha 1353
 
33143 tejus.loha 1354
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
33102 tejus.loha 1355
 
33143 tejus.loha 1356
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1357
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1358
        model.addAttribute("date", date);
1359
        model.addAttribute("isAdmin", isAdmin);
1360
        return "online-all-order-item";
1361
    }
33102 tejus.loha 1362
 
33143 tejus.loha 1363
 
1364
    @RequestMapping(value = "/reports", method = RequestMethod.GET)
1365
    public String reports(HttpServletRequest httpServletRequest, Model model) throws ProfitMandiBusinessException, UnsupportedOperationException, IOException {
1366
        //LoginDetails loginDetails = cookiesProcessor.getCookiesObject(httpServletRequest);
1367
        Map<ReporticoProject, List<ReporticoUrlInfo>> returnMap = ReporticoProject.reporticoProjectMap;
28137 amit.gupta 1368
		/*if(fofoStoreRepository.getWarehousePartnerMap().get(7720).stream().filter(x->x.getId()==loginDetails.getFofoId()).count() > 0) {
28106 amit.gupta 1369
			Map<ReporticoProject, List<ReporticoUrlInfo>> returnMap1 = new HashMap<ReporticoProject, List<ReporticoUrlInfo>>();
1370
			returnMap1.put(ReporticoProject.FOCO, returnMap.get(ReporticoProject.FOCO));
1371
			returnMap1.put(ReporticoProject.FOCOR, returnMap.get(ReporticoProject.FOCOR).stream().skip(1).collect(Collectors.toList()));
28107 amit.gupta 1372
			returnMap = returnMap1;
28137 amit.gupta 1373
		}*/
33143 tejus.loha 1374
        model.addAttribute("reporticoProjectMap", returnMap);
1375
        return "reports";
1376
    }
33775 ranu 1377
 
1378
    @RequestMapping(value = "/account-statement", method = RequestMethod.GET)
1379
    public String accountStatement(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
1380
                                   @RequestParam(required = false) LocalDate startDate,
1381
                                   @RequestParam(required = false) LocalDate endDate)
1382
            throws Exception {
1383
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1384
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1385
 
34069 aman.kumar 1386
        boolean isRBM = false;
1387
        if (isAdmin) {
34066 aman.kumar 1388
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
1389
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 1390
            isRBM = positions.stream()
34066 aman.kumar 1391
                .anyMatch(position ->
1392
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
1393
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 1394
            if (isRBM && pp.containsKey(authUser.getId())) {
34066 aman.kumar 1395
            Set<Integer> fofoIds = new HashSet<>(pp.get(authUser.getId()));
1396
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> {
1397
                try {
1398
                    return retailerService.getFofoRetailers(true).get(x);
1399
                } catch (ProfitMandiBusinessException e) {
1400
                    // TODO Auto-generated catch block
1401
                    return null;
1402
                }
1403
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1404
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 1405
            }
34066 aman.kumar 1406
        }
1407
 
33775 ranu 1408
        model.addAttribute("isAdmin", isAdmin);
34066 aman.kumar 1409
        model.addAttribute("isRBM", isRBM);
33775 ranu 1410
 
1411
        return "partner-account-statement";
1412
 
1413
    }
1414
 
1415
    @RequestMapping(value = "/account-statement-report", method = RequestMethod.GET)
1416
    public String getPartnerAccountStatement(HttpServletRequest request, @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, Model model, @RequestParam(defaultValue = "0") int fofoId) throws Exception {
1417
        boolean isAdmin = roleManager.isAdmin(cookiesProcessor.getCookiesObject(request).getRoleIds());
1418
        if (fofoId > 0) {
1419
            if (!isAdmin) {
1420
                throw new ProfitMandiBusinessException("Unauthorised access", "PartnerId", "Permission Denied");
1421
            }
1422
        } else {
1423
            fofoId = cookiesProcessor.getCookiesObject(request).getFofoId();
1424
        }
1425
        float openingBalance = walletService.getOpeningTill(fofoId, startDate);
1426
        float closingBalance = walletService.getOpeningTill(fofoId, endDate);
1427
        UserWallet uw = walletService.getUserWallet(fofoId);
1428
        LOGGER.info("Start date - {}, end Date - {}", startDate, endDate);
1429
 
1430
        List<UserWalletHistory> history = userWalletHistoryRepository.selectPaginatedByWalletId(uw.getId(), startDate, endDate, 0, 0);
1431
 
1432
        history = history.stream().filter(x -> !x.getReferenceType().equals(WalletReferenceType.PURCHASE))
1433
                .filter(x -> !WalletService.CN_WALLET_REFERENCES.contains(x.getReferenceType())).sorted(Comparator.comparing(UserWalletHistory::getId)).collect(Collectors.toList());
1434
        Map<LocalDate, List<UserWalletHistory>> dateWalletMap = history.stream().collect(Collectors.groupingBy(x -> x.getTimestamp().toLocalDate()));
1435
        CustomRetailer customRetailer = retailerService.getAllFofoRetailers().get(fofoId);
1436
        List<StatementDetailModel> billedStatementDetails = orderRepository.selectDetailsBetween(fofoId, startDate, endDate);
1437
        Map<Integer, Float> openingAmountMap = transactionService.getPendingIndentValueMap(startDate, Optional.of(fofoId));
1438
        Map<Integer, Float> closingAmountMap = transactionService.getPendingIndentValueMap(endDate, Optional.of(fofoId));
1439
 
1440
        float openingPendingAmount = openingAmountMap.get(fofoId) == null ? 0 : openingAmountMap.get(fofoId);
1441
        float closingPendingAmount = closingAmountMap.get(fofoId) == null ? 0 : closingAmountMap.get(fofoId);
1442
        LOGGER.info("Opening - {}, Closing - {}", openingPendingAmount, closingPendingAmount);
1443
 
1444
        double grandTotalDebit = 0;
1445
        double grandTotalCredit = 0;
1446
 
1447
        for (UserWalletHistory walletEntry : history) {
1448
            if (walletEntry.getAmount() < 0) {
1449
                grandTotalDebit += Math.abs(walletEntry.getAmount());
1450
            } else {
1451
                grandTotalCredit += walletEntry.getAmount();
1452
            }
1453
        }
1454
 
1455
        for (StatementDetailModel statement : billedStatementDetails) {
1456
            if (statement.getAmount() < 0) {
1457
                grandTotalCredit += Math.abs(statement.getAmount());
1458
            } else {
1459
                grandTotalDebit += statement.getAmount();
1460
            }
1461
        }
1462
 
1463
        model.addAttribute("billedStatementDetails", billedStatementDetails);
1464
        model.addAttribute("customRetailer", customRetailer);
1465
        model.addAttribute("wallethistory", history);
1466
        model.addAttribute("startDate", startDate);
1467
        model.addAttribute("endDate", endDate);
1468
        model.addAttribute("dateWalletMap", dateWalletMap);
1469
        model.addAttribute("openingBalance", (openingBalance + openingPendingAmount));
1470
        model.addAttribute("closingBalance", (closingBalance + closingPendingAmount));
1471
        model.addAttribute("grandTotalDebit", grandTotalDebit);
1472
        model.addAttribute("grandTotalCredit", grandTotalCredit);
1473
 
1474
        return "account-statement-list";
1475
    }
33809 ranu 1476
 
1477
    @RequestMapping(value = "/loan/loan-statement", method = RequestMethod.GET)
33814 ranu 1478
    public String loanStatement(HttpServletRequest request, Model model)
33809 ranu 1479
            throws Exception {
1480
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1481
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
34069 aman.kumar 1482
        boolean isRBM = false;
1483
        if (isAdmin) {
34066 aman.kumar 1484
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
1485
        List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
34069 aman.kumar 1486
            isRBM = positions.stream()
34066 aman.kumar 1487
                .anyMatch(position ->
1488
                        ProfitMandiConstants.TICKET_CATEGORY_RBM == position.getCategoryId());
1489
        Map<Integer, List<Integer>> pp = csService.getAuthUserIdPartnerIdMapping();
34069 aman.kumar 1490
            if (isRBM && pp.containsKey(authUser.getId())) {
1491
                List<Integer> fofoIds = pp.get(authUser.getId());
34066 aman.kumar 1492
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(fofoId -> {
1493
                try {
1494
                    return retailerService.getFofoRetailers(true).get(fofoId);
1495
                } catch (ProfitMandiBusinessException e) {
1496
                    // TODO Auto-generated catch block
1497
                    return null;
1498
                }
1499
            }).filter(x -> x != null).collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1500
            model.addAttribute("customRetailersMap", customRetailersMap);
34069 aman.kumar 1501
            }
34066 aman.kumar 1502
        }
1503
        model.addAttribute("isRBM", isRBM);
33809 ranu 1504
        model.addAttribute("isAdmin", isAdmin);
1505
 
1506
        return "partner-loan-statement";
1507
 
1508
    }
1509
 
1510
    @RequestMapping(value = "/loan/partner-loan-statement-report", method = RequestMethod.GET)
1511
    public String partnerLoanStatement(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
1512
                                       @RequestParam(required = false) LocalDateTime startDate,
1513
                                       @RequestParam(required = false) LocalDateTime endDate)
1514
            throws Exception {
1515
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1516
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1517
        int partnerId = 0;
1518
 
1519
        if (fofoId > 0) {
1520
            partnerId = fofoId;
1521
        } else {
1522
            partnerId = loginDetails.getFofoId();
1523
        }
1524
 
1525
        FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(partnerId);
1526
 
1527
        List<LoanStatementReportModel> loanStatementReportModels = loanStatementRepository.selectByDatesAndStoreCode(startDate, endDate, fofoStore.getCode());
1528
 
1529
        model.addAttribute("isAdmin", isAdmin);
1530
        model.addAttribute("loanStatementReportModels", loanStatementReportModels);
1531
 
1532
        return "partner-loan-statement-summary";
1533
 
1534
    }
1535
 
1536
    @RequestMapping(value = "/loan/download-partner-loan-statement-report", method = RequestMethod.GET)
1537
    public ResponseEntity<?> downloadPartnerLoanStatement(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
1538
                                                          @RequestParam(required = false) LocalDateTime startDate,
1539
                                                          @RequestParam(required = false) LocalDateTime endDate)
1540
            throws Exception {
1541
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1542
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1543
 
1544
        int partnerId = 0;
1545
 
1546
        if (fofoId > 0) {
1547
            partnerId = fofoId;
1548
        } else {
1549
            partnerId = loginDetails.getFofoId();
1550
        }
1551
 
1552
        FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(partnerId);
1553
 
1554
        List<List<?>> rows = new ArrayList<>();
1555
 
1556
        List<LoanStatementReportModel> loanStatementReportModels = loanStatementRepository.selectByDatesAndStoreCode(startDate, endDate, fofoStore.getCode());// Extract the store name from the first loan statement
1557
        String storeName = loanStatementReportModels.get(0).getStoreName();
1558
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
1559
        for (LoanStatementReportModel loanStatement : loanStatementReportModels) {
1560
            rows.add(Arrays.asList(
1561
                    loanStatement.getCode(),  // Code
1562
                    String.valueOf(loanStatement.getId()),  // ID (convert int to string)
1563
                    loanStatement.getStoreName(),  // Store Name
1564
                    loanStatement.getState(),  // State
1565
                    loanStatement.getZone(),  // Zone
1566
                    loanStatement.getArea(),  // Area
1567
                    loanStatement.getTerritory(),  // Territory
1568
                    String.valueOf(loanStatement.getLoanId()),  // Loan ID
1569
                    loanStatement.getInterestRate().toString(),  // Interest Rate (BigDecimal to String)
1570
                    loanStatement.getIntialAmount().toString(),  // Initial Amount (BigDecimal to String)
1571
                    loanStatement.getPendingAmount().toString(),  // Pending Amount (BigDecimal to String)
1572
                    loanStatement.getCreatedOn().format(dateTimeFormatter),  // Created On (format LocalDateTime)
1573
                    loanStatement.getDueDate().format(dateTimeFormatter),  // Due Date (format LocalDateTime)
1574
                    loanStatement.getInterestAccrued().toString(),  // Interest Accrued (BigDecimal to String)
1575
                    loanStatement.getInterestPaid().toString(),  // Interest Paid (BigDecimal to String)
1576
                    String.valueOf(loanStatement.getFreeDays()),  // Free Days (convert int to string)
1577
                    loanStatement.getLoanReferenceType().toString(),  // Loan Reference Type (enum or string)
1578
                    loanStatement.getAmount().toString(),  // Amount (BigDecimal to String)
1579
                    loanStatement.getBusinessDate().format(dateTimeFormatter),  // Business Date (format LocalDateTime)
1580
                    loanStatement.getCreatedAt().format(dateTimeFormatter),  // Created At (format LocalDateTime)
1581
                    loanStatement.getDescription(),  // Description
1582
                    loanStatement.getStatus()  // Status (calculated value)
1583
            ));
1584
        }
1585
 
1586
        // Set up the headers and create the CSV
1587
        List<String> headers = Arrays.asList("Code", "ID", "Store Name", "State", "Zone", "Area", "Territory", "Loan ID",
1588
                "Interest Rate", "Initial Amount", "Pending Amount", "Created On", "Due Date",
1589
                "Interest Accrued", "Interest Paid", "Free Days", "Loan Reference Type",
1590
                "Amount", "Business Date", "Created At", "Description", "Status");
1591
 
1592
        // Create the CSV byte stream
1593
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
1594
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Partner Loan Summary Report");
1595
 
1596
        return responseEntity;
1597
 
1598
    }
23612 amit.gupta 1599
}