Subversion Repositories SmartDukaan

Rev

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