Subversion Repositories SmartDukaan

Rev

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