Subversion Repositories SmartDukaan

Rev

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