Subversion Repositories SmartDukaan

Rev

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