Subversion Repositories SmartDukaan

Rev

Rev 25371 | Rev 25383 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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