Subversion Repositories SmartDukaan

Rev

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