Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
28468 tejbeer 1
package com.spice.profitmandi.service;
2
 
3
import com.google.gson.Gson;
4
import com.spice.profitmandi.common.enumuration.MessageType;
5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30250 amit.gupta 6
import com.spice.profitmandi.common.model.*;
28468 tejbeer 7
import com.spice.profitmandi.dao.Interface.Campaign;
33087 amit.gupta 8
import com.spice.profitmandi.dao.entity.catalog.BrandCatalog;
28468 tejbeer 9
import com.spice.profitmandi.dao.entity.dtr.Document;
10
import com.spice.profitmandi.dao.entity.dtr.NotificationCampaign;
11
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
12
import com.spice.profitmandi.dao.entity.fofo.PartnerTargetDetails;
13
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
14
import com.spice.profitmandi.dao.model.BrandWiseModel;
15
import com.spice.profitmandi.dao.model.SimpleCampaign;
16
import com.spice.profitmandi.dao.model.SimpleCampaignParams;
17
import com.spice.profitmandi.dao.repository.dtr.DocumentRepository;
18
import com.spice.profitmandi.dao.repository.dtr.Mongo;
30250 amit.gupta 19
import com.spice.profitmandi.dao.repository.fofo.*;
28468 tejbeer 20
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
33087 amit.gupta 21
import com.spice.profitmandi.service.catalog.BrandsService;
28468 tejbeer 22
import com.spice.profitmandi.service.inventory.InventoryService;
30250 amit.gupta 23
import org.apache.logging.log4j.LogManager;
24
import org.apache.logging.log4j.Logger;
25
import org.springframework.beans.factory.annotation.Autowired;
26
import org.springframework.stereotype.Component;
28468 tejbeer 27
 
30250 amit.gupta 28
import java.time.*;
29
import java.time.format.DateTimeFormatter;
30
import java.util.*;
31
import java.util.Map.Entry;
32
import java.util.stream.Collectors;
33
 
28468 tejbeer 34
@Component
35
public class FofoUser {
36
 
31884 tejbeer 37
    @Autowired
38
    private Gson gson;
28468 tejbeer 39
 
31884 tejbeer 40
    @Autowired
41
    private PartnerInvestmentService partnerInvestmentService;
28468 tejbeer 42
 
31884 tejbeer 43
    @Autowired
44
    private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
28468 tejbeer 45
 
31884 tejbeer 46
    @Autowired
47
    ChartService chartService;
28468 tejbeer 48
 
31884 tejbeer 49
    @Autowired
50
    FofoOrderItemRepository fofoOrderItemRepository;
28468 tejbeer 51
 
31884 tejbeer 52
    @Autowired
53
    FofoOrderRepository fofoOrderRepository;
28468 tejbeer 54
 
31884 tejbeer 55
    @Autowired
56
    PartnerTypeChangeService partnerTypeChangeService;
28468 tejbeer 57
 
31884 tejbeer 58
    @Autowired
59
    PartnerTargetRepository partnerTargetRepository;
28468 tejbeer 60
 
31884 tejbeer 61
    @Autowired
62
    InventoryService inventoryService;
28468 tejbeer 63
 
31884 tejbeer 64
    @Autowired
65
    private Mongo mongoClient;
28468 tejbeer 66
 
31884 tejbeer 67
    @Autowired
68
    private OrderRepository orderRepository;
28468 tejbeer 69
 
31884 tejbeer 70
    @Autowired
71
    DocumentRepository documentRepository;
28468 tejbeer 72
 
31884 tejbeer 73
    @Autowired
33087 amit.gupta 74
    BrandsService brandsService;
75
 
76
    @Autowired
31884 tejbeer 77
    CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
28468 tejbeer 78
 
31884 tejbeer 79
    private static final Logger LOGGER = LogManager.getLogger(FofoUser.class);
28468 tejbeer 80
 
31884 tejbeer 81
    List<String> colorList = Arrays.asList("papayawhip", "mediumseagreen", "dodgerblue", "darkblue", "gold", "#eb0029", "coral", "steelblue", "red", "deeppink", "midnightblue", "cornsilk");
28468 tejbeer 82
 
31884 tejbeer 83
    List<String> borderList = Arrays.asList("pink", "lawngreen", "lightblue", "#0000cd", "#f7e98e", "#eb0029", "lightcoral", "#0000cd", "lightsalmon", "pink", "#0000cd", "cornsilk");
28468 tejbeer 84
 
31884 tejbeer 85
    List<String> brands = Arrays.asList("Accessories", "Oppo", "Vivo", "Samsung", "Realme", "Xiaomi", "OnePlus", "Tecno", "Itel", "Lava", "Nokia");
28468 tejbeer 86
 
31884 tejbeer 87
    public String format(long value) {
88
        String finalval = null;
28468 tejbeer 89
 
31884 tejbeer 90
        if (value >= 100000 && value < 10000000) {
91
            long reminder = value / 100000;
92
            long quitonent = value % 100000;
93
            String secondval = String.format("%05d", quitonent);
94
            secondval = secondval.substring(0, 2);
95
            finalval = reminder + "." + secondval;
96
            return String.valueOf(finalval) + " Lacs";
97
        } else if (value >= 1000 && value < 100000) {
98
            long reminder = value / 1000;
99
            long quitonent = value % 1000;
100
            String secondval = String.format("%03d", quitonent);
101
            secondval = secondval.substring(0, 2);
102
            finalval = reminder + "." + secondval;
103
            return String.valueOf(finalval) + " K";
104
        } else if (value >= 10000000 && value < 1000000000) {
105
            long reminder = value / 10000000;
106
            long quitonent = value % 10000000;
107
            finalval = reminder + "." + quitonent;
108
            String secondval = String.format("%07d", quitonent);
109
            secondval = secondval.substring(0, 2);
110
            finalval = reminder + "." + secondval;
111
            return String.valueOf(finalval) + " Cr";
112
        }
113
        return String.valueOf(finalval);
28468 tejbeer 114
 
31884 tejbeer 115
    }
28468 tejbeer 116
 
31884 tejbeer 117
    public List<BrandStockPrice> getBrandStockPrices(int fofoId, boolean allBrands) throws Exception {
118
        Map<String, BrandStockPrice> brandStockPricesMap = inventoryService.getBrandWiseStockValue(fofoId);
119
        List<BrandStockPrice> brandStockPrices = new ArrayList<>();
33127 amit.gupta 120
        List<BrandCatalog> mobileBrands = brandsService.getBrandsToDisplay(3);
31884 tejbeer 121
        mobileBrands.stream().forEach(x -> {
33087 amit.gupta 122
            if (brandStockPricesMap.containsKey(x.getName())) {
123
                BrandStockPrice brandStockPrice = brandStockPricesMap.get(x.getName());
33119 amit.gupta 124
                brandStockPrice.setBrandUrl(x.getLogoUrl());
33087 amit.gupta 125
                brandStockPrice.setRank(x.getBrandCategory().getRank());
31884 tejbeer 126
                brandStockPrices.add(brandStockPrice);
127
            }
128
        });
28468 tejbeer 129
 
31884 tejbeer 130
        if (allBrands) {
131
            return brandStockPrices.stream().sorted(Comparator.comparingInt(BrandStockPrice::getRank)).collect(Collectors.toList());
28468 tejbeer 132
 
31884 tejbeer 133
        }
28468 tejbeer 134
 
31884 tejbeer 135
        return brandStockPrices.stream().filter(x -> x.getTotalQty() > 0).sorted(Comparator.comparingInt(BrandStockPrice::getRank)).collect(Collectors.toList());
136
    }
28468 tejbeer 137
 
31884 tejbeer 138
    public Map<String, Object> getInvestments(int fofoId) throws Exception {
139
        Map<String, Object> investments = new LinkedHashMap<>();
140
        PartnerDailyInvestment investment = partnerInvestmentService.getInvestment(fofoId, 0);
141
        LocalDate currentMonthStart = LocalDate.now().withDayOfMonth(1);
142
        LocalDate yesterDate = LocalDate.now().minusDays(1);
143
        PartnerDailyInvestment yesterdayInvestment = partnerDailyInvestmentRepository.select(fofoId, yesterDate);
144
        if (yesterdayInvestment == null) {
145
            yesterdayInvestment = new PartnerDailyInvestment();
146
        }
28468 tejbeer 147
 
31884 tejbeer 148
        List<PartnerDailyInvestment> currentMonthInvestments = partnerDailyInvestmentRepository.selectAll(fofoId, currentMonthStart, currentMonthStart.withDayOfMonth(currentMonthStart.lengthOfMonth()));
28468 tejbeer 149
 
31884 tejbeer 150
        long okInvestmentDays = currentMonthInvestments.stream().filter(x -> x.getShortPercentage() <= 10).collect(Collectors.counting());
151
        investments.put("today", investment.getTotalInvestment());
152
        investments.put("investment", investment);
153
        investments.put("inStock", investment.getInStockAmount());
154
        investments.put("minimum", investment.getMinInvestmentString());
155
        investments.put("short", investment.getShortPercentage());
156
        investments.put("activated_stock", investment.getActivatedStockAmount());
157
        investments.put("okDays", okInvestmentDays);
158
        return investments;
159
    }
28468 tejbeer 160
 
31884 tejbeer 161
    public Map<String, Object> getInvestmentsMonths(int fofoId, int month) throws Exception {
162
        Map<String, Object> investments = new LinkedHashMap<>();
163
        PartnerDailyInvestment investment = partnerInvestmentService.getInvestment(fofoId, 0);
164
        LocalDate currentMonthStart = LocalDate.now().withDayOfMonth(1).minusMonths(month);
28468 tejbeer 165
 
31884 tejbeer 166
        LocalDate yesterDate = LocalDate.now().minusDays(1);
167
        PartnerDailyInvestment yesterdayInvestment = partnerDailyInvestmentRepository.select(fofoId, yesterDate);
168
        if (yesterdayInvestment == null) {
169
            yesterdayInvestment = new PartnerDailyInvestment();
170
        }
28468 tejbeer 171
 
31884 tejbeer 172
        List<PartnerDailyInvestment> currentMonthInvestments = partnerDailyInvestmentRepository.selectAll(fofoId, currentMonthStart, currentMonthStart.withDayOfMonth(currentMonthStart.lengthOfMonth()));
28468 tejbeer 173
 
31884 tejbeer 174
        long okInvestmentDays = currentMonthInvestments.stream().filter(x -> x.getShortPercentage() <= 10).collect(Collectors.counting());
175
        investments.put("today", investment.getTotalInvestment());
176
        investments.put("investment", investment);
177
        investments.put("inStock", investment.getInStockAmount());
178
        investments.put("minimum", investment.getMinInvestmentString());
179
        investments.put("short", investment.getShortPercentage());
180
        investments.put("activated_stock", investment.getActivatedStockAmount());
181
        investments.put("okDays", okInvestmentDays);
182
        return investments;
183
    }
28468 tejbeer 184
 
31884 tejbeer 185
    public ChartModel getLmsLineChart(int fofoId) throws ProfitMandiBusinessException {
28468 tejbeer 186
 
31884 tejbeer 187
        LocalDateTime curDate = LocalDate.now().atStartOfDay();
188
        Map<String, Map<YearMonth, Double>> brandMonthValue = new HashMap<>();
189
        Map<YearMonth, Map<String, Double>> monthValueMap = new HashMap<>();
28468 tejbeer 190
 
31884 tejbeer 191
        Map<String, Double> lmsBrandWiseSale = null;
28468 tejbeer 192
 
31884 tejbeer 193
        for (int i = 0; i <= 6; i++) {
28530 tejbeer 194
 
31884 tejbeer 195
            LocalDateTime startOfMonth = curDate.withDayOfMonth(1).minusMonths(i);
28468 tejbeer 196
 
31884 tejbeer 197
            LOGGER.info("startOfMonth" + startOfMonth);
28468 tejbeer 198
 
31884 tejbeer 199
            lmsBrandWiseSale = fofoOrderItemRepository.selectSumAmountGroupByBrand(
200
                    curDate.withDayOfMonth(1).minusMonths(i), curDate.withDayOfMonth(1).minusMonths(i - 1), fofoId);
28468 tejbeer 201
 
31884 tejbeer 202
            Map<Integer, Double> accesorieslmsSale = fofoOrderRepository.selectSumSaleGroupByFofoIdsForMobileOrAccessories(fofoId, curDate.withDayOfMonth(1).minusMonths(i), curDate.withDayOfMonth(1).minusMonths(i - 1), Optional.of(false));
203
            LOGGER.info("lmsBrandWiseSale" + lmsBrandWiseSale);
28468 tejbeer 204
 
31884 tejbeer 205
            lmsBrandWiseSale.put("Accessories", accesorieslmsSale.get(fofoId));
28468 tejbeer 206
 
31884 tejbeer 207
            monthValueMap.put(YearMonth.from(startOfMonth), lmsBrandWiseSale);
208
            for (Entry<String, Double> lbw : lmsBrandWiseSale.entrySet()) {
209
                Map<YearMonth, Double> yearMonthValue = new HashMap<>();
210
                if (brandMonthValue.containsKey(lbw.getKey())) {
211
                    yearMonthValue = brandMonthValue.get(lbw.getKey());
212
                    yearMonthValue.put(YearMonth.from(startOfMonth), lbw.getValue());
213
                } else {
28468 tejbeer 214
 
31884 tejbeer 215
                    yearMonthValue.put(YearMonth.from(startOfMonth), lbw.getValue());
28468 tejbeer 216
 
31884 tejbeer 217
                }
218
                brandMonthValue.put(lbw.getKey(), yearMonthValue);
28468 tejbeer 219
 
31884 tejbeer 220
            }
28530 tejbeer 221
 
31884 tejbeer 222
        }
28468 tejbeer 223
 
31884 tejbeer 224
        LOGGER.info("brandMonthValue" + brandMonthValue);
28468 tejbeer 225
 
31884 tejbeer 226
        Map<String, List<Double>> sortedBrandValue = new LinkedHashMap<>();
28468 tejbeer 227
 
31884 tejbeer 228
        for (String brand : brands) {
229
            Map<YearMonth, Double> yearMonthValue = brandMonthValue.get(brand);
230
            for (int i = 6; i >= 0; i--) {
28468 tejbeer 231
 
31884 tejbeer 232
                LocalDateTime startMonth = curDate.withDayOfMonth(1).minusMonths(i);
233
                LOGGER.info("startMonth" + startMonth);
28468 tejbeer 234
 
31884 tejbeer 235
                if (yearMonthValue != null) {
236
                    if (yearMonthValue.get(YearMonth.from(startMonth)) == null) {
237
                        yearMonthValue.put(YearMonth.from(startMonth), 0.0);
238
                    }
28468 tejbeer 239
 
31884 tejbeer 240
                } else {
241
                    yearMonthValue = new HashMap<>();
242
                    yearMonthValue.put(YearMonth.from(startMonth), 0.0);
243
                }
244
            }
28468 tejbeer 245
 
31884 tejbeer 246
            Map<YearMonth, Double> sortedMonthBrandValue = new TreeMap<>(yearMonthValue);
28468 tejbeer 247
 
31884 tejbeer 248
            brandMonthValue.put(brand, sortedMonthBrandValue);
28468 tejbeer 249
 
31884 tejbeer 250
            sortedBrandValue.put(brand, sortedMonthBrandValue.values().stream().collect(Collectors.toList()));
28530 tejbeer 251
 
31884 tejbeer 252
        }
28468 tejbeer 253
 
31884 tejbeer 254
        LOGGER.info("brandMonthValue" + brandMonthValue);
28468 tejbeer 255
 
31884 tejbeer 256
        LOGGER.info("sortedBrandValue" + sortedBrandValue);
28468 tejbeer 257
 
31884 tejbeer 258
        ChartModel cm = chartService.createChart(6, sortedBrandValue, colorList, borderList, "Brand Wise LMS");
28468 tejbeer 259
 
31884 tejbeer 260
        return cm;
28468 tejbeer 261
 
31884 tejbeer 262
    }
28530 tejbeer 263
 
31884 tejbeer 264
    public ChartModel getPurchaseOrderChart(int fofoId) throws ProfitMandiBusinessException {
28530 tejbeer 265
 
31884 tejbeer 266
        LocalDateTime curDate = LocalDate.now().atStartOfDay();
28468 tejbeer 267
 
31884 tejbeer 268
        LOGGER.info("startMonth" + curDate.withDayOfMonth(1).minusMonths(6));
28468 tejbeer 269
 
31884 tejbeer 270
        LocalDateTime startOfMonth = curDate.withDayOfMonth(1).minusMonths(1);
271
        List<BrandWiseModel> soblms = orderRepository.selectAllBilledOrderGroupByBrandFofoId(fofoId, curDate.withDayOfMonth(1).minusMonths(6));
272
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("MM-yyyy");
273
        Map<String, Map<YearMonth, Double>> brandMonthValue = new HashMap<>();
274
        for (BrandWiseModel bwl : soblms) {
275
            Map<YearMonth, Double> yearMonthValue = new HashMap<>();
276
            if (brandMonthValue.containsKey(bwl.getBrand())) {
277
                yearMonthValue = brandMonthValue.get(bwl.getBrand());
278
                yearMonthValue.put(YearMonth.parse(bwl.getYearMonth(), dateTimeFormatter), (double) bwl.getAmount());
279
            } else {
28468 tejbeer 280
 
31884 tejbeer 281
                yearMonthValue.put(YearMonth.parse(bwl.getYearMonth(), dateTimeFormatter), (double) bwl.getAmount());
28468 tejbeer 282
 
31884 tejbeer 283
            }
284
            brandMonthValue.put(bwl.getBrand(), yearMonthValue);
28468 tejbeer 285
 
31884 tejbeer 286
        }
287
        LOGGER.info("soblms" + brandMonthValue);
28468 tejbeer 288
 
31884 tejbeer 289
        Map<String, List<Double>> sortedBrandValue = new LinkedHashMap<>();
28468 tejbeer 290
 
31884 tejbeer 291
        for (String brand : brands) {
292
            Map<YearMonth, Double> yearMonthValue = brandMonthValue.get(brand);
293
            for (int i = 6; i >= 0; i--) {
28468 tejbeer 294
 
31884 tejbeer 295
                LocalDateTime startMonth = curDate.withDayOfMonth(1).minusMonths(i);
28468 tejbeer 296
 
31884 tejbeer 297
                if (yearMonthValue != null) {
298
                    if (yearMonthValue.get(YearMonth.from(startMonth)) == null) {
299
                        yearMonthValue.put(YearMonth.from(startMonth), 0.0);
300
                    }
28468 tejbeer 301
 
31884 tejbeer 302
                } else {
303
                    yearMonthValue = new HashMap<>();
304
                    yearMonthValue.put(YearMonth.from(startMonth), 0.0);
305
                }
306
            }
28468 tejbeer 307
 
31884 tejbeer 308
            Map<YearMonth, Double> sortedMonthBrandValue = new TreeMap<>(yearMonthValue);
28468 tejbeer 309
 
31884 tejbeer 310
            brandMonthValue.put(brand, sortedMonthBrandValue);
28530 tejbeer 311
 
31884 tejbeer 312
            sortedBrandValue.put(brand, sortedMonthBrandValue.values().stream().collect(Collectors.toList()));
28530 tejbeer 313
 
31884 tejbeer 314
        }
28468 tejbeer 315
 
31884 tejbeer 316
        LOGGER.info("brandMonthValue" + brandMonthValue);
28468 tejbeer 317
 
31884 tejbeer 318
        ChartModel cm = chartService.createChart(6, sortedBrandValue, colorList, borderList, "Brand Wise Monthly Purchase");
28468 tejbeer 319
 
31884 tejbeer 320
        return cm;
28468 tejbeer 321
 
31884 tejbeer 322
    }
28468 tejbeer 323
 
33245 ranu 324
    public Map<String, Object> getSales(int fofoId) throws ProfitMandiBusinessException {
28468 tejbeer 325
 
31884 tejbeer 326
        Map<String, Object> salesMap = new LinkedHashMap<>();
327
        LocalDateTime now = LocalDateTime.now();
328
        LocalDateTime startOfToday = LocalDate.now().atStartOfDay();
329
        int monthLength = LocalDate.now().lengthOfMonth();
330
        int daysGone = now.getDayOfMonth() - 1;
331
        int daysRemaining = monthLength - daysGone;
332
        Double todaySale = fofoOrderItemRepository.selectSumMopGroupByRetailer(startOfToday, now, fofoId, false).get(fofoId);
333
        Double mtdSaleTillYesterDay = fofoOrderItemRepository.selectSumMopGroupByRetailer(startOfToday.withDayOfMonth(1), startOfToday, fofoId, false).get(fofoId);
334
        Double mtdSale = mtdSaleTillYesterDay + todaySale;
335
        Double lmtdSale = fofoOrderItemRepository.selectSumMopGroupByRetailer(
336
                startOfToday.withDayOfMonth(1).minusMonths(1), now.minusMonths(1), fofoId, false).get(fofoId);
28468 tejbeer 337
 
31884 tejbeer 338
        List<PartnerTargetDetails> partnerTargetDetails = partnerTargetRepository.selectAllGeEqAndLeEqStartDateAndEndDate(LocalDateTime.now());
339
        if (partnerTargetDetails.isEmpty()) {
340
            partnerTargetDetails = partnerTargetRepository.selectAllGeEqAndLeEqStartDateAndEndDate(LocalDateTime.now().minusMonths(3));
341
        }
28468 tejbeer 342
 
31884 tejbeer 343
        PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fofoId, LocalDate.now());
28468 tejbeer 344
 
31884 tejbeer 345
        int currentRate = 0;
346
        if (mtdSaleTillYesterDay > 0) {
347
            currentRate = (int) (mtdSaleTillYesterDay / daysGone);
348
        }
28468 tejbeer 349
 
31884 tejbeer 350
        salesMap.put("requiredType", partnerType.next());
351
        float reqdAmount = partnerTypeChangeService.getMinimumAmount(partnerType.next());
352
        int requiredRate = (int) ((reqdAmount - mtdSaleTillYesterDay) / daysRemaining);
353
        if (partnerType.equals(PartnerType.PLATINUM) && requiredRate < currentRate) {
354
            requiredRate = currentRate;
355
        }
356
        salesMap.put("requiredRate", requiredRate);
357
        salesMap.put("requiredTypeImage", PartnerType.imageMap.get(partnerType.next()));
28468 tejbeer 358
 
31884 tejbeer 359
        salesMap.put("todaySale", todaySale == null ? 0 : todaySale);
360
        salesMap.put("mtdSale", mtdSale == null ? 0 : mtdSale);
361
        salesMap.put("lmtdSale", lmtdSale == null ? 0 : lmtdSale);
28468 tejbeer 362
 
31884 tejbeer 363
        PartnerType currentType = partnerTypeChangeService.getPartnerTypeByAmount(currentRate * monthLength);
364
        salesMap.put("currentRate", currentRate);
365
        salesMap.put("currentType", currentType);
366
        salesMap.put("currentTypeImage", PartnerType.imageMap.get(currentType));
367
        return salesMap;
368
    }
28468 tejbeer 369
 
31884 tejbeer 370
    public ChartModel getBrandChart(int fofoId) {
28468 tejbeer 371
 
31884 tejbeer 372
        LocalDateTime curDate = LocalDate.now().atStartOfDay();
28468 tejbeer 373
 
31884 tejbeer 374
        LOGGER.info("cur Date" + curDate.withDayOfMonth(1));
28468 tejbeer 375
 
31884 tejbeer 376
        LOGGER.info("curDateYear" + curDate.with(LocalTime.MAX));
28468 tejbeer 377
 
31884 tejbeer 378
        Map<String, Double> brandwisesale = fofoOrderItemRepository.selectSumAmountGroupByBrand(curDate.withDayOfMonth(1), curDate.with(LocalTime.MAX), fofoId);
28468 tejbeer 379
 
31884 tejbeer 380
        LOGGER.info("brandwisesale" + brandwisesale);
28468 tejbeer 381
 
31884 tejbeer 382
        Map<Integer, Double> accesoriesmtdsale = fofoOrderRepository.selectSumSaleGroupByFofoIdsForMobileOrAccessories(
383
                fofoId, curDate.withDayOfMonth(1), curDate.with(LocalTime.MAX), Optional.of(false));
384
        brandwisesale.put("Accessories", accesoriesmtdsale.get(fofoId));
28468 tejbeer 385
 
31884 tejbeer 386
        Map<String, Double> activatedImeisWithSellingPriceMTD = fofoOrderRepository.selectValueOfActivatedImeis(curDate.withDayOfMonth(1), curDate.with(LocalTime.MAX), fofoId).stream().collect(Collectors.toMap(x -> x.getBrand(), x -> (double) x.getSellingPrice()));
28468 tejbeer 387
 
31884 tejbeer 388
        activatedImeisWithSellingPriceMTD.put("Lava", brandwisesale.get("Lava"));
28468 tejbeer 389
 
31884 tejbeer 390
        Map<String, Double> activatedImeisWithSellingPriceLMTD = fofoOrderRepository.selectValueOfActivatedImeis(curDate.withDayOfMonth(1).minusMonths(1), curDate.with(LocalTime.MAX).minusMonths(1), fofoId).stream().collect(Collectors.toMap(x -> x.getBrand(), x -> (double) x.getSellingPrice()));
391
        Map<String, Double> lmtdBrandWiseSale = fofoOrderItemRepository.selectSumAmountGroupByBrand(
392
                curDate.withDayOfMonth(1).minusMonths(1), curDate.with(LocalTime.MAX).minusMonths(1), fofoId);
393
        activatedImeisWithSellingPriceLMTD.put("Lava", lmtdBrandWiseSale.get("Lava"));
28468 tejbeer 394
 
31884 tejbeer 395
        Map<Integer, Double> accesorieslmtdsale = fofoOrderRepository.selectSumSaleGroupByFofoIdsForMobileOrAccessories(
396
                fofoId, curDate.withDayOfMonth(1).minusMonths(1), curDate.with(LocalTime.MAX).minusMonths(1), Optional.of(false));
28468 tejbeer 397
 
31884 tejbeer 398
        lmtdBrandWiseSale.put("Accessories", accesorieslmtdsale.get(fofoId));
28468 tejbeer 399
 
31884 tejbeer 400
        ChartModel cm = new ChartModel();
28468 tejbeer 401
 
31884 tejbeer 402
        HashSet<String> labels = new HashSet<String>();
403
        labels.addAll(brandwisesale.keySet());
404
        labels.addAll(lmtdBrandWiseSale.keySet());
28468 tejbeer 405
 
31884 tejbeer 406
        List<String> labelList = new ArrayList<>(labels);
28468 tejbeer 407
 
31884 tejbeer 408
        List<Double> mtdActivatedImeisValues = new ArrayList<>();
28468 tejbeer 409
 
31884 tejbeer 410
        List<Double> mtdValues = new ArrayList<>();
411
        List<Double> lmtdUnActivatedImeisValues = new ArrayList<>();
412
        List<Double> lmtdActivatedImeisValues = new ArrayList<>();
413
        List<Double> mtdUnActivatedImeisValues = new ArrayList<>();
414
        List<Double> lmtdValues = new ArrayList<>();
415
        for (String label : labelList) {
416
            mtdActivatedImeisValues.add(activatedImeisWithSellingPriceMTD.get(label) == null ? 0 : activatedImeisWithSellingPriceMTD.get(label));
417
            lmtdActivatedImeisValues.add(activatedImeisWithSellingPriceLMTD.get(label) == null ? 0 : activatedImeisWithSellingPriceLMTD.get(label));
28468 tejbeer 418
 
31884 tejbeer 419
            mtdValues.add(brandwisesale.get(label) == null ? 0 : brandwisesale.get(label));
420
            if (brandwisesale.get(label) != null) {
421
                mtdUnActivatedImeisValues.add(brandwisesale.get(label) - (activatedImeisWithSellingPriceMTD.get(label) == null ? 0 : activatedImeisWithSellingPriceMTD.get(label)));
422
            } else {
423
                mtdUnActivatedImeisValues.add(0.0);
424
            }
425
            if (lmtdBrandWiseSale.get(label) != null) {
426
                lmtdUnActivatedImeisValues.add(lmtdBrandWiseSale.get(label) - (activatedImeisWithSellingPriceLMTD.get(label) == null ? 0 : activatedImeisWithSellingPriceLMTD.get(label)));
427
            } else {
428
                lmtdUnActivatedImeisValues.add(0.0);
429
            }
28468 tejbeer 430
 
31884 tejbeer 431
            lmtdValues.add(lmtdBrandWiseSale.get(label) == null ? 0 : lmtdBrandWiseSale.get(label));
432
        }
433
        DatasetModel dsmtotal = new DatasetModel();
434
        dsmtotal.setLabel("MTD");
435
        dsmtotal.setBackgroundColor("blue");
436
        dsmtotal.setBorderColor("blue");
437
        dsmtotal.setData(mtdValues);
438
        dsmtotal.setStack("stack0");
439
        dsmtotal.setOrder(1);
28468 tejbeer 440
 
31884 tejbeer 441
        DatasetModel dsmUnactivated = new DatasetModel();
442
        dsmUnactivated.setLabel("MTD Unactivated");
443
        dsmUnactivated.setBackgroundColor("red");
444
        dsmUnactivated.setBorderColor("red");
445
        dsmUnactivated.setData(mtdUnActivatedImeisValues);
446
        dsmUnactivated.setStack("stack0");
447
        dsmUnactivated.setOrder(1);
28468 tejbeer 448
 
31884 tejbeer 449
        LOGGER.info("mtdValuesMoney" + mtdValues);
28468 tejbeer 450
 
31884 tejbeer 451
        DatasetModel mtdActivatedImeis = new DatasetModel();
452
        mtdActivatedImeis.setLabel("MTD Activation");
453
        mtdActivatedImeis.setBorderColor("#00008b");
454
        mtdActivatedImeis.setData(mtdActivatedImeisValues);
455
        mtdActivatedImeis.setBackgroundColor("#00008b");
456
        mtdActivatedImeis.setStack("stack0");
457
        mtdActivatedImeis.setOrder(1);
28468 tejbeer 458
 
31884 tejbeer 459
        DatasetModel lmtddsmtotal = new DatasetModel();
460
        lmtddsmtotal.setLabel("LMTD");
461
        lmtddsmtotal.setBackgroundColor("blue");
462
        lmtddsmtotal.setData(lmtdValues);
463
        lmtddsmtotal.setBorderColor("blue");
464
        lmtddsmtotal.setStack("stack1");
465
        lmtddsmtotal.setOrder(1);
28468 tejbeer 466
 
31884 tejbeer 467
        DatasetModel lmtdUnActivated = new DatasetModel();
468
        lmtdUnActivated.setLabel("LMTD Unactivation");
469
        lmtdUnActivated.setBackgroundColor("red");
470
        lmtdUnActivated.setBorderColor("red");
471
        lmtdUnActivated.setData(lmtdUnActivatedImeisValues);
472
        lmtdUnActivated.setStack("stack1");
473
        lmtdUnActivated.setOrder(1);
28468 tejbeer 474
 
31884 tejbeer 475
        DatasetModel LmtdActivatedImeis = new DatasetModel();
476
        LmtdActivatedImeis.setLabel("LMTD Activation");
477
        LmtdActivatedImeis.setBackgroundColor("#87ceeb");
478
        LmtdActivatedImeis.setBorderColor("#87ceeb");
479
        LmtdActivatedImeis.setData(lmtdActivatedImeisValues);
480
        LmtdActivatedImeis.setStack("stack1");
481
        LmtdActivatedImeis.setOrder(1);
28468 tejbeer 482
 
31884 tejbeer 483
        DatasetModel linemtdChart = new DatasetModel();
484
        linemtdChart.setLabel("MTD");
485
        linemtdChart.setBackgroundColor("#006400");
486
        linemtdChart.setBorderColor("#006400");
487
        linemtdChart.setData(mtdValues);
488
        linemtdChart.setType("line");
489
        linemtdChart.setOrder(2);
490
        linemtdChart.setFill("false");
28468 tejbeer 491
 
31884 tejbeer 492
        DatasetModel lineLmtdChart = new DatasetModel();
493
        lineLmtdChart.setLabel("LMTD");
494
        lineLmtdChart.setBackgroundColor("hotpink");
495
        lineLmtdChart.setBorderColor("hotpink");
496
        lineLmtdChart.setData(lmtdValues);
497
        lineLmtdChart.setType("line");
498
        lineLmtdChart.setOrder(3);
499
        lineLmtdChart.setFill("false");
28468 tejbeer 500
 
31884 tejbeer 501
        List<DatasetModel> datasets = new ArrayList<>();
502
        datasets.add(mtdActivatedImeis);
503
        datasets.add(dsmUnactivated);
504
        datasets.add(LmtdActivatedImeis);
505
        datasets.add(lmtdUnActivated);
506
        datasets.add(linemtdChart);
507
        datasets.add(lineLmtdChart);
28468 tejbeer 508
 
31884 tejbeer 509
        DataModel dm = new DataModel();
510
        dm.setDatasets(datasets);
511
        dm.setLabels(labels);
28468 tejbeer 512
 
31884 tejbeer 513
        Tooltips tooltips = new Tooltips();
514
        tooltips.setBodyFontSize(10);
515
        tooltips.setTitleFontSize(10);
516
        tooltips.setMode("index");
517
        tooltips.setIntersect(false);
518
        tooltips.setBackgroundColor("rgba(0, 0, 0, .5)");
519
        HoverModel hover = new HoverModel();
520
        hover.setIntersect(false);
521
        hover.setMode("index");
28468 tejbeer 522
 
31884 tejbeer 523
        LegendModel lm = new LegendModel();
524
        lm.setPosition("top");
28468 tejbeer 525
 
31884 tejbeer 526
        TitleModel tm = new TitleModel();
527
        tm.setText("Brand Wise Sales");
528
        tm.setDisplay(true);
529
        tm.setFontSize(20);
530
        tm.setFontColor("#111");
28468 tejbeer 531
 
31884 tejbeer 532
        List<Axis> xAxes = new ArrayList<>();
533
        Axis xAxis = new Axis();
534
        xAxis.setStacked(true);
535
        xAxes.add(xAxis);
28468 tejbeer 536
 
31884 tejbeer 537
        List<Axis> yAxes = new ArrayList<>();
538
        Axis yAxis = new Axis();
539
        yAxis.setStacked(false);
540
        yAxes.add(yAxis);
28468 tejbeer 541
 
31884 tejbeer 542
        ScalesModel sm = new ScalesModel();
543
        sm.setxAxes(xAxes);
28468 tejbeer 544
 
31884 tejbeer 545
        OptionsModel om = new OptionsModel();
546
        om.setLegend(lm);
547
        om.setTitle(tm);
548
        om.setScales(sm);
549
        om.setHover(hover);
550
        om.setTooltips(tooltips);
28468 tejbeer 551
 
31884 tejbeer 552
        cm.setType("bar");
553
        cm.setData(dm);
554
        cm.setOptions(om);
28468 tejbeer 555
 
31884 tejbeer 556
        LOGGER.info("cm" + cm);
28468 tejbeer 557
 
31884 tejbeer 558
        return cm;
28468 tejbeer 559
 
31884 tejbeer 560
    }
28468 tejbeer 561
 
31884 tejbeer 562
    public ChartInvestmentModel getInvestmentChart(int fofoId) throws ProfitMandiBusinessException {
563
        PartnerDailyInvestment investment = partnerInvestmentService.getInvestment(fofoId, 0);
28468 tejbeer 564
 
31884 tejbeer 565
        Map<String, Float> investmentWalletAmount = new HashMap<>();
566
        investmentWalletAmount.put("Wallet", investment.getWalletAmount());
567
        investmentWalletAmount.put("InStocks", investment.getInStockAmount() - investment.getActivatedStockAmount());
568
        investmentWalletAmount.put("Unbilled Order", investment.getUnbilledAmount());
569
        investmentWalletAmount.put("GrnPending", investment.getGrnPendingAmount() - investment.getActivatedGrnPendingAmount());
570
        investmentWalletAmount.put("ReturnInTransit", investment.getReturnInTransitAmount());
28468 tejbeer 571
 
31884 tejbeer 572
        if (investment.getShortInvestment() > 0) {
573
            investmentWalletAmount.put("Short Investment", investment.getShortInvestment());
574
        }
28468 tejbeer 575
 
31884 tejbeer 576
        ChartInvestmentModel cm = new ChartInvestmentModel();
28468 tejbeer 577
 
31884 tejbeer 578
        HashSet<String> labels = new HashSet<String>();
579
        labels.addAll(investmentWalletAmount.keySet());
28468 tejbeer 580
 
31884 tejbeer 581
        List<String> labelList = new ArrayList<>(labels);
582
        List<String> backgroundColor = new ArrayList<>();
583
        List<Float> values = new ArrayList<>();
584
        for (String label : labelList) {
585
            values.add(investmentWalletAmount.get(label));
586
            if (label.equals("Wallet")) {
587
                backgroundColor.add("pink");
588
            }
589
            if (label.equals("Short Investment")) {
590
                backgroundColor.add("red");
591
            }
592
            if (label.equals("InStocks")) {
593
                backgroundColor.add("#9ACD32");
594
            }
595
            if (label.equals("Unbilled Order")) {
596
                backgroundColor.add("blue");
597
            }
28468 tejbeer 598
 
31884 tejbeer 599
            if (label.equals("ReturnInTransit")) {
600
                backgroundColor.add("orange");
601
            }
602
            if (label.equals("GrnPending")) {
603
                backgroundColor.add("yellow");
604
            }
28468 tejbeer 605
 
31884 tejbeer 606
        }
28468 tejbeer 607
 
31884 tejbeer 608
        Data data = new Data();
609
        data.setData(values);
610
        data.setBackgroundColor(backgroundColor);
611
        data.setLabel("DataSet 1");
28468 tejbeer 612
 
31884 tejbeer 613
        PieLables label = new PieLables();
614
        label.setFontColor("White");
615
        label.setFontSize(15);
28468 tejbeer 616
 
31884 tejbeer 617
        Legend legend = new Legend();
618
        legend.setLabels(label);
619
        legend.setPosition("left");
28468 tejbeer 620
 
31884 tejbeer 621
        List<Data> dataList = new ArrayList<>();
622
        dataList.add(data);
28468 tejbeer 623
 
31884 tejbeer 624
        DataInvestmentModel datasets = new DataInvestmentModel();
625
        datasets.setDatasets(dataList);
626
        datasets.setLabels(labels);
28468 tejbeer 627
 
31884 tejbeer 628
        OptionModel om = new OptionModel();
629
        om.setLegend(legend);
630
        cm.setType("pie");
631
        cm.setData(datasets);
632
        cm.setOptions(om);
28468 tejbeer 633
 
31884 tejbeer 634
        return cm;
635
    }
28468 tejbeer 636
 
31884 tejbeer 637
    public List<Notification> getNotifications(List<NotificationCampaign> nc, MessageType messageType) throws ProfitMandiBusinessException {
638
        List<Notification> notifications = new ArrayList<>();
639
        Document document = null;
640
        if (messageType != null) {
641
            for (NotificationCampaign notificationCampaign : nc) {
642
                if (notificationCampaign.getMessageType() == messageType) {
643
                    Notification ns = new Notification();
644
                    SimpleCampaignParams scp = gson.fromJson(notificationCampaign.getImplementationParams(), SimpleCampaignParams.class);
645
                    Campaign campaign = new SimpleCampaign(scp);
646
                    LocalDateTime expire = campaign.getExpireTimestamp();
647
                    ns.setCid(Integer.toString(notificationCampaign.getId()));
648
                    ns.setType(campaign.getType());
649
                    ns.setMessage(campaign.getMessage());
650
                    ns.setTitle(campaign.getTitle());
651
                    if (notificationCampaign.getDocumentId() != null) {
652
                        document = documentRepository.selectById(notificationCampaign.getDocumentId());
653
                        ns.setDocumentName(document.getDisplayName());
654
                    }
655
                    ns.setUrl(campaign.getUrl());
656
                    ns.setShowImage(campaign.getShowImage());
657
                    ns.setImageUrl(campaign.getImageUrl());
658
                    ns.setDocumentId(notificationCampaign.getDocumentId());
659
                    ns.setMessageType(notificationCampaign.getMessageType());
660
                    ns.setCreated(
661
                            notificationCampaign.getCreatedTimestamp().toEpochSecond(ZoneOffset.ofHoursMinutes(5, 30)) * 1000);
662
                    if (LocalDateTime.now().isAfter(expire)) {
663
                        ns.setExpired(true);
664
                    } else {
665
                        ns.setExpired(false);
666
                    }
667
                    notifications.add(ns);
668
                }
669
            }
670
        } else {
671
            for (NotificationCampaign notificationCampaign : nc) {
28468 tejbeer 672
 
31884 tejbeer 673
                Notification ns = new Notification();
674
                SimpleCampaignParams scp = gson.fromJson(notificationCampaign.getImplementationParams(), SimpleCampaignParams.class);
675
                Campaign campaign = new SimpleCampaign(scp);
676
                LocalDateTime expire = campaign.getExpireTimestamp();
677
                ns.setCid(Integer.toString(notificationCampaign.getId()));
678
                ns.setType(campaign.getType());
679
                ns.setMessage(campaign.getMessage());
680
                ns.setTitle(campaign.getTitle());
681
                if (notificationCampaign.getDocumentId() != null) {
682
                    document = documentRepository.selectById(notificationCampaign.getDocumentId());
683
                    ns.setDocumentName(document.getDisplayName());
684
                }
685
                ns.setUrl(campaign.getUrl());
686
                ns.setShowImage(campaign.getShowImage());
687
                ns.setImageUrl(campaign.getImageUrl());
688
                ns.setDocumentId(notificationCampaign.getDocumentId());
689
                ns.setMessageType(notificationCampaign.getMessageType());
690
                ns.setCreated(notificationCampaign.getCreatedTimestamp().toEpochSecond(ZoneOffset.ofHoursMinutes(5, 30)) * 1000);
691
                if (LocalDateTime.now().isAfter(expire)) {
692
                    ns.setExpired(true);
693
                } else {
694
                    ns.setExpired(false);
695
                }
696
                notifications.add(ns);
697
            }
28468 tejbeer 698
 
31884 tejbeer 699
        }
700
        return notifications;
28468 tejbeer 701
 
31884 tejbeer 702
    }
703
 
704
    // This method is currently hardcoded to faciliate watches sold as gift.
705
    public boolean hasGift(int fofoId) {
706
        try {
707
            return currentInventorySnapshotRepository.selectByItemIdAndFofoId(ProfitMandiConstants.GIFT_ID, fofoId).getAvailability() > 0;
708
        } catch (ProfitMandiBusinessException e) {
709
            return false;
710
        }
711
    }
712
 
28468 tejbeer 713
}