Subversion Repositories SmartDukaan

Rev

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