Subversion Repositories SmartDukaan

Rev

Rev 24439 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
24417 govind 1
package com.spice.profitmandi.web.controller;
2
 
3
import java.time.LocalDateTime;
4
import java.util.HashSet;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.Optional;
8
 
9
import javax.servlet.http.HttpServletRequest;
10
 
11
import org.apache.logging.log4j.LogManager;
12
import org.apache.logging.log4j.Logger;
13
import org.apache.logging.log4j.message.Message;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.stereotype.Controller;
16
import org.springframework.transaction.annotation.Transactional;
17
import org.springframework.ui.Model;
18
import org.springframework.web.bind.annotation.GetMapping;
19
import org.springframework.web.bind.annotation.PostMapping;
20
import org.springframework.web.bind.annotation.RequestBody;
21
import org.springframework.web.bind.annotation.RequestParam;
22
 
23
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
24
import com.spice.profitmandi.common.model.CustomRetailer;
25
import com.spice.profitmandi.dao.entity.auth.AuthUser;
26
import com.spice.profitmandi.dao.entity.cs.Activity;
27
import com.spice.profitmandi.dao.entity.cs.Position;
28
import com.spice.profitmandi.dao.entity.cs.Region;
29
import com.spice.profitmandi.dao.entity.cs.Ticket;
30
import com.spice.profitmandi.dao.entity.cs.TicketCategory;
31
import com.spice.profitmandi.dao.entity.cs.TicketSubCategory;
32
import com.spice.profitmandi.dao.entity.fofo.ActivityType;
33
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
34
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
35
import com.spice.profitmandi.dao.repository.cs.ActivityRepository;
36
import com.spice.profitmandi.dao.repository.cs.CsService;
37
import com.spice.profitmandi.dao.repository.cs.PartnerRegionRepository;
38
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
39
import com.spice.profitmandi.dao.repository.cs.RegionRepository;
40
import com.spice.profitmandi.dao.repository.cs.TicketCategoryRepository;
41
import com.spice.profitmandi.dao.repository.cs.TicketRepository;
42
import com.spice.profitmandi.dao.repository.cs.TicketSubCategoryRepository;
43
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
44
import com.spice.profitmandi.service.authentication.RoleManager;
45
import com.spice.profitmandi.service.slab.TargetSlabService;
46
import com.spice.profitmandi.service.user.RetailerService;
47
import com.spice.profitmandi.web.model.LoginDetails;
48
import com.spice.profitmandi.web.util.CookiesProcessor;
49
import com.spice.profitmandi.web.util.MVCResponseSender;
50
 
51
@Controller
52
@Transactional(rollbackFor = Throwable.class)
53
public class CsController {
54
 
55
	private static final Logger LOGGER = LogManager.getLogger(CsController.class);
56
 
57
	@Autowired
58
	private CsService csService;
59
 
60
	@Autowired
61
	private CookiesProcessor cookiesProcessor;
62
 
63
	@Autowired
64
	private TicketCategoryRepository ticketCategoryRepository;
65
 
66
	@Autowired
67
	private TicketSubCategoryRepository ticketSubCategoryRepository;
68
 
69
	@Autowired
70
	private RegionRepository regionRepository;
71
 
72
	@Autowired
73
	private PartnerRegionRepository partnerRegionRepository;
74
 
75
	@Autowired
76
	private TargetSlabService targetSlabService;
77
 
78
	@Autowired
79
	private RetailerService retailerService;
80
 
81
	@Autowired
82
	private MVCResponseSender mvcResponseSender;
83
 
84
	@Autowired
85
	private AuthRepository authRepository;
86
 
87
	@Autowired
88
	private PositionRepository positionRepository;
89
 
90
	@Autowired
91
	private TicketRepository ticketRepository;
92
 
93
	@Autowired
94
	private RoleManager roleManager;
95
 
96
	@Autowired
97
	private ActivityRepository activityRepository;
98
 
99
	@GetMapping(value = "/cs/createCategory")
100
	public String getCreateCategory(HttpServletRequest request, Model model) {
101
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
102
		model.addAttribute("ticketCategories", ticketCategories);
103
		return "create-ticket-category";
104
	}
105
 
106
	@PostMapping(value = "/cs/createCategory")
107
	public String createCategory(HttpServletRequest request, @RequestParam(name = "name") String name,
108
			@RequestParam(name = "description") String description, Model model) throws ProfitMandiBusinessException {
109
 
110
		TicketCategory ticketCategory = ticketCategoryRepository.selectByName(name);
111
		if (ticketCategory != null) {
112
			throw new ProfitMandiBusinessException("name", name, "already exists!");
113
		}
114
 
115
		ticketCategory = new TicketCategory();
116
		ticketCategory.setName(name);
117
		ticketCategory.setDescription(description);
118
		ticketCategoryRepository.persist(ticketCategory);
119
		return "create-ticket-category";
120
	}
121
 
122
	@GetMapping(value = "/cs/createSubCategory")
123
	public String getCreateSubCategory(HttpServletRequest request, Model model) {
124
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
125
		model.addAttribute("ticketCategories", ticketCategories);
126
		return "create-ticket-sub-category";
127
	}
128
 
129
	@GetMapping(value = "/cs/getSubCategoryByCategoryId")
130
	public String getSubCategoryByCategoryId(HttpServletRequest request,
131
			@RequestParam(name = "ticketCategoryId", defaultValue = "") int ticketCategoryId, Model model) {
132
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(ticketCategoryId);
133
		TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketCategoryId);
134
		model.addAttribute("ticketSubCategories", ticketSubCategories);
135
		model.addAttribute("ticketCategory", ticketCategory);
136
		return "ticket-sub-category";
137
	}
138
 
139
	@PostMapping(value = "/cs/createSubCategory")
140
	public String createSubCategory(HttpServletRequest request,
141
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId,
142
			@RequestParam(name = "name") String name, @RequestParam(name = "description") String description,
143
			Model model) throws ProfitMandiBusinessException {
144
 
145
		TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectTicketSubCategory(categoryId, name);
146
		if (ticketSubCategory != null) {
147
			throw new ProfitMandiBusinessException("name & categoryId", name + "  " + categoryId, "already exists!");
148
		}
149
 
150
		ticketSubCategory = new TicketSubCategory();
151
		ticketSubCategory.setcategoryId(categoryId);
152
		ticketSubCategory.setName(name);
153
		ticketSubCategory.setDescription(description);
154
		ticketSubCategoryRepository.persist(ticketSubCategory);
155
		return "create-ticket-sub-category";
156
	}
157
 
158
	@GetMapping(value = "/cs/createRegion")
159
	public String createRegion(HttpServletRequest request, Model model) {
160
		List<Region> regions = regionRepository.selectAll();
161
		model.addAttribute("regions", regions);
162
		return "create-region";
163
	}
164
 
165
	@PostMapping(value = "/cs/createRegion")
166
	public String createRegion(HttpServletRequest request, @RequestParam(name = "name") String name,
167
			@RequestParam(name = "description") String description, Model model) throws Exception {
168
		Region region = regionRepository.selectByName(name);
169
		if (region != null) {
170
			throw new ProfitMandiBusinessException("name", name, "already exists!");
171
		}
172
		region = new Region();
173
		region.setName(name);
174
		region.setDescription(description);
175
		regionRepository.persist(region);
176
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
177
		return "response";
178
	}
179
 
180
	@GetMapping(value = "/cs/createPartnerRegion")
181
	public String createPartnerRegion(HttpServletRequest request, Model model) {
182
		List<Region> regions = regionRepository.selectAll();
183
		List<Integer> fofoIds = targetSlabService.getfofoIdsFromfofoStore();
184
		Map<Integer, CustomRetailer> fofoRetailers = retailerService.getFofoRetailers(fofoIds);
185
		model.addAttribute("regions", regions);
186
		model.addAttribute("fofoRetailers", fofoRetailers);
187
		return "create-partner-region";
188
	}
189
 
190
	@PostMapping(value = "/cs/createPartnerRegion")
191
	public String createPartnerRegion(HttpServletRequest request, @RequestParam(name = "regionId") int regionId,
192
			@RequestBody List<Integer> selectedFofoIds, Model model) throws Exception {
193
 
194
		csService.addPartnerToRegion(regionId, selectedFofoIds);
195
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
196
		return "response";
197
	}
198
 
199
	@GetMapping(value = "/cs/createPosition")
200
	public String createPosition(HttpServletRequest request, Model model) {
201
		List<AuthUser> authUsers = authRepository.selectAll();
202
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
203
		List<Region> regions = regionRepository.selectAll();
204
		model.addAttribute("escalationTypes", EscalationType.values());
205
		model.addAttribute("authUsers", authUsers);
206
		model.addAttribute("ticketCategories", ticketCategories);
207
		model.addAttribute("regions", regions);
208
 
209
		return "create-position";
210
	}
211
 
212
	@PostMapping(value = "/cs/createPosition")
213
	public String createPosition(HttpServletRequest request, @RequestParam(name = "authUserId") int authUserId,
214
			@RequestParam(name = "categoryId") int categoryId,
215
			@RequestParam(name = "escalationType") EscalationType escalationType,
216
			@RequestParam(name = "regionId") int regionId, Model model) throws Exception {
217
 
218
		Position position = positionRepository.selectPosition(authUserId, categoryId, regionId, escalationType);
219
		if (position == null) {
220
			position = new Position();
221
			position.setAuthUserId(authUserId);
222
			position.setCategoryId(categoryId);
223
			position.setEscalationType(escalationType);
224
			position.setRegionId(regionId);
225
			position.setCreateTimestamp(LocalDateTime.now());
226
			positionRepository.persist(position);
227
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
228
		} else {
229
			throw new ProfitMandiBusinessException("Position", authUserId, "already exists!");
230
		}
231
		return "response";
232
	}
233
 
234
	@GetMapping(value = "/cs/createTicket")
235
	public String createTicket(HttpServletRequest request, Model model) {
236
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
237
		model.addAttribute("ticketCategories", ticketCategories);
238
		return "create-ticket";
239
	}
240
 
241
	@GetMapping(value = "/cs/getSubCategoriesByCategoryId")
242
	public String getSubCategoriesByCategoryId(HttpServletRequest request,
243
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId, Model model) {
244
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(categoryId);
245
		LOGGER.info(ticketSubCategories);
246
		model.addAttribute("ticketSubCategories", ticketSubCategories);
247
		return "ticket-sub-categories";
248
	}
249
 
250
	@PostMapping(value = "/cs/createTicket")
251
	public String createTicket(HttpServletRequest request, @RequestParam(name = "categoryId") int categoryId,
252
			@RequestParam(name = "subCategoryId") int subCategoryId, @RequestParam(name = "message") String message,
253
			Model model) throws Exception {
254
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
255
		csService.createTicket(loginDetails.getFofoId(), categoryId, subCategoryId, message);
256
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
257
		return "response";
258
	}
259
 
260
	@GetMapping(value = "/cs/myticket")
261
	public String getMyTicket(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
262
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
263
			throws ProfitMandiBusinessException {
264
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
265
		List<Ticket> tickets = null;
266
		long size = 0;
267
		//LOGGER.info(roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))));
268
		if (roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
269
			AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
270
			tickets = ticketRepository.selectAllByAssignee(authUser.getId(), Optional.empty(), offset, limit);
271
			size=ticketRepository.selectAllCountByAssignee(authUser.getId(),Optional.empty());
272
			Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer=csService.getPartnerByFofoIds(tickets);
273
			model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
274
		} else {
275
			tickets = ticketRepository.selectAllByCreator(loginDetails.getFofoId(), Optional.empty(), offset, limit);
276
			size=ticketRepository.selectAllCountByCreator(loginDetails.getFofoId(), Optional.empty());
277
 
278
		}
279
		if (size < limit) {
280
			model.addAttribute("end", offset + size);
281
		} else {
282
			model.addAttribute("end", offset + limit);
283
		}
284
		model.addAttribute("start", offset + 1);
285
		model.addAttribute("size", size);
286
		model.addAttribute("roleType",roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds())));
287
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService.getAuthUserIdAndAuthUserMap(tickets);
288
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
289
				.getSubCategoryIdAndSubCategoryMap(tickets);
290
		model.addAttribute("tickets", tickets);
291
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
292
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
293
		return "ticket";
294
	}
295
	@GetMapping(value = "/cs/myticketPaginated")
296
	public String getMyTicketPaginated(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
297
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
298
			throws ProfitMandiBusinessException {
299
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
300
		List<Ticket> tickets = null;
301
		//LOGGER.info(roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))));
302
		if (roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
303
			AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
304
			tickets = ticketRepository.selectAllByAssignee(authUser.getId(), Optional.empty(), offset, limit);
305
			Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer=csService.getPartnerByFofoIds(tickets);
306
			model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
307
		} else {
308
			tickets = ticketRepository.selectAllByCreator(loginDetails.getFofoId(), Optional.empty(), offset, limit);
309
 
310
		}
311
		model.addAttribute("roleType",roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds())));
312
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService.getAuthUserIdAndAuthUserMap(tickets);
313
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
314
				.getSubCategoryIdAndSubCategoryMap(tickets);
315
		model.addAttribute("tickets", tickets);
316
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
317
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
318
		return "ticket-paginated";
319
	}
320
 
321
	@GetMapping(value = "/cs/getActivities")
322
	public String getActivity(HttpServletRequest request,
323
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) throws Exception {
324
		List<Activity> activities = activityRepository.selectAll(ticketId);
325
		if (activities == null) {
326
			throw new ProfitMandiBusinessException("Activity", ticketId, "No Activity Found");
327
		}
328
		model.addAttribute("response", mvcResponseSender.createResponseString(activities));
329
		return "response";
330
 
331
	}
332
 
333
	@PostMapping(value = "/cs/createActivity")
334
	public String createActivity(HttpServletRequest request,
335
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
336
			@RequestParam(name = "message", defaultValue = "") String message, Model model) throws Exception {
337
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
338
		Ticket ticket=ticketRepository.selectById(ticketId);
339
		if(ticket.getCloseTimestamp()==null) {
340
		if (!roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
341
			Activity activity = new Activity();
342
			activity.setMessage(message);
343
			activity.setCreatedBy(0);
344
			activity.setCreateTimestamp(LocalDateTime.now());
345
			activity.setType(ActivityType.COMMUNICATION_IN);
346
			csService.addActivity(ticketId, activity);
347
			AuthUser authUser=authRepository.selectById(ticket.getAssigneeId());
348
			model.addAttribute("response", mvcResponseSender.createResponseString(authUser));
349
		} else {
350
			AuthUser authUser=authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
351
			Activity activity = new Activity();
352
			activity.setMessage(message);
353
			activity.setCreatedBy(authUser.getId());
354
			activity.setCreateTimestamp(LocalDateTime.now());
355
			activity.setType(ActivityType.COMMUNICATION_OUT);
356
			csService.addActivity(ticketId, activity);
357
			model.addAttribute("response", mvcResponseSender.createResponseString(authUser));
358
		}
359
	}
360
		else
361
		{
362
			throw new ProfitMandiBusinessException("Ticket", ticket.getId(), "Already closed ticket");
363
		}
364
		return "response";
365
	}
366
	@PostMapping(value="/cs/closeTicket")
367
	public String closeTicket(HttpServletRequest request,
368
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,Model model) throws Exception
369
	{
370
		Ticket ticket=ticketRepository.selectById(ticketId);
371
		ticket.setCloseTimestamp(LocalDateTime.now());
372
		ticketRepository.persist(ticket);
373
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
374
		return "response";
375
	}
376
}