Subversion Repositories SmartDukaan

Rev

Rev 28714 | Rev 28795 | 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;
28701 tejbeer 9
import java.text.MessageFormat;
27738 tejbeer 10
import java.time.LocalDate;
23886 amit.gupta 11
import java.time.LocalDateTime;
27738 tejbeer 12
import java.time.YearMonth;
26279 amit.gupta 13
import java.time.format.DateTimeFormatter;
27867 tejbeer 14
import java.time.temporal.ChronoUnit;
24465 tejbeer 15
import java.util.ArrayList;
25873 tejbeer 16
import java.util.Arrays;
26979 amit.gupta 17
import java.util.Collection;
27867 tejbeer 18
import java.util.Comparator;
24917 tejbeer 19
import java.util.HashMap;
24465 tejbeer 20
import java.util.HashSet;
24917 tejbeer 21
import java.util.Iterator;
21577 ashik.ali 22
import java.util.List;
21654 ashik.ali 23
import java.util.Map;
24917 tejbeer 24
import java.util.Optional;
24465 tejbeer 25
import java.util.Set;
26
import java.util.stream.Collectors;
27867 tejbeer 27
import java.util.stream.Stream;
21577 ashik.ali 28
 
29
import javax.servlet.http.HttpServletRequest;
21987 kshitij.so 30
import javax.servlet.http.HttpServletResponse;
21577 ashik.ali 31
 
26279 amit.gupta 32
import org.apache.commons.csv.CSVFormat;
33
import org.apache.commons.csv.CSVParser;
34
import org.apache.commons.csv.CSVRecord;
27544 amit.gupta 35
import org.apache.commons.io.FileUtils;
26299 amit.gupta 36
import org.apache.commons.lang3.StringUtils;
23886 amit.gupta 37
import org.apache.logging.log4j.LogManager;
23568 govind 38
import org.apache.logging.log4j.Logger;
24739 tejbeer 39
import org.apache.thrift.TException;
24465 tejbeer 40
import org.json.JSONObject;
21577 ashik.ali 41
import org.springframework.beans.factory.annotation.Autowired;
23784 ashik.ali 42
import org.springframework.beans.factory.annotation.Qualifier;
21987 kshitij.so 43
import org.springframework.beans.factory.annotation.Value;
28084 amit.gupta 44
import org.springframework.core.io.ByteArrayResource;
27544 amit.gupta 45
import org.springframework.core.io.ClassPathResource;
22486 ashik.ali 46
import org.springframework.core.io.InputStreamResource;
47
import org.springframework.http.HttpHeaders;
48
import org.springframework.http.HttpStatus;
25140 amit.gupta 49
import org.springframework.http.MediaType;
22472 ashik.ali 50
import org.springframework.http.ResponseEntity;
24917 tejbeer 51
import org.springframework.mail.javamail.JavaMailSender;
21577 ashik.ali 52
import org.springframework.stereotype.Controller;
21654 ashik.ali 53
import org.springframework.transaction.annotation.Transactional;
21577 ashik.ali 54
import org.springframework.ui.Model;
26279 amit.gupta 55
import org.springframework.web.bind.annotation.PostMapping;
22472 ashik.ali 56
import org.springframework.web.bind.annotation.RequestBody;
21577 ashik.ali 57
import org.springframework.web.bind.annotation.RequestMapping;
22472 ashik.ali 58
import org.springframework.web.bind.annotation.RequestMethod;
21577 ashik.ali 59
import org.springframework.web.bind.annotation.RequestParam;
26279 amit.gupta 60
import org.springframework.web.bind.annotation.RequestPart;
61
import org.springframework.web.multipart.MultipartFile;
21577 ashik.ali 62
 
21987 kshitij.so 63
import com.google.gson.Gson;
25698 tejbeer 64
import com.spice.profitmandi.common.enumuration.MessageType;
21577 ashik.ali 65
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21612 ashik.ali 66
import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;
24106 tejbeer 67
import com.spice.profitmandi.common.model.CustomRetailer;
22472 ashik.ali 68
import com.spice.profitmandi.common.model.InventoryItemAgingModel;
24106 tejbeer 69
import com.spice.profitmandi.common.model.ItemFeatureDataModel;
24917 tejbeer 70
import com.spice.profitmandi.common.model.NotifyItemIdModel;
71
import com.spice.profitmandi.common.model.NotifyOrderIdModel;
72
import com.spice.profitmandi.common.model.NotifyOrderModel;
25640 tejbeer 73
import com.spice.profitmandi.common.model.OrderCancellationModel;
25140 amit.gupta 74
import com.spice.profitmandi.common.model.PdfModel;
21577 ashik.ali 75
import com.spice.profitmandi.common.model.ProfitMandiConstants;
25851 amit.gupta 76
import com.spice.profitmandi.common.model.SendNotificationModel;
22472 ashik.ali 77
import com.spice.profitmandi.common.util.ExcelUtils;
25140 amit.gupta 78
import com.spice.profitmandi.common.util.PdfUtils;
28084 amit.gupta 79
import com.spice.profitmandi.common.util.Utils;
80
import com.spice.profitmandi.common.util.Utils.Attachment;
28701 tejbeer 81
import com.spice.profitmandi.dao.entity.auth.AuthUser;
28754 tejbeer 82
import com.spice.profitmandi.dao.entity.catalog.FocusedModel;
28701 tejbeer 83
import com.spice.profitmandi.dao.entity.catalog.FocusedModelByPassRequest;
28754 tejbeer 84
import com.spice.profitmandi.dao.entity.catalog.HighDemandItem;
24123 tejbeer 85
import com.spice.profitmandi.dao.entity.catalog.Item;
24950 tejbeer 86
import com.spice.profitmandi.dao.entity.catalog.TagListing;
24106 tejbeer 87
import com.spice.profitmandi.dao.entity.catalog.TagRanking;
28701 tejbeer 88
import com.spice.profitmandi.dao.entity.cs.Position;
25140 amit.gupta 89
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
24917 tejbeer 90
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24465 tejbeer 91
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
92
import com.spice.profitmandi.dao.entity.fofo.LiveDemoSerialNumber;
28701 tejbeer 93
import com.spice.profitmandi.dao.entity.transaction.AddWalletRequest;
26031 tejbeer 94
import com.spice.profitmandi.dao.entity.transaction.NotifyCancel;
24917 tejbeer 95
import com.spice.profitmandi.dao.entity.transaction.NotifyColorChange;
25066 tejbeer 96
import com.spice.profitmandi.dao.entity.transaction.NotifyMessage;
24917 tejbeer 97
import com.spice.profitmandi.dao.entity.transaction.NotifyOrder;
24739 tejbeer 98
import com.spice.profitmandi.dao.entity.transaction.Order;
28701 tejbeer 99
import com.spice.profitmandi.dao.enumuration.catalog.ByPassRequestStatus;
100
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
101
import com.spice.profitmandi.dao.enumuration.transaction.AddWalletRequestStatus;
27738 tejbeer 102
import com.spice.profitmandi.dao.model.BrandItemWiseTertiaryModel;
27867 tejbeer 103
import com.spice.profitmandi.dao.model.BrandRegionModel;
27723 tejbeer 104
import com.spice.profitmandi.dao.model.BrandWiseTertiaryModel;
26482 tejbeer 105
import com.spice.profitmandi.dao.model.ContentPojo;
27738 tejbeer 106
import com.spice.profitmandi.dao.model.OpenPoItemModel;
27723 tejbeer 107
import com.spice.profitmandi.dao.model.OpenPoModel;
27738 tejbeer 108
import com.spice.profitmandi.dao.model.OurPurchaseItemModel;
27723 tejbeer 109
import com.spice.profitmandi.dao.model.OurPurchaseModel;
27867 tejbeer 110
import com.spice.profitmandi.dao.model.SecondaeryOrderDateRange;
27723 tejbeer 111
import com.spice.profitmandi.dao.model.SecondaryOrderBillingModel;
27738 tejbeer 112
import com.spice.profitmandi.dao.model.SecondaryOrderItemBillingModel;
27867 tejbeer 113
import com.spice.profitmandi.dao.model.SecondaryWarehouseWiseOrderBilllingModel;
26498 amit.gupta 114
import com.spice.profitmandi.dao.model.Specification;
115
import com.spice.profitmandi.dao.model.SpecificationGroup;
28701 tejbeer 116
import com.spice.profitmandi.dao.model.UserCart;
117
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
118
import com.spice.profitmandi.dao.repository.catalog.FocusedModelByPassRepository;
28754 tejbeer 119
import com.spice.profitmandi.dao.repository.catalog.HighDemandItemsRepository;
24123 tejbeer 120
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
24950 tejbeer 121
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
24106 tejbeer 122
import com.spice.profitmandi.dao.repository.catalog.TagRankingRepository;
28701 tejbeer 123
import com.spice.profitmandi.dao.repository.cs.CsService;
124
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
24465 tejbeer 125
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
26482 tejbeer 126
import com.spice.profitmandi.dao.repository.dtr.Mongo;
24917 tejbeer 127
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24203 amit.gupta 128
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
27723 tejbeer 129
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
24465 tejbeer 130
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
131
import com.spice.profitmandi.dao.repository.fofo.LiveDemoBillingRespository;
24917 tejbeer 132
import com.spice.profitmandi.dao.repository.inventory.NotifyStatus;
26031 tejbeer 133
import com.spice.profitmandi.dao.repository.transaction.NotifyCancelOrderRepository;
24917 tejbeer 134
import com.spice.profitmandi.dao.repository.transaction.NotifyColorChangeRepository;
135
import com.spice.profitmandi.dao.repository.transaction.NotifyItemRepository;
25066 tejbeer 136
import com.spice.profitmandi.dao.repository.transaction.NotifyMessageRepository;
24917 tejbeer 137
import com.spice.profitmandi.dao.repository.transaction.NotifyOrderRespository;
24658 tejbeer 138
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
27723 tejbeer 139
import com.spice.profitmandi.dao.repository.warehouse.WarehousePurchaseOrderRepository;
140
import com.spice.profitmandi.dao.repository.warehouse.WarehouseScanRepository;
25851 amit.gupta 141
import com.spice.profitmandi.service.NotificationService;
22927 ashik.ali 142
import com.spice.profitmandi.service.inventory.InventoryService;
27516 amit.gupta 143
import com.spice.profitmandi.service.order.OrderService;
24465 tejbeer 144
import com.spice.profitmandi.service.user.RetailerService;
22139 amit.gupta 145
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 146
import com.spice.profitmandi.web.util.CookiesProcessor;
24106 tejbeer 147
import com.spice.profitmandi.web.util.MVCResponseSender;
21577 ashik.ali 148
 
24658 tejbeer 149
import in.shop2020.model.v1.order.OrderStatus;
24739 tejbeer 150
import in.shop2020.model.v1.order.TransactionServiceException;
24658 tejbeer 151
 
21577 ashik.ali 152
@Controller
24123 tejbeer 153
@Transactional(rollbackFor = Throwable.class)
21577 ashik.ali 154
public class InventoryController {
21987 kshitij.so 155
 
23568 govind 156
	private static final Logger LOGGER = LogManager.getLogger(InventoryController.class);
26482 tejbeer 157
 
26292 amit.gupta 158
	private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy H:m:s");
21987 kshitij.so 159
 
27583 tejbeer 160
	private static final List<String> imeis = Arrays.asList("351030944216680", "351030944217183", "351030944217886",
161
			"351030944507286", "351081710231270", "351081710238713", "351081710238796", "351081710241279",
162
			"351081710244737", "355777112655976");
163
 
28701 tejbeer 164
	List<EscalationType> esclationType = Arrays.asList(EscalationType.L3, EscalationType.L4);
165
 
166
	List<String> emails = Arrays.asList("kamini.sharma@smartdukaan.com", "tarun.verma@smartdukaan.com");
167
 
21577 ashik.ali 168
	@Autowired
22927 ashik.ali 169
	private CookiesProcessor cookiesProcessor;
24123 tejbeer 170
 
22354 ashik.ali 171
	@Autowired
23784 ashik.ali 172
	@Qualifier("fofoInventoryService")
22927 ashik.ali 173
	private InventoryService inventoryService;
24465 tejbeer 174
 
24203 amit.gupta 175
	@Autowired
24950 tejbeer 176
	TagListingRepository tagListingRepository;
177
 
178
	@Autowired
24203 amit.gupta 179
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
24123 tejbeer 180
 
24106 tejbeer 181
	@Autowired
182
	private TagRankingRepository tagRankingRepository;
24123 tejbeer 183
 
24106 tejbeer 184
	@Autowired
24465 tejbeer 185
	private InventoryItemRepository inventoryItemRepository;
186
 
187
	@Autowired
188
	private LiveDemoBillingRespository liveDemoBillingRespository;
189
 
190
	@Autowired
24123 tejbeer 191
	private ItemRepository itemRepository;
192
 
193
	@Autowired
26512 amit.gupta 194
	private Gson gson;
195
 
196
	@Autowired
24465 tejbeer 197
	private RetailerService retailerService;
198
 
199
	@Autowired
24106 tejbeer 200
	private MVCResponseSender mvcResponseSender;
24123 tejbeer 201
 
24465 tejbeer 202
	@Autowired
203
	FofoStoreRepository fofoStoreRepository;
204
 
24658 tejbeer 205
	@Autowired
206
	private OrderRepository orderRepository;
207
 
24739 tejbeer 208
	@Autowired
24917 tejbeer 209
	private NotifyItemRepository notifyItemRepository;
24739 tejbeer 210
 
24917 tejbeer 211
	@Autowired
212
	private NotifyColorChangeRepository notifyColorChangeRepository;
213
 
214
	@Autowired
215
	private NotifyOrderRespository notifyOrderRespository;
216
 
217
	@Autowired
25851 amit.gupta 218
	private NotificationService notificationService;
219
 
220
	@Autowired
25066 tejbeer 221
	private NotifyMessageRepository notifyMessageRepository;
222
 
223
	@Autowired
24917 tejbeer 224
	private UserAccountRepository userAccountRepository;
225
 
27516 amit.gupta 226
	@Autowired
227
	private OrderService orderService;
27583 tejbeer 228
 
21987 kshitij.so 229
	@Value("${saholic.api.host}")
230
	private String host;
23786 amit.gupta 231
 
21987 kshitij.so 232
	@Value("${saholic.api.port}")
233
	private int port;
23786 amit.gupta 234
 
21987 kshitij.so 235
	@Value("${saholic.api.webapp}")
236
	private String webapp;
237
 
24917 tejbeer 238
	@Autowired
239
	JavaMailSender mailSender;
240
 
26031 tejbeer 241
	@Autowired
242
	private NotifyCancelOrderRepository notifyCancelOrderRepository;
243
 
26482 tejbeer 244
	@Autowired
27723 tejbeer 245
	private WarehousePurchaseOrderRepository warehousePurchaseOrderRepository;
246
 
247
	@Autowired
248
	private WarehouseScanRepository warehouseScanRepository;
249
 
250
	@Autowired
251
	private FofoOrderRepository fofoOrderRepository;
252
	@Autowired
26482 tejbeer 253
	private Mongo mongoClient;
254
 
28701 tejbeer 255
	@Autowired
256
	private FocusedModelByPassRepository focusedModelByPassRepository;
257
 
258
	@Autowired
259
	private CsService csService;
260
 
261
	@Autowired
262
	AuthRepository authRepository;
263
 
264
	@Autowired
265
	PositionRepository positionRepository;
266
 
28754 tejbeer 267
	@Autowired
268
	HighDemandItemsRepository highDemandItemsRepository;
269
 
23786 amit.gupta 270
	@RequestMapping(value = "/getCurrentInventorySnapshot")
271
	public String getCurrentAvailability(HttpServletRequest request,
272
			@RequestParam(name = "offset", defaultValue = "0") int offset,
273
			@RequestParam(name = "limit", defaultValue = "10") int limit,
24123 tejbeer 274
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
23786 amit.gupta 275
			throws ProfitMandiBusinessException {
22927 ashik.ali 276
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 277
		Map<String, Object> map = inventoryService.getCurrentInventorySnapshot(loginDetails.getFofoId(), offset, limit,
278
				searchTerm);
22927 ashik.ali 279
		model.addAllAttributes(map);
21987 kshitij.so 280
		return "inventory-snapshot";
21612 ashik.ali 281
	}
21987 kshitij.so 282
 
23786 amit.gupta 283
	@RequestMapping(value = "/getBadInventorySnapshot")
284
	public String getBadAvailability(HttpServletRequest request,
285
			@RequestParam(name = "offset", defaultValue = "0") int offset,
286
			@RequestParam(name = "limit", defaultValue = "10") int limit,
287
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
288
			throws ProfitMandiBusinessException {
24123 tejbeer 289
		if (searchTerm == null) {
290
			searchTerm = "";
24052 amit.gupta 291
		}
22927 ashik.ali 292
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 293
		Map<String, Object> map = inventoryService.getBadInventorySnapshot(loginDetails.getFofoId(), offset, limit,
294
				searchTerm);
22927 ashik.ali 295
		model.addAllAttributes(map);
21987 kshitij.so 296
		return "bad-inventory-snapshot";
297
	}
298
 
23786 amit.gupta 299
	@RequestMapping(value = "/getPaginatedCurrentInventorySnapshot")
300
	public String getPaginatedCurrentInventorySnapshot(HttpServletRequest request,
301
			@RequestParam(name = "offset", defaultValue = "0") int offset,
302
			@RequestParam(name = "limit", defaultValue = "10") int limit,
303
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
304
			throws ProfitMandiBusinessException {
24123 tejbeer 305
		if (searchTerm == null) {
306
			searchTerm = "";
24052 amit.gupta 307
		}
22927 ashik.ali 308
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 309
		Map<String, Object> map = inventoryService.getPaginatedCurrentInventorySnapshot(loginDetails.getFofoId(),
310
				offset, limit, searchTerm);
22927 ashik.ali 311
		model.addAllAttributes(map);
21987 kshitij.so 312
		return "inventory-snapshot-paginated";
313
	}
23786 amit.gupta 314
 
315
	@RequestMapping(value = "/getCatalog")
316
	public String getCatalog(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
27583 tejbeer 317
			@RequestParam(name = "limit", defaultValue = "20") int limit,
318
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
27618 tejbeer 319
			@RequestParam(name = "itemId", required = false, defaultValue = "0") int itemId,
320
			@RequestParam(name = "accesories", required = false, defaultValue = "0") boolean accesories,
27596 tejbeer 321
 
27618 tejbeer 322
			@RequestParam(name = "brand", required = false, defaultValue = "") String brand, Model model)
323
 
23786 amit.gupta 324
			throws ProfitMandiBusinessException {
22927 ashik.ali 325
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 326
		if (searchTerm == null) {
327
			searchTerm = "";
24052 amit.gupta 328
		}
24739 tejbeer 329
 
27583 tejbeer 330
		Map<String, Object> map = inventoryService.getCatalog(loginDetails.getFofoId(), offset, limit, searchTerm,
27618 tejbeer 331
				itemId, brand, accesories);
22927 ashik.ali 332
		model.addAllAttributes(map);
24203 amit.gupta 333
		model.addAttribute("hasGift", hasGift(loginDetails.getFofoId()));
24658 tejbeer 334
 
21987 kshitij.so 335
		return "catalog";
336
	}
23786 amit.gupta 337
 
24465 tejbeer 338
	// This method is currently hardcoded to faciliate watches sold as gift.
24203 amit.gupta 339
	private boolean hasGift(int fofoId) {
340
		try {
24465 tejbeer 341
			return currentInventorySnapshotRepository.selectByItemIdAndFofoId(ProfitMandiConstants.GIFT_ID, fofoId)
342
					.getAvailability() > 0;
24203 amit.gupta 343
		} catch (ProfitMandiBusinessException e) {
344
			return false;
345
		}
346
	}
347
 
27583 tejbeer 348
	/*
349
	 * @RequestMapping(value = "/getSimilarItem") public String
350
	 * getCatalog(HttpServletRequest request, @RequestParam(name = "offset",
351
	 * defaultValue = "0") int offset,
352
	 * 
353
	 * @RequestParam(name = "limit", defaultValue = "10") int limit, @RequestParam
354
	 * int catalogItemId,
355
	 * 
356
	 * @RequestParam(name = "searchTerm", required = false, defaultValue = "")
357
	 * String searchTerm, Model model) throws ProfitMandiBusinessException
358
	 * 
359
	 * { LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
360
	 * 
361
	 * if (catalogItemId != 0) { TagListing tagListing = null; List<Item> items =
362
	 * itemRepository.selectAllByCatalogItemId(catalogItemId); Map<Integer, Float>
363
	 * itemPriceing = new HashMap<>(); List<CustomCurrentInventorySnapshot>
364
	 * inventoryList = new ArrayList<>();
365
	 * 
366
	 * for (Item item : items) { tagListing =
367
	 * tagListingRepository.selectByItemId(item.getId());
368
	 * CustomCurrentInventorySnapshot customCurrentInventorySnapshot =
369
	 * inventoryService .checkItemAvailability(item.getId(),
370
	 * loginDetails.getFofoId()); inventoryList.add(customCurrentInventorySnapshot);
371
	 * itemPriceing.put(item.getId(), tagListing.getMop()); } if (tagListing !=
372
	 * null) {
373
	 * 
374
	 * float tagStartPrice = tagListing.getMop() - 1000; float tagEndPrice =
375
	 * tagListing.getMop() + 2000; List<TagListing> tagMoplists =
376
	 * tagListingRepository.selectAllBetweenMopPrice(tagStartPrice, tagEndPrice);
377
	 * 
378
	 * for (TagListing tagListings : tagMoplists) {
379
	 * 
380
	 * int TagListingItemid = tagListings.getItemId();
381
	 * 
382
	 * itemPriceing.put(TagListingItemid, tagListings.getMop());
383
	 * CustomCurrentInventorySnapshot customCurrentInventorySnapshotMopPrice =
384
	 * inventoryService .checkItemAvailability(TagListingItemid,
385
	 * loginDetails.getFofoId());
386
	 * 
387
	 * inventoryList.add(customCurrentInventorySnapshotMopPrice); }
388
	 * 
389
	 * }
390
	 * 
391
	 * else { LOGGER.info("tagBrandlist is null"); }
392
	 * 
393
	 * model.addAttribute("inventoryLists", inventoryList);
394
	 * model.addAttribute("itemPriceing", itemPriceing);
395
	 * 
396
	 * }
397
	 * 
398
	 * return "catalog-similar-Id"; }
399
	 */
23786 amit.gupta 400
	@RequestMapping(value = "/getPaginatedCatalog")
401
	public String getCatalogPaginated(HttpServletRequest request,
402
			@RequestParam(name = "offset", defaultValue = "0") int offset,
27583 tejbeer 403
			@RequestParam(name = "limit", defaultValue = "20") int limit,
404
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
27596 tejbeer 405
			@RequestParam(name = "itemId", required = false, defaultValue = "0") int itemId,
27618 tejbeer 406
			@RequestParam(name = "accesories", required = false, defaultValue = "0") boolean accesories,
407
			@RequestParam(name = "brand", required = false, defaultValue = "") String brand, Model model)
23786 amit.gupta 408
			throws ProfitMandiBusinessException {
22927 ashik.ali 409
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 410
		if (searchTerm == null) {
411
			searchTerm = "";
24052 amit.gupta 412
		}
23786 amit.gupta 413
		Map<String, Object> map = inventoryService.getPaginatedCatalog(loginDetails.getFofoId(), offset, limit,
27618 tejbeer 414
				searchTerm, itemId, brand, accesories);
22927 ashik.ali 415
		model.addAllAttributes(map);
21987 kshitij.so 416
		return "catalog-paginated";
417
	}
418
 
23786 amit.gupta 419
	@RequestMapping(value = "/checkItemAvailability")
420
	public String getItemAvailability(HttpServletRequest request,
421
			@RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, Model model)
422
			throws ProfitMandiBusinessException {
22927 ashik.ali 423
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 424
		CustomCurrentInventorySnapshot customCurrentInventorySnapshot = inventoryService.checkItemAvailability(itemId,
425
				loginDetails.getFofoId());
25812 amit.gupta 426
		/*
427
		 * customCurrentInventorySnapshot
428
		 * .setIconUrl(Utils.getIconUrl(customCurrentInventorySnapshot.getCatalogItemId(
429
		 * ), host, port, webapp));
430
		 */
22927 ashik.ali 431
		model.addAttribute("currentInventorySnapshot", new Gson().toJson(customCurrentInventorySnapshot));
432
		return "current-item-availability";
23786 amit.gupta 433
 
21577 ashik.ali 434
	}
23786 amit.gupta 435
 
23192 ashik.ali 436
	@RequestMapping(value = "/cart", method = RequestMethod.POST)
23786 amit.gupta 437
	public String addToCart(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
438
			throws ProfitMandiBusinessException {
22927 ashik.ali 439
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 440
 
22927 ashik.ali 441
		Map<String, Object> map = inventoryService.addToCart(cartData, loginDetails.getFofoId());
442
		model.addAllAttributes(map);
21987 kshitij.so 443
		return "cart";
444
	}
23786 amit.gupta 445
 
23192 ashik.ali 446
	@RequestMapping(value = "/validate-cart", method = RequestMethod.POST)
23786 amit.gupta 447
	public String validateCart(HttpServletRequest request, HttpServletResponse response,
448
			@RequestParam(name = "cartData") String cartData, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 449
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 450
 
22927 ashik.ali 451
		Map<String, Object> map = inventoryService.validateCart(cartData, loginDetails.getFofoId());
452
		model.addAllAttributes(map);
21987 kshitij.so 453
		return "validate-cart";
454
	}
455
 
23786 amit.gupta 456
	@RequestMapping(value = "/grnHistory")
24123 tejbeer 457
	public String getGrnHistory(HttpServletRequest request, @RequestParam(required = false) LocalDateTime startTime,
23886 amit.gupta 458
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 459
			@RequestParam(name = "offset", defaultValue = "0") int offset,
460
			@RequestParam(name = "limit", defaultValue = "10") int limit,
461
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
462
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
463
			throws ProfitMandiBusinessException {
22927 ashik.ali 464
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 465
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime, endTime, offset,
466
				limit, purchaseReference, searchType);
22927 ashik.ali 467
		model.addAllAttributes(map);
21987 kshitij.so 468
		return "grn-history";
21636 ashik.ali 469
	}
21987 kshitij.so 470
 
25140 amit.gupta 471
	@RequestMapping(value = "/downloadPurchaseInvoices")
472
	public ResponseEntity<?> downloadPurchaseInvoices(HttpServletRequest request,
473
			@RequestParam(required = false) LocalDateTime startTime,
474
			@RequestParam(required = false) LocalDateTime endTime,
475
			@RequestParam(name = "offset", defaultValue = "0") int offset,
476
			@RequestParam(name = "limit", defaultValue = "10") int limit,
477
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
478
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
479
			throws ProfitMandiBusinessException {
480
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
481
		Map<String, Object> map = inventoryService.getGrnHistory(loginDetails.getFofoId(), startTime, endTime, offset,
482
				limit, purchaseReference, searchType);
483
 
484
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
485
 
486
		if (fofoOrders.size() == 0) {
487
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
488
		}
489
 
490
		final HttpHeaders headers = new HttpHeaders();
491
		headers.setContentType(MediaType.APPLICATION_PDF);
492
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
493
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
494
		List<PdfModel> pdfModels = new ArrayList<>();
25371 tejbeer 495
		/*
496
		 * for (FofoOrder fofoOrder : fofoOrders) { try {
497
		 * pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId())); } catch
498
		 * (Exception e) {
499
		 * LOGGER.info("could not create invoice for {}, invoice number {}",
500
		 * fofoOrder.getId(), fofoOrder.getInvoiceNumber()); } }
501
		 */
25140 amit.gupta 502
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
503
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
504
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
505
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
506
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
507
	}
508
 
23786 amit.gupta 509
	@RequestMapping(value = "/getPaginatedGrnHistory")
510
	public String getPaginatedGrnHistory(HttpServletRequest request,
23886 amit.gupta 511
			@RequestParam(required = false) LocalDateTime startTime,
512
			@RequestParam(required = false) LocalDateTime endTime,
23786 amit.gupta 513
			@RequestParam(name = "offset", defaultValue = "0") int offset,
514
			@RequestParam(name = "limit", defaultValue = "10") int limit,
515
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE, defaultValue = "") String purchaseReference,
516
			@RequestParam(name = "searchType", defaultValue = "") String searchType, Model model)
517
			throws ProfitMandiBusinessException {
22927 ashik.ali 518
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24123 tejbeer 519
		Map<String, Object> map = inventoryService.getPaginatedGrnHistory(loginDetails.getFofoId(), startTime, endTime,
520
				offset, limit);
22927 ashik.ali 521
		model.addAllAttributes(map);
21987 kshitij.so 522
		return "grn-history-paginated";
523
	}
524
 
23786 amit.gupta 525
	@RequestMapping(value = "/grnHistoryDetailByPurchaseId")
526
	public String grnHistoryByPurchaseId(HttpServletRequest request,
527
			@RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model)
528
			throws ProfitMandiBusinessException {
22927 ashik.ali 529
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 530
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseId, host, port,
531
				webapp);
22927 ashik.ali 532
		model.addAllAttributes(map);
21987 kshitij.so 533
		return "grn-details";
21636 ashik.ali 534
	}
21987 kshitij.so 535
 
23786 amit.gupta 536
	@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")
537
	public String grnHistoryByPurchaseReference(HttpServletRequest request,
538
			@RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model)
539
			throws ProfitMandiBusinessException {
22927 ashik.ali 540
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 541
		Map<String, Object> map = inventoryService.getGrnHistoryDetail(loginDetails.getFofoId(), purchaseReference,
542
				host, port, webapp);
22927 ashik.ali 543
		model.addAllAttributes(map);
21987 kshitij.so 544
		return "grn-details";
21654 ashik.ali 545
	}
23786 amit.gupta 546
 
26248 amit.gupta 547
	@RequestMapping(value = "/activatedImeis")
548
	public String activatedImeis(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
549
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
550
 
551
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByActivatedNotSold(loginDetails.getFofoId());
552
		inventoryItems.stream().forEach(x -> {
553
			try {
554
				x.setItem(itemRepository.selectById(x.getItemId()));
555
			} catch (Exception e) {
556
				e.printStackTrace();
557
			}
558
		});
559
		model.addAttribute("inventoryItems", inventoryItems);
560
		return "activated-imeis";
561
	}
27583 tejbeer 562
 
27516 amit.gupta 563
	@RequestMapping(value = "/view-invoices")
564
	public String viewInvoices(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
565
		return "view-dummy-invoices";
566
	}
27583 tejbeer 567
 
27516 amit.gupta 568
	@RequestMapping(value = "/dummy-invoices")
27583 tejbeer 569
	public ResponseEntity<?> downloadInvoices(HttpServletRequest request, @RequestParam String serialNumber,
570
			Model model) throws ProfitMandiBusinessException {
27544 amit.gupta 571
		byte[] bytes = null;
27583 tejbeer 572
		if (!imeis.contains(serialNumber)) {
573
 
27544 amit.gupta 574
			PdfModel pdfModel = orderService.getDummyPdfModel(serialNumber);
575
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
576
			PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
577
			bytes = byteArrayOutputStream.toByteArray();
578
		} else {
579
			ClassPathResource resource = new ClassPathResource("/META-INF/" + serialNumber + ".pdf");
580
			try {
581
				bytes = FileUtils.readFileToByteArray(resource.getFile());
27583 tejbeer 582
			} catch (Exception e) {
583
 
27544 amit.gupta 584
			}
585
		}
27516 amit.gupta 586
		final HttpHeaders headers = new HttpHeaders();
587
		headers.setContentType(MediaType.APPLICATION_PDF);
27544 amit.gupta 588
		headers.set("Content-disposition", "inline; filename=invoice-" + serialNumber + ".pdf");
589
		headers.setContentLength(bytes.length);
590
		final InputStream inputStream = new ByteArrayInputStream(bytes);
27516 amit.gupta 591
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
592
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
593
	}
28714 tejbeer 594
 
28084 amit.gupta 595
	@RequestMapping(value = "/dummy-invoices-bulk")
596
	public ResponseEntity<?> downloadInvoicesBulk(HttpServletRequest request, @RequestParam List<String> serialNumbers,
597
			Model model) throws Exception {
598
		byte[] bytes = null;
28701 tejbeer 599
		List<Attachment> attachments = new ArrayList<>();
600
		for (String serialNumber : serialNumbers) {
28084 amit.gupta 601
			if (!imeis.contains(serialNumber)) {
28088 amit.gupta 602
				PdfModel pdfModel = null;
603
				try {
604
					pdfModel = orderService.getDummyPdfModel(serialNumber);
28701 tejbeer 605
				} catch (Exception e) {
28088 amit.gupta 606
					continue;
607
				}
28084 amit.gupta 608
				ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
609
				PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
610
				bytes = byteArrayOutputStream.toByteArray();
611
			} else {
612
				ClassPathResource resource = new ClassPathResource("/META-INF/" + serialNumber + ".pdf");
613
				try {
614
					bytes = FileUtils.readFileToByteArray(resource.getFile());
615
				} catch (Exception e) {
28088 amit.gupta 616
					continue;
28084 amit.gupta 617
				}
618
			}
619
			attachments.add(new Attachment("invoice-" + serialNumber + ".pdf", new ByteArrayResource(bytes)));
620
		}
28109 tejbeer 621
 
622
		Utils.sendMailWithAttachments(mailSender, new String[] { "kuldeep.kumar@smartdukaan.com" }, null,
623
				"Invoices List", "PFA", attachments.toArray(new Attachment[attachments.size()]));
28084 amit.gupta 624
		return new ResponseEntity<Boolean>(true, HttpStatus.OK);
625
	}
26248 amit.gupta 626
 
22472 ashik.ali 627
	@RequestMapping(value = "/getInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 628
	public String getInventoryItemAgingByInterval(HttpServletRequest request, @RequestBody List<Integer> intervals,
629
			Model model, @RequestParam(name = "searchContent", defaultValue = "") String searchContent,
630
			@RequestParam(name = "offset", defaultValue = "0") int offset,
631
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
22927 ashik.ali 632
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 633
		Map<String, Object> map = inventoryService.getPaginatedItemAgingByInterval(loginDetails.getFofoId(), intervals,
634
				searchContent, offset, limit);
22927 ashik.ali 635
		model.addAllAttributes(map);
22523 ashik.ali 636
		return "item-aging";
637
	}
23786 amit.gupta 638
 
22523 ashik.ali 639
	@RequestMapping(value = "/downloadInventoryItemAgingByInterval", method = RequestMethod.POST)
23786 amit.gupta 640
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request,
641
			@RequestBody List<Integer> intervals, Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 642
		LOGGER.info("Request received at url{} with body {}", request.getRequestURI(), intervals);
643
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23786 amit.gupta 644
 
645
		List<InventoryItemAgingModel> inventoryItemAgingModels = inventoryService
646
				.getItemAgingByInterval(fofoDetails.getFofoId(), intervals);
647
 
22486 ashik.ali 648
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
649
		ExcelUtils.writeInventoryItemAgingModels(inventoryItemAgingModels, intervals, byteArrayOutputStream);
23786 amit.gupta 650
 
651
		final HttpHeaders headers = new HttpHeaders();
652
		// private static final String CONTENT_TYPE_XLSX =
653
		// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
654
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
655
		// headers.set("Content-Type", "application/vnd.ms-excel");
22486 ashik.ali 656
		headers.set("Content-disposition", "inline; filename=InventoryItemAging.xlsx");
23786 amit.gupta 657
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
658
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
659
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
660
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
22472 ashik.ali 661
	}
27583 tejbeer 662
 
26968 amit.gupta 663
	@RequestMapping(value = "/aging-report", method = RequestMethod.GET)
27583 tejbeer 664
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request)
665
			throws ProfitMandiBusinessException {
666
 
667
		List<Integer> intervals = Arrays.asList(5, 15, 30, 45);
26961 amit.gupta 668
		List<InventoryItemAgingModel> inventoryItemAgingModels = inventoryService.getItemAgingByInterval(intervals)
26979 amit.gupta 669
				.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
670
		LOGGER.info("Fofo Id {}", inventoryItemAgingModels.get(0).getFofoId());
26961 amit.gupta 671
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
672
		ExcelUtils.writeInventoryItemAgingModels(inventoryItemAgingModels, intervals, byteArrayOutputStream);
27583 tejbeer 673
 
26961 amit.gupta 674
		final HttpHeaders headers = new HttpHeaders();
675
		// private static final String CONTENT_TYPE_XLSX =
676
		// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
677
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
678
		// headers.set("Content-Type", "application/vnd.ms-excel");
679
		headers.set("Content-disposition", "inline; filename=InventoryItemAging.xlsx");
680
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
681
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
682
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
683
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
684
	}
24123 tejbeer 685
 
24106 tejbeer 686
	@RequestMapping(value = "/featurePanel", method = RequestMethod.GET)
25371 tejbeer 687
	public String FeaturePanel(HttpServletRequest request, Model model) throws Exception {
21987 kshitij.so 688
 
24106 tejbeer 689
		List<TagRanking> tagRanking = null;
25362 tejbeer 690
		tagRanking = tagRankingRepository.getAllTagRanking();
24106 tejbeer 691
		LOGGER.info("tagRanking" + tagRanking);
692
		if (!tagRanking.isEmpty()) {
25371 tejbeer 693
			Set<Integer> catalogIds = tagRanking.stream().map(x -> x.getCatalogItemId()).collect(Collectors.toSet());
24798 tejbeer 694
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds);
695
			Map<Integer, String> catalogDescription = items.stream().collect(Collectors.toMap(x -> x.getCatalogItemId(),
696
					x -> x.getItemDescription(), (description1, description2) -> description1));
697
 
698
			LOGGER.info("catalogDescription" + catalogDescription);
24465 tejbeer 699
			model.addAttribute("tagRanking", tagRanking);
24798 tejbeer 700
			model.addAttribute("catalogDescription", catalogDescription);
24106 tejbeer 701
 
702
		} else {
703
			model.addAttribute("tagRanking", tagRanking);
25362 tejbeer 704
 
24106 tejbeer 705
		}
706
 
707
		return "feature";
708
 
709
	}
24123 tejbeer 710
 
26279 amit.gupta 711
	@PostMapping(value = "/imei/upload")
26294 amit.gupta 712
	public String uploadContent(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
26279 amit.gupta 713
			throws Exception {
26482 tejbeer 714
		/*
715
		 * if(brand==null) { throw new
716
		 * ProfitMandiBusinessException("Please select brand", "Brand empty",
717
		 * "Brand required"); }
718
		 */
26279 amit.gupta 719
		List<CSVRecord> masterDataList = readFile(file);
720
 
26482 tejbeer 721
		Map<String, LocalDateTime> imeisActivationMap = masterDataList.stream()
722
				.collect(Collectors.toMap(x -> x.get(0).trim(), x -> {
723
					if (!StringUtils.isEmpty(x.get(1).trim())) {
724
						return LocalDateTime.parse((String) (x.get(1).trim()), formatter);
26299 amit.gupta 725
					} else {
726
						return null;
727
					}
728
				}));
729
		inventoryService.addActivatedImeis(imeisActivationMap);
730
		model.addAttribute("response", true);
26294 amit.gupta 731
		return "response";
26279 amit.gupta 732
	}
733
 
734
	private List<CSVRecord> readFile(MultipartFile file) throws Exception {
735
		List<CSVRecord> records = null;
736
		try (CSVParser parser = new CSVParser(new InputStreamReader(file.getInputStream()), CSVFormat.DEFAULT)) {
737
			records = parser.getRecords();
738
			if (records.size() < 2) {
739
				throw new ProfitMandiBusinessException("Uploaded File", "", "No records Found");
740
			}
741
			records.remove(0);
26482 tejbeer 742
		} catch (Exception e) {
26279 amit.gupta 743
			throw new ProfitMandiBusinessException("Parsing Failed", "parse failed", "file parse failed");
744
		}
745
		return records;
746
	}
747
 
24106 tejbeer 748
	@RequestMapping(value = "/itemfeature", method = RequestMethod.POST)
24123 tejbeer 749
	public String Itemfeature(HttpServletRequest request, @RequestBody ItemFeatureDataModel itemFeatureDatatModel,
750
			Model model) throws Exception {
25371 tejbeer 751
		TagRanking tagRanking = tagRankingRepository.selectBycatalogItemId(itemFeatureDatatModel.getCatalogItemId());
752
		LOGGER.info("tagRanking" + tagRanking);
753
		if (tagRanking == null) {
754
			tagRanking = new TagRanking();
755
			tagRanking.setCatalogItemId(itemFeatureDatatModel.getCatalogItemId());
25363 tejbeer 756
		}
24106 tejbeer 757
		tagRanking.setFeature(itemFeatureDatatModel.getFeature());
25363 tejbeer 758
		tagRanking.setRankPoints(itemFeatureDatatModel.getRankPoints());
25371 tejbeer 759
 
24123 tejbeer 760
		tagRankingRepository.persist(tagRanking);
24106 tejbeer 761
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
762
		return "response";
763
	}
764
 
24798 tejbeer 765
	@RequestMapping(value = "/removeFeature", method = RequestMethod.DELETE)
766
	public String removeTagRankingEnteries(HttpServletRequest request,
767
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
24917 tejbeer 768
 
24798 tejbeer 769
		tagRankingRepository.deleteById(id);
770
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
771
		return "response";
772
	}
773
 
24465 tejbeer 774
	@RequestMapping(value = "/getDemolistbyfofoId", method = RequestMethod.GET)
775
	public String DemoListbyFofoId(HttpServletRequest request,
776
			@RequestParam(required = false, defaultValue = "0") int fofoId, Model model) throws Exception {
777
 
778
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
779
				.collect(Collectors.toList());
780
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
781
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
782
		List<String> serailNumberList = liveDemoBillingRespository.selectAllSerialNumber();
783
		LOGGER.info("serailNumberList" + serailNumberList);
784
		List<InventoryItem> inventoryItem = null;
785
		List<InventoryItem> inventoryItem1 = new ArrayList<>();
786
		if (fofoId > 0) {
787
			List<Item> items = itemRepository.selectAllByBrand("Live Demo");
788
			Set<Integer> itemIds = new HashSet<>();
789
			for (Item Item : items) {
790
				itemIds.add(Item.getId());
791
			}
792
			inventoryItem = inventoryItemRepository.selectByFofoIdItemIds(fofoId, itemIds);
793
 
794
			Set<String> serial = new HashSet<>();
795
			for (InventoryItem invItem : inventoryItem) {
24658 tejbeer 796
				if (!serailNumberList.contains(invItem.getSerialNumber())) {
24465 tejbeer 797
					inventoryItem1.add(invItem);
25371 tejbeer 798
 
24465 tejbeer 799
				}
800
 
801
			}
802
 
803
			LOGGER.info("inventoyItem" + inventoryItem1);
804
			model.addAttribute("customRetailers", customRetailers);
25371 tejbeer 805
 
24465 tejbeer 806
			model.addAttribute("liveDemo", inventoryItem1);
807
			CustomRetailer fofoIdsAndRetailerName = retailerService.getFofoRetailer(fofoId);
808
 
809
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
810
 
811
		}
812
 
813
		else {
814
			model.addAttribute("customRetailers", customRetailers);
815
			model.addAttribute("liveDemo", inventoryItem1);
816
		}
817
 
818
		return "live_demo_billing";
819
 
820
	}
821
 
822
	@RequestMapping(value = "/enableliveDemoSerailNumber", method = RequestMethod.POST)
823
	public String EnableliveDemoSerailNumber(HttpServletRequest request, @RequestParam String serial_number,
824
			Model model) throws Exception {
825
 
826
		LiveDemoSerialNumber liveDemoSerialNumber = new LiveDemoSerialNumber();
827
		liveDemoSerialNumber.setSerialNumber(serial_number);
828
 
829
		liveDemoBillingRespository.persist(liveDemoSerialNumber);
830
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
831
		return "response";
832
	}
833
 
24739 tejbeer 834
	@RequestMapping(value = "/getInProcessOrder", method = RequestMethod.GET)
835
	public String getInProcessOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
836
 
837
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 838
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24917 tejbeer 839
		List<Integer> retailerIds = new ArrayList<>();
840
		List<Integer> orderIds = new ArrayList<>();
841
		if (!inProcessorder.isEmpty()) {
842
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
843
				retailerIds.add(order.getRetailerId());
844
				orderIds.add(order.getId());
24739 tejbeer 845
 
24917 tejbeer 846
			}
24739 tejbeer 847
 
25640 tejbeer 848
			List<NotifyOrder> notify = notifyOrderRespository.selectByorderIds(orderIds);
849
			for (NotifyOrder notifyOrder : notify) {
25449 tejbeer 850
 
25640 tejbeer 851
				Order orderdetail = orderRepository.selectById(notifyOrder.getOrderId());
25449 tejbeer 852
				if (!orderdetail.getStatus().equals(OrderStatus.SUBMITTED_FOR_PROCESSING)) {
25640 tejbeer 853
					notifyOrder.setStatus(NotifyStatus.rejected);
25449 tejbeer 854
				}
25640 tejbeer 855
			}
24950 tejbeer 856
 
24917 tejbeer 857
			Map<Integer, Optional<NotifyOrder>> notifyOrders = notifyOrderRespository.selectByorderIds(orderIds)
858
					.stream().collect(Collectors.groupingBy(NotifyOrder::getOrderId,
859
							Collectors.maxBy((x1, x2) -> x1.getId() - x2.getId())));
24950 tejbeer 860
 
26110 tejbeer 861
			Map<Integer, NotifyCancel> notifyCancelOrders = notifyCancelOrderRepository.selectByOrderIds(orderIds)
862
					.stream().collect(Collectors.toMap(x -> x.getOrderId(), x -> x));
24917 tejbeer 863
			Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
864
					.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
865
 
866
			model.addAttribute("inProcessorder", inProcessorder);
867
			model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
868
			model.addAttribute("latestNotifyOrders", notifyOrders);
26110 tejbeer 869
			model.addAttribute("notifyCancelOrders", notifyCancelOrders);
24917 tejbeer 870
		} else {
871
			model.addAttribute("inProcessorder", inProcessorder);
872
		}
24739 tejbeer 873
		return "review_order";
874
	}
875
 
28109 tejbeer 876
	@RequestMapping(value = "/getPaymentPendingOrder", method = RequestMethod.GET)
877
	public String getPaymentPendingOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
878
 
879
		List<com.spice.profitmandi.dao.entity.transaction.Order> pendingPaymentorder = orderRepository
880
				.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusMonths(3), LocalDateTime.now(),
881
						OrderStatus.PAYMENT_PENDING);
882
		List<com.spice.profitmandi.dao.entity.transaction.Order> failedPaymentorder = orderRepository
883
				.selectAllOrderDatesBetweenByStatus(LocalDateTime.now().minusMonths(3), LocalDateTime.now(),
884
						OrderStatus.PAYMENT_FAILED);
885
		pendingPaymentorder.addAll(failedPaymentorder);
886
		model.addAttribute("pendingPaymentorder", pendingPaymentorder);
887
 
888
		return "payment-pending-order";
889
	}
890
 
24739 tejbeer 891
	@RequestMapping(value = "/getKeepInTabOrder", method = RequestMethod.GET)
892
	public String getKeepInTabOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
893
 
894
		List<com.spice.profitmandi.dao.entity.transaction.Order> keepatab = orderRepository
895
				.selectAllOrder(OrderStatus.KEEP_A_TAB);
896
 
897
		model.addAttribute("keepatab", keepatab);
898
 
899
		return "keep-a-tab";
900
	}
901
 
902
	@RequestMapping(value = "/closeOrder", method = RequestMethod.POST)
903
	public String closeOrder(HttpServletRequest request, @RequestParam int orderId, Model model) throws Exception {
24798 tejbeer 904
 
24739 tejbeer 905
		Order order = orderRepository.selectById(orderId);
24798 tejbeer 906
		if (order != null) {
24739 tejbeer 907
			order.setStatus(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
24798 tejbeer 908
 
24739 tejbeer 909
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
910
 
24798 tejbeer 911
		} else {
24739 tejbeer 912
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
913
 
914
		}
915
		return "response";
24658 tejbeer 916
	}
917
 
25640 tejbeer 918
	@RequestMapping(value = "/getcancelOrderItems", method = RequestMethod.GET)
919
	public String getcancelOrderItems(HttpServletRequest request, @RequestParam int itemId, Model model)
920
			throws Exception {
921
 
922
		List<Order> inProcessselectedOrder = orderRepository.selectByItemIdOrderStatus(itemId,
923
				OrderStatus.SUBMITTED_FOR_PROCESSING);
924
 
925
		List<Integer> retailerIds = new ArrayList<>();
926
		for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessselectedOrder) {
927
			retailerIds.add(order.getRetailerId());
928
 
929
		}
930
 
931
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
932
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
933
 
934
		model.addAttribute("inProcessCancelOrder", inProcessselectedOrder);
935
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
936
 
937
		return "cancel-order-modal";
938
	}
939
 
24739 tejbeer 940
	@RequestMapping(value = "/cancelOrder", method = RequestMethod.POST)
25640 tejbeer 941
	public String cancelOrder(HttpServletRequest request, @RequestBody OrderCancellationModel orderCancellationModel,
942
			Model model) throws Exception {
24739 tejbeer 943
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
25640 tejbeer 944
		LOGGER.info("orderId" + orderCancellationModel.getOrderIds());
945
 
24739 tejbeer 946
		try {
25699 tejbeer 947
			// List<Order> orders =
948
			// orderRepository.selectByOrderIds(orderCancellationModel.getOrderIds());
25640 tejbeer 949
 
25699 tejbeer 950
			List<Order> orders = orderRepository.selectByOrderIdsOrdersStatus(orderCancellationModel.getOrderIds(),
951
					OrderStatus.SUBMITTED_FOR_PROCESSING);
952
			if (!orders.isEmpty()) {
953
				for (Order order : orders) {
25640 tejbeer 954
 
25699 tejbeer 955
					orderRepository.refundOrder(order.getId(), loginDetails.getEmailId(),
956
							orderCancellationModel.getReason(), OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
957
					List<NotifyOrder> notifyOrders = notifyOrderRespository.selectByOrder(order.getId());
958
					for (NotifyOrder notifyOrder : notifyOrders) {
959
						if (notifyOrder.getStatus() == NotifyStatus.pending) {
960
							notifyOrder.setStatus(NotifyStatus.rejected);
961
						}
25449 tejbeer 962
					}
25699 tejbeer 963
					sendCancellationNotificationToPartner(order, orderCancellationModel.getReason());
964
					model.addAttribute("response", mvcResponseSender.createResponseString(true));
965
 
25640 tejbeer 966
				}
967
			}
24739 tejbeer 968
		} catch (TransactionServiceException | TException e) {
969
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
970
 
971
		}
25640 tejbeer 972
 
24739 tejbeer 973
		return "response";
974
	}
975
 
25039 amit.gupta 976
	private void sendCancellationNotificationToPartner(Order order, String reason) throws Exception {
977
		Item item = itemRepository.selectById(order.getLineItem().getItemId());
25383 tejbeer 978
 
25851 amit.gupta 979
		SendNotificationModel sendNotificationModel = new SendNotificationModel();
980
		sendNotificationModel.setCampaignName("Order Cancellation");
981
		sendNotificationModel.setTitle(String.format("Order %s %d(Pcs) cancelled", item.getItemDescription(),
25140 amit.gupta 982
				order.getLineItem().getQuantity()));
25851 amit.gupta 983
		sendNotificationModel.setType("url");
984
		sendNotificationModel.setMessage(reason);
26482 tejbeer 985
		sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/orderDetails");
25851 amit.gupta 986
		sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
987
		sendNotificationModel.setMessageType(MessageType.notification);
25857 tejbeer 988
		int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
25873 tejbeer 989
		sendNotificationModel.setUserIds(Arrays.asList(userId));
25851 amit.gupta 990
		notificationService.sendNotification(sendNotificationModel);
25140 amit.gupta 991
 
25039 amit.gupta 992
	}
993
 
24917 tejbeer 994
	@RequestMapping(value = "/getNotifyItemColor", method = RequestMethod.GET)
995
	public String getNotifyItemColor(HttpServletRequest request, @RequestParam int catalogItemId,
996
			@RequestParam int itemId, Model model) throws ProfitMandiBusinessException {
997
 
24950 tejbeer 998
		List<Item> availableColorItems = itemRepository.selectAllByCatalogItemId(catalogItemId);
999
		Iterator<Item> itemsIterator = availableColorItems.iterator();
24917 tejbeer 1000
 
24950 tejbeer 1001
		while (itemsIterator.hasNext()) {
1002
			Item item = itemsIterator.next();
1003
			TagListing itemTagListing = tagListingRepository.selectByItemId(item.getId());
1004
 
1005
			if (itemTagListing == null) {
1006
				itemsIterator.remove();
1007
 
1008
			}
1009
 
1010
			else if (!itemTagListing.isActive()) {
1011
				itemsIterator.remove();
1012
 
1013
			}
1014
		}
1015
 
24917 tejbeer 1016
		List<Order> inProcessselectedOrder = orderRepository.selectByItemIdOrderStatus(itemId,
1017
				OrderStatus.SUBMITTED_FOR_PROCESSING);
1018
		List<Integer> retailerIds = new ArrayList<>();
1019
 
1020
		for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessselectedOrder) {
1021
			retailerIds.add(order.getRetailerId());
1022
 
1023
		}
1024
 
1025
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
1026
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
24950 tejbeer 1027
		LOGGER.info("item" + availableColorItems);
1028
		model.addAttribute("item", availableColorItems);
24917 tejbeer 1029
		model.addAttribute("inProcessselectedOrder", inProcessselectedOrder);
1030
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
1031
 
1032
		return "notify-order-modal";
1033
	}
1034
 
1035
	@RequestMapping(value = "/notifyOrder", method = RequestMethod.POST)
1036
	public String NotifyOrder(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel, Model model)
1037
			throws Exception {
1038
 
1039
		com.spice.profitmandi.dao.entity.transaction.NotifyItem notifyItem = null;
1040
		List<Integer> orderIds = new ArrayList<>();
1041
 
1042
		NotifyColorChange notifytimestamp = new NotifyColorChange();
1043
		notifytimestamp.setCreated(LocalDateTime.now());
1044
		notifyColorChangeRepository.persist(notifytimestamp);
25066 tejbeer 1045
		NotifyMessage notifyMessage = new NotifyMessage();
1046
		notifyMessage.setNotifyId(notifytimestamp.getId());
1047
		notifyMessage.setNotifyMessages(notifyOrderModel.getMessage());
25140 amit.gupta 1048
		notifyMessageRepository.persist(notifyMessage);
24917 tejbeer 1049
		for (NotifyItemIdModel itemid : notifyOrderModel.getItemIds()) {
1050
 
1051
			notifyItem = new com.spice.profitmandi.dao.entity.transaction.NotifyItem();
1052
			notifyItem.setItemId(itemid.getItemId());
1053
			notifyItem.setResponseTime(itemid.getResponseTime());
1054
			notifyItem.setProcuredDate(itemid.getProcuredTime());
1055
			notifyItem.setNotifyColorchangeId(notifytimestamp.getId());
1056
			notifyItemRepository.persist(notifyItem);
1057
			LOGGER.info("notifyItem" + notifyItem);
1058
		}
1059
		for (NotifyOrderIdModel st : notifyOrderModel.getOrderIds()) {
1060
			List<NotifyOrder> existingOrder = notifyOrderRespository.selectByOrder(st.getOrderId());
24950 tejbeer 1061
			if (!existingOrder.isEmpty()) {
24917 tejbeer 1062
				LOGGER.info("existingOrder" + existingOrder);
24950 tejbeer 1063
				for (NotifyOrder notifyOrder : existingOrder) {
1064
					if (NotifyStatus.pending == notifyOrder.getStatus()) {
1065
						notifyOrder.setStatus(NotifyStatus.rejected);
26105 tejbeer 1066
						notifyOrder.setUpdateTimestamp(LocalDateTime.now());
24950 tejbeer 1067
					}
24917 tejbeer 1068
				}
1069
			}
1070
			NotifyOrder orderStatus = new NotifyOrder();
1071
			orderStatus.setOrderId(st.getOrderId());
1072
			orderStatus.setNotifyId(notifytimestamp.getId());
1073
			orderStatus.setItemId(st.getOlditemId());
1074
			Order id = orderRepository.selectById(st.getOrderId());
1075
			orderStatus.setFofoId(id.getRetailerId());
1076
			orderStatus.setStatus(NotifyStatus.pending);
1077
			notifyOrderRespository.persist(orderStatus);
1078
 
1079
			LOGGER.info("itemStatus" + orderStatus);
1080
			orderIds.add(st.getOrderId());
1081
		}
1082
 
1083
		LOGGER.info("orderIds" + orderIds);
1084
		List<Order> orders = orderRepository.selectByOrderIds(orderIds);
1085
		for (Order order : orders) {
1086
			LOGGER.info("order" + order.getId());
1087
 
25140 amit.gupta 1088
			NotifyMessage message = notifyMessageRepository.selectByNotifyId(notifytimestamp.getId());
1089
 
25851 amit.gupta 1090
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
1091
			sendNotificationModel.setCampaignName("Notify Partner");
1092
			sendNotificationModel.setMessage(message.getNotifyMessages());
1093
			sendNotificationModel.setType("url");
1094
			sendNotificationModel.setTitle("Alert");
26959 tejbeer 1095
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifyOrder");
25851 amit.gupta 1096
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
1097
			sendNotificationModel.setMessageType(MessageType.notification);
25857 tejbeer 1098
			int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
25873 tejbeer 1099
 
1100
			sendNotificationModel.setUserIds(Arrays.asList(userId));
25851 amit.gupta 1101
			notificationService.sendNotification(sendNotificationModel);
25140 amit.gupta 1102
 
24917 tejbeer 1103
		}
1104
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1105
		return "response";
1106
	}
1107
 
1108
	@RequestMapping(value = "/getAllNotifyOrder", method = RequestMethod.GET)
1109
	public String getAllNotifyOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
24950 tejbeer 1110
		List<NotifyOrder> notifyOrders = null;
24917 tejbeer 1111
		List<com.spice.profitmandi.dao.entity.transaction.Order> inProcessorder = orderRepository
25067 tejbeer 1112
				.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24950 tejbeer 1113
 
24917 tejbeer 1114
		List<Integer> orderIds = new ArrayList<>();
24950 tejbeer 1115
		if (!inProcessorder.isEmpty()) {
24917 tejbeer 1116
			for (com.spice.profitmandi.dao.entity.transaction.Order order : inProcessorder) {
24950 tejbeer 1117
 
24917 tejbeer 1118
				orderIds.add(order.getId());
1119
 
24950 tejbeer 1120
			}
1121
			notifyOrders = notifyOrderRespository.selectByorderIds(orderIds);
1122
			Set<Integer> oldItemIds = new HashSet<>();
1123
			List<Integer> fofoIds = new ArrayList<>();
1124
			List<Integer> notifyIds = new ArrayList<>();
1125
			if (!notifyOrders.isEmpty()) {
1126
				for (NotifyOrder notifyOrder : notifyOrders) {
1127
					oldItemIds.add(notifyOrder.getItemId());
1128
					fofoIds.add(notifyOrder.getFofoId());
1129
					notifyIds.add(notifyOrder.getNotifyId());
24917 tejbeer 1130
				}
1131
 
24950 tejbeer 1132
				List<NotifyColorChange> notifyColorChanges = notifyColorChangeRepository.selectByNotifyId(notifyIds);
1133
				Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = this
1134
						.notifyOrdersToNotifyId(notifyColorChanges);
1135
				Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
1136
				Map<Integer, String> itemdescription = inventoryService.getItemIdDescriptionMap(oldItemIds);
24917 tejbeer 1137
 
24950 tejbeer 1138
				model.addAttribute("notifyOrders", notifyOrders);
1139
				model.addAttribute("notifyIdNotifyColorMap", notifyIdNotifyColorMap);
1140
				model.addAttribute("itemdescription", itemdescription);
1141
				model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
24917 tejbeer 1142
 
24950 tejbeer 1143
			} else {
1144
				model.addAttribute("notifyOrders", notifyOrders);
1145
			}
24917 tejbeer 1146
		} else {
1147
			model.addAttribute("notifyOrders", notifyOrders);
24950 tejbeer 1148
		}
24917 tejbeer 1149
		return "notify_order";
1150
	}
1151
 
1152
	private Map<Integer, NotifyColorChange> notifyOrdersToNotifyId(List<NotifyColorChange> notifyColorChanges) {
1153
		Map<Integer, NotifyColorChange> notifyIdNotifyColorMap = new HashMap<>();
1154
		for (NotifyColorChange notifyColorChange : notifyColorChanges) {
1155
			notifyIdNotifyColorMap.put(notifyColorChange.getId(), notifyColorChange);
1156
		}
1157
		return notifyIdNotifyColorMap;
1158
	}
1159
 
26031 tejbeer 1160
	@RequestMapping(value = "/getItems", method = RequestMethod.GET)
1161
	public String getItems(HttpServletRequest request, @RequestParam int catalogItemId, Model model) throws Exception {
1162
 
1163
		Set<Integer> itemIds = itemRepository.selectAllByCatalogItemId(catalogItemId).stream().map(x -> x.getId())
1164
				.collect(Collectors.toSet());
1165
 
1166
		List<Order> notAvailableProcessingOrder = orderRepository.selectByItemIdsOrderStatus(itemIds,
1167
				OrderStatus.SUBMITTED_FOR_PROCESSING);
1168
		LOGGER.info("notAvailableProcessingOrder" + notAvailableProcessingOrder);
1169
 
1170
		List<Integer> retailerIds = new ArrayList<>();
1171
		for (com.spice.profitmandi.dao.entity.transaction.Order order : notAvailableProcessingOrder) {
1172
			retailerIds.add(order.getRetailerId());
1173
 
1174
		}
1175
 
1176
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
1177
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
1178
 
1179
		model.addAttribute("notAvailableProcessingOrder", notAvailableProcessingOrder);
1180
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
1181
 
1182
		return "partner-cancel-order-modal";
1183
	}
1184
 
1185
	@RequestMapping(value = "/notifyCancelOrder", method = RequestMethod.POST)
1186
	public String NotifyCancelOrder(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel,
1187
			Model model) throws Exception {
1188
		for (NotifyOrderIdModel st : notifyOrderModel.getOrderIds()) {
1189
			LOGGER.info("orderId" + st.getOrderId());
1190
			Order order = orderRepository.selectById(st.getOrderId());
26110 tejbeer 1191
			NotifyCancel nc = notifyCancelOrderRepository.selectByOrderId(st.getOrderId());
1192
			if (nc == null) {
1193
				nc = new NotifyCancel();
1194
				nc.setOrderId(st.getOrderId());
1195
				nc.setItemId(st.getOlditemId());
1196
				nc.setFofoId(order.getRetailerId());
1197
				nc.setCancellation(false);
1198
				nc.setCreatedTimestamp(LocalDateTime.now());
1199
				nc.setUpdatedTimestamp(LocalDateTime.now());
1200
				notifyCancelOrderRepository.persist(nc);
1201
			} else {
1202
				nc.setOrderId(st.getOrderId());
1203
				nc.setItemId(st.getOlditemId());
1204
				nc.setFofoId(order.getRetailerId());
1205
				nc.setCancellation(false);
1206
				nc.setUpdatedTimestamp(LocalDateTime.now());
1207
				notifyCancelOrderRepository.persist(nc);
1208
			}
26031 tejbeer 1209
 
1210
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
1211
			sendNotificationModel.setCampaignName("Notify Partner");
1212
			sendNotificationModel.setMessage(notifyOrderModel.getMessage());
1213
			sendNotificationModel.setType("url");
1214
			sendNotificationModel.setTitle("Alert");
26482 tejbeer 1215
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifyCancelOrder");
26031 tejbeer 1216
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(2));
1217
			sendNotificationModel.setMessageType(MessageType.notification);
1218
			int userId = userAccountRepository.selectUserIdByRetailerId(order.getRetailerId());
1219
 
1220
			sendNotificationModel.setUserIds(Arrays.asList(userId));
1221
			notificationService.sendNotification(sendNotificationModel);
1222
 
1223
		}
1224
 
1225
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1226
		return "response";
1227
	}
26039 tejbeer 1228
 
1229
	@RequestMapping(value = "/getNotifiedCancelOrder", method = RequestMethod.GET)
1230
	public String getNotifiedCancelOrder(HttpServletRequest request, Model model) throws Exception {
1231
 
1232
		List<NotifyCancel> notifyCancels = notifyCancelOrderRepository.selectAllNonCancelOrder();
1233
		if (!notifyCancels.isEmpty()) {
1234
			List<Integer> retailerIds = new ArrayList<>();
1235
			Set<Integer> itemIds = new HashSet<>();
1236
			for (NotifyCancel nc : notifyCancels) {
1237
				retailerIds.add(nc.getFofoId());
1238
				itemIds.add(nc.getItemId());
1239
			}
1240
 
1241
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(retailerIds);
1242
 
1243
			Map<Integer, String> itemdescription = inventoryService.getItemIdDescriptionMap(itemIds);
1244
			model.addAttribute("notifyCancels", notifyCancels);
1245
			model.addAttribute("itemdescription", itemdescription);
1246
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
1247
		} else {
1248
 
1249
			model.addAttribute("notifyCancels", notifyCancels);
1250
 
1251
		}
1252
		return "notify_cancel";
1253
	}
1254
 
1255
	@RequestMapping(value = "/getNotifyItems", method = RequestMethod.GET)
1256
	public String getNotifyItems(HttpServletRequest request, @RequestParam int itemId, Model model) throws Exception {
1257
		Item item = itemRepository.selectById(itemId);
1258
 
1259
		List<Integer> itemIds = itemRepository.selectAllByCatalogItemId(item.getCatalogItemId()).stream()
1260
				.map(x -> x.getId()).collect(Collectors.toList());
1261
 
1262
		List<NotifyCancel> ncs = notifyCancelOrderRepository.selectByItemIdsAndStatus(itemIds);
1263
		List<Integer> retailerIds = new ArrayList<>();
1264
		Map<Integer, Object> orders = new HashMap<>();
1265
		for (NotifyCancel nc : ncs) {
1266
			retailerIds.add(nc.getFofoId());
1267
			Order od = orderRepository.selectById(nc.getOrderId());
1268
			orders.put(nc.getOrderId(), od);
1269
		}
1270
 
1271
		Map<Integer, String> storeIdAndFofoIdMap = fofoStoreRepository.selectByRetailerIds(retailerIds).stream()
1272
				.collect(Collectors.toMap(FofoStore::getId, FofoStore::getCode));
1273
 
1274
		model.addAttribute("notifyItems", ncs);
1275
		model.addAttribute("orders", orders);
1276
		model.addAttribute("storeIdAndFofoIdMap", storeIdAndFofoIdMap);
1277
 
1278
		return "notify_cancel_order_modal";
1279
	}
1280
 
1281
	@RequestMapping(value = "/changeNotifyCancelRequest", method = RequestMethod.POST)
1282
	public String changeNotifyCancelRequest(HttpServletRequest request, @RequestBody NotifyOrderModel notifyOrderModel,
1283
			Model model) throws Exception {
1284
		List<Integer> orderIds = notifyOrderModel.getOrderIds().stream().map(x -> x.getOrderId())
1285
				.collect(Collectors.toList());
1286
 
1287
		List<NotifyCancel> ncs = notifyCancelOrderRepository.selectByOrderIds(orderIds);
1288
		for (NotifyCancel nc : ncs) {
1289
			nc.setCancellation(true);
1290
		}
1291
 
1292
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1293
		return "response";
1294
	}
26482 tejbeer 1295
 
1296
	@RequestMapping(value = "/getProducts", method = RequestMethod.GET)
1297
	public String getProducts(HttpServletRequest request, Model model)
1298
			throws ProfitMandiBusinessException, URISyntaxException, IOException {
1299
 
1300
		return "product-detail";
1301
	}
1302
 
1303
	@RequestMapping(value = "/getProductInfo", method = RequestMethod.GET)
1304
	public String getProductInfo(HttpServletRequest request, long catalogId, Model model) throws Exception {
1305
		ContentPojo cp = mongoClient.getEntityById(catalogId);
26493 tejbeer 1306
		model.addAttribute("cp", cp);
1307
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
26482 tejbeer 1308
		return "product-info";
1309
	}
26493 tejbeer 1310
 
1311
	@RequestMapping(value = "/getProductCompareInfo", method = RequestMethod.GET)
26512 amit.gupta 1312
	public String getProductCompareInfo(HttpServletRequest request, @RequestParam List<Long> catalogIds, Model model)
26493 tejbeer 1313
			throws Exception {
1314
		List<ContentPojo> cps = new ArrayList<>();
27583 tejbeer 1315
		Set<Integer> cataogIds = catalogIds.stream().mapToInt(Long::intValue).boxed().collect(Collectors.toSet());
27596 tejbeer 1316
		LOGGER.info("tagListingMOP" + cataogIds);
26512 amit.gupta 1317
		for (Long cId : catalogIds) {
1318
			ContentPojo cp = mongoClient.getEntityById(cId);
26959 tejbeer 1319
			if (cp.getName() == null) {
26512 amit.gupta 1320
				cp.setName(itemRepository.selectAllByCatalogItemId(cId.intValue()).get(0).getItemDescriptionNoColor());
1321
			}
27583 tejbeer 1322
			List<Item> items = itemRepository.selectAllByCatalogItemId(cId.intValue());
27596 tejbeer 1323
			LOGGER.info("itemsMop" + items);
27618 tejbeer 1324
			int i = 0;
1325
			for (Item item : items) {
1326
				TagListing tagListing = tagListingRepository.selectByItemId(items.get(i).getId());
1327
 
1328
				if (tagListing != null) {
1329
					cp.setPrice(tagListing.getMop());
1330
 
1331
					LOGGER.info("tagListingMOP" + tagListing);
1332
 
1333
					break;
1334
 
1335
				}
1336
				i++;
27596 tejbeer 1337
			}
27618 tejbeer 1338
			cps.add(cp);
27583 tejbeer 1339
 
26493 tejbeer 1340
		}
26959 tejbeer 1341
 
26498 amit.gupta 1342
		List<Map<String, String>> entityList = new ArrayList<>();
26959 tejbeer 1343
		for (ContentPojo cp : cps) {
26498 amit.gupta 1344
			Map<String, String> specsMap = new HashMap<>();
26959 tejbeer 1345
			for (SpecificationGroup sg : cp.getDetailedSpecs()) {
26498 amit.gupta 1346
				String title = sg.getTitle();
26959 tejbeer 1347
				for (Specification s : sg.getSpecs()) {
26498 amit.gupta 1348
					String key = title + s.getName();
1349
					specsMap.put(key, String.join(", ", s.getValues()));
1350
				}
1351
			}
1352
			entityList.add(specsMap);
27723 tejbeer 1353
 
26498 amit.gupta 1354
		}
26959 tejbeer 1355
 
26493 tejbeer 1356
		LOGGER.info("cps" + cps);
26959 tejbeer 1357
		model.addAttribute("cps", cps);
1358
		model.addAttribute("catalogIds", gson.toJson(catalogIds, List.class));
1359
		model.addAttribute("entityList", entityList);
26493 tejbeer 1360
		return "product-compare";
1361
	}
27723 tejbeer 1362
 
1363
	@RequestMapping(value = "/inventory", method = RequestMethod.GET)
1364
	public String Inventory(HttpServletRequest request,
1365
			@RequestParam(name = "warehouseIds", required = true, defaultValue = "0") List<Integer> warehouseIds,
1366
			Model model) throws Exception {
1367
		model.addAttribute("warehouseId", warehouseIds);
1368
		LOGGER.info("warehouseIds" + warehouseIds);
1369
 
1370
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
1371
		if (warehouseIds.contains(0)) {
1372
			warehouseIds.addAll(warehouseMap.keySet());
1373
		}
1374
 
27739 tejbeer 1375
		long poTodayValue = 0;
1376
		long poThreedaysValue = 0;
1377
		long poSevendaysValue = 0;
1378
		long poTodayQty = 0;
1379
		long poThreedaysQty = 0;
1380
		long poSevendaysQty = 0;
1381
 
27723 tejbeer 1382
		List<OpenPoModel> openPO = warehousePurchaseOrderRepository.selectOpenPol(warehouseIds);
27739 tejbeer 1383
		for (OpenPoModel po : openPO) {
1384
			poTodayValue += po.getTodayValue();
1385
			poThreedaysValue += po.getThreedaysValue();
1386
			poSevendaysValue += po.getSevendaysValue();
1387
			poTodayQty += po.getTodayQty();
1388
			poThreedaysQty += po.getThreedaysQty();
1389
			poSevendaysQty += po.getSevendaysQty();
1390
		}
1391
		OpenPoModel poModel = new OpenPoModel();
1392
		poModel.setBrand("Total Values");
1393
		poModel.setTodayValue(poTodayValue);
1394
		poModel.setThreedaysValue(poThreedaysValue);
1395
		poModel.setSevendaysValue(poSevendaysValue);
1396
		poModel.setSevendaysQty(poSevendaysQty);
1397
		poModel.setThreedaysQty(poThreedaysQty);
1398
		poModel.setTodayQty(poTodayQty);
1399
		openPO.add(poModel);
1400
 
1401
		long purtodayValue = 0;
1402
		long purthreedaysValue = 0;
27749 tejbeer 1403
		long purlmsValue = 0;
27739 tejbeer 1404
		long purmtd = 0;
1405
		long purtodayQty = 0;
1406
		long purthreedaysQty = 0;
27749 tejbeer 1407
		long purlmsQty = 0;
27739 tejbeer 1408
		long purmtdQty = 0;
1409
 
27723 tejbeer 1410
		List<OurPurchaseModel> purchase = warehouseScanRepository.selectOurPurchase(warehouseIds);
27739 tejbeer 1411
 
1412
		for (OurPurchaseModel pm : purchase) {
1413
			purtodayValue += pm.getTodayValue();
1414
			purthreedaysValue += pm.getThreedaysValue();
27749 tejbeer 1415
			purlmsValue += pm.getLms();
27739 tejbeer 1416
			purmtd += pm.getMtd();
1417
			purtodayQty += pm.getTodayQty();
27749 tejbeer 1418
			purthreedaysQty += pm.getThreedaysQty();
1419
			purlmsQty += pm.getLmsQty();
27739 tejbeer 1420
			purmtdQty += pm.getMtdQty();
1421
		}
1422
		OurPurchaseModel omp = new OurPurchaseModel();
1423
		omp.setBrand("Total Values");
1424
		omp.setTodayValue(purtodayValue);
1425
		omp.setThreedaysValue(purthreedaysValue);
27749 tejbeer 1426
		omp.setLms(purlmsValue);
27739 tejbeer 1427
		omp.setMtd(purmtd);
1428
		omp.setTodayQty(purtodayQty);
1429
		omp.setThreedaysQty(purthreedaysQty);
27749 tejbeer 1430
		omp.setLmsQty(purlmsQty);
27739 tejbeer 1431
		omp.setMtdQty(purmtdQty);
1432
		purchase.add(omp);
27749 tejbeer 1433
 
27723 tejbeer 1434
		List<BrandWiseTertiaryModel> tertiary = fofoOrderRepository.selectGroupByBrandPartnerTertiary(warehouseIds);
27739 tejbeer 1435
		long tertodayValue = 0;
1436
		long terthreedaysValue = 0;
1437
		long termtd = 0;
1438
		long terlmtd = 0;
27749 tejbeer 1439
		long terlms = 0;
27739 tejbeer 1440
		long tertodayQty = 0;
1441
		long terthreedaysQty = 0;
1442
		long termtdQty = 0;
1443
		long terlmtdQty = 0;
27749 tejbeer 1444
		long terlmsQty = 0;
27739 tejbeer 1445
		for (BrandWiseTertiaryModel btm : tertiary) {
1446
			tertodayValue += btm.getTodayValue();
1447
			terthreedaysValue += btm.getThreedaysValue();
1448
			termtd += btm.getMtd();
1449
			terlmtd += btm.getLmtd();
27749 tejbeer 1450
			terlms += btm.getLms();
27739 tejbeer 1451
			tertodayQty += btm.getTodayQty();
1452
			terthreedaysQty += btm.getThreedaysQty();
1453
			termtdQty += btm.getMtdQty();
1454
			terlmtdQty += btm.getLmtdQty();
27749 tejbeer 1455
			terlmsQty += btm.getLmsQty();
27739 tejbeer 1456
		}
1457
		BrandWiseTertiaryModel bwt = new BrandWiseTertiaryModel();
1458
		bwt.setBrand("Total Values");
1459
		bwt.setTodayValue(tertodayValue);
1460
		bwt.setThreedaysValue(terthreedaysValue);
1461
		bwt.setMtd(termtd);
1462
		bwt.setLmtd(terlmtd);
27749 tejbeer 1463
		bwt.setLms(terlms);
27739 tejbeer 1464
		bwt.setTodayQty(tertodayQty);
1465
		bwt.setThreedaysQty(terthreedaysQty);
1466
		bwt.setMtdQty(termtdQty);
1467
		bwt.setLmtdQty(terlmtdQty);
27749 tejbeer 1468
		bwt.setLmsQty(terlmsQty);
27739 tejbeer 1469
		tertiary.add(bwt);
27749 tejbeer 1470
 
27723 tejbeer 1471
		List<SecondaryOrderBillingModel> billing = orderRepository.selectAllBilledOrderGroupByBrand(warehouseIds);
27739 tejbeer 1472
		long sectodayValue = 0;
1473
		long secthreedaysValue = 0;
1474
		long secmtd = 0;
1475
		long seclmtd = 0;
27749 tejbeer 1476
		long seclms = 0;
27739 tejbeer 1477
		long sectodayQty = 0;
1478
		long secthreedaysQty = 0;
1479
		long secmtdQty = 0;
1480
		long seclmtdQty = 0;
27749 tejbeer 1481
		long seclmsQty = 0;
27739 tejbeer 1482
		for (SecondaryOrderBillingModel sbm : billing) {
1483
			sectodayValue += sbm.getTodayValue();
1484
			secthreedaysValue += sbm.getThreedaysValue();
1485
			secmtd += sbm.getMtd();
1486
			seclmtd += sbm.getLmtd();
27749 tejbeer 1487
			seclms += sbm.getLms();
27739 tejbeer 1488
			sectodayQty += sbm.getTodayQty();
1489
			secthreedaysQty += sbm.getThreedaysQty();
1490
			secmtdQty += sbm.getMtdQty();
1491
			seclmtdQty += sbm.getLmtdQty();
27749 tejbeer 1492
			seclmsQty += sbm.getLmsQty();
27739 tejbeer 1493
		}
1494
 
1495
		SecondaryOrderBillingModel som = new SecondaryOrderBillingModel();
1496
		som.setBrand("Total Values");
1497
		som.setTodayValue(sectodayValue);
1498
		som.setThreedaysValue(secthreedaysValue);
1499
		som.setMtd(secmtd);
1500
		som.setLmtd(seclmtd);
27749 tejbeer 1501
		som.setLms(seclms);
27739 tejbeer 1502
		som.setTodayQty(sectodayQty);
1503
		som.setThreedaysQty(secthreedaysQty);
1504
		som.setMtdQty(secmtdQty);
1505
		som.setLmtdQty(seclmtdQty);
27749 tejbeer 1506
		som.setLmsQty(seclmsQty);
27739 tejbeer 1507
		billing.add(som);
27723 tejbeer 1508
		LOGGER.info("openPO" + openPO);
1509
		LOGGER.info("purchase" + purchase);
1510
		LOGGER.info("tertiary" + tertiary);
1511
		LOGGER.info("billing" + billing);
1512
 
1513
		LOGGER.info("warehouseIds" + warehouseIds);
1514
		model.addAttribute("warehouseMap", warehouseMap);
1515
		model.addAttribute("openPO", openPO);
1516
		model.addAttribute("purchase", purchase);
1517
		model.addAttribute("tertiary", tertiary);
1518
		model.addAttribute("billing", billing);
1519
 
1520
		return "inventory-listing";
1521
 
1522
	}
27738 tejbeer 1523
 
1524
	@RequestMapping(value = "/getOpenPoItemByBrand", method = RequestMethod.GET)
1525
	public String Inventory(HttpServletRequest request,
1526
			@RequestParam(name = "warehouseIds", required = true, defaultValue = "0") List<Integer> warehouseIds,
27749 tejbeer 1527
			@RequestParam(name = "brand", required = true, defaultValue = "") List<String> brand, int timeValue,
1528
			Model model) throws Exception {
27738 tejbeer 1529
		model.addAttribute("warehouseId", warehouseIds);
1530
		LOGGER.info("warehouseIds" + warehouseIds);
1531
 
1532
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
1533
		if (warehouseIds.contains(0)) {
1534
			warehouseIds.addAll(warehouseMap.keySet());
1535
		}
27749 tejbeer 1536
		LOGGER.info("brand" + brand);
1537
 
1538
		if (brand.contains("Total Values")) {
1539
			List<String> poBrands = warehousePurchaseOrderRepository.selectOpenPol(warehouseIds).stream()
1540
					.map(x -> x.getBrand()).collect(Collectors.toList());
1541
 
1542
			brand.addAll(poBrands);
1543
		}
1544
 
1545
		LOGGER.info("brand" + brand);
27738 tejbeer 1546
		LocalDateTime curDate = LocalDate.now().atStartOfDay();
1547
		List<OpenPoItemModel> openPOItem = null;
1548
		if (timeValue != 0) {
1549
			openPOItem = warehousePurchaseOrderRepository.selectOpenPoItem(warehouseIds, brand,
1550
					curDate.minusDays(timeValue), curDate);
1551
		} else {
1552
			openPOItem = warehousePurchaseOrderRepository.selectTodayOpenPoItem(warehouseIds, brand, curDate);
1553
		}
1554
		LOGGER.info("openPOItem" + openPOItem);
1555
 
1556
		model.addAttribute("openPOItem", openPOItem);
1557
 
1558
		return "inventory-listing-po-item";
1559
 
1560
	}
1561
 
1562
	@RequestMapping(value = "/getOurPurchaseItemByBrand", method = RequestMethod.GET)
1563
	public String getOurPurchaseItemByBrand(HttpServletRequest request,
1564
			@RequestParam(name = "warehouseIds", required = true, defaultValue = "0") List<Integer> warehouseIds,
27749 tejbeer 1565
			@RequestParam(name = "brand", required = true, defaultValue = "") List<String> brand, int timeValue,
1566
			Model model) throws Exception {
27738 tejbeer 1567
		model.addAttribute("warehouseId", warehouseIds);
1568
		LOGGER.info("warehouseIds" + warehouseIds);
1569
 
1570
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
1571
		if (warehouseIds.contains(0)) {
1572
			warehouseIds.addAll(warehouseMap.keySet());
1573
		}
1574
		LocalDateTime curDate = LocalDate.now().atStartOfDay();
27749 tejbeer 1575
 
1576
		if (brand.contains("Total Values")) {
1577
			List<String> purchasebrands = warehouseScanRepository.selectOurPurchase(warehouseIds).stream()
1578
					.map(x -> x.getBrand()).collect(Collectors.toList());
1579
 
1580
			brand.addAll(purchasebrands);
1581
		}
27738 tejbeer 1582
		List<OurPurchaseItemModel> ourPurchaseItem = null;
1583
		if (timeValue != 0) {
27749 tejbeer 1584
			if (timeValue == 1) {
27738 tejbeer 1585
				ourPurchaseItem = warehouseScanRepository.selectOurPurchaseItemByBrand(warehouseIds, brand,
27749 tejbeer 1586
						curDate.withDayOfMonth(1), curDate.plusDays(1));
1587
 
1588
			} else if (timeValue == -1) {
1589
 
1590
				ourPurchaseItem = warehouseScanRepository.selectOurPurchaseItemByBrand(warehouseIds, brand,
1591
						curDate.minusMonths(1).withDayOfMonth(1), curDate.withDayOfMonth(1));
1592
 
27738 tejbeer 1593
			} else {
1594
				ourPurchaseItem = warehouseScanRepository.selectOurPurchaseItemByBrand(warehouseIds, brand,
27749 tejbeer 1595
						curDate.minusDays(timeValue), curDate);
1596
 
27738 tejbeer 1597
			}
1598
		} else {
1599
			ourPurchaseItem = warehouseScanRepository.selectTodayOurPurchaseItemByBrand(warehouseIds, brand, curDate);
1600
		}
1601
		LOGGER.info("ourPurchaseItem" + ourPurchaseItem);
1602
 
1603
		model.addAttribute("ourPurchaseItem", ourPurchaseItem);
27749 tejbeer 1604
		model.addAttribute("warehouseMap", warehouseMap);
27738 tejbeer 1605
 
1606
		return "inventory-listing-purchase-item";
1607
 
1608
	}
1609
 
27867 tejbeer 1610
	@RequestMapping(value = "/getWarehouseWiseSecondaryBillingByBrand", method = RequestMethod.GET)
1611
	public String getWarehouseWiseSecondaryBillingByBrand(HttpServletRequest request,
1612
			@RequestParam(name = "brand", required = true, defaultValue = "") String brand, int timeValue, Model model)
1613
			throws Exception {
27738 tejbeer 1614
 
1615
		LocalDateTime curDate = LocalDate.now().atStartOfDay();
27749 tejbeer 1616
		int dayOfMonth = curDate.getDayOfMonth();
1617
		LocalDateTime startOfMonth = curDate.withDayOfMonth(1);
1618
		int lengthOfMonth = YearMonth.from(startOfMonth.minusMonths(1)).lengthOfMonth();
1619
 
27867 tejbeer 1620
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
1621
		SecondaeryOrderDateRange sr = null;
1622
		if (brand.equals("Total Values")) {
1623
			brand = null;
27749 tejbeer 1624
		}
27738 tejbeer 1625
		if (timeValue != 0) {
1626
			if (timeValue == 1) {
1627
 
27867 tejbeer 1628
				sr = getSecondaryModel(brand, curDate.withDayOfMonth(1), curDate.plusDays(1));
1629
 
27738 tejbeer 1630
			} else if (timeValue == 2) {
27749 tejbeer 1631
				LOGGER.info("curDate" + curDate.withDayOfMonth(1).minusMonths(1));
1632
				LOGGER.info("curDate" + curDate.minusMonths(1).plusDays(Math.min(dayOfMonth, lengthOfMonth)));
1633
 
27867 tejbeer 1634
				sr = getSecondaryModel(brand, curDate.withDayOfMonth(1).minusMonths(1),
27749 tejbeer 1635
						startOfMonth.minusMonths(1).plusDays(Math.min(dayOfMonth, lengthOfMonth)));
27867 tejbeer 1636
 
27749 tejbeer 1637
			} else if (timeValue == -1) {
27867 tejbeer 1638
 
1639
				sr = getSecondaryModel(brand, curDate.minusMonths(1).withDayOfMonth(1), startOfMonth);
1640
 
27749 tejbeer 1641
			} else {
27738 tejbeer 1642
 
27867 tejbeer 1643
				sr = getSecondaryModel(brand, curDate.minusDays(timeValue), curDate);
27738 tejbeer 1644
			}
1645
 
1646
		} else {
27867 tejbeer 1647
			sr = getSecondaryModel(brand, curDate, curDate.plusDays(1));
27738 tejbeer 1648
		}
1649
 
27867 tejbeer 1650
		Map<BrandRegionModel, Map<LocalDate, SecondaryWarehouseWiseOrderBilllingModel>> brandWarehouseOrderMap = sr
1651
				.getSecondaryModel().stream()
1652
				.collect(Collectors.groupingBy(x -> new BrandRegionModel(x.getWarehouseId(), x.getBrand()),
1653
						Collectors.collectingAndThen(Collectors.toList(),
1654
								x -> x.stream().collect(Collectors.toMap(y -> y.getBillingTimestamp(), y -> y)))));
27738 tejbeer 1655
 
27893 tejbeer 1656
		Map<LocalDate, Integer> dateWiseTotal = sr.getSecondaryModel().stream().collect(
1657
				Collectors.groupingBy(x -> x.getBillingTimestamp(), Collectors.summingInt(x -> (int) x.getValue())));
1658
 
1659
		Map<LocalDate, Integer> dateWiseQtyTotal = sr.getSecondaryModel().stream().collect(
1660
				Collectors.groupingBy(x -> x.getBillingTimestamp(), Collectors.summingInt(x -> (int) x.getQty())));
1661
 
1662
		LOGGER.info("dateWiseTotal" + dateWiseTotal);
1663
 
27867 tejbeer 1664
		brandWarehouseOrderMap.entrySet().stream().forEach(x -> {
27893 tejbeer 1665
			x.getKey().setTotal(x.getValue().entrySet().stream()
1666
					.collect(Collectors.summingInt(y -> (int) y.getValue().getValue())));
27867 tejbeer 1667
		});
1668
 
27893 tejbeer 1669
		brandWarehouseOrderMap.entrySet().stream().forEach(x -> {
1670
			x.getKey().setQty(
1671
					x.getValue().entrySet().stream().collect(Collectors.summingInt(y -> (int) y.getValue().getQty())));
1672
		});
27867 tejbeer 1673
		LOGGER.info("brandWarehouseOrderMap" + brandWarehouseOrderMap);
1674
 
1675
		model.addAttribute("brandWarehouseOrderMap", brandWarehouseOrderMap);
27893 tejbeer 1676
		model.addAttribute("dateWiseTotal", dateWiseTotal);
1677
		model.addAttribute("dateWiseQtyTotal", dateWiseQtyTotal);
27867 tejbeer 1678
		model.addAttribute("dateRange", sr.getDateRange());
1679
		model.addAttribute("warehouseMap", warehouseMap);
1680
		return "secondary-warehouse-billing-order";
1681
 
1682
	}
1683
 
1684
	public SecondaeryOrderDateRange getSecondaryModel(String brand, LocalDateTime startDate, LocalDateTime endDate) {
1685
 
1686
		SecondaeryOrderDateRange sr = new SecondaeryOrderDateRange();
1687
		List<SecondaryWarehouseWiseOrderBilllingModel> secondaryOrderbilling = orderRepository
1688
				.selectAllBilledOrderGroupByBrandWarehouse(brand, startDate, endDate).stream()
1689
				.sorted(Comparator.comparing(SecondaryWarehouseWiseOrderBilllingModel::getBillingTimestamp))
1690
				.collect(Collectors.toList());
1691
		long noOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);
1692
 
1693
		List<LocalDate> dateRange = Stream.iterate(startDate.toLocalDate(), date -> date.plusDays(1))
1694
				.limit(noOfDaysBetween).collect(Collectors.toList());
1695
 
1696
		sr.setDateRange(dateRange);
1697
		sr.setSecondaryModel(secondaryOrderbilling);
1698
 
1699
		return sr;
1700
 
1701
	}
1702
 
1703
	@RequestMapping(value = "/getSecondaryBillingItemByBrand", method = RequestMethod.GET)
1704
	public String getSecondaryBillingItemByBrand(HttpServletRequest request,
1705
			@RequestParam(name = "warehouseId", required = true, defaultValue = "0") int warehouseId,
1706
			@RequestParam(name = "brand", required = true, defaultValue = "") String brand,
27893 tejbeer 1707
			@RequestParam List<LocalDate> date, Model model) throws Exception {
27867 tejbeer 1708
 
1709
		List<SecondaryOrderItemBillingModel> orderItemBilling = orderRepository
1710
				.selectAllBilledOrderItemByBrand(warehouseId, brand, date);
1711
 
1712
		LOGGER.info("orderItemBilling" + orderItemBilling);
1713
		model.addAttribute("billedItem", orderItemBilling);
1714
		model.addAttribute("date", date);
1715
		model.addAttribute("brand", brand);
27738 tejbeer 1716
		return "inventory-listing-billing-item";
1717
 
1718
	}
1719
 
1720
	@RequestMapping(value = "/getPartnerTertiaryItemByBrand", method = RequestMethod.GET)
1721
	public String getPartnerTertiaryItemByBrand(HttpServletRequest request,
1722
			@RequestParam(name = "warehouseIds", required = true, defaultValue = "0") List<Integer> warehouseIds,
27749 tejbeer 1723
			@RequestParam(name = "brand", required = true, defaultValue = "") List<String> brand, int timeValue,
1724
			Model model) throws Exception {
27738 tejbeer 1725
		model.addAttribute("warehouseId", warehouseIds);
1726
		LOGGER.info("warehouseIds" + warehouseIds);
1727
 
1728
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
1729
		if (warehouseIds.contains(0)) {
1730
			warehouseIds.addAll(warehouseMap.keySet());
1731
		}
1732
		LocalDateTime curDate = LocalDate.now().atStartOfDay();
1733
		int dayOfMonth = curDate.getDayOfMonth();
1734
		LocalDateTime startOfMonth = curDate.withDayOfMonth(1);
27749 tejbeer 1735
		int lengthOfMonth = YearMonth.from(startOfMonth.minusMonths(1)).lengthOfMonth();
1736
		if (brand.contains("Total Values")) {
1737
			List<String> tertiaryBrands = fofoOrderRepository.selectGroupByBrandPartnerTertiary(warehouseIds).stream()
1738
					.map(x -> x.getBrand()).collect(Collectors.toList());
27738 tejbeer 1739
 
27749 tejbeer 1740
			brand.addAll(tertiaryBrands);
1741
		}
27738 tejbeer 1742
		List<BrandItemWiseTertiaryModel> tertiaryItem = null;
1743
		if (timeValue != 0) {
1744
			if (timeValue == 1) {
27749 tejbeer 1745
 
27738 tejbeer 1746
				tertiaryItem = fofoOrderRepository.selectItemPartnerTertiaryByBrand(warehouseIds, brand,
1747
						curDate.withDayOfMonth(1), curDate.plusDays(1));
1748
 
1749
			} else if (timeValue == 2) {
27749 tejbeer 1750
				LOGGER.info("curDate" + startOfMonth.minusMonths(1));
1751
				LOGGER.info("curDate" + startOfMonth.minusMonths(1).plusDays(Math.min(dayOfMonth, lengthOfMonth)));
27738 tejbeer 1752
 
1753
				tertiaryItem = fofoOrderRepository.selectItemPartnerTertiaryByBrand(warehouseIds, brand,
27749 tejbeer 1754
						startOfMonth.minusMonths(1),
27738 tejbeer 1755
						startOfMonth.minusMonths(1).plusDays(Math.min(dayOfMonth, lengthOfMonth)));
1756
 
27749 tejbeer 1757
			} else if (timeValue == -1) {
1758
				LOGGER.info("date" + curDate.minusMonths(1).withDayOfMonth(1));
1759
				LOGGER.info("date" + curDate.minusMonths(1).withDayOfMonth(lengthOfMonth).plusDays(1));
1760
 
1761
				tertiaryItem = fofoOrderRepository.selectItemPartnerTertiaryByBrand(warehouseIds, brand,
1762
						curDate.minusMonths(1).withDayOfMonth(1), startOfMonth);
27738 tejbeer 1763
			} else {
1764
				tertiaryItem = fofoOrderRepository.selectItemPartnerTertiaryByBrand(warehouseIds, brand,
1765
						curDate.minusDays(timeValue), curDate);
1766
			}
1767
 
1768
		} else {
1769
			tertiaryItem = fofoOrderRepository.selectTodayItemPartnerTertiaryByBrand(warehouseIds, brand, curDate);
1770
		}
1771
		LOGGER.info("tertiaryItem" + tertiaryItem);
1772
 
1773
		model.addAttribute("tertiaryItem", tertiaryItem);
1774
 
1775
		return "inventory-item-tertiary-item";
1776
 
1777
	}
28701 tejbeer 1778
 
1779
	@RequestMapping(value = "/planogram")
1780
	public String Planogram(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1781
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1782
		String email = loginDetails.getEmailId();
1783
		AuthUser authUser = authRepository.selectByEmailOrMobile(email);
1784
		List<FocusedModelByPassRequest> byPassRequest = null;
1785
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1786
 
1787
		Set<Integer> authfofoIds = null;
1788
 
1789
		List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
1790
 
1791
		if (emails.contains(authUser.getEmailId())) {
1792
			authfofoIds = storeGuyMap.get("tarun.verma@smartdukaan.com");
1793
			LOGGER.info("fofoIds" + authfofoIds);
1794
		} else {
1795
 
1796
			for (Position ps : positions) {
1797
				if (esclationType.contains(ps.getEscalationType())) {
1798
					authfofoIds = storeGuyMap.get(email);
1799
					break;
1800
				}
1801
 
1802
			}
1803
		}
1804
		if (authfofoIds != null) {
1805
			byPassRequest = focusedModelByPassRepository.selectByStatusAndFofoIds(new ArrayList<>(authfofoIds),
1806
					ByPassRequestStatus.PENDING);
1807
		}
1808
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1809
		model.addAttribute("customRetailerMap", customRetailerMap);
1810
		model.addAttribute("byPassRequest", byPassRequest);
1811
		return "planogram";
1812
	}
1813
 
1814
	@RequestMapping(value = "/byPassRequestAction", method = RequestMethod.PUT)
1815
	public String addAmountToWalletRequestRejected(HttpServletRequest request,
1816
			@RequestParam(name = "id", defaultValue = "0") int id, @RequestParam ByPassRequestStatus status,
1817
			Model model) throws Exception {
1818
 
1819
		FocusedModelByPassRequest byPassRequest = focusedModelByPassRepository.selectById(id);
1820
		if (status.equals(ByPassRequestStatus.APPROVED)) {
1821
			byPassRequest.setByPass(true);
1822
			byPassRequest.setStatus(ByPassRequestStatus.APPROVED);
1823
			byPassRequest.setUpdatedTimestamp(LocalDateTime.now());
1824
		} else if (status.equals(ByPassRequestStatus.REJECTED)) {
1825
			byPassRequest.setByPass(false);
1826
			byPassRequest.setStatus(ByPassRequestStatus.REJECTED);
1827
			byPassRequest.setUpdatedTimestamp(LocalDateTime.now());
1828
		}
1829
 
1830
		SendNotificationModel sendNotificationModel = new SendNotificationModel();
28714 tejbeer 1831
		sendNotificationModel.setCampaignName("Billing Request");
1832
		sendNotificationModel.setTitle("Billing Request");
1833
		sendNotificationModel.setMessage(String.format("Your Billing  Request is " + " " + status
1834
				+ "Please ensure to order the missing focus models as soon as possible"));
28701 tejbeer 1835
		sendNotificationModel.setType("url");
1836
		sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
1837
		sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
1838
		sendNotificationModel.setMessageType(MessageType.notification);
1839
		sendNotificationModel
1840
				.setUserIds(Arrays.asList(userAccountRepository.selectUserIdByRetailerId(byPassRequest.getFofoId())));
1841
 
1842
		notificationService.sendNotification(sendNotificationModel);
1843
 
1844
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1845
		return "response";
1846
	}
1847
 
28754 tejbeer 1848
	@RequestMapping(value = "/highDemandItem", method = RequestMethod.GET)
1849
	public String highDemandItem(HttpServletRequest request, Model model) throws Exception {
1850
		List<HighDemandItem> hdis = highDemandItemsRepository.selectAll();
1851
		if (!hdis.isEmpty()) {
1852
			Map<Integer, Item> itemMap = this.getItemByCatalogId(hdis);
1853
			model.addAttribute("itemMap", itemMap);
1854
		}
1855
 
1856
		model.addAttribute("hdis", hdis);
1857
 
1858
		return "high_demand_item";
1859
	}
1860
 
1861
	private Map<Integer, Item> getItemByCatalogId(List<HighDemandItem> hdis) {
1862
		Map<Integer, Item> itemMap = new HashMap<>();
1863
		for (HighDemandItem hdi : hdis) {
1864
			List<Item> items = itemRepository.selectAllByCatalogItemId(hdi.getCatalogId());
1865
			itemMap.put(items.get(0).getCatalogItemId(), items.get(0));
1866
		}
1867
 
1868
		return itemMap;
1869
	}
1870
 
1871
	@RequestMapping(value = "/addHighDemandItem", method = RequestMethod.POST)
1872
	public String addHighDemandItem(HttpServletRequest request, @RequestParam int catalogId, @RequestParam int qty,
1873
			Model model) throws Exception {
1874
		HighDemandItem hdi = highDemandItemsRepository.selectByFofoIdAndCatalogId(catalogId);
1875
 
1876
		if (hdi == null) {
1877
			hdi = new HighDemandItem();
1878
			hdi.setCatalogId(catalogId);
1879
			hdi.setQty(qty);
1880
			hdi.setCreateTimestamp(LocalDateTime.now());
1881
			hdi.setUpdateTimestamp(LocalDateTime.now());
1882
			highDemandItemsRepository.persist(hdi);
1883
		}
1884
 
1885
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1886
		return "response";
1887
	}
1888
 
1889
	@RequestMapping(value = "/removeHighDemandItem", method = RequestMethod.DELETE)
1890
	public String removeHighDemandItem(HttpServletRequest request,
1891
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
1892
		highDemandItemsRepository.deleteById(id);
1893
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1894
		return "response";
1895
	}
1896
 
27867 tejbeer 1897
}