Subversion Repositories SmartDukaan

Rev

Rev 32899 | Rev 32901 | 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;
32075 tejbeer 5
import com.spice.profitmandi.dao.entity.auth.AuthUser;
6
import com.spice.profitmandi.dao.entity.catalog.Item;
7
import com.spice.profitmandi.dao.entity.inventory.Vendor;
8
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricing;
9
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricingLog;
10
import com.spice.profitmandi.dao.entity.warehouse.Supplier;
11
import com.spice.profitmandi.dao.enumuration.inventory.VendorCatalogPricingStatus;
12
import com.spice.profitmandi.dao.model.VendorCatalogPricingModel;
32163 tejbeer 13
import com.spice.profitmandi.dao.model.VendorPriceCircularModel;
32075 tejbeer 14
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
15
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
16
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingLogRepository;
17
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingRepository;
18
import com.spice.profitmandi.dao.repository.inventory.VendorRepository;
19
import com.spice.profitmandi.dao.repository.warehouse.SupplierRepository;
20
import com.spice.profitmandi.service.inventory.VendorCatalogPricingService;
32194 tejbeer 21
import com.spice.profitmandi.service.warehouse.WarehouseService;
32075 tejbeer 22
import com.spice.profitmandi.web.model.LoginDetails;
23
import com.spice.profitmandi.web.util.CookiesProcessor;
24
import com.spice.profitmandi.web.util.MVCResponseSender;
32383 amit.gupta 25
import org.apache.logging.log4j.LogManager;
26
import org.apache.logging.log4j.Logger;
27
import org.springframework.beans.factory.annotation.Autowired;
28
import org.springframework.stereotype.Controller;
29
import org.springframework.transaction.annotation.Transactional;
30
import org.springframework.ui.Model;
31
import org.springframework.web.bind.annotation.RequestBody;
32
import org.springframework.web.bind.annotation.RequestMapping;
33
import org.springframework.web.bind.annotation.RequestMethod;
34
import org.springframework.web.bind.annotation.RequestParam;
32075 tejbeer 35
 
32383 amit.gupta 36
import javax.servlet.http.HttpServletRequest;
37
import java.time.LocalDate;
38
import java.time.LocalDateTime;
39
import java.util.*;
40
import java.util.stream.Collectors;
41
 
32075 tejbeer 42
@Controller
43
@Transactional(rollbackFor = Throwable.class)
44
public class VendorController {
45
 
46
 
47
    @Autowired
48
    VendorRepository vendorRepository;
49
 
50
    @Autowired
51
    private CookiesProcessor cookiesProcessor;
52
 
53
    @Autowired
54
    private AuthRepository authRepository;
55
 
56
    @Autowired
57
    private VendorCatalogPricingService vendorCatalogPricingService;
58
 
59
    @Autowired
60
    private VendorCatalogPricingLogRepository vendorCatalogPricingLogRepository;
61
 
62
    @Autowired
63
    private VendorCatalogPricingRepository vendorCatalogPricingRepository;
64
 
65
 
66
    @Autowired
67
    private MVCResponseSender mvcResponseSender;
68
 
69
    @Autowired
70
    private ItemRepository itemRepository;
71
 
72
    @Autowired
73
    private SupplierRepository supplierRepository;
74
 
32194 tejbeer 75
    @Autowired
76
    private WarehouseService warehouseService;
77
 
32075 tejbeer 78
    private static final Logger LOGGER = LogManager.getLogger(VendorController.class);
79
 
80
 
81
    @RequestMapping(value = "/vendorCatalogPricing", method = RequestMethod.GET)
82
    public String vendorCatalogPricing(HttpServletRequest request, Model model) throws Exception {
83
 
84
        return "vendor-catalog-pricing";
85
    }
86
 
87
 
88
    @RequestMapping(value = "/getVendorCatalogPricingByModel", method = RequestMethod.GET)
89
    public String getVendorCatalogPricingByModel(HttpServletRequest request, @RequestParam int catalogId, Model model) throws Exception {
90
 
91
        List<Integer> vendorIds = new ArrayList<>();
92
        Map<Integer, VendorCatalogPricing> vendorCatalogPricingMap = new HashMap<>();
93
        Map<Integer, VendorCatalogPricingLog> vendorCatalogPricingLogMap = new HashMap<>();
94
        List<VendorCatalogPricing> vendorCatalogPricing = vendorCatalogPricingRepository.selectByCatalogId(catalogId);
95
        if (!vendorCatalogPricing.isEmpty()) {
96
            vendorIds.addAll(vendorCatalogPricing.stream().distinct().map(x -> x.getVendorId()).collect(Collectors.toList()));
97
            vendorCatalogPricingMap = vendorCatalogPricing.stream().collect(Collectors.toMap(x -> x.getVendorId(), x -> x));
98
        }
99
 
100
        List<VendorCatalogPricingLog> vendorCatalogPricingLog = vendorCatalogPricingLogRepository.selectByCatalogId(catalogId, VendorCatalogPricingStatus.PENDING);
101
        if (!vendorCatalogPricingLog.isEmpty()) {
102
            vendorIds.addAll(vendorCatalogPricingLog.stream().distinct().map(x -> x.getVendorId()).collect(Collectors.toList()));
103
            vendorCatalogPricingLogMap = vendorCatalogPricingLog.stream().filter(x -> x.getStatus().equals(VendorCatalogPricingStatus.PENDING)).collect(Collectors.toMap(x -> x.getVendorId(), x -> x));
104
        }
105
        LOGGER.info("VendorIds {}", vendorIds);
106
        List<Supplier> suppliers = new ArrayList<Supplier>();
107
        if (!vendorIds.isEmpty()) {
108
            suppliers.addAll(supplierRepository.selectBySupplierIds(vendorIds));
109
        }
110
        LOGGER.info("suppliers {}", suppliers);
111
 
112
        model.addAttribute("suppliers", suppliers);
113
        model.addAttribute("vendorCatalogPricingMap", vendorCatalogPricingMap);
114
        model.addAttribute("vendorCatalogPricingLogMap", vendorCatalogPricingLogMap);
115
 
116
        model.addAttribute("catalogId", catalogId);
117
 
118
 
119
        return "vendor-catalog-pricing-view";
120
    }
121
 
122
 
123
    @RequestMapping(value = "/vendors", method = RequestMethod.GET)
124
    public String getVendor(HttpServletRequest request, Model model, @RequestParam String query) throws Throwable {
32398 amit.gupta 125
        List<Supplier> vendors = supplierRepository.selectAll().stream().filter(x -> x.getName().toLowerCase().matches(".*?" + query.toLowerCase() + ".*?"))
126
                .filter(x -> x.isStatus()).collect(Collectors.toList());
32075 tejbeer 127
        model.addAttribute("response1", mvcResponseSender.createResponseString(vendors));
128
        return "response";
129
    }
130
 
131
 
132
    @RequestMapping(value = "/createVendorCatalogPricing", method = RequestMethod.POST)
133
    public String createVendorCatalogPricing(HttpServletRequest request, @RequestBody VendorCatalogPricingModel vendorCatalogPricingModel, Model model) throws Exception {
134
 
135
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
136
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
137
        vendorCatalogPricingModel.setAuthId(authUser.getId());
138
 
139
        LOGGER.info("vendorCatalogPricingModel {}", vendorCatalogPricingModel);
140
 
141
        vendorCatalogPricingService.createVendorCatalogPricingLog(vendorCatalogPricingModel);
142
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
143
        return "response";
144
 
145
    }
146
 
147
 
148
    @RequestMapping(value = "/vendorCatalogPricingRequests", method = RequestMethod.GET)
149
    public String vendorCatalogPricingRequests(HttpServletRequest request, Model model) throws Exception {
150
        List<VendorCatalogPricingLog> vendorCatalogPricingRequests = vendorCatalogPricingLogRepository.selectByStatus(VendorCatalogPricingStatus.PENDING);
151
        Map<Integer, AuthUser> authUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
152
        model.addAttribute("vendorCatalogPricingRequests", vendorCatalogPricingRequests);
153
        if (!vendorCatalogPricingRequests.isEmpty()) {
154
            Set<Integer> catalogIds = vendorCatalogPricingRequests.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
155
            List<Integer> vendorIds = vendorCatalogPricingRequests.stream().map(x -> x.getVendorId()).collect(Collectors.toList());
156
 
157
 
158
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
159
            model.addAttribute("itemMap", itemMap);
160
        }
161
        Map<Integer, Vendor> vendorMap = vendorRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
162
        model.addAttribute("authMap", authUserMap);
163
        model.addAttribute("vendorMap", vendorMap);
164
        model.addAttribute("vendorPricingStatus", VendorCatalogPricingStatus.values());
165
 
166
        return "vendor-catalog-pricing-request";
167
    }
168
 
169
    @RequestMapping(value = "/verifyVendorCatalogPricingRequest", method = RequestMethod.POST)
170
    public String verifyVendorCatalogPricingRequest(HttpServletRequest request, @RequestParam int id, @RequestParam VendorCatalogPricingStatus status, Model model) throws Exception {
32086 tejbeer 171
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
172
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
32075 tejbeer 173
 
174
        VendorCatalogPricingLog vendorCatalogPricingLog = vendorCatalogPricingLogRepository.selectById(id);
32298 tejbeer 175
 
176
        if (status.equals(VendorCatalogPricingStatus.APPROVED)) {
32785 amit.gupta 177
            List<VendorCatalogPricingLog> vendorCatalogPricingLogsOnEffectedDate = vendorCatalogPricingLogRepository.selectByEffectedDateAndCatalogId(vendorCatalogPricingLog.getVendorId(), vendorCatalogPricingLog.getCatalogId(), vendorCatalogPricingLog.getEffectedOn());
32791 amit.gupta 178
            Optional<VendorCatalogPricingLog> optionalVendorCatalogPricingLog = vendorCatalogPricingLogsOnEffectedDate.stream().filter(x -> x.getStatus().equals(VendorCatalogPricingStatus.APPROVED)).findAny();
179
            if (optionalVendorCatalogPricingLog.isPresent()) {
180
                VendorCatalogPricingLog approvedPricingLog = optionalVendorCatalogPricingLog.get();
32786 amit.gupta 181
                approvedPricingLog.setStatus(VendorCatalogPricingStatus.REJECTED);
182
                approvedPricingLog.setUpdatedTimestamp(LocalDateTime.now());
32298 tejbeer 183
            }
32785 amit.gupta 184
 
32298 tejbeer 185
        }
32075 tejbeer 186
        vendorCatalogPricingLog.setStatus(status);
32086 tejbeer 187
        vendorCatalogPricingLog.setUpdatedTimestamp(LocalDateTime.now());
32075 tejbeer 188
        if (vendorCatalogPricingLog.getStatus().equals(VendorCatalogPricingStatus.APPROVED)) {
32086 tejbeer 189
            vendorCatalogPricingLog.setApprovedBy(authUser.getId());
190
            vendorCatalogPricingLog.setApprovedTimestamp(LocalDateTime.now());
32075 tejbeer 191
            vendorCatalogPricingService.createVendorCatalogPricing(vendorCatalogPricingLog);
192
        }
193
 
194
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
195
        return "response";
196
    }
197
 
198
 
199
    @RequestMapping(value = "/vendorPriceCircular", method = RequestMethod.GET)
200
    public String vendorPriceCircular(HttpServletRequest request, Model model) throws Exception {
201
 
202
 
203
        return "vendor-price-circular";
204
 
205
    }
206
 
207
 
208
    @RequestMapping(value = "/getVendorPriceCircular", method = RequestMethod.GET)
209
    public String getVendorPriceCircular(HttpServletRequest request, @RequestParam int vendorId, @RequestParam LocalDate effectedDate, Model model) throws Exception {
210
 
32485 amit.gupta 211
        List<VendorPriceCircularModel> vendorCatalogPricings = vendorCatalogPricingLogRepository.getVendorPricesOnDate(vendorId, effectedDate);
32075 tejbeer 212
 
213
        if (!vendorCatalogPricings.isEmpty()) {
214
            Set<Integer> catalogIds = vendorCatalogPricings.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
215
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
216
            model.addAttribute("itemMap", itemMap);
217
        }
218
 
219
        model.addAttribute("vendorCatalogPricings", vendorCatalogPricings);
220
        return "vendor-price-circular-view";
221
 
222
    }
32145 tejbeer 223
 
224
    @RequestMapping(value = "/getPricing", method = RequestMethod.GET)
32488 amit.gupta 225
    public String getPricing(HttpServletRequest request, @RequestParam int vendorId, @RequestParam int itemId, @RequestParam LocalDate onDate, Model model) throws Exception {
32145 tejbeer 226
 
32900 amit.gupta 227
        vendorId = this.getVendorId(itemId, vendorId);
32488 amit.gupta 228
        VendorPriceCircularModel vendorPriceCircularModel = vendorCatalogPricingLogRepository.getVendorPriceOnDate(vendorId, item.getCatalogItemId(), onDate);
32145 tejbeer 229
 
32488 amit.gupta 230
        LOGGER.info("vendorCatalogPricing {}", vendorPriceCircularModel);
32145 tejbeer 231
 
32488 amit.gupta 232
        model.addAttribute("response1", mvcResponseSender.createResponseString(vendorPriceCircularModel));
32145 tejbeer 233
 
234
        return "response";
235
 
236
    }
32194 tejbeer 237
 
32900 amit.gupta 238
    private int getVendorId(int itemId, int vendorId) throws ProfitMandiBusinessException {
239
        Item item = itemRepository.selectById(itemId);
240
        if (vendorId == 406 || vendorId == 419) {
241
            if (item.getBrand().equals("Oppo")) {
242
                //RS Distributions
243
                vendorId = 438;
244
            } else if (item.getBrand().equals("Vivo")) {
245
                //Nexg
246
                vendorId = 393;
247
            } else {
248
                //NSSPL Delhi
249
                vendorId = 325;
250
            }
251
        }
252
        return vendorId;
253
    }
254
 
32194 tejbeer 255
    @RequestMapping(value = "/vendorItem", method = RequestMethod.GET)
32900 amit.gupta 256
    public String getItemPricing(HttpServletRequest request, Model model, @RequestParam int vendorId,
257
                                 @RequestParam String query) throws Throwable {
32194 tejbeer 258
        String query1 = query.toLowerCase();
32900 amit.gupta 259
        int itemId = 0;
260
        try {
261
            itemId = Integer.parseInt(query1);
262
            vendorId = this.getVendorId(itemId, vendorId);
263
        } catch (Exception e) {
264
            //
32898 amit.gupta 265
        }
32900 amit.gupta 266
        //UK or rudrapu
32194 tejbeer 267
        List<ItemDescriptionModel> partnersItemDescription = warehouseService.getAllPartnerItemStringDescription(vendorId).parallelStream().filter(x -> x.getItemDescription().toLowerCase().matches(".*?" + query1 + ".*?")).collect(Collectors.toList());
268
        LOGGER.info("partnersItemDescription" + partnersItemDescription);
269
 
270
        model.addAttribute("response1", mvcResponseSender.createResponseString(partnersItemDescription));
271
        return "response";
272
    }
32075 tejbeer 273
}