Subversion Repositories SmartDukaan

Rev

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