Subversion Repositories SmartDukaan

Rev

Rev 22244 | Rev 22472 | 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
 
21654 ashik.ali 3
import java.time.LocalDateTime;
21987 kshitij.so 4
import java.util.ArrayList;
21654 ashik.ali 5
import java.util.HashMap;
21612 ashik.ali 6
import java.util.HashSet;
21987 kshitij.so 7
import java.util.Iterator;
21577 ashik.ali 8
import java.util.List;
21654 ashik.ali 9
import java.util.Map;
21612 ashik.ali 10
import java.util.Set;
21577 ashik.ali 11
 
12
import javax.servlet.http.HttpServletRequest;
21987 kshitij.so 13
import javax.servlet.http.HttpServletResponse;
21577 ashik.ali 14
 
21987 kshitij.so 15
import org.json.JSONObject;
21577 ashik.ali 16
import org.slf4j.Logger;
17
import org.slf4j.LoggerFactory;
18
import org.springframework.beans.factory.annotation.Autowired;
21987 kshitij.so 19
import org.springframework.beans.factory.annotation.Value;
21577 ashik.ali 20
import org.springframework.stereotype.Controller;
21654 ashik.ali 21
import org.springframework.transaction.annotation.Transactional;
21577 ashik.ali 22
import org.springframework.ui.Model;
23
import org.springframework.web.bind.annotation.RequestMapping;
24
import org.springframework.web.bind.annotation.RequestParam;
25
 
21987 kshitij.so 26
import com.google.gson.Gson;
21577 ashik.ali 27
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21987 kshitij.so 28
import com.spice.profitmandi.common.model.CartFofo;
21612 ashik.ali 29
import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;
21577 ashik.ali 30
import com.spice.profitmandi.common.model.ProfitMandiConstants;
21654 ashik.ali 31
import com.spice.profitmandi.common.util.StringUtils;
21987 kshitij.so 32
import com.spice.profitmandi.common.util.Utils;
21728 ashik.ali 33
import com.spice.profitmandi.dao.entity.catalog.Item;
21987 kshitij.so 34
import com.spice.profitmandi.dao.entity.fofo.CurrentInventorySnapshot;
21728 ashik.ali 35
import com.spice.profitmandi.dao.entity.fofo.FofoItemId;
36
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
37
import com.spice.profitmandi.dao.entity.fofo.Purchase;
38
import com.spice.profitmandi.dao.entity.transaction.LineItem;
39
import com.spice.profitmandi.dao.entity.transaction.Order;
40
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
41
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
42
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
43
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
44
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
22354 ashik.ali 45
import com.spice.profitmandi.service.pricing.PricingService;
22139 amit.gupta 46
import com.spice.profitmandi.web.model.LoginDetails;
21987 kshitij.so 47
import com.spice.profitmandi.web.response.ValidateCart;
22069 ashik.ali 48
import com.spice.profitmandi.web.util.CookiesProcessor;
21577 ashik.ali 49
import com.spice.profitmandi.web.util.MVCResponseSender;
50
 
51
@Controller
22037 amit.gupta 52
@Transactional(rollbackFor=Throwable.class)
21577 ashik.ali 53
public class InventoryController {
21987 kshitij.so 54
 
21577 ashik.ali 55
	private static final Logger LOGGER = LoggerFactory.getLogger(InventoryController.class);
21987 kshitij.so 56
 
21577 ashik.ali 57
	@Autowired
58
	CurrentInventorySnapshotRepository  currentInventorySnapshotRepository;
21987 kshitij.so 59
 
21577 ashik.ali 60
	@Autowired
21636 ashik.ali 61
	InventoryItemRepository inventoryItemRepository;
21987 kshitij.so 62
 
21636 ashik.ali 63
	@Autowired
21654 ashik.ali 64
	PurchaseRepository purchaseRepository;
21987 kshitij.so 65
 
21654 ashik.ali 66
	@Autowired
67
	ItemRepository itemRepository;
21987 kshitij.so 68
 
21654 ashik.ali 69
	@Autowired
70
	OrderRepository orderRepository;
21987 kshitij.so 71
 
21654 ashik.ali 72
	@Autowired
21577 ashik.ali 73
	MVCResponseSender mvcResponseSender;
21987 kshitij.so 74
 
21577 ashik.ali 75
	@Autowired
22069 ashik.ali 76
	CookiesProcessor cookiesProcessor;
21577 ashik.ali 77
 
22354 ashik.ali 78
	@Autowired
79
	PricingService pricingService;
80
 
21987 kshitij.so 81
	@Value("${saholic.api.host}")
82
	private String host;
83
	@Value("${saholic.api.port}")
84
	private int port;
85
	@Value("${saholic.api.webapp}")
86
	private String webapp;
87
 
88
 
89
	@RequestMapping(value = "/getCurrentInventorySnapshot")
90
	public String getCurrentAvailability(HttpServletRequest request,@RequestParam(name = "offset",defaultValue="0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit , @RequestParam(name = "searchTerm", required=false, defaultValue="") String searchTerm ,Model model) throws Exception{
22139 amit.gupta 91
		LoginDetails fofoDetails;
21577 ashik.ali 92
		try {
22069 ashik.ali 93
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21577 ashik.ali 94
		} catch (ProfitMandiBusinessException e) {
21581 ashik.ali 95
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
96
			return "response";
21577 ashik.ali 97
		}
21987 kshitij.so 98
		List<CurrentInventorySnapshot> currentInventorySnapshot = currentInventorySnapshotRepository.getCurrentInventorySnapshot(fofoDetails.getFofoId(), offset, limit, searchTerm);
22354 ashik.ali 99
 
21987 kshitij.so 100
		long countItems = currentInventorySnapshotRepository.getCurrentInventorySnapshotCount(fofoDetails.getFofoId(), searchTerm);
101
		model.addAttribute("currentInventorySnapshot",currentInventorySnapshot);
102
		model.addAttribute("start",offset+1);
103
		model.addAttribute("size",countItems);
104
		model.addAttribute("searchTerm",searchTerm);
105
		if (currentInventorySnapshot.size() < limit){
106
			model.addAttribute("end",offset+currentInventorySnapshot.size());
107
		}
108
		else{
109
			model.addAttribute("end",offset+limit);
110
		}
111
		return "inventory-snapshot";
21612 ashik.ali 112
	}
21987 kshitij.so 113
 
114
	@RequestMapping(value = "/getBadInventorySnapshot")
115
	public String getBadAvailability(HttpServletRequest request,@RequestParam(name = "offset",defaultValue="0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit , @RequestParam(name = "searchTerm", required=false, defaultValue="") String searchTerm ,Model model) throws Exception{
22139 amit.gupta 116
		LoginDetails fofoDetails;
21987 kshitij.so 117
		try {
22069 ashik.ali 118
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21987 kshitij.so 119
		} catch (ProfitMandiBusinessException e) {
120
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
121
			return "response";
122
		}
123
		model.addAttribute("badInventorySnapshot",new ArrayList<>());
124
		model.addAttribute("searchTerm",searchTerm);
125
		return "bad-inventory-snapshot";
126
	}
127
 
128
	@RequestMapping(value = "/getPaginatedCurrentInventorySnapshot")
129
	public String getCurrentAvailabilityPaginated(HttpServletRequest request,@RequestParam(name = "offset",defaultValue="0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit, @RequestParam(name = "searchTerm", required=false, defaultValue="") String searchTerm , Model model) throws Exception{
22139 amit.gupta 130
		LoginDetails fofoDetails;
21987 kshitij.so 131
		try {
22069 ashik.ali 132
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21987 kshitij.so 133
		} catch (ProfitMandiBusinessException e) {
134
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
135
			return "response";
136
		}
137
		List<CurrentInventorySnapshot> currentInventorySnapshot = currentInventorySnapshotRepository.getCurrentInventorySnapshot(fofoDetails.getFofoId(), offset, limit, searchTerm);
138
		model.addAttribute("currentInventorySnapshot",currentInventorySnapshot);
139
		return "inventory-snapshot-paginated";
140
	}
21612 ashik.ali 141
 
21987 kshitij.so 142
	@RequestMapping(value = "/getCatalog")
143
	public String getCatalog(HttpServletRequest request,@RequestParam(name = "offset",defaultValue="0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit , @RequestParam(name = "searchTerm", required=false, defaultValue="") String searchTerm ,Model model) throws Exception{
22139 amit.gupta 144
		LoginDetails fofoDetails;
21987 kshitij.so 145
		try {
22069 ashik.ali 146
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21987 kshitij.so 147
		} catch (ProfitMandiBusinessException e) {
148
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
149
			return "response";
150
		}
22354 ashik.ali 151
		List<CurrentInventorySnapshot> currentInventorySnapshots = currentInventorySnapshotRepository.getCurrentInventorySnapshot(fofoDetails.getFofoId(), offset, limit, searchTerm);
21987 kshitij.so 152
		long countItems = currentInventorySnapshotRepository.getCurrentInventorySnapshotCount(fofoDetails.getFofoId(), searchTerm);
22354 ashik.ali 153
		Set<Integer> itemIds = new HashSet<>();
154
		for(CurrentInventorySnapshot currentInventorySnapshot : currentInventorySnapshots ){
155
			itemIds.add(currentInventorySnapshot.getId().getItemId());
21987 kshitij.so 156
		}
22354 ashik.ali 157
		Map<Integer, Float> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds, fofoDetails.getFofoId());
158
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByFofoIdItemIds(fofoDetails.getFofoId(), itemIds);
159
		Map<Integer, Set<String>> itemIdSerialNumbers = new HashMap<>();
160
		for(InventoryItem inventoryItem : inventoryItems){
161
			if(inventoryItem.getSerialNumber() != null && !inventoryItem.getSerialNumber().isEmpty()){
162
				if(!itemIdSerialNumbers.containsKey(inventoryItem.getItemId())){
163
					Set<String> serialNumbers = new HashSet<>();
164
					serialNumbers.add(inventoryItem.getSerialNumber());
165
					itemIdSerialNumbers.put(inventoryItem.getItemId(), serialNumbers);
166
				}else{
167
					itemIdSerialNumbers.get(inventoryItem.getItemId()).add(inventoryItem.getSerialNumber());
168
				}
169
			}
170
		}
171
		model.addAttribute("currentInventorySnapshot",currentInventorySnapshots);
172
		LOGGER.info("mopPriceMap [{}]", mopPriceMap);
173
		LOGGER.info("itemIdSerialNumbers [{}]", itemIdSerialNumbers);
174
		model.addAttribute("mopPriceMap", mopPriceMap);
175
		model.addAttribute("itemIdSerialNumbers", itemIdSerialNumbers);
176
		model.addAttribute("start", offset + 1);
177
		model.addAttribute("size", countItems);
178
		model.addAttribute("searchTerm", searchTerm);
179
		if (currentInventorySnapshots.size() < limit){
180
			model.addAttribute("end", offset + currentInventorySnapshots.size());
181
		}
21987 kshitij.so 182
		else{
22354 ashik.ali 183
			model.addAttribute("end",offset + limit);
21987 kshitij.so 184
		}
185
		return "catalog";
186
	}
187
 
188
	@RequestMapping(value = "/getPaginatedCatalog")
189
	public String getCatalogPaginated(HttpServletRequest request,@RequestParam(name = "offset",defaultValue="0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit, @RequestParam(name = "searchTerm", required=false, defaultValue="") String searchTerm , Model model) throws Exception{
22139 amit.gupta 190
		LoginDetails fofoDetails;
21987 kshitij.so 191
		try {
22069 ashik.ali 192
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21987 kshitij.so 193
		} catch (ProfitMandiBusinessException e) {
194
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
195
			return "response";
196
		}
22354 ashik.ali 197
		List<CurrentInventorySnapshot> currentInventorySnapshots = currentInventorySnapshotRepository.getCurrentInventorySnapshot(fofoDetails.getFofoId(), offset, limit, searchTerm);
198
		Set<Integer> itemIds = new HashSet<>();
199
		for(CurrentInventorySnapshot currentInventorySnapshot : currentInventorySnapshots ){
200
			itemIds.add(currentInventorySnapshot.getId().getItemId());
201
		}
202
		Map<Integer, Float> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds, fofoDetails.getFofoId());
203
		model.addAttribute("currentInventorySnapshot",currentInventorySnapshots);
204
		model.addAttribute("mopPriceMap", mopPriceMap);
21987 kshitij.so 205
		return "catalog-paginated";
206
	}
207
 
208
 
209
 
21612 ashik.ali 210
	private Set<CustomCurrentInventorySnapshot> getCustomCurrentInventorySnapshots(List<Object[]> rows){
211
		Set<CustomCurrentInventorySnapshot> currentInventorySnapshots = new HashSet<>();
212
		for(Object[] row : rows){
213
			currentInventorySnapshots.add(this.createCustomCurrentInventorySnapshop(row));
21577 ashik.ali 214
		}
21612 ashik.ali 215
		return currentInventorySnapshots;
21577 ashik.ali 216
	}
217
 
21987 kshitij.so 218
	private String getVaildName(String name){
219
		return name!=null?name:"";
220
	}
221
 
21612 ashik.ali 222
	private CustomCurrentInventorySnapshot createCustomCurrentInventorySnapshop(Object[] row)
223
	{
224
		CustomCurrentInventorySnapshot currentInventorySnapshot = new CustomCurrentInventorySnapshot();
225
		currentInventorySnapshot.setItemId((Integer)row[0]);
226
		currentInventorySnapshot.setAvailability((Integer)row[1]);
227
		currentInventorySnapshot.setBrand((String)row[2]);
228
		currentInventorySnapshot.setModelName((String)row[3]);
229
		currentInventorySnapshot.setModelNumber((String)row[4]);
230
		currentInventorySnapshot.setColor((String)row[5]);
21987 kshitij.so 231
		currentInventorySnapshot.setCatalogItemId((Integer)row[6]);
232
		currentInventorySnapshot.setDisplayName((getVaildName((String)row[2])+" "+getVaildName((String)row[3])+" "+getVaildName((String)row[4])+" "+getVaildName((String)row[5])).replaceAll("\\s+", " "));
233
		currentInventorySnapshot.setIconUrl(Utils.getIconUrl(currentInventorySnapshot.getCatalogItemId(), host, port, webapp));
21612 ashik.ali 234
		return currentInventorySnapshot;
235
	}
21577 ashik.ali 236
	@RequestMapping(value = "/checkItemAvailability")
21987 kshitij.so 237
	public String getItemAvailability(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, Model model) throws Exception{
22139 amit.gupta 238
		LoginDetails fofoDetails;
21577 ashik.ali 239
		try {
22069 ashik.ali 240
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21577 ashik.ali 241
		} catch (ProfitMandiBusinessException e) {
21581 ashik.ali 242
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
243
			return "response";
21577 ashik.ali 244
		}
245
		try{
246
			FofoItemId fofoItemId = new FofoItemId();
247
			fofoItemId.setFofoId(fofoDetails.getFofoId());
248
			fofoItemId.setItemId(itemId);
21612 ashik.ali 249
			Object[] row = currentInventorySnapshotRepository.selectCustomByFofoItemId(fofoItemId);
21987 kshitij.so 250
			model.addAttribute("currentInventorySnapshot", new Gson().toJson(this.createCustomCurrentInventorySnapshop(row)));
251
			return "current-item-availability";
21577 ashik.ali 252
		}catch(ProfitMandiBusinessException profitMandiBusinessException){
21581 ashik.ali 253
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("INVNTRY_SNPSHT", false, "/dashboard"));
254
			return "response";
21577 ashik.ali 255
		}
256
	}
257
 
21987 kshitij.so 258
	@RequestMapping(value = "/cart")
259
	public String addToCart(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model) throws Exception{
22139 amit.gupta 260
		LoginDetails fofoDetails;
21654 ashik.ali 261
		try {
22069 ashik.ali 262
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21654 ashik.ali 263
		} catch (ProfitMandiBusinessException e) {
264
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
265
			return "response";
21636 ashik.ali 266
		}
21657 ashik.ali 267
 
21987 kshitij.so 268
		JSONObject cartObject = new JSONObject(cartData);
269
		Iterator<?> keys = cartObject.keys();
270
 
271
		Set<Integer> itemIds = new HashSet<>();
272
		List<CartFofo> cartItems = new ArrayList<CartFofo>();
273
 
274
		while( keys.hasNext() ) {
275
		    String key = (String)keys.next();
276
		    if ( cartObject.get(key) instanceof JSONObject ) {
277
		    	System.out.println(cartObject.get(key));
278
		    }
279
		    CartFofo cf = new CartFofo();
280
		    cf.setItemId(cartObject.getJSONObject(key).getInt("itemId"));
281
		    cf.setQuantity(cartObject.getJSONObject(key).getInt("quantity"));
282
		    cf.setDisplayName(cartObject.getJSONObject(key).getString("displayName"));
283
		    cf.setIconUrl(cartObject.getJSONObject(key).getString("iconUrl"));
284
		    cf.setAvailability(0);
285
		    cartItems.add(cf);
286
		    itemIds.add(cartObject.getJSONObject(key).getInt("itemId"));
287
		}
288
		if (itemIds.size() > 0){
289
			List<CurrentInventorySnapshot> cisList = currentInventorySnapshotRepository.selectByFofoItemIds(fofoDetails.getFofoId(), itemIds);
290
			for (CurrentInventorySnapshot cis: cisList ){
291
				for (CartFofo cartItem : cartItems){
292
					if (cartItem.getItemId() == cis.getItem().getId()){
293
						cartItem.setAvailability(cis.getAvailability());
294
					}
295
				}
296
			}
297
			for (CartFofo cartItem : cartItems){
298
				if (cartItem.getAvailability() < cartItem.getQuantity() && cartItem.getAvailability()!=0){
299
					cartItem.setQuantity(cartItem.getAvailability());
300
					cartItem.setMessage("Item quantity changed.Less stock available");
301
				}
302
				if (cartItem.getAvailability() == 0){
303
					cartItem.setQuantity(0);
304
					cartItem.setMessage("You don't have stock for this item");
305
				}
306
			}
307
		}
308
		model.addAttribute("cartObj", cartItems);
309
		return "cart";
310
	}
311
 
312
	@RequestMapping(value = "/validate-cart")
313
	public String validateCart(HttpServletRequest request, HttpServletResponse response,@RequestParam(name = "cartData") String cartData, Model model) throws Exception{
22139 amit.gupta 314
		LoginDetails fofoDetails = null;
21987 kshitij.so 315
		try {
22069 ashik.ali 316
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21987 kshitij.so 317
		} catch (ProfitMandiBusinessException e) {
318
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
319
			return "response";
320
		}
321
 
322
		JSONObject cartObject = new JSONObject(cartData);
323
		Iterator<?> keys = cartObject.keys();
324
 
325
		Set<Integer> itemIds = new HashSet<>();
326
		List<CartFofo> cartItems = new ArrayList<CartFofo>();
327
 
328
		if (cartObject.keySet().size() == 0){
329
			model.addAttribute("validateCartResponse",new Gson().toJson(new ValidateCart("POST", "/cart", false, cartData)));
330
			return "validate-cart";
331
		}
332
 
333
		while( keys.hasNext() ) {
334
		    String key = (String)keys.next();
335
		    if ( cartObject.get(key) instanceof JSONObject ) {
336
		    	System.out.println(cartObject.get(key));
337
		    }
338
		    CartFofo cf = new CartFofo();
339
		    cf.setItemId(cartObject.getJSONObject(key).getInt("itemId"));
340
		    cf.setQuantity(cartObject.getJSONObject(key).getInt("quantity"));
341
		    cf.setDisplayName(cartObject.getJSONObject(key).getString("displayName"));
342
		    cf.setIconUrl(cartObject.getJSONObject(key).getString("iconUrl"));
343
		    cf.setAvailability(0);
344
		    cartItems.add(cf);
345
		    itemIds.add(cartObject.getJSONObject(key).getInt("itemId"));
346
		}
347
		if (itemIds.size() > 0){
348
			List<CurrentInventorySnapshot> cisList = currentInventorySnapshotRepository.selectByFofoItemIds(fofoDetails.getFofoId(), itemIds);
349
			for (CurrentInventorySnapshot cis: cisList ){
350
				for (CartFofo cartItem : cartItems){
351
					if (cartItem.getItemId() == cis.getItem().getId()){
352
						cartItem.setAvailability(cis.getAvailability());
353
					}
354
				}
355
			}
356
			for (CartFofo cartItem : cartItems){
357
				if (cartItem.getAvailability() < cartItem.getQuantity()){
358
					model.addAttribute("validateCartResponse",new Gson().toJson(new ValidateCart("POST", "/cart", false, cartData)));
359
					return "validate-cart";
360
				}
361
			}
362
		}
363
		else{
364
			model.addAttribute("validateCartResponse",new Gson().toJson(new ValidateCart("POST", "/cart", false, cartData)));
365
			return "validate-cart";
366
		}
367
		model.addAttribute("validateCartResponse",new Gson().toJson(new ValidateCart("POST", "/order", true, cartData)));
368
		return "validate-cart";
369
	}
370
 
371
	@RequestMapping(value = "/grnHistory")
372
	public String grnHistoryByFofoId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString, @RequestParam(name = "offset",defaultValue="0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit, @RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE,defaultValue="") String purchaseReference, @RequestParam(name = "searchType",defaultValue="") String searchType,Model model) throws Exception{
22139 amit.gupta 373
		LoginDetails fofoDetails;
21987 kshitij.so 374
		try {
22069 ashik.ali 375
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21987 kshitij.so 376
		} catch (ProfitMandiBusinessException e) {
377
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
378
			return "response";
379
		}
380
 
21654 ashik.ali 381
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
382
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
383
 
21987 kshitij.so 384
		List<Purchase> grnHistory = new ArrayList<Purchase>();
385
		long countItems = 0;
386
		if (searchType.equalsIgnoreCase("purchaseReference") && purchaseReference.trim().length() > 0){
387
			try{
388
				Purchase purchase = purchaseRepository.selectByPurchaseReference(purchaseReference);
389
				grnHistory.add(purchase);
390
				countItems = 1;
391
			}
392
			catch(Exception | ProfitMandiBusinessException e){
393
				LOGGER.info("Unable to get purchase reference "+purchaseReference);
394
			}
395
		}
396
		else{
397
			grnHistory = purchaseRepository.selectByFofoId(fofoDetails.getFofoId(), startDateTime, endDateTime, offset, limit);
398
			countItems = purchaseRepository.getPurchaseCount(fofoDetails.getFofoId(), startDateTime, endDateTime, purchaseReference, searchType);
399
		}
400
		model.addAttribute("grnHistories", grnHistory);
401
		model.addAttribute("start",offset+1);
402
		model.addAttribute("size",countItems);
403
		model.addAttribute("searchType",searchType);
404
		model.addAttribute(ProfitMandiConstants.START_TIME, startTimeString);
405
		model.addAttribute(ProfitMandiConstants.END_TIME, endTimeString);
406
		if (grnHistory.size() < limit){
407
			model.addAttribute("end",offset+grnHistory.size());
408
		}
409
		else{
410
			model.addAttribute("end",offset+limit);
411
		}
412
		return "grn-history";
21636 ashik.ali 413
	}
21987 kshitij.so 414
 
415
	@RequestMapping(value = "/getPaginatedGrnHistory")
416
	public String getGrnHistoryPaginated(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString, @RequestParam(name = "offset",defaultValue="0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit, @RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE,defaultValue="") String purchaseReference, @RequestParam(name = "searchType",defaultValue="") String searchType,Model model) throws Exception{
22139 amit.gupta 417
		LoginDetails fofoDetails;
21987 kshitij.so 418
		try {
22069 ashik.ali 419
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21987 kshitij.so 420
		} catch (ProfitMandiBusinessException e) {
421
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
422
			return "response";
423
		}
424
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
425
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
426
 
427
		List<Purchase> grnHistory = purchaseRepository.selectByFofoId(fofoDetails.getFofoId(), startDateTime, endDateTime, offset, limit);
428
		model.addAttribute("grnHistories", grnHistory);
429
		return "grn-history-paginated";
430
	}
431
 
21654 ashik.ali 432
	@RequestMapping(value = "/grnHistoryDetailByPurchaseId")
433
	public String grnHistoryByPurchaseId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model) throws Exception{
22139 amit.gupta 434
		LoginDetails fofoDetails;
21636 ashik.ali 435
		try {
22069 ashik.ali 436
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21636 ashik.ali 437
		} catch (ProfitMandiBusinessException e) {
438
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
439
			return "response";
440
		}
21654 ashik.ali 441
		Purchase purchase = null;
442
		try {
443
			purchase = purchaseRepository.selectById(purchaseId);
444
		} catch (ProfitMandiBusinessException e) {
21987 kshitij.so 445
 
21654 ashik.ali 446
		}
21987 kshitij.so 447
		model.addAttribute("grnDetails", this.grnHistoryDetails(purchase, fofoDetails.getFofoId()));
448
		model.addAttribute("purchaseId",purchase.getId());
449
		model.addAttribute("purchaseReference",purchase.getPurchaseReference());
450
		return "grn-details";
21636 ashik.ali 451
	}
21987 kshitij.so 452
 
21654 ashik.ali 453
	@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")
454
	public String grnHistoryByPurchaseReference(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model) throws Exception{
22139 amit.gupta 455
		LoginDetails fofoDetails;
21654 ashik.ali 456
		try {
22069 ashik.ali 457
			fofoDetails = cookiesProcessor.getCookiesObject(request);
21654 ashik.ali 458
		} catch (ProfitMandiBusinessException e) {
459
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
460
			return "response";
461
		}
462
		Purchase purchase = null;
463
		try {
464
			purchase = purchaseRepository.selectByPurchaseReference(purchaseReference);
465
		} catch (ProfitMandiBusinessException e) {
21987 kshitij.so 466
 
21654 ashik.ali 467
		}
21987 kshitij.so 468
		model.addAttribute("grnDetails", this.grnHistoryDetails(purchase, fofoDetails.getFofoId()));
469
		model.addAttribute("purchaseId",purchase.getId());
470
		model.addAttribute("purchaseReference",purchase.getPurchaseReference());
471
		return "grn-details";
21654 ashik.ali 472
	}
21987 kshitij.so 473
 
21654 ashik.ali 474
	private Map<Integer, Map<String, Object>> grnHistoryDetails(Purchase purchase, int fofoId){
475
		Set<Integer> itemIds = new HashSet<>();
476
		Set<Item> inventoryItemDetails = new HashSet<>();
477
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
478
		for(InventoryItem inventoryItem : inventoryItems){
479
			inventoryItemDetails.add(inventoryItem.getItem());
480
			itemIds.add(inventoryItem.getItemId());
481
		}
482
 
483
		Map<Integer, Map<String, Object>> grnHistoryDetails = new HashMap<>();
484
		this.createGrnHistoryDetails(grnHistoryDetails, inventoryItems);
21987 kshitij.so 485
		Map<Integer, Map<String, Object>> completedItemDetails = this.toMap(inventoryItemDetails, purchase);
486
 
21654 ashik.ali 487
		this.writeItemDetailstoGrnHistories(grnHistoryDetails, completedItemDetails);
21987 kshitij.so 488
 
21654 ashik.ali 489
		if(!purchase.isCompleted()){
21680 ashik.ali 490
			List<Order> orders = orderRepository.selectByInvoiceNumberRetailerIdNotItemIds(purchase.getPurchaseReference(), fofoId, itemIds);
21654 ashik.ali 491
			for(Order order : orders){
492
				LineItem lineItem = order.getLineItem();
493
				//orderItemDetails.add(lineItem.getItem());
494
				Item item = lineItem.getItem();
495
				if(!grnHistoryDetails.containsKey(item.getId())){
496
					Map<String, Object> grnHistoryDetail = new HashMap<>();
497
					grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, lineItem.getQuantity());
498
					grnHistoryDetail.put(ProfitMandiConstants.BRAND, item.getBrand());
499
					grnHistoryDetail.put(ProfitMandiConstants.MODEL_NAME, item.getModelName());
500
					grnHistoryDetail.put(ProfitMandiConstants.MODEL_NUMBER, item.getModelNumber());
501
					grnHistoryDetail.put(ProfitMandiConstants.COLOR, item.getColor());
21987 kshitij.so 502
					grnHistoryDetail.put(ProfitMandiConstants.CATALOG_ITEM_ID, item.getCatalogItemId());
503
					grnHistoryDetail.put("iconUrl",Utils.getIconUrl(item.getCatalogItemId(), host, port, webapp));
21654 ashik.ali 504
					grnHistoryDetail.put(ProfitMandiConstants.COMPLETED, false);
21987 kshitij.so 505
					grnHistoryDetail.put("purchaseReference", purchase.getPurchaseReference());
21654 ashik.ali 506
					if(lineItem.getSerialNumber() == null || lineItem.getSerialNumber().equals("")){
507
						grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, false);
508
					}else{
509
						grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, true);
510
						Set<String> serialNumbers = new HashSet<>();
511
						serialNumbers.add(lineItem.getSerialNumber());
512
						grnHistoryDetail.put(ProfitMandiConstants.SERIAL_NUMBERS, serialNumbers);
513
					}
514
					grnHistoryDetails.put(item.getId(), grnHistoryDetail);
515
				}else{
516
					Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(item.getId());
517
					if((boolean)grnHistoryDetail.get(ProfitMandiConstants.SERIALIZED)){
518
						@SuppressWarnings("unchecked")
519
						Set<String> serialNumbers = (Set<String>)grnHistoryDetail.get(ProfitMandiConstants.SERIAL_NUMBERS);
21987 kshitij.so 520
						serialNumbers.add(lineItem.getSerialNumber());
21654 ashik.ali 521
					}
522
				}
523
			}
524
		}
525
		return grnHistoryDetails;
526
	}
21987 kshitij.so 527
 
21654 ashik.ali 528
	private void writeItemDetailstoGrnHistories(Map<Integer, Map<String, Object>> grnHistoryDetails, Map<Integer, Map<String, Object>> itemDetails){
529
		for(int key : grnHistoryDetails.keySet()){
530
			Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(key);
531
			grnHistoryDetail.putAll(itemDetails.get(key));
532
		}
533
	}
21987 kshitij.so 534
 
535
	private Map<Integer, Map<String, Object>> toMap(Set<Item> items, Purchase purchase){
21654 ashik.ali 536
		Map<Integer, Map<String, Object>> map = new HashMap<>();
537
		for(Item item : items){
538
			Map<String, Object> detailMap = new HashMap<>();
539
			detailMap.put(ProfitMandiConstants.BRAND, item.getBrand());
540
			detailMap.put(ProfitMandiConstants.MODEL_NAME, item.getModelName());
541
			detailMap.put(ProfitMandiConstants.MODEL_NUMBER, item.getModelNumber());
542
			detailMap.put(ProfitMandiConstants.COLOR, item.getColor());
21987 kshitij.so 543
			detailMap.put(ProfitMandiConstants.CATALOG_ITEM_ID, item.getCatalogItemId());
544
			detailMap.put("iconUrl",Utils.getIconUrl(item.getCatalogItemId(), host, port, webapp));
545
			detailMap.put("purchaseReference", purchase.getPurchaseReference());
21654 ashik.ali 546
			map.put(item.getId(), detailMap);
547
		}
548
		return map;
549
	}
21987 kshitij.so 550
 
21654 ashik.ali 551
	private void createGrnHistoryDetails(Map<Integer, Map<String, Object>> grnHistoryDetails, List<InventoryItem> inventoryItems){
552
		//Map<Integer, Map<String, Object>> grnHistoryDetails = new HashMap<>();
553
		for(InventoryItem inventoryItem : inventoryItems){
554
			if(!grnHistoryDetails.containsKey(inventoryItem.getItemId())){
555
				Map<String, Object> grnHistoryDetail = new HashMap<>();
556
				grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, inventoryItem.getInitialQuantity());
557
				grnHistoryDetail.put(ProfitMandiConstants.COMPLETED, true);
558
				if(inventoryItem.getSerialNumber() == null || inventoryItem.getSerialNumber().equals("")){
559
					grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, false);
560
				}else{
561
					grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, true);
562
					Set<String> serialNumbers = new HashSet<>();
563
					serialNumbers.add(inventoryItem.getSerialNumber());
564
					grnHistoryDetail.put(ProfitMandiConstants.SERIAL_NUMBERS, serialNumbers);
22244 ashik.ali 565
					grnHistoryDetail.put("formattedSerialNumbers", String.join(", ", serialNumbers));
21654 ashik.ali 566
				}
567
				grnHistoryDetails.put(inventoryItem.getItemId(), grnHistoryDetail);
568
				//itemIds.add(inventoryItem.getItemId());
569
			}else{
570
				Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(inventoryItem.getItemId());
571
				if((boolean)grnHistoryDetail.get(ProfitMandiConstants.SERIALIZED)){
572
					@SuppressWarnings("unchecked")
573
					Set<String> serialNumbers = (Set<String>)grnHistoryDetail.get(ProfitMandiConstants.SERIAL_NUMBERS);
574
					LOGGER.info("serialNumbers {}", serialNumbers);
21987 kshitij.so 575
					serialNumbers.add(inventoryItem.getSerialNumber());
22244 ashik.ali 576
					grnHistoryDetail.put("formattedSerialNumbers", String.join(", ", serialNumbers));
21654 ashik.ali 577
					grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, (int)grnHistoryDetail.get(ProfitMandiConstants.QUANTITY) + inventoryItem.getInitialQuantity());
578
				}
579
			}
21987 kshitij.so 580
 
21654 ashik.ali 581
		}
582
		//return null;
583
	}
21987 kshitij.so 584
 
21654 ashik.ali 585
	public List<Item> getItemsByItemIds(Set<Integer> itemIds){
586
		return null;
587
	}
21987 kshitij.so 588
 
21577 ashik.ali 589
}