Subversion Repositories SmartDukaan

Rev

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