Subversion Repositories SmartDukaan

Rev

Rev 26763 | Rev 26912 | 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);
349
				model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
350
				if (schemes.size() < limit) {
351
					model.addAttribute("end", offset + schemes.size());
352
				} else {
353
					model.addAttribute("end", offset + limit);
354
				}
355
			} else {
356
				throw new ProfitMandiBusinessException("SchemeId", searchTerm, "SchemeId Not Found");
357
			}
23786 amit.gupta 358
		} else {
26802 tejbeer 359
			int itemId = 0;
360
			if (!(searchItem.equals("")) && searchTerm.equals("")) {
361
				itemId = Integer.parseInt(searchItem);
362
			}
363
 
364
			schemes = schemeService.selectSchemeByPartnerType(partnerType, itemId, isAdmin, offset, limit);
365
			size = schemeService.selectSchemeCount(partnerType, itemId, isAdmin);
366
			model.addAttribute("schemes", schemes);
367
			model.addAttribute("start", offset + 1);
368
			model.addAttribute("size", size);
369
			model.addAttribute("searchItem", searchItem);
370
			model.addAttribute("searchTerm", searchTerm);
371
			model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
372
			if (schemes.size() < limit) {
373
				model.addAttribute("end", offset + schemes.size());
374
			} else {
375
				model.addAttribute("end", offset + limit);
376
			}
22860 ashik.ali 377
		}
23786 amit.gupta 378
		// model.addAttribute("roleTypes", loginDetails.getRoleTypes());
22860 ashik.ali 379
		return "schemes";
380
	}
23786 amit.gupta 381
 
22860 ashik.ali 382
	@RequestMapping(value = "/getPaginatedSchemes", method = RequestMethod.GET)
23786 amit.gupta 383
	public String getPaginatedSchemes(HttpServletRequest request,
384
			@RequestParam(name = "offset", defaultValue = "0") int offset,
26802 tejbeer 385
			@RequestParam(name = "limit", defaultValue = "10") int limit,
386
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
387
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
388
			@RequestParam(name = "partnerType", required = false, defaultValue = "") PartnerType partnerType,
389
			Model model) throws ProfitMandiBusinessException {
390
 
23343 ashik.ali 391
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
26802 tejbeer 392
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
393
 
23271 ashik.ali 394
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23343 ashik.ali 395
		List<Scheme> schemes = null;
26802 tejbeer 396
		/*
397
		 * if (roleManager.isAdmin(loginDetails.getRoleIds())) { schemes =
398
		 * schemeRepository.selectAll(offset, limit); } else { schemes =
399
		 * schemeRepository.selectActiveAll(offset, limit); }
400
		 */
401
		if (partnerType == null) {
402
			partnerType = partnerTypeChangeService.getTypeOnDate(loginDetails.getFofoId(), LocalDate.now());
23343 ashik.ali 403
		}
26802 tejbeer 404
		LOGGER.info("partnerType" + partnerType);
405
		int itemId = 0;
406
		if (!(searchItem.equals("")) && searchTerm.equals("")) {
407
			itemId = Integer.parseInt(searchItem);
408
		}
409
		schemes = schemeService.selectSchemeByPartnerType(partnerType, itemId, isAdmin, offset, limit);
410
 
22860 ashik.ali 411
		model.addAttribute("schemes", schemes);
23914 govind 412
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
22860 ashik.ali 413
		return "schemes-paginated";
414
	}
23786 amit.gupta 415
 
23020 ashik.ali 416
	@RequestMapping(value = "/schemes/downloadPage", method = RequestMethod.GET)
23786 amit.gupta 417
	public String downloadPage(HttpServletRequest request, Model model) {
23020 ashik.ali 418
		return "schemes-download";
419
	}
23786 amit.gupta 420
 
23020 ashik.ali 421
	@RequestMapping(value = "/schemes/download", method = RequestMethod.GET)
23786 amit.gupta 422
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request,
23914 govind 423
			@RequestParam(name = ProfitMandiConstants.START_DATE_TIME) String startDateTimeString,
424
			@RequestParam(name = ProfitMandiConstants.END_DATE_TIME) String endDateTimeString, Model model)
23786 amit.gupta 425
			throws ProfitMandiBusinessException {
23914 govind 426
		LocalDateTime startDateTime = StringUtils.toDateTime(startDateTimeString,
24406 amit.gupta 427
				DateTimePattern.DD_MM_yyyy_T_HH_MM_SS);
428
		LocalDateTime endDateTime = StringUtils.toDateTime(endDateTimeString, DateTimePattern.DD_MM_yyyy_T_HH_MM_SS);
23914 govind 429
 
23020 ashik.ali 430
		List<SchemeModel> schemeModels = schemeService.getAllSchemeModels(startDateTime, endDateTime);
23786 amit.gupta 431
 
23020 ashik.ali 432
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
433
		ExcelUtils.writeSchemeModels(schemeModels, byteArrayOutputStream);
23786 amit.gupta 434
 
435
		final HttpHeaders headers = new HttpHeaders();
436
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
23020 ashik.ali 437
		headers.set("Content-disposition", "inline; filename=SchemesReport.xlsx");
23786 amit.gupta 438
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
439
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
440
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
441
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
442
 
443
		// return responseSender.ok(ResponseCodeHolder.getMessage("ITM_AGNG_OK_1000"));
23020 ashik.ali 444
	}
23786 amit.gupta 445
 
22860 ashik.ali 446
	@RequestMapping(value = "/getSchemeById", method = RequestMethod.GET)
23786 amit.gupta 447
	public String getSchemeById(HttpServletRequest request,
448
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId, Model model)
449
			throws ProfitMandiBusinessException {
23343 ashik.ali 450
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
22860 ashik.ali 451
		Scheme scheme = schemeService.getSchemeById(schemeId);
452
		model.addAttribute("scheme", scheme);
24445 amit.gupta 453
		model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
22860 ashik.ali 454
		return "scheme-details";
23914 govind 455
 
22860 ashik.ali 456
	}
23786 amit.gupta 457
 
22860 ashik.ali 458
	@RequestMapping(value = "/activeSchemeById", method = RequestMethod.PUT)
23786 amit.gupta 459
	public String activeSchemeById(HttpServletRequest request,
460
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId,
461
			@RequestParam(name = "offset", defaultValue = "0") int offset,
462
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
463
			throws ProfitMandiBusinessException {
22860 ashik.ali 464
		schemeService.activeSchemeById(schemeId);
465
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
466
		model.addAttribute("schemes", schemes);
467
		return "schemes-paginated";
468
	}
23786 amit.gupta 469
 
22860 ashik.ali 470
	@RequestMapping(value = "/expireSchemeById", method = RequestMethod.PUT)
23786 amit.gupta 471
	public String expireSchemeById(HttpServletRequest request,
472
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId,
25069 amit.gupta 473
			@RequestParam(name = ProfitMandiConstants.EXPIRE_TIMESTAMP) LocalDateTime expiryTimestamp,
23786 amit.gupta 474
			@RequestParam(name = "offset", defaultValue = "0") int offset,
475
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
476
			throws ProfitMandiBusinessException {
25069 amit.gupta 477
		schemeService.expireSchemeById(schemeId, expiryTimestamp);
22860 ashik.ali 478
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
479
		model.addAttribute("schemes", schemes);
480
		return "schemes-paginated";
481
	}
23786 amit.gupta 482
 
23784 ashik.ali 483
	@RequestMapping(value = "/getSchemesJson", method = RequestMethod.GET)
23786 amit.gupta 484
	public ResponseEntity<?> getSchemesJson(HttpServletRequest request,
485
			@RequestParam(name = "offset", defaultValue = "0") int offset,
486
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
487
			throws ProfitMandiBusinessException {
23784 ashik.ali 488
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
489
		return responseSender.ok(schemeService.getSchemes(loginDetails.getRoleIds(), offset, limit));
490
	}
26802 tejbeer 491
 
26763 tejbeer 492
	@RequestMapping(value = "/searchSchemeByCategory")
493
	public String getSchemeByCategory(HttpServletRequest request,
494
			@RequestParam(name = "offset", defaultValue = "0") int offset,
495
			@RequestParam(name = "limit", defaultValue = "10") int limit,
496
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
497
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
498
			@RequestParam(name = "category", required = true, defaultValue = "") PartnerType category, Model model)
499
			throws ProfitMandiBusinessException {
500
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
501
		List<Scheme> schemes = null;
502
		long size = 0;
26802 tejbeer 503
 
504
		schemes = schemeRepository.selectByPartnerType(category, offset, limit);
505
 
506
		if (!(schemes.size() == 0)) {
507
			size = schemeRepository.selectAllCount();
508
			LOGGER.info("schemes" + schemes);
509
			model.addAttribute("schemes", schemes);
510
			model.addAttribute("start", offset + 1);
511
			model.addAttribute("size", size);
512
			model.addAttribute("searchTerm", searchTerm);
513
			model.addAttribute("searchItem", searchItem);
514
			model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
515
			if (schemes.size() < limit) {
516
				model.addAttribute("end", offset + schemes.size());
517
			} else {
518
				model.addAttribute("end", offset + limit);
26763 tejbeer 519
			}
26802 tejbeer 520
		}
521
 
26763 tejbeer 522
		return "schemes";
523
	}
26802 tejbeer 524
 
26763 tejbeer 525
	@RequestMapping(value = "/getSchemeByCategoryPaginated")
526
	public String getSchemeByCategoryPaginated(HttpServletRequest request,
527
			@RequestParam(name = "offset", defaultValue = "0") int offset,
528
			@RequestParam(name = "limit", defaultValue = "10") int limit,
529
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
530
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
531
			@RequestParam(name = "category", required = true, defaultValue = "") PartnerType category, Model model)
532
			throws ProfitMandiBusinessException {
533
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
534
		LOGGER.info("In search Item....");
535
		List<Scheme> schemes = null;
26802 tejbeer 536
 
26763 tejbeer 537
		schemes = schemeRepository.selectByPartnerType(category, offset, limit);
23506 amit.gupta 538
 
26763 tejbeer 539
		model.addAttribute("schemes", schemes);
540
		model.addAttribute("searchItem", searchItem);
541
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
542
		return "schemes-paginated";
543
	}
544
 
23752 govind 545
	@RequestMapping(value = "/searchScheme")
546
	public String getSchemeBySchemeId(HttpServletRequest request,
547
			@RequestParam(name = "offset", defaultValue = "0") int offset,
548
			@RequestParam(name = "limit", defaultValue = "10") int limit,
549
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
550
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem, Model model)
551
			throws ProfitMandiBusinessException {
552
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
553
		List<Scheme> schemes = null;
554
		long size = 0;
555
		if (!(searchTerm.equals("")) && searchItem.equals("")) {
556
			schemes = schemeRepository.selectBySearchTerm(searchTerm, offset, limit);
23786 amit.gupta 557
			if (!(schemes.size() == 0)) {
558
				size = schemeRepository.selectAllCount();
559
				LOGGER.info("schemes" + schemes);
560
				model.addAttribute("schemes", schemes);
561
				model.addAttribute("start", offset + 1);
562
				model.addAttribute("size", size);
563
				model.addAttribute("searchTerm", searchTerm);
564
				model.addAttribute("searchItem", searchItem);
23914 govind 565
				model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23786 amit.gupta 566
				if (schemes.size() < limit) {
567
					model.addAttribute("end", offset + schemes.size());
568
				} else {
569
					model.addAttribute("end", offset + limit);
570
				}
23752 govind 571
			} else {
23786 amit.gupta 572
				throw new ProfitMandiBusinessException("SchemeId", searchTerm, "SchemeId Not Found");
23752 govind 573
			}
574
		} else if (!(searchItem.equals("")) && searchTerm.equals("")) {
575
			List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(Integer.parseInt(searchItem));
23786 amit.gupta 576
			if (!(schemeIds.size() == 0)) {
23752 govind 577
				LOGGER.info("schemeIds in searchItemScheme" + schemeIds);
578
				schemes = schemeRepository.selectBySchemeIds(schemeIds, offset, limit);
579
				size = schemeIds.size();
580
				LOGGER.info("Size" + size);
581
				model.addAttribute("schemes", schemes);
582
				model.addAttribute("start", offset + 1);
583
				model.addAttribute("size", size);
584
				model.addAttribute("searchItem", searchItem);
585
				model.addAttribute("searchTerm", searchTerm);
23914 govind 586
				model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23752 govind 587
				if (schemes.size() < limit) {
588
					model.addAttribute("end", offset + schemes.size());
589
				} else {
590
					model.addAttribute("end", offset + limit);
591
				}
592
 
593
			} else {
594
				throw new ProfitMandiBusinessException("SchemeIds", searchItem, "SchemeId Not Found");
595
			}
596
		} else {
23798 amit.gupta 597
			if (roleManager.isAdmin(loginDetails.getRoleIds())) {
23752 govind 598
				schemes = schemeRepository.selectAll(offset, limit);
599
				size = schemeRepository.selectAllCount();
600
			} else {
601
				schemes = schemeRepository.selectActiveAll(offset, limit);
602
				size = schemeRepository.selectAllActiveCount();
603
			}
604
			model.addAttribute("schemes", schemes);
605
			model.addAttribute("start", offset + 1);
606
			model.addAttribute("size", size);
607
			model.addAttribute("searchItem", searchItem);
608
			model.addAttribute("searchTerm", searchTerm);
23914 govind 609
			model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23752 govind 610
			if (schemes.size() < limit) {
611
				model.addAttribute("end", offset + schemes.size());
612
			} else {
613
				model.addAttribute("end", offset + limit);
614
			}
615
		}
616
		return "schemes";
617
	}
618
 
619
	@RequestMapping(value = "/searchItemSchemePanigated")
620
	public String getSchemeByItemPanigated(HttpServletRequest request,
621
			@RequestParam(name = "offset", defaultValue = "0") int offset,
622
			@RequestParam(name = "limit", defaultValue = "10") int limit,
623
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem, Model model)
624
			throws ProfitMandiBusinessException {
23914 govind 625
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23752 govind 626
		LOGGER.info("In search Item....");
627
		List<Scheme> schemes = null;
628
		if (!searchItem.equals("")) {
629
			List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(Integer.parseInt(searchItem));
630
			if (schemeIds != null) {
631
				LOGGER.info(schemeIds);
632
				schemes = schemeRepository.selectBySchemeIds(schemeIds, offset, limit);
633
 
634
			}
635
		}
636
		model.addAttribute("schemes", schemes);
637
		model.addAttribute("searchItem", searchItem);
23914 govind 638
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
23752 govind 639
		return "schemes-paginated";
640
 
641
	}
642
 
26588 tejbeer 643
	@RequestMapping(value = "/getCreateOffer", method = RequestMethod.GET)
644
	public String getCreateOffer(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
645
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
646
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
647
				.collect(Collectors.toList());
648
 
649
		List<String> brands = mongoClient.getMongoBrands(loginDetails.getFofoId(), null, 3).stream()
650
				.map(x -> (String) x.get("name")).collect(Collectors.toList());
651
 
652
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
653
 
654
		model.addAttribute("customRetailersMap", customRetailersMap);
655
		model.addAttribute("itemCriteriaType", ItemCriteriaType.values());
656
		model.addAttribute("brands", brands);
657
		return "scheme_offer";
658
 
659
	}
660
 
661
	@RequestMapping(value = "/createOffer", method = RequestMethod.POST)
662
	public String createOffer(HttpServletRequest request, @RequestBody CreateOfferRequest createOfferRequest,
663
			Model model) throws Exception {
664
		LOGGER.info("createOfferRequest" + createOfferRequest.getAmountOffer());
665
 
666
		Offer offer = new Offer();
667
		offer.setName(createOfferRequest.getName());
668
		offer.setDescription(createOfferRequest.getDescription());
669
		offer.setItemCreteria(createOfferRequest.getItemCriteria());
670
		offer.setTargetType(createOfferRequest.getTargetType());
671
		offer.setAmountType(createOfferRequest.getAmountType());
672
		offer.setStartDateTime(createOfferRequest.getStartDate());
673
		offer.setEndDateTime(createOfferRequest.getEndDate());
674
		offer.setPrice(createOfferRequest.getPrice());
675
		offer.setCreatedTimestamp(LocalDateTime.now());
26694 tejbeer 676
		offer.setSchemeType(createOfferRequest.getSchemeType());
26674 tejbeer 677
		offer.setCriteria(createOfferRequest.getCriteria());
678
		offer.setPartnerType(createOfferRequest.getPartnerType());
26588 tejbeer 679
 
680
		if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
681
			ItemTypeParams itemTypeParams = new ItemTypeParams();
682
			itemTypeParams.setCatalogId(createOfferRequest.getCatalogIds());
683
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
684
			sit.setItemTypeParams(itemTypeParams);
685
			offer.setItemParam(gson.toJson(itemTypeParams));
686
		} else if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
687
			ItemTypeParams itemTypeParams = new ItemTypeParams();
688
			itemTypeParams.setBrands(createOfferRequest.getBrands());
689
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
690
			sit.setItemTypeParams(itemTypeParams);
691
			offer.setItemParam(gson.toJson(itemTypeParams));
692
		}
693
 
694
		offerRepository.persist(offer);
26674 tejbeer 695
		if (createOfferRequest.getFofoIds().isEmpty()) {
696
			List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
697
					.collect(Collectors.toList());
698
			for (Integer fofoId : fofoIds) {
699
				PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fofoId,
700
						offer.getStartDateTime().toLocalDate());
701
				if (offer.getPartnerType().equals(partnerType)) {
702
					LOGGER.info("partnerType" + partnerType);
703
					LOGGER.info("fofoId" + fofoId);
704
 
705
					OfferPartner op = new OfferPartner();
706
					op.setFofoId(fofoId);
707
					op.setOfferId(offer.getId());
708
					offerPartnerRepository.persist(op);
709
				}
710
 
711
			}
26588 tejbeer 712
		}
26674 tejbeer 713
 
714
		else {
715
 
716
			for (Integer fofoId : createOfferRequest.getFofoIds()) {
717
				OfferPartner op = new OfferPartner();
718
				op.setFofoId(fofoId);
719
				op.setOfferId(offer.getId());
720
				offerPartnerRepository.persist(op);
721
			}
722
		}
26588 tejbeer 723
		for (AmountMarginModel amm : createOfferRequest.getAmountOffer()) {
724
			Offermargin om = new Offermargin();
725
			om.setValue(amm.getValue());
726
			om.setMargin(amm.getMargin());
727
			om.setOfferId(offer.getId());
728
			offerMarginRepository.persist(om);
729
		}
730
 
731
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
732
		return "response";
733
 
734
	}
735
 
26674 tejbeer 736
	@RequestMapping(value = "/getOffers", method = RequestMethod.GET)
737
	public String createOffer(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
26719 tejbeer 738
			@RequestParam(name = "limit", defaultValue = "10") int limit,
739
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
740
			throws Exception {
26674 tejbeer 741
 
26719 tejbeer 742
		List<Offer> offers = null;
743
		long size = 0;
26674 tejbeer 744
 
26719 tejbeer 745
		offers = offerRepository.selectAll(offset, limit);
746
		size = offerRepository.selectAllCount();
747
 
26694 tejbeer 748
		model.addAttribute("offers", offers);
26719 tejbeer 749
		model.addAttribute("start", offset + 1);
750
		model.addAttribute("size", size);
751
		model.addAttribute("searchTerm", searchTerm);
26674 tejbeer 752
 
26719 tejbeer 753
		if (offers.size() < limit) {
754
			model.addAttribute("end", offset + offers.size());
755
		} else {
756
			model.addAttribute("end", offset + limit);
757
		}
758
 
26674 tejbeer 759
		return "offer_history";
760
 
761
	}
762
 
26719 tejbeer 763
	@RequestMapping(value = "/getPaginatedOffers", method = RequestMethod.GET)
764
	public String getPaginatedOffers(HttpServletRequest request,
765
			@RequestParam(name = "offset", defaultValue = "0") int offset,
766
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
767
			throws ProfitMandiBusinessException {
768
 
769
		List<Offer> offers = null;
770
		offers = offerRepository.selectAll(offset, limit);
771
		model.addAttribute("offers", offers);
772
 
773
		return "offer_history_paginated";
774
	}
775
 
776
	@RequestMapping(value = "/searchOffer")
777
	public String getOfferById(HttpServletRequest request,
778
			@RequestParam(name = "offset", defaultValue = "0") int offset,
779
			@RequestParam(name = "limit", defaultValue = "10") int limit,
780
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
781
			throws ProfitMandiBusinessException {
782
		List<Offer> offers = null;
783
		long size = 0;
784
		if (!(searchTerm.equals(""))) {
785
			offers = offerRepository.selectBySearchTerm(searchTerm, offset, limit);
786
			if (!(offers.size() == 0)) {
787
				size = offerRepository.selectAllCount();
788
				LOGGER.info("offers" + offers);
789
				model.addAttribute("offers", offers);
790
				model.addAttribute("start", offset + 1);
791
				model.addAttribute("size", size);
792
				model.addAttribute("searchTerm", searchTerm);
793
				if (offers.size() < limit) {
794
					model.addAttribute("end", offset + offers.size());
795
				} else {
796
					model.addAttribute("end", offset + limit);
797
				}
798
			} else {
799
				throw new ProfitMandiBusinessException("OfferId", searchTerm, "offerId Not Found");
800
			}
801
		} else {
802
 
803
			offers = offerRepository.selectAll(offset, limit);
804
			size = schemeRepository.selectAllCount();
805
 
806
			model.addAttribute("offers", offers);
807
			model.addAttribute("start", offset + 1);
808
			model.addAttribute("size", size);
809
			model.addAttribute("searchTerm", searchTerm);
810
 
811
			if (offers.size() < limit) {
812
				model.addAttribute("end", offset + offers.size());
813
			} else {
814
				model.addAttribute("end", offset + limit);
815
			}
816
		}
817
		return "offer_history";
818
	}
819
 
26694 tejbeer 820
	@RequestMapping(value = "/updateOfferStatus", method = RequestMethod.POST)
821
	public String updateOfferStatus(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
26674 tejbeer 822
 
26694 tejbeer 823
		Offer offer = offerRepository.selectById(id);
824
		LOGGER.info("status" + offer.getStatus());
825
 
826
		if (offer.getStatus() == false) {
827
			offer.setStatus(true);
828
		} else {
829
			offer.setStatus(false);
26674 tejbeer 830
		}
26694 tejbeer 831
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
832
		return "response";
26674 tejbeer 833
 
834
	}
835
 
836
	@RequestMapping(value = "/getOfferMargin", method = RequestMethod.GET)
837
	public String getOfferMargin(HttpServletRequest request,
838
			@RequestParam(name = "offerId", defaultValue = "0") int offerId, Model model) throws Exception {
839
		Offer offer = offerRepository.selectById(offerId);
840
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
841
				.collect(Collectors.toList());
842
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
843
		List<OfferPartner> offerPartners = offerPartnerRepository.selectByOfferId(offerId);
844
 
845
		LOGGER.info("offerId" + offer.getId());
26675 tejbeer 846
 
26674 tejbeer 847
		Map<Integer, Double> value = offerRepository.selectSumOfferByRetailer(offer.getStartDateTime(),
848
				offer.getEndDateTime(), 0, offer, true);
849
 
850
		LOGGER.info("value" + value);
851
		List<Offermargin> offerMargin = offerMarginRepository.selectByOfferId(offerId);
852
		Map<Integer, Double> partnerValueMap = new HashMap<>();
26675 tejbeer 853
		Map<Integer, List<Double>> partnerMarginMap = new HashMap<Integer, List<Double>>();
26674 tejbeer 854
		Map<Integer, Integer> shortageAmount = new HashMap<>();
855
 
856
		for (OfferPartner op : offerPartners) {
857
 
858
			LOGGER.info("offerPartneer" + op.getFofoId());
859
			if (value.containsKey(op.getFofoId())) {
860
				partnerValueMap.put(op.getFofoId(), value.get(op.getFofoId()));
861
 
862
			} else {
863
				value.put(op.getFofoId(), 0d);
864
 
865
				partnerValueMap.put(op.getFofoId(), 0d);
866
 
867
			}
26675 tejbeer 868
			List<Double> valSetOne = new ArrayList<Double>();
26674 tejbeer 869
 
870
			for (Offermargin om : offerMargin) {
871
 
872
				if (value.get(op.getFofoId()) <= om.getValue()) {
873
					LOGGER.info("om1" + om.getMargin());
874
					shortageAmount.put(op.getFofoId(), om.getValue() - value.get(op.getFofoId()).intValue());
875
					valSetOne.add(om.getMargin());
876
					partnerMarginMap.put(op.getFofoId(), valSetOne);
877
 
878
					break;
879
				} else {
880
					LOGGER.info("om2" + om.getMargin());
881
					valSetOne.add(om.getMargin());
882
 
883
					int shortage = om.getValue() - value.get(op.getFofoId()).intValue();
884
 
885
					if (shortage < 0) {
886
						shortageAmount.put(op.getFofoId(), 0);
887
					}
888
 
889
					partnerMarginMap.put(op.getFofoId(), valSetOne);
890
 
891
				}
892
			}
893
 
894
		}
895
 
896
		LOGGER.info("partnerMarginMap" + partnerMarginMap);
897
		LOGGER.info("partnerValueMap" + partnerValueMap);
898
		LOGGER.info("shortageAmount" + shortageAmount);
899
 
900
		ItemTypeParams scp = gson.fromJson(offer.getItemParam(), ItemTypeParams.class);
901
		if (offer.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
902
			List<String> brands = scp.getBrands();
903
			model.addAttribute("brands", brands);
904
		}
905
		if (offer.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
906
			List<Integer> catalogIds = scp.getCatalogId();
907
			List<Item> newList = new ArrayList<>();
908
			Set<Integer> catalogId = new HashSet<>();
909
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds.stream().collect(Collectors.toSet()));
910
			for (Item item : items) {
911
				if (catalogId.add(item.getCatalogItemId())) {
912
					newList.add(item);
913
				}
914
			}
915
			model.addAttribute("items", newList);
916
		}
917
		model.addAttribute("partnerMarginMap", partnerMarginMap);
918
		model.addAttribute("partnerValueMap", partnerValueMap);
919
		model.addAttribute("customRetailersMap", customRetailersMap);
920
		model.addAttribute("offerMargin", offerMargin);
921
		model.addAttribute("offer", offer);
922
		model.addAttribute("shortageAmount", shortageAmount);
923
 
924
		return "offer_margin_detail";
925
 
926
	}
927
 
26719 tejbeer 928
	@RequestMapping(value = "/offerById", method = RequestMethod.GET)
929
	public String offerById(HttpServletRequest request, int offerId, Model model) throws ProfitMandiBusinessException {
930
		Offer offer = offerRepository.selectById(offerId);
931
 
932
		model.addAttribute("offer", offer);
933
 
934
		return "offer-edit";
935
 
936
	}
937
 
938
	@RequestMapping(value = "/extendByOfferId", method = RequestMethod.POST)
939
	public String extendByOfferId(HttpServletRequest request,
940
 
941
			int offerId, @RequestBody LocalDateTime extendDatetime, Model model) throws Exception {
942
 
943
		LOGGER.info("ExtendDatetime" + extendDatetime);
944
		LOGGER.info("schemeId" + offerId);
945
		Offer offer = offerRepository.selectById(offerId);
946
 
947
		offer.setEndDateTime(extendDatetime);
948
		offerRepository.persist(offer);
949
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
950
 
951
		return "response";
952
	}
953
 
22860 ashik.ali 954
}