Subversion Repositories SmartDukaan

Rev

Rev 32145 | Rev 32194 | 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
 
25
import com.spice.profitmandi.dao.entity.auth.AuthUser;
26
import com.spice.profitmandi.dao.entity.catalog.Item;
27
import com.spice.profitmandi.dao.entity.inventory.Vendor;
28
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricing;
29
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricingLog;
30
import com.spice.profitmandi.dao.entity.warehouse.Supplier;
31
import com.spice.profitmandi.dao.enumuration.inventory.VendorCatalogPricingStatus;
32
import com.spice.profitmandi.dao.model.VendorCatalogPricingModel;
32163 tejbeer 33
import com.spice.profitmandi.dao.model.VendorPriceCircularModel;
32075 tejbeer 34
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
35
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
36
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingLogRepository;
37
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingRepository;
38
import com.spice.profitmandi.dao.repository.inventory.VendorRepository;
39
import com.spice.profitmandi.dao.repository.warehouse.SupplierRepository;
40
import com.spice.profitmandi.service.inventory.VendorCatalogPricingService;
41
import com.spice.profitmandi.web.model.LoginDetails;
42
import com.spice.profitmandi.web.util.CookiesProcessor;
43
import com.spice.profitmandi.web.util.MVCResponseSender;
44
 
45
@Controller
46
@Transactional(rollbackFor = Throwable.class)
47
public class VendorController {
48
 
49
 
50
    @Autowired
51
    VendorRepository vendorRepository;
52
 
53
    @Autowired
54
    private CookiesProcessor cookiesProcessor;
55
 
56
    @Autowired
57
    private AuthRepository authRepository;
58
 
59
    @Autowired
60
    private VendorCatalogPricingService vendorCatalogPricingService;
61
 
62
    @Autowired
63
    private VendorCatalogPricingLogRepository vendorCatalogPricingLogRepository;
64
 
65
    @Autowired
66
    private VendorCatalogPricingRepository vendorCatalogPricingRepository;
67
 
68
 
69
    @Autowired
70
    private MVCResponseSender mvcResponseSender;
71
 
72
    @Autowired
73
    private ItemRepository itemRepository;
74
 
75
    @Autowired
76
    private SupplierRepository supplierRepository;
77
 
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 {
125
        List<Supplier> vendors = supplierRepository.selectAll().stream().filter(x -> x.getName().toLowerCase().matches(".*?" + query.toLowerCase() + ".*?")).collect(Collectors.toList());
126
        model.addAttribute("response1", mvcResponseSender.createResponseString(vendors));
127
        return "response";
128
    }
129
 
130
 
131
    @RequestMapping(value = "/createVendorCatalogPricing", method = RequestMethod.POST)
132
    public String createVendorCatalogPricing(HttpServletRequest request, @RequestBody VendorCatalogPricingModel vendorCatalogPricingModel, Model model) throws Exception {
133
 
134
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
135
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
136
        vendorCatalogPricingModel.setAuthId(authUser.getId());
137
 
138
        LOGGER.info("vendorCatalogPricingModel {}", vendorCatalogPricingModel);
139
 
140
        vendorCatalogPricingService.createVendorCatalogPricingLog(vendorCatalogPricingModel);
141
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
142
        return "response";
143
 
144
    }
145
 
146
 
147
    @RequestMapping(value = "/vendorCatalogPricingRequests", method = RequestMethod.GET)
148
    public String vendorCatalogPricingRequests(HttpServletRequest request, Model model) throws Exception {
149
        List<VendorCatalogPricingLog> vendorCatalogPricingRequests = vendorCatalogPricingLogRepository.selectByStatus(VendorCatalogPricingStatus.PENDING);
150
        Map<Integer, AuthUser> authUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
151
        model.addAttribute("vendorCatalogPricingRequests", vendorCatalogPricingRequests);
152
        if (!vendorCatalogPricingRequests.isEmpty()) {
153
            Set<Integer> catalogIds = vendorCatalogPricingRequests.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
154
            List<Integer> vendorIds = vendorCatalogPricingRequests.stream().map(x -> x.getVendorId()).collect(Collectors.toList());
155
 
156
 
157
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
158
            model.addAttribute("itemMap", itemMap);
159
        }
160
        Map<Integer, Vendor> vendorMap = vendorRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
161
        model.addAttribute("authMap", authUserMap);
162
        model.addAttribute("vendorMap", vendorMap);
163
        model.addAttribute("vendorPricingStatus", VendorCatalogPricingStatus.values());
164
 
165
        return "vendor-catalog-pricing-request";
166
    }
167
 
168
    @RequestMapping(value = "/verifyVendorCatalogPricingRequest", method = RequestMethod.POST)
169
    public String verifyVendorCatalogPricingRequest(HttpServletRequest request, @RequestParam int id, @RequestParam VendorCatalogPricingStatus status, Model model) throws Exception {
32086 tejbeer 170
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
171
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
32075 tejbeer 172
 
173
        VendorCatalogPricingLog vendorCatalogPricingLog = vendorCatalogPricingLogRepository.selectById(id);
174
        vendorCatalogPricingLog.setStatus(status);
32086 tejbeer 175
        vendorCatalogPricingLog.setUpdatedTimestamp(LocalDateTime.now());
32075 tejbeer 176
        if (vendorCatalogPricingLog.getStatus().equals(VendorCatalogPricingStatus.APPROVED)) {
32086 tejbeer 177
            vendorCatalogPricingLog.setApprovedBy(authUser.getId());
178
            vendorCatalogPricingLog.setApprovedTimestamp(LocalDateTime.now());
32075 tejbeer 179
            vendorCatalogPricingService.createVendorCatalogPricing(vendorCatalogPricingLog);
180
        }
181
 
182
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
183
 
184
        return "response";
185
 
186
    }
187
 
188
 
189
    @RequestMapping(value = "/vendorPriceCircular", method = RequestMethod.GET)
190
    public String vendorPriceCircular(HttpServletRequest request, Model model) throws Exception {
191
 
192
 
193
        return "vendor-price-circular";
194
 
195
    }
196
 
197
 
198
    @RequestMapping(value = "/getVendorPriceCircular", method = RequestMethod.GET)
199
    public String getVendorPriceCircular(HttpServletRequest request, @RequestParam int vendorId, @RequestParam LocalDate effectedDate, Model model) throws Exception {
200
 
32163 tejbeer 201
        List<VendorPriceCircularModel> vendorCatalogPricings = vendorCatalogPricingLogRepository.selectByVendorAndEffectedDate(vendorId, effectedDate);
32075 tejbeer 202
 
203
        if (!vendorCatalogPricings.isEmpty()) {
204
            Set<Integer> catalogIds = vendorCatalogPricings.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
205
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
206
            model.addAttribute("itemMap", itemMap);
207
        }
208
 
209
        model.addAttribute("vendorCatalogPricings", vendorCatalogPricings);
210
        return "vendor-price-circular-view";
211
 
212
    }
32145 tejbeer 213
 
214
    @RequestMapping(value = "/getPricing", method = RequestMethod.GET)
215
    public String getPricing(HttpServletRequest request, @RequestParam int vendorId, @RequestParam int itemId, Model model) throws Exception {
216
 
217
        Item item = itemRepository.selectById(itemId);
218
        VendorCatalogPricing vendorCatalogPricing = vendorCatalogPricingRepository.selectByVendorAndCatalogId(vendorId, item.getCatalogItemId());
219
 
220
        LOGGER.info("vendorCatalogPricing {}", vendorCatalogPricing);
221
 
222
 
223
        model.addAttribute("response1", mvcResponseSender.createResponseString(vendorCatalogPricing));
224
 
225
        return "response";
226
 
227
    }
32075 tejbeer 228
}