Subversion Repositories SmartDukaan

Rev

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