Subversion Repositories SmartDukaan

Rev

Rev 24840 | Rev 27124 | Go to most recent revision | Details | Compare with Previous | 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;
24572 amit.gupta 4
import java.util.ArrayList;
24417 govind 5
import java.util.HashSet;
6
import java.util.List;
7
import java.util.Map;
8
import java.util.Optional;
24572 amit.gupta 9
import java.util.Set;
24500 govind 10
import java.util.stream.Collectors;
24417 govind 11
 
12
import javax.servlet.http.HttpServletRequest;
24699 govind 13
import javax.swing.SortOrder;
24417 govind 14
 
15
import org.apache.logging.log4j.LogManager;
16
import org.apache.logging.log4j.Logger;
17
import org.springframework.beans.factory.annotation.Autowired;
24620 govind 18
import org.springframework.mail.javamail.JavaMailSender;
24417 govind 19
import org.springframework.stereotype.Controller;
20
import org.springframework.transaction.annotation.Transactional;
21
import org.springframework.ui.Model;
24471 govind 22
import org.springframework.web.bind.annotation.DeleteMapping;
24417 govind 23
import org.springframework.web.bind.annotation.GetMapping;
24
import org.springframework.web.bind.annotation.PostMapping;
25
import org.springframework.web.bind.annotation.RequestBody;
26
import org.springframework.web.bind.annotation.RequestParam;
27
 
28
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
29
import com.spice.profitmandi.common.model.CustomRetailer;
24620 govind 30
import com.spice.profitmandi.common.util.Utils;
24417 govind 31
import com.spice.profitmandi.dao.entity.auth.AuthUser;
32
import com.spice.profitmandi.dao.entity.cs.Activity;
25570 tejbeer 33
import com.spice.profitmandi.dao.entity.cs.PartnerPosition;
24417 govind 34
import com.spice.profitmandi.dao.entity.cs.Position;
35
import com.spice.profitmandi.dao.entity.cs.Region;
36
import com.spice.profitmandi.dao.entity.cs.Ticket;
24500 govind 37
import com.spice.profitmandi.dao.entity.cs.TicketAssigned;
24417 govind 38
import com.spice.profitmandi.dao.entity.cs.TicketCategory;
24747 govind 39
import com.spice.profitmandi.dao.entity.cs.TicketSearchType;
24417 govind 40
import com.spice.profitmandi.dao.entity.cs.TicketSubCategory;
41
import com.spice.profitmandi.dao.entity.fofo.ActivityType;
42
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
24699 govind 43
import com.spice.profitmandi.dao.enumuration.cs.TicketStatus;
25570 tejbeer 44
import com.spice.profitmandi.dao.model.CreatePositionModel;
24417 govind 45
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
46
import com.spice.profitmandi.dao.repository.cs.ActivityRepository;
47
import com.spice.profitmandi.dao.repository.cs.CsService;
24557 govind 48
import com.spice.profitmandi.dao.repository.cs.PartnerRegionRepository;
25570 tejbeer 49
import com.spice.profitmandi.dao.repository.cs.PartnersPositionRepository;
24417 govind 50
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
51
import com.spice.profitmandi.dao.repository.cs.RegionRepository;
24500 govind 52
import com.spice.profitmandi.dao.repository.cs.TicketAssignedRepository;
24417 govind 53
import com.spice.profitmandi.dao.repository.cs.TicketCategoryRepository;
54
import com.spice.profitmandi.dao.repository.cs.TicketRepository;
55
import com.spice.profitmandi.dao.repository.cs.TicketSubCategoryRepository;
25570 tejbeer 56
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24417 govind 57
import com.spice.profitmandi.service.authentication.RoleManager;
58
import com.spice.profitmandi.service.slab.TargetSlabService;
59
import com.spice.profitmandi.service.user.RetailerService;
60
import com.spice.profitmandi.web.model.LoginDetails;
61
import com.spice.profitmandi.web.util.CookiesProcessor;
62
import com.spice.profitmandi.web.util.MVCResponseSender;
63
 
64
@Controller
65
@Transactional(rollbackFor = Throwable.class)
66
public class CsController {
67
 
68
	private static final Logger LOGGER = LogManager.getLogger(CsController.class);
69
 
24620 govind 70
	private static final String ACTIVITY_SUBJECT = "Message related ticketId#%s";
24699 govind 71
	private static final String PARTNER_RESOLVED_TICKET_MAIL = "Dear Partner , we have resolved your ticket # %s , request to kindly accept the same. In case you still have any concerns regarding the same pls click on %s so that we can help you.Regards\nSmartdukaan";
72
	private static final String PARTNER_REOPEN = "Dear Partner , Your ticket # %s has been re-opened as per your confirmation & we are committed to resolve it on priority.Regards\nSmartdukaan";
73
	private static final String INTERNAL_REOPEN_MAIL = "Hi, Pls note that the ticket # %s has been re-opened by %s , pls respond on priority.";
74
	private static final String INTERNAL_REOPEN_ACTIVITY_MESSAGE = "Hi,My ticket is not resolved yet,so I am reopenning ticket";
75
 
24417 govind 76
	@Autowired
24620 govind 77
	JavaMailSender mailSender;
78
 
79
	@Autowired
24417 govind 80
	private CsService csService;
81
 
82
	@Autowired
83
	private CookiesProcessor cookiesProcessor;
84
 
85
	@Autowired
86
	private TicketCategoryRepository ticketCategoryRepository;
87
 
88
	@Autowired
89
	private TicketSubCategoryRepository ticketSubCategoryRepository;
90
 
91
	@Autowired
92
	private RegionRepository regionRepository;
93
 
94
	@Autowired
95
	private TargetSlabService targetSlabService;
96
 
97
	@Autowired
98
	private RetailerService retailerService;
99
 
100
	@Autowired
101
	private MVCResponseSender mvcResponseSender;
102
 
103
	@Autowired
104
	private AuthRepository authRepository;
105
 
106
	@Autowired
107
	private PositionRepository positionRepository;
108
 
109
	@Autowired
110
	private TicketRepository ticketRepository;
111
 
112
	@Autowired
113
	private RoleManager roleManager;
114
 
115
	@Autowired
116
	private ActivityRepository activityRepository;
117
 
24500 govind 118
	@Autowired
119
	private TicketAssignedRepository ticketAssignedRepository;
24569 govind 120
 
121
	@Autowired
24557 govind 122
	private PartnerRegionRepository partnerRegionRepository;
24500 govind 123
 
25570 tejbeer 124
	@Autowired
125
	PartnersPositionRepository partnersPositionRepository;
126
 
127
	@Autowired
128
	FofoStoreRepository fofoStoreRepository;
129
 
24417 govind 130
	@GetMapping(value = "/cs/createCategory")
131
	public String getCreateCategory(HttpServletRequest request, Model model) {
132
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
133
		model.addAttribute("ticketCategories", ticketCategories);
134
		return "create-ticket-category";
135
	}
136
 
137
	@PostMapping(value = "/cs/createCategory")
138
	public String createCategory(HttpServletRequest request, @RequestParam(name = "name") String name,
139
			@RequestParam(name = "description") String description, Model model) throws ProfitMandiBusinessException {
140
 
141
		TicketCategory ticketCategory = ticketCategoryRepository.selectByName(name);
142
		if (ticketCategory != null) {
143
			throw new ProfitMandiBusinessException("name", name, "already exists!");
144
		}
145
		ticketCategory = new TicketCategory();
146
		ticketCategory.setName(name);
147
		ticketCategory.setDescription(description);
148
		ticketCategoryRepository.persist(ticketCategory);
149
		return "create-ticket-category";
150
	}
151
 
152
	@GetMapping(value = "/cs/createSubCategory")
153
	public String getCreateSubCategory(HttpServletRequest request, Model model) {
154
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
155
		model.addAttribute("ticketCategories", ticketCategories);
156
		return "create-ticket-sub-category";
157
	}
158
 
159
	@GetMapping(value = "/cs/getSubCategoryByCategoryId")
160
	public String getSubCategoryByCategoryId(HttpServletRequest request,
161
			@RequestParam(name = "ticketCategoryId", defaultValue = "") int ticketCategoryId, Model model) {
162
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(ticketCategoryId);
163
		TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketCategoryId);
164
		model.addAttribute("ticketSubCategories", ticketSubCategories);
165
		model.addAttribute("ticketCategory", ticketCategory);
166
		return "ticket-sub-category";
167
	}
168
 
169
	@PostMapping(value = "/cs/createSubCategory")
170
	public String createSubCategory(HttpServletRequest request,
171
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId,
172
			@RequestParam(name = "name") String name, @RequestParam(name = "description") String description,
173
			Model model) throws ProfitMandiBusinessException {
174
 
175
		TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectTicketSubCategory(categoryId, name);
176
		if (ticketSubCategory != null) {
177
			throw new ProfitMandiBusinessException("name & categoryId", name + "  " + categoryId, "already exists!");
178
		}
179
 
180
		ticketSubCategory = new TicketSubCategory();
181
		ticketSubCategory.setcategoryId(categoryId);
182
		ticketSubCategory.setName(name);
183
		ticketSubCategory.setDescription(description);
184
		ticketSubCategoryRepository.persist(ticketSubCategory);
185
		return "create-ticket-sub-category";
186
	}
187
 
188
	@GetMapping(value = "/cs/createRegion")
189
	public String createRegion(HttpServletRequest request, Model model) {
190
		List<Region> regions = regionRepository.selectAll();
191
		model.addAttribute("regions", regions);
192
		return "create-region";
193
	}
194
 
195
	@PostMapping(value = "/cs/createRegion")
196
	public String createRegion(HttpServletRequest request, @RequestParam(name = "name") String name,
197
			@RequestParam(name = "description") String description, Model model) throws Exception {
198
		Region region = regionRepository.selectByName(name);
199
		if (region != null) {
200
			throw new ProfitMandiBusinessException("name", name, "already exists!");
201
		}
202
		region = new Region();
203
		region.setName(name);
204
		region.setDescription(description);
205
		regionRepository.persist(region);
206
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
207
		return "response";
208
	}
209
 
24557 govind 210
	@GetMapping(value = "/cs/getPartners")
24569 govind 211
	public String getPartners(HttpServletRequest request,
212
			@RequestParam(name = "regionId", defaultValue = "0") int regionId, Model model) {
24557 govind 213
		List<Integer> fofoIds = targetSlabService.getfofoIdsFromfofoStore();
24569 govind 214
		List<Integer> addedfofoIds = partnerRegionRepository.selectByRegionId(regionId).stream().map(x -> x.getFofoId())
215
				.collect(Collectors.toList());
24557 govind 216
		Map<Integer, CustomRetailer> fofoRetailers = retailerService.getFofoRetailers(fofoIds);
217
		model.addAttribute("fofoRetailers", fofoRetailers);
218
		model.addAttribute("addedfofoIds", addedfofoIds);
219
		return "added-region-partners";
220
	}
24569 govind 221
 
25570 tejbeer 222
	@GetMapping(value = "/cs/getPartnersByRegion")
223
	public String getPartnersByRegion(HttpServletRequest request,
224
			@RequestParam(name = "regionId", defaultValue = "0") int regionId, Model model) {
225
		List<Integer> fofoIds = null;
226
		fofoIds = partnerRegionRepository.selectByRegionId(regionId).stream().map(x -> x.getFofoId())
227
				.collect(Collectors.toList());
228
 
229
		if (fofoIds.contains(0)) {
230
			fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> x.isActive()).collect(Collectors.toList())
231
					.stream().map(x -> x.getId()).collect(Collectors.toList());
232
 
233
		}
234
		Map<Integer, CustomRetailer> fofoRetailers = retailerService.getFofoRetailers(fofoIds);
235
 
236
		model.addAttribute("fofoRetailers", fofoRetailers);
237
		return "added-subregion-partners";
238
	}
239
 
24417 govind 240
	@GetMapping(value = "/cs/createPartnerRegion")
241
	public String createPartnerRegion(HttpServletRequest request, Model model) {
242
		List<Region> regions = regionRepository.selectAll();
243
		model.addAttribute("regions", regions);
244
		return "create-partner-region";
245
	}
246
 
247
	@PostMapping(value = "/cs/createPartnerRegion")
248
	public String createPartnerRegion(HttpServletRequest request, @RequestParam(name = "regionId") int regionId,
249
			@RequestBody List<Integer> selectedFofoIds, Model model) throws Exception {
24557 govind 250
		partnerRegionRepository.delete(regionId);
251
		LOGGER.info("successfully removed");
252
		LOGGER.info(selectedFofoIds.size());
24417 govind 253
		csService.addPartnerToRegion(regionId, selectedFofoIds);
254
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
255
		return "response";
256
	}
257
 
258
	@GetMapping(value = "/cs/createPosition")
24500 govind 259
	public String createPosition(HttpServletRequest request,
260
			@RequestParam(name = "offset", defaultValue = "0") int offset,
24471 govind 261
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) {
25570 tejbeer 262
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
24417 govind 263
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
264
		List<Region> regions = regionRepository.selectAll();
265
		model.addAttribute("escalationTypes", EscalationType.values());
266
		model.addAttribute("authUsers", authUsers);
267
		model.addAttribute("ticketCategories", ticketCategories);
268
		model.addAttribute("regions", regions);
24500 govind 269
 
270
		List<Position> positions = positionRepository.selectAll(offset, limit);
271
		LOGGER.info(positions);
272
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService
273
				.getAuthUserIdAndAuthUserMapUsingPositions(positions);
274
		Map<Integer, TicketCategory> categoryIdAndCategoryMap = csService
275
				.getCategoryIdAndCategoryUsingPositions(positions);
276
		Map<Integer, Region> regionIdAndRegionMap = csService.getRegionIdAndRegionMap(positions);
25570 tejbeer 277
 
278
		Map<Integer, List<CustomRetailer>> positionIdAndpartnerRegionMap = csService
279
				.getpositionIdAndpartnerRegionMap(positions);
280
 
281
		Map<Integer, List<CustomRetailer>> addedpositionIdAndCustomRetailerMap = csService
282
				.getPositionCustomRetailerMap(positions);
283
		LOGGER.info("fofoIdAndCustomRetailerMap" + addedpositionIdAndCustomRetailerMap);
24500 govind 284
		long size = positionRepository.selectAllCount();
285
 
24471 govind 286
		if (size < limit) {
287
			model.addAttribute("end", offset + size);
288
		} else {
289
			model.addAttribute("end", offset + limit);
290
		}
25570 tejbeer 291
 
24471 govind 292
		model.addAttribute("start", offset + 1);
293
		model.addAttribute("size", size);
294
		model.addAttribute("positions", positions);
295
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
296
		model.addAttribute("categoryIdAndCategoryMap", categoryIdAndCategoryMap);
297
		model.addAttribute("regionIdAndRegionMap", regionIdAndRegionMap);
25570 tejbeer 298
		model.addAttribute("positionIdAndCustomRetailerMap", addedpositionIdAndCustomRetailerMap);
299
		model.addAttribute("positionIdAndpartnerRegionMap", positionIdAndpartnerRegionMap);
300
 
24417 govind 301
		return "create-position";
302
	}
24500 govind 303
 
24471 govind 304
	@GetMapping(value = "/cs/position-paginated")
24500 govind 305
	public String positionPaginated(HttpServletRequest request,
306
			@RequestParam(name = "offset", defaultValue = "0") int offset,
24471 govind 307
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) {
24500 govind 308
 
309
		List<Position> positions = positionRepository.selectAll(offset, limit);
310
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService
311
				.getAuthUserIdAndAuthUserMapUsingPositions(positions);
312
		Map<Integer, TicketCategory> categoryIdAndCategoryMap = csService
313
				.getCategoryIdAndCategoryUsingPositions(positions);
314
		Map<Integer, Region> regionIdAndRegionMap = csService.getRegionIdAndRegionMap(positions);
25570 tejbeer 315
 
316
		Map<Integer, List<CustomRetailer>> positionIdAndpartnerRegionMap = csService
317
				.getpositionIdAndpartnerRegionMap(positions);
318
 
319
		Map<Integer, List<CustomRetailer>> addedpositionIdAndCustomRetailerMap = csService
320
				.getPositionCustomRetailerMap(positions);
321
 
24471 govind 322
		model.addAttribute("positions", positions);
323
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
324
		model.addAttribute("categoryIdAndCategoryMap", categoryIdAndCategoryMap);
325
		model.addAttribute("regionIdAndRegionMap", regionIdAndRegionMap);
25570 tejbeer 326
		model.addAttribute("positionIdAndCustomRetailerMap", addedpositionIdAndCustomRetailerMap);
327
		model.addAttribute("positionIdAndpartnerRegionMap", positionIdAndpartnerRegionMap);
328
 
24471 govind 329
		return "position-paginated";
330
	}
24417 govind 331
 
332
	@PostMapping(value = "/cs/createPosition")
25570 tejbeer 333
	public String createPosition(HttpServletRequest request, @RequestBody CreatePositionModel createPositionModel,
334
			Model model) throws Exception {
24417 govind 335
 
25570 tejbeer 336
		Position position = positionRepository.selectPosition(createPositionModel.getAuthUserId(),
337
				createPositionModel.getCategoryId(), createPositionModel.getRegionId(),
338
				createPositionModel.getEscalationType());
24417 govind 339
		if (position == null) {
340
			position = new Position();
25570 tejbeer 341
			position.setAuthUserId(createPositionModel.getAuthUserId());
342
			position.setCategoryId(createPositionModel.getCategoryId());
343
			position.setEscalationType(createPositionModel.getEscalationType());
344
			position.setRegionId(createPositionModel.getRegionId());
24417 govind 345
			position.setCreateTimestamp(LocalDateTime.now());
346
			positionRepository.persist(position);
25570 tejbeer 347
 
348
			for (int fofoId : createPositionModel.getFofoIds()) {
349
 
350
				PartnerPosition partnerPosition = new PartnerPosition();
351
				partnerPosition.setFofoId(fofoId);
352
				partnerPosition.setRegionId(createPositionModel.getRegionId());
353
				partnerPosition.setPositionId(position.getId());
354
				partnersPositionRepository.persist(partnerPosition);
355
				LOGGER.info("partnerPosition" + partnerPosition);
356
			}
357
 
24417 govind 358
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
359
		} else {
25570 tejbeer 360
			throw new ProfitMandiBusinessException("Position", createPositionModel.getAuthUserId(), "already exists!");
24417 govind 361
		}
362
		return "response";
363
	}
364
 
25570 tejbeer 365
	@PostMapping(value = "/cs/updatePartnerPosition")
366
	public String updatePartnerPosition(HttpServletRequest request, @RequestParam(name = "regionId") int regionId,
367
			@RequestBody List<Integer> selectedFofoIds, @RequestParam(name = "positionId") int positionId, Model model)
368
			throws Exception {
369
 
370
		partnersPositionRepository.delete(positionId);
371
		for (int fofoId : selectedFofoIds) {
372
			PartnerPosition partnerPosition = new PartnerPosition();
373
			partnerPosition.setFofoId(fofoId);
374
			partnerPosition.setRegionId(regionId);
375
			partnerPosition.setPositionId(positionId);
376
			partnersPositionRepository.persist(partnerPosition);
377
		}
378
 
379
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
380
 
381
		return "response";
382
	}
383
 
24417 govind 384
	@GetMapping(value = "/cs/createTicket")
24824 govind 385
	public String createTicket(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
386
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24500 govind 387
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
24824 govind 388
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
24417 govind 389
		model.addAttribute("ticketCategories", ticketCategories);
390
		return "create-ticket";
391
	}
392
 
393
	@GetMapping(value = "/cs/getSubCategoriesByCategoryId")
394
	public String getSubCategoriesByCategoryId(HttpServletRequest request,
395
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId, Model model) {
396
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(categoryId);
397
		LOGGER.info(ticketSubCategories);
398
		model.addAttribute("ticketSubCategories", ticketSubCategories);
399
		return "ticket-sub-categories";
400
	}
401
 
402
	@PostMapping(value = "/cs/createTicket")
403
	public String createTicket(HttpServletRequest request, @RequestParam(name = "categoryId") int categoryId,
404
			@RequestParam(name = "subCategoryId") int subCategoryId, @RequestParam(name = "message") String message,
405
			Model model) throws Exception {
406
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24837 govind 407
		List<Ticket> tickets = ticketRepository.selectAllResolvedMarkedTicketByCreator(loginDetails.getFofoId());
24620 govind 408
		if (tickets.size() > 3 || tickets.size() == 3) {
409
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
410
		} else {
411
			csService.createTicket(loginDetails.getFofoId(), categoryId, subCategoryId, message);
412
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
413
		}
24417 govind 414
		return "response";
415
	}
416
 
417
	@GetMapping(value = "/cs/myticket")
24699 govind 418
	public String getTicket(HttpServletRequest request,
419
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
420
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24787 govind 421
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
422
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24699 govind 423
			@RequestParam(name = "offset", defaultValue = "0") int offset,
24417 govind 424
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
425
			throws ProfitMandiBusinessException {
426
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
427
		List<Ticket> tickets = null;
24500 govind 428
		List<TicketAssigned> ticketAssigneds = null;
24417 govind 429
		long size = 0;
24500 govind 430
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = null;
24417 govind 431
		if (roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
432
			AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
24787 govind 433
			if (ticketSearchType == null) {
24791 govind 434
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
435
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(), Optional.empty(), sortOrder, null,
436
							searchTerm, offset, limit);
437
					size = ticketRepository.selectAllCountByAssignee(authUser.getId(), Optional.empty(), null,
438
							searchTerm);
439
				} else {
24787 govind 440
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(),
441
							Optional.of(TicketStatus.OPENED.equals(ticketStatus)), sortOrder, null, searchTerm, offset,
442
							limit);
443
					size = ticketRepository.selectAllCountByAssignee(authUser.getId(),
444
							Optional.of(TicketStatus.OPENED.equals(ticketStatus)), null, searchTerm);
24791 govind 445
				}
446
 
24787 govind 447
			} else {
24791 govind 448
 
449
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
450
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(), Optional.empty(), sortOrder,
451
							ticketSearchType, searchTerm, offset, limit);
452
					size = ticketRepository.selectAllCountByAssignee(authUser.getId(), Optional.empty(),
453
							ticketSearchType, searchTerm);
454
				} else {
24787 govind 455
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(),
456
							Optional.of(TicketStatus.OPENED.equals(ticketStatus)), sortOrder, ticketSearchType,
457
							searchTerm, offset, limit);
458
					size = ticketRepository.selectAllCountByAssignee(authUser.getId(),
459
							Optional.of(TicketStatus.OPENED.equals(ticketStatus)), ticketSearchType, searchTerm);
24791 govind 460
				}
24787 govind 461
			}
24824 govind 462
			// LOGGER.info(size + "size");
24791 govind 463
			if (tickets.size() > 0) {
464
				ticketAssigneds = ticketAssignedRepository
465
						.selectByTicketIds(tickets.stream().map(x -> x.getId()).collect(Collectors.toList()));
466
				authUserIdAndAuthUserMap = csService.getAuthUserIdAndAuthUserMap(ticketAssigneds);
467
				Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
468
				model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
24787 govind 469
			}
24620 govind 470
 
24417 govind 471
		} else {
24699 govind 472
			tickets = ticketRepository.selectAllByCreator(loginDetails.getFofoId(),
24751 govind 473
					Optional.of(TicketStatus.OPENED.equals(ticketStatus)), sortOrder, offset, limit);
24699 govind 474
			size = ticketRepository.selectAllCountByCreator(loginDetails.getFofoId(),
24751 govind 475
					Optional.of(TicketStatus.OPENED.equals(ticketStatus)));
24699 govind 476
		}
477
		authUserIdAndAuthUserMap = csService.getTicketIdAndAuthUserMapUsingTickets(tickets);
24500 govind 478
 
24417 govind 479
		if (size < limit) {
480
			model.addAttribute("end", offset + size);
481
		} else {
482
			model.addAttribute("end", offset + limit);
483
		}
484
		model.addAttribute("start", offset + 1);
485
		model.addAttribute("size", size);
24500 govind 486
		model.addAttribute("roleType", roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds())));
24417 govind 487
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
488
				.getSubCategoryIdAndSubCategoryMap(tickets);
489
		model.addAttribute("tickets", tickets);
24620 govind 490
		model.addAttribute("resolved", ActivityType.RESOLVED);
491
		model.addAttribute("resolved-accepted", ActivityType.RESOLVED_ACCEPTED);
492
		model.addAttribute("resolved-rejected", ActivityType.RESOLVED_REJECTED);
24417 govind 493
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
494
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
24699 govind 495
		model.addAttribute("ticketStatusValues", TicketStatus.values());
496
		model.addAttribute("orderByValues", SortOrder.values());
497
		model.addAttribute("selectedticketStatus", ticketStatus);
498
		model.addAttribute("selectedorderby", sortOrder);
24787 govind 499
		model.addAttribute("ticketSearchTypes", TicketSearchType.values());
500
		model.addAttribute("ticketSearchType", ticketSearchType);
501
		model.addAttribute("searchTerm", searchTerm);
24417 govind 502
		return "ticket";
503
	}
24500 govind 504
 
24417 govind 505
	@GetMapping(value = "/cs/myticketPaginated")
24500 govind 506
	public String getMyTicketPaginated(HttpServletRequest request,
24699 govind 507
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
508
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24787 govind 509
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
510
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24500 govind 511
			@RequestParam(name = "offset", defaultValue = "0") int offset,
24417 govind 512
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
513
			throws ProfitMandiBusinessException {
514
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
515
		List<Ticket> tickets = null;
24500 govind 516
		List<TicketAssigned> ticketAssigneds = null;
24824 govind 517
 
24500 govind 518
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = null;
24824 govind 519
 
24417 govind 520
		if (roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
521
			AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
24791 govind 522
			if (ticketSearchType == null) {
523
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
524
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(), Optional.empty(), sortOrder, null,
525
							searchTerm, offset, limit);
526
				} else {
527
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(),
528
							Optional.of(TicketStatus.OPENED.equals(ticketStatus)), sortOrder, null, searchTerm, offset,
529
							limit);
530
				}
24787 govind 531
 
532
			} else {
24791 govind 533
 
534
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
535
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(), Optional.empty(), sortOrder,
536
							ticketSearchType, searchTerm, offset, limit);
537
				} else {
538
					tickets = ticketRepository.selectAllByAssignee(authUser.getId(),
539
							Optional.of(TicketStatus.OPENED.equals(ticketStatus)), sortOrder, ticketSearchType,
540
							searchTerm, offset, limit);
541
				}
24787 govind 542
			}
24747 govind 543
			ticketAssigneds = ticketAssignedRepository
544
					.selectByTicketIds(tickets.stream().map(x -> x.getId()).collect(Collectors.toList()));
24620 govind 545
			authUserIdAndAuthUserMap = csService.getAuthUserIdAndAuthUserMap(ticketAssigneds);
546
			Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
547
			model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
24417 govind 548
		} else {
24747 govind 549
			tickets = ticketRepository.selectAllByCreator(loginDetails.getFofoId(),
24751 govind 550
					Optional.of(TicketStatus.OPENED.equals(ticketStatus)), sortOrder, offset, limit);
24500 govind 551
			authUserIdAndAuthUserMap = csService.getTicketIdAndAuthUserMapUsingTickets(tickets);
24417 govind 552
		}
24500 govind 553
		model.addAttribute("roleType", roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds())));
24417 govind 554
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
555
				.getSubCategoryIdAndSubCategoryMap(tickets);
556
		model.addAttribute("tickets", tickets);
557
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
558
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
24699 govind 559
		model.addAttribute("resolved", ActivityType.RESOLVED);
560
		model.addAttribute("resolved-accepted", ActivityType.RESOLVED_ACCEPTED);
561
		model.addAttribute("resolved-rejected", ActivityType.RESOLVED_REJECTED);
24417 govind 562
		return "ticket-paginated";
563
	}
564
 
565
	@GetMapping(value = "/cs/getActivities")
566
	public String getActivity(HttpServletRequest request,
567
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) throws Exception {
24824 govind 568
		List<Activity> allactivities = activityRepository.selectAll(ticketId);
569
		List<Activity> activities = null;
24572 amit.gupta 570
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24620 govind 571
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
24824 govind 572
			Set<Integer> authUserIds = allactivities.stream().map(x -> x.getCreatedBy()).collect(Collectors.toSet());
24572 amit.gupta 573
			List<AuthUser> users = authRepository.selectAllAuthUserByIds(new ArrayList<>(authUserIds));
24620 govind 574
			Map<Integer, String> authUserNameMap = users.stream()
575
					.collect(Collectors.toMap(AuthUser::getId, x -> x.getFirstName() + " " + x.getLastName()));
24824 govind 576
			allactivities.stream().forEach(x -> x.setName(authUserNameMap.get(x.getCreatedBy())));
577
			activities = allactivities;
578
		} else {
579
			activities = allactivities.stream().filter(x -> !x.getType().equals(ActivityType.COMMUNICATION_INTERNAL))
580
					.collect(Collectors.toList());
24572 amit.gupta 581
		}
24417 govind 582
		if (activities == null) {
583
			throw new ProfitMandiBusinessException("Activity", ticketId, "No Activity Found");
584
		}
585
		model.addAttribute("response", mvcResponseSender.createResponseString(activities));
586
		return "response";
587
 
588
	}
589
 
590
	@PostMapping(value = "/cs/createActivity")
591
	public String createActivity(HttpServletRequest request,
592
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
24500 govind 593
			@RequestParam(name = "assigneeId", defaultValue = "0") int assigneeId,
24824 govind 594
			@RequestParam(name = "internal", defaultValue = "true") boolean internal,
24417 govind 595
			@RequestParam(name = "message", defaultValue = "") String message, Model model) throws Exception {
596
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24500 govind 597
		Ticket ticket = ticketRepository.selectById(ticketId);
598
		if (ticket.getCloseTimestamp() == null) {
599
			if (!roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
600
				Activity activity = new Activity();
601
				activity.setMessage(message);
602
				activity.setCreatedBy(0);
603
				activity.setCreateTimestamp(LocalDateTime.now());
604
				activity.setType(ActivityType.COMMUNICATION_IN);
605
				csService.addActivity(ticketId, activity);
24620 govind 606
				AuthUser authUser = authRepository.selectById(ticket.getL1AuthUser());
607
				String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
608
				String[] cc = { authRepository.selectById(ticket.getL2AuthUser()).getEmailId(),
609
						authRepository.selectById(ticket.getL3AuthUser()).getEmailId() };
610
				// LOGGER.info(authUser.getEmailId()+" "+cc+" "+subject+" "+message);
24824 govind 611
				// this.activityRelatedMail(authUser.getEmailId(), cc, subject, message);
24500 govind 612
				model.addAttribute("response", mvcResponseSender.createResponseString(authUser));
613
			} else {
614
				AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
615
				Activity activity = new Activity();
616
				activity.setMessage(message);
617
				activity.setCreatedBy(authUser.getId());
618
				activity.setCreateTimestamp(LocalDateTime.now());
24824 govind 619
				if (internal) {
620
					activity.setType(ActivityType.COMMUNICATION_INTERNAL);
24840 govind 621
					String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
622
					if (authUser.getId() == ticket.getL1AuthUser()) {
623
						String cc[] = { authRepository.selectById(ticket.getL3AuthUser()).getEmailId() };
624
						this.activityRelatedMail(authRepository.selectById(ticket.getL2AuthUser()).getEmailId(), cc,
625
								subject, message);
626
					} else if (authUser.getId() == ticket.getL2AuthUser()) {
627
						String cc[] = { authRepository.selectById(ticket.getL3AuthUser()).getEmailId() };
628
						this.activityRelatedMail(authRepository.selectById(ticket.getL1AuthUser()).getEmailId(), cc,
629
								subject, message);
630
					} else {
631
						String cc[] = { authRepository.selectById(ticket.getL2AuthUser()).getEmailId() };
632
						this.activityRelatedMail(authRepository.selectById(ticket.getL1AuthUser()).getEmailId(), cc,
633
								subject, message);
634
					}
24824 govind 635
 
636
				} else {
637
 
638
					activity.setType(ActivityType.COMMUNICATION_OUT);
639
					String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
640
					this.activityRelatedMail(retailerService.getFofoRetailer(ticket.getFofoId()).getEmail(), null,
641
							subject, message);
642
				}
24500 govind 643
				csService.addActivity(ticketId, activity);
24824 govind 644
 
645
				// LOGGER.info(authUser.getEmailId() + " " + subject + " " + message);
646
 
24500 govind 647
				model.addAttribute("response", mvcResponseSender.createResponseString(authUser));
648
			}
24417 govind 649
		} else {
650
			throw new ProfitMandiBusinessException("Ticket", ticket.getId(), "Already closed ticket");
651
		}
652
		return "response";
653
	}
24500 govind 654
 
24620 govind 655
	private void activityRelatedMail(String to, String[] cc, String subject, String message)
656
			throws ProfitMandiBusinessException {
657
		try {
658
			Utils.sendMailWithAttachments(mailSender, to, cc, subject, message, null);
659
		} catch (Exception e) {
660
			throw new ProfitMandiBusinessException("Ticket Activity", to, "Could not send ticket activity mail");
661
		}
662
	}
663
 
24500 govind 664
	@PostMapping(value = "/cs/closeTicket")
24417 govind 665
	public String closeTicket(HttpServletRequest request,
24439 govind 666
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
24500 govind 667
			@RequestParam(name = "happyCode") String happyCode, Model model) throws Exception {
668
		Ticket ticket = ticketRepository.selectById(ticketId);
669
		if (ticket.getHappyCode().equals(happyCode)) {
670
			ticket.setCloseTimestamp(LocalDateTime.now());
671
			ticketRepository.persist(ticket);
672
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
673
		} else {
674
			throw new ProfitMandiBusinessException("Ticket", ticketId, "Happy Code can't match");
24439 govind 675
		}
24417 govind 676
		return "response";
677
	}
24500 govind 678
 
679
	@GetMapping(value = "/cs/managerTicket")
680
	public String getL2L3AndL4Tickets(HttpServletRequest request,
24699 govind 681
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
682
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24747 govind 683
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
684
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24500 govind 685
			@RequestParam(name = "offset", defaultValue = "0") int offset,
686
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
687
			throws ProfitMandiBusinessException {
24439 govind 688
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
689
		long size = 0;
24500 govind 690
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
691
		List<Ticket> tickets = null;
24569 govind 692
		Map<Integer, List<AuthUser>> authUserListMap = null;
24500 govind 693
		if (loginDetails.getEmailId().equals("amandeep.singh@smartdukaan.com")) {
694
			tickets = ticketRepository.selectAll(offset, limit, Optional.empty());
24620 govind 695
			authUserListMap = csService.getAuthUserList(tickets, authUser);
24500 govind 696
			size = ticketRepository.selectAllCount();
697
		} else {
24747 govind 698
			if (ticketSearchType == null) {
24787 govind 699
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
700
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
701
							null, searchTerm, offset, limit);
702
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(), null, 0);
703
				} else {
704
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
705
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm, offset, limit);
706
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(),
707
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, 0);
708
				}
24747 govind 709
			} else {
24787 govind 710
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
711
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
712
							ticketSearchType, searchTerm, offset, limit);
713
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(),
714
							ticketSearchType, searchTerm);
715
				} else {
716
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
717
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm, offset,
718
							limit);
719
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(),
720
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm);
721
				}
722
 
24747 govind 723
			}
24620 govind 724
			authUserListMap = csService.getAuthUserList(tickets, authUser);
24747 govind 725
 
24620 govind 726
			if (tickets.size() > 0) {
727
				Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
728
				model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
24439 govind 729
			}
730
		}
731
		if (size < limit) {
732
			model.addAttribute("end", offset + size);
733
		} else {
734
			model.addAttribute("end", offset + limit);
735
		}
736
		model.addAttribute("start", offset + 1);
737
		model.addAttribute("size", size);
738
		model.addAttribute("tickets", tickets);
24500 govind 739
 
24439 govind 740
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
741
				.getSubCategoryIdAndSubCategoryMap(tickets);
24699 govind 742
		model.addAttribute("ticketStatusValues", TicketStatus.values());
743
		model.addAttribute("orderByValues", SortOrder.values());
744
		model.addAttribute("selectedticketStatus", ticketStatus);
745
		model.addAttribute("selectedorderby", sortOrder);
24439 govind 746
		model.addAttribute("tickets", tickets);
24747 govind 747
		model.addAttribute("ticketSearchTypes", TicketSearchType.values());
24750 govind 748
		model.addAttribute("ticketSearchType", ticketSearchType);
24747 govind 749
		model.addAttribute("searchTerm", searchTerm);
24500 govind 750
		model.addAttribute("authUserListMap", authUserListMap);
24439 govind 751
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
752
		return "managerTicket";
753
	}
24500 govind 754
 
755
	@GetMapping(value = "/cs/managerTicket-paginated")
756
	public String getL2L3AndL4TicketsPaginated(HttpServletRequest request,
24699 govind 757
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
758
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24747 govind 759
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
760
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24500 govind 761
			@RequestParam(name = "offset", defaultValue = "0") int offset,
762
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
763
			throws ProfitMandiBusinessException {
24467 govind 764
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24500 govind 765
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
24557 govind 766
		Map<Integer, List<AuthUser>> authUserListMap = null;
24500 govind 767
		List<Ticket> tickets = null;
768
		if (loginDetails.getEmailId().equals("amandeep.singh@smartdukaan.com")) {
769
			tickets = ticketRepository.selectAll(offset, limit, Optional.empty());
24620 govind 770
			authUserListMap = csService.getAuthUserList(tickets, authUser);
24500 govind 771
		} else {
24747 govind 772
			if (ticketSearchType == null) {
24787 govind 773
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
774
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
775
							null, searchTerm, offset, limit);
776
 
777
				} else {
778
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
779
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm, offset, limit);
780
 
781
				}
24747 govind 782
			} else {
24787 govind 783
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
784
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
785
							ticketSearchType, searchTerm, offset, limit);
786
 
787
				} else {
788
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
789
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm, offset,
790
							limit);
791
				}
792
 
24747 govind 793
			}
24620 govind 794
			authUserListMap = csService.getAuthUserList(tickets, authUser);
795
			if (tickets.size() > 0) {
24500 govind 796
				Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
24467 govind 797
				model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
24620 govind 798
			}
24467 govind 799
		}
800
		model.addAttribute("tickets", tickets);
801
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
802
				.getSubCategoryIdAndSubCategoryMap(tickets);
803
		model.addAttribute("tickets", tickets);
24500 govind 804
		model.addAttribute("authUserListMap", authUserListMap);
24467 govind 805
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
806
		return "managerTicket-paginated";
807
	}
24500 govind 808
 
809
	@GetMapping(value = "/cs/edit-ticket")
810
	public String getEditTicket(HttpServletRequest request,
811
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) {
812
		Ticket ticket = ticketRepository.selectById(ticketId);
813
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
814
		TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
815
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository
816
				.selectAll(ticketSubCategory.getcategoryId());
25570 tejbeer 817
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
24467 govind 818
		model.addAttribute("ticket", ticket);
819
		model.addAttribute("ticketCategories", ticketCategories);
820
		model.addAttribute("ticketSubCategories", ticketSubCategories);
24575 govind 821
		model.addAttribute("ticketSubCategory", ticketSubCategory);
24500 govind 822
		model.addAttribute("authUsers", authUsers);
24467 govind 823
		return "edit-ticket-modal";
824
	}
24500 govind 825
 
826
	@PostMapping(value = "/cs/edit-ticket")
827
	public String editTicket(HttpServletRequest request,
828
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
829
			@RequestParam(name = "subCategoryId", defaultValue = "0") int subCategoryId,
830
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId,
831
			@RequestParam(name = "authUserId", defaultValue = "0") int authUserId, Model model) throws Exception {
24467 govind 832
		LOGGER.info(ticketId);
24500 govind 833
		Ticket ticket = ticketRepository.selectById(ticketId);
24569 govind 834
		ticketAssignedRepository.deleteByTicketId(ticketId);
835
		if (ticket.getSubCategoryId() == subCategoryId) {
836
			LOGGER.info(ticket);
837
			TicketAssigned ticketAssigned = new TicketAssigned();
24500 govind 838
			ticketAssigned.setTicketId(ticketId);
839
			ticketAssigned.setAssineeId(authUserId);
840
			ticketAssignedRepository.persist(ticketAssigned);
24569 govind 841
			ticket.setL1AuthUser(authUserId);
842
			ticket.setSubCategoryId(subCategoryId);
843
			ticket.setUpdateTimestamp(LocalDateTime.now());
844
			ticket.setL2EscalationTimestamp(ticket.getUpdateTimestamp().plusDays(2));
845
			ticket.setL3EscalationTimestamp(ticket.getL2EscalationTimestamp().plusDays(2));
846
			ticket.setLastEscalationTimestamp(ticket.getL3EscalationTimestamp().plusDays(2));
847
			ticketRepository.persist(ticket);
848
			csService.sendAssignedTicketMail(authRepository.selectById(authUserId), ticket);
24500 govind 849
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
24569 govind 850
		} else {
851
			csService.updateTicket(categoryId, subCategoryId, ticket);
852
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
24500 govind 853
		}
24467 govind 854
		return "response";
855
	}
24500 govind 856
 
857
	@DeleteMapping(value = "/cs/removePosition")
858
	public String removePosition(HttpServletRequest request,
859
			@RequestParam(name = "positionId", defaultValue = "0") int positionId, Model model) throws Exception {
24471 govind 860
		positionRepository.delete(positionId);
861
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
862
		return "response";
863
	}
24620 govind 864
 
865
	@PostMapping(value = "/cs/create-last-activity")
866
	public String createlastActivity(HttpServletRequest request, @RequestParam(name = "ticketId") int ticketId,
867
			@RequestParam(name = "lastactivity") ActivityType lastActivity, Model model) throws Exception {
868
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
869
		Ticket ticket = ticketRepository.selectById(ticketId);
870
		Activity activity = new Activity();
871
		String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
872
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
873
			ticket.setLastActivity(lastActivity);
874
			String to = retailerService.getFofoRetailer(ticket.getFofoId()).getEmail();
24699 govind 875
			String message = String.format(PARTNER_RESOLVED_TICKET_MAIL, ticketId, "REOPEN");
24620 govind 876
			activity.setMessage(message);
877
			activity.setCreatedBy(authRepository.selectByEmailOrMobile(loginDetails.getEmailId()).getId());
878
			activity.setTicketId(ticketId);
879
			activity.setCreateTimestamp(LocalDateTime.now());
880
			activity.setType(ActivityType.COMMUNICATION_OUT);
24621 govind 881
			this.activityRelatedMail(to, null, subject, message);
24620 govind 882
		} else {
883
			if (ActivityType.RESOLVED_ACCEPTED == lastActivity) {
884
				ticket.setLastActivity(lastActivity);
885
				ticket.setCloseTimestamp(LocalDateTime.now());
886
				activity.setMessage(ActivityType.RESOLVED.toString());
887
				activity.setCreatedBy(0);
888
				activity.setTicketId(ticketId);
889
				activity.setType(ActivityType.COMMUNICATION_IN);
890
				activity.setCreateTimestamp(LocalDateTime.now());
891
			} else {
24699 govind 892
				String message = String.format(INTERNAL_REOPEN_MAIL, ticketId,
893
						retailerService.getFofoRetailer(loginDetails.getFofoId()).getBusinessName());
24620 govind 894
				String to = authRepository.selectById(ticket.getL1AuthUser()).getEmailId();
895
				String cc[] = { authRepository.selectById(ticket.getL2AuthUser()).getEmailId(),
896
						authRepository.selectById(ticket.getL3AuthUser()).getEmailId() };
897
				ticket.setLastActivity(lastActivity);
24638 govind 898
				ticket.setUpdateTimestamp(LocalDateTime.now());
899
				ticket.setL2EscalationTimestamp(ticket.getUpdateTimestamp().plusDays(2));
900
				ticket.setL3EscalationTimestamp(ticket.getL2EscalationTimestamp().plusDays(2));
901
				ticket.setLastEscalationTimestamp(ticket.getL3EscalationTimestamp().plusDays(2));
902
				ticketAssignedRepository.deleteByTicketId(ticketId);
24699 govind 903
				TicketAssigned ticketAssigned = new TicketAssigned();
24638 govind 904
				ticketAssigned.setAssineeId(ticket.getL1AuthUser());
905
				ticketAssigned.setTicketId(ticketId);
906
				ticketAssignedRepository.persist(ticketAssigned);
24620 govind 907
				activity.setMessage(INTERNAL_REOPEN_ACTIVITY_MESSAGE);
908
				activity.setCreatedBy(0);
909
				activity.setTicketId(ticketId);
910
				activity.setType(ActivityType.COMMUNICATION_IN);
911
				activity.setCreateTimestamp(LocalDateTime.now());
24621 govind 912
				this.activityRelatedMail(to, cc, subject, message);
24699 govind 913
				this.activityRelatedMail(retailerService.getFofoRetailer(loginDetails.getFofoId()).getEmail(), null,
914
						subject, String.format(PARTNER_REOPEN, ticketId));
24620 govind 915
			}
916
 
917
		}
918
		ticketRepository.persist(ticket);
919
		activityRepository.persist(activity);
920
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
921
		return "response";
922
	}
923
 
24417 govind 924
}