Subversion Repositories SmartDukaan

Rev

Rev 27544 | Rev 27596 | 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;
26482 tejbeer 5
import java.io.IOException;
22486 ashik.ali 6
import java.io.InputStream;
26279 amit.gupta 7
import java.io.InputStreamReader;
26482 tejbeer 8
import java.net.URISyntaxException;
23886 amit.gupta 9
import java.time.LocalDateTime;
26279 amit.gupta 10
import java.time.format.DateTimeFormatter;
24465 tejbeer 11
import java.util.ArrayList;
25873 tejbeer 12
import java.util.Arrays;
26979 amit.gupta 13
import java.util.Collection;
24917 tejbeer 14
import java.util.HashMap;
24465 tejbeer 15
import java.util.HashSet;
24917 tejbeer 16
import java.util.Iterator;
21577 ashik.ali 17
import java.util.List;
21654 ashik.ali 18
import java.util.Map;
24917 tejbeer 19
import java.util.Optional;
24465 tejbeer 20
import java.util.Set;
21
import java.util.stream.Collectors;
21577 ashik.ali 22
 
23
import javax.servlet.http.HttpServletRequest;
21987 kshitij.so 24
import javax.servlet.http.HttpServletResponse;
21577 ashik.ali 25
 
26279 amit.gupta 26
import org.apache.commons.csv.CSVFormat;
27
import org.apache.commons.csv.CSVParser;
28
import org.apache.commons.csv.CSVRecord;
27544 amit.gupta 29
import org.apache.commons.io.FileUtils;
26299 amit.gupta 30
import org.apache.commons.lang3.StringUtils;
23886 amit.gupta 31
import org.apache.logging.log4j.LogManager;
23568 govind 32
import org.apache.logging.log4j.Logger;
24739 tejbeer 33
import org.apache.thrift.TException;
27583 tejbeer 34
import org.hibernate.type.CurrencyType;
24465 tejbeer 35
import org.json.JSONObject;
21577 ashik.ali 36
import org.springframework.beans.factory.annotation.Autowired;
23784 ashik.ali 37
import org.springframework.beans.factory.annotation.Qualifier;
21987 kshitij.so 38
import org.springframework.beans.factory.annotation.Value;
27544 amit.gupta 39
import org.springframework.core.io.ClassPathResource;
22486 ashik.ali 40
import org.springframework.core.io.InputStreamResource;
41
import org.springframework.http.HttpHeaders;
42
import org.springframework.http.HttpStatus;
25140 amit.gupta 43
import org.springframework.http.MediaType;
22472 ashik.ali 44
import org.springframework.http.ResponseEntity;
24917 tejbeer 45
import org.springframework.mail.javamail.JavaMailSender;
21577 ashik.ali 46
import org.springframework.stereotype.Controller;
21654 ashik.ali 47
import org.springframework.transaction.annotation.Transactional;
21577 ashik.ali 48
import org.springframework.ui.Model;
26279 amit.gupta 49
import org.springframework.web.bind.annotation.PostMapping;
22472 ashik.ali 50
import org.springframework.web.bind.annotation.RequestBody;
21577 ashik.ali 51
import org.springframework.web.bind.annotation.RequestMapping;
22472 ashik.ali 52
import org.springframework.web.bind.annotation.RequestMethod;
21577 ashik.ali 53
import org.springframework.web.bind.annotation.RequestParam;
26279 amit.gupta 54
import org.springframework.web.bind.annotation.RequestPart;
55
import org.springframework.web.multipart.MultipartFile;
21577 ashik.ali 56
 
21987 kshitij.so 57
import com.google.gson.Gson;
25698 tejbeer 58
import com.spice.profitmandi.common.enumuration.MessageType;
21577 ashik.ali 59
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21612 ashik.ali 60
import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;
24106 tejbeer 61
import com.spice.profitmandi.common.model.CustomRetailer;
22472 ashik.ali 62
import com.spice.profitmandi.common.model.InventoryItemAgingModel;
24106 tejbeer 63
import com.spice.profitmandi.common.model.ItemFeatureDataModel;
24917 tejbeer 64
import com.spice.profitmandi.common.model.NotifyItemIdModel;
65
import com.spice.profitmandi.common.model.NotifyOrderIdModel;
66
import com.spice.profitmandi.common.model.NotifyOrderModel;
25640 tejbeer 67
import com.spice.profitmandi.common.model.OrderCancellationModel;
25140 amit.gupta 68
import com.spice.profitmandi.common.model.PdfModel;
21577 ashik.ali 69
import com.spice.profitmandi.common.model.ProfitMandiConstants;
25851 amit.gupta 70
import com.spice.profitmandi.common.model.SendNotificationModel;
22472 ashik.ali 71
import com.spice.profitmandi.common.util.ExcelUtils;
25140 amit.gupta 72
import com.spice.profitmandi.common.util.PdfUtils;
24123 tejbeer 73
import com.spice.profitmandi.dao.entity.catalog.Item;
24950 tejbeer 74
import com.spice.profitmandi.dao.entity.catalog.TagListing;
24106 tejbeer 75
import com.spice.profitmandi.dao.entity.catalog.TagRanking;
27583 tejbeer 76
import com.spice.profitmandi.dao.entity.fofo.CurrentInventorySnapshot;
25140 amit.gupta 77
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
24917 tejbeer 78
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24465 tejbeer 79
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
80
import com.spice.profitmandi.dao.entity.fofo.LiveDemoSerialNumber;
26031 tejbeer 81
import com.spice.profitmandi.dao.entity.transaction.NotifyCancel;
24917 tejbeer 82
import com.spice.profitmandi.dao.entity.transaction.NotifyColorChange;
25066 tejbeer 83
import com.spice.profitmandi.dao.entity.transaction.NotifyMessage;
24917 tejbeer 84
import com.spice.profitmandi.dao.entity.transaction.NotifyOrder;
24739 tejbeer 85
import com.spice.profitmandi.dao.entity.transaction.Order;
26482 tejbeer 86
import com.spice.profitmandi.dao.model.ContentPojo;
26498 amit.gupta 87
import com.spice.profitmandi.dao.model.Specification;
88
import com.spice.profitmandi.dao.model.SpecificationGroup;
24123 tejbeer 89
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
24950 tejbeer 90
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
24106 tejbeer 91
import com.spice.profitmandi.dao.repository.catalog.TagRankingRepository;
24465 tejbeer 92
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
26482 tejbeer 93
import com.spice.profitmandi.dao.repository.dtr.Mongo;
24917 tejbeer 94
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24203 amit.gupta 95
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
24465 tejbeer 96
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
97
import com.spice.profitmandi.dao.repository.fofo.LiveDemoBillingRespository;
24917 tejbeer 98
import com.spice.profitmandi.dao.repository.inventory.NotifyStatus;
26031 tejbeer 99
import com.spice.profitmandi.dao.repository.transaction.NotifyCancelOrderRepository;
24917 tejbeer 100
import com.spice.profitmandi.dao.repository.transaction.NotifyColorChangeRepository;
101
import com.spice.profitmandi.dao.repository.transaction.NotifyItemRepository;
25066 tejbeer 102
import com.spice.profitmandi.dao.repository.transaction.NotifyMessageRepository;
24917 tejbeer 103
import com.spice.profitmandi.dao.repository.transaction.NotifyOrderRespository;
24658 tejbeer 104
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
25851 amit.gupta 105
import com.spice.profitmandi.service.NotificationService;
22927 ashik.ali 106
import com.spice.profitmandi.service.inventory.InventoryService;
27516 amit.gupta 107
import com.spice.profitmandi.service.order.OrderService;
24465 tejbeer 108
import com.spice.profitmandi.service.user.RetailerService;
22139 amit.gupta 109
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 110
import com.spice.profitmandi.web.util.CookiesProcessor;
24106 tejbeer 111
import com.spice.profitmandi.web.util.MVCResponseSender;
21577 ashik.ali 112
 
24658 tejbeer 113
import in.shop2020.model.v1.order.OrderStatus;
24739 tejbeer 114
import in.shop2020.model.v1.order.TransactionServiceException;
24658 tejbeer 115
 
21577 ashik.ali 116
@Controller
24123 tejbeer 117
@Transactional(rollbackFor = Throwable.class)
21577 ashik.ali 118
public class InventoryController {
21987 kshitij.so 119
 
23568 govind 120
	private static final Logger LOGGER = LogManager.getLogger(InventoryController.class);
26482 tejbeer 121
 
26292 amit.gupta 122
	private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy H:m:s");
21987 kshitij.so 123
 
27583 tejbeer 124
	private static final List<String> imeis = Arrays.asList("351030944216680", "351030944217183", "351030944217886",
125
			"351030944507286", "351081710231270", "351081710238713", "351081710238796", "351081710241279",
126
			"351081710244737", "355777112655976");
127
 
21577 ashik.ali 128
	@Autowired
22927 ashik.ali 129
	private CookiesProcessor cookiesProcessor;
24123 tejbeer 130
 
22354 ashik.ali 131
	@Autowired
23784 ashik.ali 132
	@Qualifier("fofoInventoryService")
22927 ashik.ali 133
	private InventoryService inventoryService;
24465 tejbeer 134
 
24203 amit.gupta 135
	@Autowired
24950 tejbeer 136
	TagListingRepository tagListingRepository;
137
 
138
	@Autowired
24203 amit.gupta 139
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
24123 tejbeer 140
 
24106 tejbeer 141
	@Autowired
142
	private TagRankingRepository tagRankingRepository;
24123 tejbeer 143
 
24106 tejbeer 144
	@Autowired
24465 tejbeer 145
	private InventoryItemRepository inventoryItemRepository;
146
 
147
	@Autowired
148
	private LiveDemoBillingRespository liveDemoBillingRespository;
149
 
150
	@Autowired
24123 tejbeer 151
	private ItemRepository itemRepository;
152
 
153
	@Autowired
26512 amit.gupta 154
	private Gson gson;
155
 
156
	@Autowired
24465 tejbeer 157
	private RetailerService retailerService;
158
 
159
	@Autowired
24106 tejbeer 160
	private MVCResponseSender mvcResponseSender;
24123 tejbeer 161
 
24465 tejbeer 162
	@Autowired
163
	FofoStoreRepository fofoStoreRepository;
164
 
24658 tejbeer 165
	@Autowired
166
	private OrderRepository orderRepository;
167
 
24739 tejbeer 168
	@Autowired
24917 tejbeer 169
	private NotifyItemRepository notifyItemRepository;
24739 tejbeer 170
 
24917 tejbeer 171
	@Autowired
172
	private NotifyColorChangeRepository notifyColorChangeRepository;
173
 
174
	@Autowired
175
	private NotifyOrderRespository notifyOrderRespository;
176
 
177
	@Autowired
25851 amit.gupta 178
	private NotificationService notificationService;
179
 
180
	@Autowired
25066 tejbeer 181
	private NotifyMessageRepository notifyMessageRepository;
182
 
183
	@Autowired
24917 tejbeer 184
	private UserAccountRepository userAccountRepository;
185
 
27516 amit.gupta 186
	@Autowired
187
	private OrderService orderService;
27583 tejbeer 188
 
21987 kshitij.so 189
	@Value("${saholic.api.host}")
190
	private String host;
23786 amit.gupta 191
 
21987 kshitij.so 192
	@Value("${saholic.api.port}")
193
	private int port;
23786 amit.gupta 194
 
21987 kshitij.so 195
	@Value("${saholic.api.webapp}")
196
	private String webapp;
197
 
24917 tejbeer 198
	@Autowired
199
	JavaMailSender mailSender;
200
 
26031 tejbeer 201
	@Autowired
202
	private NotifyCancelOrderRepository notifyCancelOrderRepository;
203
 
26482 tejbeer 204
	@Autowired
205
	private Mongo mongoClient;
206
 
23786 amit.gupta 207
	@RequestMapping(value = "/getCurrentInventorySnapshot")
208
	public String getCurrentAvailability(HttpServletRequest request,
209
			@RequestParam(name = "offset", defaultValue = "0") int offset,
210
			@RequestParam(name = "limit", defaultValue = "10") int limit,
24123 tejbeer 211
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
23786 amit.gupta 212
			throws ProfitMandiBusinessException {
22927 ashik.ali 213
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 214
		Map<String, Object> map = inventoryService.getCurrentInventorySnapshot(loginDetails.getFofoId(), offset, limit,
215
				searchTerm);
22927 ashik.ali 216
		model.addAllAttributes(map);
21987 kshitij.so 217
		return "inventory-snapshot";
21612 ashik.ali 218
	}
21987 kshitij.so 219
 
23786 amit.gupta 220
	@RequestMapping(value = "/getBadInventorySnapshot")
221
	public String getBadAvailability(HttpServletRequest request,
222
			@RequestParam(name = "offset", defaultValue = "0") int offset,
223
			@RequestParam(name = "limit", defaultValue = "10") int limit,
224
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
225
			throws ProfitMandiBusinessException {
24123 tejbeer 226
		if (searchTerm == null) {
227
			searchTerm = "";
24052 amit.gupta 228
		}
22927 ashik.ali 229
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 230
		Map<String, Object> map = inventoryService.getBadInventorySnapshot(loginDetails.getFofoId(), offset, limit,
231
				searchTerm);
22927 ashik.ali 232
		model.addAllAttributes(map);
21987 kshitij.so 233
		return "bad-inventory-snapshot";
234
	}
235
 
23786 amit.gupta 236
	@RequestMapping(value = "/getPaginatedCurrentInventorySnapshot")
237
	public String getPaginatedCurrentInventorySnapshot(HttpServletRequest request,
238
			@RequestParam(name = "offset", defaultValue = "0") int offset,
239
			@RequestParam(name = "limit", defaultValue = "10") int limit,
240
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
241
			throws ProfitMandiBusinessException {
24123 tejbeer 242
		if (searchTerm == null) {
243
			searchTerm = "";
24052 amit.gupta 244
		}
22927 ashik.ali 245
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 246
		Map<String, Object> map = inventoryService.getPaginatedCurrentInventorySnapshot(loginDetails.getFofoId(),
247
				offset, limit, searchTerm);
22927 ashik.ali 248
		model.addAllAttributes(map);
21987 kshitij.so 249
		return "inventory-snapshot-paginated";
250
	}
23786 amit.gupta 251
 
252
	@RequestMapping(value = "/getCatalog")
253
	public String getCatalog(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
27583 tejbeer 254
			@RequestParam(name = "limit", defaultValue = "20") int limit,
255
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
256
			@RequestParam(name = "itemId", required = false, defaultValue = "0") int itemId, Model model)
23786 amit.gupta 257
			throws ProfitMandiBusinessException {
22927 ashik.ali 258
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 259
		if (searchTerm == null) {
260
			searchTerm = "";
24052 amit.gupta 261
		}
24739 tejbeer 262
 
27583 tejbeer 263
		Map<String, Object> map = inventoryService.getCatalog(loginDetails.getFofoId(), offset, limit, searchTerm,
264
				itemId);
22927 ashik.ali 265
		model.addAllAttributes(map);
24203 amit.gupta 266
		model.addAttribute("hasGift", hasGift(loginDetails.getFofoId()));
24658 tejbeer 267
 
21987 kshitij.so 268
		return "catalog";
269
	}
23786 amit.gupta 270
 
24465 tejbeer 271
	// This method is currently hardcoded to faciliate watches sold as gift.
24203 amit.gupta 272
	private boolean hasGift(int fofoId) {
273
		try {
24465 tejbeer 274
			return currentInventorySnapshotRepository.selectByItemIdAndFofoId(ProfitMandiConstants.GIFT_ID, fofoId)
275
					.getAvailability() > 0;
24203 amit.gupta 276
		} catch (ProfitMandiBusinessException e) {
277
			return false;
278
		}
279
	}
280
 
27583 tejbeer 281
	/*
282
	 * @RequestMapping(value = "/getSimilarItem") public String
283
	 * getCatalog(HttpServletRequest request, @RequestParam(name = "offset",
284
	 * defaultValue = "0") int offset,
285
	 * 
286
	 * @RequestParam(name = "limit", defaultValue = "10") int limit, @RequestParam
287
	 * int catalogItemId,
288
	 * 
289
	 * @RequestParam(name = "searchTerm", required = false, defaultValue = "")
290
	 * String searchTerm, Model model) throws ProfitMandiBusinessException
291
	 * 
292
	 * { LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
293
	 * 
294
	 * if (catalogItemId != 0) { TagListing tagListing = null; List<Item> items =
295
	 * itemRepository.selectAllByCatalogItemId(catalogItemId); Map<Integer, Float>
296
	 * itemPriceing = new HashMap<>(); List<CustomCurrentInventorySnapshot>
297
	 * inventoryList = new ArrayList<>();
298
	 * 
299
	 * for (Item item : items) { tagListing =
300
	 * tagListingRepository.selectByItemId(item.getId());
301
	 * CustomCurrentInventorySnapshot customCurrentInventorySnapshot =
302
	 * inventoryService .checkItemAvailability(item.getId(),
303
	 * loginDetails.getFofoId()); inventoryList.add(customCurrentInventorySnapshot);
304
	 * itemPriceing.put(item.getId(), tagListing.getMop()); } if (tagListing !=
305
	 * null) {
306
	 * 
307
	 * float tagStartPrice = tagListing.getMop() - 1000; float tagEndPrice =
308
	 * tagListing.getMop() + 2000; List<TagListing> tagMoplists =
309
	 * tagListingRepository.selectAllBetweenMopPrice(tagStartPrice, tagEndPrice);
310
	 * 
311
	 * for (TagListing tagListings : tagMoplists) {
312
	 * 
313
	 * int TagListingItemid = tagListings.getItemId();
314
	 * 
315
	 * itemPriceing.put(TagListingItemid, tagListings.getMop());
316
	 * CustomCurrentInventorySnapshot customCurrentInventorySnapshotMopPrice =
317
	 * inventoryService .checkItemAvailability(TagListingItemid,
318
	 * loginDetails.getFofoId());
319
	 * 
320
	 * inventoryList.add(customCurrentInventorySnapshotMopPrice); }
321
	 * 
322
	 * }
323
	 * 
324
	 * else { LOGGER.info("tagBrandlist is null"); }
325
	 * 
326
	 * model.addAttribute("inventoryLists", inventoryList);
327
	 * model.addAttribute("itemPriceing", itemPriceing);
328
	 * 
329
	 * }
330
	 * 
331
	 * return "catalog-similar-Id"; }
332
	 */
23786 amit.gupta 333
	@RequestMapping(value = "/getPaginatedCatalog")
334
	public String getCatalogPaginated(HttpServletRequest request,
335
			@RequestParam(name = "offset", defaultValue = "0") int offset,
27583 tejbeer 336
			@RequestParam(name = "limit", defaultValue = "20") int limit,
337
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
338
			@RequestParam(name = "itemId", required = false, defaultValue = "0") int itemId, Model model)
23786 amit.gupta 339
			throws ProfitMandiBusinessException {
22927 ashik.ali 340
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 341
		if (searchTerm == null) {
342
			searchTerm = "";
24052 amit.gupta 343
		}
23786 amit.gupta 344
		Map<String, Object> map = inventoryService.getPaginatedCatalog(loginDetails.getFofoId(), offset, limit,
27583 tejbeer 345
				searchTerm, itemId);
22927 ashik.ali 346
		model.addAllAttributes(map);
21987 kshitij.so 347
		return "catalog-paginated";
348
	}
349
 
23786 amit.gupta 350
	@RequestMapping(value = "/checkItemAvailability")
351
	public String getItemAvailability(HttpServletRequest request,
352
			@RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, Model model)
353
			throws ProfitMandiBusinessException {
22927 ashik.ali 354
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 355
		CustomCurrentInventorySnapshot customCurrentInventorySnapshot = inventoryService.checkItemAvailability(itemId,
356
				loginDetails.getFofoId());
25812 amit.gupta 357
		/*
358
		 * customCurrentInventorySnapshot
359
		 * .setIconUrl(Utils.getIconUrl(customCurrentInventorySnapshot.getCatalogItemId(
360
		 * ), host, port, webapp));
361
		 */
22927 ashik.ali 362
		model.addAttribute("currentInventorySnapshot", new Gson().toJson(customCurrentInventorySnapshot));
363
		return "current-item-availability";
23786 amit.gupta 364
 
21577 ashik.ali 365
	}
23786 amit.gupta 366
 
23192 ashik.ali 367
	@RequestMapping(value = "/cart", method = RequestMethod.POST)
23786 amit.gupta 368
	public String addToCart(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
369
			throws ProfitMandiBusinessException {
22927 ashik.ali 370
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 371
 
22927 ashik.ali 372
		Map<String, Object> map = inventoryService.addToCart(cartData, loginDetails.getFofoId());
373
		model.addAllAttributes(map);
21987 kshitij.so 374
		return "cart";
375
	}
23786 amit.gupta 376
 
23192 ashik.ali 377
	@RequestMapping(value = "/validate-cart", method = RequestMethod.POST)
23786 amit.gupta 378
	public String validateCart(HttpServletRequest request, HttpServletResponse response,
379
			@RequestParam(name = "cartData") String cartData, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 380
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 381
 
22927 ashik.ali 382
		Map<String, Object> map = inventoryService.validateCart(cartData, loginDetails.getFofoId());
383
		model.addAllAttributes(map);
21987 kshitij.so 384
		return "validate-cart";
385
	}
386
 
23786 amit.gupta 387
	@RequestMapping(value = "/grnHistory")
24123 tejbeer 388
	public String getGrnHistory(HttpServletRequest request, @RequestParam(required = false) LocalDateTime startTime,
23886 amit.gupta 389
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 390
			@RequestParam(name = "offset", defaultValue = "0") int offset,
391
			@RequestParam(name = "limit", defaultValue = "10") int limit,
392
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
393
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
394
			throws ProfitMandiBusinessException {
22927 ashik.ali 395
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 396
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime, endTime, offset,
397
				limit, purchaseReference, searchType);
22927 ashik.ali 398
		model.addAllAttributes(map);
21987 kshitij.so 399
		return "grn-history";
21636 ashik.ali 400
	}
21987 kshitij.so 401
 
25140 amit.gupta 402
	@RequestMapping(value = "/downloadPurchaseInvoices")
403
	public ResponseEntity<?> downloadPurchaseInvoices(HttpServletRequest request,
404
			@RequestParam(required = false) LocalDateTime startTime,
405
			@RequestParam(required = false) LocalDateTime endTime,
406
			@RequestParam(name = "offset", defaultValue = "0") int offset,
407
			@RequestParam(name = "limit", defaultValue = "10") int limit,
408
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
409
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
410
			throws ProfitMandiBusinessException {
411
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
412
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime, endTime, offset,
413
				limit, purchaseReference, searchType);
414
 
415
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
416
 
417
		if (fofoOrders.size() == 0) {
418
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
419
		}
420
 
421
		final HttpHeaders headers = new HttpHeaders();
422
		headers.setContentType(MediaType.APPLICATION_PDF);
423
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
424
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
425
		List<PdfModel> pdfModels = new ArrayList<>();
25371 tejbeer 426
		/*
427
		 * for (FofoOrder fofoOrder : fofoOrders) { try {
428
		 * pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId())); } catch
429
		 * (Exception e) {
430
		 * LOGGER.info("could not create invoice for {}, invoice number {}",
431
		 * fofoOrder.getId(), fofoOrder.getInvoiceNumber()); } }
432
		 */
25140 amit.gupta 433
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
434
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
435
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
436
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
437
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
438
	}
439
 
23786 amit.gupta 440
	@RequestMapping(value = "/getPaginatedGrnHistory")
441
	public String getPaginatedGrnHistory(HttpServletRequest request,
23886 amit.gupta 442
			@RequestParam(required = false) LocalDateTime startTime,
443
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 444
			@RequestParam(name = "offset", defaultValue = "0") int offset,
445
			@RequestParam(name = "limit", defaultValue = "10") int limit,
446
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
447
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
448
			throws ProfitMandiBusinessException {
22927 ashik.ali 449
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 450
		Map<String, Object> map = inventoryService.getPaginatedGrnHistory(loginDetails.getFofoId(), startTime, endTime,
451
				offset, limit);
22927 ashik.ali 452
		model.addAllAttributes(map);
21987 kshitij.so 453
		return "grn-history-paginated";
454
	}
455
 
23786 amit.gupta 456
	@RequestMapping(value = "/grnHistoryDetailByPurchaseId")
457
	public String grnHistoryByPurchaseId(HttpServletRequest request,
458
			@RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model)
459
			throws ProfitMandiBusinessException {
22927 ashik.ali 460
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 461
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseId, host, port,
462
				webapp);
22927 ashik.ali 463
		model.addAllAttributes(map);
21987 kshitij.so 464
		return "grn-details";
21636 ashik.ali 465
	}
21987 kshitij.so 466
 
23786 amit.gupta 467
	@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")
468
	public String grnHistoryByPurchaseReference(HttpServletRequest request,
469
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model)
470
			throws ProfitMandiBusinessException {
22927 ashik.ali 471
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 472
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseReference,
473
				host, port, webapp);
22927 ashik.ali 474
		model.addAllAttributes(map);
21987 kshitij.so 475
		return "grn-details";
21654 ashik.ali 476
	}
23786 amit.gupta 477
 
26248 amit.gupta 478
	@RequestMapping(value = "/activatedImeis")
479
	public String activatedImeis(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
480
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
481
 
482
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByActivatedNotSold(loginDetails.getFofoId());
483
		inventoryItems.stream().forEach(x -> {
484
			try {
485
				x.setItem(itemRepository.selectById(x.getItemId()));
486
			} catch (Exception e) {
487
				e.printStackTrace();
488
			}
489
		});
490
		model.addAttribute("inventoryItems", inventoryItems);
491
		return "activated-imeis";
492
	}
27583 tejbeer 493
 
27516 amit.gupta 494
	@RequestMapping(value = "/view-invoices")
495
	public String viewInvoices(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
496
		return "view-dummy-invoices";
497
	}
27583 tejbeer 498
 
27516 amit.gupta 499
	@RequestMapping(value = "/dummy-invoices")
27583 tejbeer 500
	public ResponseEntity<?> downloadInvoices(HttpServletRequest request, @RequestParam String serialNumber,
501
			Model model) throws ProfitMandiBusinessException {
27544 amit.gupta 502
		byte[] bytes = null;
27583 tejbeer 503
		if (!imeis.contains(serialNumber)) {
504
 
27544 amit.gupta 505
			PdfModel pdfModel = orderService.getDummyPdfModel(serialNumber);
506
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
507
			PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
508
			bytes = byteArrayOutputStream.toByteArray();
509
		} else {
510
			ClassPathResource resource = new ClassPathResource("/META-INF/" + serialNumber + ".pdf");
511
			try {
512
				bytes = FileUtils.readFileToByteArray(resource.getFile());
27583 tejbeer 513
			} catch (Exception e) {
514
 
27544 amit.gupta 515
			}
516
		}
27516 amit.gupta 517
		final HttpHeaders headers = new HttpHeaders();
518
		headers.setContentType(MediaType.APPLICATION_PDF);
27544 amit.gupta 519
		headers.set("Content-disposition", "inline; filename=invoice-" + serialNumber + ".pdf");
520
		headers.setContentLength(bytes.length);
521
		final InputStream inputStream = new ByteArrayInputStream(bytes);
27516 amit.gupta 522
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
523
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
524
	}
26248 amit.gupta 525
 
22472 ashik.ali 526
	@RequestMapping(value = "/getInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 527
	public String getInventoryItemAgingByInterval(HttpServletRequest request, @RequestBody List<Integer> intervals,
528
			Model model, @RequestParam(name = "searchContent", defaultValue = "") String searchContent,
529
			@RequestParam(name = "offset", defaultValue = "0") int offset,
530
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
22927 ashik.ali 531
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 532
		Map<String, Object> map = inventoryService.getPaginatedItemAgingByInterval(loginDetails.getFofoId(), intervals,
533
				searchContent, offset, limit);
22927 ashik.ali 534
		model.addAllAttributes(map);
22523 ashik.ali 535
		return "item-aging";
536
	}
23786 amit.gupta 537
 
22523 ashik.ali 538
	@RequestMapping(value = "/downloadInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 539
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request,
540
			@RequestBody List<Integer> intervals, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 541
		LOGGER.info("Request received at url{} with body {}", request.getRequestURI(), intervals);
542
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 543
 
544
		List<InventoryItemAgingModel> inventoryItemAgingModels = inventoryService
545
				.getItemAgingByInterval(fofoDetails.getFofoId(), intervals);
546
 
22486 ashik.ali 547
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
548
		ExcelUtils.writeInventoryItemAgingModels(inventoryItemAgingModels, intervals, byteArrayOutputStream);
23786 amit.gupta 549
 
550
		final HttpHeaders headers = new HttpHeaders();
551
		// private static final String CONTENT_TYPE_XLSX =
552
		// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
553
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
554
		// headers.set("Content-Type", "application/vnd.ms-excel");
22486 ashik.ali 555
		headers.set("Content-disposition", "inline; filename=InventoryItemAging.xlsx");
23786 amit.gupta 556
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
557
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
558
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
559
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
22472 ashik.ali 560
	}
27583 tejbeer 561
 
26968 amit.gupta 562
	@RequestMapping(value = "/aging-report", method = RequestMethod.GET)
27583 tejbeer 563
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request)
564
			throws ProfitMandiBusinessException {
565
 
566
		List<Integer> intervals = Arrays.asList(5, 15, 30, 45);
26961 amit.gupta 567
		List<InventoryItemAgingModel> inventoryItemAgingModels = inventoryService.getItemAgingByInterval(intervals)
26979 amit.gupta 568
				.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
569
		LOGGER.info("Fofo Id {}", inventoryItemAgingModels.get(0).getFofoId());
26961 amit.gupta 570
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
571
		ExcelUtils.writeInventoryItemAgingModels(inventoryItemAgingModels, intervals, byteArrayOutputStream);
27583 tejbeer 572
 
26961 amit.gupta 573
		final HttpHeaders headers = new HttpHeaders();
574
		// private static final String CONTENT_TYPE_XLSX =
575
		// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
576
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
577
		// headers.set("Content-Type", "application/vnd.ms-excel");
578
		headers.set("Content-disposition", "inline; filename=InventoryItemAging.xlsx");
579
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
580
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
581
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
582
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
583
	}
24123 tejbeer 584
 
24106 tejbeer 585
	@RequestMapping(value = "/featurePanel", method = RequestMethod.GET)
25371 tejbeer 586
	public String FeaturePanel(HttpServletRequest request, Model model) throws Exception {
21987 kshitij.so 587
 
24106 tejbeer 588
		List<TagRanking> tagRanking = null;
25362 tejbeer 589
		tagRanking = tagRankingRepository.getAllTagRanking();
24106 tejbeer 590
		LOGGER.info("tagRanking" + tagRanking);
591
		if (!tagRanking.isEmpty()) {
25371 tejbeer 592
			Set<Integer> catalogIds = tagRanking.stream().map(x -> x.getCatalogItemId()).collect(Collectors.toSet());
24798 tejbeer 593
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds);
594
			Map<Integer, String> catalogDescription = items.stream().collect(Collectors.toMap(x -> x.getCatalogItemId(),
595
					x -> x.getItemDescription(), (description1, description2) -> description1));
596
 
597
			LOGGER.info("catalogDescription" + catalogDescription);
24465 tejbeer 598
			model.addAttribute("tagRanking", tagRanking);
24798 tejbeer 599
			model.addAttribute("catalogDescription", catalogDescription);
24106 tejbeer 600
 
601
		} else {
602
			model.addAttribute("tagRanking", tagRanking);
25362 tejbeer 603
 
24106 tejbeer 604
		}
605
 
606
		return "feature";
607
 
608
	}
24123 tejbeer 609
 
26279 amit.gupta 610
	@PostMapping(value = "/imei/upload")
26294 amit.gupta 611
	public String uploadContent(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
26279 amit.gupta 612
			throws Exception {
26482 tejbeer 613
		/*
614
		 * if(brand==null) { throw new
615
		 * ProfitMandiBusinessException("Please select brand", "Brand empty",
616
		 * "Brand required"); }
617
		 */
26279 amit.gupta 618
		List<CSVRecord> masterDataList = readFile(file);
619
 
26482 tejbeer 620
		Map<String, LocalDateTime> imeisActivationMap = masterDataList.stream()
621
				.collect(Collectors.toMap(x -> x.get(0).trim(), x -> {
622
					if (!StringUtils.isEmpty(x.get(1).trim())) {
623
						return LocalDateTime.parse((String) (x.get(1).trim()), formatter);
26299 amit.gupta 624
					} else {
625
						return null;
626
					}
627
				}));
628
		inventoryService.addActivatedImeis(imeisActivationMap);
629
		model.addAttribute("response", true);
26294 amit.gupta 630
		return "response";
26279 amit.gupta 631
	}
632
 
633
	private List<CSVRecord> readFile(MultipartFile file) throws Exception {
634
		List<CSVRecord> records = null;
635
		try (CSVParser parser = new CSVParser(new InputStreamReader(file.getInputStream()), CSVFormat.DEFAULT)) {
636
			records = parser.getRecords();
637
			if (records.size() < 2) {
638
				throw new ProfitMandiBusinessException("Uploaded File", "", "No records Found");
639
			}
640
			records.remove(0);
26482 tejbeer 641
		} catch (Exception e) {
26279 amit.gupta 642
			throw new ProfitMandiBusinessException("Parsing Failed", "parse failed", "file parse failed");
643
		}
644
		return records;
645
	}
646
 
24106 tejbeer 647
	@RequestMapping(value = "/itemfeature", method = RequestMethod.POST)
24123 tejbeer 648
	public String Itemfeature(HttpServletRequest request, @RequestBody ItemFeatureDataModel itemFeatureDatatModel,
649
			Model model) throws Exception {
25371 tejbeer 650
		TagRanking tagRanking = tagRankingRepository.selectBycatalogItemId(itemFeatureDatatModel.getCatalogItemId());
651
		LOGGER.info("tagRanking" + tagRanking);
652
		if (tagRanking == null) {
653
			tagRanking = new TagRanking();
654
			tagRanking.setCatalogItemId(itemFeatureDatatModel.getCatalogItemId());
25363 tejbeer 655
		}
24106 tejbeer 656
		tagRanking.setFeature(itemFeatureDatatModel.getFeature());
25363 tejbeer 657
		tagRanking.setRankPoints(itemFeatureDatatModel.getRankPoints());
25371 tejbeer 658
 
24123 tejbeer 659
		tagRankingRepository.persist(tagRanking);
24106 tejbeer 660
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
661
		return "response";
662
	}
663
 
24798 tejbeer 664
	@RequestMapping(value = "/removeFeature", method = RequestMethod.DELETE)
665
	public String removeTagRankingEnteries(HttpServletRequest request,
666
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
24917 tejbeer 667
 
24798 tejbeer 668
		tagRankingRepository.deleteById(id);
669
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
670
		return "response";
671
	}
672
 
24465 tejbeer 673
	@RequestMapping(value = "/getDemolistbyfofoId", method = RequestMethod.GET)
674
	public String DemoListbyFofoId(HttpServletRequest request,
675
			@RequestParam(required = false, defaultValue = "0") int fofoId, Model model) throws Exception {
676
 
677
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
678
				.collect(Collectors.toList());
679
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
680
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
681
		List<String> serailNumberList = liveDemoBillingRespository.selectAllSerialNumber();
682
		LOGGER.info("serailNumberList" + serailNumberList);
683
		List<InventoryItem> inventoryItem = null;
684
		List<InventoryItem> inventoryItem1 = new ArrayList<>();
685
		if (fofoId > 0) {
686
			List<Item> items = itemRepository.selectAllByBrand("Live Demo");
687
			Set<Integer> itemIds = new HashSet<>();
688
			for (Item Item : items) {
689
				itemIds.add(Item.getId());
690
			}
691
			inventoryItem = inventoryItemRepository.selectByFofoIdItemIds(fofoId, itemIds);
692
 
693
			Set<String> serial = new HashSet<>();
694
			for (InventoryItem invItem : inventoryItem) {
24658 tejbeer 695
				if (!serailNumberList.contains(invItem.getSerialNumber())) {
24465 tejbeer 696
					inventoryItem1.add(invItem);
25371 tejbeer 697
 
24465 tejbeer 698
				}
699
 
700
			}
701
 
702
			LOGGER.info("inventoyItem" + inventoryItem1);
703
			model.addAttribute("customRetailers", customRetailers);
25371 tejbeer 704
 
24465 tejbeer 705
			model.addAttribute("liveDemo", inventoryItem1);
706
			CustomRetailer fofoIdsAndRetailerName = retailerService.getFofoRetailer(fofoId);
707
 
708
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
709
 
710
		}
711
 
712
		else {
713
			model.addAttribute("customRetailers", customRetailers);
714
			model.addAttribute("liveDemo", inventoryItem1);
715
		}
716
 
717
		return "live_demo_billing";
718
 
719
	}
720
 
721
	@RequestMapping(value = "/enableliveDemoSerailNumber", method = RequestMethod.POST)
722
	public String EnableliveDemoSerailNumber(HttpServletRequest request, @RequestParam String serial_number,
723
			Model model) throws Exception {
724
 
725
		LiveDemoSerialNumber liveDemoSerialNumber = new LiveDemoSerialNumber();
726
		liveDemoSerialNumber.setSerialNumber(serial_number);
727
 
728
		liveDemoBillingRespository.persist(liveDemoSerialNumber);
729
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
730
		return "response";
731
	}
732
 
24739 tejbeer 733
	@RequestMapping(value = "/getInProcessOrder", method = RequestMethod.GET)
734
	public String getInProcessOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
735
 
736
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 737
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24917 tejbeer 738
		List<Integer> retailerIds = new ArrayList<>();
739
		List<Integer> orderIds = new ArrayList<>();
740
		if (!inProcessorder.isEmpty()) {
741
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
742
				retailerIds.add(order.getRetailerId());
743
				orderIds.add(order.getId());
24739 tejbeer 744
 
24917 tejbeer 745
			}
24739 tejbeer 746
 
25640 tejbeer 747
			List<NotifyOrder> notify = notifyOrderRespository.selectByorderIds(orderIds);
748
			for (NotifyOrder notifyOrder : notify) {
25449 tejbeer 749
 
25640 tejbeer 750
				Order orderdetail = orderRepository.selectById(notifyOrder.getOrderId());
25449 tejbeer 751
				if (!orderdetail.getStatus().equals(OrderStatus.SUBMITTED_FOR_PROCESSING)) {
25640 tejbeer 752
					notifyOrder.setStatus(NotifyStatus.rejected);
25449 tejbeer 753
				}
25640 tejbeer 754
			}
24950 tejbeer 755
 
24917 tejbeer 756
			Map<Integer, Optional<NotifyOrder>> notifyOrders = notifyOrderRespository.selectByorderIds(orderIds)
757
					.stream().collect(Collectors.groupingBy(NotifyOrder::getOrderId,
758
							Collectors.maxBy((x1, x2) -> x1.getId() - x2.getId())));
24950 tejbeer 759
 
26110 tejbeer 760
			Map<Integer, NotifyCancel> notifyCancelOrders = notifyCancelOrderRepository.selectByOrderIds(orderIds)
761
					.stream().collect(Collectors.toMap(x -> x.getOrderId(), x -> x));
24917 tejbeer 762
			Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
763
					.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
764
			List<com.spice.profitmandi.dao.entity.transaction.Order> pendingPaymentorder = orderRepository
765
					.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusDays(30), LocalDateTime.now(),
766
							OrderStatus.PAYMENT_PENDING);
767
			List<com.spice.profitmandi.dao.entity.transaction.Order> failedPaymentorder = orderRepository
768
					.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusDays(30), LocalDateTime.now(),
769
							OrderStatus.PAYMENT_FAILED);
770
			pendingPaymentorder.addAll(failedPaymentorder);
771
 
772
			model.addAttribute("inProcessorder", inProcessorder);
773
			model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
774
			model.addAttribute("pendingPaymentorder", pendingPaymentorder);
775
			model.addAttribute("latestNotifyOrders", notifyOrders);
26110 tejbeer 776
			model.addAttribute("notifyCancelOrders", notifyCancelOrders);
24917 tejbeer 777
		} else {
778
			model.addAttribute("inProcessorder", inProcessorder);
779
		}
24739 tejbeer 780
		return "review_order";
781
	}
782
 
783
	@RequestMapping(value = "/getKeepInTabOrder", method = RequestMethod.GET)
784
	public String getKeepInTabOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
785
 
786
		List<com.spice.profitmandi.dao.entity.transaction.Order> keepatab = orderRepository
787
				.selectAllOrder(OrderStatus.KEEP_A_TAB);
788
 
789
		model.addAttribute("keepatab", keepatab);
790
 
791
		return "keep-a-tab";
792
	}
793
 
794
	@RequestMapping(value = "/closeOrder", method = RequestMethod.POST)
795
	public String closeOrder(HttpServletRequest request, @RequestParam int orderId, Model model) throws Exception {
24798 tejbeer 796
 
24739 tejbeer 797
		Order order = orderRepository.selectById(orderId);
24798 tejbeer 798
		if (order != null) {
24739 tejbeer 799
			order.setStatus(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
24798 tejbeer 800
 
24739 tejbeer 801
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
802
 
24798 tejbeer 803
		} else {
24739 tejbeer 804
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
805
 
806
		}
807
		return "response";
24658 tejbeer 808
	}
809
 
25640 tejbeer 810
	@RequestMapping(value = "/getcancelOrderItems", method = RequestMethod.GET)
811
	public String getcancelOrderItems(HttpServletRequest request, @RequestParam int itemId, Model model)
812
			throws Exception {
813
 
814
		List<Order> inProcessselectedOrder = orderRepository.selectByItemIdOrderStatus(itemId,
815
				OrderStatus.SUBMITTED_FOR_PROCESSING);
816
 
817
		List<Integer> retailerIds = new ArrayList<>();
818
		for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessselectedOrder) {
819
			retailerIds.add(order.getRetailerId());
820
 
821
		}
822
 
823
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
824
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
825
 
826
		model.addAttribute("inProcessCancelOrder", inProcessselectedOrder);
827
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
828
 
829
		return "cancel-order-modal";
830
	}
831
 
24739 tejbeer 832
	@RequestMapping(value = "/cancelOrder", method = RequestMethod.POST)
25640 tejbeer 833
	public String cancelOrder(HttpServletRequest request, @RequestBody OrderCancellationModel orderCancellationModel,
834
			Model model) throws Exception {
24739 tejbeer 835
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
25640 tejbeer 836
		LOGGER.info("orderId" + orderCancellationModel.getOrderIds());
837
 
24739 tejbeer 838
		try {
25699 tejbeer 839
			// List<Order> orders =
840
			// orderRepository.selectByOrderIds(orderCancellationModel.getOrderIds());
25640 tejbeer 841
 
25699 tejbeer 842
			List<Order> orders = orderRepository.selectByOrderIdsOrdersStatus(orderCancellationModel.getOrderIds(),
843
					OrderStatus.SUBMITTED_FOR_PROCESSING);
844
			if (!orders.isEmpty()) {
845
				for (Order order : orders) {
25640 tejbeer 846
 
25699 tejbeer 847
					orderRepository.refundOrder(order.getId(), loginDetails.getEmailId(),
848
							orderCancellationModel.getReason(), OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
849
					List<NotifyOrder> notifyOrders = notifyOrderRespository.selectByOrder(order.getId());
850
					for (NotifyOrder notifyOrder : notifyOrders) {
851
						if (notifyOrder.getStatus() == NotifyStatus.pending) {
852
							notifyOrder.setStatus(NotifyStatus.rejected);
853
						}
25449 tejbeer 854
					}
25699 tejbeer 855
					sendCancellationNotificationToPartner(order, orderCancellationModel.getReason());
856
					model.addAttribute("response", mvcResponseSender.createResponseString(true));
857
 
25640 tejbeer 858
				}
859
			}
24739 tejbeer 860
		} catch (TransactionServiceException | TException e) {
861
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
862
 
863
		}
25640 tejbeer 864
 
24739 tejbeer 865
		return "response";
866
	}
867
 
25039 amit.gupta 868
	private void sendCancellationNotificationToPartner(Order order, String reason) throws Exception {
869
		Item item = itemRepository.selectById(order.getLineItem().getItemId());
25383 tejbeer 870
 
25851 amit.gupta 871
		SendNotificationModel sendNotificationModel = new SendNotificationModel();
872
		sendNotificationModel.setCampaignName("Order Cancellation");
873
		sendNotificationModel.setTitle(String.format("Order %s %d(Pcs) cancelled", item.getItemDescription(),
25140 amit.gupta 874
				order.getLineItem().getQuantity()));
25851 amit.gupta 875
		sendNotificationModel.setType("url");
876
		sendNotificationModel.setMessage(reason);
26482 tejbeer 877
		sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/orderDetails");
25851 amit.gupta 878
		sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
879
		sendNotificationModel.setMessageType(MessageType.notification);
25857 tejbeer 880
		int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
25873 tejbeer 881
		sendNotificationModel.setUserIds(Arrays.asList(userId));
25851 amit.gupta 882
		notificationService.sendNotification(sendNotificationModel);
25140 amit.gupta 883
 
25039 amit.gupta 884
	}
885
 
24917 tejbeer 886
	@RequestMapping(value = "/getNotifyItemColor", method = RequestMethod.GET)
887
	public String getNotifyItemColor(HttpServletRequest request, @RequestParam int catalogItemId,
888
			@RequestParam int itemId, Model model) throws ProfitMandiBusinessException {
889
 
24950 tejbeer 890
		List<Item> availableColorItems = itemRepository.selectAllByCatalogItemId(catalogItemId);
891
		Iterator<Item> itemsIterator = availableColorItems.iterator();
24917 tejbeer 892
 
24950 tejbeer 893
		while (itemsIterator.hasNext()) {
894
			Item item = itemsIterator.next();
895
			TagListing itemTagListing = tagListingRepository.selectByItemId(item.getId());
896
 
897
			if (itemTagListing == null) {
898
				itemsIterator.remove();
899
 
900
			}
901
 
902
			else if (!itemTagListing.isActive()) {
903
				itemsIterator.remove();
904
 
905
			}
906
		}
907
 
24917 tejbeer 908
		List<Order> inProcessselectedOrder = orderRepository.selectByItemIdOrderStatus(itemId,
909
				OrderStatus.SUBMITTED_FOR_PROCESSING);
910
		List<Integer> retailerIds = new ArrayList<>();
911
 
912
		for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessselectedOrder) {
913
			retailerIds.add(order.getRetailerId());
914
 
915
		}
916
 
917
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
918
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
24950 tejbeer 919
		LOGGER.info("item" + availableColorItems);
920
		model.addAttribute("item", availableColorItems);
24917 tejbeer 921
		model.addAttribute("inProcessselectedOrder", inProcessselectedOrder);
922
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
923
 
924
		return "notify-order-modal";
925
	}
926
 
927
	@RequestMapping(value = "/notifyOrder", method = RequestMethod.POST)
928
	public String NotifyOrder(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel, Model model)
929
			throws Exception {
930
 
931
		com.spice.profitmandi.dao.entity.transaction.NotifyItem notifyItem = null;
932
		List<Integer> orderIds = new ArrayList<>();
933
 
934
		NotifyColorChange notifytimestamp = new NotifyColorChange();
935
		notifytimestamp.setCreated(LocalDateTime.now());
936
		notifyColorChangeRepository.persist(notifytimestamp);
25066 tejbeer 937
		NotifyMessage notifyMessage = new NotifyMessage();
938
		notifyMessage.setNotifyId(notifytimestamp.getId());
939
		notifyMessage.setNotifyMessages(notifyOrderModel.getMessage());
25140 amit.gupta 940
		notifyMessageRepository.persist(notifyMessage);
24917 tejbeer 941
		for (NotifyItemIdModel itemid : notifyOrderModel.getItemIds()) {
942
 
943
			notifyItem = new com.spice.profitmandi.dao.entity.transaction.NotifyItem();
944
			notifyItem.setItemId(itemid.getItemId());
945
			notifyItem.setResponseTime(itemid.getResponseTime());
946
			notifyItem.setProcuredDate(itemid.getProcuredTime());
947
			notifyItem.setNotifyColorchangeId(notifytimestamp.getId());
948
			notifyItemRepository.persist(notifyItem);
949
			LOGGER.info("notifyItem" + notifyItem);
950
		}
951
		for (NotifyOrderIdModel st : notifyOrderModel.getOrderIds()) {
952
			List<NotifyOrder> existingOrder = notifyOrderRespository.selectByOrder(st.getOrderId());
24950 tejbeer 953
			if (!existingOrder.isEmpty()) {
24917 tejbeer 954
				LOGGER.info("existingOrder" + existingOrder);
24950 tejbeer 955
				for (NotifyOrder notifyOrder : existingOrder) {
956
					if (NotifyStatus.pending == notifyOrder.getStatus()) {
957
						notifyOrder.setStatus(NotifyStatus.rejected);
26105 tejbeer 958
						notifyOrder.setUpdateTimestamp(LocalDateTime.now());
24950 tejbeer 959
					}
24917 tejbeer 960
				}
961
			}
962
			NotifyOrder orderStatus = new NotifyOrder();
963
			orderStatus.setOrderId(st.getOrderId());
964
			orderStatus.setNotifyId(notifytimestamp.getId());
965
			orderStatus.setItemId(st.getOlditemId());
966
			Order id = orderRepository.selectById(st.getOrderId());
967
			orderStatus.setFofoId(id.getRetailerId());
968
			orderStatus.setStatus(NotifyStatus.pending);
969
			notifyOrderRespository.persist(orderStatus);
970
 
971
			LOGGER.info("itemStatus" + orderStatus);
972
			orderIds.add(st.getOrderId());
973
		}
974
 
975
		LOGGER.info("orderIds" + orderIds);
976
		List<Order> orders = orderRepository.selectByOrderIds(orderIds);
977
		for (Order order : orders) {
978
			LOGGER.info("order" + order.getId());
979
 
25140 amit.gupta 980
			NotifyMessage message = notifyMessageRepository.selectByNotifyId(notifytimestamp.getId());
981
 
25851 amit.gupta 982
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
983
			sendNotificationModel.setCampaignName("Notify Partner");
984
			sendNotificationModel.setMessage(message.getNotifyMessages());
985
			sendNotificationModel.setType("url");
986
			sendNotificationModel.setTitle("Alert");
26959 tejbeer 987
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifyOrder");
25851 amit.gupta 988
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
989
			sendNotificationModel.setMessageType(MessageType.notification);
25857 tejbeer 990
			int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
25873 tejbeer 991
 
992
			sendNotificationModel.setUserIds(Arrays.asList(userId));
25851 amit.gupta 993
			notificationService.sendNotification(sendNotificationModel);
25140 amit.gupta 994
 
24917 tejbeer 995
		}
996
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
997
		return "response";
998
	}
999
 
1000
	@RequestMapping(value = "/getAllNotifyOrder", method = RequestMethod.GET)
1001
	public String getAllNotifyOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
24950 tejbeer 1002
		List<NotifyOrder> notifyOrders = null;
24917 tejbeer 1003
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 1004
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24950 tejbeer 1005
 
24917 tejbeer 1006
		List<Integer> orderIds = new ArrayList<>();
24950 tejbeer 1007
		if (!inProcessorder.isEmpty()) {
24917 tejbeer 1008
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
24950 tejbeer 1009
 
24917 tejbeer 1010
				orderIds.add(order.getId());
1011
 
24950 tejbeer 1012
			}
1013
			notifyOrders = notifyOrderRespository.selectByorderIds(orderIds);
1014
			Set<Integer> oldItemIds = new HashSet<>();
1015
			List<Integer> fofoIds = new ArrayList<>();
1016
			List<Integer> notifyIds = new ArrayList<>();
1017
			if (!notifyOrders.isEmpty()) {
1018
				for (NotifyOrder notifyOrder : notifyOrders) {
1019
					oldItemIds.add(notifyOrder.getItemId());
1020
					fofoIds.add(notifyOrder.getFofoId());
1021
					notifyIds.add(notifyOrder.getNotifyId());
24917 tejbeer 1022
				}
1023
 
24950 tejbeer 1024
				List<NotifyColorChange> notifyColorChanges = notifyColorChangeRepository.selectByNotifyId(notifyIds);
1025
				Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = this
1026
						.notifyOrdersToNotifyId(notifyColorChanges);
1027
				Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
1028
				Map<Integer, String> itemdescription = inventoryService.getItemIdDescriptionMap(oldItemIds);
24917 tejbeer 1029
 
24950 tejbeer 1030
				model.addAttribute("notifyOrders", notifyOrders);
1031
				model.addAttribute("notifyIdNotifyColorMap", notifyIdNotifyColorMap);
1032
				model.addAttribute("itemdescription", itemdescription);
1033
				model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
24917 tejbeer 1034
 
24950 tejbeer 1035
			} else {
1036
				model.addAttribute("notifyOrders", notifyOrders);
1037
			}
24917 tejbeer 1038
		} else {
1039
			model.addAttribute("notifyOrders", notifyOrders);
24950 tejbeer 1040
		}
24917 tejbeer 1041
		return "notify_order";
1042
	}
1043
 
1044
	private Map<Integer, NotifyColorChange> notifyOrdersToNotifyId(List<NotifyColorChange> notifyColorChanges) {
1045
		Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = new HashMap<>();
1046
		for (NotifyColorChange notifyColorChange : notifyColorChanges) {
1047
			notifyIdNotifyColorMap.put(notifyColorChange.getId(), notifyColorChange);
1048
		}
1049
		return notifyIdNotifyColorMap;
1050
	}
1051
 
26031 tejbeer 1052
	@RequestMapping(value = "/getItems", method = RequestMethod.GET)
1053
	public String getItems(HttpServletRequest request, @RequestParam int catalogItemId, Model model) throws Exception {
1054
 
1055
		Set<Integer> itemIds = itemRepository.selectAllByCatalogItemId(catalogItemId).stream().map(x -> x.getId())
1056
				.collect(Collectors.toSet());
1057
 
1058
		List<Order> notAvailableProcessingOrder = orderRepository.selectByItemIdsOrderStatus(itemIds,
1059
				OrderStatus.SUBMITTED_FOR_PROCESSING);
1060
		LOGGER.info("notAvailableProcessingOrder" + notAvailableProcessingOrder);
1061
 
1062
		List<Integer> retailerIds = new ArrayList<>();
1063
		for (com.spice.profitmandi.dao.entity.transaction.Order order : notAvailableProcessingOrder) {
1064
			retailerIds.add(order.getRetailerId());
1065
 
1066
		}
1067
 
1068
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
1069
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
1070
 
1071
		model.addAttribute("notAvailableProcessingOrder", notAvailableProcessingOrder);
1072
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
1073
 
1074
		return "partner-cancel-order-modal";
1075
	}
1076
 
1077
	@RequestMapping(value = "/notifyCancelOrder", method = RequestMethod.POST)
1078
	public String NotifyCancelOrder(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel,
1079
			Model model) throws Exception {
1080
		for (NotifyOrderIdModel st : notifyOrderModel.getOrderIds()) {
1081
			LOGGER.info("orderId" + st.getOrderId());
1082
			Order order = orderRepository.selectById(st.getOrderId());
26110 tejbeer 1083
			NotifyCancel nc = notifyCancelOrderRepository.selectByOrderId(st.getOrderId());
1084
			if (nc == null) {
1085
				nc = new NotifyCancel();
1086
				nc.setOrderId(st.getOrderId());
1087
				nc.setItemId(st.getOlditemId());
1088
				nc.setFofoId(order.getRetailerId());
1089
				nc.setCancellation(false);
1090
				nc.setCreatedTimestamp(LocalDateTime.now());
1091
				nc.setUpdatedTimestamp(LocalDateTime.now());
1092
				notifyCancelOrderRepository.persist(nc);
1093
			} else {
1094
				nc.setOrderId(st.getOrderId());
1095
				nc.setItemId(st.getOlditemId());
1096
				nc.setFofoId(order.getRetailerId());
1097
				nc.setCancellation(false);
1098
				nc.setUpdatedTimestamp(LocalDateTime.now());
1099
				notifyCancelOrderRepository.persist(nc);
1100
			}
26031 tejbeer 1101
 
1102
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
1103
			sendNotificationModel.setCampaignName("Notify Partner");
1104
			sendNotificationModel.setMessage(notifyOrderModel.getMessage());
1105
			sendNotificationModel.setType("url");
1106
			sendNotificationModel.setTitle("Alert");
26482 tejbeer 1107
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifyCancelOrder");
26031 tejbeer 1108
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
1109
			sendNotificationModel.setMessageType(MessageType.notification);
1110
			int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
1111
 
1112
			sendNotificationModel.setUserIds(Arrays.asList(userId));
1113
			notificationService.sendNotification(sendNotificationModel);
1114
 
1115
		}
1116
 
1117
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1118
		return "response";
1119
	}
26039 tejbeer 1120
 
1121
	@RequestMapping(value = "/getNotifiedCancelOrder", method = RequestMethod.GET)
1122
	public String getNotifiedCancelOrder(HttpServletRequest request, Model model) throws Exception {
1123
 
1124
		List<NotifyCancel> notifyCancels = notifyCancelOrderRepository.selectAllNonCancelOrder();
1125
		if (!notifyCancels.isEmpty()) {
1126
			List<Integer> retailerIds = new ArrayList<>();
1127
			Set<Integer> itemIds = new HashSet<>();
1128
			for (NotifyCancel nc : notifyCancels) {
1129
				retailerIds.add(nc.getFofoId());
1130
				itemIds.add(nc.getItemId());
1131
			}
1132
 
1133
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(retailerIds);
1134
 
1135
			Map<Integer, String> itemdescription = inventoryService.getItemIdDescriptionMap(itemIds);
1136
			model.addAttribute("notifyCancels", notifyCancels);
1137
			model.addAttribute("itemdescription", itemdescription);
1138
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
1139
		} else {
1140
 
1141
			model.addAttribute("notifyCancels", notifyCancels);
1142
 
1143
		}
1144
		return "notify_cancel";
1145
	}
1146
 
1147
	@RequestMapping(value = "/getNotifyItems", method = RequestMethod.GET)
1148
	public String getNotifyItems(HttpServletRequest request, @RequestParam int itemId, Model model) throws Exception {
1149
		Item item = itemRepository.selectById(itemId);
1150
 
1151
		List<Integer> itemIds = itemRepository.selectAllByCatalogItemId(item.getCatalogItemId()).stream()
1152
				.map(x -> x.getId()).collect(Collectors.toList());
1153
 
1154
		List<NotifyCancel> ncs = notifyCancelOrderRepository.selectByItemIdsAndStatus(itemIds);
1155
		List<Integer> retailerIds = new ArrayList<>();
1156
		Map<Integer, Object> orders = new HashMap<>();
1157
		for (NotifyCancel nc : ncs) {
1158
			retailerIds.add(nc.getFofoId());
1159
			Order od = orderRepository.selectById(nc.getOrderId());
1160
			orders.put(nc.getOrderId(), od);
1161
		}
1162
 
1163
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
1164
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
1165
 
1166
		model.addAttribute("notifyItems", ncs);
1167
		model.addAttribute("orders", orders);
1168
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
1169
 
1170
		return "notify_cancel_order_modal";
1171
	}
1172
 
1173
	@RequestMapping(value = "/changeNotifyCancelRequest", method = RequestMethod.POST)
1174
	public String changeNotifyCancelRequest(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel,
1175
			Model model) throws Exception {
1176
		List<Integer> orderIds = notifyOrderModel.getOrderIds().stream().map(x -> x.getOrderId())
1177
				.collect(Collectors.toList());
1178
 
1179
		List<NotifyCancel> ncs = notifyCancelOrderRepository.selectByOrderIds(orderIds);
1180
		for (NotifyCancel nc : ncs) {
1181
			nc.setCancellation(true);
1182
		}
1183
 
1184
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1185
		return "response";
1186
	}
26482 tejbeer 1187
 
1188
	@RequestMapping(value = "/getProducts", method = RequestMethod.GET)
1189
	public String getProducts(HttpServletRequest request, Model model)
1190
			throws ProfitMandiBusinessException, URISyntaxException, IOException {
1191
 
1192
		return "product-detail";
1193
	}
1194
 
1195
	@RequestMapping(value = "/getProductInfo", method = RequestMethod.GET)
1196
	public String getProductInfo(HttpServletRequest request, long catalogId, Model model) throws Exception {
1197
		ContentPojo cp = mongoClient.getEntityById(catalogId);
26493 tejbeer 1198
		model.addAttribute("cp", cp);
1199
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
26482 tejbeer 1200
		return "product-info";
1201
	}
26493 tejbeer 1202
 
1203
	@RequestMapping(value = "/getProductCompareInfo", method = RequestMethod.GET)
26512 amit.gupta 1204
	public String getProductCompareInfo(HttpServletRequest request, @RequestParam List<Long> catalogIds, Model model)
26493 tejbeer 1205
			throws Exception {
1206
		List<ContentPojo> cps = new ArrayList<>();
27583 tejbeer 1207
		Set<Integer> cataogIds = catalogIds.stream().mapToInt(Long::intValue).boxed().collect(Collectors.toSet());
1208
 
26512 amit.gupta 1209
		for (Long cId : catalogIds) {
1210
			ContentPojo cp = mongoClient.getEntityById(cId);
26959 tejbeer 1211
			if (cp.getName() == null) {
26512 amit.gupta 1212
				cp.setName(itemRepository.selectAllByCatalogItemId(cId.intValue()).get(0).getItemDescriptionNoColor());
1213
			}
27583 tejbeer 1214
			List<Item> items = itemRepository.selectAllByCatalogItemId(cId.intValue());
1215
			TagListing tagListing = tagListingRepository.selectByItemId(items.get(0).getId());
1216
			cp.setPrice(tagListing.getMop());
26493 tejbeer 1217
			cps.add(cp);
27583 tejbeer 1218
 
26493 tejbeer 1219
		}
26959 tejbeer 1220
 
26498 amit.gupta 1221
		List<Map<String, String>> entityList = new ArrayList<>();
26959 tejbeer 1222
		for (ContentPojo cp : cps) {
26498 amit.gupta 1223
			Map<String, String> specsMap = new HashMap<>();
26959 tejbeer 1224
			for (SpecificationGroup sg : cp.getDetailedSpecs()) {
26498 amit.gupta 1225
				String title = sg.getTitle();
26959 tejbeer 1226
				for (Specification s : sg.getSpecs()) {
26498 amit.gupta 1227
					String key = title + s.getName();
1228
					specsMap.put(key, String.join(", ", s.getValues()));
1229
				}
1230
			}
1231
			entityList.add(specsMap);
27583 tejbeer 1232
 
26498 amit.gupta 1233
		}
26959 tejbeer 1234
 
26493 tejbeer 1235
		LOGGER.info("cps" + cps);
26959 tejbeer 1236
		model.addAttribute("cps", cps);
1237
		model.addAttribute("catalogIds", gson.toJson(catalogIds, List.class));
1238
		model.addAttribute("entityList", entityList);
26493 tejbeer 1239
		return "product-compare";
1240
	}
24917 tejbeer 1241
}