Subversion Repositories SmartDukaan

Rev

Rev 27377 | Rev 27389 | 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;
27387 tejbeer 8
import java.time.LocalTime;
26674 tejbeer 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;
27387 tejbeer 13
import java.util.LinkedHashSet;
22860 ashik.ali 14
import java.util.List;
27387 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;
27387 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;
27387 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());
26588 tejbeer 661
		return "scheme_offer";
662
 
663
	}
664
 
665
	@RequestMapping(value = "/createOffer", method = RequestMethod.POST)
666
	public String createOffer(HttpServletRequest request, @RequestBody CreateOfferRequest createOfferRequest,
667
			Model model) throws Exception {
668
		LOGGER.info("createOfferRequest" + createOfferRequest.getAmountOffer());
669
 
670
		Offer offer = new Offer();
671
		offer.setName(createOfferRequest.getName());
672
		offer.setDescription(createOfferRequest.getDescription());
27387 tejbeer 673
		offer.setItemCreteria(createOfferRequest.getItemCriteria());
26588 tejbeer 674
		offer.setTargetType(createOfferRequest.getTargetType());
675
		offer.setAmountType(createOfferRequest.getAmountType());
27387 tejbeer 676
		offer.setStartDateTime(createOfferRequest.getStartDate());
677
		offer.setEndDateTime(createOfferRequest.getEndDate());
678
		offer.setPrice(createOfferRequest.getPrice());
26588 tejbeer 679
		offer.setCreatedTimestamp(LocalDateTime.now());
26694 tejbeer 680
		offer.setSchemeType(createOfferRequest.getSchemeType());
27387 tejbeer 681
		offer.setCriteria(createOfferRequest.getCriteria());
682
		offer.setPartnerType(createOfferRequest.getPartnerType());
26588 tejbeer 683
 
684
		if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
685
			ItemTypeParams itemTypeParams = new ItemTypeParams();
686
			itemTypeParams.setCatalogId(createOfferRequest.getCatalogIds());
687
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
688
			sit.setItemTypeParams(itemTypeParams);
27387 tejbeer 689
			offer.setItemParam(gson.toJson(itemTypeParams));
26588 tejbeer 690
		} else if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
691
			ItemTypeParams itemTypeParams = new ItemTypeParams();
692
			itemTypeParams.setBrands(createOfferRequest.getBrands());
693
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
694
			sit.setItemTypeParams(itemTypeParams);
27387 tejbeer 695
			offer.setItemParam(gson.toJson(itemTypeParams));
26588 tejbeer 696
		}
697
 
698
		offerRepository.persist(offer);
26674 tejbeer 699
		if (createOfferRequest.getFofoIds().isEmpty()) {
700
			List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
701
					.collect(Collectors.toList());
702
			for (Integer fofoId : fofoIds) {
703
				PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fofoId,
27387 tejbeer 704
						offer.getStartDateTime().toLocalDate());
705
				if (offer.getPartnerType().equals(partnerType)) {
706
					LOGGER.info("partnerType" + partnerType);
707
					LOGGER.info("fofoId" + fofoId);
26674 tejbeer 708
 
27387 tejbeer 709
					OfferPartner op = new OfferPartner();
710
					op.setFofoId(fofoId);
711
					op.setOfferId(offer.getId());
712
					offerPartnerRepository.persist(op);
713
				}
714
 
26674 tejbeer 715
			}
26588 tejbeer 716
		}
26674 tejbeer 717
 
718
		else {
719
 
720
			for (Integer fofoId : createOfferRequest.getFofoIds()) {
721
				OfferPartner op = new OfferPartner();
722
				op.setFofoId(fofoId);
723
				op.setOfferId(offer.getId());
724
				offerPartnerRepository.persist(op);
725
			}
726
		}
26588 tejbeer 727
		for (AmountMarginModel amm : createOfferRequest.getAmountOffer()) {
728
			Offermargin om = new Offermargin();
729
			om.setValue(amm.getValue());
730
			om.setMargin(amm.getMargin());
731
			om.setOfferId(offer.getId());
732
			offerMarginRepository.persist(om);
733
		}
734
 
735
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
736
		return "response";
737
 
738
	}
739
 
26674 tejbeer 740
	@RequestMapping(value = "/getOffers", method = RequestMethod.GET)
741
	public String createOffer(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
26719 tejbeer 742
			@RequestParam(name = "limit", defaultValue = "10") int limit,
743
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
744
			throws Exception {
26674 tejbeer 745
 
26719 tejbeer 746
		List<Offer> offers = null;
747
		long size = 0;
26674 tejbeer 748
 
26719 tejbeer 749
		offers = offerRepository.selectAll(offset, limit);
750
		size = offerRepository.selectAllCount();
751
 
26694 tejbeer 752
		model.addAttribute("offers", offers);
26719 tejbeer 753
		model.addAttribute("start", offset + 1);
754
		model.addAttribute("size", size);
755
		model.addAttribute("searchTerm", searchTerm);
26674 tejbeer 756
 
26719 tejbeer 757
		if (offers.size() < limit) {
758
			model.addAttribute("end", offset + offers.size());
759
		} else {
760
			model.addAttribute("end", offset + limit);
761
		}
762
 
26674 tejbeer 763
		return "offer_history";
764
 
765
	}
766
 
26719 tejbeer 767
	@RequestMapping(value = "/getPaginatedOffers", method = RequestMethod.GET)
768
	public String getPaginatedOffers(HttpServletRequest request,
769
			@RequestParam(name = "offset", defaultValue = "0") int offset,
770
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
771
			throws ProfitMandiBusinessException {
772
 
773
		List<Offer> offers = null;
774
		offers = offerRepository.selectAll(offset, limit);
775
		model.addAttribute("offers", offers);
776
 
777
		return "offer_history_paginated";
778
	}
779
 
780
	@RequestMapping(value = "/searchOffer")
781
	public String getOfferById(HttpServletRequest request,
782
			@RequestParam(name = "offset", defaultValue = "0") int offset,
783
			@RequestParam(name = "limit", defaultValue = "10") int limit,
784
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
785
			throws ProfitMandiBusinessException {
786
		List<Offer> offers = null;
787
		long size = 0;
788
		if (!(searchTerm.equals(""))) {
789
			offers = offerRepository.selectBySearchTerm(searchTerm, offset, limit);
790
			if (!(offers.size() == 0)) {
791
				size = offerRepository.selectAllCount();
792
				LOGGER.info("offers" + offers);
793
				model.addAttribute("offers", offers);
794
				model.addAttribute("start", offset + 1);
795
				model.addAttribute("size", size);
796
				model.addAttribute("searchTerm", searchTerm);
797
				if (offers.size() < limit) {
798
					model.addAttribute("end", offset + offers.size());
799
				} else {
800
					model.addAttribute("end", offset + limit);
801
				}
802
			} else {
803
				throw new ProfitMandiBusinessException("OfferId", searchTerm, "offerId Not Found");
804
			}
805
		} else {
806
 
807
			offers = offerRepository.selectAll(offset, limit);
808
			size = schemeRepository.selectAllCount();
809
 
810
			model.addAttribute("offers", offers);
811
			model.addAttribute("start", offset + 1);
812
			model.addAttribute("size", size);
813
			model.addAttribute("searchTerm", searchTerm);
814
 
815
			if (offers.size() < limit) {
816
				model.addAttribute("end", offset + offers.size());
817
			} else {
818
				model.addAttribute("end", offset + limit);
819
			}
820
		}
821
		return "offer_history";
822
	}
823
 
26694 tejbeer 824
	@RequestMapping(value = "/updateOfferStatus", method = RequestMethod.POST)
825
	public String updateOfferStatus(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
26674 tejbeer 826
 
26694 tejbeer 827
		Offer offer = offerRepository.selectById(id);
828
		LOGGER.info("status" + offer.getStatus());
829
 
830
		if (offer.getStatus() == false) {
831
			offer.setStatus(true);
832
		} else {
833
			offer.setStatus(false);
26674 tejbeer 834
		}
27361 amit.gupta 835
		offer.setCreatedTimestamp(LocalDateTime.now());
26694 tejbeer 836
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
837
		return "response";
26674 tejbeer 838
 
839
	}
840
 
841
	@RequestMapping(value = "/getOfferMargin", method = RequestMethod.GET)
842
	public String getOfferMargin(HttpServletRequest request,
843
			@RequestParam(name = "offerId", defaultValue = "0") int offerId, Model model) throws Exception {
844
		Offer offer = offerRepository.selectById(offerId);
845
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
846
				.collect(Collectors.toList());
847
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
848
		List<OfferPartner> offerPartners = offerPartnerRepository.selectByOfferId(offerId);
849
 
850
		LOGGER.info("offerId" + offer.getId());
26675 tejbeer 851
 
27387 tejbeer 852
		Map<Integer, Double> value = offerRepository.selectSumOfferByRetailer(offer.getStartDateTime(),
853
				offer.getEndDateTime(), 0, offer, true);
26674 tejbeer 854
 
855
		LOGGER.info("value" + value);
856
		List<Offermargin> offerMargin = offerMarginRepository.selectByOfferId(offerId);
857
		Map<Integer, Double> partnerValueMap = new HashMap<>();
26675 tejbeer 858
		Map<Integer, List<Double>> partnerMarginMap = new HashMap<Integer, List<Double>>();
26674 tejbeer 859
		Map<Integer, Integer> shortageAmount = new HashMap<>();
860
 
861
		for (OfferPartner op : offerPartners) {
862
 
863
			LOGGER.info("offerPartneer" + op.getFofoId());
864
			if (value.containsKey(op.getFofoId())) {
865
				partnerValueMap.put(op.getFofoId(), value.get(op.getFofoId()));
866
 
867
			} else {
868
				value.put(op.getFofoId(), 0d);
869
 
870
				partnerValueMap.put(op.getFofoId(), 0d);
871
 
872
			}
26675 tejbeer 873
			List<Double> valSetOne = new ArrayList<Double>();
26674 tejbeer 874
 
875
			for (Offermargin om : offerMargin) {
876
 
877
				if (value.get(op.getFofoId()) <= om.getValue()) {
878
					LOGGER.info("om1" + om.getMargin());
879
					shortageAmount.put(op.getFofoId(), om.getValue() - value.get(op.getFofoId()).intValue());
880
					valSetOne.add(om.getMargin());
881
					partnerMarginMap.put(op.getFofoId(), valSetOne);
882
 
883
					break;
884
				} else {
885
					LOGGER.info("om2" + om.getMargin());
886
					valSetOne.add(om.getMargin());
887
 
888
					int shortage = om.getValue() - value.get(op.getFofoId()).intValue();
889
 
890
					if (shortage < 0) {
891
						shortageAmount.put(op.getFofoId(), 0);
892
					}
893
 
894
					partnerMarginMap.put(op.getFofoId(), valSetOne);
895
 
896
				}
897
			}
898
 
899
		}
900
 
901
		LOGGER.info("partnerMarginMap" + partnerMarginMap);
902
		LOGGER.info("partnerValueMap" + partnerValueMap);
903
		LOGGER.info("shortageAmount" + shortageAmount);
904
 
27387 tejbeer 905
		ItemTypeParams scp = gson.fromJson(offer.getItemParam(), ItemTypeParams.class);
906
		if (offer.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
907
			List<String> brands = scp.getBrands();
908
			model.addAttribute("brands", brands);
909
		}
910
		if (offer.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
911
			List<Integer> catalogIds = scp.getCatalogId();
912
			List<Item> newList = new ArrayList<>();
913
			Set<Integer> catalogId = new HashSet<>();
914
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds.stream().collect(Collectors.toSet()));
915
			for (Item item : items) {
916
				if (catalogId.add(item.getCatalogItemId())) {
917
					newList.add(item);
918
				}
919
			}
920
			model.addAttribute("items", newList);
921
		}
26674 tejbeer 922
		model.addAttribute("partnerMarginMap", partnerMarginMap);
923
		model.addAttribute("partnerValueMap", partnerValueMap);
924
		model.addAttribute("customRetailersMap", customRetailersMap);
925
		model.addAttribute("offerMargin", offerMargin);
926
		model.addAttribute("offer", offer);
927
		model.addAttribute("shortageAmount", shortageAmount);
928
 
929
		return "offer_margin_detail";
930
 
931
	}
932
 
26719 tejbeer 933
	@RequestMapping(value = "/offerById", method = RequestMethod.GET)
934
	public String offerById(HttpServletRequest request, int offerId, Model model) throws ProfitMandiBusinessException {
935
		Offer offer = offerRepository.selectById(offerId);
936
 
937
		model.addAttribute("offer", offer);
938
 
939
		return "offer-edit";
940
 
941
	}
942
 
943
	@RequestMapping(value = "/extendByOfferId", method = RequestMethod.POST)
944
	public String extendByOfferId(HttpServletRequest request,
945
 
946
			int offerId, @RequestBody LocalDateTime extendDatetime, Model model) throws Exception {
947
 
948
		LOGGER.info("ExtendDatetime" + extendDatetime);
949
		LOGGER.info("schemeId" + offerId);
950
		Offer offer = offerRepository.selectById(offerId);
951
 
27387 tejbeer 952
		offer.setEndDateTime(extendDatetime);
26719 tejbeer 953
		offerRepository.persist(offer);
954
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
955
		return "response";
956
	}
957
 
22860 ashik.ali 958
}