Subversion Repositories SmartDukaan

Rev

Rev 32086 | Go to most recent revision | Details | 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;
4
import java.util.ArrayList;
5
import java.util.HashMap;
6
import java.util.List;
7
import java.util.Map;
8
import java.util.Set;
9
import java.util.stream.Collectors;
10
 
11
import javax.servlet.http.HttpServletRequest;
12
 
13
import org.apache.logging.log4j.LogManager;
14
import org.apache.logging.log4j.Logger;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.stereotype.Controller;
17
import org.springframework.transaction.annotation.Transactional;
18
import org.springframework.ui.Model;
19
import org.springframework.web.bind.annotation.RequestBody;
20
import org.springframework.web.bind.annotation.RequestMapping;
21
import org.springframework.web.bind.annotation.RequestMethod;
22
import org.springframework.web.bind.annotation.RequestParam;
23
 
24
import com.spice.profitmandi.dao.entity.auth.AuthUser;
25
import com.spice.profitmandi.dao.entity.catalog.Item;
26
import com.spice.profitmandi.dao.entity.inventory.Vendor;
27
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricing;
28
import com.spice.profitmandi.dao.entity.inventory.VendorCatalogPricingLog;
29
import com.spice.profitmandi.dao.entity.warehouse.Supplier;
30
import com.spice.profitmandi.dao.enumuration.inventory.VendorCatalogPricingStatus;
31
import com.spice.profitmandi.dao.model.VendorCatalogPricingModel;
32
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
33
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
34
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingLogRepository;
35
import com.spice.profitmandi.dao.repository.inventory.VendorCatalogPricingRepository;
36
import com.spice.profitmandi.dao.repository.inventory.VendorRepository;
37
import com.spice.profitmandi.dao.repository.warehouse.SupplierRepository;
38
import com.spice.profitmandi.service.inventory.VendorCatalogPricingService;
39
import com.spice.profitmandi.web.model.LoginDetails;
40
import com.spice.profitmandi.web.util.CookiesProcessor;
41
import com.spice.profitmandi.web.util.MVCResponseSender;
42
 
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
 
76
    private static final Logger LOGGER = LogManager.getLogger(VendorController.class);
77
 
78
 
79
    @RequestMapping(value = "/vendorCatalogPricing", method = RequestMethod.GET)
80
    public String vendorCatalogPricing(HttpServletRequest request, Model model) throws Exception {
81
 
82
        return "vendor-catalog-pricing";
83
    }
84
 
85
 
86
    @RequestMapping(value = "/getVendorCatalogPricingByModel", method = RequestMethod.GET)
87
    public String getVendorCatalogPricingByModel(HttpServletRequest request, @RequestParam int catalogId, Model model) throws Exception {
88
 
89
        List<Integer> vendorIds = new ArrayList<>();
90
        Map<Integer, VendorCatalogPricing> vendorCatalogPricingMap = new HashMap<>();
91
        Map<Integer, VendorCatalogPricingLog> vendorCatalogPricingLogMap = new HashMap<>();
92
        List<VendorCatalogPricing> vendorCatalogPricing = vendorCatalogPricingRepository.selectByCatalogId(catalogId);
93
        if (!vendorCatalogPricing.isEmpty()) {
94
            vendorIds.addAll(vendorCatalogPricing.stream().distinct().map(x -> x.getVendorId()).collect(Collectors.toList()));
95
            vendorCatalogPricingMap = vendorCatalogPricing.stream().collect(Collectors.toMap(x -> x.getVendorId(), x -> x));
96
        }
97
 
98
        List<VendorCatalogPricingLog> vendorCatalogPricingLog = vendorCatalogPricingLogRepository.selectByCatalogId(catalogId, VendorCatalogPricingStatus.PENDING);
99
        if (!vendorCatalogPricingLog.isEmpty()) {
100
            vendorIds.addAll(vendorCatalogPricingLog.stream().distinct().map(x -> x.getVendorId()).collect(Collectors.toList()));
101
            vendorCatalogPricingLogMap = vendorCatalogPricingLog.stream().filter(x -> x.getStatus().equals(VendorCatalogPricingStatus.PENDING)).collect(Collectors.toMap(x -> x.getVendorId(), x -> x));
102
        }
103
        LOGGER.info("VendorIds {}", vendorIds);
104
        List<Supplier> suppliers = new ArrayList<Supplier>();
105
        if (!vendorIds.isEmpty()) {
106
            suppliers.addAll(supplierRepository.selectBySupplierIds(vendorIds));
107
        }
108
        LOGGER.info("suppliers {}", suppliers);
109
 
110
        model.addAttribute("suppliers", suppliers);
111
        model.addAttribute("vendorCatalogPricingMap", vendorCatalogPricingMap);
112
        model.addAttribute("vendorCatalogPricingLogMap", vendorCatalogPricingLogMap);
113
 
114
        model.addAttribute("catalogId", catalogId);
115
 
116
 
117
        return "vendor-catalog-pricing-view";
118
    }
119
 
120
 
121
    @RequestMapping(value = "/vendors", method = RequestMethod.GET)
122
    public String getVendor(HttpServletRequest request, Model model, @RequestParam String query) throws Throwable {
123
        List<Supplier> vendors = supplierRepository.selectAll().stream().filter(x -> x.getName().toLowerCase().matches(".*?" + query.toLowerCase() + ".*?")).collect(Collectors.toList());
124
        model.addAttribute("response1", mvcResponseSender.createResponseString(vendors));
125
        return "response";
126
    }
127
 
128
 
129
    @RequestMapping(value = "/createVendorCatalogPricing", method = RequestMethod.POST)
130
    public String createVendorCatalogPricing(HttpServletRequest request, @RequestBody VendorCatalogPricingModel vendorCatalogPricingModel, Model model) throws Exception {
131
 
132
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
133
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
134
        vendorCatalogPricingModel.setAuthId(authUser.getId());
135
 
136
        LOGGER.info("vendorCatalogPricingModel {}", vendorCatalogPricingModel);
137
 
138
        vendorCatalogPricingService.createVendorCatalogPricingLog(vendorCatalogPricingModel);
139
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
140
        return "response";
141
 
142
    }
143
 
144
 
145
    @RequestMapping(value = "/vendorCatalogPricingRequests", method = RequestMethod.GET)
146
    public String vendorCatalogPricingRequests(HttpServletRequest request, Model model) throws Exception {
147
        List<VendorCatalogPricingLog> vendorCatalogPricingRequests = vendorCatalogPricingLogRepository.selectByStatus(VendorCatalogPricingStatus.PENDING);
148
        Map<Integer, AuthUser> authUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
149
        model.addAttribute("vendorCatalogPricingRequests", vendorCatalogPricingRequests);
150
        if (!vendorCatalogPricingRequests.isEmpty()) {
151
            Set<Integer> catalogIds = vendorCatalogPricingRequests.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
152
            List<Integer> vendorIds = vendorCatalogPricingRequests.stream().map(x -> x.getVendorId()).collect(Collectors.toList());
153
 
154
 
155
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
156
            model.addAttribute("itemMap", itemMap);
157
        }
158
        Map<Integer, Vendor> vendorMap = vendorRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
159
        model.addAttribute("authMap", authUserMap);
160
        model.addAttribute("vendorMap", vendorMap);
161
        model.addAttribute("vendorPricingStatus", VendorCatalogPricingStatus.values());
162
 
163
        return "vendor-catalog-pricing-request";
164
    }
165
 
166
    @RequestMapping(value = "/verifyVendorCatalogPricingRequest", method = RequestMethod.POST)
167
    public String verifyVendorCatalogPricingRequest(HttpServletRequest request, @RequestParam int id, @RequestParam VendorCatalogPricingStatus status, Model model) throws Exception {
168
 
169
        VendorCatalogPricingLog vendorCatalogPricingLog = vendorCatalogPricingLogRepository.selectById(id);
170
        vendorCatalogPricingLog.setStatus(status);
171
        if (vendorCatalogPricingLog.getStatus().equals(VendorCatalogPricingStatus.APPROVED)) {
172
            vendorCatalogPricingService.createVendorCatalogPricing(vendorCatalogPricingLog);
173
        }
174
 
175
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
176
 
177
        return "response";
178
 
179
    }
180
 
181
 
182
    @RequestMapping(value = "/vendorPriceCircular", method = RequestMethod.GET)
183
    public String vendorPriceCircular(HttpServletRequest request, Model model) throws Exception {
184
 
185
 
186
        return "vendor-price-circular";
187
 
188
    }
189
 
190
 
191
    @RequestMapping(value = "/getVendorPriceCircular", method = RequestMethod.GET)
192
    public String getVendorPriceCircular(HttpServletRequest request, @RequestParam int vendorId, @RequestParam LocalDate effectedDate, Model model) throws Exception {
193
 
194
        List<VendorCatalogPricing> vendorCatalogPricings = vendorCatalogPricingRepository.selectByVendorAndEffectedDate(vendorId, effectedDate);
195
 
196
        if (!vendorCatalogPricings.isEmpty()) {
197
            Set<Integer> catalogIds = vendorCatalogPricings.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
198
            Map<Integer, List<Item>> itemMap = itemRepository.selectAllByCatalogIds(catalogIds).stream().collect(Collectors.groupingBy(x -> x.getCatalogItemId()));
199
            model.addAttribute("itemMap", itemMap);
200
        }
201
 
202
        model.addAttribute("vendorCatalogPricings", vendorCatalogPricings);
203
        return "vendor-price-circular-view";
204
 
205
    }
206
}