Subversion Repositories SmartDukaan

Rev

Rev 27391 | Rev 27895 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 27391 Rev 27876
Line 1... Line 1...
1
package com.spice.profitmandi.web.controller;
1
package com.spice.profitmandi.web.controller;
2
 
2
 
-
 
3
import java.io.ByteArrayInputStream;
-
 
4
import java.io.InputStream;
-
 
5
import java.time.LocalDate;
3
import java.time.LocalDateTime;
6
import java.time.LocalDateTime;
-
 
7
import java.time.YearMonth;
-
 
8
import java.time.temporal.ChronoField;
4
import java.util.ArrayList;
9
import java.util.ArrayList;
5
import java.util.HashMap;
10
import java.util.Arrays;
6
import java.util.HashSet;
11
import java.util.Collection;
-
 
12
import java.util.Comparator;
7
import java.util.List;
13
import java.util.List;
8
import java.util.Map;
14
import java.util.Map;
9
import java.util.Set;
15
import java.util.Set;
10
import java.util.stream.Collectors;
16
import java.util.stream.Collectors;
11
 
17
 
12
import javax.servlet.http.HttpServletRequest;
18
import javax.servlet.http.HttpServletRequest;
13
import javax.transaction.Transactional;
19
import javax.transaction.Transactional;
14
 
20
 
-
 
21
import org.apache.commons.io.output.ByteArrayOutputStream;
15
import org.apache.logging.log4j.LogManager;
22
import org.apache.logging.log4j.LogManager;
16
import org.apache.logging.log4j.Logger;
23
import org.apache.logging.log4j.Logger;
17
import org.springframework.beans.factory.annotation.Autowired;
24
import org.springframework.beans.factory.annotation.Autowired;
-
 
25
import org.springframework.core.io.InputStreamResource;
-
 
26
import org.springframework.http.HttpHeaders;
-
 
27
import org.springframework.http.HttpStatus;
-
 
28
import org.springframework.http.ResponseEntity;
18
import org.springframework.stereotype.Controller;
29
import org.springframework.stereotype.Controller;
19
import org.springframework.ui.Model;
30
import org.springframework.ui.Model;
-
 
31
import org.springframework.web.bind.annotation.PathVariable;
20
import org.springframework.web.bind.annotation.RequestBody;
32
import org.springframework.web.bind.annotation.RequestBody;
21
import org.springframework.web.bind.annotation.RequestMapping;
33
import org.springframework.web.bind.annotation.RequestMapping;
22
import org.springframework.web.bind.annotation.RequestMethod;
34
import org.springframework.web.bind.annotation.RequestMethod;
23
import org.springframework.web.bind.annotation.RequestParam;
35
import org.springframework.web.bind.annotation.RequestParam;
24
 
36
 
25
import com.google.gson.Gson;
37
import com.google.gson.Gson;
26
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
38
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
27
import com.spice.profitmandi.common.model.CustomRetailer;
39
import com.spice.profitmandi.common.model.CustomRetailer;
-
 
40
import com.spice.profitmandi.common.model.ProfitMandiConstants;
28
import com.spice.profitmandi.dao.entity.catalog.Item;
41
import com.spice.profitmandi.common.util.FileUtil;
-
 
42
import com.spice.profitmandi.common.web.util.ResponseSender;
29
import com.spice.profitmandi.dao.entity.catalog.Offer;
43
import com.spice.profitmandi.dao.entity.catalog.Offer;
30
import com.spice.profitmandi.dao.entity.catalog.OfferPartner;
-
 
31
import com.spice.profitmandi.dao.entity.catalog.Offermargin;
-
 
32
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
44
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
33
import com.spice.profitmandi.dao.enumuration.catalog.ItemCriteriaType;
45
import com.spice.profitmandi.dao.enumuration.catalog.ItemCriteriaType;
34
import com.spice.profitmandi.dao.model.AmountMarginModel;
-
 
35
import com.spice.profitmandi.dao.model.CreateOfferRequest;
46
import com.spice.profitmandi.dao.model.CreateOfferRequest;
36
import com.spice.profitmandi.dao.model.ItemTypeParams;
-
 
37
import com.spice.profitmandi.dao.model.SimpleItemType;
47
import com.spice.profitmandi.dao.model.OfferRowModel;
38
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
48
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
39
import com.spice.profitmandi.dao.repository.catalog.OfferMarginRepository;
49
import com.spice.profitmandi.dao.repository.catalog.OfferMarginRepository;
40
import com.spice.profitmandi.dao.repository.catalog.OfferPartnerRepository;
50
import com.spice.profitmandi.dao.repository.catalog.OfferPartnerRepository;
41
import com.spice.profitmandi.dao.repository.catalog.OfferRepository;
51
import com.spice.profitmandi.dao.repository.catalog.OfferRepository;
42
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
52
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
43
import com.spice.profitmandi.dao.repository.dtr.Mongo;
53
import com.spice.profitmandi.dao.repository.dtr.Mongo;
44
import com.spice.profitmandi.dao.repository.fofo.PartnerTypeChangeService;
54
import com.spice.profitmandi.dao.repository.fofo.PartnerTypeChangeService;
-
 
55
import com.spice.profitmandi.service.offers.OfferService;
45
import com.spice.profitmandi.service.user.RetailerService;
56
import com.spice.profitmandi.service.user.RetailerService;
46
import com.spice.profitmandi.web.model.LoginDetails;
57
import com.spice.profitmandi.web.model.LoginDetails;
47
import com.spice.profitmandi.web.util.CookiesProcessor;
58
import com.spice.profitmandi.web.util.CookiesProcessor;
48
import com.spice.profitmandi.web.util.MVCResponseSender;
59
import com.spice.profitmandi.web.util.MVCResponseSender;
49
 
60
 
Line 59... Line 70...
59
 
70
 
60
	@Autowired
71
	@Autowired
61
	private FofoStoreRepository fofoStoreRepository;
72
	private FofoStoreRepository fofoStoreRepository;
62
 
73
 
63
	@Autowired
74
	@Autowired
-
 
75
	private ResponseSender responseSender;
-
 
76
 
-
 
77
	@Autowired
64
	private OfferPartnerRepository offerPartnerRepository;
78
	private OfferPartnerRepository offerPartnerRepository;
65
 
79
 
66
	@Autowired
80
	@Autowired
67
	private ItemRepository itemRepository;
81
	private ItemRepository itemRepository;
68
 
82
 
Line 80... Line 94...
80
 
94
 
81
	@Autowired
95
	@Autowired
82
	private CookiesProcessor cookiesProcessor;
96
	private CookiesProcessor cookiesProcessor;
83
 
97
 
84
	@Autowired
98
	@Autowired
-
 
99
	private OfferService offerService;
-
 
100
 
-
 
101
	@Autowired
85
	private PartnerTypeChangeService partnerTypeChangeService;
102
	private PartnerTypeChangeService partnerTypeChangeService;
86
 
103
 
87
	@RequestMapping(value = "/getCreateOffer", method = RequestMethod.GET)
104
	@RequestMapping(value = "/getCreateOffer", method = RequestMethod.GET)
88
	public String getCreateOffer(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
105
	public String getCreateOffer(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
89
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
106
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
90
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
107
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
91
				.collect(Collectors.toList());
108
				.collect(Collectors.toList());
92
 
109
 
93
		List<String> brands = mongoClient.getMongoBrands(loginDetails.getFofoId(), null, 3).stream()
110
		Set<String> brands = mongoClient.getMongoBrands(loginDetails.getFofoId(), null, 3).stream()
94
				.map(x -> (String) x.get("name")).collect(Collectors.toList());
111
				.map(x -> (String) x.get("name")).collect(Collectors.toSet());
-
 
112
		brands.add("Vivo");
95
 
113
 
96
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
114
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
97
 
115
 
98
		model.addAttribute("customRetailersMap", customRetailersMap);
116
		model.addAttribute("customRetailersMap", customRetailersMap);
99
		model.addAttribute("itemCriteriaType", ItemCriteriaType.values());
117
		model.addAttribute("itemCriteriaType", ItemCriteriaType.values());
100
		model.addAttribute("brands", brands);
118
		model.addAttribute("brands", brands);
101
		model.addAttribute("partnerCategories", PartnerType.values());
119
		model.addAttribute("partnerCategories", PartnerType.values());
-
 
120
		model.addAttribute("warehouseRegion", ProfitMandiConstants.WAREHOUSE_MAP);
102
		return "scheme_offer";
121
		return "scheme_offer";
103
 
122
 
104
	}
123
	}
105
 
124
 
106
	@RequestMapping(value = "/createOffer", method = RequestMethod.POST)
125
	@RequestMapping(value = "/createOffer", method = RequestMethod.POST)
107
	public String createOffer(HttpServletRequest request, @RequestBody CreateOfferRequest createOfferRequest,
126
	public String createOffer(HttpServletRequest request, @RequestBody CreateOfferRequest createOfferRequest,
108
			Model model) throws Exception {
127
			Model model) throws Exception {
109
		LOGGER.info("createOfferRequest" + createOfferRequest.getAmountOffer());
128
		LOGGER.info("createOfferRequest [{}]", createOfferRequest);
110
 
-
 
111
		Offer offer = new Offer();
-
 
112
		offer.setName(createOfferRequest.getName());
-
 
113
		offer.setDescription(createOfferRequest.getDescription());
-
 
114
		offer.setItemCreteria(createOfferRequest.getItemCriteria());
-
 
115
		offer.setTargetType(createOfferRequest.getTargetType());
-
 
116
		offer.setAmountType(createOfferRequest.getAmountType());
-
 
117
		offer.setStartDateTime(createOfferRequest.getStartDate());
-
 
118
		offer.setEndDateTime(createOfferRequest.getEndDate());
-
 
119
		offer.setPrice(createOfferRequest.getPrice());
129
		offerService.addOfferService(createOfferRequest);
120
		offer.setCreatedTimestamp(LocalDateTime.now());
-
 
121
		offer.setSchemeType(createOfferRequest.getSchemeType());
-
 
122
		offer.setCriteria(createOfferRequest.getCriteria());
-
 
123
		offer.setPartnerType(createOfferRequest.getPartnerType());
-
 
124
 
-
 
125
		if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
-
 
126
			ItemTypeParams itemTypeParams = new ItemTypeParams();
-
 
127
			itemTypeParams.setCatalogId(createOfferRequest.getCatalogIds());
-
 
128
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
-
 
129
			sit.setItemTypeParams(itemTypeParams);
-
 
130
			offer.setItemParam(gson.toJson(itemTypeParams));
-
 
131
		} else if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
-
 
132
			ItemTypeParams itemTypeParams = new ItemTypeParams();
-
 
133
			itemTypeParams.setBrands(createOfferRequest.getBrands());
-
 
134
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
-
 
135
			sit.setItemTypeParams(itemTypeParams);
-
 
136
			offer.setItemParam(gson.toJson(itemTypeParams));
-
 
137
		}
-
 
138
 
-
 
139
		offerRepository.persist(offer);
-
 
140
		if (createOfferRequest.getFofoIds().isEmpty()) {
-
 
141
			List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
142
					.collect(Collectors.toList());
-
 
143
			for (Integer fofoId : fofoIds) {
-
 
144
				PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fofoId,
-
 
145
						offer.getStartDateTime().toLocalDate());
-
 
146
				if (offer.getPartnerType().equals(partnerType)) {
-
 
147
					LOGGER.info("partnerType" + partnerType);
-
 
148
					LOGGER.info("fofoId" + fofoId);
-
 
149
 
-
 
150
					OfferPartner op = new OfferPartner();
-
 
151
					op.setFofoId(fofoId);
-
 
152
					op.setOfferId(offer.getId());
-
 
153
					offerPartnerRepository.persist(op);
-
 
154
				}
-
 
155
 
-
 
156
			}
-
 
157
		}
-
 
158
 
-
 
159
		else {
-
 
160
 
-
 
161
			for (Integer fofoId : createOfferRequest.getFofoIds()) {
-
 
162
				OfferPartner op = new OfferPartner();
-
 
163
				op.setFofoId(fofoId);
-
 
164
				op.setOfferId(offer.getId());
-
 
165
				offerPartnerRepository.persist(op);
-
 
166
			}
-
 
167
		}
-
 
168
		for (AmountMarginModel amm : createOfferRequest.getAmountOffer()) {
-
 
169
			Offermargin om = new Offermargin();
-
 
170
			om.setValue(amm.getValue());
-
 
171
			om.setMargin(amm.getMargin());
-
 
172
			om.setOfferId(offer.getId());
-
 
173
			offerMarginRepository.persist(om);
-
 
174
		}
-
 
175
 
-
 
176
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
130
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
177
		return "response";
131
		return "response";
178
 
132
 
179
	}
133
	}
180
 
134
 
181
	@RequestMapping(value = "/getOffers", method = RequestMethod.GET)
135
	@RequestMapping(value = "/offers/published", method = RequestMethod.GET)
182
	public String createOffer(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
136
	public String getPublishedOffers(HttpServletRequest request, @RequestParam int fofoId, Model model)
183
			@RequestParam(name = "limit", defaultValue = "10") int limit,
-
 
184
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
-
 
185
			throws Exception {
137
			throws Exception {
-
 
138
		LOGGER.info("Published");
-
 
139
		offerService.getPublishedOffers(fofoId, YearMonth.from(LocalDateTime.now()));
-
 
140
		return "scheme_offer/published";
186
 
141
 
187
		List<Offer> offers = null;
-
 
188
		long size = 0;
-
 
189
 
-
 
190
		offers = offerRepository.selectAll(offset, limit);
-
 
191
		size = offerRepository.selectAllCount();
-
 
192
 
-
 
193
		model.addAttribute("offers", offers);
-
 
194
		model.addAttribute("start", offset + 1);
-
 
195
		model.addAttribute("size", size);
-
 
196
		model.addAttribute("searchTerm", searchTerm);
-
 
197
 
-
 
198
		if (offers.size() < limit) {
-
 
199
			model.addAttribute("end", offset + offers.size());
-
 
200
		} else {
-
 
201
			model.addAttribute("end", offset + limit);
-
 
202
		}
142
	}
203
 
-
 
204
		return "offer_history";
-
 
205
 
143
 
-
 
144
	@RequestMapping(value = "/offer/active/{offerId}", method = RequestMethod.GET)
-
 
145
	public String activateOffer(HttpServletRequest request, @PathVariable int offerId, Model model)
-
 
146
			throws ProfitMandiBusinessException, Exception {
-
 
147
		Offer offer = offerRepository.selectById(offerId);
-
 
148
		offer.setActive(true);
-
 
149
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
-
 
150
		return "response";
206
	}
151
	}
207
 
152
 
208
	@RequestMapping(value = "/getPaginatedOffers", method = RequestMethod.GET)
153
	@RequestMapping(value = "/offerHistory", method = RequestMethod.GET)
209
	public String getPaginatedOffers(HttpServletRequest request,
154
	public String getPaginatedOffers(HttpServletRequest request, @RequestParam YearMonth yearMonth, Model model)
210
			@RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
211
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
212
			throws ProfitMandiBusinessException {
155
			throws ProfitMandiBusinessException {
213
 
156
 
214
		List<Offer> offers = null;
157
		List<CreateOfferRequest> publishedOffers = offerService.getAllOffers(yearMonth);
215
		offers = offerRepository.selectAll(offset, limit);
158
		model.addAttribute("offers", publishedOffers);
216
		model.addAttribute("offers", offers);
159
		model.addAttribute("yearMonth", yearMonth);
217
 
160
 
218
		return "offer_history_paginated";
-
 
219
	}
-
 
220
 
-
 
221
	@RequestMapping(value = "/searchOffer")
-
 
222
	public String getOfferById(HttpServletRequest request,
-
 
223
			@RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
224
			@RequestParam(name = "limit", defaultValue = "10") int limit,
-
 
225
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
-
 
226
			throws ProfitMandiBusinessException {
-
 
227
		List<Offer> offers = null;
-
 
228
		long size = 0;
-
 
229
		if (!(searchTerm.equals(""))) {
-
 
230
			offers = offerRepository.selectBySearchTerm(searchTerm, offset, limit);
-
 
231
			if (!(offers.size() == 0)) {
-
 
232
				size = offerRepository.selectAllCount();
-
 
233
				LOGGER.info("offers" + offers);
-
 
234
				model.addAttribute("offers", offers);
-
 
235
				model.addAttribute("start", offset + 1);
-
 
236
				model.addAttribute("size", size);
-
 
237
				model.addAttribute("searchTerm", searchTerm);
-
 
238
				if (offers.size() < limit) {
-
 
239
					model.addAttribute("end", offset + offers.size());
-
 
240
				} else {
-
 
241
					model.addAttribute("end", offset + limit);
-
 
242
				}
-
 
243
			} else {
-
 
244
				throw new ProfitMandiBusinessException("OfferId", searchTerm, "offerId Not Found");
-
 
245
			}
-
 
246
		} else {
-
 
247
 
-
 
248
			offers = offerRepository.selectAll(offset, limit);
-
 
249
			size = offerRepository.selectAllCount();
-
 
250
 
-
 
251
			model.addAttribute("offers", offers);
-
 
252
			model.addAttribute("start", offset + 1);
-
 
253
			model.addAttribute("size", size);
-
 
254
			model.addAttribute("searchTerm", searchTerm);
-
 
255
 
-
 
256
			if (offers.size() < limit) {
-
 
257
				model.addAttribute("end", offset + offers.size());
-
 
258
			} else {
-
 
259
				model.addAttribute("end", offset + limit);
-
 
260
			}
-
 
261
		}
-
 
262
		return "offer_history";
161
		return "offer_history";
263
	}
162
	}
264
 
163
 
265
	@RequestMapping(value = "/updateOfferStatus", method = RequestMethod.POST)
164
	@RequestMapping(value = "/offer-details", method = RequestMethod.GET)
266
	public String updateOfferStatus(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
165
	public String schemeDetails(HttpServletRequest request, @RequestParam int offerId, Model model)
267
 
-
 
268
		Offer offer = offerRepository.selectById(id);
166
			throws ProfitMandiBusinessException {
269
		LOGGER.info("status" + offer.getStatus());
167
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
270
 
168
 
-
 
169
		CreateOfferRequest createOfferRequest = offerService.getOffer(offerId);
271
		if (offer.getStatus() == false) {
170
		int fofoId = loginDetails.getFofoId();
-
 
171
		double amount = offerRepository.getPartnerWiseSalesSum(createOfferRequest).get(fofoId) == null ? 0
272
			offer.setStatus(true);
172
				: offerRepository.getPartnerWiseSalesSum(createOfferRequest).get(fofoId);
273
		} else {
173
 
-
 
174
		com.spice.profitmandi.dao.model.TargetSlab currentSlab = createOfferRequest.getTargetSlabs().stream()
-
 
175
				.filter(x -> x.getOnwardsAmount() <= amount).max(Comparator.comparing(x -> x.getOnwardsAmount()))
274
			offer.setStatus(false);
176
				.orElse(null);
275
		}
177
 
276
		offer.setCreatedTimestamp(LocalDateTime.now());
178
		com.spice.profitmandi.dao.model.TargetSlab nextSlab = createOfferRequest.getTargetSlabs().stream()
277
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
179
				.filter(x -> x.getOnwardsAmount() > amount).min(Comparator.comparing(x -> x.getOnwardsAmount()))
278
		return "response";
180
				.orElse(null);
-
 
181
		createOfferRequest.setNextTargetSlab(nextSlab);
-
 
182
		createOfferRequest.setCurrentTargetSlab(currentSlab);
-
 
183
		createOfferRequest.setEligibleSale((int) amount);
279
 
184
 
-
 
185
		model.addAttribute("offer", createOfferRequest);
-
 
186
		return "offer-details";
280
	}
187
	}
281
 
188
 
282
	@RequestMapping(value = "/getOfferMargin", method = RequestMethod.GET)
189
	@RequestMapping(value = "/offerDownload", method = RequestMethod.GET)
283
	public String getOfferMargin(HttpServletRequest request,
190
	public ResponseEntity<?> dowloadOfferSummary(HttpServletRequest request, @RequestParam int offerId, Model model)
284
			@RequestParam(name = "offerId", defaultValue = "0") int offerId, Model model) throws Exception {
-
 
285
		Offer offer = offerRepository.selectById(offerId);
-
 
286
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
287
				.collect(Collectors.toList());
191
			throws Exception {
288
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
-
 
289
		List<OfferPartner> offerPartners = offerPartnerRepository.selectByOfferId(offerId);
192
		List<List<?>> listOfRows = new ArrayList<>();
290
 
-
 
291
		LOGGER.info("offerId" + offer.getId());
193
		final HttpHeaders headers = new HttpHeaders();
292
 
-
 
293
		Map<Integer, Double> value = offerRepository.selectSumOfferByRetailer(offer.getStartDateTime(),
194
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
294
				offer.getEndDateTime(), 0, offer, true);
195
		headers.set("Content-disposition", "inline; filename=offer-" + offerId + ".csv");
295
 
-
 
296
		LOGGER.info("value" + value);
-
 
297
		List<Offermargin> offerMargin = offerMarginRepository.selectByOfferId(offerId);
196
		CreateOfferRequest createOfferRequest = offerService.getOffer(offerId);
298
		Map<Integer, Double> partnerValueMap = new HashMap<>();
-
 
299
		Map<Integer, List<Double>> partnerMarginMap = new HashMap<Integer, List<Double>>();
197
		Collection<OfferRowModel> offerRowModels = offerRepository.getOfferRows(createOfferRequest);
300
		Map<Integer, Integer> shortageAmount = new HashMap<>();
-
 
301
 
198
 
302
		for (OfferPartner op : offerPartners) {
199
		for (OfferRowModel offerRowModel : offerRowModels) {
303
 
-
 
304
			LOGGER.info("offerPartneer" + op.getFofoId());
-
 
305
			if (value.containsKey(op.getFofoId())) {
-
 
306
				partnerValueMap.put(op.getFofoId(), value.get(op.getFofoId()));
200
			CustomRetailer customRetailer = retailerService.getFofoRetailer(offerRowModel.getFofoId());
307
 
-
 
308
			} else {
-
 
309
				value.put(op.getFofoId(), 0d);
-
 
310
 
-
 
311
				partnerValueMap.put(op.getFofoId(), 0d);
-
 
312
 
-
 
313
			}
-
 
314
			List<Double> valSetOne = new ArrayList<Double>();
201
			listOfRows.add(Arrays.asList(createOfferRequest.getId(), createOfferRequest.getName(),
315
 
-
 
316
			for (Offermargin om : offerMargin) {
-
 
317
 
-
 
318
				if (value.get(op.getFofoId()) <= om.getValue()) {
202
					createOfferRequest.getTargetType(), createOfferRequest.getSchemeType(),
319
					LOGGER.info("om1" + om.getMargin());
-
 
320
					shortageAmount.put(op.getFofoId(), om.getValue() - value.get(op.getFofoId()).intValue());
203
					createOfferRequest.getBrandShareTerms(), createOfferRequest.getSellinPercentage(),
321
					valSetOne.add(om.getMargin());
-
 
322
					partnerMarginMap.put(op.getFofoId(), valSetOne);
-
 
323
 
-
 
324
					break;
-
 
325
				} else {
-
 
326
					LOGGER.info("om2" + om.getMargin());
-
 
327
					valSetOne.add(om.getMargin());
-
 
328
 
-
 
329
					int shortage = om.getValue() - value.get(op.getFofoId()).intValue();
204
					createOfferRequest.getPartnerCriteriaString(), createOfferRequest.getItemCriteriaString(),
330
 
-
 
331
					if (shortage < 0) {
-
 
332
						shortageAmount.put(op.getFofoId(), 0);
-
 
333
					}
-
 
334
 
-
 
335
					partnerMarginMap.put(op.getFofoId(), valSetOne);
205
					createOfferRequest.getStartDate(), createOfferRequest.getEndDate(),
336
 
-
 
337
				}
-
 
338
			}
-
 
339
 
-
 
340
		}
-
 
341
 
-
 
342
		LOGGER.info("partnerMarginMap" + partnerMarginMap);
-
 
343
		LOGGER.info("partnerValueMap" + partnerValueMap);
-
 
344
		LOGGER.info("shortageAmount" + shortageAmount);
-
 
345
 
-
 
346
		ItemTypeParams scp = gson.fromJson(offer.getItemParam(), ItemTypeParams.class);
206
					createOfferRequest.getCreatedOn(), customRetailer.getPartnerId(), customRetailer.getBusinessName(),
347
		if (offer.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
207
					customRetailer.getCode(), offerRowModel.getTotalSale(), offerRowModel.getEligibleSale(),
348
			List<String> brands = scp.getBrands();
-
 
349
			model.addAttribute("brands", brands);
-
 
350
		}
-
 
351
		if (offer.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
208
					offerRowModel.getAchievedTarget(), offerRowModel.getNextTarget(), offerRowModel.getEligibleSaleDp(),
352
			List<Integer> catalogIds = scp.getCatalogId();
209
					offerRowModel.getTotalPurchaseValue(), offerRowModel.getCurrentPayoutTarget(),
353
			List<Item> newList = new ArrayList<>();
-
 
354
			Set<Integer> catalogId = new HashSet<>();
210
					offerRowModel.getPayoutTargetAchieved(), offerRowModel.getAmountType(),
355
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds.stream().collect(Collectors.toSet()));
211
					offerRowModel.getPayoutValue(), offerRowModel.getPayoutValueDp(), offerRowModel.getFinalPayout(),
356
			for (Item item : items) {
-
 
357
				if (catalogId.add(item.getCatalogItemId())) {
212
					String.join(", ", offerRowModel.getPendingImeis())));
358
					newList.add(item);
-
 
359
				}
-
 
360
			}
-
 
361
			model.addAttribute("items", newList);
-
 
362
		}
213
		}
363
		model.addAttribute("partnerMarginMap", partnerMarginMap);
214
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
-
 
215
				Arrays.asList("Id", "Name", "Target Type", "Scheme Type", "Brand %", "Sellin %", "Partner Criteria",
364
		model.addAttribute("partnerValueMap", partnerValueMap);
216
						"Item Criteria", "Start", "End", "Created", "Partner Id", "Partner Name", "Partner Code",
365
		model.addAttribute("customRetailersMap", customRetailersMap);
217
						"Total Sale", "Eligible Sale", "Achieved Target", "Next Target", "Eligible Sale DP",
-
 
218
						"Total Purchase DP", "Current Payout Target", "Payout Target Achieved", "Payout Amount Type",
-
 
219
						"Payout Value", "Payout Value DP", "Amount to be credited", "IMEIs pending for Activation"
366
		model.addAttribute("offerMargin", offerMargin);
220
				// "Payout Sale Qty", "Activated Value", "Activated Qty",
367
		model.addAttribute("offer", offer);
221
				), listOfRows);
368
		model.addAttribute("shortageAmount", shortageAmount);
222
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
369
 
-
 
-
 
223
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
370
		return "offer_margin_detail";
224
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
371
 
-
 
372
	}
225
	}
373
 
226
	
374
	@RequestMapping(value = "/offerById", method = RequestMethod.GET)
227
	@RequestMapping(value = "/offerById", method = RequestMethod.GET)
375
	public String offerById(HttpServletRequest request, int offerId, Model model) throws ProfitMandiBusinessException {
228
	public String offerById(HttpServletRequest request, int offerId, Model model) throws ProfitMandiBusinessException {
376
		Offer offer = offerRepository.selectById(offerId);
229
		Offer offer = offerRepository.selectById(offerId);
377
 
230
 
378
		model.addAttribute("offer", offer);
231
		model.addAttribute("offer", offer);
379
 
232
 
380
		return "offer-edit";
233
		return "offer-edit";
381
 
234
 
382
	}
235
	}
383
 
236
 
384
	@RequestMapping(value = "/extendByOfferId", method = RequestMethod.POST)
237
	@RequestMapping(value = "/getOfferMargins", method = RequestMethod.GET)
385
	public String extendByOfferId(HttpServletRequest request,
238
	public String getOfferMargins(HttpServletRequest request,
-
 
239
			@RequestParam(name = "offerId", defaultValue = "0") int offerId, Model model) throws Exception {
-
 
240
		Offer offer = offerRepository.selectById(offerId);
386
 
241
 
387
			int offerId, @RequestBody LocalDateTime extendDatetime, Model model) throws Exception {
242
		LOGGER.info("offerId" + offer.getId());
388
 
243
 
-
 
244
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
245
 
-
 
246
		CreateOfferRequest createOfferRequest = offerService.getOffer(offerId);
-
 
247
		int fofoId = loginDetails.getFofoId();
-
 
248
		double amount = offerRepository.getPartnerWiseSalesSum(createOfferRequest).get(fofoId) == null ? 0
-
 
249
				: offerRepository.getPartnerWiseSalesSum(createOfferRequest).get(fofoId);
-
 
250
 
-
 
251
		com.spice.profitmandi.dao.model.TargetSlab currentSlab = createOfferRequest.getTargetSlabs().stream()
-
 
252
				.filter(x -> x.getOnwardsAmount() <= amount).max(Comparator.comparing(x -> x.getOnwardsAmount()))
-
 
253
				.orElse(null);
-
 
254
 
-
 
255
		com.spice.profitmandi.dao.model.TargetSlab nextSlab = createOfferRequest.getTargetSlabs().stream()
-
 
256
				.filter(x -> x.getOnwardsAmount() > amount).min(Comparator.comparing(x -> x.getOnwardsAmount()))
-
 
257
				.orElse(null);
389
		LOGGER.info("ExtendDatetime" + extendDatetime);
258
		createOfferRequest.setNextTargetSlab(nextSlab);
-
 
259
		createOfferRequest.setCurrentTargetSlab(currentSlab);
-
 
260
		createOfferRequest.setEligibleSale((int) amount);
390
		LOGGER.info("schemeId" + offerId);
261
		model.addAttribute("offer", createOfferRequest);
-
 
262
 
391
		Offer offer = offerRepository.selectById(offerId);
263
		return "offer_margin_detail_partner";
392
 
264
 
393
		offer.setEndDateTime(extendDatetime);
-
 
394
		offerRepository.persist(offer);
-
 
395
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
-
 
396
		return "response";
-
 
397
	}
265
	}
398
 
266
 
399
}
267
}