Subversion Repositories SmartDukaan

Rev

Rev 26482 | Rev 26495 | 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;
26482 tejbeer 5
import java.io.IOException;
22486 ashik.ali 6
import java.io.InputStream;
26279 amit.gupta 7
import java.io.InputStreamReader;
26482 tejbeer 8
import java.net.URISyntaxException;
23886 amit.gupta 9
import java.time.LocalDateTime;
26279 amit.gupta 10
import java.time.format.DateTimeFormatter;
24465 tejbeer 11
import java.util.ArrayList;
25873 tejbeer 12
import java.util.Arrays;
24917 tejbeer 13
import java.util.HashMap;
24465 tejbeer 14
import java.util.HashSet;
24917 tejbeer 15
import java.util.Iterator;
21577 ashik.ali 16
import java.util.List;
21654 ashik.ali 17
import java.util.Map;
24917 tejbeer 18
import java.util.Optional;
24465 tejbeer 19
import java.util.Set;
20
import java.util.stream.Collectors;
21577 ashik.ali 21
 
22
import javax.servlet.http.HttpServletRequest;
21987 kshitij.so 23
import javax.servlet.http.HttpServletResponse;
21577 ashik.ali 24
 
26279 amit.gupta 25
import org.apache.commons.csv.CSVFormat;
26
import org.apache.commons.csv.CSVParser;
27
import org.apache.commons.csv.CSVRecord;
26299 amit.gupta 28
import org.apache.commons.lang3.StringUtils;
23886 amit.gupta 29
import org.apache.logging.log4j.LogManager;
23568 govind 30
import org.apache.logging.log4j.Logger;
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;
21577 ashik.ali 42
import org.springframework.stereotype.Controller;
21654 ashik.ali 43
import org.springframework.transaction.annotation.Transactional;
21577 ashik.ali 44
import org.springframework.ui.Model;
26279 amit.gupta 45
import org.springframework.web.bind.annotation.PostMapping;
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;
26279 amit.gupta 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;
26482 tejbeer 54
import com.mongodb.MongoClient;
25698 tejbeer 55
import com.spice.profitmandi.common.enumuration.MessageType;
21577 ashik.ali 56
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
26493 tejbeer 57
import com.spice.profitmandi.common.model.CatalogIdModel;
21612 ashik.ali 58
import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;
24106 tejbeer 59
import com.spice.profitmandi.common.model.CustomRetailer;
22472 ashik.ali 60
import com.spice.profitmandi.common.model.InventoryItemAgingModel;
24106 tejbeer 61
import com.spice.profitmandi.common.model.ItemFeatureDataModel;
24917 tejbeer 62
import com.spice.profitmandi.common.model.NotifyItemIdModel;
63
import com.spice.profitmandi.common.model.NotifyOrderIdModel;
64
import com.spice.profitmandi.common.model.NotifyOrderModel;
25640 tejbeer 65
import com.spice.profitmandi.common.model.OrderCancellationModel;
25140 amit.gupta 66
import com.spice.profitmandi.common.model.PdfModel;
21577 ashik.ali 67
import com.spice.profitmandi.common.model.ProfitMandiConstants;
25851 amit.gupta 68
import com.spice.profitmandi.common.model.SendNotificationModel;
22472 ashik.ali 69
import com.spice.profitmandi.common.util.ExcelUtils;
25140 amit.gupta 70
import com.spice.profitmandi.common.util.PdfUtils;
24123 tejbeer 71
import com.spice.profitmandi.dao.entity.catalog.Item;
24950 tejbeer 72
import com.spice.profitmandi.dao.entity.catalog.TagListing;
24106 tejbeer 73
import com.spice.profitmandi.dao.entity.catalog.TagRanking;
25140 amit.gupta 74
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
24917 tejbeer 75
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24465 tejbeer 76
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
77
import com.spice.profitmandi.dao.entity.fofo.LiveDemoSerialNumber;
26031 tejbeer 78
import com.spice.profitmandi.dao.entity.transaction.NotifyCancel;
24917 tejbeer 79
import com.spice.profitmandi.dao.entity.transaction.NotifyColorChange;
25066 tejbeer 80
import com.spice.profitmandi.dao.entity.transaction.NotifyMessage;
24917 tejbeer 81
import com.spice.profitmandi.dao.entity.transaction.NotifyOrder;
24739 tejbeer 82
import com.spice.profitmandi.dao.entity.transaction.Order;
26482 tejbeer 83
import com.spice.profitmandi.dao.model.ContentPojo;
24123 tejbeer 84
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
24950 tejbeer 85
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
24106 tejbeer 86
import com.spice.profitmandi.dao.repository.catalog.TagRankingRepository;
24465 tejbeer 87
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
26482 tejbeer 88
import com.spice.profitmandi.dao.repository.dtr.Mongo;
24917 tejbeer 89
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24203 amit.gupta 90
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
24465 tejbeer 91
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
92
import com.spice.profitmandi.dao.repository.fofo.LiveDemoBillingRespository;
24917 tejbeer 93
import com.spice.profitmandi.dao.repository.inventory.NotifyStatus;
26031 tejbeer 94
import com.spice.profitmandi.dao.repository.transaction.NotifyCancelOrderRepository;
24917 tejbeer 95
import com.spice.profitmandi.dao.repository.transaction.NotifyColorChangeRepository;
96
import com.spice.profitmandi.dao.repository.transaction.NotifyItemRepository;
25066 tejbeer 97
import com.spice.profitmandi.dao.repository.transaction.NotifyMessageRepository;
24917 tejbeer 98
import com.spice.profitmandi.dao.repository.transaction.NotifyOrderRespository;
24658 tejbeer 99
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
25851 amit.gupta 100
import com.spice.profitmandi.service.NotificationService;
22927 ashik.ali 101
import com.spice.profitmandi.service.inventory.InventoryService;
24465 tejbeer 102
import com.spice.profitmandi.service.user.RetailerService;
22139 amit.gupta 103
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 104
import com.spice.profitmandi.web.util.CookiesProcessor;
24106 tejbeer 105
import com.spice.profitmandi.web.util.MVCResponseSender;
21577 ashik.ali 106
 
24658 tejbeer 107
import in.shop2020.model.v1.order.OrderStatus;
24739 tejbeer 108
import in.shop2020.model.v1.order.TransactionServiceException;
24658 tejbeer 109
 
21577 ashik.ali 110
@Controller
24123 tejbeer 111
@Transactional(rollbackFor = Throwable.class)
21577 ashik.ali 112
public class InventoryController {
21987 kshitij.so 113
 
23568 govind 114
	private static final Logger LOGGER = LogManager.getLogger(InventoryController.class);
26482 tejbeer 115
 
26292 amit.gupta 116
	private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy H:m:s");
21987 kshitij.so 117
 
21577 ashik.ali 118
	@Autowired
22927 ashik.ali 119
	private CookiesProcessor cookiesProcessor;
24123 tejbeer 120
 
22354 ashik.ali 121
	@Autowired
23784 ashik.ali 122
	@Qualifier("fofoInventoryService")
22927 ashik.ali 123
	private InventoryService inventoryService;
24465 tejbeer 124
 
24203 amit.gupta 125
	@Autowired
24950 tejbeer 126
	TagListingRepository tagListingRepository;
127
 
128
	@Autowired
24203 amit.gupta 129
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
24123 tejbeer 130
 
24106 tejbeer 131
	@Autowired
132
	private TagRankingRepository tagRankingRepository;
24123 tejbeer 133
 
24106 tejbeer 134
	@Autowired
24465 tejbeer 135
	private InventoryItemRepository inventoryItemRepository;
136
 
137
	@Autowired
138
	private LiveDemoBillingRespository liveDemoBillingRespository;
139
 
140
	@Autowired
24123 tejbeer 141
	private ItemRepository itemRepository;
142
 
143
	@Autowired
24465 tejbeer 144
	private RetailerService retailerService;
145
 
146
	@Autowired
24106 tejbeer 147
	private MVCResponseSender mvcResponseSender;
24123 tejbeer 148
 
24465 tejbeer 149
	@Autowired
150
	FofoStoreRepository fofoStoreRepository;
151
 
24658 tejbeer 152
	@Autowired
153
	private OrderRepository orderRepository;
154
 
24739 tejbeer 155
	@Autowired
24917 tejbeer 156
	private NotifyItemRepository notifyItemRepository;
24739 tejbeer 157
 
24917 tejbeer 158
	@Autowired
159
	private NotifyColorChangeRepository notifyColorChangeRepository;
160
 
161
	@Autowired
162
	private NotifyOrderRespository notifyOrderRespository;
163
 
164
	@Autowired
25851 amit.gupta 165
	private NotificationService notificationService;
166
 
167
	@Autowired
25066 tejbeer 168
	private NotifyMessageRepository notifyMessageRepository;
169
 
170
	@Autowired
24917 tejbeer 171
	private UserAccountRepository userAccountRepository;
172
 
21987 kshitij.so 173
	@Value("${saholic.api.host}")
174
	private String host;
23786 amit.gupta 175
 
21987 kshitij.so 176
	@Value("${saholic.api.port}")
177
	private int port;
23786 amit.gupta 178
 
21987 kshitij.so 179
	@Value("${saholic.api.webapp}")
180
	private String webapp;
181
 
24917 tejbeer 182
	@Autowired
183
	JavaMailSender mailSender;
184
 
26031 tejbeer 185
	@Autowired
186
	private NotifyCancelOrderRepository notifyCancelOrderRepository;
187
 
26482 tejbeer 188
	@Autowired
189
	private Mongo mongoClient;
190
 
23786 amit.gupta 191
	@RequestMapping(value = "/getCurrentInventorySnapshot")
192
	public String getCurrentAvailability(HttpServletRequest request,
193
			@RequestParam(name = "offset", defaultValue = "0") int offset,
194
			@RequestParam(name = "limit", defaultValue = "10") int limit,
24123 tejbeer 195
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
23786 amit.gupta 196
			throws ProfitMandiBusinessException {
22927 ashik.ali 197
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 198
		Map<String, Object> map = inventoryService.getCurrentInventorySnapshot(loginDetails.getFofoId(), offset, limit,
199
				searchTerm);
22927 ashik.ali 200
		model.addAllAttributes(map);
21987 kshitij.so 201
		return "inventory-snapshot";
21612 ashik.ali 202
	}
21987 kshitij.so 203
 
23786 amit.gupta 204
	@RequestMapping(value = "/getBadInventorySnapshot")
205
	public String getBadAvailability(HttpServletRequest request,
206
			@RequestParam(name = "offset", defaultValue = "0") int offset,
207
			@RequestParam(name = "limit", defaultValue = "10") int limit,
208
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
209
			throws ProfitMandiBusinessException {
24123 tejbeer 210
		if (searchTerm == null) {
211
			searchTerm = "";
24052 amit.gupta 212
		}
22927 ashik.ali 213
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 214
		Map<String, Object> map = inventoryService.getBadInventorySnapshot(loginDetails.getFofoId(), offset, limit,
215
				searchTerm);
22927 ashik.ali 216
		model.addAllAttributes(map);
21987 kshitij.so 217
		return "bad-inventory-snapshot";
218
	}
219
 
23786 amit.gupta 220
	@RequestMapping(value = "/getPaginatedCurrentInventorySnapshot")
221
	public String getPaginatedCurrentInventorySnapshot(HttpServletRequest request,
222
			@RequestParam(name = "offset", defaultValue = "0") int offset,
223
			@RequestParam(name = "limit", defaultValue = "10") int limit,
224
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
225
			throws ProfitMandiBusinessException {
24123 tejbeer 226
		if (searchTerm == null) {
227
			searchTerm = "";
24052 amit.gupta 228
		}
22927 ashik.ali 229
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 230
		Map<String, Object> map = inventoryService.getPaginatedCurrentInventorySnapshot(loginDetails.getFofoId(),
231
				offset, limit, searchTerm);
22927 ashik.ali 232
		model.addAllAttributes(map);
21987 kshitij.so 233
		return "inventory-snapshot-paginated";
234
	}
23786 amit.gupta 235
 
236
	@RequestMapping(value = "/getCatalog")
237
	public String getCatalog(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
238
			@RequestParam(name = "limit", defaultValue = "10") int limit,
239
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
240
			throws ProfitMandiBusinessException {
22927 ashik.ali 241
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 242
		if (searchTerm == null) {
243
			searchTerm = "";
24052 amit.gupta 244
		}
24739 tejbeer 245
 
22927 ashik.ali 246
		Map<String, Object> map = inventoryService.getCatalog(loginDetails.getFofoId(), offset, limit, searchTerm);
247
		model.addAllAttributes(map);
24203 amit.gupta 248
		model.addAttribute("hasGift", hasGift(loginDetails.getFofoId()));
24658 tejbeer 249
 
21987 kshitij.so 250
		return "catalog";
251
	}
23786 amit.gupta 252
 
24465 tejbeer 253
	// This method is currently hardcoded to faciliate watches sold as gift.
24203 amit.gupta 254
	private boolean hasGift(int fofoId) {
255
		try {
24465 tejbeer 256
			return currentInventorySnapshotRepository.selectByItemIdAndFofoId(ProfitMandiConstants.GIFT_ID, fofoId)
257
					.getAvailability() > 0;
24203 amit.gupta 258
		} catch (ProfitMandiBusinessException e) {
259
			return false;
260
		}
261
	}
262
 
23786 amit.gupta 263
	@RequestMapping(value = "/getPaginatedCatalog")
264
	public String getCatalogPaginated(HttpServletRequest request,
265
			@RequestParam(name = "offset", defaultValue = "0") int offset,
266
			@RequestParam(name = "limit", defaultValue = "10") int limit,
267
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
268
			throws ProfitMandiBusinessException {
22927 ashik.ali 269
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 270
		if (searchTerm == null) {
271
			searchTerm = "";
24052 amit.gupta 272
		}
23786 amit.gupta 273
		Map<String, Object> map = inventoryService.getPaginatedCatalog(loginDetails.getFofoId(), offset, limit,
274
				searchTerm);
22927 ashik.ali 275
		model.addAllAttributes(map);
21987 kshitij.so 276
		return "catalog-paginated";
277
	}
278
 
23786 amit.gupta 279
	@RequestMapping(value = "/checkItemAvailability")
280
	public String getItemAvailability(HttpServletRequest request,
281
			@RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, Model model)
282
			throws ProfitMandiBusinessException {
22927 ashik.ali 283
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 284
		CustomCurrentInventorySnapshot customCurrentInventorySnapshot = inventoryService.checkItemAvailability(itemId,
285
				loginDetails.getFofoId());
25812 amit.gupta 286
		/*
287
		 * customCurrentInventorySnapshot
288
		 * .setIconUrl(Utils.getIconUrl(customCurrentInventorySnapshot.getCatalogItemId(
289
		 * ), host, port, webapp));
290
		 */
22927 ashik.ali 291
		model.addAttribute("currentInventorySnapshot", new Gson().toJson(customCurrentInventorySnapshot));
292
		return "current-item-availability";
23786 amit.gupta 293
 
21577 ashik.ali 294
	}
23786 amit.gupta 295
 
23192 ashik.ali 296
	@RequestMapping(value = "/cart", method = RequestMethod.POST)
23786 amit.gupta 297
	public String addToCart(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
298
			throws ProfitMandiBusinessException {
22927 ashik.ali 299
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 300
 
22927 ashik.ali 301
		Map<String, Object> map = inventoryService.addToCart(cartData, loginDetails.getFofoId());
302
		model.addAllAttributes(map);
21987 kshitij.so 303
		return "cart";
304
	}
23786 amit.gupta 305
 
23192 ashik.ali 306
	@RequestMapping(value = "/validate-cart", method = RequestMethod.POST)
23786 amit.gupta 307
	public String validateCart(HttpServletRequest request, HttpServletResponse response,
308
			@RequestParam(name = "cartData") String cartData, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 309
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 310
 
22927 ashik.ali 311
		Map<String, Object> map = inventoryService.validateCart(cartData, loginDetails.getFofoId());
312
		model.addAllAttributes(map);
21987 kshitij.so 313
		return "validate-cart";
314
	}
315
 
23786 amit.gupta 316
	@RequestMapping(value = "/grnHistory")
24123 tejbeer 317
	public String getGrnHistory(HttpServletRequest request, @RequestParam(required = false) LocalDateTime startTime,
23886 amit.gupta 318
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 319
			@RequestParam(name = "offset", defaultValue = "0") int offset,
320
			@RequestParam(name = "limit", defaultValue = "10") int limit,
321
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
322
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
323
			throws ProfitMandiBusinessException {
22927 ashik.ali 324
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 325
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime, endTime, offset,
326
				limit, purchaseReference, searchType);
22927 ashik.ali 327
		model.addAllAttributes(map);
21987 kshitij.so 328
		return "grn-history";
21636 ashik.ali 329
	}
21987 kshitij.so 330
 
25140 amit.gupta 331
	@RequestMapping(value = "/downloadPurchaseInvoices")
332
	public ResponseEntity<?> downloadPurchaseInvoices(HttpServletRequest request,
333
			@RequestParam(required = false) LocalDateTime startTime,
334
			@RequestParam(required = false) LocalDateTime endTime,
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 {
340
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
341
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime, endTime, offset,
342
				limit, purchaseReference, searchType);
343
 
344
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
345
 
346
		if (fofoOrders.size() == 0) {
347
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
348
		}
349
 
350
		final HttpHeaders headers = new HttpHeaders();
351
		headers.setContentType(MediaType.APPLICATION_PDF);
352
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
353
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
354
		List<PdfModel> pdfModels = new ArrayList<>();
25371 tejbeer 355
		/*
356
		 * for (FofoOrder fofoOrder : fofoOrders) { try {
357
		 * pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId())); } catch
358
		 * (Exception e) {
359
		 * LOGGER.info("could not create invoice for {}, invoice number {}",
360
		 * fofoOrder.getId(), fofoOrder.getInvoiceNumber()); } }
361
		 */
25140 amit.gupta 362
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
363
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
364
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
365
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
366
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
367
	}
368
 
23786 amit.gupta 369
	@RequestMapping(value = "/getPaginatedGrnHistory")
370
	public String getPaginatedGrnHistory(HttpServletRequest request,
23886 amit.gupta 371
			@RequestParam(required = false) LocalDateTime startTime,
372
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 373
			@RequestParam(name = "offset", defaultValue = "0") int offset,
374
			@RequestParam(name = "limit", defaultValue = "10") int limit,
375
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
376
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
377
			throws ProfitMandiBusinessException {
22927 ashik.ali 378
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 379
		Map<String, Object> map = inventoryService.getPaginatedGrnHistory(loginDetails.getFofoId(), startTime, endTime,
380
				offset, limit);
22927 ashik.ali 381
		model.addAllAttributes(map);
21987 kshitij.so 382
		return "grn-history-paginated";
383
	}
384
 
23786 amit.gupta 385
	@RequestMapping(value = "/grnHistoryDetailByPurchaseId")
386
	public String grnHistoryByPurchaseId(HttpServletRequest request,
387
			@RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model)
388
			throws ProfitMandiBusinessException {
22927 ashik.ali 389
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 390
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseId, host, port,
391
				webapp);
22927 ashik.ali 392
		model.addAllAttributes(map);
21987 kshitij.so 393
		return "grn-details";
21636 ashik.ali 394
	}
21987 kshitij.so 395
 
23786 amit.gupta 396
	@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")
397
	public String grnHistoryByPurchaseReference(HttpServletRequest request,
398
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model)
399
			throws ProfitMandiBusinessException {
22927 ashik.ali 400
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 401
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseReference,
402
				host, port, webapp);
22927 ashik.ali 403
		model.addAllAttributes(map);
21987 kshitij.so 404
		return "grn-details";
21654 ashik.ali 405
	}
23786 amit.gupta 406
 
26248 amit.gupta 407
	@RequestMapping(value = "/activatedImeis")
408
	public String activatedImeis(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
409
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
410
 
411
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByActivatedNotSold(loginDetails.getFofoId());
412
		inventoryItems.stream().forEach(x -> {
413
			try {
414
				x.setItem(itemRepository.selectById(x.getItemId()));
415
			} catch (Exception e) {
416
				e.printStackTrace();
417
			}
418
		});
419
		model.addAttribute("inventoryItems", inventoryItems);
420
		return "activated-imeis";
421
	}
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
 
26279 amit.gupta 487
	@PostMapping(value = "/imei/upload")
26294 amit.gupta 488
	public String uploadContent(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
26279 amit.gupta 489
			throws Exception {
26482 tejbeer 490
		/*
491
		 * if(brand==null) { throw new
492
		 * ProfitMandiBusinessException("Please select brand", "Brand empty",
493
		 * "Brand required"); }
494
		 */
26279 amit.gupta 495
		List<CSVRecord> masterDataList = readFile(file);
496
 
26482 tejbeer 497
		Map<String, LocalDateTime> imeisActivationMap = masterDataList.stream()
498
				.collect(Collectors.toMap(x -> x.get(0).trim(), x -> {
499
					if (!StringUtils.isEmpty(x.get(1).trim())) {
500
						return LocalDateTime.parse((String) (x.get(1).trim()), formatter);
26299 amit.gupta 501
					} else {
502
						return null;
503
					}
504
				}));
505
		inventoryService.addActivatedImeis(imeisActivationMap);
506
		model.addAttribute("response", true);
26294 amit.gupta 507
		return "response";
26279 amit.gupta 508
	}
509
 
510
	private List<CSVRecord> readFile(MultipartFile file) throws Exception {
511
		List<CSVRecord> records = null;
512
		try (CSVParser parser = new CSVParser(new InputStreamReader(file.getInputStream()), CSVFormat.DEFAULT)) {
513
			records = parser.getRecords();
514
			if (records.size() < 2) {
515
				throw new ProfitMandiBusinessException("Uploaded File", "", "No records Found");
516
			}
517
			records.remove(0);
26482 tejbeer 518
		} catch (Exception e) {
26279 amit.gupta 519
			throw new ProfitMandiBusinessException("Parsing Failed", "parse failed", "file parse failed");
520
		}
521
		return records;
522
	}
523
 
24106 tejbeer 524
	@RequestMapping(value = "/itemfeature", method = RequestMethod.POST)
24123 tejbeer 525
	public String Itemfeature(HttpServletRequest request, @RequestBody ItemFeatureDataModel itemFeatureDatatModel,
526
			Model model) throws Exception {
25371 tejbeer 527
		TagRanking tagRanking = tagRankingRepository.selectBycatalogItemId(itemFeatureDatatModel.getCatalogItemId());
528
		LOGGER.info("tagRanking" + tagRanking);
529
		if (tagRanking == null) {
530
			tagRanking = new TagRanking();
531
			tagRanking.setCatalogItemId(itemFeatureDatatModel.getCatalogItemId());
25363 tejbeer 532
		}
24106 tejbeer 533
		tagRanking.setFeature(itemFeatureDatatModel.getFeature());
25363 tejbeer 534
		tagRanking.setRankPoints(itemFeatureDatatModel.getRankPoints());
25371 tejbeer 535
 
24123 tejbeer 536
		tagRankingRepository.persist(tagRanking);
24106 tejbeer 537
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
538
		return "response";
539
	}
540
 
24798 tejbeer 541
	@RequestMapping(value = "/removeFeature", method = RequestMethod.DELETE)
542
	public String removeTagRankingEnteries(HttpServletRequest request,
543
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
24917 tejbeer 544
 
24798 tejbeer 545
		tagRankingRepository.deleteById(id);
546
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
547
		return "response";
548
	}
549
 
24465 tejbeer 550
	@RequestMapping(value = "/getDemolistbyfofoId", method = RequestMethod.GET)
551
	public String DemoListbyFofoId(HttpServletRequest request,
552
			@RequestParam(required = false, defaultValue = "0") int fofoId, Model model) throws Exception {
553
 
554
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
555
				.collect(Collectors.toList());
556
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
557
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
558
		List<String> serailNumberList = liveDemoBillingRespository.selectAllSerialNumber();
559
		LOGGER.info("serailNumberList" + serailNumberList);
560
		List<InventoryItem> inventoryItem = null;
561
		List<InventoryItem> inventoryItem1 = new ArrayList<>();
562
		if (fofoId > 0) {
563
			List<Item> items = itemRepository.selectAllByBrand("Live Demo");
564
			Set<Integer> itemIds = new HashSet<>();
565
			for (Item Item : items) {
566
				itemIds.add(Item.getId());
567
			}
568
			inventoryItem = inventoryItemRepository.selectByFofoIdItemIds(fofoId, itemIds);
569
 
570
			Set<String> serial = new HashSet<>();
571
			for (InventoryItem invItem : inventoryItem) {
24658 tejbeer 572
				if (!serailNumberList.contains(invItem.getSerialNumber())) {
24465 tejbeer 573
					inventoryItem1.add(invItem);
25371 tejbeer 574
 
24465 tejbeer 575
				}
576
 
577
			}
578
 
579
			LOGGER.info("inventoyItem" + inventoryItem1);
580
			model.addAttribute("customRetailers", customRetailers);
25371 tejbeer 581
 
24465 tejbeer 582
			model.addAttribute("liveDemo", inventoryItem1);
583
			CustomRetailer fofoIdsAndRetailerName = retailerService.getFofoRetailer(fofoId);
584
 
585
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
586
 
587
		}
588
 
589
		else {
590
			model.addAttribute("customRetailers", customRetailers);
591
			model.addAttribute("liveDemo", inventoryItem1);
592
		}
593
 
594
		return "live_demo_billing";
595
 
596
	}
597
 
598
	@RequestMapping(value = "/enableliveDemoSerailNumber", method = RequestMethod.POST)
599
	public String EnableliveDemoSerailNumber(HttpServletRequest request, @RequestParam String serial_number,
600
			Model model) throws Exception {
601
 
602
		LiveDemoSerialNumber liveDemoSerialNumber = new LiveDemoSerialNumber();
603
		liveDemoSerialNumber.setSerialNumber(serial_number);
604
 
605
		liveDemoBillingRespository.persist(liveDemoSerialNumber);
606
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
607
		return "response";
608
	}
609
 
24739 tejbeer 610
	@RequestMapping(value = "/getInProcessOrder", method = RequestMethod.GET)
611
	public String getInProcessOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
612
 
613
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 614
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24917 tejbeer 615
		List<Integer> retailerIds = new ArrayList<>();
616
		List<Integer> orderIds = new ArrayList<>();
617
		if (!inProcessorder.isEmpty()) {
618
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
619
				retailerIds.add(order.getRetailerId());
620
				orderIds.add(order.getId());
24739 tejbeer 621
 
24917 tejbeer 622
			}
24739 tejbeer 623
 
25640 tejbeer 624
			List<NotifyOrder> notify = notifyOrderRespository.selectByorderIds(orderIds);
625
			for (NotifyOrder notifyOrder : notify) {
25449 tejbeer 626
 
25640 tejbeer 627
				Order orderdetail = orderRepository.selectById(notifyOrder.getOrderId());
25449 tejbeer 628
				if (!orderdetail.getStatus().equals(OrderStatus.SUBMITTED_FOR_PROCESSING)) {
25640 tejbeer 629
					notifyOrder.setStatus(NotifyStatus.rejected);
25449 tejbeer 630
				}
25640 tejbeer 631
			}
24950 tejbeer 632
 
24917 tejbeer 633
			Map<Integer, Optional<NotifyOrder>> notifyOrders = notifyOrderRespository.selectByorderIds(orderIds)
634
					.stream().collect(Collectors.groupingBy(NotifyOrder::getOrderId,
635
							Collectors.maxBy((x1, x2) -> x1.getId() - x2.getId())));
24950 tejbeer 636
 
26110 tejbeer 637
			Map<Integer, NotifyCancel> notifyCancelOrders = notifyCancelOrderRepository.selectByOrderIds(orderIds)
638
					.stream().collect(Collectors.toMap(x -> x.getOrderId(), x -> x));
24917 tejbeer 639
			Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
640
					.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
641
			List<com.spice.profitmandi.dao.entity.transaction.Order> pendingPaymentorder = orderRepository
642
					.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusDays(30), LocalDateTime.now(),
643
							OrderStatus.PAYMENT_PENDING);
644
			List<com.spice.profitmandi.dao.entity.transaction.Order> failedPaymentorder = orderRepository
645
					.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusDays(30), LocalDateTime.now(),
646
							OrderStatus.PAYMENT_FAILED);
647
			pendingPaymentorder.addAll(failedPaymentorder);
648
 
649
			model.addAttribute("inProcessorder", inProcessorder);
650
			model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
651
			model.addAttribute("pendingPaymentorder", pendingPaymentorder);
652
			model.addAttribute("latestNotifyOrders", notifyOrders);
26110 tejbeer 653
			model.addAttribute("notifyCancelOrders", notifyCancelOrders);
24917 tejbeer 654
		} else {
655
			model.addAttribute("inProcessorder", inProcessorder);
656
		}
24739 tejbeer 657
		return "review_order";
658
	}
659
 
660
	@RequestMapping(value = "/getKeepInTabOrder", method = RequestMethod.GET)
661
	public String getKeepInTabOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
662
 
663
		List<com.spice.profitmandi.dao.entity.transaction.Order> keepatab = orderRepository
664
				.selectAllOrder(OrderStatus.KEEP_A_TAB);
665
 
666
		model.addAttribute("keepatab", keepatab);
667
 
668
		return "keep-a-tab";
669
	}
670
 
671
	@RequestMapping(value = "/closeOrder", method = RequestMethod.POST)
672
	public String closeOrder(HttpServletRequest request, @RequestParam int orderId, Model model) throws Exception {
24798 tejbeer 673
 
24739 tejbeer 674
		Order order = orderRepository.selectById(orderId);
24798 tejbeer 675
		if (order != null) {
24739 tejbeer 676
			order.setStatus(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
24798 tejbeer 677
 
24739 tejbeer 678
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
679
 
24798 tejbeer 680
		} else {
24739 tejbeer 681
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
682
 
683
		}
684
		return "response";
24658 tejbeer 685
	}
686
 
25640 tejbeer 687
	@RequestMapping(value = "/getcancelOrderItems", method = RequestMethod.GET)
688
	public String getcancelOrderItems(HttpServletRequest request, @RequestParam int itemId, Model model)
689
			throws Exception {
690
 
691
		List<Order> inProcessselectedOrder = orderRepository.selectByItemIdOrderStatus(itemId,
692
				OrderStatus.SUBMITTED_FOR_PROCESSING);
693
 
694
		List<Integer> retailerIds = new ArrayList<>();
695
		for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessselectedOrder) {
696
			retailerIds.add(order.getRetailerId());
697
 
698
		}
699
 
700
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
701
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
702
 
703
		model.addAttribute("inProcessCancelOrder", inProcessselectedOrder);
704
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
705
 
706
		return "cancel-order-modal";
707
	}
708
 
24739 tejbeer 709
	@RequestMapping(value = "/cancelOrder", method = RequestMethod.POST)
25640 tejbeer 710
	public String cancelOrder(HttpServletRequest request, @RequestBody OrderCancellationModel orderCancellationModel,
711
			Model model) throws Exception {
24739 tejbeer 712
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
25640 tejbeer 713
		LOGGER.info("orderId" + orderCancellationModel.getOrderIds());
714
 
24739 tejbeer 715
		try {
25699 tejbeer 716
			// List<Order> orders =
717
			// orderRepository.selectByOrderIds(orderCancellationModel.getOrderIds());
25640 tejbeer 718
 
25699 tejbeer 719
			List<Order> orders = orderRepository.selectByOrderIdsOrdersStatus(orderCancellationModel.getOrderIds(),
720
					OrderStatus.SUBMITTED_FOR_PROCESSING);
721
			if (!orders.isEmpty()) {
722
				for (Order order : orders) {
25640 tejbeer 723
 
25699 tejbeer 724
					orderRepository.refundOrder(order.getId(), loginDetails.getEmailId(),
725
							orderCancellationModel.getReason(), OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
726
					List<NotifyOrder> notifyOrders = notifyOrderRespository.selectByOrder(order.getId());
727
					for (NotifyOrder notifyOrder : notifyOrders) {
728
						if (notifyOrder.getStatus() == NotifyStatus.pending) {
729
							notifyOrder.setStatus(NotifyStatus.rejected);
730
						}
25449 tejbeer 731
					}
25699 tejbeer 732
					sendCancellationNotificationToPartner(order, orderCancellationModel.getReason());
733
					model.addAttribute("response", mvcResponseSender.createResponseString(true));
734
 
25640 tejbeer 735
				}
736
			}
24739 tejbeer 737
		} catch (TransactionServiceException | TException e) {
738
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
739
 
740
		}
25640 tejbeer 741
 
24739 tejbeer 742
		return "response";
743
	}
744
 
25039 amit.gupta 745
	private void sendCancellationNotificationToPartner(Order order, String reason) throws Exception {
746
		Item item = itemRepository.selectById(order.getLineItem().getItemId());
25383 tejbeer 747
 
25851 amit.gupta 748
		SendNotificationModel sendNotificationModel = new SendNotificationModel();
749
		sendNotificationModel.setCampaignName("Order Cancellation");
750
		sendNotificationModel.setTitle(String.format("Order %s %d(Pcs) cancelled", item.getItemDescription(),
25140 amit.gupta 751
				order.getLineItem().getQuantity()));
25851 amit.gupta 752
		sendNotificationModel.setType("url");
753
		sendNotificationModel.setMessage(reason);
26482 tejbeer 754
		sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/orderDetails");
25851 amit.gupta 755
		sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
756
		sendNotificationModel.setMessageType(MessageType.notification);
25857 tejbeer 757
		int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
25873 tejbeer 758
		sendNotificationModel.setUserIds(Arrays.asList(userId));
25851 amit.gupta 759
		notificationService.sendNotification(sendNotificationModel);
25140 amit.gupta 760
 
25039 amit.gupta 761
	}
762
 
24917 tejbeer 763
	@RequestMapping(value = "/getNotifyItemColor", method = RequestMethod.GET)
764
	public String getNotifyItemColor(HttpServletRequest request, @RequestParam int catalogItemId,
765
			@RequestParam int itemId, Model model) throws ProfitMandiBusinessException {
766
 
24950 tejbeer 767
		List<Item> availableColorItems = itemRepository.selectAllByCatalogItemId(catalogItemId);
768
		Iterator<Item> itemsIterator = availableColorItems.iterator();
24917 tejbeer 769
 
24950 tejbeer 770
		while (itemsIterator.hasNext()) {
771
			Item item = itemsIterator.next();
772
			TagListing itemTagListing = tagListingRepository.selectByItemId(item.getId());
773
 
774
			if (itemTagListing == null) {
775
				itemsIterator.remove();
776
 
777
			}
778
 
779
			else if (!itemTagListing.isActive()) {
780
				itemsIterator.remove();
781
 
782
			}
783
		}
784
 
24917 tejbeer 785
		List<Order> inProcessselectedOrder = orderRepository.selectByItemIdOrderStatus(itemId,
786
				OrderStatus.SUBMITTED_FOR_PROCESSING);
787
		List<Integer> retailerIds = new ArrayList<>();
788
 
789
		for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessselectedOrder) {
790
			retailerIds.add(order.getRetailerId());
791
 
792
		}
793
 
794
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
795
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
24950 tejbeer 796
		LOGGER.info("item" + availableColorItems);
797
		model.addAttribute("item", availableColorItems);
24917 tejbeer 798
		model.addAttribute("inProcessselectedOrder", inProcessselectedOrder);
799
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
800
 
801
		return "notify-order-modal";
802
	}
803
 
804
	@RequestMapping(value = "/notifyOrder", method = RequestMethod.POST)
805
	public String NotifyOrder(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel, Model model)
806
			throws Exception {
807
 
808
		com.spice.profitmandi.dao.entity.transaction.NotifyItem notifyItem = null;
809
		List<Integer> orderIds = new ArrayList<>();
810
 
811
		NotifyColorChange notifytimestamp = new NotifyColorChange();
812
		notifytimestamp.setCreated(LocalDateTime.now());
813
		notifyColorChangeRepository.persist(notifytimestamp);
25066 tejbeer 814
		NotifyMessage notifyMessage = new NotifyMessage();
815
		notifyMessage.setNotifyId(notifytimestamp.getId());
816
		notifyMessage.setNotifyMessages(notifyOrderModel.getMessage());
25140 amit.gupta 817
		notifyMessageRepository.persist(notifyMessage);
24917 tejbeer 818
		for (NotifyItemIdModel itemid : notifyOrderModel.getItemIds()) {
819
 
820
			notifyItem = new com.spice.profitmandi.dao.entity.transaction.NotifyItem();
821
			notifyItem.setItemId(itemid.getItemId());
822
			notifyItem.setResponseTime(itemid.getResponseTime());
823
			notifyItem.setProcuredDate(itemid.getProcuredTime());
824
			notifyItem.setNotifyColorchangeId(notifytimestamp.getId());
825
			notifyItemRepository.persist(notifyItem);
826
			LOGGER.info("notifyItem" + notifyItem);
827
		}
828
		for (NotifyOrderIdModel st : notifyOrderModel.getOrderIds()) {
829
			List<NotifyOrder> existingOrder = notifyOrderRespository.selectByOrder(st.getOrderId());
24950 tejbeer 830
			if (!existingOrder.isEmpty()) {
24917 tejbeer 831
				LOGGER.info("existingOrder" + existingOrder);
24950 tejbeer 832
				for (NotifyOrder notifyOrder : existingOrder) {
833
					if (NotifyStatus.pending == notifyOrder.getStatus()) {
834
						notifyOrder.setStatus(NotifyStatus.rejected);
26105 tejbeer 835
						notifyOrder.setUpdateTimestamp(LocalDateTime.now());
24950 tejbeer 836
					}
24917 tejbeer 837
				}
838
			}
839
			NotifyOrder orderStatus = new NotifyOrder();
840
			orderStatus.setOrderId(st.getOrderId());
841
			orderStatus.setNotifyId(notifytimestamp.getId());
842
			orderStatus.setItemId(st.getOlditemId());
843
			Order id = orderRepository.selectById(st.getOrderId());
844
			orderStatus.setFofoId(id.getRetailerId());
845
			orderStatus.setStatus(NotifyStatus.pending);
846
			notifyOrderRespository.persist(orderStatus);
847
 
848
			LOGGER.info("itemStatus" + orderStatus);
849
			orderIds.add(st.getOrderId());
850
		}
851
 
852
		LOGGER.info("orderIds" + orderIds);
853
		List<Order> orders = orderRepository.selectByOrderIds(orderIds);
854
		for (Order order : orders) {
855
			LOGGER.info("order" + order.getId());
856
 
25140 amit.gupta 857
			NotifyMessage message = notifyMessageRepository.selectByNotifyId(notifytimestamp.getId());
858
 
25851 amit.gupta 859
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
860
			sendNotificationModel.setCampaignName("Notify Partner");
861
			sendNotificationModel.setMessage(message.getNotifyMessages());
862
			sendNotificationModel.setType("url");
863
			sendNotificationModel.setTitle("Alert");
864
			sendNotificationModel.setUrl("http://app.smartdukaan.com/pages/home/notifyOrder");
865
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
866
			sendNotificationModel.setMessageType(MessageType.notification);
25857 tejbeer 867
			int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
25873 tejbeer 868
 
869
			sendNotificationModel.setUserIds(Arrays.asList(userId));
25851 amit.gupta 870
			notificationService.sendNotification(sendNotificationModel);
25140 amit.gupta 871
 
24917 tejbeer 872
		}
873
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
874
		return "response";
875
	}
876
 
877
	@RequestMapping(value = "/getAllNotifyOrder", method = RequestMethod.GET)
878
	public String getAllNotifyOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
24950 tejbeer 879
		List<NotifyOrder> notifyOrders = null;
24917 tejbeer 880
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 881
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24950 tejbeer 882
 
24917 tejbeer 883
		List<Integer> orderIds = new ArrayList<>();
24950 tejbeer 884
		if (!inProcessorder.isEmpty()) {
24917 tejbeer 885
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
24950 tejbeer 886
 
24917 tejbeer 887
				orderIds.add(order.getId());
888
 
24950 tejbeer 889
			}
890
			notifyOrders = notifyOrderRespository.selectByorderIds(orderIds);
891
			Set<Integer> oldItemIds = new HashSet<>();
892
			List<Integer> fofoIds = new ArrayList<>();
893
			List<Integer> notifyIds = new ArrayList<>();
894
			if (!notifyOrders.isEmpty()) {
895
				for (NotifyOrder notifyOrder : notifyOrders) {
896
					oldItemIds.add(notifyOrder.getItemId());
897
					fofoIds.add(notifyOrder.getFofoId());
898
					notifyIds.add(notifyOrder.getNotifyId());
24917 tejbeer 899
				}
900
 
24950 tejbeer 901
				List<NotifyColorChange> notifyColorChanges = notifyColorChangeRepository.selectByNotifyId(notifyIds);
902
				Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = this
903
						.notifyOrdersToNotifyId(notifyColorChanges);
904
				Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
905
				Map<Integer, String> itemdescription = inventoryService.getItemIdDescriptionMap(oldItemIds);
24917 tejbeer 906
 
24950 tejbeer 907
				model.addAttribute("notifyOrders", notifyOrders);
908
				model.addAttribute("notifyIdNotifyColorMap", notifyIdNotifyColorMap);
909
				model.addAttribute("itemdescription", itemdescription);
910
				model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
24917 tejbeer 911
 
24950 tejbeer 912
			} else {
913
				model.addAttribute("notifyOrders", notifyOrders);
914
			}
24917 tejbeer 915
		} else {
916
			model.addAttribute("notifyOrders", notifyOrders);
24950 tejbeer 917
		}
24917 tejbeer 918
		return "notify_order";
919
	}
920
 
921
	private Map<Integer, NotifyColorChange> notifyOrdersToNotifyId(List<NotifyColorChange> notifyColorChanges) {
922
		Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = new HashMap<>();
923
		for (NotifyColorChange notifyColorChange : notifyColorChanges) {
924
			notifyIdNotifyColorMap.put(notifyColorChange.getId(), notifyColorChange);
925
		}
926
		return notifyIdNotifyColorMap;
927
	}
928
 
26031 tejbeer 929
	@RequestMapping(value = "/getItems", method = RequestMethod.GET)
930
	public String getItems(HttpServletRequest request, @RequestParam int catalogItemId, Model model) throws Exception {
931
 
932
		Set<Integer> itemIds = itemRepository.selectAllByCatalogItemId(catalogItemId).stream().map(x -> x.getId())
933
				.collect(Collectors.toSet());
934
 
935
		List<Order> notAvailableProcessingOrder = orderRepository.selectByItemIdsOrderStatus(itemIds,
936
				OrderStatus.SUBMITTED_FOR_PROCESSING);
937
		LOGGER.info("notAvailableProcessingOrder" + notAvailableProcessingOrder);
938
 
939
		List<Integer> retailerIds = new ArrayList<>();
940
		for (com.spice.profitmandi.dao.entity.transaction.Order order : notAvailableProcessingOrder) {
941
			retailerIds.add(order.getRetailerId());
942
 
943
		}
944
 
945
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
946
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
947
 
948
		model.addAttribute("notAvailableProcessingOrder", notAvailableProcessingOrder);
949
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
950
 
951
		return "partner-cancel-order-modal";
952
	}
953
 
954
	@RequestMapping(value = "/notifyCancelOrder", method = RequestMethod.POST)
955
	public String NotifyCancelOrder(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel,
956
			Model model) throws Exception {
957
		for (NotifyOrderIdModel st : notifyOrderModel.getOrderIds()) {
958
			LOGGER.info("orderId" + st.getOrderId());
959
			Order order = orderRepository.selectById(st.getOrderId());
26110 tejbeer 960
			NotifyCancel nc = notifyCancelOrderRepository.selectByOrderId(st.getOrderId());
961
			if (nc == null) {
962
				nc = new NotifyCancel();
963
				nc.setOrderId(st.getOrderId());
964
				nc.setItemId(st.getOlditemId());
965
				nc.setFofoId(order.getRetailerId());
966
				nc.setCancellation(false);
967
				nc.setCreatedTimestamp(LocalDateTime.now());
968
				nc.setUpdatedTimestamp(LocalDateTime.now());
969
				notifyCancelOrderRepository.persist(nc);
970
			} else {
971
				nc.setOrderId(st.getOrderId());
972
				nc.setItemId(st.getOlditemId());
973
				nc.setFofoId(order.getRetailerId());
974
				nc.setCancellation(false);
975
				nc.setUpdatedTimestamp(LocalDateTime.now());
976
				notifyCancelOrderRepository.persist(nc);
977
			}
26031 tejbeer 978
 
979
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
980
			sendNotificationModel.setCampaignName("Notify Partner");
981
			sendNotificationModel.setMessage(notifyOrderModel.getMessage());
982
			sendNotificationModel.setType("url");
983
			sendNotificationModel.setTitle("Alert");
26482 tejbeer 984
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifyCancelOrder");
26031 tejbeer 985
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
986
			sendNotificationModel.setMessageType(MessageType.notification);
987
			int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
988
 
989
			sendNotificationModel.setUserIds(Arrays.asList(userId));
990
			notificationService.sendNotification(sendNotificationModel);
991
 
992
		}
993
 
994
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
995
		return "response";
996
	}
26039 tejbeer 997
 
998
	@RequestMapping(value = "/getNotifiedCancelOrder", method = RequestMethod.GET)
999
	public String getNotifiedCancelOrder(HttpServletRequest request, Model model) throws Exception {
1000
 
1001
		List<NotifyCancel> notifyCancels = notifyCancelOrderRepository.selectAllNonCancelOrder();
1002
		if (!notifyCancels.isEmpty()) {
1003
			List<Integer> retailerIds = new ArrayList<>();
1004
			Set<Integer> itemIds = new HashSet<>();
1005
			for (NotifyCancel nc : notifyCancels) {
1006
				retailerIds.add(nc.getFofoId());
1007
				itemIds.add(nc.getItemId());
1008
			}
1009
 
1010
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(retailerIds);
1011
 
1012
			Map<Integer, String> itemdescription = inventoryService.getItemIdDescriptionMap(itemIds);
1013
			model.addAttribute("notifyCancels", notifyCancels);
1014
			model.addAttribute("itemdescription", itemdescription);
1015
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
1016
		} else {
1017
 
1018
			model.addAttribute("notifyCancels", notifyCancels);
1019
 
1020
		}
1021
		return "notify_cancel";
1022
	}
1023
 
1024
	@RequestMapping(value = "/getNotifyItems", method = RequestMethod.GET)
1025
	public String getNotifyItems(HttpServletRequest request, @RequestParam int itemId, Model model) throws Exception {
1026
		Item item = itemRepository.selectById(itemId);
1027
 
1028
		List<Integer> itemIds = itemRepository.selectAllByCatalogItemId(item.getCatalogItemId()).stream()
1029
				.map(x -> x.getId()).collect(Collectors.toList());
1030
 
1031
		List<NotifyCancel> ncs = notifyCancelOrderRepository.selectByItemIdsAndStatus(itemIds);
1032
		List<Integer> retailerIds = new ArrayList<>();
1033
		Map<Integer, Object> orders = new HashMap<>();
1034
		for (NotifyCancel nc : ncs) {
1035
			retailerIds.add(nc.getFofoId());
1036
			Order od = orderRepository.selectById(nc.getOrderId());
1037
			orders.put(nc.getOrderId(), od);
1038
		}
1039
 
1040
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
1041
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
1042
 
1043
		model.addAttribute("notifyItems", ncs);
1044
		model.addAttribute("orders", orders);
1045
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
1046
 
1047
		return "notify_cancel_order_modal";
1048
	}
1049
 
1050
	@RequestMapping(value = "/changeNotifyCancelRequest", method = RequestMethod.POST)
1051
	public String changeNotifyCancelRequest(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel,
1052
			Model model) throws Exception {
1053
		List<Integer> orderIds = notifyOrderModel.getOrderIds().stream().map(x -> x.getOrderId())
1054
				.collect(Collectors.toList());
1055
 
1056
		List<NotifyCancel> ncs = notifyCancelOrderRepository.selectByOrderIds(orderIds);
1057
		for (NotifyCancel nc : ncs) {
1058
			nc.setCancellation(true);
1059
		}
1060
 
1061
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1062
		return "response";
1063
	}
26482 tejbeer 1064
 
1065
	@RequestMapping(value = "/getProducts", method = RequestMethod.GET)
1066
	public String getProducts(HttpServletRequest request, Model model)
1067
			throws ProfitMandiBusinessException, URISyntaxException, IOException {
1068
 
1069
		return "product-detail";
1070
	}
1071
 
1072
	@RequestMapping(value = "/getProductInfo", method = RequestMethod.GET)
1073
	public String getProductInfo(HttpServletRequest request, long catalogId, Model model) throws Exception {
1074
		ContentPojo cp = mongoClient.getEntityById(catalogId);
1075
		List<String> cps = cp.getKeySpecs();
1076
		LOGGER.info("cp" + cp.getDefaultImageUrl());
26493 tejbeer 1077
		model.addAttribute("cp", cp);
1078
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
26482 tejbeer 1079
		return "product-info";
1080
	}
26493 tejbeer 1081
 
1082
	@RequestMapping(value = "/getProductCompareInfo", method = RequestMethod.GET)
1083
	public String getProductCompareInfo(HttpServletRequest request, @RequestParam List<Long> catalogId, Model model)
1084
			throws Exception {
1085
		List<ContentPojo> cps = new ArrayList<>();
1086
		for (Long id : catalogId) {
1087
			ContentPojo cp = mongoClient.getEntityById(id);
1088
			cps.add(cp);
1089
		}
1090
 
1091
 
1092
		LOGGER.info("cps" + cps);
1093
        model.addAttribute("cps", cps);
1094
		return "product-compare";
1095
	}
24917 tejbeer 1096
}