Subversion Repositories SmartDukaan

Rev

Rev 32229 | Rev 34729 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 32229 Rev 32245
Line 1... Line 1...
1
package com.spice.profitmandi.service;
1
package com.spice.profitmandi.service;
2
 
2
 
-
 
3
import java.text.DecimalFormat;
-
 
4
import java.text.NumberFormat;
-
 
5
import java.time.Duration;
-
 
6
import java.time.LocalDate;
-
 
7
import java.time.LocalDateTime;
-
 
8
import java.time.LocalTime;
-
 
9
import java.util.ArrayList;
-
 
10
import java.util.Arrays;
-
 
11
import java.util.HashMap;
-
 
12
import java.util.HashSet;
-
 
13
import java.util.List;
-
 
14
import java.util.Locale;
-
 
15
import java.util.Map;
-
 
16
import java.util.Map.Entry;
-
 
17
import java.util.Set;
-
 
18
import java.util.stream.Collectors;
-
 
19
 
-
 
20
import javax.mail.internet.InternetAddress;
-
 
21
import javax.mail.internet.MimeMessage;
-
 
22
 
-
 
23
import com.spice.profitmandi.dao.model.*;
-
 
24
import com.spice.profitmandi.service.transaction.SDCreditService;
-
 
25
import org.apache.commons.io.output.ByteArrayOutputStream;
-
 
26
import org.apache.logging.log4j.LogManager;
-
 
27
import org.apache.logging.log4j.Logger;
-
 
28
import org.springframework.beans.factory.annotation.Autowired;
-
 
29
import org.springframework.core.io.ByteArrayResource;
-
 
30
import org.springframework.core.io.InputStreamSource;
-
 
31
import org.springframework.mail.javamail.JavaMailSender;
-
 
32
import org.springframework.mail.javamail.MimeMessageHelper;
-
 
33
import org.springframework.stereotype.Component;
-
 
34
 
3
import com.spice.profitmandi.common.model.CustomRetailer;
35
import com.spice.profitmandi.common.model.CustomRetailer;
4
import com.spice.profitmandi.common.util.FileUtil;
36
import com.spice.profitmandi.common.util.FileUtil;
5
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
37
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
6
import com.spice.profitmandi.dao.entity.fofo.RetailerFilter;
38
import com.spice.profitmandi.dao.entity.fofo.RetailerFilter;
7
import com.spice.profitmandi.dao.entity.transaction.Loan;
39
import com.spice.profitmandi.dao.entity.transaction.Loan;
8
import com.spice.profitmandi.dao.model.BillingDaysAvg;
-
 
9
import com.spice.profitmandi.dao.model.LastSaleDateModel;
-
 
10
import com.spice.profitmandi.dao.model.RetailerFilterModel;
-
 
11
import com.spice.profitmandi.dao.model.RetailerPeformanceFilterModel;
-
 
12
import com.spice.profitmandi.dao.repository.cs.CsService;
40
import com.spice.profitmandi.dao.repository.cs.CsService;
13
import com.spice.profitmandi.dao.repository.dtr.RetailerFilterRepository;
41
import com.spice.profitmandi.dao.repository.dtr.RetailerFilterRepository;
14
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
42
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
15
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
43
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
16
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
44
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
17
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
45
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
18
import com.spice.profitmandi.service.transaction.SDCreditService;
46
import com.spice.profitmandi.service.transaction.SDCreditServiceImpl;
19
import com.spice.profitmandi.service.user.RetailerService;
47
import com.spice.profitmandi.service.user.RetailerService;
20
import org.apache.commons.io.output.ByteArrayOutputStream;
-
 
21
import org.apache.logging.log4j.LogManager;
-
 
22
import org.apache.logging.log4j.Logger;
-
 
23
import org.springframework.beans.factory.annotation.Autowired;
-
 
24
import org.springframework.core.io.ByteArrayResource;
-
 
25
import org.springframework.core.io.InputStreamSource;
-
 
26
import org.springframework.mail.javamail.JavaMailSender;
-
 
27
import org.springframework.mail.javamail.MimeMessageHelper;
-
 
28
import org.springframework.stereotype.Component;
-
 
29
 
-
 
30
import javax.mail.internet.InternetAddress;
-
 
31
import javax.mail.internet.MimeMessage;
-
 
32
import java.text.DecimalFormat;
-
 
33
import java.text.NumberFormat;
-
 
34
import java.time.Duration;
-
 
35
import java.time.LocalDate;
-
 
36
import java.time.LocalDateTime;
-
 
37
import java.time.LocalTime;
-
 
38
import java.util.*;
-
 
39
import java.util.Map.Entry;
-
 
40
import java.util.stream.Collectors;
-
 
41
 
48
 
42
@Component
49
@Component
43
public class PerformanceServiceImpl implements PerformanceService {
50
public class PerformanceServiceImpl implements PerformanceService {
44
 
51
 
45
 
52
 
Line 54... Line 61...
54
 
61
 
55
    @Autowired
62
    @Autowired
56
    private FofoOrderItemRepository fofoOrderItemRepository;
63
    private FofoOrderItemRepository fofoOrderItemRepository;
57
 
64
 
58
    @Autowired
65
    @Autowired
59
    private SDCreditService sdCreditServiceImpl;
66
    private SDCreditService sdCreditService;
60
 
67
 
61
    @Autowired
68
    @Autowired
62
    private RetailerService retailerService;
69
    private RetailerService retailerService;
63
 
70
 
64
    @Autowired
71
    @Autowired
Line 93... Line 100...
93
 
100
 
94
        Map<Integer, Double> tertiaryPartner = new HashMap<Integer, Double>();
101
        Map<Integer, Double> tertiaryPartner = new HashMap<Integer, Double>();
95
 
102
 
96
 
103
 
97
        if (retailerFilter.isCredit()) {
104
        if (retailerFilter.isCredit()) {
98
            List<Loan> dueDateLoans = sdCreditServiceImpl.getDueDateCrossLoan();
105
            List<Loan> dueDateLoans = sdCreditService.getDueDateCrossLoan();
99
            List<Loan> defaultLoans = sdCreditServiceImpl.getDefaultLoan();
106
            List<Loan> defaultLoans = sdCreditService.getDefaultLoan();
100
 
107
 
101
            if (!defaultLoans.isEmpty()) {
108
            if (!defaultLoans.isEmpty()) {
102
                defaultdateMap = defaultLoans.stream().collect(Collectors.groupingBy(x -> x.getFofoId()));
109
                defaultdateMap = defaultLoans.stream().collect(Collectors.groupingBy(x -> x.getFofoId()));
103
            }
110
            }
104
            if (!dueDateLoans.isEmpty()) {
111
            if (!dueDateLoans.isEmpty()) {
Line 211... Line 218...
211
 
218
 
212
 
219
 
213
        for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
220
        for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
214
            int fofoId = customRetailerEntry.getKey();
221
            int fofoId = customRetailerEntry.getKey();
215
            RetailerPeformanceFilterModel retailerPeformanceFilterModel = new RetailerPeformanceFilterModel();
222
            RetailerPeformanceFilterModel retailerPeformanceFilterModel = new RetailerPeformanceFilterModel();
216
            retailerPeformanceFilterModel.setActivationType(customRetailerEntry.getValue().getActivationType());
-
 
217
            retailerPeformanceFilterModel.setState(customRetailerEntry.getValue().getAddress().getState());
-
 
218
            if (retailerFilter.isCredit()) {
223
            if (retailerFilter.isCredit()) {
219
 
224
 
220
                if (!duedateMap.isEmpty()) {
225
                if (!duedateMap.isEmpty()) {
221
                    if (duedateMap.containsKey(fofoId)) {
226
                    if (duedateMap.containsKey(fofoId)) {
222
                        retailerPeformanceFilterModel.setCredit("Due");
227
                        retailerPeformanceFilterModel.setCredit("Due");
Line 297... Line 302...
297
        return retailerPerPeformanceFilterModels;
302
        return retailerPerPeformanceFilterModels;
298
    }
303
    }
299
 
304
 
300
    public void sendPartnerPerformanceEmail(Map<Integer, RetailerPeformanceFilterModel> partnersPerformanceMap, RetailerFilterModel retailerFilterModel, Map<Integer, CustomRetailer> customRetailers) throws Exception {
305
    public void sendPartnerPerformanceEmail(Map<Integer, RetailerPeformanceFilterModel> partnersPerformanceMap, RetailerFilterModel retailerFilterModel, Map<Integer, CustomRetailer> customRetailers) throws Exception {
301
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
306
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
-
 
307
        Map<Integer, FofoReportingModel> fofoReportingModelMap = csService.getPartnerIdSalesHeaders();
302
 
308
 
303
        LOGGER.info("retailerFilterModel {}", retailerFilterModel);
309
        LOGGER.info("retailerFilterModel {}", retailerFilterModel);
304
        for (Entry<String, Set<Integer>> storeGuyEntry : storeGuyMap.entrySet()) {
310
        for (Entry<String, Set<Integer>> storeGuyEntry : storeGuyMap.entrySet()) {
305
 
311
 
306
            Set<Integer> fofoIds = storeGuyEntry.getValue();
312
            Set<Integer> fofoIds = storeGuyEntry.getValue();
307
            List<List<?>> rows = new ArrayList<>();
313
            List<List<?>> rows = new ArrayList<>();
308
            List<String> headers = Arrays.asList("Partner Name", "Code", "ActivationType", "State", "Credit- Due/Default", "Billing To Deliver", "Investment- Lower Than " + retailerFilterModel.getInvestmentPct() + "%", "Last Secondary-" + retailerFilterModel.getSecondaryDays() + "days", "Last Tertiary-" + retailerFilterModel.getTertiaryDays() + "days", "MTD Secondary < LMTD-" + retailerFilterModel.getMtdsPct() + "%", "MTD Tertiary < LMTD-" + retailerFilterModel.getMtdtPct() + "%");
314
            List<String> headers = Arrays.asList("Partner Name", "Code","Territory Manager","Regional Manager","Credit- Due/Default", "Billing To Deliver", "Investment- Lower Than " + retailerFilterModel.getInvestmentPct() + "%", "Last Secondary-" + retailerFilterModel.getSecondaryDays() + "days", "Last Tertiary-" + retailerFilterModel.getTertiaryDays() + "days", "MTD Secondary < LMTD-" + retailerFilterModel.getMtdsPct() + "%", "MTD Tertiary < LMTD-" + retailerFilterModel.getMtdtPct() + "%");
309
 
-
 
310
 
315
 
311
            LOGGER.info("headers {}", headers);
316
            LOGGER.info("headers {}", headers);
312
 
317
 
313
            for (Integer fofoId : fofoIds) {
318
            for (Integer fofoId : fofoIds) {
314
                RetailerPeformanceFilterModel retailerPerformanceFilterModel = partnersPerformanceMap.get(fofoId);
319
                RetailerPeformanceFilterModel retailerPerformanceFilterModel = partnersPerformanceMap.get(fofoId);
315
 
320
 
316
                LOGGER.info("retailerPerformanceFilterModel {}", retailerPerformanceFilterModel);
321
                LOGGER.info("retailerPerformanceFilterModel {}", retailerPerformanceFilterModel);
317
 
322
 
318
                if (retailerPerformanceFilterModel != null) {
323
                if (retailerPerformanceFilterModel != null) {
319
                    rows.add(Arrays.asList(customRetailers.get(fofoId).getBusinessName(), customRetailers.get(fofoId).getCode(), retailerPerformanceFilterModel.getActivationType(), retailerPerformanceFilterModel.getState(), retailerPerformanceFilterModel.getCredit(), retailerPerformanceFilterModel.getBilling(), retailerPerformanceFilterModel.getInvestment(), retailerPerformanceFilterModel.getSecondaryDays(), retailerPerformanceFilterModel.getTertiaryDays(), retailerPerformanceFilterModel.getMtds(), retailerPerformanceFilterModel.getMtdt()));
324
                    rows.add(Arrays.asList(customRetailers.get(fofoId).getBusinessName(), customRetailers.get(fofoId).getCode(), fofoReportingModelMap.get(fofoId).getTerritoryManager(),fofoReportingModelMap.get(fofoId).getRegionalManager(), retailerPerformanceFilterModel.getCredit(), retailerPerformanceFilterModel.getBilling(), retailerPerformanceFilterModel.getInvestment(), retailerPerformanceFilterModel.getSecondaryDays(),retailerPerformanceFilterModel.getTertiaryDays(), retailerPerformanceFilterModel.getMtds(), retailerPerformanceFilterModel.getMtdt()));
320
                }
325
                }
321
 
326
 
322
            }
327
            }
323
            if (!rows.isEmpty()) {
328
            if (!rows.isEmpty()) {
324
                ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
329
                ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
325
                this.sendMailWithAttachment(mailSender, new String[]{storeGuyEntry.getKey()}, null, "Partner Performance", "PFA", "PartnerPerformance.csv", new ByteArrayResource(baos.toByteArray()));
330
                this.sendMailWithAttachment(mailSender, new String[]{storeGuyEntry.getKey()}, null, "Partner Performance", "PFA", "PartnerPerformance.csv", new ByteArrayResource(baos.toByteArray()));
326
            }
331
            }
327
 
332
 
328
        }
333
        }
329
 
-
 
330
 
-
 
331
    }
334
    }
332
 
335
 
333
    public void sendMailWithAttachment(JavaMailSender mailSender, String[] emailTo, String[] cc, String subject, String body, String fileName, InputStreamSource inputStreamSource) throws Exception {
336
    public void sendMailWithAttachment(JavaMailSender mailSender, String[] emailTo, String[] cc, String subject, String body, String fileName, InputStreamSource inputStreamSource) throws Exception {
334
        MimeMessage message = mailSender.createMimeMessage();
337
        MimeMessage message = mailSender.createMimeMessage();
335
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
338
        MimeMessageHelper helper = new MimeMessageHelper(message, true);