Subversion Repositories SmartDukaan

Rev

Rev 21636 | Rev 21657 | 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;
4
import java.util.HashMap;
21612 ashik.ali 5
import java.util.HashSet;
21577 ashik.ali 6
import java.util.List;
21654 ashik.ali 7
import java.util.Map;
21612 ashik.ali 8
import java.util.Set;
21577 ashik.ali 9
 
10
import javax.servlet.http.HttpServletRequest;
11
 
12
import org.slf4j.Logger;
13
import org.slf4j.LoggerFactory;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.stereotype.Controller;
21654 ashik.ali 16
import org.springframework.transaction.annotation.Transactional;
21577 ashik.ali 17
import org.springframework.ui.Model;
21581 ashik.ali 18
import org.springframework.ui.ModelMap;
21577 ashik.ali 19
import org.springframework.web.bind.annotation.ModelAttribute;
20
import org.springframework.web.bind.annotation.RequestMapping;
21
import org.springframework.web.bind.annotation.RequestParam;
22
 
23
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21612 ashik.ali 24
import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;
21577 ashik.ali 25
import com.spice.profitmandi.common.model.ProfitMandiConstants;
21654 ashik.ali 26
import com.spice.profitmandi.common.util.StringUtils;
21577 ashik.ali 27
import com.spice.profitmandi.dao.entity.FofoItemId;
21636 ashik.ali 28
import com.spice.profitmandi.dao.entity.InventoryItem;
21654 ashik.ali 29
import com.spice.profitmandi.dao.entity.Item;
30
import com.spice.profitmandi.dao.entity.LineItem;
31
import com.spice.profitmandi.dao.entity.Order;
32
import com.spice.profitmandi.dao.entity.Purchase;
21577 ashik.ali 33
import com.spice.profitmandi.dao.repository.CurrentInventorySnapshotRepository;
21636 ashik.ali 34
import com.spice.profitmandi.dao.repository.InventoryItemRepository;
21654 ashik.ali 35
import com.spice.profitmandi.dao.repository.ItemRepository;
36
import com.spice.profitmandi.dao.repository.OrderRepository;
37
import com.spice.profitmandi.dao.repository.PurchaseRepository;
21577 ashik.ali 38
import com.spice.profitmandi.web.model.FofoDetails;
39
import com.spice.profitmandi.web.util.CookiesFetcher;
40
import com.spice.profitmandi.web.util.MVCResponseSender;
41
 
42
@Controller
21654 ashik.ali 43
@Transactional
21577 ashik.ali 44
public class InventoryController {
45
 
46
	private static final Logger LOGGER = LoggerFactory.getLogger(InventoryController.class);
47
 
48
	@Autowired
49
	CurrentInventorySnapshotRepository  currentInventorySnapshotRepository;
50
 
51
	@Autowired
21636 ashik.ali 52
	InventoryItemRepository inventoryItemRepository;
53
 
54
	@Autowired
21654 ashik.ali 55
	PurchaseRepository purchaseRepository;
56
 
57
	@Autowired
58
	ItemRepository itemRepository;
59
 
60
	@Autowired
61
	OrderRepository orderRepository;
62
 
63
	@Autowired
21577 ashik.ali 64
	MVCResponseSender mvcResponseSender;
65
 
66
	@Autowired
67
	CookiesFetcher cookiesFetcher;
68
 
69
	@RequestMapping(value = "/checkCurrentAvailability")
21581 ashik.ali 70
	public String getCurrentAvailability(HttpServletRequest request, @ModelAttribute ModelMap model) throws Exception{
21577 ashik.ali 71
		FofoDetails fofoDetails;
72
		try {
73
			fofoDetails = cookiesFetcher.getCookiesObject(request);
74
		} catch (ProfitMandiBusinessException e) {
21581 ashik.ali 75
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
76
			return "response";
21577 ashik.ali 77
		}
21612 ashik.ali 78
		List<Object[]> rows = currentInventorySnapshotRepository.selectCustomByFofoId(fofoDetails.getFofoId());
79
 
80
		model.addAttribute("currentInventorySnapshots", this.getCustomCurrentInventorySnapshots(rows));
81
		return "dashboard";
82
	}
83
 
84
	private Set<CustomCurrentInventorySnapshot> getCustomCurrentInventorySnapshots(List<Object[]> rows){
85
		Set<CustomCurrentInventorySnapshot> currentInventorySnapshots = new HashSet<>();
86
		for(Object[] row : rows){
87
			currentInventorySnapshots.add(this.createCustomCurrentInventorySnapshop(row));
21577 ashik.ali 88
		}
21612 ashik.ali 89
		return currentInventorySnapshots;
21577 ashik.ali 90
	}
91
 
21612 ashik.ali 92
	private CustomCurrentInventorySnapshot createCustomCurrentInventorySnapshop(Object[] row)
93
	{
94
		CustomCurrentInventorySnapshot currentInventorySnapshot = new CustomCurrentInventorySnapshot();
95
		currentInventorySnapshot.setItemId((Integer)row[0]);
96
		currentInventorySnapshot.setAvailability((Integer)row[1]);
97
		currentInventorySnapshot.setBrand((String)row[2]);
98
		currentInventorySnapshot.setModelName((String)row[3]);
99
		currentInventorySnapshot.setModelNumber((String)row[4]);
100
		currentInventorySnapshot.setColor((String)row[5]);
101
		return currentInventorySnapshot;
102
	}
21577 ashik.ali 103
	@RequestMapping(value = "/checkItemAvailability")
104
	public String getItemAvailability(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, @ModelAttribute Model model) throws Exception{
105
		FofoDetails fofoDetails;
106
		try {
107
			fofoDetails = cookiesFetcher.getCookiesObject(request);
108
		} catch (ProfitMandiBusinessException e) {
21581 ashik.ali 109
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
110
			return "response";
21577 ashik.ali 111
		}
112
		try{
113
			FofoItemId fofoItemId = new FofoItemId();
114
			fofoItemId.setFofoId(fofoDetails.getFofoId());
115
			fofoItemId.setItemId(itemId);
21612 ashik.ali 116
			Object[] row = currentInventorySnapshotRepository.selectCustomByFofoItemId(fofoItemId);
117
			model.addAttribute("currentInventorySnapshots", this.createCustomCurrentInventorySnapshop(row));
21577 ashik.ali 118
			return "dashboard";
119
		}catch(ProfitMandiBusinessException profitMandiBusinessException){
21581 ashik.ali 120
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("INVNTRY_SNPSHT", false, "/dashboard"));
121
			return "response";
21577 ashik.ali 122
		}
123
	}
124
 
21654 ashik.ali 125
	@RequestMapping(value = "/grnHistoryByFofoId")
126
	public String grnHistoryByFofoId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.START_TIME) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME) String endTimeString, @RequestParam(name = ProfitMandiConstants.PAGE_NUMBER) int pageNumber, @RequestParam(name = ProfitMandiConstants.PAGE_SIZE) int pageSize, Model model) throws Exception{
127
		FofoDetails fofoDetails;
128
		try {
129
			fofoDetails = cookiesFetcher.getCookiesObject(request);
130
		} catch (ProfitMandiBusinessException e) {
131
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
132
			return "response";
21636 ashik.ali 133
		}
21654 ashik.ali 134
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
135
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
136
 
137
		model.addAttribute("grnHistories", purchaseRepository.selectByFofoId(fofoDetails.getFofoId(), startDateTime, endDateTime, pageNumber, pageSize));
138
		return "";
21636 ashik.ali 139
	}
140
 
21654 ashik.ali 141
	@RequestMapping(value = "/grnHistoryDetailByPurchaseId")
142
	public String grnHistoryByPurchaseId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model) throws Exception{
21636 ashik.ali 143
		FofoDetails fofoDetails;
144
		try {
145
			fofoDetails = cookiesFetcher.getCookiesObject(request);
146
		} catch (ProfitMandiBusinessException e) {
147
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
148
			return "response";
149
		}
21654 ashik.ali 150
		Purchase purchase = null;
151
		try {
152
			purchase = purchaseRepository.selectById(purchaseId);
153
		} catch (ProfitMandiBusinessException e) {
154
 
155
		}
156
		model.addAttribute("grnHistories", this.grnHistoryDetails(purchase, fofoDetails.getFofoId()));
21636 ashik.ali 157
		return "";
158
	}
159
 
21654 ashik.ali 160
	@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")
161
	public String grnHistoryByPurchaseReference(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model) throws Exception{
162
		FofoDetails fofoDetails;
163
		try {
164
			fofoDetails = cookiesFetcher.getCookiesObject(request);
165
		} catch (ProfitMandiBusinessException e) {
166
			model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));
167
			return "response";
168
		}
169
		Purchase purchase = null;
170
		try {
171
			purchase = purchaseRepository.selectByPurchaseReference(purchaseReference);
172
		} catch (ProfitMandiBusinessException e) {
173
 
174
		}
175
		model.addAttribute("grnHistories", this.grnHistoryDetails(purchase, fofoDetails.getFofoId()));
176
		return "";
177
	}
178
 
179
	private Map<Integer, Map<String, Object>> grnHistoryDetails(Purchase purchase, int fofoId){
180
		Set<Integer> itemIds = new HashSet<>();
181
		Set<Item> inventoryItemDetails = new HashSet<>();
182
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
183
		for(InventoryItem inventoryItem : inventoryItems){
184
			inventoryItemDetails.add(inventoryItem.getItem());
185
			itemIds.add(inventoryItem.getItemId());
186
		}
187
 
188
		Map<Integer, Map<String, Object>> grnHistoryDetails = new HashMap<>();
189
		this.createGrnHistoryDetails(grnHistoryDetails, inventoryItems);
190
		Map<Integer, Map<String, Object>> completedItemDetails = this.toMap(inventoryItemDetails);
191
 
192
		this.writeItemDetailstoGrnHistories(grnHistoryDetails, completedItemDetails);
193
 
194
		if(!purchase.isCompleted()){
195
			List<Order> orders = orderRepository.selectByInvoiceNumber(purchase.getPurchaseReference(), fofoId, itemIds);
196
			for(Order order : orders){
197
				LineItem lineItem = order.getLineItem();
198
				//orderItemDetails.add(lineItem.getItem());
199
				Item item = lineItem.getItem();
200
				if(!grnHistoryDetails.containsKey(item.getId())){
201
					Map<String, Object> grnHistoryDetail = new HashMap<>();
202
					grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, lineItem.getQuantity());
203
					grnHistoryDetail.put(ProfitMandiConstants.BRAND, item.getBrand());
204
					grnHistoryDetail.put(ProfitMandiConstants.MODEL_NAME, item.getModelName());
205
					grnHistoryDetail.put(ProfitMandiConstants.MODEL_NUMBER, item.getModelNumber());
206
					grnHistoryDetail.put(ProfitMandiConstants.COLOR, item.getColor());
207
					grnHistoryDetail.put(ProfitMandiConstants.COMPLETED, false);
208
					if(lineItem.getSerialNumber() == null || lineItem.getSerialNumber().equals("")){
209
						grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, false);
210
					}else{
211
						grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, true);
212
						Set<String> serialNumbers = new HashSet<>();
213
						serialNumbers.add(lineItem.getSerialNumber());
214
						grnHistoryDetail.put(ProfitMandiConstants.SERIAL_NUMBERS, serialNumbers);
215
					}
216
					grnHistoryDetails.put(item.getId(), grnHistoryDetail);
217
				}else{
218
					Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(item.getId());
219
					if((boolean)grnHistoryDetail.get(ProfitMandiConstants.SERIALIZED)){
220
						@SuppressWarnings("unchecked")
221
						Set<String> serialNumbers = (Set<String>)grnHistoryDetail.get(ProfitMandiConstants.SERIAL_NUMBERS);
222
	 					serialNumbers.add(lineItem.getSerialNumber());
223
					}
224
				}
225
			}
226
		}
227
		return grnHistoryDetails;
228
	}
229
 
230
	private void writeItemDetailstoGrnHistories(Map<Integer, Map<String, Object>> grnHistoryDetails, Map<Integer, Map<String, Object>> itemDetails){
231
		for(int key : grnHistoryDetails.keySet()){
232
			Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(key);
233
			grnHistoryDetail.putAll(itemDetails.get(key));
234
		}
235
	}
236
 
237
	private Map<Integer, Map<String, Object>> toMap(Set<Item> items){
238
		Map<Integer, Map<String, Object>> map = new HashMap<>();
239
		for(Item item : items){
240
			Map<String, Object> detailMap = new HashMap<>();
241
			detailMap.put(ProfitMandiConstants.BRAND, item.getBrand());
242
			detailMap.put(ProfitMandiConstants.MODEL_NAME, item.getModelName());
243
			detailMap.put(ProfitMandiConstants.MODEL_NUMBER, item.getModelNumber());
244
			detailMap.put(ProfitMandiConstants.COLOR, item.getColor());
245
			map.put(item.getId(), detailMap);
246
		}
247
		return map;
248
	}
249
 
250
	private void createGrnHistoryDetails(Map<Integer, Map<String, Object>> grnHistoryDetails, List<InventoryItem> inventoryItems){
251
		//Map<Integer, Map<String, Object>> grnHistoryDetails = new HashMap<>();
252
		for(InventoryItem inventoryItem : inventoryItems){
253
			if(!grnHistoryDetails.containsKey(inventoryItem.getItemId())){
254
				Map<String, Object> grnHistoryDetail = new HashMap<>();
255
				grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, inventoryItem.getInitialQuantity());
256
				grnHistoryDetail.put(ProfitMandiConstants.COMPLETED, true);
257
				if(inventoryItem.getSerialNumber() == null || inventoryItem.getSerialNumber().equals("")){
258
					grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, false);
259
				}else{
260
					grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, true);
261
					Set<String> serialNumbers = new HashSet<>();
262
					serialNumbers.add(inventoryItem.getSerialNumber());
263
					grnHistoryDetail.put(ProfitMandiConstants.SERIAL_NUMBERS, serialNumbers);
264
				}
265
				grnHistoryDetails.put(inventoryItem.getItemId(), grnHistoryDetail);
266
				//itemIds.add(inventoryItem.getItemId());
267
			}else{
268
				Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(inventoryItem.getItemId());
269
				if((boolean)grnHistoryDetail.get(ProfitMandiConstants.SERIALIZED)){
270
					@SuppressWarnings("unchecked")
271
					Set<String> serialNumbers = (Set<String>)grnHistoryDetail.get(ProfitMandiConstants.SERIAL_NUMBERS);
272
					LOGGER.info("serialNumbers {}", serialNumbers);
273
 					serialNumbers.add(inventoryItem.getSerialNumber());
274
					grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, (int)grnHistoryDetail.get(ProfitMandiConstants.QUANTITY) + inventoryItem.getInitialQuantity());
275
				}
276
			}
277
 
278
		}
279
		//return null;
280
	}
281
 
282
	public List<Item> getItemsByItemIds(Set<Integer> itemIds){
283
		return null;
284
	}
285
 
286
	/*@RequestMapping(value = "/grnHist")
287
	public String grnHist(HttpServletRequest request) throws Exception{
288
		LOGGER.info("result {}", orderRepository.selectByInvoiceNumber("58400149931", 963490));
289
		return null;
290
	}*/
291
 
292
	@RequestMapping(value = "/grnHist")
293
	public String grnHist(HttpServletRequest request ) throws Exception{
294
		Purchase purchase = null;
295
		try {
296
			purchase = purchaseRepository.selectById(2);
297
		} catch (ProfitMandiBusinessException e) {
298
			// TODO Auto-generated catch block
299
			e.printStackTrace();
300
		}
301
		LOGGER.info("grnHistoryDetails {}", StringUtils.toString(this.grnHistoryDetails(purchase, 963490)));
302
		return null;
303
	}
304
 
21577 ashik.ali 305
}