Subversion Repositories SmartDukaan

Rev

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