Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
32075 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
32900 amit.gupta 3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
32194 tejbeer 4
import com.spice.profitmandi.common.model.ItemDescriptionModel;
32903 amit.gupta 5
import com.spice.profitmandi.common.model.ProfitMandiConstants;
33183 shampa 6
import com.spice.profitmandi.common.util.FileUtil;
7
import com.spice.profitmandi.common.util.FormattingUtils;
32075 tejbeer 8
import com.spice.profitmandi.dao.entity.auth.AuthUser;
9
import com.spice.profitmandi.dao.entity.catalog.Item;
10
import com.spice.profitmandi.dao.entity.inventory.Vendor;
11
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricing;
12
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricingLog;
13
import com.spice.profitmandi.dao.entity.warehouse.Supplier;
14
import com.spice.profitmandi.dao.enumuration.inventory.VendorCatalogPricingStatus;
33183 shampa 15
import com.spice.profitmandi.dao.model.PriceDropReportModel;
32075 tejbeer 16
import com.spice.profitmandi.dao.model.VendorCatalogPricingModel;
32163 tejbeer 17
import com.spice.profitmandi.dao.model.VendorPriceCircularModel;
32075 tejbeer 18
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
19
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
20
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingLogRepository;
21
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingRepository;
22
import com.spice.profitmandi.dao.repository.inventory.VendorRepository;
33183 shampa 23
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
32075 tejbeer 24
import com.spice.profitmandi.dao.repository.warehouse.SupplierRepository;
33183 shampa 25
import com.spice.profitmandi.service.authentication.RoleManager;
32075 tejbeer 26
import com.spice.profitmandi.service.inventory.VendorCatalogPricingService;
33183 shampa 27
import com.spice.profitmandi.service.order.OrderService;
32194 tejbeer 28
import com.spice.profitmandi.service.warehouse.WarehouseService;
32075 tejbeer 29
import com.spice.profitmandi.web.model.LoginDetails;
30
import com.spice.profitmandi.web.util.CookiesProcessor;
31
import com.spice.profitmandi.web.util.MVCResponseSender;
32383 amit.gupta 32
import org.apache.logging.log4j.LogManager;
33
import org.apache.logging.log4j.Logger;
34
import org.springframework.beans.factory.annotation.Autowired;
33183 shampa 35
import org.springframework.http.ResponseEntity;
32383 amit.gupta 36
import org.springframework.stereotype.Controller;
37
import org.springframework.transaction.annotation.Transactional;
38
import org.springframework.ui.Model;
39
import org.springframework.web.bind.annotation.RequestBody;
40
import org.springframework.web.bind.annotation.RequestMapping;
41
import org.springframework.web.bind.annotation.RequestMethod;
42
import org.springframework.web.bind.annotation.RequestParam;
32075 tejbeer 43
 
32383 amit.gupta 44
import javax.servlet.http.HttpServletRequest;
45
import java.time.LocalDate;
46
import java.time.LocalDateTime;
33183 shampa 47
import java.time.LocalTime;
32383 amit.gupta 48
import java.util.*;
49
import java.util.stream.Collectors;
50
 
32075 tejbeer 51
@Controller
52
@Transactional(rollbackFor = Throwable.class)
53
public class VendorController {
54
 
55
 
56
    @Autowired
57
    VendorRepository vendorRepository;
58
 
59
    @Autowired
60
    private CookiesProcessor cookiesProcessor;
61
 
62
    @Autowired
33183 shampa 63
    private RoleManager roleManager;
64
 
65
    @Autowired
32075 tejbeer 66
    private AuthRepository authRepository;
67
 
68
    @Autowired
33183 shampa 69
    private OrderRepository orderRepository;
70
 
71
    @Autowired
72
    private OrderService orderService;
73
 
74
    @Autowired
32075 tejbeer 75
    private VendorCatalogPricingService vendorCatalogPricingService;
76
 
77
    @Autowired
78
    private VendorCatalogPricingLogRepository vendorCatalogPricingLogRepository;
79
 
80
    @Autowired
81
    private VendorCatalogPricingRepository vendorCatalogPricingRepository;
82
 
83
 
84
    @Autowired
85
    private MVCResponseSender mvcResponseSender;
86
 
87
    @Autowired
88
    private ItemRepository itemRepository;
89
 
90
    @Autowired
91
    private SupplierRepository supplierRepository;
92
 
32194 tejbeer 93
    @Autowired
94
    private WarehouseService warehouseService;
95
 
32075 tejbeer 96
    private static final Logger LOGGER = LogManager.getLogger(VendorController.class);
97
 
98
 
99
    @RequestMapping(value = "/vendorCatalogPricing", method = RequestMethod.GET)
100
    public String vendorCatalogPricing(HttpServletRequest request, Model model) throws Exception {
101
 
102
        return "vendor-catalog-pricing";
103
    }
104
 
105
 
106
    @RequestMapping(value = "/getVendorCatalogPricingByModel", method = RequestMethod.GET)
107
    public String getVendorCatalogPricingByModel(HttpServletRequest request, @RequestParam int catalogId, Model model) throws Exception {
108
 
109
        List<Integer> vendorIds = new ArrayList<>();
110
        Map<Integer, VendorCatalogPricing> vendorCatalogPricingMap = new HashMap<>();
111
        Map<Integer, VendorCatalogPricingLog> vendorCatalogPricingLogMap = new HashMap<>();
112
        List<VendorCatalogPricing> vendorCatalogPricing = vendorCatalogPricingRepository.selectByCatalogId(catalogId);
113
        if (!vendorCatalogPricing.isEmpty()) {
114
            vendorIds.addAll(vendorCatalogPricing.stream().distinct().map(x -> x.getVendorId()).collect(Collectors.toList()));
115
            vendorCatalogPricingMap = vendorCatalogPricing.stream().collect(Collectors.toMap(x -> x.getVendorId(), x -> x));
116
        }
117
 
118
        List<VendorCatalogPricingLog> vendorCatalogPricingLog = vendorCatalogPricingLogRepository.selectByCatalogId(catalogId, VendorCatalogPricingStatus.PENDING);
119
        if (!vendorCatalogPricingLog.isEmpty()) {
120
            vendorIds.addAll(vendorCatalogPricingLog.stream().distinct().map(x -> x.getVendorId()).collect(Collectors.toList()));
121
            vendorCatalogPricingLogMap = vendorCatalogPricingLog.stream().filter(x -> x.getStatus().equals(VendorCatalogPricingStatus.PENDING)).collect(Collectors.toMap(x -> x.getVendorId(), x -> x));
122
        }
123
        LOGGER.info("VendorIds {}", vendorIds);
124
        List<Supplier> suppliers = new ArrayList<Supplier>();
125
        if (!vendorIds.isEmpty()) {
126
            suppliers.addAll(supplierRepository.selectBySupplierIds(vendorIds));
127
        }
128
        LOGGER.info("suppliers {}", suppliers);
129
 
130
        model.addAttribute("suppliers", suppliers);
131
        model.addAttribute("vendorCatalogPricingMap", vendorCatalogPricingMap);
132
        model.addAttribute("vendorCatalogPricingLogMap", vendorCatalogPricingLogMap);
133
 
134
        model.addAttribute("catalogId", catalogId);
135
 
136
 
137
        return "vendor-catalog-pricing-view";
138
    }
139
 
140
 
141
    @RequestMapping(value = "/vendors", method = RequestMethod.GET)
142
    public String getVendor(HttpServletRequest request, Model model, @RequestParam String query) throws Throwable {
32398 amit.gupta 143
        List<Supplier> vendors = supplierRepository.selectAll().stream().filter(x -> x.getName().toLowerCase().matches(".*?" + query.toLowerCase() + ".*?"))
144
                .filter(x -> x.isStatus()).collect(Collectors.toList());
32075 tejbeer 145
        model.addAttribute("response1", mvcResponseSender.createResponseString(vendors));
146
        return "response";
147
    }
148
 
149
 
150
    @RequestMapping(value = "/createVendorCatalogPricing", method = RequestMethod.POST)
151
    public String createVendorCatalogPricing(HttpServletRequest request, @RequestBody VendorCatalogPricingModel vendorCatalogPricingModel, Model model) throws Exception {
152
 
153
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
154
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
155
        vendorCatalogPricingModel.setAuthId(authUser.getId());
156
 
157
        LOGGER.info("vendorCatalogPricingModel {}", vendorCatalogPricingModel);
158
 
159
        vendorCatalogPricingService.createVendorCatalogPricingLog(vendorCatalogPricingModel);
160
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
161
        return "response";
162
 
163
    }
164
 
165
 
166
    @RequestMapping(value = "/vendorCatalogPricingRequests", method = RequestMethod.GET)
167
    public String vendorCatalogPricingRequests(HttpServletRequest request, Model model) throws Exception {
168
        List<VendorCatalogPricingLog> vendorCatalogPricingRequests = vendorCatalogPricingLogRepository.selectByStatus(VendorCatalogPricingStatus.PENDING);
169
        Map<Integer, AuthUser> authUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
170
        model.addAttribute("vendorCatalogPricingRequests", vendorCatalogPricingRequests);
171
        if (!vendorCatalogPricingRequests.isEmpty()) {
172
            Set<Integer> catalogIds = vendorCatalogPricingRequests.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
173
            List<Integer> vendorIds = vendorCatalogPricingRequests.stream().map(x -> x.getVendorId()).collect(Collectors.toList());
174
 
175
 
176
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
177
            model.addAttribute("itemMap", itemMap);
178
        }
179
        Map<Integer, Vendor> vendorMap = vendorRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
180
        model.addAttribute("authMap", authUserMap);
181
        model.addAttribute("vendorMap", vendorMap);
182
        model.addAttribute("vendorPricingStatus", VendorCatalogPricingStatus.values());
183
 
184
        return "vendor-catalog-pricing-request";
185
    }
186
 
187
    @RequestMapping(value = "/verifyVendorCatalogPricingRequest", method = RequestMethod.POST)
188
    public String verifyVendorCatalogPricingRequest(HttpServletRequest request, @RequestParam int id, @RequestParam VendorCatalogPricingStatus status, Model model) throws Exception {
32086 tejbeer 189
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
190
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
32075 tejbeer 191
 
192
        VendorCatalogPricingLog vendorCatalogPricingLog = vendorCatalogPricingLogRepository.selectById(id);
32298 tejbeer 193
 
194
        if (status.equals(VendorCatalogPricingStatus.APPROVED)) {
32785 amit.gupta 195
            List<VendorCatalogPricingLog> vendorCatalogPricingLogsOnEffectedDate = vendorCatalogPricingLogRepository.selectByEffectedDateAndCatalogId(vendorCatalogPricingLog.getVendorId(), vendorCatalogPricingLog.getCatalogId(), vendorCatalogPricingLog.getEffectedOn());
32791 amit.gupta 196
            Optional<VendorCatalogPricingLog> optionalVendorCatalogPricingLog = vendorCatalogPricingLogsOnEffectedDate.stream().filter(x -> x.getStatus().equals(VendorCatalogPricingStatus.APPROVED)).findAny();
197
            if (optionalVendorCatalogPricingLog.isPresent()) {
198
                VendorCatalogPricingLog approvedPricingLog = optionalVendorCatalogPricingLog.get();
32786 amit.gupta 199
                approvedPricingLog.setStatus(VendorCatalogPricingStatus.REJECTED);
200
                approvedPricingLog.setUpdatedTimestamp(LocalDateTime.now());
32298 tejbeer 201
            }
32785 amit.gupta 202
 
32298 tejbeer 203
        }
32075 tejbeer 204
        vendorCatalogPricingLog.setStatus(status);
32086 tejbeer 205
        vendorCatalogPricingLog.setUpdatedTimestamp(LocalDateTime.now());
32075 tejbeer 206
        if (vendorCatalogPricingLog.getStatus().equals(VendorCatalogPricingStatus.APPROVED)) {
32086 tejbeer 207
            vendorCatalogPricingLog.setApprovedBy(authUser.getId());
208
            vendorCatalogPricingLog.setApprovedTimestamp(LocalDateTime.now());
32075 tejbeer 209
            vendorCatalogPricingService.createVendorCatalogPricing(vendorCatalogPricingLog);
210
        }
211
 
212
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
213
        return "response";
214
    }
215
 
216
 
217
    @RequestMapping(value = "/vendorPriceCircular", method = RequestMethod.GET)
218
    public String vendorPriceCircular(HttpServletRequest request, Model model) throws Exception {
219
 
220
 
221
        return "vendor-price-circular";
222
 
223
    }
224
 
225
 
226
    @RequestMapping(value = "/getVendorPriceCircular", method = RequestMethod.GET)
33183 shampa 227
    public String getVendorPriceCircular(HttpServletRequest request, @RequestParam(defaultValue = "0") int vendorId, @RequestParam LocalDate effectedDate, Model model) throws Exception {
32075 tejbeer 228
 
32485 amit.gupta 229
        List<VendorPriceCircularModel> vendorCatalogPricings = vendorCatalogPricingLogRepository.getVendorPricesOnDate(vendorId, effectedDate);
33183 shampa 230
        Map<Integer, Supplier> supplierMap = supplierRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
32075 tejbeer 231
        if (!vendorCatalogPricings.isEmpty()) {
232
            Set<Integer> catalogIds = vendorCatalogPricings.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
233
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
234
            model.addAttribute("itemMap", itemMap);
235
        }
236
 
237
        model.addAttribute("vendorCatalogPricings", vendorCatalogPricings);
33183 shampa 238
        model.addAttribute("suppliers", supplierMap);
32075 tejbeer 239
        return "vendor-price-circular-view";
240
 
241
    }
33183 shampa 242
    @RequestMapping(value = "/downloadPriceCircularReport", method = RequestMethod.GET)
243
    public ResponseEntity<?> getSelectDownloadPriceCircularReport(HttpServletRequest request,
244
                                                              @RequestParam(defaultValue = "0") int fofoId,
245
                                                              @RequestParam(name = "startDate") LocalDate startDate) throws Exception {
32145 tejbeer 246
 
33183 shampa 247
        List<VendorPriceCircularModel> vendorCatalogPricings = vendorCatalogPricingLogRepository.getVendorPricesOnDate(0, startDate);
248
        Map<Integer, Supplier> supplierMap = supplierRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
249
        Map<Integer, List<Item>> itemMap = new HashMap<>();
250
        List<List<?>> rows = new ArrayList<>();
251
        if (!vendorCatalogPricings.isEmpty()) {
252
            Set<Integer> catalogIds = vendorCatalogPricings.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
253
            itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
254
        }
255
 
256
 
257
        for(VendorPriceCircularModel vcp: vendorCatalogPricings) {
258
 
259
            rows.add(Arrays.asList(vcp.getCatalogId(),supplierMap.get(vcp.getVendorId()).getName(),itemMap.get(vcp.getCatalogId()).get(0).getItemDescriptionNoColor(),vcp.getTransferPrice(),vcp.getDealerPrice(),vcp.getMop(),
260
                    FormattingUtils.formatDate(vcp.getEffectedOn())));
261
 
262
        }
263
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
264
                .getCSVByteStream(Arrays.asList("Catalog Id","Vendor Name", "Model name", "TP", "DP", "MOP",
265
                        "Effected On"), rows);
266
 
267
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price circular report");
268
 
269
        return responseEntity;
270
 
271
    }
272
 
32145 tejbeer 273
    @RequestMapping(value = "/getPricing", method = RequestMethod.GET)
32488 amit.gupta 274
    public String getPricing(HttpServletRequest request, @RequestParam int vendorId, @RequestParam int itemId, @RequestParam LocalDate onDate, Model model) throws Exception {
32901 amit.gupta 275
        Item item = itemRepository.selectById(itemId);
32488 amit.gupta 276
        VendorPriceCircularModel vendorPriceCircularModel = vendorCatalogPricingLogRepository.getVendorPriceOnDate(vendorId, item.getCatalogItemId(), onDate);
32145 tejbeer 277
 
32488 amit.gupta 278
        LOGGER.info("vendorCatalogPricing {}", vendorPriceCircularModel);
32145 tejbeer 279
 
32488 amit.gupta 280
        model.addAttribute("response1", mvcResponseSender.createResponseString(vendorPriceCircularModel));
32145 tejbeer 281
 
282
        return "response";
283
 
284
    }
32194 tejbeer 285
 
32903 amit.gupta 286
    private void addVendorPricingIfMissing(int itemId, int vendorId) throws ProfitMandiBusinessException {
32942 amit.gupta 287
        Supplier supplier = supplierRepository.selectById(vendorId);
32900 amit.gupta 288
        Item item = itemRepository.selectById(itemId);
32903 amit.gupta 289
        int vendorWithPricing = 0;
32970 amit.gupta 290
        if (supplier.isInternal() && (item.getBrand().equals("Samsung") || item.getCategoryId() != 10006)) {
32927 amit.gupta 291
            VendorPriceCircularModel vendorPriceCircularModel = vendorCatalogPricingLogRepository.getVendorPriceOnDate(vendorId, item.getCatalogItemId(), LocalDate.now());
32903 amit.gupta 292
            LOGGER.info("VendorPriceCircularModel - {}", vendorPriceCircularModel);
293
            if (vendorPriceCircularModel == null) {
32942 amit.gupta 294
                if (item.getBrand().equals("Samsung")) {
295
                    //BSB
296
                    vendorWithPricing = 334;
32970 amit.gupta 297
                } else if (item.getCategoryId() != 10006) {
298
                    vendorWithPricing = vendorCatalogPricingLogRepository.selectByCatalogId(item.getCatalogItemId(), VendorCatalogPricingStatus.APPROVED).stream().map(x -> x.getVendorId())
299
                            .findFirst().orElse(null);
32903 amit.gupta 300
                }
301
                VendorPriceCircularModel existingPriceCircular = vendorCatalogPricingLogRepository.getVendorPriceOnDate(vendorWithPricing, item.getCatalogItemId(), LocalDate.now());
302
                LOGGER.info("Existing price circular - {}", existingPriceCircular);
303
                if (existingPriceCircular == null) {
304
                    throw new ProfitMandiBusinessException("Pricing missing for vendor - " + vendorId, "Pricing missing for vendor - " + vendorId, "Pricing missing for vendor - " + vendorId);
305
                }
306
                VendorCatalogPricingModel vendorCatalogPricingModel = new VendorCatalogPricingModel();
307
                vendorCatalogPricingModel.setAuthId(52);
308
                vendorCatalogPricingModel.setVendorId(vendorId);
309
                vendorCatalogPricingModel.setCatalogId(existingPriceCircular.getCatalogId());
310
                vendorCatalogPricingModel.setDp(existingPriceCircular.getDealerPrice());
311
                vendorCatalogPricingModel.setEffectedOn(existingPriceCircular.getEffectedOn());
312
                vendorCatalogPricingModel.setMop(existingPriceCircular.getMop());
313
                vendorCatalogPricingModel.setTp(existingPriceCircular.getTransferPrice());
314
                vendorCatalogPricingModel.setCatalogId(item.getCatalogItemId());
315
 
316
                VendorCatalogPricingLog vendorCatalogPricingLog = vendorCatalogPricingService.createVendorCatalogPricingLog(vendorCatalogPricingModel);
317
                vendorCatalogPricingLog.setStatus(VendorCatalogPricingStatus.APPROVED);
318
                vendorCatalogPricingLog.setUpdatedTimestamp(LocalDateTime.now());
319
                //Deenanath Auth Id
320
                vendorCatalogPricingLog.setApprovedBy(138);
321
                vendorCatalogPricingLog.setApprovedTimestamp(LocalDateTime.now());
322
                vendorCatalogPricingService.createVendorCatalogPricing(vendorCatalogPricingLog);
323
 
32900 amit.gupta 324
            }
325
        }
326
    }
327
 
32194 tejbeer 328
    @RequestMapping(value = "/vendorItem", method = RequestMethod.GET)
32900 amit.gupta 329
    public String getItemPricing(HttpServletRequest request, Model model, @RequestParam int vendorId,
32924 amit.gupta 330
                                 @RequestParam String query) throws Exception {
32194 tejbeer 331
        String query1 = query.toLowerCase();
32900 amit.gupta 332
        int itemId = 0;
333
        try {
334
            itemId = Integer.parseInt(query1);
32903 amit.gupta 335
            addVendorPricingIfMissing(itemId, vendorId);
32924 amit.gupta 336
        } catch (NumberFormatException e) {
337
            LOGGER.info("Ignore number format exception");
32942 amit.gupta 338
            // e.printStackTrace();
32898 amit.gupta 339
        }
32903 amit.gupta 340
        LOGGER.info("Vendor Id - {}", vendorId);
32194 tejbeer 341
        List<ItemDescriptionModel> partnersItemDescription = warehouseService.getAllPartnerItemStringDescription(vendorId).parallelStream().filter(x -> x.getItemDescription().toLowerCase().matches(".*?" + query1 + ".*?")).collect(Collectors.toList());
342
        LOGGER.info("partnersItemDescription" + partnersItemDescription);
343
 
344
        model.addAttribute("response1", mvcResponseSender.createResponseString(partnersItemDescription));
345
        return "response";
346
    }
32075 tejbeer 347
}