Subversion Repositories SmartDukaan

Rev

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