Subversion Repositories SmartDukaan

Rev

Rev 25066 | Rev 25140 | 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;
24917 tejbeer 5
import java.io.IOException;
22486 ashik.ali 6
import java.io.InputStream;
23886 amit.gupta 7
import java.time.LocalDateTime;
24917 tejbeer 8
import java.time.ZoneOffset;
24465 tejbeer 9
import java.util.ArrayList;
24917 tejbeer 10
import java.util.HashMap;
24465 tejbeer 11
import java.util.HashSet;
24917 tejbeer 12
import java.util.Iterator;
21577 ashik.ali 13
import java.util.List;
21654 ashik.ali 14
import java.util.Map;
24917 tejbeer 15
import java.util.Optional;
24465 tejbeer 16
import java.util.Set;
17
import java.util.stream.Collectors;
21577 ashik.ali 18
 
24917 tejbeer 19
import javax.mail.MessagingException;
20
import javax.mail.internet.InternetAddress;
21
import javax.mail.internet.MimeMessage;
21577 ashik.ali 22
import javax.servlet.http.HttpServletRequest;
21987 kshitij.so 23
import javax.servlet.http.HttpServletResponse;
21577 ashik.ali 24
 
23886 amit.gupta 25
import org.apache.logging.log4j.LogManager;
23568 govind 26
import org.apache.logging.log4j.Logger;
24739 tejbeer 27
import org.apache.thrift.TException;
24465 tejbeer 28
import org.json.JSONObject;
21577 ashik.ali 29
import org.springframework.beans.factory.annotation.Autowired;
23784 ashik.ali 30
import org.springframework.beans.factory.annotation.Qualifier;
21987 kshitij.so 31
import org.springframework.beans.factory.annotation.Value;
22486 ashik.ali 32
import org.springframework.core.io.InputStreamResource;
33
import org.springframework.http.HttpHeaders;
34
import org.springframework.http.HttpStatus;
22472 ashik.ali 35
import org.springframework.http.ResponseEntity;
24917 tejbeer 36
import org.springframework.mail.javamail.JavaMailSender;
37
import org.springframework.mail.javamail.MimeMessageHelper;
21577 ashik.ali 38
import org.springframework.stereotype.Controller;
21654 ashik.ali 39
import org.springframework.transaction.annotation.Transactional;
21577 ashik.ali 40
import org.springframework.ui.Model;
22472 ashik.ali 41
import org.springframework.web.bind.annotation.RequestBody;
21577 ashik.ali 42
import org.springframework.web.bind.annotation.RequestMapping;
22472 ashik.ali 43
import org.springframework.web.bind.annotation.RequestMethod;
21577 ashik.ali 44
import org.springframework.web.bind.annotation.RequestParam;
45
 
21987 kshitij.so 46
import com.google.gson.Gson;
21577 ashik.ali 47
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21612 ashik.ali 48
import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;
24106 tejbeer 49
import com.spice.profitmandi.common.model.CustomRetailer;
22472 ashik.ali 50
import com.spice.profitmandi.common.model.InventoryItemAgingModel;
24106 tejbeer 51
import com.spice.profitmandi.common.model.ItemFeatureDataModel;
24917 tejbeer 52
import com.spice.profitmandi.common.model.NotifyItemIdModel;
53
import com.spice.profitmandi.common.model.NotifyOrderIdModel;
54
import com.spice.profitmandi.common.model.NotifyOrderModel;
21577 ashik.ali 55
import com.spice.profitmandi.common.model.ProfitMandiConstants;
22472 ashik.ali 56
import com.spice.profitmandi.common.util.ExcelUtils;
21987 kshitij.so 57
import com.spice.profitmandi.common.util.Utils;
24123 tejbeer 58
import com.spice.profitmandi.dao.entity.catalog.Item;
24950 tejbeer 59
import com.spice.profitmandi.dao.entity.catalog.TagListing;
24106 tejbeer 60
import com.spice.profitmandi.dao.entity.catalog.TagRanking;
24917 tejbeer 61
import com.spice.profitmandi.dao.entity.dtr.NotificationCampaigns;
62
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24465 tejbeer 63
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
64
import com.spice.profitmandi.dao.entity.fofo.LiveDemoSerialNumber;
24917 tejbeer 65
import com.spice.profitmandi.dao.entity.transaction.NotifyColorChange;
66
import com.spice.profitmandi.dao.entity.transaction.NotifyItem;
25066 tejbeer 67
import com.spice.profitmandi.dao.entity.transaction.NotifyMessage;
24917 tejbeer 68
import com.spice.profitmandi.dao.entity.transaction.NotifyOrder;
24739 tejbeer 69
import com.spice.profitmandi.dao.entity.transaction.Order;
70
import com.spice.profitmandi.dao.entity.user.User;
24123 tejbeer 71
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
24950 tejbeer 72
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
24106 tejbeer 73
import com.spice.profitmandi.dao.repository.catalog.TagRankingRepository;
24465 tejbeer 74
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24917 tejbeer 75
import com.spice.profitmandi.dao.repository.dtr.Mongo;
76
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24203 amit.gupta 77
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
24465 tejbeer 78
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
79
import com.spice.profitmandi.dao.repository.fofo.LiveDemoBillingRespository;
24917 tejbeer 80
import com.spice.profitmandi.dao.repository.inventory.NotifyStatus;
81
import com.spice.profitmandi.dao.repository.transaction.NotifyColorChangeRepository;
82
import com.spice.profitmandi.dao.repository.transaction.NotifyItemRepository;
25066 tejbeer 83
import com.spice.profitmandi.dao.repository.transaction.NotifyMessageRepository;
24917 tejbeer 84
import com.spice.profitmandi.dao.repository.transaction.NotifyOrderRespository;
24658 tejbeer 85
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
24739 tejbeer 86
import com.spice.profitmandi.dao.repository.user.UserRepository;
22927 ashik.ali 87
import com.spice.profitmandi.service.inventory.InventoryService;
24465 tejbeer 88
import com.spice.profitmandi.service.user.RetailerService;
22139 amit.gupta 89
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 90
import com.spice.profitmandi.web.util.CookiesProcessor;
24106 tejbeer 91
import com.spice.profitmandi.web.util.MVCResponseSender;
21577 ashik.ali 92
 
24658 tejbeer 93
import in.shop2020.model.v1.order.OrderStatus;
24739 tejbeer 94
import in.shop2020.model.v1.order.TransactionServiceException;
24658 tejbeer 95
 
21577 ashik.ali 96
@Controller
24123 tejbeer 97
@Transactional(rollbackFor = Throwable.class)
21577 ashik.ali 98
public class InventoryController {
21987 kshitij.so 99
 
23568 govind 100
	private static final Logger LOGGER = LogManager.getLogger(InventoryController.class);
21987 kshitij.so 101
 
21577 ashik.ali 102
	@Autowired
22927 ashik.ali 103
	private CookiesProcessor cookiesProcessor;
24123 tejbeer 104
 
22354 ashik.ali 105
	@Autowired
23784 ashik.ali 106
	@Qualifier("fofoInventoryService")
22927 ashik.ali 107
	private InventoryService inventoryService;
24465 tejbeer 108
 
24203 amit.gupta 109
	@Autowired
24950 tejbeer 110
	TagListingRepository tagListingRepository;
111
 
112
	@Autowired
24203 amit.gupta 113
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
24123 tejbeer 114
 
24106 tejbeer 115
	@Autowired
116
	private TagRankingRepository tagRankingRepository;
24123 tejbeer 117
 
24106 tejbeer 118
	@Autowired
24465 tejbeer 119
	private InventoryItemRepository inventoryItemRepository;
120
 
121
	@Autowired
122
	private LiveDemoBillingRespository liveDemoBillingRespository;
123
 
124
	@Autowired
24123 tejbeer 125
	private ItemRepository itemRepository;
126
 
127
	@Autowired
24917 tejbeer 128
	private NotifyItemRepository notifyItemRespository;
129
 
130
	@Autowired
24465 tejbeer 131
	private RetailerService retailerService;
132
 
133
	@Autowired
24106 tejbeer 134
	private MVCResponseSender mvcResponseSender;
24123 tejbeer 135
 
24465 tejbeer 136
	@Autowired
137
	FofoStoreRepository fofoStoreRepository;
138
 
24658 tejbeer 139
	@Autowired
140
	private OrderRepository orderRepository;
141
 
24739 tejbeer 142
	@Autowired
25037 amit.gupta 143
	private UserRepository saholicUserRepository;
24917 tejbeer 144
	@Autowired
145
	private NotifyItemRepository notifyItemRepository;
24739 tejbeer 146
 
24917 tejbeer 147
	@Autowired
148
	private NotifyColorChangeRepository notifyColorChangeRepository;
149
 
150
	@Autowired
151
	private NotifyOrderRespository notifyOrderRespository;
152
 
153
	@Autowired
25066 tejbeer 154
	private NotifyMessageRepository notifyMessageRepository;
155
 
156
	@Autowired
24917 tejbeer 157
	private UserAccountRepository userAccountRepository;
158
 
21987 kshitij.so 159
	@Value("${saholic.api.host}")
160
	private String host;
23786 amit.gupta 161
 
21987 kshitij.so 162
	@Value("${saholic.api.port}")
163
	private int port;
23786 amit.gupta 164
 
21987 kshitij.so 165
	@Value("${saholic.api.webapp}")
166
	private String webapp;
167
 
24917 tejbeer 168
	@Autowired
169
	JavaMailSender mailSender;
170
 
171
	@Autowired
172
	private Mongo mongoClient;
173
 
23786 amit.gupta 174
	@RequestMapping(value = "/getCurrentInventorySnapshot")
175
	public String getCurrentAvailability(HttpServletRequest request,
176
			@RequestParam(name = "offset", defaultValue = "0") int offset,
177
			@RequestParam(name = "limit", defaultValue = "10") int limit,
24123 tejbeer 178
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
23786 amit.gupta 179
			throws ProfitMandiBusinessException {
22927 ashik.ali 180
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 181
		Map<String, Object> map = inventoryService.getCurrentInventorySnapshot(loginDetails.getFofoId(), offset, limit,
182
				searchTerm);
22927 ashik.ali 183
		model.addAllAttributes(map);
21987 kshitij.so 184
		return "inventory-snapshot";
21612 ashik.ali 185
	}
21987 kshitij.so 186
 
23786 amit.gupta 187
	@RequestMapping(value = "/getBadInventorySnapshot")
188
	public String getBadAvailability(HttpServletRequest request,
189
			@RequestParam(name = "offset", defaultValue = "0") int offset,
190
			@RequestParam(name = "limit", defaultValue = "10") int limit,
191
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
192
			throws ProfitMandiBusinessException {
24123 tejbeer 193
		if (searchTerm == null) {
194
			searchTerm = "";
24052 amit.gupta 195
		}
22927 ashik.ali 196
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 197
		Map<String, Object> map = inventoryService.getBadInventorySnapshot(loginDetails.getFofoId(), offset, limit,
198
				searchTerm);
22927 ashik.ali 199
		model.addAllAttributes(map);
21987 kshitij.so 200
		return "bad-inventory-snapshot";
201
	}
202
 
23786 amit.gupta 203
	@RequestMapping(value = "/getPaginatedCurrentInventorySnapshot")
204
	public String getPaginatedCurrentInventorySnapshot(HttpServletRequest request,
205
			@RequestParam(name = "offset", defaultValue = "0") int offset,
206
			@RequestParam(name = "limit", defaultValue = "10") int limit,
207
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
208
			throws ProfitMandiBusinessException {
24123 tejbeer 209
		if (searchTerm == null) {
210
			searchTerm = "";
24052 amit.gupta 211
		}
22927 ashik.ali 212
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 213
		Map<String, Object> map = inventoryService.getPaginatedCurrentInventorySnapshot(loginDetails.getFofoId(),
214
				offset, limit, searchTerm);
22927 ashik.ali 215
		model.addAllAttributes(map);
21987 kshitij.so 216
		return "inventory-snapshot-paginated";
217
	}
23786 amit.gupta 218
 
219
	@RequestMapping(value = "/getCatalog")
220
	public String getCatalog(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
221
			@RequestParam(name = "limit", defaultValue = "10") int limit,
222
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
223
			throws ProfitMandiBusinessException {
22927 ashik.ali 224
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 225
		if (searchTerm == null) {
226
			searchTerm = "";
24052 amit.gupta 227
		}
24739 tejbeer 228
 
22927 ashik.ali 229
		Map<String, Object> map = inventoryService.getCatalog(loginDetails.getFofoId(), offset, limit, searchTerm);
230
		model.addAllAttributes(map);
24203 amit.gupta 231
		model.addAttribute("hasGift", hasGift(loginDetails.getFofoId()));
24658 tejbeer 232
 
21987 kshitij.so 233
		return "catalog";
234
	}
23786 amit.gupta 235
 
24465 tejbeer 236
	// This method is currently hardcoded to faciliate watches sold as gift.
24203 amit.gupta 237
	private boolean hasGift(int fofoId) {
238
		try {
24465 tejbeer 239
			return currentInventorySnapshotRepository.selectByItemIdAndFofoId(ProfitMandiConstants.GIFT_ID, fofoId)
240
					.getAvailability() > 0;
24203 amit.gupta 241
		} catch (ProfitMandiBusinessException e) {
242
			return false;
243
		}
244
	}
245
 
23786 amit.gupta 246
	@RequestMapping(value = "/getPaginatedCatalog")
247
	public String getCatalogPaginated(HttpServletRequest request,
248
			@RequestParam(name = "offset", defaultValue = "0") int offset,
249
			@RequestParam(name = "limit", defaultValue = "10") int limit,
250
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
251
			throws ProfitMandiBusinessException {
22927 ashik.ali 252
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 253
		if (searchTerm == null) {
254
			searchTerm = "";
24052 amit.gupta 255
		}
23786 amit.gupta 256
		Map<String, Object> map = inventoryService.getPaginatedCatalog(loginDetails.getFofoId(), offset, limit,
257
				searchTerm);
22927 ashik.ali 258
		model.addAllAttributes(map);
21987 kshitij.so 259
		return "catalog-paginated";
260
	}
261
 
23786 amit.gupta 262
	@RequestMapping(value = "/checkItemAvailability")
263
	public String getItemAvailability(HttpServletRequest request,
264
			@RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, Model model)
265
			throws ProfitMandiBusinessException {
22927 ashik.ali 266
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 267
		CustomCurrentInventorySnapshot customCurrentInventorySnapshot = inventoryService.checkItemAvailability(itemId,
268
				loginDetails.getFofoId());
269
		customCurrentInventorySnapshot
270
				.setIconUrl(Utils.getIconUrl(customCurrentInventorySnapshot.getCatalogItemId(), host, port, webapp));
22927 ashik.ali 271
		model.addAttribute("currentInventorySnapshot", new Gson().toJson(customCurrentInventorySnapshot));
272
		return "current-item-availability";
23786 amit.gupta 273
 
21577 ashik.ali 274
	}
23786 amit.gupta 275
 
23192 ashik.ali 276
	@RequestMapping(value = "/cart", method = RequestMethod.POST)
23786 amit.gupta 277
	public String addToCart(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
278
			throws ProfitMandiBusinessException {
22927 ashik.ali 279
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 280
 
22927 ashik.ali 281
		Map<String, Object> map = inventoryService.addToCart(cartData, loginDetails.getFofoId());
282
		model.addAllAttributes(map);
21987 kshitij.so 283
		return "cart";
284
	}
23786 amit.gupta 285
 
23192 ashik.ali 286
	@RequestMapping(value = "/validate-cart", method = RequestMethod.POST)
23786 amit.gupta 287
	public String validateCart(HttpServletRequest request, HttpServletResponse response,
288
			@RequestParam(name = "cartData") String cartData, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 289
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 290
 
22927 ashik.ali 291
		Map<String, Object> map = inventoryService.validateCart(cartData, loginDetails.getFofoId());
292
		model.addAllAttributes(map);
21987 kshitij.so 293
		return "validate-cart";
294
	}
295
 
23786 amit.gupta 296
	@RequestMapping(value = "/grnHistory")
24123 tejbeer 297
	public String getGrnHistory(HttpServletRequest request, @RequestParam(required = false) LocalDateTime startTime,
23886 amit.gupta 298
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 299
			@RequestParam(name = "offset", defaultValue = "0") int offset,
300
			@RequestParam(name = "limit", defaultValue = "10") int limit,
301
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
302
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
303
			throws ProfitMandiBusinessException {
22927 ashik.ali 304
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 305
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime, endTime, offset,
306
				limit, purchaseReference, searchType);
22927 ashik.ali 307
		model.addAllAttributes(map);
21987 kshitij.so 308
		return "grn-history";
21636 ashik.ali 309
	}
21987 kshitij.so 310
 
23786 amit.gupta 311
	@RequestMapping(value = "/getPaginatedGrnHistory")
312
	public String getPaginatedGrnHistory(HttpServletRequest request,
23886 amit.gupta 313
			@RequestParam(required = false) LocalDateTime startTime,
314
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 315
			@RequestParam(name = "offset", defaultValue = "0") int offset,
316
			@RequestParam(name = "limit", defaultValue = "10") int limit,
317
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
318
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
319
			throws ProfitMandiBusinessException {
22927 ashik.ali 320
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 321
		Map<String, Object> map = inventoryService.getPaginatedGrnHistory(loginDetails.getFofoId(), startTime, endTime,
322
				offset, limit);
22927 ashik.ali 323
		model.addAllAttributes(map);
21987 kshitij.so 324
		return "grn-history-paginated";
325
	}
326
 
23786 amit.gupta 327
	@RequestMapping(value = "/grnHistoryDetailByPurchaseId")
328
	public String grnHistoryByPurchaseId(HttpServletRequest request,
329
			@RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model)
330
			throws ProfitMandiBusinessException {
22927 ashik.ali 331
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 332
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseId, host, port,
333
				webapp);
22927 ashik.ali 334
		model.addAllAttributes(map);
21987 kshitij.so 335
		return "grn-details";
21636 ashik.ali 336
	}
21987 kshitij.so 337
 
23786 amit.gupta 338
	@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")
339
	public String grnHistoryByPurchaseReference(HttpServletRequest request,
340
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model)
341
			throws ProfitMandiBusinessException {
22927 ashik.ali 342
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 343
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseReference,
344
				host, port, webapp);
22927 ashik.ali 345
		model.addAllAttributes(map);
21987 kshitij.so 346
		return "grn-details";
21654 ashik.ali 347
	}
23786 amit.gupta 348
 
22472 ashik.ali 349
	@RequestMapping(value = "/getInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 350
	public String getInventoryItemAgingByInterval(HttpServletRequest request, @RequestBody List<Integer> intervals,
351
			Model model, @RequestParam(name = "searchContent", defaultValue = "") String searchContent,
352
			@RequestParam(name = "offset", defaultValue = "0") int offset,
353
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
22927 ashik.ali 354
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 355
		Map<String, Object> map = inventoryService.getPaginatedItemAgingByInterval(loginDetails.getFofoId(), intervals,
356
				searchContent, offset, limit);
22927 ashik.ali 357
		model.addAllAttributes(map);
22523 ashik.ali 358
		return "item-aging";
359
	}
23786 amit.gupta 360
 
22523 ashik.ali 361
	@RequestMapping(value = "/downloadInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 362
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request,
363
			@RequestBody List<Integer> intervals, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 364
		LOGGER.info("Request received at url{} with body {}", request.getRequestURI(), intervals);
365
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 366
 
367
		List<InventoryItemAgingModel> inventoryItemAgingModels = inventoryService
368
				.getItemAgingByInterval(fofoDetails.getFofoId(), intervals);
369
 
22486 ashik.ali 370
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
371
		ExcelUtils.writeInventoryItemAgingModels(inventoryItemAgingModels, intervals, byteArrayOutputStream);
23786 amit.gupta 372
 
373
		final HttpHeaders headers = new HttpHeaders();
374
		// private static final String CONTENT_TYPE_XLSX =
375
		// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
376
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
377
		// headers.set("Content-Type", "application/vnd.ms-excel");
22486 ashik.ali 378
		headers.set("Content-disposition", "inline; filename=InventoryItemAging.xlsx");
23786 amit.gupta 379
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
380
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
381
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
382
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
383
 
24123 tejbeer 384
		// return
385
		// responseSender.ok(ResponseCodeHolder.getMessage("ITM_AGNG_OK_1000"));
22472 ashik.ali 386
	}
24123 tejbeer 387
 
24106 tejbeer 388
	@RequestMapping(value = "/featurePanel", method = RequestMethod.GET)
24123 tejbeer 389
	public String FeaturePanel(HttpServletRequest request,
390
			@RequestParam(name = "offset", defaultValue = "0") int offset,
24106 tejbeer 391
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
21987 kshitij.so 392
 
24106 tejbeer 393
		List<TagRanking> tagRanking = null;
394
 
395
		long size = 0;
24123 tejbeer 396
		tagRanking = tagRankingRepository.selectAllTagRanking(offset, limit);
397
		size = tagRankingRepository.selectAllCount();
24106 tejbeer 398
		LOGGER.info("tagRanking" + tagRanking);
399
		if (!tagRanking.isEmpty()) {
24798 tejbeer 400
 
401
			Set<Integer> catalogIds = tagRanking.stream().map(x -> x.getCatalogItemId()).collect(Collectors.toSet());
402
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds);
403
			Map<Integer, String> catalogDescription = items.stream().collect(Collectors.toMap(x -> x.getCatalogItemId(),
404
					x -> x.getItemDescription(), (description1, description2) -> description1));
405
 
406
			LOGGER.info("catalogDescription" + catalogDescription);
24465 tejbeer 407
			model.addAttribute("tagRanking", tagRanking);
24798 tejbeer 408
			model.addAttribute("catalogDescription", catalogDescription);
24106 tejbeer 409
			model.addAttribute("start", offset + 1);
410
			model.addAttribute("size", size);
411
			model.addAttribute("url", "/getPaginatedfeature");
412
 
413
		} else {
414
			model.addAttribute("tagRanking", tagRanking);
415
			model.addAttribute("size", size);
416
		}
417
 
418
		return "feature";
419
 
420
	}
24123 tejbeer 421
 
24798 tejbeer 422
	/*
24917 tejbeer 423
	 * @RequestMapping(value = "/getPaginatedfeature", method = RequestMethod.GET)
424
	 * public String getPaginatedFeaturePanel(HttpServletRequest request,
24798 tejbeer 425
	 * 
426
	 * @RequestParam(name = "offset", defaultValue = "0") int offset,
427
	 * 
24917 tejbeer 428
	 * @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
429
	 * throws ProfitMandiBusinessException {
24798 tejbeer 430
	 * LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
431
	 * List<TagRanking> tagRanking = null;
432
	 * 
433
	 * 
24917 tejbeer 434
	 * long size = 0; tagRanking = tagRankingRepository.selectAllTagRanking(offset,
435
	 * limit); if (!tagRanking.isEmpty()) {
24798 tejbeer 436
	 * 
437
	 * model.addAttribute("tagRanking", tagRanking); model.addAttribute("start",
438
	 * offset + 1); model.addAttribute("size", size); model.addAttribute("url",
439
	 * "/getPaginatedfeature");
440
	 * 
441
	 * } else { model.addAttribute("tagRanking", tagRanking); } return
442
	 * "feature-paginated"; }
443
	 */
24106 tejbeer 444
	@RequestMapping(value = "/itemfeature", method = RequestMethod.POST)
24123 tejbeer 445
	public String Itemfeature(HttpServletRequest request, @RequestBody ItemFeatureDataModel itemFeatureDatatModel,
446
			Model model) throws Exception {
24106 tejbeer 447
 
448
		TagRanking tagRanking = new TagRanking();
449
		tagRanking.setRankPoints(itemFeatureDatatModel.getRankPoints());
450
		tagRanking.setCatalogItemId(itemFeatureDatatModel.getCatalogItemId());
451
		tagRanking.setFeature(itemFeatureDatatModel.getFeature());
24123 tejbeer 452
 
453
		LOGGER.info("tagRanking" + tagRanking);
454
		tagRankingRepository.persist(tagRanking);
24106 tejbeer 455
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
456
		return "response";
457
	}
458
 
24798 tejbeer 459
	@RequestMapping(value = "/removeFeature", method = RequestMethod.DELETE)
460
	public String removeTagRankingEnteries(HttpServletRequest request,
461
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
24917 tejbeer 462
 
24798 tejbeer 463
		tagRankingRepository.deleteById(id);
464
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
465
		return "response";
466
	}
467
 
24465 tejbeer 468
	@RequestMapping(value = "/getDemolistbyfofoId", method = RequestMethod.GET)
469
	public String DemoListbyFofoId(HttpServletRequest request,
470
			@RequestParam(required = false, defaultValue = "0") int fofoId, Model model) throws Exception {
471
 
472
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
473
				.collect(Collectors.toList());
474
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
475
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
476
		List<String> serailNumberList = liveDemoBillingRespository.selectAllSerialNumber();
477
		LOGGER.info("serailNumberList" + serailNumberList);
478
		List<InventoryItem> inventoryItem = null;
479
		List<InventoryItem> inventoryItem1 = new ArrayList<>();
480
		if (fofoId > 0) {
481
			List<Item> items = itemRepository.selectAllByBrand("Live Demo");
482
			Set<Integer> itemIds = new HashSet<>();
483
			for (Item Item : items) {
484
				itemIds.add(Item.getId());
485
			}
486
			inventoryItem = inventoryItemRepository.selectByFofoIdItemIds(fofoId, itemIds);
487
 
488
			Set<String> serial = new HashSet<>();
489
			for (InventoryItem invItem : inventoryItem) {
24658 tejbeer 490
				if (!serailNumberList.contains(invItem.getSerialNumber())) {
24465 tejbeer 491
					inventoryItem1.add(invItem);
492
				}
493
 
494
			}
495
 
496
			LOGGER.info("inventoyItem" + inventoryItem1);
497
			model.addAttribute("customRetailers", customRetailers);
498
			model.addAttribute("liveDemo", inventoryItem1);
499
 
500
			CustomRetailer fofoIdsAndRetailerName = retailerService.getFofoRetailer(fofoId);
501
 
502
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
503
 
504
		}
505
 
506
		else {
507
			model.addAttribute("customRetailers", customRetailers);
508
			model.addAttribute("liveDemo", inventoryItem1);
509
		}
510
 
511
		return "live_demo_billing";
512
 
513
	}
514
 
515
	@RequestMapping(value = "/enableliveDemoSerailNumber", method = RequestMethod.POST)
516
	public String EnableliveDemoSerailNumber(HttpServletRequest request, @RequestParam String serial_number,
517
			Model model) throws Exception {
518
 
519
		LiveDemoSerialNumber liveDemoSerialNumber = new LiveDemoSerialNumber();
520
		liveDemoSerialNumber.setSerialNumber(serial_number);
521
 
522
		liveDemoBillingRespository.persist(liveDemoSerialNumber);
523
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
524
		return "response";
525
	}
526
 
24739 tejbeer 527
	@RequestMapping(value = "/getInProcessOrder", method = RequestMethod.GET)
528
	public String getInProcessOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
529
 
530
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 531
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24917 tejbeer 532
		List<Integer> retailerIds = new ArrayList<>();
533
		List<Integer> orderIds = new ArrayList<>();
534
		if (!inProcessorder.isEmpty()) {
535
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
536
				retailerIds.add(order.getRetailerId());
537
				orderIds.add(order.getId());
24739 tejbeer 538
 
24917 tejbeer 539
			}
24739 tejbeer 540
 
24917 tejbeer 541
			List<NotifyOrder> notify = notifyOrderRespository.selectByorderIds(orderIds);
542
			for (NotifyOrder notifyOrder : notify) {
543
				List<NotifyItem> notifyItems = notifyItemRepository.selectByNotifyId(notifyOrder.getNotifyId());
544
				Iterator<NotifyItem> notifyItemsIterator = notifyItems.iterator();
24950 tejbeer 545
 
546
				while (notifyItemsIterator.hasNext()) {
24917 tejbeer 547
					NotifyItem notifyItem = notifyItemsIterator.next();
548
					if (LocalDateTime.now().isAfter(notifyItem.getResponseTime())) {
549
						notifyItemsIterator.remove();
550
					}
551
				}
24950 tejbeer 552
				if (notifyItems.size() == 0) {
553
					if (NotifyStatus.pending == notifyOrder.getStatus()) {
554
						notifyOrder.setStatus(NotifyStatus.rejected);
24917 tejbeer 555
					}
556
				}
557
 
558
			}
559
 
560
			Map<Integer, Optional<NotifyOrder>> notifyOrders = notifyOrderRespository.selectByorderIds(orderIds)
561
					.stream().collect(Collectors.groupingBy(NotifyOrder::getOrderId,
562
							Collectors.maxBy((x1, x2) -> x1.getId() - x2.getId())));
24950 tejbeer 563
 
24917 tejbeer 564
			Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
565
					.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
566
			List<com.spice.profitmandi.dao.entity.transaction.Order> pendingPaymentorder = orderRepository
567
					.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusDays(30), LocalDateTime.now(),
568
							OrderStatus.PAYMENT_PENDING);
569
			List<com.spice.profitmandi.dao.entity.transaction.Order> failedPaymentorder = orderRepository
570
					.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusDays(30), LocalDateTime.now(),
571
							OrderStatus.PAYMENT_FAILED);
572
			pendingPaymentorder.addAll(failedPaymentorder);
573
 
574
			model.addAttribute("inProcessorder", inProcessorder);
575
			model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
576
			model.addAttribute("pendingPaymentorder", pendingPaymentorder);
577
			model.addAttribute("latestNotifyOrders", notifyOrders);
578
		} else {
579
			model.addAttribute("inProcessorder", inProcessorder);
580
		}
24739 tejbeer 581
		return "review_order";
582
	}
583
 
584
	@RequestMapping(value = "/getKeepInTabOrder", method = RequestMethod.GET)
585
	public String getKeepInTabOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
586
 
587
		List<com.spice.profitmandi.dao.entity.transaction.Order> keepatab = orderRepository
588
				.selectAllOrder(OrderStatus.KEEP_A_TAB);
589
 
590
		model.addAttribute("keepatab", keepatab);
591
 
592
		return "keep-a-tab";
593
	}
594
 
595
	@RequestMapping(value = "/closeOrder", method = RequestMethod.POST)
596
	public String closeOrder(HttpServletRequest request, @RequestParam int orderId, Model model) throws Exception {
24798 tejbeer 597
 
24739 tejbeer 598
		Order order = orderRepository.selectById(orderId);
24798 tejbeer 599
		if (order != null) {
24739 tejbeer 600
			order.setStatus(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
24798 tejbeer 601
 
24739 tejbeer 602
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
603
 
24798 tejbeer 604
		} else {
24739 tejbeer 605
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
606
 
607
		}
608
		return "response";
24658 tejbeer 609
	}
610
 
24739 tejbeer 611
	@RequestMapping(value = "/cancelOrder", method = RequestMethod.POST)
612
	public String cancelOrder(HttpServletRequest request, @RequestParam int orderId, @RequestParam String reason,
613
			@RequestParam OrderStatus orderStatus, Model model) throws Exception {
614
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
25037 amit.gupta 615
		//User userInfo = saholicUserRepository.selectById(loginDetails.getFofoId());
24739 tejbeer 616
		LOGGER.info("status" + orderStatus);
617
		try {
25039 amit.gupta 618
			Order order = orderRepository.selectById(orderId);
25037 amit.gupta 619
			orderRepository.refundOrder(orderId, loginDetails.getEmailId(), reason, orderStatus);
25039 amit.gupta 620
 
621
			sendCancellationNotificationToPartner(order, reason);
24739 tejbeer 622
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
623
 
624
		} catch (TransactionServiceException | TException e) {
625
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
626
 
627
		}
628
		return "response";
629
	}
630
 
25039 amit.gupta 631
	private void sendCancellationNotificationToPartner(Order order, String reason) throws Exception {
632
		Item item = itemRepository.selectById(order.getLineItem().getItemId());
633
		NotificationCampaigns notification = new NotificationCampaigns();
634
		notification.setName("Order Cancellation");
635
 
636
		notification.setTitle(String.format("Order %s %d(Pcs) cancelled", item.getItemDescription(), order.getLineItem().getQuantity()));
637
 
638
		notification.setMessage(reason);
639
		notification.setType("url");
640
		notification.setUrl("http://app.profitmandi.com/pages/home/notifications");
641
 
642
		notification.setSql("SELECT distinct d1.user_id from devices d1 left join devices d2 on"
643
				+ "(d1.imeinumber = d2.imeinumber and d1.created < d2.created) "
644
				+ " where d2.id is null and d1.user_id = "
645
				+ userAccountRepository.selectUserIdByRetailerId(order.getRetailerId()));
646
		notification.setExpiresat(LocalDateTime.now().plusDays(2).toEpochSecond(ZoneOffset.UTC) * 1000);
647
		notification.setStatus("active");
648
		notification.setSmsprocessed(0);
649
		notification.setNotification_processed(0);
650
		notification.setNotification_type("GENERAL_NOTIFICATION");
651
		mongoClient.persistNotificationCmpInfo(notification);
652
 
653
	}
654
 
24917 tejbeer 655
	@RequestMapping(value = "/getNotifyItemColor", method = RequestMethod.GET)
656
	public String getNotifyItemColor(HttpServletRequest request, @RequestParam int catalogItemId,
657
			@RequestParam int itemId, Model model) throws ProfitMandiBusinessException {
658
 
24950 tejbeer 659
		List<Item> availableColorItems = itemRepository.selectAllByCatalogItemId(catalogItemId);
660
		Iterator<Item> itemsIterator = availableColorItems.iterator();
24917 tejbeer 661
 
24950 tejbeer 662
		while (itemsIterator.hasNext()) {
663
			Item item = itemsIterator.next();
664
			TagListing itemTagListing = tagListingRepository.selectByItemId(item.getId());
665
 
666
			if (itemTagListing == null) {
667
				itemsIterator.remove();
668
 
669
			}
670
 
671
			else if (!itemTagListing.isActive()) {
672
				itemsIterator.remove();
673
 
674
			}
675
		}
676
 
24917 tejbeer 677
		List<Order> inProcessselectedOrder = orderRepository.selectByItemIdOrderStatus(itemId,
678
				OrderStatus.SUBMITTED_FOR_PROCESSING);
679
		List<Integer> retailerIds = new ArrayList<>();
680
 
681
		for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessselectedOrder) {
682
			retailerIds.add(order.getRetailerId());
683
 
684
		}
685
 
686
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
687
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
24950 tejbeer 688
		LOGGER.info("item" + availableColorItems);
689
		model.addAttribute("item", availableColorItems);
24917 tejbeer 690
		model.addAttribute("inProcessselectedOrder", inProcessselectedOrder);
691
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
692
 
693
		return "notify-order-modal";
694
	}
695
 
696
	@RequestMapping(value = "/notifyOrder", method = RequestMethod.POST)
697
	public String NotifyOrder(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel, Model model)
698
			throws Exception {
699
 
700
		com.spice.profitmandi.dao.entity.transaction.NotifyItem notifyItem = null;
701
		List<Integer> orderIds = new ArrayList<>();
702
 
703
		NotifyColorChange notifytimestamp = new NotifyColorChange();
704
		notifytimestamp.setCreated(LocalDateTime.now());
705
		notifyColorChangeRepository.persist(notifytimestamp);
25066 tejbeer 706
		NotifyMessage notifyMessage = new NotifyMessage();
707
		notifyMessage.setNotifyId(notifytimestamp.getId());
708
		notifyMessage.setNotifyMessages(notifyOrderModel.getMessage());
709
        notifyMessageRepository.persist(notifyMessage);
24917 tejbeer 710
		for (NotifyItemIdModel itemid : notifyOrderModel.getItemIds()) {
711
 
712
			notifyItem = new com.spice.profitmandi.dao.entity.transaction.NotifyItem();
713
			notifyItem.setItemId(itemid.getItemId());
714
			notifyItem.setResponseTime(itemid.getResponseTime());
715
			notifyItem.setProcuredDate(itemid.getProcuredTime());
716
			notifyItem.setNotifyColorchangeId(notifytimestamp.getId());
717
			notifyItemRepository.persist(notifyItem);
718
			LOGGER.info("notifyItem" + notifyItem);
719
		}
720
		for (NotifyOrderIdModel st : notifyOrderModel.getOrderIds()) {
721
			List<NotifyOrder> existingOrder = notifyOrderRespository.selectByOrder(st.getOrderId());
24950 tejbeer 722
			if (!existingOrder.isEmpty()) {
24917 tejbeer 723
				LOGGER.info("existingOrder" + existingOrder);
24950 tejbeer 724
				for (NotifyOrder notifyOrder : existingOrder) {
725
					if (NotifyStatus.pending == notifyOrder.getStatus()) {
726
						notifyOrder.setStatus(NotifyStatus.rejected);
727
					}
24917 tejbeer 728
				}
729
			}
730
			NotifyOrder orderStatus = new NotifyOrder();
731
			orderStatus.setOrderId(st.getOrderId());
732
			orderStatus.setNotifyId(notifytimestamp.getId());
733
			orderStatus.setItemId(st.getOlditemId());
734
			Order id = orderRepository.selectById(st.getOrderId());
735
			orderStatus.setFofoId(id.getRetailerId());
736
			orderStatus.setStatus(NotifyStatus.pending);
737
			notifyOrderRespository.persist(orderStatus);
738
 
739
			LOGGER.info("itemStatus" + orderStatus);
740
			orderIds.add(st.getOrderId());
741
		}
742
 
743
		LOGGER.info("orderIds" + orderIds);
744
		List<Order> orders = orderRepository.selectByOrderIds(orderIds);
745
		for (Order order : orders) {
746
			LOGGER.info("order" + order.getId());
25066 tejbeer 747
 
748
			 NotifyMessage message = notifyMessageRepository.selectByNotifyId(notifytimestamp.getId());
24917 tejbeer 749
 
25066 tejbeer 750
			//LOGGER.info("message112" + message.getNotifyMessages());
751
 
24950 tejbeer 752
			NotificationCampaigns notification = new NotificationCampaigns();
753
			notification.setName("Notify Partner");
754
 
755
			notification.setTitle("Notify Partner");
756
 
25066 tejbeer 757
			notification.setMessage(message.getNotifyMessages());
25038 amit.gupta 758
			notification.setType("url");
24950 tejbeer 759
			notification.setUrl("http://app.profitmandi.com/pages/home/notifyOrder");
760
 
761
			notification.setSql("SELECT distinct d1.user_id from devices d1 left join devices d2 on"
762
					+ "(d1.imeinumber = d2.imeinumber and d1.created < d2.created) "
763
					+ " where d2.id is null and d1.user_id = "
764
					+ userAccountRepository.selectUserIdByRetailerId(order.getRetailerId()));
765
			notification.setExpiresat(LocalDateTime.now().plusDays(2).toEpochSecond(ZoneOffset.UTC) * 1000);
766
			notification.setStatus("active");
767
			notification.setSmsprocessed(0);
768
			notification.setNotification_processed(0);
769
			notification.setNotification_type("GENERAL_NOTIFICATION");
770
			mongoClient.persistNotificationCmpInfo(notification);
771
 
24917 tejbeer 772
		}
773
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
774
		return "response";
775
	}
776
 
777
	private void sendMailOfHtmlFomat(String email, String messageText, String subject)
778
			throws MessagingException, ProfitMandiBusinessException, IOException {
779
		MimeMessage message = mailSender.createMimeMessage();
780
		MimeMessageHelper helper = new MimeMessageHelper(message);
781
		helper.setSubject(subject);
782
		helper.setText(messageText, true);
783
		helper.setTo(email);
784
 
785
		InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smart Dukaan");
786
		helper.setFrom(senderAddress);
787
		mailSender.send(message);
788
	}
789
 
790
	/*
791
	 * private String getMessage(List<NotifyOrderModel> notifyOrderModels, Order
792
	 * order) throws ProfitMandiBusinessException {
793
	 * 
794
	 * StringBuilder sb = new StringBuilder(); sb.
795
	 * append("<html><body><p>Notify Partner</p><p>Which have order out stock following model:-</p>"
796
	 * + "<div>" + order.getLineItem().getItem().getItemDescription() +
797
	 * "</div> <div>choose the model from following:- </div><br/><table style='border:1px solid black ;padding: 5px';>"
798
	 * ); sb.append("<tbody>\n" + "	    				<tr>\n" +
799
	 * "	    					<th style='border:1px solid black;padding: 5px'>Color</th>\n"
800
	 * +
801
	 * "	    					<th style='border:1px solid black;padding: 5px'>Procured Time</th>\n"
802
	 * +
803
	 * "	    					<th style='border:1px solid black;padding: 5px'>Response Time</th>\n"
804
	 * + "	    				</tr>"); for (NotifyOrderModel notifyOrderModel :
805
	 * notifyOrderModels) { Item item =
806
	 * itemRepository.selectById(notifyOrderModel.getItemId()); sb.append("<tr>");
807
	 * sb.append("<td style='border:1px solid black;padding: 5px'>" +
808
	 * item.getColor() + "</td>");
809
	 * 
810
	 * sb.append("<td style='border:1px solid black;padding: 5px'>" +
811
	 * notifyOrderModel.getFormattedProcuredTime() + "</td>");
812
	 * 
813
	 * sb.append("<td style='border:1px solid black;padding: 5px'>" +
814
	 * notifyOrderModel.getFormattedResponseTime() + "</td>");
815
	 * 
816
	 * sb.append("</tr>"); }
817
	 * 
818
	 * sb.append("</tbody></table></body></html>"); return sb.toString(); }
819
	 */
820
 
821
	@RequestMapping(value = "/getAllNotifyOrder", method = RequestMethod.GET)
822
	public String getAllNotifyOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
24950 tejbeer 823
		List<NotifyOrder> notifyOrders = null;
24917 tejbeer 824
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 825
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24950 tejbeer 826
 
24917 tejbeer 827
		List<Integer> orderIds = new ArrayList<>();
24950 tejbeer 828
		if (!inProcessorder.isEmpty()) {
24917 tejbeer 829
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
24950 tejbeer 830
 
24917 tejbeer 831
				orderIds.add(order.getId());
832
 
24950 tejbeer 833
			}
834
			notifyOrders = notifyOrderRespository.selectByorderIds(orderIds);
835
			Set<Integer> oldItemIds = new HashSet<>();
836
			List<Integer> fofoIds = new ArrayList<>();
837
			List<Integer> notifyIds = new ArrayList<>();
838
			if (!notifyOrders.isEmpty()) {
839
				for (NotifyOrder notifyOrder : notifyOrders) {
840
					List<NotifyItem> notifyItems = notifyItemRepository.selectByNotifyId(notifyOrder.getNotifyId());
841
					Iterator<NotifyItem> notifyItemsIterator = notifyItems.iterator();
842
 
843
					while (notifyItemsIterator.hasNext()) {
844
						NotifyItem notifyItem = notifyItemsIterator.next();
845
						if (LocalDateTime.now().isAfter(notifyItem.getResponseTime())) {
846
							notifyItemsIterator.remove();
847
						}
24917 tejbeer 848
					}
24950 tejbeer 849
					if (notifyItems.size() == 0) {
850
						if (NotifyStatus.pending == notifyOrder.getStatus()) {
851
							notifyOrder.setStatus(NotifyStatus.rejected);
852
							LOGGER.info("existingOrder" + notifyOrder);
853
						}
24917 tejbeer 854
					}
24950 tejbeer 855
					oldItemIds.add(notifyOrder.getItemId());
856
					fofoIds.add(notifyOrder.getFofoId());
857
					notifyIds.add(notifyOrder.getNotifyId());
24917 tejbeer 858
				}
859
 
24950 tejbeer 860
				List<NotifyColorChange> notifyColorChanges = notifyColorChangeRepository.selectByNotifyId(notifyIds);
861
				Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = this
862
						.notifyOrdersToNotifyId(notifyColorChanges);
863
				Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
864
				Map<Integer, String> itemdescription = inventoryService.getItemIdDescriptionMap(oldItemIds);
24917 tejbeer 865
 
24950 tejbeer 866
				model.addAttribute("notifyOrders", notifyOrders);
867
				model.addAttribute("notifyIdNotifyColorMap", notifyIdNotifyColorMap);
868
				model.addAttribute("itemdescription", itemdescription);
869
				model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
24917 tejbeer 870
 
24950 tejbeer 871
			} else {
872
				model.addAttribute("notifyOrders", notifyOrders);
873
			}
24917 tejbeer 874
		} else {
875
			model.addAttribute("notifyOrders", notifyOrders);
24950 tejbeer 876
		}
24917 tejbeer 877
		return "notify_order";
878
	}
879
 
880
	private Map<Integer, NotifyColorChange> notifyOrdersToNotifyId(List<NotifyColorChange> notifyColorChanges) {
881
		Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = new HashMap<>();
882
		for (NotifyColorChange notifyColorChange : notifyColorChanges) {
883
			notifyIdNotifyColorMap.put(notifyColorChange.getId(), notifyColorChange);
884
		}
885
		return notifyIdNotifyColorMap;
886
	}
887
 
888
}