Subversion Repositories SmartDukaan

Rev

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