Subversion Repositories SmartDukaan

Rev

Rev 24276 | Rev 24312 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21615 kshitij.so 1
package com.spice.profitmandi.web.controller;
2
 
23568 govind 3
import java.io.IOException;
4
import java.net.URISyntaxException;
24288 amit.gupta 5
import java.time.DayOfWeek;
6
import java.time.LocalDate;
24276 amit.gupta 7
import java.time.LocalDateTime;
24288 amit.gupta 8
import java.time.temporal.TemporalAdjusters;
9
import java.time.temporal.WeekFields;
10
import java.util.Collection;
23884 amit.gupta 11
import java.util.List;
24288 amit.gupta 12
import java.util.stream.Collectors;
23568 govind 13
 
22086 amit.gupta 14
import javax.servlet.http.HttpServletRequest;
15
 
24288 amit.gupta 16
import org.apache.commons.lang3.StringUtils;
23786 amit.gupta 17
import org.apache.logging.log4j.LogManager;
23568 govind 18
import org.apache.logging.log4j.Logger;
24288 amit.gupta 19
import org.apache.solr.common.util.Utils;
22481 ashik.ali 20
import org.springframework.beans.factory.annotation.Autowired;
23379 ashik.ali 21
import org.springframework.beans.factory.annotation.Value;
21615 kshitij.so 22
import org.springframework.stereotype.Controller;
22481 ashik.ali 23
import org.springframework.transaction.annotation.Transactional;
22073 ashik.ali 24
import org.springframework.ui.Model;
21615 kshitij.so 25
import org.springframework.web.bind.annotation.RequestMapping;
26
import org.springframework.web.bind.annotation.RequestMethod;
24098 tejbeer 27
import org.springframework.web.bind.annotation.RequestParam;
21615 kshitij.so 28
 
22481 ashik.ali 29
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
24203 amit.gupta 30
import com.spice.profitmandi.common.model.ProfitMandiConstants;
24098 tejbeer 31
import com.spice.profitmandi.dao.entity.dtr.NotificationData;
22654 ashik.ali 32
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24288 amit.gupta 33
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
23884 amit.gupta 34
import com.spice.profitmandi.dao.entity.transaction.Order;
22481 ashik.ali 35
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24098 tejbeer 36
import com.spice.profitmandi.dao.repository.dtr.NotificationPanelRepository;
24203 amit.gupta 37
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
24288 amit.gupta 38
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
24271 amit.gupta 39
import com.spice.profitmandi.dao.repository.fofo.PurchaseReturnItemRepository;
23884 amit.gupta 40
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
23844 amit.gupta 41
import com.spice.profitmandi.service.authentication.RoleManager;
23884 amit.gupta 42
import com.spice.profitmandi.service.inventory.InventoryService;
24271 amit.gupta 43
import com.spice.profitmandi.service.slab.TargetSlabService;
23884 amit.gupta 44
import com.spice.profitmandi.service.transaction.TransactionService;
45
import com.spice.profitmandi.service.wallet.WalletService;
22481 ashik.ali 46
import com.spice.profitmandi.web.model.LoginDetails;
47
import com.spice.profitmandi.web.util.CookiesProcessor;
24263 tejbeer 48
import com.spice.profitmandi.web.util.MVCResponseSender;
22481 ashik.ali 49
 
21615 kshitij.so 50
@Controller
22481 ashik.ali 51
@Transactional(rollbackFor = Throwable.class)
21615 kshitij.so 52
public class DashboardController {
23923 amit.gupta 53
 
23379 ashik.ali 54
	@Value("${web.api.host}")
55
	private String webApiHost;
23923 amit.gupta 56
 
24072 amit.gupta 57
	@Value("${web.api.scheme}")
58
	private String webApiScheme;
24288 amit.gupta 59
 
24078 amit.gupta 60
	@Value("${web.api.root}")
61
	private String webApiRoot;
62
 
23379 ashik.ali 63
	@Value("${web.api.port}")
64
	private int webApiPort;
21615 kshitij.so 65
 
22481 ashik.ali 66
	@Autowired
22927 ashik.ali 67
	private CookiesProcessor cookiesProcessor;
23923 amit.gupta 68
 
23568 govind 69
	@Autowired
23786 amit.gupta 70
	private RoleManager roleManager;
23923 amit.gupta 71
 
23838 ashik.ali 72
	@Autowired
73
	private FofoStoreRepository fofoStoreRepository;
23884 amit.gupta 74
 
75
	@Autowired
76
	private WalletService walletService;
23923 amit.gupta 77
 
23884 amit.gupta 78
	@Autowired
79
	private InventoryService inventoryService;
24288 amit.gupta 80
 
24271 amit.gupta 81
	@Autowired
82
	private TargetSlabService targetSlabService;
23923 amit.gupta 83
 
23884 amit.gupta 84
	@Autowired
85
	private OrderRepository orderRepository;
24288 amit.gupta 86
 
23951 amit.gupta 87
	@Autowired
24271 amit.gupta 88
	private PurchaseReturnItemRepository purchaseReturnItemRepository;
24288 amit.gupta 89
 
90
	@Autowired
91
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
92
 
23923 amit.gupta 93
	/*
94
	 * @Autowired private ScanRepository scanRepository;
95
	 */
96
 
23884 amit.gupta 97
	@Autowired
98
	private TransactionService transactionService;
24263 tejbeer 99
 
24098 tejbeer 100
	@Autowired
24263 tejbeer 101
	private MVCResponseSender mvcResponseSender;
102
 
103
	@Autowired
24098 tejbeer 104
	private NotificationPanelRepository notificationPanelRepository;
23923 amit.gupta 105
 
24203 amit.gupta 106
	@Autowired
107
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
108
 
23568 govind 109
	private static final Logger LOGGER = LogManager.getLogger(DashboardController.class);
23923 amit.gupta 110
 
21615 kshitij.so 111
	@RequestMapping(value = "/dashboard", method = RequestMethod.GET)
24098 tejbeer 112
	public String dashboard(HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset,
113
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
23923 amit.gupta 114
			throws ProfitMandiBusinessException, URISyntaxException, IOException {
115
		// LOGGER.info("scanRepository.selectScansByInventoryItemId(1)",
116
		// scanRepository.selectScansByInventoryItemId(1));
23884 amit.gupta 117
		LOGGER.info("In Dashboard");
22927 ashik.ali 118
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23923 amit.gupta 119
 
22481 ashik.ali 120
		FofoStore fofoStore = null;
121
		try {
22927 ashik.ali 122
			fofoStore = fofoStoreRepository.selectByRetailerId(loginDetails.getFofoId());
22481 ashik.ali 123
		} catch (ProfitMandiBusinessException e) {
22927 ashik.ali 124
			LOGGER.error("FofoStore Code not found of fofoId {}", loginDetails.getFofoId());
22481 ashik.ali 125
		}
23884 amit.gupta 126
 
23923 amit.gupta 127
		float walletAmount = 0;
128
		float inStockAmount = 0;
129
		float unbilledStockAmount = 0;
130
		float grnPendingStockAmount = 0;
131
		float shortPercentage = 100;
132
		float totalInvestedAmount = 0;
23936 tejbeer 133
		float minimumInvestment = 0;
24271 amit.gupta 134
		float returnedStockInTransit=0;
135
		float sale=0;
23923 amit.gupta 136
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
137
			model.addAttribute("showAlert", false);
24263 tejbeer 138
			model.addAttribute("sale", sale);
139
			List<NotificationData> notificationData = null;
140
			long size = 0;
141
 
142
			notificationData = notificationPanelRepository.selectAllNotificationData(offset, limit);
143
			size = notificationPanelRepository.selectAllCount();
144
			LOGGER.info("notification_data {}", notificationData);
145
 
146
			LOGGER.info("notification_data {}", size);
147
 
148
			if (!notificationData.isEmpty()) {
149
 
150
				model.addAttribute("notificationData", notificationData);
151
				LOGGER.info("notificationdata", notificationData);
152
				model.addAttribute("start", offset + 1);
153
				model.addAttribute("size", size);
154
				model.addAttribute("url", "/getPaginatedNotificationData");
155
 
156
				LOGGER.info("start {}", offset + 1);
157
				LOGGER.info("SIZE {}", size);
158
 
159
				if (notificationData.size() < limit) {
160
					model.addAttribute("end", offset + notificationData.size());
161
					LOGGER.info("SIZE2 {}", offset + notificationData.size());
162
				} else {
163
					model.addAttribute("end", offset + limit);
164
 
165
					LOGGER.info("end {}", size);
166
 
167
				}
168
 
169
			} else {
170
 
171
				model.addAttribute("notificationData", notificationData);
172
				model.addAttribute("size", size);
173
				LOGGER.info("sizeOriginal {}", size);
174
 
175
			}
23923 amit.gupta 176
		} else if (roleManager.isPartner(loginDetails.getRoleIds())) {
177
			walletAmount = walletService.getUserWallet(loginDetails.getFofoId()).getAmount();
178
			inStockAmount = inventoryService.getTotalAmountInStock(loginDetails.getFofoId());
24271 amit.gupta 179
 
23884 amit.gupta 180
			List<Order> unbilledOrders = transactionService.getInTransitOrders(loginDetails.getFofoId());
23923 amit.gupta 181
			for (Order unBilledOrder : unbilledOrders) {
23884 amit.gupta 182
				unbilledStockAmount += unBilledOrder.getTotalAmount();
183
			}
184
 
23904 amit.gupta 185
			List<Order> grnPendingOrders = orderRepository.selectPendingGrnOrders(loginDetails.getFofoId());
23923 amit.gupta 186
			for (Order grnPendingOrder : grnPendingOrders) {
23884 amit.gupta 187
				grnPendingStockAmount += grnPendingOrder.getTotalAmount();
188
			}
24271 amit.gupta 189
			totalInvestedAmount = walletAmount + inStockAmount + unbilledStockAmount + grnPendingStockAmount + sale;
23923 amit.gupta 190
			shortPercentage = ((fofoStore.getMinimumInvestment() - totalInvestedAmount)
191
					/ fofoStore.getMinimumInvestment()) * 100;
23944 amit.gupta 192
			model.addAttribute("showAlert", shortPercentage > 10);
23936 tejbeer 193
			minimumInvestment = fofoStore.getMinimumInvestment();
24263 tejbeer 194
 
195
			// debitNoteRepository.se
196
			List<NotificationData> notificationData = null;
197
			long size = 0;
198
 
199
			notificationData = notificationPanelRepository.selectAllNotificationDataByActiveFlag(offset, limit, true);
200
			size = notificationPanelRepository.selectCountByActiveFlag(true);
201
			LOGGER.info("notification_data {}", notificationData);
202
 
203
			LOGGER.info("notification_data {}", size);
204
 
205
			if (!notificationData.isEmpty()) {
206
 
207
				model.addAttribute("notificationData", notificationData);
208
				LOGGER.info("notificationdata", notificationData);
209
				model.addAttribute("start", offset + 1);
210
				model.addAttribute("size", size);
211
				model.addAttribute("url", "/getPaginatedNotificationData");
212
 
213
				LOGGER.info("start {}", offset + 1);
214
				LOGGER.info("SIZE {}", size);
215
 
216
				if (notificationData.size() < limit) {
217
					model.addAttribute("end", offset + notificationData.size());
218
					LOGGER.info("SIZE2 {}", offset + notificationData.size());
219
				} else {
220
					model.addAttribute("end", offset + limit);
221
 
222
					LOGGER.info("end {}", size);
223
 
224
				}
225
 
226
			} else {
227
 
228
				model.addAttribute("notificationData", notificationData);
229
				model.addAttribute("size", size);
230
				LOGGER.info("sizeOriginal {}", size);
231
 
232
			}
23884 amit.gupta 233
		}
24288 amit.gupta 234
		LocalDate endDate = LocalDate.now().minusDays(1);
235
		LocalDate weekStartDate = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
236
		LocalDate startDate = weekStartDate.minusWeeks(3);
237
		List<PartnerDailyInvestment> dailyInvestments = partnerDailyInvestmentRepository.selectAll(loginDetails.getFofoId(), startDate, endDate);
238
		Collection<Integer> investmentMaintained = dailyInvestments.stream().collect(Collectors.groupingBy(
239
				x->x.getDate().get(WeekFields.ISO.weekOfYear()), 
240
				Collectors.summingInt(x1-> {return x1.isComplete()?1:0;})
241
		)).values();
242
 
243
		model.addAttribute("investmentMaintained", Utils.toJSONString(investmentMaintained));
24271 amit.gupta 244
		model.addAttribute("sale", sale);
23923 amit.gupta 245
		model.addAttribute("walletAmount", walletAmount);
246
		model.addAttribute("inStockAmount", inStockAmount);
247
		model.addAttribute("unbilledStockAmount", unbilledStockAmount);
248
		model.addAttribute("grnPendingStockAmount", grnPendingStockAmount);
249
		model.addAttribute("shortPercentage", shortPercentage);
250
		model.addAttribute("totalInvestedAmount", totalInvestedAmount);
23936 tejbeer 251
		model.addAttribute("minimumInvestmentAmount", minimumInvestment);
23951 amit.gupta 252
		model.addAttribute("returnedStockInTransit", returnedStockInTransit);
23923 amit.gupta 253
 
23848 ashik.ali 254
		model.addAttribute("fofoStore", fofoStore);
23918 amit.gupta 255
		model.addAttribute("walletAmount");
22086 amit.gupta 256
		model.addAttribute("appContextPath", request.getContextPath());
23796 amit.gupta 257
		model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
23379 ashik.ali 258
		model.addAttribute("webApiHost", webApiHost);
259
		model.addAttribute("webApiPort", webApiPort);
24072 amit.gupta 260
		model.addAttribute("webApiScheme", webApiScheme);
24077 amit.gupta 261
		model.addAttribute("webApiRoot", webApiRoot);
24203 amit.gupta 262
		model.addAttribute("hasGift", hasGift(loginDetails.getFofoId()));
263
		model.addAttribute("giftItemId", ProfitMandiConstants.GIFT_ID);
24248 govind 264
		model.addAttribute("sale", sale);
24098 tejbeer 265
 
23923 amit.gupta 266
		// LOGGER.info("loginDetails.getFofoId()"+loginDetails.getFofoId());
267
		// inventoryService.prebookingAvailabilitySendMessage(loginDetails.getFofoId());
21615 kshitij.so 268
		return "dashboard";
269
	}
23923 amit.gupta 270
 
24288 amit.gupta 271
	// This method is currently hardcoded to faciliate watches sold as gift.
24203 amit.gupta 272
	private boolean hasGift(int fofoId) {
273
		try {
24288 amit.gupta 274
			return currentInventorySnapshotRepository.selectByItemIdAndFofoId(ProfitMandiConstants.GIFT_ID, fofoId)
275
					.getAvailability() > 0;
24203 amit.gupta 276
		} catch (ProfitMandiBusinessException e) {
277
			return false;
278
		}
279
	}
24288 amit.gupta 280
 
24098 tejbeer 281
	@RequestMapping(value = "/getPaginatedNotificationData", method = RequestMethod.GET)
282
	public String getPaginatedNotificationData(HttpServletRequest request,
283
			@RequestParam(name = "offset", defaultValue = "0") int offset,
284
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
24263 tejbeer 285
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24098 tejbeer 286
 
24263 tejbeer 287
		FofoStore fofoStore = null;
288
		try {
289
			fofoStore = fofoStoreRepository.selectByRetailerId(loginDetails.getFofoId());
290
		} catch (ProfitMandiBusinessException e) {
291
			LOGGER.error("FofoStore Code not found of fofoId {}", loginDetails.getFofoId());
292
		}
293
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
294
			List<NotificationData> notificationData = null;
24098 tejbeer 295
 
24263 tejbeer 296
			notificationData = notificationPanelRepository.selectAllNotificationData(offset, limit);
24098 tejbeer 297
 
24263 tejbeer 298
			LOGGER.info("notification_data {}", notificationData);
24098 tejbeer 299
 
24263 tejbeer 300
			if (!notificationData.isEmpty()) {
24098 tejbeer 301
 
24263 tejbeer 302
				model.addAttribute("notificationData", notificationData);
303
				model.addAttribute("url", "/getPaginatedNotificationData");
304
 
305
			} else {
306
				model.addAttribute("notificationData", notificationData);
307
 
308
			}
309
		} else if (roleManager.isPartner(loginDetails.getRoleIds())) {
310
 
311
			List<NotificationData> notificationData = null;
312
 
313
			notificationData = notificationPanelRepository.selectAllNotificationDataByActiveFlag(offset, limit, true);
314
			LOGGER.info("notification_data {}", notificationData);
315
 
316
			if (!notificationData.isEmpty()) {
317
 
318
				model.addAttribute("notificationData", notificationData);
319
				model.addAttribute("url", "/getPaginatedNotificationData");
320
 
321
			} else {
322
				model.addAttribute("notificationData", notificationData);
323
 
324
			}
24098 tejbeer 325
		}
326
 
327
		return "dashboard-paginated";
328
	}
24288 amit.gupta 329
 
22354 ashik.ali 330
	@RequestMapping(value = "/contactUs", method = RequestMethod.GET)
23923 amit.gupta 331
	public String contactUs(HttpServletRequest request, Model model) throws Throwable {
22354 ashik.ali 332
		model.addAttribute("appContextPath", request.getContextPath());
333
		return "contact-us";
334
	}
23923 amit.gupta 335
 
336
	/*
337
	 * private List<PaymentOption> getPaymentOptions(int fofoId){ List<Integer>
338
	 * paymentOptionIds =
24288 amit.gupta 339
	 * fofoPartnerPaymentOptionRepository.selectPaymentOptionIdsByFofoId(fofoId) ;
340
	 * if(paymentOptionIds.isEmpty()){ return new ArrayList<>(); } return
23923 amit.gupta 341
	 * paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds)); }
342
	 */
343
 
24263 tejbeer 344
	@RequestMapping(value = "/inactiveNotificationData", method = RequestMethod.POST)
345
	public String inactiveNotificationData(HttpServletRequest request,
346
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
347
 
348
		NotificationData notificationData = notificationPanelRepository.selectById(id);
349
		if (notificationData != null) {
350
 
351
			notificationData.setActive(false);
352
			LOGGER.info("notification" + notificationData);
353
			notificationPanelRepository.persist(notificationData);
354
 
355
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
356
		} else {
357
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
358
 
359
		}
360
		return "response";
361
	}
362
 
363
	@RequestMapping(value = "/activeNotificationData", method = RequestMethod.POST)
364
	public String activeNotificationData(HttpServletRequest request,
365
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
366
 
367
		NotificationData notificationData = notificationPanelRepository.selectById(id);
368
		if (notificationData != null) {
369
 
370
			notificationData.setActive(true);
371
			notificationData.setCreated_timestamp(LocalDateTime.now());
372
			LOGGER.info("notification" + notificationData);
373
			notificationPanelRepository.persist(notificationData);
374
 
375
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
376
		} else {
377
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
378
 
379
		}
380
		return "response";
381
	}
382
 
21615 kshitij.so 383
}