Subversion Repositories SmartDukaan

Rev

Rev 23798 | Rev 23819 | 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;
6
import java.time.LocalDateTime;
23556 amit.gupta 7
import java.util.Arrays;
8
import java.util.HashSet;
22860 ashik.ali 9
import java.util.List;
23020 ashik.ali 10
import java.util.Map;
22860 ashik.ali 11
 
12
import javax.servlet.http.HttpServletRequest;
13
 
23784 ashik.ali 14
import org.apache.logging.log4j.LogManager;
23568 govind 15
import org.apache.logging.log4j.Logger;
22860 ashik.ali 16
import org.springframework.beans.factory.annotation.Autowired;
23784 ashik.ali 17
import org.springframework.beans.factory.annotation.Qualifier;
23020 ashik.ali 18
import org.springframework.core.io.InputStreamResource;
19
import org.springframework.http.HttpHeaders;
20
import org.springframework.http.HttpStatus;
21
import org.springframework.http.ResponseEntity;
22860 ashik.ali 22
import org.springframework.stereotype.Controller;
23
import org.springframework.transaction.annotation.Transactional;
24
import org.springframework.ui.Model;
25
import org.springframework.web.bind.annotation.RequestBody;
26
import org.springframework.web.bind.annotation.RequestMapping;
27
import org.springframework.web.bind.annotation.RequestMethod;
28
import org.springframework.web.bind.annotation.RequestParam;
29
 
23020 ashik.ali 30
import com.spice.profitmandi.common.enumuration.DateTimePattern;
22860 ashik.ali 31
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
32
import com.spice.profitmandi.common.model.CreateSchemeRequest;
33
import com.spice.profitmandi.common.model.ProfitMandiConstants;
23557 amit.gupta 34
import com.spice.profitmandi.common.model.SchemeItems;
23020 ashik.ali 35
import com.spice.profitmandi.common.model.SchemeModel;
36
import com.spice.profitmandi.common.util.ExcelUtils;
37
import com.spice.profitmandi.common.util.StringUtils;
23784 ashik.ali 38
import com.spice.profitmandi.common.web.util.ResponseSender;
22860 ashik.ali 39
import com.spice.profitmandi.dao.entity.catalog.Scheme;
23784 ashik.ali 40
import com.spice.profitmandi.dao.entity.dtr.Role;
23556 amit.gupta 41
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
23343 ashik.ali 42
import com.spice.profitmandi.dao.enumuration.dtr.RoleType;
22860 ashik.ali 43
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
23556 amit.gupta 44
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
23784 ashik.ali 45
import com.spice.profitmandi.dao.repository.dtr.RoleRepository;
23506 amit.gupta 46
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
23556 amit.gupta 47
import com.spice.profitmandi.dao.repository.fofo.SchemeItemRepository;
23798 amit.gupta 48
import com.spice.profitmandi.service.authentication.RoleManager;
23020 ashik.ali 49
import com.spice.profitmandi.service.inventory.InventoryService;
22860 ashik.ali 50
import com.spice.profitmandi.service.scheme.SchemeService;
51
import com.spice.profitmandi.web.model.LoginDetails;
52
import com.spice.profitmandi.web.util.CookiesProcessor;
23570 amit.gupta 53
import com.spice.profitmandi.web.util.MVCResponseSender;
22860 ashik.ali 54
 
55
@Controller
23786 amit.gupta 56
@Transactional(rollbackFor = Throwable.class)
22860 ashik.ali 57
public class SchemeController {
58
 
23568 govind 59
	private static final Logger LOGGER = LogManager.getLogger(SchemeController.class);
22860 ashik.ali 60
 
61
	@Autowired
22927 ashik.ali 62
	private SchemeService schemeService;
23786 amit.gupta 63
 
22860 ashik.ali 64
	@Autowired
22927 ashik.ali 65
	private SchemeRepository schemeRepository;
22860 ashik.ali 66
 
67
	@Autowired
23556 amit.gupta 68
	private SchemeItemRepository schemeItemRepository;
23786 amit.gupta 69
 
23556 amit.gupta 70
	@Autowired
23570 amit.gupta 71
	private MVCResponseSender mvcResponseSender;
23786 amit.gupta 72
 
23570 amit.gupta 73
	@Autowired
22927 ashik.ali 74
	private CookiesProcessor cookiesProcessor;
23786 amit.gupta 75
 
23020 ashik.ali 76
	@Autowired
23784 ashik.ali 77
	@Qualifier("fofoInventoryService")
23020 ashik.ali 78
	private InventoryService inventoryService;
23556 amit.gupta 79
 
80
	@Autowired
81
	private TagListingRepository tagListingRepository;
23798 amit.gupta 82
 
83
	@Autowired
84
	private RoleManager roleManager;
23786 amit.gupta 85
 
23506 amit.gupta 86
	@Autowired
87
	PurchaseRepository purchaseRepository;
23786 amit.gupta 88
 
23784 ashik.ali 89
	@Autowired
90
	private RoleRepository roleRepository;
23786 amit.gupta 91
 
23784 ashik.ali 92
	@Autowired
93
	private ResponseSender<?> responseSender;
22860 ashik.ali 94
 
95
	@RequestMapping(value = "/createScheme", method = RequestMethod.GET)
23786 amit.gupta 96
	public String createScheme(HttpServletRequest request, Model model) {
97
		// Map<Integer, String> itemIdItemDescriptionMap =
98
		// inventoryService.getAllItemIdItemDescriptionMap();
99
		// model.addAttribute("itemIdItemDescriptionMap", itemIdItemDescriptionMap);
23419 ashik.ali 100
		model.addAttribute("brands", inventoryService.getAllTagListingBrands());
22860 ashik.ali 101
		return "create-scheme";
102
	}
23786 amit.gupta 103
 
23419 ashik.ali 104
	@RequestMapping(value = "/getTagListingItemsByBrand", method = RequestMethod.GET)
23786 amit.gupta 105
	public String getTagListingItemsByBrand(HttpServletRequest request,
106
			@RequestParam(name = ProfitMandiConstants.BRAND) String brand, Model model) {
107
		Map<Integer, String> itemIdItemDescriptionMap = inventoryService
108
				.getAllTagListingItemIdItemDescriptionMap(brand);
23020 ashik.ali 109
		model.addAttribute("itemIdItemDescriptionMap", itemIdItemDescriptionMap);
23786 amit.gupta 110
		// model.addAttribute("brands", inventoryService.getAllBrands());
23419 ashik.ali 111
		return "tag-listing-items-description";
23020 ashik.ali 112
	}
23556 amit.gupta 113
 
114
	@RequestMapping(value = "/schemes/update-schemes-page", method = RequestMethod.GET)
115
	public String updateShcemes(HttpServletRequest request) throws ProfitMandiBusinessException {
116
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23799 amit.gupta 117
		if (!roleManager.isAdmin(loginDetails.getRoleIds())) {
23556 amit.gupta 118
			throw new ProfitMandiBusinessException("User", loginDetails.getEmailId(), "Unauthorised access");
119
		}
120
		return "update-schemes-page";
121
	}
23786 amit.gupta 122
 
23556 amit.gupta 123
	@RequestMapping(value = "/schemes/update", method = RequestMethod.POST)
23786 amit.gupta 124
	public String updateShcemes(HttpServletRequest request, @RequestBody SchemeItems schemeItems, Model model)
125
			throws Exception {
126
		for (int schemeId : schemeItems.getSchemeIds()) {
127
			if (schemeRepository.selectById(schemeId) != null)
128
				for (int itemId : schemeItems.getItemIds()) {
129
					if (tagListingRepository.selectByItemIdsAndTagIds(new HashSet<>(Arrays.asList(itemId)),
130
							new HashSet<>(Arrays.asList(4, 7))).size() > 0) {
131
						SchemeItem si = new SchemeItem();
132
						si.setItemId(itemId);
133
						si.setSchemeId(schemeId);
134
						try {
135
							schemeItemRepository.persist(si);
136
						} catch (Exception e) {
137
							LOGGER.info("Scheme aleady exist");
138
						}
139
						model.addAttribute("response", mvcResponseSender.createResponseString(true));
140
					} else {
141
						model.addAttribute("response", mvcResponseSender.createResponseString(false));
142
						throw new ProfitMandiBusinessException("ItemId", itemId, "Invalid Item Id");
23556 amit.gupta 143
					}
144
				}
145
		}
146
		return "response";
147
	}
23786 amit.gupta 148
 
22860 ashik.ali 149
	@RequestMapping(value = "/createScheme", method = RequestMethod.POST)
23715 govind 150
	public String createScheme(HttpServletRequest request, @RequestBody CreateSchemeRequest createSchemeRequest,
151
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23752 govind 152
			@RequestParam(name = "limit", defaultValue = "10") int limit,
153
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
154
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
23715 govind 155
			throws ProfitMandiBusinessException {
22927 ashik.ali 156
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
22860 ashik.ali 157
		LOGGER.info("CreateSchemeRequest {}", createSchemeRequest);
22927 ashik.ali 158
		schemeService.saveScheme(loginDetails.getFofoId(), createSchemeRequest);
159
		LOGGER.info("Scheme saved successfully");
23271 ashik.ali 160
		long size = schemeRepository.selectAllCount();
22927 ashik.ali 161
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
162
		model.addAttribute("schemes", schemes);
163
		model.addAttribute("start", offset + 1);
23271 ashik.ali 164
		model.addAttribute("size", size);
23752 govind 165
		model.addAttribute("searchItem", searchItem);
166
		model.addAttribute("searchTerm", searchTerm);
23715 govind 167
		if (schemes.size() < limit) {
22927 ashik.ali 168
			model.addAttribute("end", offset + schemes.size());
23786 amit.gupta 169
		} else {
22927 ashik.ali 170
			model.addAttribute("end", offset + limit);
171
		}
172
		return "schemes";
23786 amit.gupta 173
 
22860 ashik.ali 174
	}
23786 amit.gupta 175
 
22860 ashik.ali 176
	@RequestMapping(value = "/getSchemes", method = RequestMethod.GET)
23715 govind 177
	public String getSchemes(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
23752 govind 178
			@RequestParam(name = "limit", defaultValue = "10") int limit,
179
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem,
180
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
23715 govind 181
			throws ProfitMandiBusinessException {
23343 ashik.ali 182
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
183
		List<Scheme> schemes = null;
184
		long size = 0;
23798 amit.gupta 185
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
23343 ashik.ali 186
			schemes = schemeRepository.selectAll(offset, limit);
187
			size = schemeRepository.selectAllCount();
23786 amit.gupta 188
		} else {
23343 ashik.ali 189
			schemes = schemeRepository.selectActiveAll(offset, limit);
190
			size = schemeRepository.selectAllActiveCount();
191
		}
22860 ashik.ali 192
		model.addAttribute("schemes", schemes);
193
		model.addAttribute("start", offset + 1);
23271 ashik.ali 194
		model.addAttribute("size", size);
23752 govind 195
		model.addAttribute("searchItem", searchItem);
196
		model.addAttribute("searchTerm", searchTerm);
23715 govind 197
		if (schemes.size() < limit) {
22860 ashik.ali 198
			model.addAttribute("end", offset + schemes.size());
23786 amit.gupta 199
		} else {
22860 ashik.ali 200
			model.addAttribute("end", offset + limit);
201
		}
23786 amit.gupta 202
		// model.addAttribute("roleTypes", loginDetails.getRoleTypes());
22860 ashik.ali 203
		return "schemes";
204
	}
23786 amit.gupta 205
 
22860 ashik.ali 206
	@RequestMapping(value = "/getPaginatedSchemes", method = RequestMethod.GET)
23786 amit.gupta 207
	public String getPaginatedSchemes(HttpServletRequest request,
208
			@RequestParam(name = "offset", defaultValue = "0") int offset,
209
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
210
			throws ProfitMandiBusinessException {
23343 ashik.ali 211
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23271 ashik.ali 212
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23343 ashik.ali 213
		List<Scheme> schemes = null;
23798 amit.gupta 214
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
23343 ashik.ali 215
			schemes = schemeRepository.selectAll(offset, limit);
23786 amit.gupta 216
		} else {
23343 ashik.ali 217
			schemes = schemeRepository.selectActiveAll(offset, limit);
218
		}
22860 ashik.ali 219
		model.addAttribute("schemes", schemes);
23784 ashik.ali 220
		model.addAttribute("roleIds", loginDetails.getRoleIds());
22860 ashik.ali 221
		return "schemes-paginated";
222
	}
23786 amit.gupta 223
 
23020 ashik.ali 224
	@RequestMapping(value = "/schemes/downloadPage", method = RequestMethod.GET)
23786 amit.gupta 225
	public String downloadPage(HttpServletRequest request, Model model) {
23020 ashik.ali 226
		return "schemes-download";
227
	}
23786 amit.gupta 228
 
23020 ashik.ali 229
	@RequestMapping(value = "/schemes/download", method = RequestMethod.GET)
23786 amit.gupta 230
	public ResponseEntity<?> downloadInventoryItemAgingByInterval(HttpServletRequest request,
231
			@RequestParam(name = ProfitMandiConstants.START_DATE_TIME) String startDateTimeString,
232
			@RequestParam(name = ProfitMandiConstants.END_DATE_TIME) String endDateTimeString, Model model)
233
			throws ProfitMandiBusinessException {
234
		LocalDateTime startDateTime = StringUtils.toDateTime(startDateTimeString,
235
				DateTimePattern.DD_MM_YYYY_T_HH_MM_SS);
23020 ashik.ali 236
		LocalDateTime endDateTime = StringUtils.toDateTime(endDateTimeString, DateTimePattern.DD_MM_YYYY_T_HH_MM_SS);
23786 amit.gupta 237
 
23020 ashik.ali 238
		List<SchemeModel> schemeModels = schemeService.getAllSchemeModels(startDateTime, endDateTime);
23786 amit.gupta 239
 
23020 ashik.ali 240
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
241
		ExcelUtils.writeSchemeModels(schemeModels, byteArrayOutputStream);
23786 amit.gupta 242
 
243
		final HttpHeaders headers = new HttpHeaders();
244
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
23020 ashik.ali 245
		headers.set("Content-disposition", "inline; filename=SchemesReport.xlsx");
23786 amit.gupta 246
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
247
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
248
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
249
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
250
 
251
		// return responseSender.ok(ResponseCodeHolder.getMessage("ITM_AGNG_OK_1000"));
23020 ashik.ali 252
	}
23786 amit.gupta 253
 
22860 ashik.ali 254
	@RequestMapping(value = "/getSchemeById", method = RequestMethod.GET)
23786 amit.gupta 255
	public String getSchemeById(HttpServletRequest request,
256
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId, Model model)
257
			throws ProfitMandiBusinessException {
23343 ashik.ali 258
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
22860 ashik.ali 259
		Scheme scheme = schemeService.getSchemeById(schemeId);
260
		model.addAttribute("scheme", scheme);
23784 ashik.ali 261
		model.addAttribute("roleIds", loginDetails.getRoleIds());
22860 ashik.ali 262
		return "scheme-details";
263
	}
23786 amit.gupta 264
 
22860 ashik.ali 265
	@RequestMapping(value = "/activeSchemeById", method = RequestMethod.PUT)
23786 amit.gupta 266
	public String activeSchemeById(HttpServletRequest request,
267
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId,
268
			@RequestParam(name = "offset", defaultValue = "0") int offset,
269
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
270
			throws ProfitMandiBusinessException {
22860 ashik.ali 271
		schemeService.activeSchemeById(schemeId);
272
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
273
		model.addAttribute("schemes", schemes);
274
		return "schemes-paginated";
275
	}
23786 amit.gupta 276
 
22860 ashik.ali 277
	@RequestMapping(value = "/expireSchemeById", method = RequestMethod.PUT)
23786 amit.gupta 278
	public String expireSchemeById(HttpServletRequest request,
279
			@RequestParam(name = ProfitMandiConstants.SCHEME_ID) int schemeId,
280
			@RequestParam(name = "offset", defaultValue = "0") int offset,
281
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
282
			throws ProfitMandiBusinessException {
22860 ashik.ali 283
		schemeService.expireSchemeById(schemeId);
284
		List<Scheme> schemes = schemeRepository.selectAll(offset, limit);
285
		model.addAttribute("schemes", schemes);
286
		return "schemes-paginated";
287
	}
23786 amit.gupta 288
 
23784 ashik.ali 289
	@RequestMapping(value = "/getSchemesJson", method = RequestMethod.GET)
23786 amit.gupta 290
	public ResponseEntity<?> getSchemesJson(HttpServletRequest request,
291
			@RequestParam(name = "offset", defaultValue = "0") int offset,
292
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
293
			throws ProfitMandiBusinessException {
23784 ashik.ali 294
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
295
		return responseSender.ok(schemeService.getSchemes(loginDetails.getRoleIds(), offset, limit));
296
	}
23506 amit.gupta 297
 
23752 govind 298
	@RequestMapping(value = "/searchScheme")
299
	public String getSchemeBySchemeId(HttpServletRequest request,
300
			@RequestParam(name = "offset", defaultValue = "0") int offset,
301
			@RequestParam(name = "limit", defaultValue = "10") int limit,
302
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm,
303
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem, Model model)
304
			throws ProfitMandiBusinessException {
305
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
306
		List<Scheme> schemes = null;
307
		long size = 0;
308
		if (!(searchTerm.equals("")) && searchItem.equals("")) {
309
			schemes = schemeRepository.selectBySearchTerm(searchTerm, offset, limit);
23786 amit.gupta 310
			if (!(schemes.size() == 0)) {
311
				size = schemeRepository.selectAllCount();
312
				LOGGER.info("schemes" + schemes);
313
				model.addAttribute("schemes", schemes);
314
				model.addAttribute("start", offset + 1);
315
				model.addAttribute("size", size);
316
				model.addAttribute("searchTerm", searchTerm);
317
				model.addAttribute("searchItem", searchItem);
318
				if (schemes.size() < limit) {
319
					model.addAttribute("end", offset + schemes.size());
320
				} else {
321
					model.addAttribute("end", offset + limit);
322
				}
23752 govind 323
			} else {
23786 amit.gupta 324
				throw new ProfitMandiBusinessException("SchemeId", searchTerm, "SchemeId Not Found");
23752 govind 325
			}
326
		} else if (!(searchItem.equals("")) && searchTerm.equals("")) {
327
			List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(Integer.parseInt(searchItem));
23786 amit.gupta 328
			if (!(schemeIds.size() == 0)) {
23752 govind 329
				LOGGER.info("schemeIds in searchItemScheme" + schemeIds);
330
				schemes = schemeRepository.selectBySchemeIds(schemeIds, offset, limit);
331
				size = schemeIds.size();
332
				LOGGER.info("Size" + size);
333
				model.addAttribute("schemes", schemes);
334
				model.addAttribute("start", offset + 1);
335
				model.addAttribute("size", size);
336
				model.addAttribute("searchItem", searchItem);
337
				model.addAttribute("searchTerm", searchTerm);
338
				if (schemes.size() < limit) {
339
					model.addAttribute("end", offset + schemes.size());
340
				} else {
341
					model.addAttribute("end", offset + limit);
342
				}
343
 
344
			} else {
345
				throw new ProfitMandiBusinessException("SchemeIds", searchItem, "SchemeId Not Found");
346
			}
347
		} else {
23798 amit.gupta 348
			if (roleManager.isAdmin(loginDetails.getRoleIds())) {
23752 govind 349
				schemes = schemeRepository.selectAll(offset, limit);
350
				size = schemeRepository.selectAllCount();
351
			} else {
352
				schemes = schemeRepository.selectActiveAll(offset, limit);
353
				size = schemeRepository.selectAllActiveCount();
354
			}
355
			model.addAttribute("schemes", schemes);
356
			model.addAttribute("start", offset + 1);
357
			model.addAttribute("size", size);
358
			model.addAttribute("searchItem", searchItem);
359
			model.addAttribute("searchTerm", searchTerm);
360
			if (schemes.size() < limit) {
361
				model.addAttribute("end", offset + schemes.size());
362
			} else {
363
				model.addAttribute("end", offset + limit);
364
			}
365
		}
366
		return "schemes";
367
	}
368
 
369
	@RequestMapping(value = "/searchItemSchemePanigated")
370
	public String getSchemeByItemPanigated(HttpServletRequest request,
371
			@RequestParam(name = "offset", defaultValue = "0") int offset,
372
			@RequestParam(name = "limit", defaultValue = "10") int limit,
373
			@RequestParam(name = "searchItem", required = false, defaultValue = "") String searchItem, Model model)
374
			throws ProfitMandiBusinessException {
375
		LOGGER.info("In search Item....");
376
		List<Scheme> schemes = null;
377
		if (!searchItem.equals("")) {
378
			List<Integer> schemeIds = schemeItemRepository.selectSchemeIdByItemId(Integer.parseInt(searchItem));
379
			if (schemeIds != null) {
380
				LOGGER.info(schemeIds);
381
				schemes = schemeRepository.selectBySchemeIds(schemeIds, offset, limit);
382
 
383
			}
384
		}
385
		model.addAttribute("schemes", schemes);
386
		model.addAttribute("searchItem", searchItem);
387
		return "schemes-paginated";
388
 
389
	}
390
 
22860 ashik.ali 391
}