Subversion Repositories SmartDukaan

Rev

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