Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
27391 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
3
import com.google.gson.Gson;
29943 amit.gupta 4
import com.jcraft.jsch.*;
29900 amit.gupta 5
import com.spice.profitmandi.common.enumuration.MessageType;
27391 tejbeer 6
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
7
import com.spice.profitmandi.common.model.CustomRetailer;
27876 amit.gupta 8
import com.spice.profitmandi.common.model.ProfitMandiConstants;
29900 amit.gupta 9
import com.spice.profitmandi.common.model.SendNotificationModel;
27876 amit.gupta 10
import com.spice.profitmandi.common.util.FileUtil;
29904 amit.gupta 11
import com.spice.profitmandi.common.util.FormattingUtils;
27876 amit.gupta 12
import com.spice.profitmandi.common.web.util.ResponseSender;
27391 tejbeer 13
import com.spice.profitmandi.dao.entity.catalog.Offer;
14
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
15
import com.spice.profitmandi.dao.enumuration.catalog.ItemCriteriaType;
16
import com.spice.profitmandi.dao.model.CreateOfferRequest;
27876 amit.gupta 17
import com.spice.profitmandi.dao.model.OfferRowModel;
27391 tejbeer 18
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
19
import com.spice.profitmandi.dao.repository.catalog.OfferMarginRepository;
20
import com.spice.profitmandi.dao.repository.catalog.OfferPartnerRepository;
21
import com.spice.profitmandi.dao.repository.catalog.OfferRepository;
22
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
23
import com.spice.profitmandi.dao.repository.dtr.Mongo;
29926 amit.gupta 24
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
27391 tejbeer 25
import com.spice.profitmandi.dao.repository.fofo.PartnerTypeChangeService;
29900 amit.gupta 26
import com.spice.profitmandi.service.NotificationService;
29785 amit.gupta 27
import com.spice.profitmandi.service.authentication.RoleManager;
27876 amit.gupta 28
import com.spice.profitmandi.service.offers.OfferService;
27391 tejbeer 29
import com.spice.profitmandi.service.user.RetailerService;
30
import com.spice.profitmandi.web.model.LoginDetails;
31
import com.spice.profitmandi.web.util.CookiesProcessor;
32
import com.spice.profitmandi.web.util.MVCResponseSender;
29943 amit.gupta 33
import org.apache.commons.io.FileUtils;
34
import org.apache.commons.io.output.ByteArrayOutputStream;
35
import org.apache.logging.log4j.LogManager;
36
import org.apache.logging.log4j.Logger;
37
import org.apache.velocity.app.VelocityEngine;
38
import org.springframework.beans.factory.annotation.Autowired;
30470 amit.gupta 39
import org.springframework.beans.factory.annotation.Qualifier;
29943 amit.gupta 40
import org.springframework.cache.CacheManager;
41
import org.springframework.core.io.InputStreamResource;
42
import org.springframework.http.HttpHeaders;
43
import org.springframework.http.HttpStatus;
44
import org.springframework.http.ResponseEntity;
45
import org.springframework.stereotype.Controller;
46
import org.springframework.ui.Model;
47
import org.springframework.ui.velocity.VelocityEngineUtils;
48
import org.springframework.web.bind.annotation.*;
49
import org.springframework.web.multipart.MultipartFile;
50
import org.xhtmlrenderer.swing.Java2DRenderer;
27391 tejbeer 51
 
29943 amit.gupta 52
import javax.imageio.ImageIO;
53
import javax.servlet.http.HttpServletRequest;
54
import javax.transaction.Transactional;
55
import java.awt.*;
56
import java.awt.image.BufferedImage;
57
import java.io.ByteArrayInputStream;
58
import java.io.File;
59
import java.io.FileNotFoundException;
60
import java.io.InputStream;
61
import java.time.Instant;
62
import java.time.LocalDate;
63
import java.time.LocalDateTime;
64
import java.time.YearMonth;
65
import java.util.List;
66
import java.util.*;
67
import java.util.stream.Collectors;
68
 
27391 tejbeer 69
@Controller
70
@Transactional(rollbackOn = Throwable.class)
71
public class OfferController {
72
	private static final Logger LOGGER = LogManager.getLogger(OfferController.class);
73
	@Autowired
74
	private OfferRepository offerRepository;
75
 
76
	@Autowired
77
	private OfferMarginRepository offerMarginRepository;
78
 
79
	@Autowired
80
	private FofoStoreRepository fofoStoreRepository;
81
 
82
	@Autowired
27876 amit.gupta 83
	private ResponseSender responseSender;
84
 
85
	@Autowired
27391 tejbeer 86
	private OfferPartnerRepository offerPartnerRepository;
87
 
29900 amit.gupta 88
	private static final String IMAGE_REMOTE_DIR = "/var/www/dtrdashboard/uploads/campaigns/";
89
	private static final String IMAGE_STATIC_SERVER_URL = "https://images.smartdukaan.com/uploads/campaigns";
29926 amit.gupta 90
 
27391 tejbeer 91
	@Autowired
92
	private ItemRepository itemRepository;
93
 
94
	@Autowired
95
	private MVCResponseSender mvcResponseSender;
96
 
97
	@Autowired
98
	private Gson gson;
99
 
100
	@Autowired
101
	private RetailerService retailerService;
102
 
103
	@Autowired
104
	private Mongo mongoClient;
105
 
106
	@Autowired
29900 amit.gupta 107
	private NotificationService notificationService;
108
 
109
	@Autowired
27391 tejbeer 110
	private CookiesProcessor cookiesProcessor;
111
 
112
	@Autowired
27876 amit.gupta 113
	private OfferService offerService;
29900 amit.gupta 114
 
29809 amit.gupta 115
	@Autowired
116
	private CacheManager thirtyMinsTimeOutCacheManager;
29900 amit.gupta 117
 
29855 amit.gupta 118
	@Autowired
119
	private CacheManager oneDayCacheManager;
27876 amit.gupta 120
 
121
	@Autowired
27391 tejbeer 122
	private PartnerTypeChangeService partnerTypeChangeService;
123
 
124
	@RequestMapping(value = "/getCreateOffer", method = RequestMethod.GET)
125
	public String getCreateOffer(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
126
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
127
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
128
				.collect(Collectors.toList());
129
 
27876 amit.gupta 130
		Set<String> brands = mongoClient.getMongoBrands(loginDetails.getFofoId(), null, 3).stream()
131
				.map(x -> (String) x.get("name")).collect(Collectors.toSet());
27391 tejbeer 132
 
30426 tejbeer 133
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
27391 tejbeer 134
 
30426 tejbeer 135
		Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
136
				.filter(x -> x != null).collect(Collectors.toList()).stream()
137
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
138
 
27391 tejbeer 139
		model.addAttribute("customRetailersMap", customRetailersMap);
140
		model.addAttribute("itemCriteriaType", ItemCriteriaType.values());
141
		model.addAttribute("brands", brands);
142
		model.addAttribute("partnerCategories", PartnerType.values());
27876 amit.gupta 143
		model.addAttribute("warehouseRegion", ProfitMandiConstants.WAREHOUSE_MAP);
27391 tejbeer 144
		return "scheme_offer";
145
 
146
	}
147
 
148
	@RequestMapping(value = "/createOffer", method = RequestMethod.POST)
149
	public String createOffer(HttpServletRequest request, @RequestBody CreateOfferRequest createOfferRequest,
30426 tejbeer 150
			Model model) throws Exception {
27876 amit.gupta 151
		LOGGER.info("createOfferRequest [{}]", createOfferRequest);
152
		offerService.addOfferService(createOfferRequest);
29809 amit.gupta 153
		thirtyMinsTimeOutCacheManager.getCache("allOffers").evict(YearMonth.now());
27391 tejbeer 154
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
155
		return "response";
156
 
157
	}
158
 
27876 amit.gupta 159
	@RequestMapping(value = "/offers/published", method = RequestMethod.GET)
160
	public String getPublishedOffers(HttpServletRequest request, @RequestParam int fofoId, Model model)
27391 tejbeer 161
			throws Exception {
27876 amit.gupta 162
		LOGGER.info("Published");
163
		offerService.getPublishedOffers(fofoId, YearMonth.from(LocalDateTime.now()));
164
		return "scheme_offer/published";
27391 tejbeer 165
 
27876 amit.gupta 166
	}
27391 tejbeer 167
 
27876 amit.gupta 168
	@RequestMapping(value = "/offer/active/{offerId}", method = RequestMethod.GET)
30426 tejbeer 169
	public String activateOffer(HttpServletRequest request, @PathVariable(name = "offerId") String offerIdsString,
170
			Model model, @RequestParam(defaultValue = "true") boolean active)
171
			throws ProfitMandiBusinessException, Exception {
172
		List<Integer> offerIds = Arrays.stream(offerIdsString.split(",")).map(x -> Integer.parseInt(x))
173
				.collect(Collectors.toList());
29943 amit.gupta 174
		List<Offer> offers = offerRepository.selectAllByIds(offerIds);
175
		boolean shouldEvict = false;
176
		for (Offer offer : offers) {
29949 amit.gupta 177
			offer.setAlreadyActive(offer.isActive());
178
			if (offer.isActive() != active) {
29943 amit.gupta 179
				offer.setActive(active);
180
				shouldEvict = true;
181
			}
182
		}
183
		if (shouldEvict) {
29900 amit.gupta 184
			oneDayCacheManager.getCache("catalog.published_yearmonth").evict(YearMonth.now());
185
		}
29949 amit.gupta 186
		for (Offer offer : offers) {
187
			if (active && !offer.isAlreadyActive()) {
188
				this.sendNotification(offer);
189
			}
190
		}
27876 amit.gupta 191
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
192
		return "response";
29926 amit.gupta 193
		// CreateOfferRequest createOfferRequest =
194
		// offerService.getCreateOfferRequest(offer);
195
		// model.addAttribute("offer", createOfferRequest);
196
		// return "offer_margin_detail_partner2";
27876 amit.gupta 197
	}
29926 amit.gupta 198
 
29920 amit.gupta 199
	@RequestMapping(value = "/offer/testimage/{offerId}", method = RequestMethod.GET)
29926 amit.gupta 200
	public String testOffer(HttpServletRequest request, @PathVariable int offerId, Model model,
30426 tejbeer 201
			@RequestParam(defaultValue = "true") boolean active) throws ProfitMandiBusinessException, Exception {
29920 amit.gupta 202
		Offer offer = offerRepository.selectById(offerId);
29926 amit.gupta 203
		// model.addAttribute("response", mvcResponseSender.createResponseString(true));
204
		// return "response";
29920 amit.gupta 205
		CreateOfferRequest createOfferRequest = offerService.getCreateOfferRequest(offer);
206
		model.addAttribute("offer", createOfferRequest);
207
		return "offer_margin_detail_partner2";
208
	}
27391 tejbeer 209
 
29900 amit.gupta 210
	@Autowired
211
	private com.spice.profitmandi.dao.repository.dtr.UserRepository dtrUserRepository;
212
 
29917 amit.gupta 213
	@RequestMapping(value = "/offer/active/fofo/{fofoId}", method = RequestMethod.GET)
29926 amit.gupta 214
	public String sendOfferNotification(HttpServletRequest request, @PathVariable int fofoId, Model model,
30426 tejbeer 215
			@RequestParam(defaultValue = "true") boolean active) throws ProfitMandiBusinessException, Exception {
29917 amit.gupta 216
		List<Offer> offers = offerRepository.selectAllPublishedMapByPartner(YearMonth.now()).get(fofoId);
29926 amit.gupta 217
		for (Offer offer : offers) {
29917 amit.gupta 218
			this.sendNotification(offer);
219
		}
220
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
221
		return "response";
222
	}
29926 amit.gupta 223
 
224
	@Autowired
225
	UserAccountRepository userAccountRepository;
226
 
29900 amit.gupta 227
	private void sendNotification(Offer offer) throws Exception {
228
		String fileName = "offer-" + offer.getId() + ".png";
29948 amit.gupta 229
		String htmlFileName = fileName.replace("png", "html");
29900 amit.gupta 230
		CreateOfferRequest createOfferRequest = offerService.getCreateOfferRequest(offer);
231
		SendNotificationModel sendNotificationModel = new SendNotificationModel();
232
		sendNotificationModel.setCampaignName("SchemeOffer");
233
		sendNotificationModel.setTitle(offer.getName());
29926 amit.gupta 234
		sendNotificationModel.setMessage(createOfferRequest.getSchemeType().name() + " of select models, "
235
				+ FormattingUtils.formatDateMonth(offer.getStartDate()) + " to "
236
				+ FormattingUtils.formatDateMonth(offer.getEndDate()));
29900 amit.gupta 237
		sendNotificationModel.setType("url");
238
		sendNotificationModel.setImageUrl(IMAGE_STATIC_SERVER_URL + "/" + "image" + LocalDate.now() + "/" + fileName);
239
		sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
240
		sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
241
		sendNotificationModel.setMessageType(MessageType.scheme);
242
		Map<Integer, List<Offer>> offersMap = offerRepository.selectAllPublishedMapByPartner(YearMonth.now());
30017 amit.gupta 243
 
29900 amit.gupta 244
		Map<String, InputStream> fileStreamsMap = new HashMap<>();
29926 amit.gupta 245
		Map<String, Object> model = new HashMap<>();
246
		model.put("offer", createOfferRequest);
247
		String htmlContent = this.getContentFromTemplate("offer_margin_detail_partner.vm", model);
248
		LOGGER.info("this.getContentFromTemplate {}", htmlContent);
249
		fileStreamsMap.put(fileName, this.getImageBuffer(htmlContent));
30426 tejbeer 250
		// fileStreamsMap.put(htmlFileName, new
251
		// ByteArrayInputStream(htmlContent.getBytes()));
29926 amit.gupta 252
 
253
		this.uploadFile(fileStreamsMap);
30017 amit.gupta 254
		if (createOfferRequest.getPartnerCriteria().getRegionIds().size() > 0
255
				|| createOfferRequest.getPartnerCriteria().getFofoIds().size() > 0
256
				|| createOfferRequest.getPartnerCriteria().getRegionIds().size() > 0) {
257
			List<Integer> fofoIds = offersMap.entrySet().stream().filter(x -> x.getValue().contains(offer))
258
					.map(x -> x.getKey()).collect(Collectors.toList());
259
			List<Integer> userIds = userAccountRepository.selectUserIdsByRetailerIds(fofoIds);
260
			sendNotificationModel.setUserIds(userIds);
261
			notificationService.sendNotification(sendNotificationModel);
262
		} else {
263
			notificationService.sendNotificationToAll(sendNotificationModel);
264
		}
29900 amit.gupta 265
 
266
	}
29926 amit.gupta 267
 
268
	private InputStream asInputStream(BufferedImage bi) throws Exception {
29900 amit.gupta 269
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
270
		ImageIO.write(bi, "png", baos);
271
		return new ByteArrayInputStream(baos.toByteArray());
29926 amit.gupta 272
 
29900 amit.gupta 273
	}
274
 
275
	private ChannelSftp setupJsch() throws JSchException {
276
		JSch jsch = new JSch();
277
		Session jschSession = jsch.getSession("root", "192.168.179.131");
29926 amit.gupta 278
		// Session jschSession = jsch.getSession("root", "173.255.254.24");
279
		LOGGER.info("getClass().getResource(\"id_rsa\") {}",
280
				getClass().getClassLoader().getResource("id_rsa").getPath());
29900 amit.gupta 281
		jsch.addIdentity(getClass().getClassLoader().getResource("id_rsa").getPath());
29926 amit.gupta 282
		// jschSession.setPassword("spic@2015static0");
29900 amit.gupta 283
		jschSession.setConfig("StrictHostKeyChecking", "no");
284
		jschSession.connect();
285
		return (ChannelSftp) jschSession.openChannel("sftp");
286
	}
287
 
288
	private void fileUpload(ChannelSftp channelSftp, Map<String, InputStream> streamsFileMap, String destinationPath)
289
			throws SftpException, FileNotFoundException {
290
 
291
		channelSftp.cd(destinationPath);
292
		String folderName = "image" + LocalDate.now();
293
 
294
		channelSftp.cd(destinationPath);
295
		SftpATTRS attrs = null;
296
 
297
		// check if the directory is already existing
298
		try {
299
			attrs = channelSftp.stat(folderName);
300
		} catch (Exception e) {
301
			System.out.println(destinationPath + "/" + folderName + " not found");
302
		}
303
 
304
		// else create a directory
305
		if (attrs == null) {
306
			channelSftp.mkdir(folderName);
307
			channelSftp.chmod(0755, ".");
308
		}
309
		channelSftp.cd(folderName);
310
 
311
		for (Map.Entry<String, InputStream> streamsFileEntry : streamsFileMap.entrySet()) {
312
			channelSftp.put(streamsFileEntry.getValue(), streamsFileEntry.getKey(), ChannelSftp.OVERWRITE);
313
		}
314
 
315
	}
29926 amit.gupta 316
 
29900 amit.gupta 317
	private void uploadFile(Map<String, InputStream> fileStreamsMap) throws Exception {
318
		ChannelSftp channelSftp = setupJsch();
319
		channelSftp.connect();
320
		this.fileUpload(channelSftp, fileStreamsMap, IMAGE_REMOTE_DIR + "");
321
		channelSftp.exit();
322
	}
29926 amit.gupta 323
 
324
	private InputStream getImageBuffer(String html) throws Exception {
325
 
29900 amit.gupta 326
		String fileName = "/tmp/" + Instant.now().toEpochMilli();
327
		FileUtils.writeStringToFile(new File(fileName), html, "UTF-8");
29920 amit.gupta 328
		String address = "file:" + fileName;
29921 amit.gupta 329
		Java2DRenderer renderer = new Java2DRenderer(address, 400);
29926 amit.gupta 330
		RenderingHints hints = new RenderingHints(RenderingHints.KEY_COLOR_RENDERING,
331
				RenderingHints.VALUE_COLOR_RENDER_QUALITY);
29920 amit.gupta 332
		hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
333
		hints.add(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
334
		hints.add(new RenderingHints(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC));
335
		renderer.setRenderingHints(hints);
336
		BufferedImage img = renderer.getImage();
337
		ByteArrayOutputStream os = new ByteArrayOutputStream();
338
		ImageIO.write(img, "png", os);
339
		return new ByteArrayInputStream(os.toByteArray());
29900 amit.gupta 340
	}
341
 
342
	@Autowired
30470 amit.gupta 343
	private VelocityEngine velocityEngine;
29900 amit.gupta 344
 
30470 amit.gupta 345
 
346
	@Autowired
347
	@Qualifier("velocityAttributesMap")
348
	private Map<String, Object> velocityAttributesMap;
349
 
29900 amit.gupta 350
	private String getContentFromTemplate(String template, Map<String, Object> model) {
351
		StringBuffer content = new StringBuffer();
352
		try {
30470 amit.gupta 353
			((HashMap<String, Object>) (velocityAttributesMap.entrySet().stream().findAny().get()).getValue()).entrySet().stream().forEach(x -> {
354
				model.put(x.getKey(), x.getValue());
355
			});
29900 amit.gupta 356
			content.append(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, template, model));
357
		} catch (Exception e) {
358
			e.printStackTrace();
359
		}
360
		return content.toString();
361
	}
362
 
27876 amit.gupta 363
	@RequestMapping(value = "/offerHistory", method = RequestMethod.GET)
364
	public String getPaginatedOffers(HttpServletRequest request, @RequestParam YearMonth yearMonth, Model model)
365
			throws ProfitMandiBusinessException {
27391 tejbeer 366
 
29900 amit.gupta 367
		List<CreateOfferRequest> publishedOffers = offerService.getAllOffers(yearMonth).values().stream()
368
				.sorted(Comparator.comparing(CreateOfferRequest::getId).reversed()).collect(Collectors.toList());
27876 amit.gupta 369
		model.addAttribute("offers", publishedOffers);
370
		model.addAttribute("yearMonth", yearMonth);
27391 tejbeer 371
 
372
		return "offer_history";
373
	}
374
 
27876 amit.gupta 375
	@RequestMapping(value = "/offer-details", method = RequestMethod.GET)
376
	public String schemeDetails(HttpServletRequest request, @RequestParam int offerId, Model model)
27391 tejbeer 377
			throws ProfitMandiBusinessException {
29839 amit.gupta 378
		CreateOfferRequest createOfferRequest = offerService.getOffer(0, offerId);
27391 tejbeer 379
 
27876 amit.gupta 380
		model.addAttribute("offer", createOfferRequest);
381
		return "offer-details";
27391 tejbeer 382
	}
383
 
27876 amit.gupta 384
	@RequestMapping(value = "/offerDownload", method = RequestMethod.GET)
385
	public ResponseEntity<?> dowloadOfferSummary(HttpServletRequest request, @RequestParam int offerId, Model model)
386
			throws Exception {
387
		List<List<?>> listOfRows = new ArrayList<>();
388
		final HttpHeaders headers = new HttpHeaders();
389
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
390
		headers.set("Content-disposition", "inline; filename=offer-" + offerId + ".csv");
29785 amit.gupta 391
		CreateOfferRequest createOfferRequest = offerService.getOffer(0, offerId);
27876 amit.gupta 392
		Collection<OfferRowModel> offerRowModels = offerRepository.getOfferRows(createOfferRequest);
27391 tejbeer 393
 
27876 amit.gupta 394
		for (OfferRowModel offerRowModel : offerRowModels) {
395
			CustomRetailer customRetailer = retailerService.getFofoRetailer(offerRowModel.getFofoId());
396
			listOfRows.add(Arrays.asList(createOfferRequest.getId(), createOfferRequest.getName(),
397
					createOfferRequest.getTargetType(), createOfferRequest.getSchemeType(),
398
					createOfferRequest.getBrandShareTerms(), createOfferRequest.getSellinPercentage(),
399
					createOfferRequest.getPartnerCriteriaString(), createOfferRequest.getItemCriteriaString(),
400
					createOfferRequest.getStartDate(), createOfferRequest.getEndDate(),
401
					createOfferRequest.getCreatedOn(), customRetailer.getPartnerId(), customRetailer.getBusinessName(),
402
					customRetailer.getCode(), offerRowModel.getTotalSale(), offerRowModel.getEligibleSale(),
403
					offerRowModel.getAchievedTarget(), offerRowModel.getNextTarget(), offerRowModel.getEligibleSaleDp(),
404
					offerRowModel.getTotalPurchaseValue(), offerRowModel.getCurrentPayoutTarget(),
405
					offerRowModel.getPayoutTargetAchieved(), offerRowModel.getAmountType(),
406
					offerRowModel.getPayoutValue(), offerRowModel.getPayoutValueDp(), offerRowModel.getFinalPayout(),
407
					String.join(", ", offerRowModel.getPendingImeis())));
27391 tejbeer 408
		}
27876 amit.gupta 409
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
410
				Arrays.asList("Id", "Name", "Target Type", "Scheme Type", "Brand %", "Sellin %", "Partner Criteria",
411
						"Item Criteria", "Start", "End", "Created", "Partner Id", "Partner Name", "Partner Code",
412
						"Total Sale", "Eligible Sale", "Achieved Target", "Next Target", "Eligible Sale DP",
413
						"Total Purchase DP", "Current Payout Target", "Payout Target Achieved", "Payout Amount Type",
414
						"Payout Value", "Payout Value DP", "Amount to be credited", "IMEIs pending for Activation"
30426 tejbeer 415
				// "Payout Sale Qty", "Activated Value", "Activated Qty",
27876 amit.gupta 416
				), listOfRows);
417
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
418
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
419
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
27391 tejbeer 420
	}
29900 amit.gupta 421
 
27876 amit.gupta 422
	@RequestMapping(value = "/offerById", method = RequestMethod.GET)
423
	public String offerById(HttpServletRequest request, int offerId, Model model) throws ProfitMandiBusinessException {
27391 tejbeer 424
		Offer offer = offerRepository.selectById(offerId);
425
 
426
		model.addAttribute("offer", offer);
427
 
27876 amit.gupta 428
		return "offer-edit";
27391 tejbeer 429
 
430
	}
29900 amit.gupta 431
 
29675 amit.gupta 432
	@RequestMapping(value = "/published-offers/{yearMonth}", method = RequestMethod.GET)
29900 amit.gupta 433
	public String publishedOffersOnMonthBefore(HttpServletRequest request, @PathVariable int yearMonth, Model model)
434
			throws ProfitMandiBusinessException {
29675 amit.gupta 435
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
436
		int fofoId = loginDetails.getFofoId();
29900 amit.gupta 437
		List<CreateOfferRequest> createOffers = offerService.getPublishedOffers(fofoId,
438
				YearMonth.from(LocalDate.now()).minusMonths(yearMonth));
439
 
29675 amit.gupta 440
		model.addAttribute("publishedOffers", createOffers);
29900 amit.gupta 441
 
29675 amit.gupta 442
		return "published-offers";
443
	}
29900 amit.gupta 444
 
29682 amit.gupta 445
	@PostMapping(value = "/offers/upload")
446
	public String uploadOffers(HttpServletRequest request, @RequestPart("file") MultipartFile targetFile, Model model)
447
			throws Exception {
448
		offerService.createOffers(targetFile.getInputStream());
449
		model.addAttribute("response", true);
450
		return "response";
451
	}
29900 amit.gupta 452
 
29785 amit.gupta 453
	@Autowired
454
	RoleManager roleManager;
27391 tejbeer 455
 
27876 amit.gupta 456
	@RequestMapping(value = "/getOfferMargins", method = RequestMethod.GET)
457
	public String getOfferMargins(HttpServletRequest request,
30426 tejbeer 458
			@RequestParam(name = "offerId", defaultValue = "0") int offerId, Model model) throws Exception {
27876 amit.gupta 459
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
29785 amit.gupta 460
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
29900 amit.gupta 461
		CreateOfferRequest createOfferRequest = offerService.getOffer(isAdmin ? 0 : loginDetails.getFofoId(), offerId);
462
 
27876 amit.gupta 463
		model.addAttribute("offer", createOfferRequest);
27391 tejbeer 464
 
27876 amit.gupta 465
		return "offer_margin_detail_partner";
27391 tejbeer 466
 
467
	}
468
 
27895 amit.gupta 469
}