Subversion Repositories SmartDukaan

Rev

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