Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
34240 tejus.loha 1
package com.spice.profitmandi.dao.service;
2
 
34275 tejus.loha 3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
34979 ranu 4
import com.spice.profitmandi.common.model.ProfitMandiConstants;
34275 tejus.loha 5
import com.spice.profitmandi.dao.entity.auth.AuthUser;
34979 ranu 6
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
35050 amit 7
import com.spice.profitmandi.dao.model.WarehouseItemAgeingModel;
34240 tejus.loha 8
import com.spice.profitmandi.dao.model.purchaseSaleRatio.CatalogAgedModel;
34275 tejus.loha 9
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
34979 ranu 10
import com.spice.profitmandi.dao.repository.cs.CsService;
34240 tejus.loha 11
import com.spice.profitmandi.dao.repository.warehouse.WarehouseSupplierInvoiceRepository;
34275 tejus.loha 12
import com.spice.profitmandi.service.AuthService;
34249 tejus.loha 13
import org.apache.logging.log4j.LogManager;
14
import org.apache.logging.log4j.Logger;
34240 tejus.loha 15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.mail.javamail.JavaMailSender;
17
import org.springframework.mail.javamail.MimeMessageHelper;
18
import org.springframework.stereotype.Service;
34250 tejus.loha 19
import org.springframework.transaction.annotation.Transactional;
34240 tejus.loha 20
 
21
import javax.mail.MessagingException;
22
import javax.mail.internet.InternetAddress;
23
import javax.mail.internet.MimeMessage;
24
import java.io.UnsupportedEncodingException;
25
import java.time.LocalDateTime;
35050 amit 26
import java.util.ArrayList;
27
import java.util.Arrays;
28
import java.util.Comparator;
29
import java.util.List;
34240 tejus.loha 30
import java.util.stream.Collectors;
31
 
32
@Service
34250 tejus.loha 33
@Transactional(rollbackFor = Throwable.class)
34240 tejus.loha 34
public class PurSaleServiceImpl implements PurSaleService {
35
 
34249 tejus.loha 36
    private static final Logger LOGGER = LogManager.getLogger(PurSaleServiceImpl.class);
37
 
38
 
34240 tejus.loha 39
    @Autowired
40
    WarehouseSupplierInvoiceRepository warehouseSupplierInvoiceRepository;
41
 
42
    @Autowired
43
    JavaMailSender mailSender;
44
 
34275 tejus.loha 45
    @Autowired
46
    AuthService authService;
47
    @Autowired
48
    AuthRepository authRepository;
49
 
34979 ranu 50
    @Autowired
51
    CsService csService;
52
 
34240 tejus.loha 53
    @Override
34275 tejus.loha 54
    public void moreThen10DaysEgedStockReport() throws MessagingException, UnsupportedEncodingException, ProfitMandiBusinessException {
55
        LocalDateTime startDate = LocalDateTime.now().minusMonths(3);
56
        LocalDateTime endDate = LocalDateTime.now();
34299 tejus.loha 57
        List<CatalogAgedModel> moreThen10DaysAgedCatalogModels = getCatalogModelsOlderThan10Days(startDate, endDate);
34240 tejus.loha 58
        StringBuilder sb = new StringBuilder();
35009 ranu 59
        sb.append("<html><body><b>Aging Stock List: Items that are 4 days old or older (Date Range - " + startDate.toLocalDate() + " To " + endDate.toLocalDate() + " )</b>" + "<br/><table style='border:1px solid black ;padding: 5px ;bgColor=green'>");
34240 tejus.loha 60
        sb.append("<tbody>" +
61
                "<tr>" +
62
                "<th style='border:1px solid black;padding: 5px'>No.</th>" +
63
                "<th style='border:1px solid black;padding: 5px'>Brand</th>" +
64
                "<th style='border:1px solid black;padding: 5px'>Vendor</th>" +
65
                "<th style='border:1px solid black;padding: 5px'>Category</th>" +
66
                "<th style='border:1px solid black;padding: 5px'>Model</th>" +
34297 tejus.loha 67
                "<th style='border:1px solid black;padding: 5px'>Colour</th>" +
34240 tejus.loha 68
                "<th style='border:1px solid black;padding: 5px'>Purchase</th>" +
69
                "<th style='border:1px solid black;padding: 5px'>Sold</th>" +
70
                "<th style='border:1px solid black;padding: 5px'>Unsold</th>" +
71
                "<th style='border:1px solid black;padding: 5px'>Age</th>" +
72
 
73
                "</tr>");
74
 
34299 tejus.loha 75
 
76
        moreThen10DaysAgedCatalogModels.sort(Comparator.comparingInt(CatalogAgedModel::getAge).reversed());
34240 tejus.loha 77
        int i = 1;
78
        for (CatalogAgedModel catalogAgedModel : moreThen10DaysAgedCatalogModels) {
79
            sb.append("<tr>");
80
            sb.append("<td style='border:1px solid black;padding: 5px'>" + (i++) + "</td>");
81
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getBrand() + "</td>");
82
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getSupplier() + "</td>");
83
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getStatus() + "</td>");
34275 tejus.loha 84
            if (catalogAgedModel.getBrand().equals("Samsung")) {
85
                sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getModel() + "</td>");
86
            } else {
34262 tejus.loha 87
                sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getModelName() + "</td>");
88
            }
34297 tejus.loha 89
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getColor().replaceFirst("f_", "") + "</td>");
34240 tejus.loha 90
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getPurchase() + "</td>");
91
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getSold() + "</td>");
92
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getUnsold() + "</td>");
93
            sb.append("<td style='border:1px solid black;padding: 5px'>" + catalogAgedModel.getAge() + "</td>");
94
            sb.append("</tr>");
95
 
96
        }
35050 amit 97
        sb.append("</tbody>");
98
        sb.append("</table>");
99
 
100
 
101
        List<WarehouseItemAgeingModel> warehouseAgeQtyModel = getAgeingModelsGtDays(startDate, endDate, 4);
102
        sb.append("<br /><br /><b>Warehouse Stock</b>");
35052 amit 103
        sb.append("<table style='border:1px solid black;border-collapse: collapse;' ><thead>")
35050 amit 104
                .append("<th>No.</th>")
105
                .append("<th>Vendor</th>")
106
                .append("<th>Category</th>")
107
                .append("<th>Brand</th>")
108
                .append("<th>Model</th>")
109
                .append("<th>Color</th>")
110
                .append("<th>Age</th>")
111
                .append("<th>Warehouse</th>")
112
                .append("<th>Grn On</th>")
113
                .append("<th>In Stock</th>")
114
                .append("</thead>")
115
                .append("<tbody>");
116
        i = 0;
117
        for (WarehouseItemAgeingModel warehouseItemAgeingModel : warehouseAgeQtyModel) {
118
 
119
            sb.append("<tr>")
120
                    .append("<td style='border:1px solid black;padding:5px'>").append(++i).append("</td>")
121
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getSupplierName()).append("</td>")
122
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getStatus()).append("</td>")
123
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getBrand()).append("</td>")
35061 amit 124
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getModelName() + " " + warehouseItemAgeingModel.getModelNumber()).append("</td>")
35050 amit 125
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getColor()).append("</td>")
126
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getAge()).append("</td>")
127
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getWarehouseName()).append("</td>")
128
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getCreated()).append("</td>")
129
                    .append("<td style='border:1px solid black;padding:5px'>").append(warehouseItemAgeingModel.getCurrentQuantity()).append("</td>")
130
                    .append("</tr>");
131
        }
132
 
133
        sb.append("</tbody></table></body></html>");
34996 ranu 134
        String subject = "Aging Stock Report: 4 Days or Older";
34240 tejus.loha 135
        String messageText = sb.toString();
136
        MimeMessage message = mailSender.createMimeMessage();
137
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
34996 ranu 138
 
139
        List<AuthUser> accountsAuthUserList = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_ACCOUNTS, Arrays.asList(EscalationType.L1, EscalationType.L2));
35050 amit 140
        List<String> accountTeamMails = accountsAuthUserList.stream().map(x -> x.getEmailId()).collect(Collectors.toList());
35008 ranu 141
        accountTeamMails.add("neeraj.gupta@smartdukaan.com");
34996 ranu 142
 
34979 ranu 143
        List<AuthUser> salesAuthUserList = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_SALES, Arrays.asList(EscalationType.L1, EscalationType.L2));
35050 amit 144
        List<String> salesTeamMails = salesAuthUserList.stream().map(x -> x.getEmailId()).collect(Collectors.toList());
35008 ranu 145
 
146
        List<AuthUser> abmAuthUserList = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_ABM, Arrays.asList(EscalationType.L1, EscalationType.L2));
35050 amit 147
        List<String> abmTeamMails = abmAuthUserList.stream().map(x -> x.getEmailId()).collect(Collectors.toList());
35008 ranu 148
 
35050 amit 149
        List<AuthUser> categoryAuthUserList = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_ABM, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3));
150
        List<String> categoryTeamMails = categoryAuthUserList.stream().map(x -> x.getEmailId()).collect(Collectors.toList());
35008 ranu 151
 
34275 tejus.loha 152
        List<String> allEmails = new ArrayList<>(Arrays.asList(
35052 amit 153
                "sm@smartdukaan.com",
35078 ranu 154
                "raj.singh@smartdukaan.com",
35094 ranu 155
                "ranu.rajput@smartdukaan.com",
156
                "tarun.verma@smartdukaan.com"
34299 tejus.loha 157
        ));
34254 tejus.loha 158
 
34297 tejus.loha 159
//         niranjan kala(authId -54) Team Emails,
34275 tejus.loha 160
        List<Integer> allReportees = authService.getAllReportees(54);
161
        List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(allReportees);
162
        List<String> categotyTeamEmails = authUsers.stream().map(x -> x.getEmailId()).collect(Collectors.toList());
163
 
35052 amit 164
        allEmails.addAll(categotyTeamEmails);
34275 tejus.loha 165
        String[] emailTo = allEmails.toArray(new String[allEmails.size()]);
34240 tejus.loha 166
        helper.setSubject(subject);
167
        helper.setText(messageText, true);
168
        helper.setTo(emailTo);
35008 ranu 169
 
170
        List<String> bccEmails = new ArrayList<>();
171
        bccEmails.addAll(salesTeamMails);
172
        bccEmails.addAll(accountTeamMails);
173
        bccEmails.addAll(categoryTeamMails);
174
        bccEmails.addAll(abmTeamMails);
175
 
176
        String[] emailBcc = bccEmails.toArray(new String[0]);
177
        helper.setBcc(emailBcc);
178
 
34275 tejus.loha 179
        InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smart Dukaan");
34240 tejus.loha 180
        helper.setFrom(senderAddress);
181
        mailSender.send(message);
182
 
183
    }
184
 
185
    @Override
34275 tejus.loha 186
    public List<CatalogAgedModel> getCatalogModelsOlderThan10Days(LocalDateTime startDate, LocalDateTime endDate) {
34240 tejus.loha 187
        List<CatalogAgedModel> fiterCatalogAgedModels =
34275 tejus.loha 188
                warehouseSupplierInvoiceRepository.selectCatalogAge(startDate, endDate, null, 0, null)
34996 ranu 189
                        .stream().filter(x -> x.getAge() >= 4 && x.getUnsold() > 0).collect(Collectors.toList());
34275 tejus.loha 190
        LOGGER.info("fiterCatalogAgedModels - " + fiterCatalogAgedModels);
34240 tejus.loha 191
        return fiterCatalogAgedModels;
192
    }
35050 amit 193
 
194
 
195
    private List<WarehouseItemAgeingModel> getAgeingModelsGtDays(LocalDateTime startDate, LocalDateTime endDate, int days) {
196
        List<WarehouseItemAgeingModel> fiterCatalogAgedModels =
197
                warehouseSupplierInvoiceRepository.selectWarehouseItemAgeing(startDate, endDate, null, 0, null)
198
                        .stream().filter(x -> x.getAge() >= days).sorted(Comparator.comparing(WarehouseItemAgeingModel::getAge).reversed()).collect(Collectors.toList());
199
        return fiterCatalogAgedModels;
200
    }
34240 tejus.loha 201
}