Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
22860 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
23020 ashik.ali 3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.InputStream;
26674 tejbeer 6
import java.time.LocalDate;
23020 ashik.ali 7
import java.time.LocalDateTime;
26674 tejbeer 8
import java.time.LocalTime;
9
import java.util.ArrayList;
23556 amit.gupta 10
import java.util.Arrays;
23914 govind 11
import java.util.HashMap;
23556 amit.gupta 12
import java.util.HashSet;
26674 tejbeer 13
import java.util.LinkedHashSet;
22860 ashik.ali 14
import java.util.List;
26674 tejbeer 15
import java.util.ListIterator;
23020 ashik.ali 16
import java.util.Map;
25368 amit.gupta 17
import java.util.Set;
26588 tejbeer 18
import java.util.stream.Collectors;
22860 ashik.ali 19
 
20
import javax.servlet.http.HttpServletRequest;
25368 amit.gupta 21
import javax.transaction.Transactional;
22860 ashik.ali 22
 
23784 ashik.ali 23
import org.apache.logging.log4j.LogManager;
23568 govind 24
import org.apache.logging.log4j.Logger;
22860 ashik.ali 25
import org.springframework.beans.factory.annotation.Autowired;
23784 ashik.ali 26
import org.springframework.beans.factory.annotation.Qualifier;
23020 ashik.ali 27
import org.springframework.core.io.InputStreamResource;
28
import org.springframework.http.HttpHeaders;
29
import org.springframework.http.HttpStatus;
30
import org.springframework.http.ResponseEntity;
22860 ashik.ali 31
import org.springframework.stereotype.Controller;
32
import org.springframework.ui.Model;
33
import org.springframework.web.bind.annotation.RequestBody;
34
import org.springframework.web.bind.annotation.RequestMapping;
35
import org.springframework.web.bind.annotation.RequestMethod;
36
import org.springframework.web.bind.annotation.RequestParam;
37
 
26588 tejbeer 38
import com.google.gson.Gson;
23020 ashik.ali 39
import com.spice.profitmandi.common.enumuration.DateTimePattern;
22860 ashik.ali 40
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
26588 tejbeer 41
import com.spice.profitmandi.common.model.CustomRetailer;
23914 govind 42
import com.spice.profitmandi.common.model.MapWrapper;
22860 ashik.ali 43
import com.spice.profitmandi.common.model.ProfitMandiConstants;
23557 amit.gupta 44
import com.spice.profitmandi.common.model.SchemeItems;
23020 ashik.ali 45
import com.spice.profitmandi.common.model.SchemeModel;
46
import com.spice.profitmandi.common.util.ExcelUtils;
47
import com.spice.profitmandi.common.util.StringUtils;
23784 ashik.ali 48
import com.spice.profitmandi.common.web.util.ResponseSender;
26674 tejbeer 49
import com.spice.profitmandi.dao.entity.catalog.Item;
26588 tejbeer 50
import com.spice.profitmandi.dao.entity.catalog.Offer;
51
import com.spice.profitmandi.dao.entity.catalog.OfferPartner;
52
import com.spice.profitmandi.dao.entity.catalog.Offermargin;
22860 ashik.ali 53
import com.spice.profitmandi.dao.entity.catalog.Scheme;
25505 amit.gupta 54
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
26674 tejbeer 55
import com.spice.profitmandi.dao.entity.fofo.PrebookingListing;
23556 amit.gupta 56
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
26588 tejbeer 57
import com.spice.profitmandi.dao.enumuration.catalog.ItemCriteriaType;
58
import com.spice.profitmandi.dao.model.AmountMarginModel;
59
import com.spice.profitmandi.dao.model.CreateOfferRequest;
25505 amit.gupta 60
import com.spice.profitmandi.dao.model.CreateSchemeRequest;
26588 tejbeer 61
import com.spice.profitmandi.dao.model.ItemTypeParams;
62
import com.spice.profitmandi.dao.model.SimpleItemType;
26674 tejbeer 63
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
26588 tejbeer 64
import com.spice.profitmandi.dao.repository.catalog.OfferMarginRepository;
65
import com.spice.profitmandi.dao.repository.catalog.OfferPartnerRepository;
66
import com.spice.profitmandi.dao.repository.catalog.OfferRepository;
22860 ashik.ali 67
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
23556 amit.gupta 68
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
26588 tejbeer 69
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
70
import com.spice.profitmandi.dao.repository.dtr.Mongo;
23784 ashik.ali 71
import com.spice.profitmandi.dao.repository.dtr.RoleRepository;
26674 tejbeer 72
import com.spice.profitmandi.dao.repository.fofo.PartnerTypeChangeService;
23506 amit.gupta 73
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
23556 amit.gupta 74
import com.spice.profitmandi.dao.repository.fofo.SchemeItemRepository;
23798 amit.gupta 75
import com.spice.profitmandi.service.authentication.RoleManager;
23020 ashik.ali 76
import com.spice.profitmandi.service.inventory.InventoryService;
22860 ashik.ali 77
import com.spice.profitmandi.service.scheme.SchemeService;
26588 tejbeer 78
import com.spice.profitmandi.service.user.RetailerService;
22860 ashik.ali 79
import com.spice.profitmandi.web.model.LoginDetails;
80
import com.spice.profitmandi.web.util.CookiesProcessor;
23570 amit.gupta 81
import com.spice.profitmandi.web.util.MVCResponseSender;
22860 ashik.ali 82
 
83
@Controller
25369 amit.gupta 84
@Transactional(rollbackOn = Throwable.class)
22860 ashik.ali 85
public class SchemeController {
86
 
23568 govind 87
	private static final Logger LOGGER = LogManager.getLogger(SchemeController.class);
22860 ashik.ali 88
 
89
	@Autowired
22927 ashik.ali 90
	private SchemeService schemeService;
23786 amit.gupta 91
 
22860 ashik.ali 92
	@Autowired
22927 ashik.ali 93
	private SchemeRepository schemeRepository;
22860 ashik.ali 94
 
95
	@Autowired
23556 amit.gupta 96
	private SchemeItemRepository schemeItemRepository;
23786 amit.gupta 97
 
23556 amit.gupta 98
	@Autowired
23570 amit.gupta 99
	private MVCResponseSender mvcResponseSender;
23786 amit.gupta 100
 
23570 amit.gupta 101
	@Autowired
22927 ashik.ali 102
	private CookiesProcessor cookiesProcessor;
23786 amit.gupta 103
 
23020 ashik.ali 104
	@Autowired
23784 ashik.ali 105
	@Qualifier("fofoInventoryService")
23020 ashik.ali 106
	private InventoryService inventoryService;
23556 amit.gupta 107
 
108
	@Autowired
109
	private TagListingRepository tagListingRepository;
23914 govind 110
 
23798 amit.gupta 111
	@Autowired
112
	private RoleManager roleManager;
23786 amit.gupta 113
 
23506 amit.gupta 114
	@Autowired
26588 tejbeer 115
	private PurchaseRepository purchaseRepository;
23786 amit.gupta 116
 
23784 ashik.ali 117
	@Autowired
118
	private RoleRepository roleRepository;
23786 amit.gupta 119
 
23784 ashik.ali 120
	@Autowired
121
	private ResponseSender<?> responseSender;
22860 ashik.ali 122
 
26588 tejbeer 123
	@Autowired
124
	private OfferRepository offerRepository;
125
 
126
	@Autowired
127
	private OfferMarginRepository offerMarginRepository;
128
 
129
	@Autowired
130
	private FofoStoreRepository fofoStoreRepository;
131
 
132
	@Autowired
133
	private OfferPartnerRepository offerPartnerRepository;
134
 
135
	@Autowired
26674 tejbeer 136
	private ItemRepository itemRepository;
137
 
138
	@Autowired
26588 tejbeer 139
	private Gson gson;
140
 
141
	@Autowired
142
	private RetailerService retailerService;
143
 
144
	@Autowired
145
	private Mongo mongoClient;
146
 
26674 tejbeer 147
	@Autowired
148
	private PartnerTypeChangeService partnerTypeChangeService;
149
 
22860 ashik.ali 150
	@RequestMapping(value = "/createScheme", method = RequestMethod.GET)
23786 amit.gupta 151
	public String createScheme(HttpServletRequest request, Model model) {
152
		// Map<Integer, String> itemIdItemDescriptionMap =
153
		// inventoryService.getAllItemIdItemDescriptionMap();
154
		// model.addAttribute("itemIdItemDescriptionMap", itemIdItemDescriptionMap);
25368 amit.gupta 155
		Set<String> brands = inventoryService.getAllTagListingBrands(ProfitMandiConstants.MOBILE_CATEGORY_ID);
156
		brands.addAll(inventoryService.getAllTagListingBrands(14206));
157
		model.addAttribute("brands", brands);
25505 amit.gupta 158
		model.addAttribute("retailerTypes", PartnerType.values());
22860 ashik.ali 159
		return "create-scheme";
160
	}
23786 amit.gupta 161
 
23914 govind 162
	@RequestMapping(value = "/getTagListingItemsByBrand", method = RequestMethod.POST)
163
	public String getTagListingItemsByBrand(HttpServletRequest request, @RequestBody List<String> brands, Model model) {
164
		Map<Integer, String> itemIdItemDescriptionMap = new HashMap<>();
165
		LOGGER.info("brands" + brands);
166
 
167
		List<MapWrapper<Integer, String>> itemIdItemDescriptionMaplist = inventoryService
168
				.getAllTagListingItemIdItemDescriptionMap(new HashSet<>(brands));
169
		for (MapWrapper<Integer, String> mapWrapper : itemIdItemDescriptionMaplist) {
170
			itemIdItemDescriptionMap.put(mapWrapper.getKey(), mapWrapper.getValue());
171
		}
23020 ashik.ali 172
		model.addAttribute("itemIdItemDescriptionMap", itemIdItemDescriptionMap);
23786 amit.gupta 173
		// model.addAttribute("brands", inventoryService.getAllBrands());
23914 govind 174
 
23419 ashik.ali 175
		return "tag-listing-items-description";
23020 ashik.ali 176
	}
23556 amit.gupta 177
 
178
	@RequestMapping(value = "/schemes/update-schemes-page", method = RequestMethod.GET)
179
	public String updateShcemes(HttpServletRequest request) throws ProfitMandiBusinessException {
180
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23799 amit.gupta 181
		if (!roleManager.isAdmin(loginDetails.getRoleIds())) {
23556 amit.gupta 182
			throw new ProfitMandiBusinessException("User", loginDetails.getEmailId(), "Unauthorised access");
183
		}
184
		return "update-schemes-page";
185
	}
25256 amit.gupta 186
 
23556 amit.gupta 187
	@RequestMapping(value = "/schemes/update", method = RequestMethod.POST)
23786 amit.gupta 188
	public String updateShcemes(HttpServletRequest request, @RequestBody SchemeItems schemeItems, Model model)
189
			throws Exception {
190
		for (int schemeId : schemeItems.getSchemeIds()) {
23928 govind 191
			if (schemeRepository.selectById(schemeId) != null)
192
				for (int itemId : schemeItems.getItemIds()) {
193
					if (tagListingRepository.selectByItemIdsAndTagIds(new HashSet<>(Arrays.asList(itemId)),
194
							new HashSet<>(Arrays.asList(4, 7))).size() > 0) {
195
						SchemeItem si = new SchemeItem();
196
						si.setItemId(itemId);
197
						si.setSchemeId(schemeId);
198
						try {
199
							schemeItemRepository.persist(si);
200
						} catch (Exception e) {
201
							LOGGER.info("Scheme aleady exist");
202
						}
203
						model.addAttribute("response", mvcResponseSender.createResponseString(true));
204
					} else {
205
						model.addAttribute("response", mvcResponseSender.createResponseString(false));
206
						throw new ProfitMandiBusinessException("ItemId", itemId, "Invalid Item Id");
207
					}
208
				}
209
		}
210
		return "response";
211
	}
25256 amit.gupta 212
 
23928 govind 213
	@RequestMapping(value = "/addItemToScheme", method = RequestMethod.POST)
214
	public String updateScheme(HttpServletRequest request, @RequestBody SchemeItems schemeItems, Model model)
215
			throws Exception {
216
		for (int schemeId : schemeItems.getSchemeIds()) {
23914 govind 217
			List<Integer> itemIds = schemeItemRepository.selectItemIdsBySchemeId(schemeId);
23786 amit.gupta 218
			if (schemeRepository.selectById(schemeId) != null)
219
				for (int itemId : schemeItems.getItemIds()) {
220
					if (tagListingRepository.selectByItemIdsAndTagIds(new HashSet<>(Arrays.asList(itemId)),
23914 govind 221
							new HashSet<>(Arrays.asList(4, 7))).size() > 0 && (!(itemIds.contains(itemId)))) {
23786 amit.gupta 222
						SchemeItem si = new SchemeItem();
223
						si.setItemId(itemId);
224
						si.setSchemeId(schemeId);
225
						try {
226
							schemeItemRepository.persist(si);
227
						} catch (Exception e) {
23914 govind 228
							LOGGER.info("Scheme already exist");
23786 amit.gupta 229
						}
230
						model.addAttribute("response", mvcResponseSender.createResponseString(true));
231
					} else {
232
						model.addAttribute("response", mvcResponseSender.createResponseString(false));
23556 amit.gupta 233
					}
234
				}
235
		}
236
		return "response";
237
	}
23914 govind 238
 
239
	@RequestMapping(value = "/schemes/delete", method = RequestMethod.DELETE)
240
	public String deleteShcemes(HttpServletRequest request,
241
			@RequestParam(name = "schemeId", required = false, defaultValue = "0") int schemeId,
242
			@RequestParam(name = "itemId", required = false, defaultValue = "0") int itemId, Model model)
23819 govind 243
			throws Exception {
23914 govind 244
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
245
		if (!(schemeId == 0 && itemId == 0) || (!(schemeId == 0 || itemId == 0))) {
246
			schemeItemRepository.deletebyItemIdsandSchemeIds(itemId, schemeId);
247
 
248
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
249
 
250
			model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
251
 
252
		}
253
		return "response";
254
	}
255
 
256
	@RequestMapping(value = "/extendAllSchemes", method = RequestMethod.POST)
257
	public String extendAllScheme(HttpServletRequest request, @RequestBody LocalDateTime extendDatetime, Model model)
258
			throws Exception {
259
 
260
		List<Scheme> schemes = schemeRepository.selectActiveAll();
261
		if (schemes.size() > 0) {
262
			for (Scheme scheme : schemes) {
25261 amit.gupta 263
				if (scheme.getExpireTimestamp() == null) {
23914 govind 264
					scheme.setEndDateTime(extendDatetime);
265
					schemeRepository.persist(scheme);
23819 govind 266
				}
267
			}
23914 govind 268
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
269
			return "response";
23819 govind 270
		}
23914 govind 271
		model.addAttribute("response", mvcResponseSender.createResponseString(false));
23819 govind 272
		return "response";
273
	}
23786 amit.gupta 274
 
23914 govind 275
	@RequestMapping(value = "/extendSchemeById", method = RequestMethod.POST)
276
	public String extendSchemeById(HttpServletRequest request,
23819 govind 277
 
23914 govind 278
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId,
279
			@RequestBody LocalDateTime extendDatetime, Model model) throws Exception {
280
 
281
		LOGGER.info("ExtendDatetime" + extendDatetime);
282
		LOGGER.info("schemeId" + schemeId);
283
		Scheme scheme = schemeRepository.selectById(schemeId);
284
		if ((!(scheme.getActiveTimestamp() == null)) && scheme.getExpireTimestamp() == null) {
285
			scheme.setEndDateTime(extendDatetime);
286
			schemeRepository.persist(scheme);
287
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
288
			return "response";
289
		}
290
		model.addAttribute("response", mvcResponseSender.createResponseString(false));
291
		return "response";
292
	}
293
 
22860 ashik.ali 294
	@RequestMapping(value = "/createScheme", method = RequestMethod.POST)
23715 govind 295
	public String createScheme(HttpServletRequest request, @RequestBody CreateSchemeRequest createSchemeRequest,
296
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23752 govind 297
			@RequestParam(name = "limit", defaultValue = "10") int limit,
298
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
299
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
23715 govind 300
			throws ProfitMandiBusinessException {
22927 ashik.ali 301
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
22860 ashik.ali 302
		LOGGER.info("CreateSchemeRequest {}", createSchemeRequest);
22927 ashik.ali 303
		schemeService.saveScheme(loginDetails.getFofoId(), createSchemeRequest);
304
		LOGGER.info("Scheme saved successfully");
23271 ashik.ali 305
		long size = schemeRepository.selectAllCount();
22927 ashik.ali 306
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
307
		model.addAttribute("schemes", schemes);
308
		model.addAttribute("start", offset + 1);
23271 ashik.ali 309
		model.addAttribute("size", size);
23752 govind 310
		model.addAttribute("searchItem", searchItem);
311
		model.addAttribute("searchTerm", searchTerm);
23914 govind 312
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23715 govind 313
		if (schemes.size() < limit) {
22927 ashik.ali 314
			model.addAttribute("end", offset + schemes.size());
23786 amit.gupta 315
		} else {
22927 ashik.ali 316
			model.addAttribute("end", offset + limit);
317
		}
318
		return "schemes";
23786 amit.gupta 319
 
22860 ashik.ali 320
	}
23786 amit.gupta 321
 
22860 ashik.ali 322
	@RequestMapping(value = "/getSchemes", method = RequestMethod.GET)
23715 govind 323
	public String getSchemes(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
23752 govind 324
			@RequestParam(name = "limit", defaultValue = "10") int limit,
325
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
26802 tejbeer 326
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
327
			@RequestParam(name = "partnerType", required = false, defaultValue = "") PartnerType partnerType,
328
			Model model) throws ProfitMandiBusinessException {
23343 ashik.ali 329
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
26802 tejbeer 330
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
331
 
332
		LOGGER.info("isAdmin" + isAdmin);
23343 ashik.ali 333
		List<Scheme> schemes = null;
334
		long size = 0;
26802 tejbeer 335
		LOGGER.info("partnerType" + partnerType);
336
		if (partnerType == null) {
337
			partnerType = partnerTypeChangeService.getTypeOnDate(loginDetails.getFofoId(), LocalDate.now());
23343 ashik.ali 338
		}
26802 tejbeer 339
		if (!(searchTerm.equals("")) && searchItem.equals("")) {
340
			schemes = schemeRepository.selectBySearchTerm(searchTerm, offset, limit);
341
			if (!(schemes.size() == 0)) {
342
				size = schemeRepository.selectAllCount();
343
				LOGGER.info("schemes" + schemes);
344
				model.addAttribute("schemes", schemes);
345
				model.addAttribute("start", offset + 1);
346
				model.addAttribute("size", size);
347
				model.addAttribute("searchTerm", searchTerm);
348
				model.addAttribute("searchItem", searchItem);
26912 tejbeer 349
				model.addAttribute("partnerType", partnerType);
26802 tejbeer 350
				model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
351
				if (schemes.size() < limit) {
352
					model.addAttribute("end", offset + schemes.size());
353
				} else {
354
					model.addAttribute("end", offset + limit);
355
				}
356
			} else {
357
				throw new ProfitMandiBusinessException("SchemeId", searchTerm, "SchemeId Not Found");
358
			}
23786 amit.gupta 359
		} else {
26802 tejbeer 360
			int itemId = 0;
361
			if (!(searchItem.equals("")) && searchTerm.equals("")) {
362
				itemId = Integer.parseInt(searchItem);
363
			}
364
 
365
			schemes = schemeService.selectSchemeByPartnerType(partnerType, itemId, isAdmin, offset, limit);
366
			size = schemeService.selectSchemeCount(partnerType, itemId, isAdmin);
367
			model.addAttribute("schemes", schemes);
368
			model.addAttribute("start", offset + 1);
369
			model.addAttribute("size", size);
370
			model.addAttribute("searchItem", searchItem);
371
			model.addAttribute("searchTerm", searchTerm);
26912 tejbeer 372
			model.addAttribute("partnerType", partnerType);
26802 tejbeer 373
			model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
374
			if (schemes.size() < limit) {
375
				model.addAttribute("end", offset + schemes.size());
376
			} else {
377
				model.addAttribute("end", offset + limit);
378
			}
22860 ashik.ali 379
		}
23786 amit.gupta 380
		// model.addAttribute("roleTypes", loginDetails.getRoleTypes());
22860 ashik.ali 381
		return "schemes";
382
	}
23786 amit.gupta 383
 
22860 ashik.ali 384
	@RequestMapping(value = "/getPaginatedSchemes", method = RequestMethod.GET)
23786 amit.gupta 385
	public String getPaginatedSchemes(HttpServletRequest request,
386
			@RequestParam(name = "offset", defaultValue = "0") int offset,
26802 tejbeer 387
			@RequestParam(name = "limit", defaultValue = "10") int limit,
388
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
389
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
390
			@RequestParam(name = "partnerType", required = false, defaultValue = "") PartnerType partnerType,
391
			Model model) throws ProfitMandiBusinessException {
392
 
23343 ashik.ali 393
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
26802 tejbeer 394
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
395
 
23271 ashik.ali 396
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23343 ashik.ali 397
		List<Scheme> schemes = null;
26802 tejbeer 398
		/*
399
		 * if (roleManager.isAdmin(loginDetails.getRoleIds())) { schemes =
400
		 * schemeRepository.selectAll(offset, limit); } else { schemes =
401
		 * schemeRepository.selectActiveAll(offset, limit); }
402
		 */
403
		if (partnerType == null) {
404
			partnerType = partnerTypeChangeService.getTypeOnDate(loginDetails.getFofoId(), LocalDate.now());
23343 ashik.ali 405
		}
26802 tejbeer 406
		LOGGER.info("partnerType" + partnerType);
407
		int itemId = 0;
408
		if (!(searchItem.equals("")) && searchTerm.equals("")) {
409
			itemId = Integer.parseInt(searchItem);
410
		}
411
		schemes = schemeService.selectSchemeByPartnerType(partnerType, itemId, isAdmin, offset, limit);
412
 
22860 ashik.ali 413
		model.addAttribute("schemes", schemes);
26912 tejbeer 414
		model.addAttribute("partnerType", partnerType);
23914 govind 415
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
22860 ashik.ali 416
		return "schemes-paginated";
417
	}
23786 amit.gupta 418
 
23020 ashik.ali 419
	@RequestMapping(value = "/schemes/downloadPage", method = RequestMethod.GET)
23786 amit.gupta 420
	public String downloadPage(HttpServletRequest request, Model model) {
23020 ashik.ali 421
		return "schemes-download";
422
	}
23786 amit.gupta 423
 
23020 ashik.ali 424
	@RequestMapping(value = "/schemes/download", method = RequestMethod.GET)
23786 amit.gupta 425
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request,
23914 govind 426
			@RequestParam(name = ProfitMandiConstants.START_DATE_TIME) String startDateTimeString,
427
			@RequestParam(name = ProfitMandiConstants.END_DATE_TIME) String endDateTimeString, Model model)
23786 amit.gupta 428
			throws ProfitMandiBusinessException {
23914 govind 429
		LocalDateTime startDateTime = StringUtils.toDateTime(startDateTimeString,
24406 amit.gupta 430
				DateTimePattern.DD_MM_yyyy_T_HH_MM_SS);
431
		LocalDateTime endDateTime = StringUtils.toDateTime(endDateTimeString, DateTimePattern.DD_MM_yyyy_T_HH_MM_SS);
23914 govind 432
 
23020 ashik.ali 433
		List<SchemeModel> schemeModels = schemeService.getAllSchemeModels(startDateTime, endDateTime);
23786 amit.gupta 434
 
23020 ashik.ali 435
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
436
		ExcelUtils.writeSchemeModels(schemeModels, byteArrayOutputStream);
23786 amit.gupta 437
 
438
		final HttpHeaders headers = new HttpHeaders();
439
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
23020 ashik.ali 440
		headers.set("Content-disposition", "inline; filename=SchemesReport.xlsx");
23786 amit.gupta 441
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
442
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
443
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
444
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
445
 
446
		// return responseSender.ok(ResponseCodeHolder.getMessage("ITM_AGNG_OK_1000"));
23020 ashik.ali 447
	}
23786 amit.gupta 448
 
22860 ashik.ali 449
	@RequestMapping(value = "/getSchemeById", method = RequestMethod.GET)
23786 amit.gupta 450
	public String getSchemeById(HttpServletRequest request,
451
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId, Model model)
452
			throws ProfitMandiBusinessException {
23343 ashik.ali 453
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
22860 ashik.ali 454
		Scheme scheme = schemeService.getSchemeById(schemeId);
455
		model.addAttribute("scheme", scheme);
24445 amit.gupta 456
		model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
22860 ashik.ali 457
		return "scheme-details";
23914 govind 458
 
22860 ashik.ali 459
	}
23786 amit.gupta 460
 
22860 ashik.ali 461
	@RequestMapping(value = "/activeSchemeById", method = RequestMethod.PUT)
23786 amit.gupta 462
	public String activeSchemeById(HttpServletRequest request,
463
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId,
464
			@RequestParam(name = "offset", defaultValue = "0") int offset,
465
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
466
			throws ProfitMandiBusinessException {
22860 ashik.ali 467
		schemeService.activeSchemeById(schemeId);
468
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
469
		model.addAttribute("schemes", schemes);
470
		return "schemes-paginated";
471
	}
23786 amit.gupta 472
 
22860 ashik.ali 473
	@RequestMapping(value = "/expireSchemeById", method = RequestMethod.PUT)
23786 amit.gupta 474
	public String expireSchemeById(HttpServletRequest request,
475
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId,
25069 amit.gupta 476
			@RequestParam(name = ProfitMandiConstants.EXPIRE_TIMESTAMP) LocalDateTime expiryTimestamp,
23786 amit.gupta 477
			@RequestParam(name = "offset", defaultValue = "0") int offset,
478
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
479
			throws ProfitMandiBusinessException {
25069 amit.gupta 480
		schemeService.expireSchemeById(schemeId, expiryTimestamp);
22860 ashik.ali 481
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
482
		model.addAttribute("schemes", schemes);
483
		return "schemes-paginated";
484
	}
23786 amit.gupta 485
 
23784 ashik.ali 486
	@RequestMapping(value = "/getSchemesJson", method = RequestMethod.GET)
23786 amit.gupta 487
	public ResponseEntity<?> getSchemesJson(HttpServletRequest request,
488
			@RequestParam(name = "offset", defaultValue = "0") int offset,
489
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
490
			throws ProfitMandiBusinessException {
23784 ashik.ali 491
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
492
		return responseSender.ok(schemeService.getSchemes(loginDetails.getRoleIds(), offset, limit));
493
	}
26802 tejbeer 494
 
26763 tejbeer 495
	@RequestMapping(value = "/searchSchemeByCategory")
496
	public String getSchemeByCategory(HttpServletRequest request,
497
			@RequestParam(name = "offset", defaultValue = "0") int offset,
498
			@RequestParam(name = "limit", defaultValue = "10") int limit,
499
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
500
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
501
			@RequestParam(name = "category", required = true, defaultValue = "") PartnerType category, Model model)
502
			throws ProfitMandiBusinessException {
503
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
504
		List<Scheme> schemes = null;
505
		long size = 0;
26802 tejbeer 506
 
507
		schemes = schemeRepository.selectByPartnerType(category, offset, limit);
508
 
509
		if (!(schemes.size() == 0)) {
510
			size = schemeRepository.selectAllCount();
511
			LOGGER.info("schemes" + schemes);
512
			model.addAttribute("schemes", schemes);
513
			model.addAttribute("start", offset + 1);
514
			model.addAttribute("size", size);
515
			model.addAttribute("searchTerm", searchTerm);
516
			model.addAttribute("searchItem", searchItem);
517
			model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
518
			if (schemes.size() < limit) {
519
				model.addAttribute("end", offset + schemes.size());
520
			} else {
521
				model.addAttribute("end", offset + limit);
26763 tejbeer 522
			}
26802 tejbeer 523
		}
524
 
26763 tejbeer 525
		return "schemes";
526
	}
26802 tejbeer 527
 
26763 tejbeer 528
	@RequestMapping(value = "/getSchemeByCategoryPaginated")
529
	public String getSchemeByCategoryPaginated(HttpServletRequest request,
530
			@RequestParam(name = "offset", defaultValue = "0") int offset,
531
			@RequestParam(name = "limit", defaultValue = "10") int limit,
532
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
533
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
534
			@RequestParam(name = "category", required = true, defaultValue = "") PartnerType category, Model model)
535
			throws ProfitMandiBusinessException {
536
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
537
		LOGGER.info("In search Item....");
538
		List<Scheme> schemes = null;
26802 tejbeer 539
 
26763 tejbeer 540
		schemes = schemeRepository.selectByPartnerType(category, offset, limit);
23506 amit.gupta 541
 
26763 tejbeer 542
		model.addAttribute("schemes", schemes);
543
		model.addAttribute("searchItem", searchItem);
544
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
545
		return "schemes-paginated";
546
	}
547
 
23752 govind 548
	@RequestMapping(value = "/searchScheme")
549
	public String getSchemeBySchemeId(HttpServletRequest request,
550
			@RequestParam(name = "offset", defaultValue = "0") int offset,
551
			@RequestParam(name = "limit", defaultValue = "10") int limit,
552
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
553
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem, Model model)
554
			throws ProfitMandiBusinessException {
555
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
556
		List<Scheme> schemes = null;
557
		long size = 0;
558
		if (!(searchTerm.equals("")) && searchItem.equals("")) {
559
			schemes = schemeRepository.selectBySearchTerm(searchTerm, offset, limit);
23786 amit.gupta 560
			if (!(schemes.size() == 0)) {
561
				size = schemeRepository.selectAllCount();
562
				LOGGER.info("schemes" + schemes);
563
				model.addAttribute("schemes", schemes);
564
				model.addAttribute("start", offset + 1);
565
				model.addAttribute("size", size);
566
				model.addAttribute("searchTerm", searchTerm);
567
				model.addAttribute("searchItem", searchItem);
23914 govind 568
				model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23786 amit.gupta 569
				if (schemes.size() < limit) {
570
					model.addAttribute("end", offset + schemes.size());
571
				} else {
572
					model.addAttribute("end", offset + limit);
573
				}
23752 govind 574
			} else {
23786 amit.gupta 575
				throw new ProfitMandiBusinessException("SchemeId", searchTerm, "SchemeId Not Found");
23752 govind 576
			}
577
		} else if (!(searchItem.equals("")) && searchTerm.equals("")) {
578
			List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(Integer.parseInt(searchItem));
23786 amit.gupta 579
			if (!(schemeIds.size() == 0)) {
23752 govind 580
				LOGGER.info("schemeIds in searchItemScheme" + schemeIds);
581
				schemes = schemeRepository.selectBySchemeIds(schemeIds, offset, limit);
582
				size = schemeIds.size();
583
				LOGGER.info("Size" + size);
584
				model.addAttribute("schemes", schemes);
585
				model.addAttribute("start", offset + 1);
586
				model.addAttribute("size", size);
587
				model.addAttribute("searchItem", searchItem);
588
				model.addAttribute("searchTerm", searchTerm);
23914 govind 589
				model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23752 govind 590
				if (schemes.size() < limit) {
591
					model.addAttribute("end", offset + schemes.size());
592
				} else {
593
					model.addAttribute("end", offset + limit);
594
				}
595
 
596
			} else {
597
				throw new ProfitMandiBusinessException("SchemeIds", searchItem, "SchemeId Not Found");
598
			}
599
		} else {
23798 amit.gupta 600
			if (roleManager.isAdmin(loginDetails.getRoleIds())) {
23752 govind 601
				schemes = schemeRepository.selectAll(offset, limit);
602
				size = schemeRepository.selectAllCount();
603
			} else {
604
				schemes = schemeRepository.selectActiveAll(offset, limit);
605
				size = schemeRepository.selectAllActiveCount();
606
			}
607
			model.addAttribute("schemes", schemes);
608
			model.addAttribute("start", offset + 1);
609
			model.addAttribute("size", size);
610
			model.addAttribute("searchItem", searchItem);
611
			model.addAttribute("searchTerm", searchTerm);
23914 govind 612
			model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23752 govind 613
			if (schemes.size() < limit) {
614
				model.addAttribute("end", offset + schemes.size());
615
			} else {
616
				model.addAttribute("end", offset + limit);
617
			}
618
		}
619
		return "schemes";
620
	}
621
 
622
	@RequestMapping(value = "/searchItemSchemePanigated")
623
	public String getSchemeByItemPanigated(HttpServletRequest request,
624
			@RequestParam(name = "offset", defaultValue = "0") int offset,
625
			@RequestParam(name = "limit", defaultValue = "10") int limit,
626
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem, Model model)
627
			throws ProfitMandiBusinessException {
23914 govind 628
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23752 govind 629
		LOGGER.info("In search Item....");
630
		List<Scheme> schemes = null;
631
		if (!searchItem.equals("")) {
632
			List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(Integer.parseInt(searchItem));
633
			if (schemeIds != null) {
634
				LOGGER.info(schemeIds);
635
				schemes = schemeRepository.selectBySchemeIds(schemeIds, offset, limit);
636
 
637
			}
638
		}
639
		model.addAttribute("schemes", schemes);
640
		model.addAttribute("searchItem", searchItem);
23914 govind 641
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23752 govind 642
		return "schemes-paginated";
643
 
644
	}
645
 
26588 tejbeer 646
	@RequestMapping(value = "/getCreateOffer", method = RequestMethod.GET)
647
	public String getCreateOffer(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
648
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
649
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
650
				.collect(Collectors.toList());
651
 
652
		List<String> brands = mongoClient.getMongoBrands(loginDetails.getFofoId(), null, 3).stream()
653
				.map(x -> (String) x.get("name")).collect(Collectors.toList());
654
 
655
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
656
 
657
		model.addAttribute("customRetailersMap", customRetailersMap);
658
		model.addAttribute("itemCriteriaType", ItemCriteriaType.values());
659
		model.addAttribute("brands", brands);
27171 tejbeer 660
		model.addAttribute("partnerCategories", PartnerType.values());
27361 amit.gupta 661
		model.addAttribute("warehouseRegion", ProfitMandiConstants.WAREHOUSE_MAP);
662
		//model.addAttribute("brands", "");
26588 tejbeer 663
		return "scheme_offer";
664
 
665
	}
666
 
667
	@RequestMapping(value = "/createOffer", method = RequestMethod.POST)
668
	public String createOffer(HttpServletRequest request, @RequestBody CreateOfferRequest createOfferRequest,
669
			Model model) throws Exception {
670
		LOGGER.info("createOfferRequest" + createOfferRequest.getAmountOffer());
671
 
672
		Offer offer = new Offer();
673
		offer.setName(createOfferRequest.getName());
674
		offer.setDescription(createOfferRequest.getDescription());
675
		offer.setTargetType(createOfferRequest.getTargetType());
676
		offer.setAmountType(createOfferRequest.getAmountType());
27361 amit.gupta 677
		offer.setStartDate(createOfferRequest.getStartDate());
678
		offer.setEndDate(createOfferRequest.getEndDate());
26588 tejbeer 679
		offer.setCreatedTimestamp(LocalDateTime.now());
26694 tejbeer 680
		offer.setSchemeType(createOfferRequest.getSchemeType());
27361 amit.gupta 681
		//offer.setItemCreteria(createOfferRequest.getItemCriteria());
682
		//offer.setCriteria(createOfferRequest.getCriteria());
683
		//offer.setPartnerType(createOfferRequest.getPartnerType());
26588 tejbeer 684
 
685
		if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
686
			ItemTypeParams itemTypeParams = new ItemTypeParams();
687
			itemTypeParams.setCatalogId(createOfferRequest.getCatalogIds());
688
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
689
			sit.setItemTypeParams(itemTypeParams);
27361 amit.gupta 690
			//offer.setItemParam(gson.toJson(itemTypeParams));
26588 tejbeer 691
		} else if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
692
			ItemTypeParams itemTypeParams = new ItemTypeParams();
693
			itemTypeParams.setBrands(createOfferRequest.getBrands());
694
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
695
			sit.setItemTypeParams(itemTypeParams);
27361 amit.gupta 696
			//offer.setItemParam(gson.toJson(itemTypeParams));
26588 tejbeer 697
		}
698
 
699
		offerRepository.persist(offer);
26674 tejbeer 700
		if (createOfferRequest.getFofoIds().isEmpty()) {
701
			List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
702
					.collect(Collectors.toList());
703
			for (Integer fofoId : fofoIds) {
704
				PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fofoId,
27361 amit.gupta 705
						offer.getStartDate().toLocalDate());
706
				/*if (offer.getPartner().equals(partnerType)) {
26674 tejbeer 707
					LOGGER.info("partnerType" + partnerType);
708
					LOGGER.info("fofoId" + fofoId);
709
 
710
					OfferPartner op = new OfferPartner();
711
					op.setFofoId(fofoId);
712
					op.setOfferId(offer.getId());
713
					offerPartnerRepository.persist(op);
27361 amit.gupta 714
				}*/
26674 tejbeer 715
 
716
			}
26588 tejbeer 717
		}
26674 tejbeer 718
 
719
		else {
720
 
721
			for (Integer fofoId : createOfferRequest.getFofoIds()) {
722
				OfferPartner op = new OfferPartner();
723
				op.setFofoId(fofoId);
724
				op.setOfferId(offer.getId());
725
				offerPartnerRepository.persist(op);
726
			}
727
		}
26588 tejbeer 728
		for (AmountMarginModel amm : createOfferRequest.getAmountOffer()) {
729
			Offermargin om = new Offermargin();
730
			om.setValue(amm.getValue());
731
			om.setMargin(amm.getMargin());
732
			om.setOfferId(offer.getId());
733
			offerMarginRepository.persist(om);
734
		}
735
 
736
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
737
		return "response";
738
 
739
	}
740
 
26674 tejbeer 741
	@RequestMapping(value = "/getOffers", method = RequestMethod.GET)
742
	public String createOffer(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
26719 tejbeer 743
			@RequestParam(name = "limit", defaultValue = "10") int limit,
744
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
745
			throws Exception {
26674 tejbeer 746
 
26719 tejbeer 747
		List<Offer> offers = null;
748
		long size = 0;
26674 tejbeer 749
 
26719 tejbeer 750
		offers = offerRepository.selectAll(offset, limit);
751
		size = offerRepository.selectAllCount();
752
 
26694 tejbeer 753
		model.addAttribute("offers", offers);
26719 tejbeer 754
		model.addAttribute("start", offset + 1);
755
		model.addAttribute("size", size);
756
		model.addAttribute("searchTerm", searchTerm);
26674 tejbeer 757
 
26719 tejbeer 758
		if (offers.size() < limit) {
759
			model.addAttribute("end", offset + offers.size());
760
		} else {
761
			model.addAttribute("end", offset + limit);
762
		}
763
 
26674 tejbeer 764
		return "offer_history";
765
 
766
	}
767
 
26719 tejbeer 768
	@RequestMapping(value = "/getPaginatedOffers", method = RequestMethod.GET)
769
	public String getPaginatedOffers(HttpServletRequest request,
770
			@RequestParam(name = "offset", defaultValue = "0") int offset,
771
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
772
			throws ProfitMandiBusinessException {
773
 
774
		List<Offer> offers = null;
775
		offers = offerRepository.selectAll(offset, limit);
776
		model.addAttribute("offers", offers);
777
 
778
		return "offer_history_paginated";
779
	}
780
 
781
	@RequestMapping(value = "/searchOffer")
782
	public String getOfferById(HttpServletRequest request,
783
			@RequestParam(name = "offset", defaultValue = "0") int offset,
784
			@RequestParam(name = "limit", defaultValue = "10") int limit,
785
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
786
			throws ProfitMandiBusinessException {
787
		List<Offer> offers = null;
788
		long size = 0;
789
		if (!(searchTerm.equals(""))) {
790
			offers = offerRepository.selectBySearchTerm(searchTerm, offset, limit);
791
			if (!(offers.size() == 0)) {
792
				size = offerRepository.selectAllCount();
793
				LOGGER.info("offers" + offers);
794
				model.addAttribute("offers", offers);
795
				model.addAttribute("start", offset + 1);
796
				model.addAttribute("size", size);
797
				model.addAttribute("searchTerm", searchTerm);
798
				if (offers.size() < limit) {
799
					model.addAttribute("end", offset + offers.size());
800
				} else {
801
					model.addAttribute("end", offset + limit);
802
				}
803
			} else {
804
				throw new ProfitMandiBusinessException("OfferId", searchTerm, "offerId Not Found");
805
			}
806
		} else {
807
 
808
			offers = offerRepository.selectAll(offset, limit);
809
			size = schemeRepository.selectAllCount();
810
 
811
			model.addAttribute("offers", offers);
812
			model.addAttribute("start", offset + 1);
813
			model.addAttribute("size", size);
814
			model.addAttribute("searchTerm", searchTerm);
815
 
816
			if (offers.size() < limit) {
817
				model.addAttribute("end", offset + offers.size());
818
			} else {
819
				model.addAttribute("end", offset + limit);
820
			}
821
		}
822
		return "offer_history";
823
	}
824
 
26694 tejbeer 825
	@RequestMapping(value = "/updateOfferStatus", method = RequestMethod.POST)
826
	public String updateOfferStatus(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
26674 tejbeer 827
 
26694 tejbeer 828
		Offer offer = offerRepository.selectById(id);
829
		LOGGER.info("status" + offer.getStatus());
830
 
831
		if (offer.getStatus() == false) {
832
			offer.setStatus(true);
833
		} else {
834
			offer.setStatus(false);
26674 tejbeer 835
		}
27361 amit.gupta 836
		offer.setCreatedTimestamp(LocalDateTime.now());
26694 tejbeer 837
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
838
		return "response";
26674 tejbeer 839
 
840
	}
841
 
842
	@RequestMapping(value = "/getOfferMargin", method = RequestMethod.GET)
843
	public String getOfferMargin(HttpServletRequest request,
844
			@RequestParam(name = "offerId", defaultValue = "0") int offerId, Model model) throws Exception {
845
		Offer offer = offerRepository.selectById(offerId);
846
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
847
				.collect(Collectors.toList());
848
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
849
		List<OfferPartner> offerPartners = offerPartnerRepository.selectByOfferId(offerId);
850
 
851
		LOGGER.info("offerId" + offer.getId());
26675 tejbeer 852
 
27361 amit.gupta 853
		Map<Integer, Double> value = offerRepository.selectSumOfferByRetailer(offer.getStartDate(),
854
				offer.getEndDate(), 0, offer, true);
26674 tejbeer 855
 
856
		LOGGER.info("value" + value);
857
		List<Offermargin> offerMargin = offerMarginRepository.selectByOfferId(offerId);
858
		Map<Integer, Double> partnerValueMap = new HashMap<>();
26675 tejbeer 859
		Map<Integer, List<Double>> partnerMarginMap = new HashMap<Integer, List<Double>>();
26674 tejbeer 860
		Map<Integer, Integer> shortageAmount = new HashMap<>();
861
 
862
		for (OfferPartner op : offerPartners) {
863
 
864
			LOGGER.info("offerPartneer" + op.getFofoId());
865
			if (value.containsKey(op.getFofoId())) {
866
				partnerValueMap.put(op.getFofoId(), value.get(op.getFofoId()));
867
 
868
			} else {
869
				value.put(op.getFofoId(), 0d);
870
 
871
				partnerValueMap.put(op.getFofoId(), 0d);
872
 
873
			}
26675 tejbeer 874
			List<Double> valSetOne = new ArrayList<Double>();
26674 tejbeer 875
 
876
			for (Offermargin om : offerMargin) {
877
 
878
				if (value.get(op.getFofoId()) <= om.getValue()) {
879
					LOGGER.info("om1" + om.getMargin());
880
					shortageAmount.put(op.getFofoId(), om.getValue() - value.get(op.getFofoId()).intValue());
881
					valSetOne.add(om.getMargin());
882
					partnerMarginMap.put(op.getFofoId(), valSetOne);
883
 
884
					break;
885
				} else {
886
					LOGGER.info("om2" + om.getMargin());
887
					valSetOne.add(om.getMargin());
888
 
889
					int shortage = om.getValue() - value.get(op.getFofoId()).intValue();
890
 
891
					if (shortage < 0) {
892
						shortageAmount.put(op.getFofoId(), 0);
893
					}
894
 
895
					partnerMarginMap.put(op.getFofoId(), valSetOne);
896
 
897
				}
898
			}
899
 
900
		}
901
 
902
		LOGGER.info("partnerMarginMap" + partnerMarginMap);
903
		LOGGER.info("partnerValueMap" + partnerValueMap);
904
		LOGGER.info("shortageAmount" + shortageAmount);
905
 
27361 amit.gupta 906
/*		ItemTypeParams scp = gson.fromJson(offer.getItemParam(), ItemTypeParams.class);
26674 tejbeer 907
		if (offer.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
908
			List<String> brands = scp.getBrands();
909
			model.addAttribute("brands", brands);
910
		}
911
		if (offer.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
912
			List<Integer> catalogIds = scp.getCatalogId();
913
			List<Item> newList = new ArrayList<>();
914
			Set<Integer> catalogId = new HashSet<>();
915
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds.stream().collect(Collectors.toSet()));
916
			for (Item item : items) {
917
				if (catalogId.add(item.getCatalogItemId())) {
918
					newList.add(item);
919
				}
920
			}
921
			model.addAttribute("items", newList);
27361 amit.gupta 922
		}*/
26674 tejbeer 923
		model.addAttribute("partnerMarginMap", partnerMarginMap);
924
		model.addAttribute("partnerValueMap", partnerValueMap);
925
		model.addAttribute("customRetailersMap", customRetailersMap);
926
		model.addAttribute("offerMargin", offerMargin);
927
		model.addAttribute("offer", offer);
928
		model.addAttribute("shortageAmount", shortageAmount);
929
 
930
		return "offer_margin_detail";
931
 
932
	}
933
 
26719 tejbeer 934
	@RequestMapping(value = "/offerById", method = RequestMethod.GET)
935
	public String offerById(HttpServletRequest request, int offerId, Model model) throws ProfitMandiBusinessException {
936
		Offer offer = offerRepository.selectById(offerId);
937
 
938
		model.addAttribute("offer", offer);
939
 
940
		return "offer-edit";
941
 
942
	}
943
 
944
	@RequestMapping(value = "/extendByOfferId", method = RequestMethod.POST)
945
	public String extendByOfferId(HttpServletRequest request,
946
 
947
			int offerId, @RequestBody LocalDateTime extendDatetime, Model model) throws Exception {
948
 
949
		LOGGER.info("ExtendDatetime" + extendDatetime);
950
		LOGGER.info("schemeId" + offerId);
951
		Offer offer = offerRepository.selectById(offerId);
952
 
27361 amit.gupta 953
		offer.setEndDate(extendDatetime);
26719 tejbeer 954
		offerRepository.persist(offer);
955
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
956
 
957
		return "response";
958
	}
959
 
22860 ashik.ali 960
}