Subversion Repositories SmartDukaan

Rev

Rev 24052 | Rev 24123 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21577 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
22486 ashik.ali 3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.InputStream;
23886 amit.gupta 6
import java.time.LocalDateTime;
21577 ashik.ali 7
import java.util.List;
21654 ashik.ali 8
import java.util.Map;
21577 ashik.ali 9
 
10
import javax.servlet.http.HttpServletRequest;
21987 kshitij.so 11
import javax.servlet.http.HttpServletResponse;
21577 ashik.ali 12
 
23886 amit.gupta 13
import org.apache.logging.log4j.LogManager;
23568 govind 14
import org.apache.logging.log4j.Logger;
21577 ashik.ali 15
import org.springframework.beans.factory.annotation.Autowired;
23784 ashik.ali 16
import org.springframework.beans.factory.annotation.Qualifier;
21987 kshitij.so 17
import org.springframework.beans.factory.annotation.Value;
22486 ashik.ali 18
import org.springframework.core.io.InputStreamResource;
23886 amit.gupta 19
import org.springframework.format.annotation.DateTimeFormat;
20
import org.springframework.format.annotation.DateTimeFormat.ISO;
22486 ashik.ali 21
import org.springframework.http.HttpHeaders;
22
import org.springframework.http.HttpStatus;
22472 ashik.ali 23
import org.springframework.http.ResponseEntity;
21577 ashik.ali 24
import org.springframework.stereotype.Controller;
21654 ashik.ali 25
import org.springframework.transaction.annotation.Transactional;
21577 ashik.ali 26
import org.springframework.ui.Model;
22472 ashik.ali 27
import org.springframework.web.bind.annotation.RequestBody;
21577 ashik.ali 28
import org.springframework.web.bind.annotation.RequestMapping;
22472 ashik.ali 29
import org.springframework.web.bind.annotation.RequestMethod;
21577 ashik.ali 30
import org.springframework.web.bind.annotation.RequestParam;
31
 
21987 kshitij.so 32
import com.google.gson.Gson;
21577 ashik.ali 33
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21612 ashik.ali 34
import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;
24106 tejbeer 35
import com.spice.profitmandi.common.model.CustomRetailer;
22472 ashik.ali 36
import com.spice.profitmandi.common.model.InventoryItemAgingModel;
24106 tejbeer 37
import com.spice.profitmandi.common.model.ItemFeatureDataModel;
38
import com.spice.profitmandi.common.model.NotificationDataModel;
21577 ashik.ali 39
import com.spice.profitmandi.common.model.ProfitMandiConstants;
22472 ashik.ali 40
import com.spice.profitmandi.common.util.ExcelUtils;
21987 kshitij.so 41
import com.spice.profitmandi.common.util.Utils;
24106 tejbeer 42
import com.spice.profitmandi.dao.entity.catalog.TagRanking;
43
import com.spice.profitmandi.dao.entity.dtr.NotificationData;
44
import com.spice.profitmandi.dao.entity.transaction.AddWalletRequest;
45
import com.spice.profitmandi.dao.enumuration.transaction.AddWalletRequestStatus;
46
import com.spice.profitmandi.dao.repository.catalog.TagRankingRepository;
22927 ashik.ali 47
import com.spice.profitmandi.service.inventory.InventoryService;
22139 amit.gupta 48
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 49
import com.spice.profitmandi.web.util.CookiesProcessor;
24106 tejbeer 50
import com.spice.profitmandi.web.util.MVCResponseSender;
21577 ashik.ali 51
 
52
@Controller
22037 amit.gupta 53
@Transactional(rollbackFor=Throwable.class)
21577 ashik.ali 54
public class InventoryController {
21987 kshitij.so 55
 
23568 govind 56
	private static final Logger LOGGER = LogManager.getLogger(InventoryController.class);
21987 kshitij.so 57
 
21577 ashik.ali 58
	@Autowired
22927 ashik.ali 59
	private CookiesProcessor cookiesProcessor;
21577 ashik.ali 60
 
22354 ashik.ali 61
	@Autowired
23784 ashik.ali 62
	@Qualifier("fofoInventoryService")
22927 ashik.ali 63
	private InventoryService inventoryService;
24106 tejbeer 64
 
65
	@Autowired
66
	private TagRankingRepository tagRankingRepository;
67
 
68
	@Autowired
69
	private MVCResponseSender mvcResponseSender;
70
 
21987 kshitij.so 71
	@Value("${saholic.api.host}")
72
	private String host;
23786 amit.gupta 73
 
21987 kshitij.so 74
	@Value("${saholic.api.port}")
75
	private int port;
23786 amit.gupta 76
 
21987 kshitij.so 77
	@Value("${saholic.api.webapp}")
78
	private String webapp;
79
 
23786 amit.gupta 80
	@RequestMapping(value = "/getCurrentInventorySnapshot")
81
	public String getCurrentAvailability(HttpServletRequest request,
82
			@RequestParam(name = "offset", defaultValue = "0") int offset,
83
			@RequestParam(name = "limit", defaultValue = "10") int limit,
84
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, 
85
			Model model)
86
			throws ProfitMandiBusinessException {
22927 ashik.ali 87
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 88
		Map<String, Object> map = inventoryService.getCurrentInventorySnapshot(loginDetails.getFofoId(), offset, limit,
89
				searchTerm);
22927 ashik.ali 90
		model.addAllAttributes(map);
21987 kshitij.so 91
		return "inventory-snapshot";
21612 ashik.ali 92
	}
21987 kshitij.so 93
 
23786 amit.gupta 94
	@RequestMapping(value = "/getBadInventorySnapshot")
95
	public String getBadAvailability(HttpServletRequest request,
96
			@RequestParam(name = "offset", defaultValue = "0") int offset,
97
			@RequestParam(name = "limit", defaultValue = "10") int limit,
98
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
99
			throws ProfitMandiBusinessException {
24052 amit.gupta 100
		if(searchTerm==null) {
101
			searchTerm="";
102
		}
22927 ashik.ali 103
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 104
		Map<String, Object> map = inventoryService.getBadInventorySnapshot(loginDetails.getFofoId(), offset, limit,
105
				searchTerm);
22927 ashik.ali 106
		model.addAllAttributes(map);
21987 kshitij.so 107
		return "bad-inventory-snapshot";
108
	}
109
 
23786 amit.gupta 110
	@RequestMapping(value = "/getPaginatedCurrentInventorySnapshot")
111
	public String getPaginatedCurrentInventorySnapshot(HttpServletRequest request,
112
			@RequestParam(name = "offset", defaultValue = "0") int offset,
113
			@RequestParam(name = "limit", defaultValue = "10") int limit,
114
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
115
			throws ProfitMandiBusinessException {
24052 amit.gupta 116
		if(searchTerm==null) {
117
			searchTerm="";
118
		}
22927 ashik.ali 119
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 120
		Map<String, Object> map = inventoryService.getPaginatedCurrentInventorySnapshot(loginDetails.getFofoId(),
121
				offset, limit, searchTerm);
22927 ashik.ali 122
		model.addAllAttributes(map);
21987 kshitij.so 123
		return "inventory-snapshot-paginated";
124
	}
23786 amit.gupta 125
 
126
	@RequestMapping(value = "/getCatalog")
127
	public String getCatalog(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
128
			@RequestParam(name = "limit", defaultValue = "10") int limit,
129
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
130
			throws ProfitMandiBusinessException {
22927 ashik.ali 131
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24052 amit.gupta 132
		if(searchTerm==null) {
133
			searchTerm="";
134
		}
22927 ashik.ali 135
		Map<String, Object> map = inventoryService.getCatalog(loginDetails.getFofoId(), offset, limit, searchTerm);
136
		model.addAllAttributes(map);
21987 kshitij.so 137
		return "catalog";
138
	}
23786 amit.gupta 139
 
140
	@RequestMapping(value = "/getPaginatedCatalog")
141
	public String getCatalogPaginated(HttpServletRequest request,
142
			@RequestParam(name = "offset", defaultValue = "0") int offset,
143
			@RequestParam(name = "limit", defaultValue = "10") int limit,
144
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
145
			throws ProfitMandiBusinessException {
22927 ashik.ali 146
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24052 amit.gupta 147
		if(searchTerm==null) {
148
			searchTerm="";
149
		}
23786 amit.gupta 150
		Map<String, Object> map = inventoryService.getPaginatedCatalog(loginDetails.getFofoId(), offset, limit,
151
				searchTerm);
22927 ashik.ali 152
		model.addAllAttributes(map);
21987 kshitij.so 153
		return "catalog-paginated";
154
	}
155
 
23786 amit.gupta 156
	@RequestMapping(value = "/checkItemAvailability")
157
	public String getItemAvailability(HttpServletRequest request,
158
			@RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, Model model)
159
			throws ProfitMandiBusinessException {
22927 ashik.ali 160
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 161
		CustomCurrentInventorySnapshot customCurrentInventorySnapshot = inventoryService.checkItemAvailability(itemId,
162
				loginDetails.getFofoId());
163
		customCurrentInventorySnapshot
164
				.setIconUrl(Utils.getIconUrl(customCurrentInventorySnapshot.getCatalogItemId(), host, port, webapp));
22927 ashik.ali 165
		model.addAttribute("currentInventorySnapshot", new Gson().toJson(customCurrentInventorySnapshot));
166
		return "current-item-availability";
23786 amit.gupta 167
 
21577 ashik.ali 168
	}
23786 amit.gupta 169
 
23192 ashik.ali 170
	@RequestMapping(value = "/cart", method = RequestMethod.POST)
23786 amit.gupta 171
	public String addToCart(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
172
			throws ProfitMandiBusinessException {
22927 ashik.ali 173
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 174
 
22927 ashik.ali 175
		Map<String, Object> map = inventoryService.addToCart(cartData, loginDetails.getFofoId());
176
		model.addAllAttributes(map);
21987 kshitij.so 177
		return "cart";
178
	}
23786 amit.gupta 179
 
23192 ashik.ali 180
	@RequestMapping(value = "/validate-cart", method = RequestMethod.POST)
23786 amit.gupta 181
	public String validateCart(HttpServletRequest request, HttpServletResponse response,
182
			@RequestParam(name = "cartData") String cartData, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 183
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 184
 
22927 ashik.ali 185
		Map<String, Object> map = inventoryService.validateCart(cartData, loginDetails.getFofoId());
186
		model.addAllAttributes(map);
21987 kshitij.so 187
		return "validate-cart";
188
	}
189
 
23786 amit.gupta 190
	@RequestMapping(value = "/grnHistory")
191
	public String getGrnHistory(HttpServletRequest request,
23886 amit.gupta 192
			@RequestParam(required = false) LocalDateTime startTime,
193
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 194
			@RequestParam(name = "offset", defaultValue = "0") int offset,
195
			@RequestParam(name = "limit", defaultValue = "10") int limit,
196
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
197
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
198
			throws ProfitMandiBusinessException {
22927 ashik.ali 199
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23886 amit.gupta 200
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime,
201
				endTime, offset, limit, purchaseReference, searchType);
22927 ashik.ali 202
		model.addAllAttributes(map);
21987 kshitij.so 203
		return "grn-history";
21636 ashik.ali 204
	}
21987 kshitij.so 205
 
23786 amit.gupta 206
	@RequestMapping(value = "/getPaginatedGrnHistory")
207
	public String getPaginatedGrnHistory(HttpServletRequest request,
23886 amit.gupta 208
			@RequestParam(required = false) LocalDateTime startTime,
209
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 210
			@RequestParam(name = "offset", defaultValue = "0") int offset,
211
			@RequestParam(name = "limit", defaultValue = "10") int limit,
212
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
213
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
214
			throws ProfitMandiBusinessException {
22927 ashik.ali 215
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23886 amit.gupta 216
		Map<String, Object> map = inventoryService.getPaginatedGrnHistory(loginDetails.getFofoId(), startTime,
217
				endTime, offset, limit);
22927 ashik.ali 218
		model.addAllAttributes(map);
21987 kshitij.so 219
		return "grn-history-paginated";
220
	}
221
 
23786 amit.gupta 222
	@RequestMapping(value = "/grnHistoryDetailByPurchaseId")
223
	public String grnHistoryByPurchaseId(HttpServletRequest request,
224
			@RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model)
225
			throws ProfitMandiBusinessException {
22927 ashik.ali 226
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 227
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseId, host, port,
228
				webapp);
22927 ashik.ali 229
		model.addAllAttributes(map);
21987 kshitij.so 230
		return "grn-details";
21636 ashik.ali 231
	}
21987 kshitij.so 232
 
23786 amit.gupta 233
	@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")
234
	public String grnHistoryByPurchaseReference(HttpServletRequest request,
235
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model)
236
			throws ProfitMandiBusinessException {
22927 ashik.ali 237
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 238
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseReference,
239
				host, port, webapp);
22927 ashik.ali 240
		model.addAllAttributes(map);
21987 kshitij.so 241
		return "grn-details";
21654 ashik.ali 242
	}
23786 amit.gupta 243
 
22472 ashik.ali 244
	@RequestMapping(value = "/getInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 245
	public String getInventoryItemAgingByInterval(HttpServletRequest request, @RequestBody List<Integer> intervals,
246
			Model model, @RequestParam(name = "searchContent", defaultValue = "") String searchContent,
247
			@RequestParam(name = "offset", defaultValue = "0") int offset,
248
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
22927 ashik.ali 249
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 250
		Map<String, Object> map = inventoryService.getPaginatedItemAgingByInterval(loginDetails.getFofoId(), intervals,
251
				searchContent, offset, limit);
22927 ashik.ali 252
		model.addAllAttributes(map);
22523 ashik.ali 253
		return "item-aging";
254
	}
23786 amit.gupta 255
 
22523 ashik.ali 256
	@RequestMapping(value = "/downloadInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 257
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request,
258
			@RequestBody List<Integer> intervals, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 259
		LOGGER.info("Request received at url{} with body {}", request.getRequestURI(), intervals);
260
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 261
 
262
		List<InventoryItemAgingModel> inventoryItemAgingModels = inventoryService
263
				.getItemAgingByInterval(fofoDetails.getFofoId(), intervals);
264
 
22486 ashik.ali 265
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
266
		ExcelUtils.writeInventoryItemAgingModels(inventoryItemAgingModels, intervals, byteArrayOutputStream);
23786 amit.gupta 267
 
268
		final HttpHeaders headers = new HttpHeaders();
269
		// private static final String CONTENT_TYPE_XLSX =
270
		// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
271
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
272
		// headers.set("Content-Type", "application/vnd.ms-excel");
22486 ashik.ali 273
		headers.set("Content-disposition", "inline; filename=InventoryItemAging.xlsx");
23786 amit.gupta 274
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
275
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
276
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
277
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
278
 
279
		// return responseSender.ok(ResponseCodeHolder.getMessage("ITM_AGNG_OK_1000"));
22472 ashik.ali 280
	}
24106 tejbeer 281
 
282
	@RequestMapping(value = "/featurePanel", method = RequestMethod.GET)
283
	public String FeaturePanel(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
284
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
21987 kshitij.so 285
 
24106 tejbeer 286
 
287
		List<TagRanking> tagRanking = null;
288
 
289
		long size = 0;
290
		tagRanking =tagRankingRepository.selectAllTagRanking(offset, limit);
291
		size =tagRankingRepository.selectAllCount();
292
		LOGGER.info("tagRanking" + tagRanking);
293
		if (!tagRanking.isEmpty()) {
294
 
295
			model.addAttribute("tagRanking", tagRanking);
296
			model.addAttribute("start", offset + 1);
297
			model.addAttribute("size", size);
298
			model.addAttribute("url", "/getPaginatedfeature");
299
 
300
			if (tagRanking.size() < limit) {
301
				model.addAttribute("end", offset + tagRanking.size());
302
			} else {
303
				model.addAttribute("end", offset + limit);
304
			}
305
		} else {
306
			model.addAttribute("tagRanking", tagRanking);
307
			model.addAttribute("size", size);
308
		}
309
 
310
		return "feature";
311
 
312
	}
313
 
314
	@RequestMapping(value = "/getPaginatedfeature", method = RequestMethod.GET)
315
	public String getPaginatedFeaturePanel(HttpServletRequest request,
316
			@RequestParam(name = "offset", defaultValue = "0") int offset,
317
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
318
			throws ProfitMandiBusinessException {
319
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
320
		List<TagRanking> tagRanking = null;
321
 
322
		long size = 0;
323
		tagRanking =tagRankingRepository.selectAllTagRanking(offset, limit);
324
		if (!tagRanking.isEmpty()) {
325
 
326
			model.addAttribute("tagRanking", tagRanking);
327
			model.addAttribute("start", offset + 1);
328
			model.addAttribute("size", size);
329
			model.addAttribute("url", "/getPaginatedfeature");
330
 
331
		} else {
332
			model.addAttribute("tagRanking", tagRanking);
333
		}
334
		return "feature-paginated";
335
	}
336
 
337
	@RequestMapping(value = "/itemfeature", method = RequestMethod.POST)
338
	public String Itemfeature(HttpServletRequest request,
339
			@RequestBody  ItemFeatureDataModel itemFeatureDatatModel, Model model) throws Exception {
340
 
341
		TagRanking tagRanking = new TagRanking();
342
		tagRanking.setRankPoints(itemFeatureDatatModel.getRankPoints());
343
		tagRanking.setCatalogItemId(itemFeatureDatatModel.getCatalogItemId());
344
		tagRanking.setFeature(itemFeatureDatatModel.getFeature());
345
 
346
		LOGGER.info("tagRanking"+ tagRanking);
347
        tagRankingRepository.persist(tagRanking);
348
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
349
		return "response";
350
	}
351
 
21577 ashik.ali 352
}