Subversion Repositories SmartDukaan

Rev

Rev 25214 | Rev 25217 | 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
 
24288 amit.gupta 3
import java.time.LocalDate;
24276 amit.gupta 4
import java.time.LocalDateTime;
24880 govind 5
import java.time.LocalTime;
24339 amit.gupta 6
import java.util.ArrayList;
25136 amit.gupta 7
import java.util.LinkedHashMap;
23884 amit.gupta 8
import java.util.List;
24880 govind 9
import java.util.Map;
10
import java.util.stream.Collectors;
23568 govind 11
 
22086 amit.gupta 12
import javax.servlet.http.HttpServletRequest;
13
 
23786 amit.gupta 14
import org.apache.logging.log4j.LogManager;
23568 govind 15
import org.apache.logging.log4j.Logger;
22481 ashik.ali 16
import org.springframework.beans.factory.annotation.Autowired;
23379 ashik.ali 17
import org.springframework.beans.factory.annotation.Value;
21615 kshitij.so 18
import org.springframework.stereotype.Controller;
22481 ashik.ali 19
import org.springframework.transaction.annotation.Transactional;
22073 ashik.ali 20
import org.springframework.ui.Model;
21615 kshitij.so 21
import org.springframework.web.bind.annotation.RequestMapping;
22
import org.springframework.web.bind.annotation.RequestMethod;
23
 
24996 amit.gupta 24
import com.mongodb.DBObject;
22481 ashik.ali 25
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
24996 amit.gupta 26
import com.spice.profitmandi.common.model.BrandStockPrice;
24203 amit.gupta 27
import com.spice.profitmandi.common.model.ProfitMandiConstants;
24880 govind 28
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
22654 ashik.ali 29
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24288 amit.gupta 30
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
25214 amit.gupta 31
import com.spice.profitmandi.dao.entity.fofo.PartnerTarget;
32
import com.spice.profitmandi.dao.entity.fofo.PartnerTargetDetails;
24880 govind 33
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
22481 ashik.ali 34
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24880 govind 35
import com.spice.profitmandi.dao.repository.dtr.InsurancePolicyRepository;
36
import com.spice.profitmandi.dao.repository.dtr.InsuranceProviderRepository;
24996 amit.gupta 37
import com.spice.profitmandi.dao.repository.dtr.Mongo;
24098 tejbeer 38
import com.spice.profitmandi.dao.repository.dtr.NotificationPanelRepository;
24880 govind 39
import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;
24203 amit.gupta 40
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
24880 govind 41
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
24288 amit.gupta 42
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
25214 amit.gupta 43
import com.spice.profitmandi.dao.repository.fofo.PartnerTargetRepository;
44
import com.spice.profitmandi.dao.repository.fofo.TargetSlabRepository;
24336 amit.gupta 45
import com.spice.profitmandi.service.PartnerInvestmentService;
23844 amit.gupta 46
import com.spice.profitmandi.service.authentication.RoleManager;
23884 amit.gupta 47
import com.spice.profitmandi.service.inventory.InventoryService;
25214 amit.gupta 48
import com.spice.profitmandi.service.slab.TargetSlabService;
23884 amit.gupta 49
import com.spice.profitmandi.service.transaction.TransactionService;
22481 ashik.ali 50
import com.spice.profitmandi.web.model.LoginDetails;
51
import com.spice.profitmandi.web.util.CookiesProcessor;
24263 tejbeer 52
import com.spice.profitmandi.web.util.MVCResponseSender;
22481 ashik.ali 53
 
21615 kshitij.so 54
@Controller
22481 ashik.ali 55
@Transactional(rollbackFor = Throwable.class)
21615 kshitij.so 56
public class DashboardController {
23923 amit.gupta 57
 
23379 ashik.ali 58
	@Value("${web.api.host}")
59
	private String webApiHost;
23923 amit.gupta 60
 
24072 amit.gupta 61
	@Value("${web.api.scheme}")
62
	private String webApiScheme;
24288 amit.gupta 63
 
24078 amit.gupta 64
	@Value("${web.api.root}")
65
	private String webApiRoot;
66
 
23379 ashik.ali 67
	@Value("${web.api.port}")
68
	private int webApiPort;
21615 kshitij.so 69
 
22481 ashik.ali 70
	@Autowired
22927 ashik.ali 71
	private CookiesProcessor cookiesProcessor;
23923 amit.gupta 72
 
23568 govind 73
	@Autowired
24880 govind 74
	private ItemRepository itemRepository;
75
 
76
	@Autowired
25214 amit.gupta 77
	private TargetSlabService targetSlabService;
78
 
79
	@Autowired
80
	private PartnerTargetRepository partnerTargetRepository;
81
 
82
	@Autowired
83
	private TargetSlabRepository targetSlabRepository;
84
 
85
	@Autowired
23786 amit.gupta 86
	private RoleManager roleManager;
23923 amit.gupta 87
 
23838 ashik.ali 88
	@Autowired
89
	private FofoStoreRepository fofoStoreRepository;
23884 amit.gupta 90
 
91
	@Autowired
24880 govind 92
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
23923 amit.gupta 93
 
23884 amit.gupta 94
	@Autowired
24880 govind 95
	private PartnerInvestmentService partnerInvestmentService;
24288 amit.gupta 96
 
23884 amit.gupta 97
	@Autowired
24880 govind 98
	private InsurancePolicyRepository insurancePolicyRepository;
23923 amit.gupta 99
	/*
100
	 * @Autowired private ScanRepository scanRepository;
101
	 */
24880 govind 102
	@Autowired
103
	private RechargeTransactionRepository rechargeTransactionRepository;
23923 amit.gupta 104
 
23884 amit.gupta 105
	@Autowired
106
	private TransactionService transactionService;
25136 amit.gupta 107
 
24996 amit.gupta 108
	@Autowired
109
	private InventoryService inventoryService;
24263 tejbeer 110
 
24098 tejbeer 111
	@Autowired
24263 tejbeer 112
	private MVCResponseSender mvcResponseSender;
113
 
114
	@Autowired
24098 tejbeer 115
	private NotificationPanelRepository notificationPanelRepository;
23923 amit.gupta 116
 
24203 amit.gupta 117
	@Autowired
118
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
119
 
24880 govind 120
	@Autowired
121
	private FofoOrderItemRepository fofoOrderItemRepository;
122
 
123
	@Autowired
124
	private InsuranceProviderRepository insuranceProviderRepository;
25136 amit.gupta 125
 
24996 amit.gupta 126
	@Autowired
127
	private Mongo mongoClient;
24880 govind 128
 
23568 govind 129
	private static final Logger LOGGER = LogManager.getLogger(DashboardController.class);
23923 amit.gupta 130
 
25136 amit.gupta 131
	@RequestMapping(value = "/12dashboard34", method = RequestMethod.GET)
25140 amit.gupta 132
	public String dashboard1(HttpServletRequest request, Model model) throws Exception {
25136 amit.gupta 133
		LOGGER.info("In Dashboard1");
134
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
25179 amit.gupta 135
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
136
		model.addAttribute("isAdmin", isAdmin);
25180 amit.gupta 137
		if (!isAdmin) {
25179 amit.gupta 138
			model.addAttribute("brandStockPrices", this.getBrandStockPrices(loginDetails.getFofoId()));
139
			model.addAttribute("salesMap", this.getSales(loginDetails.getFofoId()));
140
			model.addAttribute("investments", this.getInvestments(loginDetails.getFofoId()));
141
			return "dashboard1";
142
		}
25136 amit.gupta 143
		return "dashboard1";
144
	}
145
 
146
	private Map<String, Object> getInvestments(int fofoId) throws Exception {
147
		Map<String, Object> investments = new LinkedHashMap<>();
148
		PartnerDailyInvestment investment = partnerInvestmentService.getInvestment(fofoId, 1);
149
		LocalDate currentMonthStart = LocalDate.now().withDayOfMonth(1);
150
		LocalDate yesterDate = LocalDate.now().minusDays(1);
151
		PartnerDailyInvestment yesterdayInvestment = partnerDailyInvestmentRepository.select(fofoId, yesterDate);
152
		if (yesterdayInvestment == null) {
153
			yesterdayInvestment = new PartnerDailyInvestment();
154
		}
155
 
156
		List<PartnerDailyInvestment> currentMonthInvestments = partnerDailyInvestmentRepository.selectAll(fofoId,
157
				currentMonthStart, currentMonthStart.withDayOfMonth(currentMonthStart.lengthOfMonth()));
158
 
25140 amit.gupta 159
		long okInvestmentDays = currentMonthInvestments.stream().filter(x -> x.getShortPercentage() <= 10)
25136 amit.gupta 160
				.collect(Collectors.counting());
25140 amit.gupta 161
		investments.put("today", investment.getTotalInvestment());
162
		investments.put("investment", investment);
163
		investments.put("inStock", investment.getInStockAmount());
25182 amit.gupta 164
		investments.put("minimum", investment.getMinInvestmentString());
25140 amit.gupta 165
		investments.put("short", investment.getShortPercentage());
166
		investments.put("okDays", okInvestmentDays);
25136 amit.gupta 167
		return investments;
168
	}
169
 
25140 amit.gupta 170
	private Map<String, Double> getSales(int fofoId) {
171
		Map<String, Double> salesMap = new LinkedHashMap<>();
172
		LocalDateTime curDate = LocalDate.now().atStartOfDay();
25214 amit.gupta 173
		int monthLength = LocalDate.now().lengthOfMonth();
25140 amit.gupta 174
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectBetweenCreatedTime(fofoId, curDate,
175
				curDate.with(LocalTime.MAX));
176
		List<FofoOrderItem> mtdFofoOrderItems = fofoOrderItemRepository.selectBetweenCreatedTime(fofoId,
177
				curDate.withDayOfMonth(1), curDate.with(LocalTime.MAX));
178
		double todaySale = fofoOrderItems.stream()
179
				.collect(Collectors.summingDouble(x -> x.getSellingPrice() * x.getQuantity()));
180
		double mtdSale = mtdFofoOrderItems.stream()
181
				.collect(Collectors.summingDouble(x -> x.getSellingPrice() * x.getQuantity()));
25214 amit.gupta 182
 
183
		List<PartnerTargetDetails> partnerTargetDetails = partnerTargetRepository
184
				.selectAllGeEqAndLeEqStartDateAndEndDate(LocalDateTime.now());
185
 
186
		List<Integer> targetIds = partnerTargetRepository
187
				.selectAllPartnerTargetForPartner(fofoId,
188
						partnerTargetDetails.stream().map(x -> x.getId()).collect(Collectors.toList()))
189
				.stream().map(x -> x.getTargetId()).collect(Collectors.toList());
190
		if (targetIds.size() > 0) {
191
			PartnerTarget target = partnerTargetRepository.selectAllPartnerTargetForPartner(fofoId, targetIds).get(0);
192
			double targetValue = (double)target.getTargetValue();
193
			int remainingDays = monthLength - curDate.getDayOfMonth() + 1;
194
			//Should not consider today's sale while evaluating today's target.
25216 amit.gupta 195
			double todayTargetValue = (targetValue - (mtdSale-todaySale))/remainingDays; 
25214 amit.gupta 196
			salesMap.put("todayTarget", todayTargetValue);
197
			salesMap.put("monthTarget", targetValue);
198
		} else {
199
			salesMap.put("todayTarget", 0d);
200
			salesMap.put("monthTarget", 0d);
201
 
202
		}
25140 amit.gupta 203
		salesMap.put("todaySale", todaySale);
204
		salesMap.put("mtdSale", mtdSale);
25136 amit.gupta 205
		return salesMap;
206
	}
207
 
25152 amit.gupta 208
	private List<BrandStockPrice> getBrandStockPrices(int fofoId) throws Exception {
25140 amit.gupta 209
		Map<String, BrandStockPrice> brandStockPricesMap = inventoryService.getBrandWiseStockValue(fofoId);
25175 amit.gupta 210
 
25140 amit.gupta 211
		List<DBObject> mobileBrands = mongoClient.getMongoBrands(fofoId, "", 3);
25136 amit.gupta 212
		List<BrandStockPrice> brandStockPrices = new ArrayList<>();
25156 amit.gupta 213
 
25140 amit.gupta 214
		mobileBrands.stream().forEach(x -> {
215
			String brand = (String) x.get("name");
216
			if (brandStockPricesMap.containsKey(brand)) {
217
				BrandStockPrice brandStockPrice = brandStockPricesMap.get(brand);
218
				brandStockPrice.setBrandUrl((String) x.get("url"));
219
				brandStockPrice.setRank(((Double) x.get("rank")).intValue());
220
				brandStockPrices.add(brandStockPrice);
221
			}
222
		});
223
 
25175 amit.gupta 224
		return brandStockPrices.stream().filter(x -> x.getTotalQty() > 0).sorted((x, y) -> x.getRank() - y.getRank())
225
				.collect(Collectors.toList());
25136 amit.gupta 226
	}
227
 
21615 kshitij.so 228
	@RequestMapping(value = "/dashboard", method = RequestMethod.GET)
25156 amit.gupta 229
	public String dashboard(HttpServletRequest request, Model model) throws Exception {
25140 amit.gupta 230
 
22927 ashik.ali 231
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
25180 amit.gupta 232
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
233
		model.addAttribute("isAdmin", isAdmin);
23923 amit.gupta 234
 
22481 ashik.ali 235
		FofoStore fofoStore = null;
25183 amit.gupta 236
		if (isAdmin) {
25180 amit.gupta 237
			return "dashboard1";
238
		} else {
239
			try {
240
				fofoStore = fofoStoreRepository.selectByRetailerId(loginDetails.getFofoId());
241
				model.addAttribute("fofoStore", fofoStore);
242
				model.addAttribute("webApiHost", webApiHost);
243
				model.addAttribute("webApiPort", webApiPort);
244
				model.addAttribute("webApiScheme", webApiScheme);
245
				model.addAttribute("webApiRoot", webApiRoot);
246
				model.addAttribute("hasGift", hasGift(loginDetails.getFofoId()));
247
				model.addAttribute("giftItemId", ProfitMandiConstants.GIFT_ID);
248
 
249
				model.addAttribute("brandStockPrices", this.getBrandStockPrices(loginDetails.getFofoId()));
250
				model.addAttribute("salesMap", this.getSales(loginDetails.getFofoId()));
251
				model.addAttribute("investments", this.getInvestments(loginDetails.getFofoId()));
252
				model.addAttribute("isInvestmentOk",
253
						partnerInvestmentService.isInvestmentOk(loginDetails.getFofoId(), 10, 30));
254
			} catch (ProfitMandiBusinessException e) {
255
				LOGGER.error("FofoStore Code not found of fofoId {}", loginDetails.getFofoId());
256
 
257
			}
22481 ashik.ali 258
		}
25197 amit.gupta 259
		model.addAttribute("monthDays", LocalDate.now().minusDays(1).lengthOfMonth());
260
		model.addAttribute("dayOfMonth", LocalDate.now().minusDays(1).getDayOfMonth());
25140 amit.gupta 261
		return "dashboard1";
21615 kshitij.so 262
	}
23923 amit.gupta 263
 
24288 amit.gupta 264
	// This method is currently hardcoded to faciliate watches sold as gift.
24203 amit.gupta 265
	private boolean hasGift(int fofoId) {
266
		try {
24288 amit.gupta 267
			return currentInventorySnapshotRepository.selectByItemIdAndFofoId(ProfitMandiConstants.GIFT_ID, fofoId)
268
					.getAvailability() > 0;
24203 amit.gupta 269
		} catch (ProfitMandiBusinessException e) {
270
			return false;
271
		}
272
	}
24288 amit.gupta 273
 
22354 ashik.ali 274
	@RequestMapping(value = "/contactUs", method = RequestMethod.GET)
23923 amit.gupta 275
	public String contactUs(HttpServletRequest request, Model model) throws Throwable {
22354 ashik.ali 276
		model.addAttribute("appContextPath", request.getContextPath());
277
		return "contact-us";
278
	}
23923 amit.gupta 279
 
21615 kshitij.so 280
}