Subversion Repositories SmartDukaan

Rev

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