Subversion Repositories SmartDukaan

Rev

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