Subversion Repositories SmartDukaan

Rev

Rev 30426 | Rev 31762 | 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 com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
4
import com.spice.profitmandi.common.model.CustomRetailer;
24620 govind 5
import com.spice.profitmandi.common.util.Utils;
24417 govind 6
import com.spice.profitmandi.dao.entity.auth.AuthUser;
27690 amit.gupta 7
import com.spice.profitmandi.dao.entity.cs.*;
27270 tejbeer 8
import com.spice.profitmandi.dao.entity.dtr.Document;
24417 govind 9
import com.spice.profitmandi.dao.entity.fofo.ActivityType;
10
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
24699 govind 11
import com.spice.profitmandi.dao.enumuration.cs.TicketStatus;
25570 tejbeer 12
import com.spice.profitmandi.dao.model.CreatePositionModel;
24417 govind 13
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
27690 amit.gupta 14
import com.spice.profitmandi.dao.repository.cs.*;
27270 tejbeer 15
import com.spice.profitmandi.dao.repository.dtr.DocumentRepository;
25570 tejbeer 16
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24417 govind 17
import com.spice.profitmandi.service.authentication.RoleManager;
18
import com.spice.profitmandi.service.user.RetailerService;
19
import com.spice.profitmandi.web.model.LoginDetails;
20
import com.spice.profitmandi.web.util.CookiesProcessor;
21
import com.spice.profitmandi.web.util.MVCResponseSender;
27690 amit.gupta 22
import org.apache.logging.log4j.LogManager;
23
import org.apache.logging.log4j.Logger;
24
import org.springframework.beans.factory.annotation.Autowired;
25
import org.springframework.mail.javamail.JavaMailSender;
26
import org.springframework.stereotype.Controller;
27
import org.springframework.transaction.annotation.Transactional;
28
import org.springframework.ui.Model;
29
import org.springframework.web.bind.annotation.*;
24417 govind 30
 
27690 amit.gupta 31
import javax.servlet.http.HttpServletRequest;
32
import javax.swing.*;
33
import java.time.LocalDateTime;
34
import java.util.*;
35
import java.util.stream.Collectors;
36
 
24417 govind 37
@Controller
38
@Transactional(rollbackFor = Throwable.class)
39
public class CsController {
40
 
41
	private static final Logger LOGGER = LogManager.getLogger(CsController.class);
24620 govind 42
	private static final String ACTIVITY_SUBJECT = "Message related ticketId#%s";
24699 govind 43
	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";
44
	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";
27205 amit.gupta 45
	private static final String INTERNAL_REOPEN_MAIL = "Team, Pls note that the Ticket Id %s has been re-opened by %s , pls respond on priority";
46
	private static final String INTERNAL_REOPEN_ACTIVITY_MESSAGE = "Hi,My ticket is not resolved yet,so I have reopened it";
24699 govind 47
 
24417 govind 48
	@Autowired
24620 govind 49
	JavaMailSender mailSender;
50
 
51
	@Autowired
24417 govind 52
	private CsService csService;
53
 
54
	@Autowired
55
	private CookiesProcessor cookiesProcessor;
56
 
57
	@Autowired
58
	private TicketCategoryRepository ticketCategoryRepository;
59
 
60
	@Autowired
61
	private TicketSubCategoryRepository ticketSubCategoryRepository;
62
 
63
	@Autowired
64
	private RegionRepository regionRepository;
65
 
66
	@Autowired
67
	private RetailerService retailerService;
68
 
69
	@Autowired
70
	private MVCResponseSender mvcResponseSender;
71
 
72
	@Autowired
73
	private AuthRepository authRepository;
74
 
75
	@Autowired
76
	private PositionRepository positionRepository;
77
 
78
	@Autowired
79
	private TicketRepository ticketRepository;
80
 
81
	@Autowired
82
	private RoleManager roleManager;
83
 
84
	@Autowired
85
	private ActivityRepository activityRepository;
86
 
24500 govind 87
	@Autowired
27270 tejbeer 88
	private ActivityAttachmentRepository activityAttachmentRepository;
89
 
90
	@Autowired
24500 govind 91
	private TicketAssignedRepository ticketAssignedRepository;
24569 govind 92
 
93
	@Autowired
24557 govind 94
	private PartnerRegionRepository partnerRegionRepository;
24500 govind 95
 
25570 tejbeer 96
	@Autowired
97
	PartnersPositionRepository partnersPositionRepository;
98
 
99
	@Autowired
100
	FofoStoreRepository fofoStoreRepository;
101
 
27270 tejbeer 102
	@Autowired
103
	DocumentRepository documentRepository;
104
 
24417 govind 105
	@GetMapping(value = "/cs/createCategory")
106
	public String getCreateCategory(HttpServletRequest request, Model model) {
107
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
108
		model.addAttribute("ticketCategories", ticketCategories);
109
		return "create-ticket-category";
110
	}
111
 
112
	@PostMapping(value = "/cs/createCategory")
113
	public String createCategory(HttpServletRequest request, @RequestParam(name = "name") String name,
114
			@RequestParam(name = "description") String description, Model model) throws ProfitMandiBusinessException {
115
 
116
		TicketCategory ticketCategory = ticketCategoryRepository.selectByName(name);
117
		if (ticketCategory != null) {
118
			throw new ProfitMandiBusinessException("name", name, "already exists!");
119
		}
120
		ticketCategory = new TicketCategory();
121
		ticketCategory.setName(name);
122
		ticketCategory.setDescription(description);
123
		ticketCategoryRepository.persist(ticketCategory);
124
		return "create-ticket-category";
125
	}
126
 
127
	@GetMapping(value = "/cs/createSubCategory")
128
	public String getCreateSubCategory(HttpServletRequest request, Model model) {
129
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
130
		model.addAttribute("ticketCategories", ticketCategories);
131
		return "create-ticket-sub-category";
132
	}
133
 
134
	@GetMapping(value = "/cs/getSubCategoryByCategoryId")
135
	public String getSubCategoryByCategoryId(HttpServletRequest request,
136
			@RequestParam(name = "ticketCategoryId", defaultValue = "") int ticketCategoryId, Model model) {
137
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(ticketCategoryId);
138
		TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketCategoryId);
139
		model.addAttribute("ticketSubCategories", ticketSubCategories);
140
		model.addAttribute("ticketCategory", ticketCategory);
141
		return "ticket-sub-category";
142
	}
143
 
144
	@PostMapping(value = "/cs/createSubCategory")
145
	public String createSubCategory(HttpServletRequest request,
146
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId,
147
			@RequestParam(name = "name") String name, @RequestParam(name = "description") String description,
148
			Model model) throws ProfitMandiBusinessException {
149
 
150
		TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectTicketSubCategory(categoryId, name);
151
		if (ticketSubCategory != null) {
152
			throw new ProfitMandiBusinessException("name & categoryId", name + "  " + categoryId, "already exists!");
153
		}
154
 
155
		ticketSubCategory = new TicketSubCategory();
27124 amit.gupta 156
		ticketSubCategory.setCategoryId(categoryId);
24417 govind 157
		ticketSubCategory.setName(name);
158
		ticketSubCategory.setDescription(description);
159
		ticketSubCategoryRepository.persist(ticketSubCategory);
160
		return "create-ticket-sub-category";
161
	}
162
 
163
	@GetMapping(value = "/cs/createRegion")
164
	public String createRegion(HttpServletRequest request, Model model) {
165
		List<Region> regions = regionRepository.selectAll();
166
		model.addAttribute("regions", regions);
167
		return "create-region";
168
	}
169
 
170
	@PostMapping(value = "/cs/createRegion")
171
	public String createRegion(HttpServletRequest request, @RequestParam(name = "name") String name,
172
			@RequestParam(name = "description") String description, Model model) throws Exception {
173
		Region region = regionRepository.selectByName(name);
174
		if (region != null) {
175
			throw new ProfitMandiBusinessException("name", name, "already exists!");
176
		}
177
		region = new Region();
178
		region.setName(name);
179
		region.setDescription(description);
180
		regionRepository.persist(region);
31238 amit.gupta 181
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24417 govind 182
		return "response";
183
	}
184
 
24557 govind 185
	@GetMapping(value = "/cs/getPartners")
24569 govind 186
	public String getPartners(HttpServletRequest request,
187
			@RequestParam(name = "regionId", defaultValue = "0") int regionId, Model model) {
30426 tejbeer 188
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
189
				.collect(Collectors.toList());
24569 govind 190
		List<Integer> addedfofoIds = partnerRegionRepository.selectByRegionId(regionId).stream().map(x -> x.getFofoId())
191
				.collect(Collectors.toList());
30426 tejbeer 192
 
193
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
194
		Map<Integer, CustomRetailer> fofoRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x))
195
				.filter(x -> x != null).collect(Collectors.toList()).stream()
196
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
24557 govind 197
		model.addAttribute("fofoRetailers", fofoRetailers);
198
		model.addAttribute("addedfofoIds", addedfofoIds);
199
		return "added-region-partners";
200
	}
24569 govind 201
 
25570 tejbeer 202
	@GetMapping(value = "/cs/getPartnersByRegion")
203
	public String getPartnersByRegion(HttpServletRequest request,
204
			@RequestParam(name = "regionId", defaultValue = "0") int regionId, Model model) {
205
		List<Integer> fofoIds = null;
206
		fofoIds = partnerRegionRepository.selectByRegionId(regionId).stream().map(x -> x.getFofoId())
207
				.collect(Collectors.toList());
208
 
209
		if (fofoIds.contains(0)) {
210
			fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> x.isActive()).collect(Collectors.toList())
211
					.stream().map(x -> x.getId()).collect(Collectors.toList());
212
 
213
		}
30426 tejbeer 214
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
25570 tejbeer 215
 
30426 tejbeer 216
		Map<Integer, CustomRetailer> fofoRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x))
217
				.filter(x -> x != null).collect(Collectors.toList()).stream()
218
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
25570 tejbeer 219
		model.addAttribute("fofoRetailers", fofoRetailers);
220
		return "added-subregion-partners";
221
	}
222
 
24417 govind 223
	@GetMapping(value = "/cs/createPartnerRegion")
224
	public String createPartnerRegion(HttpServletRequest request, Model model) {
225
		List<Region> regions = regionRepository.selectAll();
226
		model.addAttribute("regions", regions);
227
		return "create-partner-region";
228
	}
229
 
230
	@PostMapping(value = "/cs/createPartnerRegion")
231
	public String createPartnerRegion(HttpServletRequest request, @RequestParam(name = "regionId") int regionId,
232
			@RequestBody List<Integer> selectedFofoIds, Model model) throws Exception {
24557 govind 233
		partnerRegionRepository.delete(regionId);
234
		LOGGER.info("successfully removed");
235
		LOGGER.info(selectedFofoIds.size());
24417 govind 236
		csService.addPartnerToRegion(regionId, selectedFofoIds);
31238 amit.gupta 237
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24417 govind 238
		return "response";
239
	}
240
 
27410 tejbeer 241
	@GetMapping(value = "/cs/getPosition")
242
	public String getPosition(HttpServletRequest request, @RequestParam int positionId, Model model) {
243
 
244
		Position position = positionRepository.selectById(positionId);
245
 
246
		List<CustomRetailer> positionIdCustomRetailer = csService.getPositionCustomRetailerMap(Arrays.asList(position))
247
				.get(position.getId());
248
 
249
		Map<Integer, CustomRetailer> regionRetailerMap = csService.getRegionPartners(Arrays.asList(position))
250
				.get(position.getRegionId()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
251
 
252
		model.addAttribute("position", position);
253
		model.addAttribute("regionRetailerMap", regionRetailerMap);
254
		model.addAttribute("positionIdCustomRetailer", positionIdCustomRetailer);
255
 
256
		return "position-partner";
257
	}
258
 
24417 govind 259
	@GetMapping(value = "/cs/createPosition")
24500 govind 260
	public String createPosition(HttpServletRequest request,
261
			@RequestParam(name = "offset", defaultValue = "0") int offset,
24471 govind 262
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) {
25570 tejbeer 263
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
24417 govind 264
		List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
265
		List<Region> regions = regionRepository.selectAll();
266
		model.addAttribute("escalationTypes", EscalationType.values());
267
		model.addAttribute("authUsers", authUsers);
268
		model.addAttribute("ticketCategories", ticketCategories);
269
		model.addAttribute("regions", regions);
24500 govind 270
 
28457 tejbeer 271
		List<Position> positions = positionRepository.selectAllPosition();
30426 tejbeer 272
		LOGGER.info("positions" + positions);
273
 
24500 govind 274
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService
275
				.getAuthUserIdAndAuthUserMapUsingPositions(positions);
276
		Map<Integer, TicketCategory> categoryIdAndCategoryMap = csService
277
				.getCategoryIdAndCategoryUsingPositions(positions);
278
		Map<Integer, Region> regionIdAndRegionMap = csService.getRegionIdAndRegionMap(positions);
25570 tejbeer 279
 
27410 tejbeer 280
//	    Map<Integer, List<CustomRetailer>> positionIdAndpartnerRegionMap = csService
281
//			.getpositionIdAndpartnerRegionMap(positions);
25570 tejbeer 282
 
27410 tejbeer 283
//	     Map<Integer, List<CustomRetailer>> addedpositionIdAndCustomRetailerMap = csService
284
//				.getPositionCustomRetailerMap(positions);
285
//		LOGGER.info("fofoIdAndCustomRetailerMap" + addedpositionIdAndCustomRetailerMap);
24500 govind 286
 
24471 govind 287
		model.addAttribute("start", offset + 1);
30426 tejbeer 288
 
24471 govind 289
		model.addAttribute("positions", positions);
290
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
291
		model.addAttribute("categoryIdAndCategoryMap", categoryIdAndCategoryMap);
292
		model.addAttribute("regionIdAndRegionMap", regionIdAndRegionMap);
27410 tejbeer 293
		// model.addAttribute("positionIdAndCustomRetailerMap",
294
		// addedpositionIdAndCustomRetailerMap);
295
		// model.addAttribute("positionIdAndpartnerRegionMap",
296
// positionIdAndpartnerRegionMap);
25570 tejbeer 297
 
24417 govind 298
		return "create-position";
299
	}
24500 govind 300
 
24471 govind 301
	@GetMapping(value = "/cs/position-paginated")
24500 govind 302
	public String positionPaginated(HttpServletRequest request,
303
			@RequestParam(name = "offset", defaultValue = "0") int offset,
24471 govind 304
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) {
24500 govind 305
 
306
		List<Position> positions = positionRepository.selectAll(offset, limit);
307
		Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService
308
				.getAuthUserIdAndAuthUserMapUsingPositions(positions);
309
		Map<Integer, TicketCategory> categoryIdAndCategoryMap = csService
310
				.getCategoryIdAndCategoryUsingPositions(positions);
311
		Map<Integer, Region> regionIdAndRegionMap = csService.getRegionIdAndRegionMap(positions);
27410 tejbeer 312
		/*
313
		 * Map<Integer, List<CustomRetailer>> positionIdAndpartnerRegionMap = csService
314
		 * .getpositionIdAndpartnerRegionMap(positions);
315
		 * 
316
		 * Map<Integer, List<CustomRetailer>> addedpositionIdAndCustomRetailerMap =
317
		 * csService .getPositionCustomRetailerMap(positions);
318
		 */
25570 tejbeer 319
 
24471 govind 320
		model.addAttribute("positions", positions);
321
		model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
322
		model.addAttribute("categoryIdAndCategoryMap", categoryIdAndCategoryMap);
323
		model.addAttribute("regionIdAndRegionMap", regionIdAndRegionMap);
27410 tejbeer 324
		// model.addAttribute("positionIdAndCustomRetailerMap",
325
		// addedpositionIdAndCustomRetailerMap);
326
		// model.addAttribute("positionIdAndpartnerRegionMap",
327
		// positionIdAndpartnerRegionMap);
25570 tejbeer 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
 
31238 amit.gupta 358
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24417 govind 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
 
31238 amit.gupta 379
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
25570 tejbeer 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) {
31238 amit.gupta 409
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
24620 govind 410
		} else {
411
			csService.createTicket(loginDetails.getFofoId(), categoryId, subCategoryId, message);
31238 amit.gupta 412
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24620 govind 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(),
27124 amit.gupta 441
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), sortOrder, null, searchTerm, offset,
24787 govind 442
							limit);
443
					size = ticketRepository.selectAllCountByAssignee(authUser.getId(),
27124 amit.gupta 444
							Optional.of(TicketStatus.CLOSED.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(),
27124 amit.gupta 456
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), sortOrder, ticketSearchType,
24787 govind 457
							searchTerm, offset, limit);
458
					size = ticketRepository.selectAllCountByAssignee(authUser.getId(),
27124 amit.gupta 459
							Optional.of(TicketStatus.CLOSED.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(),
27195 amit.gupta 528
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), sortOrder, null, searchTerm, offset,
24791 govind 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(),
27195 amit.gupta 539
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), sortOrder, ticketSearchType,
24791 govind 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);
27270 tejbeer 569
		List<List<ActivityAttachment>> activityAttachments = allactivities.stream().map(x -> x.getActivityAttachment())
570
				.collect(Collectors.toList());
571
		for (List<ActivityAttachment> aA : activityAttachments) {
572
			// List<ActivityAttachment> documentId = aA.stream().map(x ->
573
			// x).collect(Collectors.toList());
574
			for (ActivityAttachment attachment : aA) {
575
				Document document = documentRepository.selectById(attachment.getDocumentId());
576
				attachment.setDocumentName(document.getDisplayName());
577
				activityAttachmentRepository.persist(attachment);
578
			}
579
		}
24824 govind 580
		List<Activity> activities = null;
24572 amit.gupta 581
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24620 govind 582
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
24824 govind 583
			Set<Integer> authUserIds = allactivities.stream().map(x -> x.getCreatedBy()).collect(Collectors.toSet());
24572 amit.gupta 584
			List<AuthUser> users = authRepository.selectAllAuthUserByIds(new ArrayList<>(authUserIds));
24620 govind 585
			Map<Integer, String> authUserNameMap = users.stream()
586
					.collect(Collectors.toMap(AuthUser::getId, x -> x.getFirstName() + " " + x.getLastName()));
24824 govind 587
			allactivities.stream().forEach(x -> x.setName(authUserNameMap.get(x.getCreatedBy())));
588
			activities = allactivities;
589
		} else {
27139 amit.gupta 590
			activities = allactivities.stream().filter(x -> ActivityType.PARTNER_ACTIVITIES.contains(x.getType()))
24824 govind 591
					.collect(Collectors.toList());
24572 amit.gupta 592
		}
24417 govind 593
		if (activities == null) {
594
			throw new ProfitMandiBusinessException("Activity", ticketId, "No Activity Found");
595
		}
31238 amit.gupta 596
		model.addAttribute("response1", mvcResponseSender.createResponseString(activities));
24417 govind 597
		return "response";
598
 
599
	}
600
 
601
	@PostMapping(value = "/cs/createActivity")
602
	public String createActivity(HttpServletRequest request,
603
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
24500 govind 604
			@RequestParam(name = "assigneeId", defaultValue = "0") int assigneeId,
24824 govind 605
			@RequestParam(name = "internal", defaultValue = "true") boolean internal,
27270 tejbeer 606
			@RequestParam(name = "message", defaultValue = "") String message, @RequestBody List<Integer> documentIds,
607
 
608
			Model model) throws Exception {
609
 
610
		LOGGER.info("documentIds" + documentIds);
24417 govind 611
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24500 govind 612
		Ticket ticket = ticketRepository.selectById(ticketId);
27150 amit.gupta 613
		List<TicketAssigned> ticketAssignedList = ticketAssignedRepository.selectByTicketIds(Arrays.asList(ticketId));
27270 tejbeer 614
		List<Integer> authUserIds = ticketAssignedList.stream().map(x -> x.getAssineeId()).collect(Collectors.toList());
615
		authUserIds.add(ticketAssignedList.get(ticketAssignedList.size() - 1).getManagerId());
616
		Map<Integer, AuthUser> authUsersMap = authRepository.selectAllAuthUserByIds(authUserIds).stream()
617
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
24500 govind 618
		if (ticket.getCloseTimestamp() == null) {
27124 amit.gupta 619
			Activity activity = new Activity();
620
			activity.setCreatedBy(0);
621
			activity.setCreateTimestamp(LocalDateTime.now());
27150 amit.gupta 622
			String subject = null;
27270 tejbeer 623
			String mailMessage = null;
27159 amit.gupta 624
			activity.setMessage(message);
24500 govind 625
			if (!roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
27150 amit.gupta 626
				CustomRetailer customRetailer = retailerService.getFofoRetailers(true).get(loginDetails.getFofoId());
24500 govind 627
				activity.setType(ActivityType.COMMUNICATION_IN);
27270 tejbeer 628
				subject = String.format("Ticket Update #%s by franchisee %s", ticket.getId(),
629
						customRetailer.getBusinessName() + "(" + customRetailer.getCode() + ")");
27197 amit.gupta 630
				mailMessage = String.format("Franchisee message - %s", message);
24500 govind 631
			} else {
27156 amit.gupta 632
				AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
27164 amit.gupta 633
				activity.setCreatedBy(authUser.getId());
27162 amit.gupta 634
				authUsersMap.remove(authUser.getId());
27150 amit.gupta 635
				subject = String.format("Ticket Update #%s by %s", ticket.getId(), authUser.getName());
27197 amit.gupta 636
				mailMessage = String.format("%s's message - %s", authUser.getFirstName(), message);
24824 govind 637
				if (internal) {
638
					activity.setType(ActivityType.COMMUNICATION_INTERNAL);
27124 amit.gupta 639
					// String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
24824 govind 640
				} else {
27186 amit.gupta 641
					String updatedBy = "SD Team";
27192 amit.gupta 642
					CustomRetailer customRetailer = retailerService.getFofoRetailers(true).get(ticket.getFofoId());
27186 amit.gupta 643
					subject = String.format("Ticket Update #%s by %s", ticket.getId(), updatedBy);
27197 amit.gupta 644
					String partnerMessage = String.format("%s's message - %s", updatedBy, message);
645
					this.activityRelatedMail(customRetailer.getEmail(), null, "subject", partnerMessage);
24824 govind 646
					activity.setType(ActivityType.COMMUNICATION_OUT);
647
				}
24500 govind 648
			}
27124 amit.gupta 649
			activityRepository.persist(activity);
27270 tejbeer 650
 
651
			for (Integer documentId : documentIds) {
652
				ActivityAttachment activityAttachment = new ActivityAttachment();
653
				activityAttachment.setActivityId(activity.getId());
654
				activityAttachment.setDocumentId(documentId);
655
				activityAttachmentRepository.persist(activityAttachment);
656
			}
657
 
27124 amit.gupta 658
			csService.addActivity(ticket, activity);
27150 amit.gupta 659
			AuthUser authUser = authUsersMap.remove(authUserIds.get(0));
27270 tejbeer 660
			if (authUser == null) {
27163 amit.gupta 661
				authUser = authUsersMap.remove(authUserIds.get(1));
662
			}
31238 amit.gupta 663
			model.addAttribute("response1", mvcResponseSender.createResponseString(authUser));
27410 tejbeer 664
			String[] cc = authUsersMap.entrySet().stream().map(x -> x.getValue().getEmailId()).toArray(String[]::new);
27197 amit.gupta 665
			this.activityRelatedMail(authUser.getEmailId(), cc, subject, mailMessage);
24417 govind 666
		} else {
667
			throw new ProfitMandiBusinessException("Ticket", ticket.getId(), "Already closed ticket");
668
		}
669
		return "response";
670
	}
24500 govind 671
 
24620 govind 672
	private void activityRelatedMail(String to, String[] cc, String subject, String message)
673
			throws ProfitMandiBusinessException {
674
		try {
675
			Utils.sendMailWithAttachments(mailSender, to, cc, subject, message, null);
676
		} catch (Exception e) {
677
			throw new ProfitMandiBusinessException("Ticket Activity", to, "Could not send ticket activity mail");
678
		}
679
	}
680
 
24500 govind 681
	@PostMapping(value = "/cs/closeTicket")
24417 govind 682
	public String closeTicket(HttpServletRequest request,
24439 govind 683
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
24500 govind 684
			@RequestParam(name = "happyCode") String happyCode, Model model) throws Exception {
685
		Ticket ticket = ticketRepository.selectById(ticketId);
686
		if (ticket.getHappyCode().equals(happyCode)) {
687
			ticket.setCloseTimestamp(LocalDateTime.now());
688
			ticketRepository.persist(ticket);
31238 amit.gupta 689
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24500 govind 690
		} else {
691
			throw new ProfitMandiBusinessException("Ticket", ticketId, "Happy Code can't match");
24439 govind 692
		}
24417 govind 693
		return "response";
694
	}
24500 govind 695
 
696
	@GetMapping(value = "/cs/managerTicket")
27124 amit.gupta 697
	public String getManagerTickets(HttpServletRequest request,
24699 govind 698
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
699
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24747 govind 700
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
701
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24500 govind 702
			@RequestParam(name = "offset", defaultValue = "0") int offset,
703
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
704
			throws ProfitMandiBusinessException {
24439 govind 705
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
706
		long size = 0;
24500 govind 707
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
708
		List<Ticket> tickets = null;
24569 govind 709
		Map<Integer, List<AuthUser>> authUserListMap = null;
27318 amit.gupta 710
		if (ticketSearchType == null) {
711
			if (ticketStatus.equals(TicketStatus.RESOLVED)) {
712
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(), null,
713
						searchTerm, offset, limit);
714
				size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(), null, 0);
715
			} else {
716
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
717
						Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm, offset, limit);
718
				size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(),
719
						Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, 0);
720
			}
24500 govind 721
		} else {
27318 amit.gupta 722
			if (ticketStatus.equals(TicketStatus.RESOLVED)) {
723
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
724
						ticketSearchType, searchTerm, offset, limit);
725
				size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(),
726
						ticketSearchType, searchTerm);
24747 govind 727
			} else {
27318 amit.gupta 728
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
729
						Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm, offset,
730
						limit);
731
				size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(),
732
						Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm);
24747 govind 733
			}
734
 
24439 govind 735
		}
27318 amit.gupta 736
		authUserListMap = csService.getAssignedAuthList(tickets);
737
 
738
		if (tickets.size() > 0) {
739
			Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
740
			model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
741
		}
24439 govind 742
		if (size < limit) {
743
			model.addAttribute("end", offset + size);
744
		} else {
745
			model.addAttribute("end", offset + limit);
746
		}
747
		model.addAttribute("start", offset + 1);
748
		model.addAttribute("size", size);
749
		model.addAttribute("tickets", tickets);
24500 govind 750
 
24439 govind 751
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
752
				.getSubCategoryIdAndSubCategoryMap(tickets);
24699 govind 753
		model.addAttribute("ticketStatusValues", TicketStatus.values());
754
		model.addAttribute("orderByValues", SortOrder.values());
755
		model.addAttribute("selectedticketStatus", ticketStatus);
756
		model.addAttribute("selectedorderby", sortOrder);
24439 govind 757
		model.addAttribute("tickets", tickets);
24747 govind 758
		model.addAttribute("ticketSearchTypes", TicketSearchType.values());
24750 govind 759
		model.addAttribute("ticketSearchType", ticketSearchType);
24747 govind 760
		model.addAttribute("searchTerm", searchTerm);
24500 govind 761
		model.addAttribute("authUserListMap", authUserListMap);
24439 govind 762
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
763
		return "managerTicket";
764
	}
24500 govind 765
 
766
	@GetMapping(value = "/cs/managerTicket-paginated")
27205 amit.gupta 767
	public String getManagerTicketsPaginated(HttpServletRequest request,
24699 govind 768
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
769
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24747 govind 770
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
771
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24500 govind 772
			@RequestParam(name = "offset", defaultValue = "0") int offset,
773
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
774
			throws ProfitMandiBusinessException {
24467 govind 775
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24500 govind 776
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
24557 govind 777
		Map<Integer, List<AuthUser>> authUserListMap = null;
24500 govind 778
		List<Ticket> tickets = null;
27318 amit.gupta 779
		if (ticketSearchType == null) {
780
			if (ticketStatus.equals(TicketStatus.RESOLVED)) {
781
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(), null,
782
						searchTerm, offset, limit);
24787 govind 783
 
24747 govind 784
			} else {
27318 amit.gupta 785
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
786
						Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm, offset, limit);
24787 govind 787
 
27318 amit.gupta 788
			}
789
		} else {
790
			if (ticketStatus.equals(TicketStatus.RESOLVED)) {
791
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
792
						ticketSearchType, searchTerm, offset, limit);
24787 govind 793
 
27318 amit.gupta 794
			} else {
795
				tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
796
						Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm, offset,
797
						limit);
24747 govind 798
			}
27318 amit.gupta 799
 
24467 govind 800
		}
27318 amit.gupta 801
		authUserListMap = csService.getAssignedAuthList(tickets);
802
		if (tickets.size() > 0) {
803
			Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
804
			model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
805
		}
24467 govind 806
		model.addAttribute("tickets", tickets);
807
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
808
				.getSubCategoryIdAndSubCategoryMap(tickets);
809
		model.addAttribute("tickets", tickets);
24500 govind 810
		model.addAttribute("authUserListMap", authUserListMap);
24467 govind 811
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
812
		return "managerTicket-paginated";
813
	}
24500 govind 814
 
815
	@GetMapping(value = "/cs/edit-ticket")
816
	public String getEditTicket(HttpServletRequest request,
817
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) {
818
		Ticket ticket = ticketRepository.selectById(ticketId);
819
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
820
		TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
821
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository
27124 amit.gupta 822
				.selectAll(ticketSubCategory.getCategoryId());
823
		List<AuthUser> authUsers = new ArrayList<>();
24467 govind 824
		model.addAttribute("ticket", ticket);
825
		model.addAttribute("ticketCategories", ticketCategories);
826
		model.addAttribute("ticketSubCategories", ticketSubCategories);
24575 govind 827
		model.addAttribute("ticketSubCategory", ticketSubCategory);
24500 govind 828
		model.addAttribute("authUsers", authUsers);
24467 govind 829
		return "edit-ticket-modal";
830
	}
24500 govind 831
 
832
	@PostMapping(value = "/cs/edit-ticket")
833
	public String editTicket(HttpServletRequest request,
834
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
835
			@RequestParam(name = "subCategoryId", defaultValue = "0") int subCategoryId,
836
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId,
837
			@RequestParam(name = "authUserId", defaultValue = "0") int authUserId, Model model) throws Exception {
27152 amit.gupta 838
		LOGGER.info("Ticket Id {}, CategoryId {}, SubCategory Id {}", ticketId, categoryId, subCategoryId);
24500 govind 839
		Ticket ticket = ticketRepository.selectById(ticketId);
27124 amit.gupta 840
		csService.updateTicket(categoryId, subCategoryId, ticket);
31238 amit.gupta 841
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24467 govind 842
		return "response";
27124 amit.gupta 843
 
24467 govind 844
	}
24500 govind 845
 
846
	@DeleteMapping(value = "/cs/removePosition")
847
	public String removePosition(HttpServletRequest request,
848
			@RequestParam(name = "positionId", defaultValue = "0") int positionId, Model model) throws Exception {
24471 govind 849
		positionRepository.delete(positionId);
31238 amit.gupta 850
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24471 govind 851
		return "response";
852
	}
24620 govind 853
 
854
	@PostMapping(value = "/cs/create-last-activity")
855
	public String createlastActivity(HttpServletRequest request, @RequestParam(name = "ticketId") int ticketId,
856
			@RequestParam(name = "lastactivity") ActivityType lastActivity, Model model) throws Exception {
857
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
858
		Ticket ticket = ticketRepository.selectById(ticketId);
859
		Activity activity = new Activity();
860
		String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
861
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
862
			ticket.setLastActivity(lastActivity);
863
			String to = retailerService.getFofoRetailer(ticket.getFofoId()).getEmail();
24699 govind 864
			String message = String.format(PARTNER_RESOLVED_TICKET_MAIL, ticketId, "REOPEN");
24620 govind 865
			activity.setMessage(message);
866
			activity.setCreatedBy(authRepository.selectByEmailOrMobile(loginDetails.getEmailId()).getId());
867
			activity.setTicketId(ticketId);
868
			activity.setCreateTimestamp(LocalDateTime.now());
869
			activity.setType(ActivityType.COMMUNICATION_OUT);
24621 govind 870
			this.activityRelatedMail(to, null, subject, message);
24620 govind 871
		} else {
872
			if (ActivityType.RESOLVED_ACCEPTED == lastActivity) {
873
				ticket.setLastActivity(lastActivity);
874
				ticket.setCloseTimestamp(LocalDateTime.now());
27139 amit.gupta 875
				activity.setMessage(ActivityType.RESOLVED_ACCEPTED.toString());
24620 govind 876
				activity.setCreatedBy(0);
877
				activity.setTicketId(ticketId);
878
				activity.setType(ActivityType.COMMUNICATION_IN);
879
				activity.setCreateTimestamp(LocalDateTime.now());
880
			} else {
24699 govind 881
				String message = String.format(INTERNAL_REOPEN_MAIL, ticketId,
882
						retailerService.getFofoRetailer(loginDetails.getFofoId()).getBusinessName());
24620 govind 883
				String to = authRepository.selectById(ticket.getL1AuthUser()).getEmailId();
27270 tejbeer 884
				String[] ccTo = authRepository
885
						.selectAllAuthUserByIds(Arrays.asList(ticket.getL2AuthUser(), ticket.getL3AuthUser(),
886
								ticket.getL4AuthUser(), ticket.getL5AuthUser()))
887
						.stream().map(x -> x.getEmailId()).toArray(String[]::new);
24620 govind 888
				ticket.setLastActivity(lastActivity);
24638 govind 889
				ticket.setUpdateTimestamp(LocalDateTime.now());
890
				ticketAssignedRepository.deleteByTicketId(ticketId);
24699 govind 891
				TicketAssigned ticketAssigned = new TicketAssigned();
24638 govind 892
				ticketAssigned.setAssineeId(ticket.getL1AuthUser());
893
				ticketAssigned.setTicketId(ticketId);
894
				ticketAssignedRepository.persist(ticketAssigned);
24620 govind 895
				activity.setMessage(INTERNAL_REOPEN_ACTIVITY_MESSAGE);
896
				activity.setCreatedBy(0);
897
				activity.setTicketId(ticketId);
898
				activity.setType(ActivityType.COMMUNICATION_IN);
899
				activity.setCreateTimestamp(LocalDateTime.now());
27139 amit.gupta 900
				this.activityRelatedMail(to, ccTo, subject, message);
24699 govind 901
				this.activityRelatedMail(retailerService.getFofoRetailer(loginDetails.getFofoId()).getEmail(), null,
902
						subject, String.format(PARTNER_REOPEN, ticketId));
24620 govind 903
			}
904
 
905
		}
906
		activityRepository.persist(activity);
31238 amit.gupta 907
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24620 govind 908
		return "response";
909
	}
910
 
24417 govind 911
}