Subversion Repositories SmartDukaan

Rev

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