Subversion Repositories SmartDukaan

Rev

Rev 25570 | Rev 27139 | 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();
27124 amit.gupta 181
		ticketSubCategory.setCategoryId(categoryId);
24417 govind 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(),
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(),
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) {
27124 amit.gupta 599
			Activity activity = new Activity();
600
			activity.setCreatedBy(0);
601
			activity.setCreateTimestamp(LocalDateTime.now());
602
			activity.setMessage(message);
24500 govind 603
			if (!roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
604
				activity.setType(ActivityType.COMMUNICATION_IN);
24620 govind 605
				AuthUser authUser = authRepository.selectById(ticket.getL1AuthUser());
606
				String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
607
				String[] cc = { authRepository.selectById(ticket.getL2AuthUser()).getEmailId(),
608
						authRepository.selectById(ticket.getL3AuthUser()).getEmailId() };
609
				// LOGGER.info(authUser.getEmailId()+" "+cc+" "+subject+" "+message);
24824 govind 610
				// this.activityRelatedMail(authUser.getEmailId(), cc, subject, message);
24500 govind 611
				model.addAttribute("response", mvcResponseSender.createResponseString(authUser));
612
			} else {
613
				AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
614
				activity.setCreatedBy(authUser.getId());
24824 govind 615
				if (internal) {
616
					activity.setType(ActivityType.COMMUNICATION_INTERNAL);
27124 amit.gupta 617
					// String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
24824 govind 618
				} else {
619
					activity.setType(ActivityType.COMMUNICATION_OUT);
620
				}
24500 govind 621
				model.addAttribute("response", mvcResponseSender.createResponseString(authUser));
622
			}
27124 amit.gupta 623
			activityRepository.persist(activity);
624
			csService.addActivity(ticket, activity);
24417 govind 625
		} else {
626
			throw new ProfitMandiBusinessException("Ticket", ticket.getId(), "Already closed ticket");
627
		}
628
		return "response";
629
	}
24500 govind 630
 
24620 govind 631
	private void activityRelatedMail(String to, String[] cc, String subject, String message)
632
			throws ProfitMandiBusinessException {
633
		try {
634
			Utils.sendMailWithAttachments(mailSender, to, cc, subject, message, null);
635
		} catch (Exception e) {
636
			throw new ProfitMandiBusinessException("Ticket Activity", to, "Could not send ticket activity mail");
637
		}
638
	}
639
 
24500 govind 640
	@PostMapping(value = "/cs/closeTicket")
24417 govind 641
	public String closeTicket(HttpServletRequest request,
24439 govind 642
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
24500 govind 643
			@RequestParam(name = "happyCode") String happyCode, Model model) throws Exception {
644
		Ticket ticket = ticketRepository.selectById(ticketId);
645
		if (ticket.getHappyCode().equals(happyCode)) {
646
			ticket.setCloseTimestamp(LocalDateTime.now());
647
			ticketRepository.persist(ticket);
648
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
649
		} else {
650
			throw new ProfitMandiBusinessException("Ticket", ticketId, "Happy Code can't match");
24439 govind 651
		}
24417 govind 652
		return "response";
653
	}
24500 govind 654
 
655
	@GetMapping(value = "/cs/managerTicket")
27124 amit.gupta 656
	public String getManagerTickets(HttpServletRequest request,
24699 govind 657
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
658
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24747 govind 659
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
660
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24500 govind 661
			@RequestParam(name = "offset", defaultValue = "0") int offset,
662
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
663
			throws ProfitMandiBusinessException {
24439 govind 664
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
665
		long size = 0;
24500 govind 666
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
667
		List<Ticket> tickets = null;
24569 govind 668
		Map<Integer, List<AuthUser>> authUserListMap = null;
24500 govind 669
		if (loginDetails.getEmailId().equals("amandeep.singh@smartdukaan.com")) {
670
			tickets = ticketRepository.selectAll(offset, limit, Optional.empty());
24620 govind 671
			authUserListMap = csService.getAuthUserList(tickets, authUser);
24500 govind 672
			size = ticketRepository.selectAllCount();
673
		} else {
24747 govind 674
			if (ticketSearchType == null) {
24787 govind 675
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
676
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
677
							null, searchTerm, offset, limit);
678
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(), null, 0);
679
				} else {
680
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
681
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm, offset, limit);
682
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(),
683
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, 0);
684
				}
24747 govind 685
			} else {
24787 govind 686
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
687
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
688
							ticketSearchType, searchTerm, offset, limit);
689
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(),
690
							ticketSearchType, searchTerm);
691
				} else {
692
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
693
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm, offset,
694
							limit);
695
					size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(),
696
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm);
697
				}
698
 
24747 govind 699
			}
24620 govind 700
			authUserListMap = csService.getAuthUserList(tickets, authUser);
24747 govind 701
 
24620 govind 702
			if (tickets.size() > 0) {
703
				Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
704
				model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
24439 govind 705
			}
706
		}
707
		if (size < limit) {
708
			model.addAttribute("end", offset + size);
709
		} else {
710
			model.addAttribute("end", offset + limit);
711
		}
712
		model.addAttribute("start", offset + 1);
713
		model.addAttribute("size", size);
714
		model.addAttribute("tickets", tickets);
24500 govind 715
 
24439 govind 716
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
717
				.getSubCategoryIdAndSubCategoryMap(tickets);
24699 govind 718
		model.addAttribute("ticketStatusValues", TicketStatus.values());
719
		model.addAttribute("orderByValues", SortOrder.values());
720
		model.addAttribute("selectedticketStatus", ticketStatus);
721
		model.addAttribute("selectedorderby", sortOrder);
24439 govind 722
		model.addAttribute("tickets", tickets);
24747 govind 723
		model.addAttribute("ticketSearchTypes", TicketSearchType.values());
24750 govind 724
		model.addAttribute("ticketSearchType", ticketSearchType);
24747 govind 725
		model.addAttribute("searchTerm", searchTerm);
24500 govind 726
		model.addAttribute("authUserListMap", authUserListMap);
24439 govind 727
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
728
		return "managerTicket";
729
	}
24500 govind 730
 
731
	@GetMapping(value = "/cs/managerTicket-paginated")
732
	public String getL2L3AndL4TicketsPaginated(HttpServletRequest request,
24699 govind 733
			@RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder,
734
			@RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus,
24747 govind 735
			@RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType,
736
			@RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm,
24500 govind 737
			@RequestParam(name = "offset", defaultValue = "0") int offset,
738
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
739
			throws ProfitMandiBusinessException {
24467 govind 740
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24500 govind 741
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
24557 govind 742
		Map<Integer, List<AuthUser>> authUserListMap = null;
24500 govind 743
		List<Ticket> tickets = null;
744
		if (loginDetails.getEmailId().equals("amandeep.singh@smartdukaan.com")) {
745
			tickets = ticketRepository.selectAll(offset, limit, Optional.empty());
24620 govind 746
			authUserListMap = csService.getAuthUserList(tickets, authUser);
24500 govind 747
		} else {
24747 govind 748
			if (ticketSearchType == null) {
24787 govind 749
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
750
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
751
							null, searchTerm, offset, limit);
752
 
753
				} else {
754
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
755
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm, offset, limit);
756
 
757
				}
24747 govind 758
			} else {
24787 govind 759
				if (ticketStatus.equals(TicketStatus.RESOLVED)) {
760
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(),
761
							ticketSearchType, searchTerm, offset, limit);
762
 
763
				} else {
764
					tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder,
765
							Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm, offset,
766
							limit);
767
				}
768
 
24747 govind 769
			}
24620 govind 770
			authUserListMap = csService.getAuthUserList(tickets, authUser);
771
			if (tickets.size() > 0) {
24500 govind 772
				Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
24467 govind 773
				model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
24620 govind 774
			}
24467 govind 775
		}
776
		model.addAttribute("tickets", tickets);
777
		Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService
778
				.getSubCategoryIdAndSubCategoryMap(tickets);
779
		model.addAttribute("tickets", tickets);
24500 govind 780
		model.addAttribute("authUserListMap", authUserListMap);
24467 govind 781
		model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
782
		return "managerTicket-paginated";
783
	}
24500 govind 784
 
785
	@GetMapping(value = "/cs/edit-ticket")
786
	public String getEditTicket(HttpServletRequest request,
787
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) {
788
		Ticket ticket = ticketRepository.selectById(ticketId);
789
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
790
		TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
791
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository
27124 amit.gupta 792
				.selectAll(ticketSubCategory.getCategoryId());
793
		List<AuthUser> authUsers = new ArrayList<>();
24467 govind 794
		model.addAttribute("ticket", ticket);
795
		model.addAttribute("ticketCategories", ticketCategories);
796
		model.addAttribute("ticketSubCategories", ticketSubCategories);
24575 govind 797
		model.addAttribute("ticketSubCategory", ticketSubCategory);
24500 govind 798
		model.addAttribute("authUsers", authUsers);
24467 govind 799
		return "edit-ticket-modal";
800
	}
24500 govind 801
 
802
	@PostMapping(value = "/cs/edit-ticket")
803
	public String editTicket(HttpServletRequest request,
804
			@RequestParam(name = "ticketId", defaultValue = "0") int ticketId,
805
			@RequestParam(name = "subCategoryId", defaultValue = "0") int subCategoryId,
806
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId,
807
			@RequestParam(name = "authUserId", defaultValue = "0") int authUserId, Model model) throws Exception {
24467 govind 808
		LOGGER.info(ticketId);
24500 govind 809
		Ticket ticket = ticketRepository.selectById(ticketId);
27124 amit.gupta 810
		csService.updateTicket(categoryId, subCategoryId, ticket);
811
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
24467 govind 812
		return "response";
27124 amit.gupta 813
 
24467 govind 814
	}
24500 govind 815
 
816
	@DeleteMapping(value = "/cs/removePosition")
817
	public String removePosition(HttpServletRequest request,
818
			@RequestParam(name = "positionId", defaultValue = "0") int positionId, Model model) throws Exception {
24471 govind 819
		positionRepository.delete(positionId);
820
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
821
		return "response";
822
	}
24620 govind 823
 
824
	@PostMapping(value = "/cs/create-last-activity")
825
	public String createlastActivity(HttpServletRequest request, @RequestParam(name = "ticketId") int ticketId,
826
			@RequestParam(name = "lastactivity") ActivityType lastActivity, Model model) throws Exception {
827
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
828
		Ticket ticket = ticketRepository.selectById(ticketId);
829
		Activity activity = new Activity();
830
		String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
831
		if (roleManager.isAdmin(loginDetails.getRoleIds())) {
832
			ticket.setLastActivity(lastActivity);
833
			String to = retailerService.getFofoRetailer(ticket.getFofoId()).getEmail();
24699 govind 834
			String message = String.format(PARTNER_RESOLVED_TICKET_MAIL, ticketId, "REOPEN");
24620 govind 835
			activity.setMessage(message);
836
			activity.setCreatedBy(authRepository.selectByEmailOrMobile(loginDetails.getEmailId()).getId());
837
			activity.setTicketId(ticketId);
838
			activity.setCreateTimestamp(LocalDateTime.now());
839
			activity.setType(ActivityType.COMMUNICATION_OUT);
24621 govind 840
			this.activityRelatedMail(to, null, subject, message);
24620 govind 841
		} else {
842
			if (ActivityType.RESOLVED_ACCEPTED == lastActivity) {
843
				ticket.setLastActivity(lastActivity);
844
				ticket.setCloseTimestamp(LocalDateTime.now());
845
				activity.setMessage(ActivityType.RESOLVED.toString());
846
				activity.setCreatedBy(0);
847
				activity.setTicketId(ticketId);
848
				activity.setType(ActivityType.COMMUNICATION_IN);
849
				activity.setCreateTimestamp(LocalDateTime.now());
850
			} else {
24699 govind 851
				String message = String.format(INTERNAL_REOPEN_MAIL, ticketId,
852
						retailerService.getFofoRetailer(loginDetails.getFofoId()).getBusinessName());
24620 govind 853
				String to = authRepository.selectById(ticket.getL1AuthUser()).getEmailId();
854
				String cc[] = { authRepository.selectById(ticket.getL2AuthUser()).getEmailId(),
855
						authRepository.selectById(ticket.getL3AuthUser()).getEmailId() };
856
				ticket.setLastActivity(lastActivity);
24638 govind 857
				ticket.setUpdateTimestamp(LocalDateTime.now());
858
				ticketAssignedRepository.deleteByTicketId(ticketId);
24699 govind 859
				TicketAssigned ticketAssigned = new TicketAssigned();
24638 govind 860
				ticketAssigned.setAssineeId(ticket.getL1AuthUser());
861
				ticketAssigned.setTicketId(ticketId);
862
				ticketAssignedRepository.persist(ticketAssigned);
24620 govind 863
				activity.setMessage(INTERNAL_REOPEN_ACTIVITY_MESSAGE);
864
				activity.setCreatedBy(0);
865
				activity.setTicketId(ticketId);
866
				activity.setType(ActivityType.COMMUNICATION_IN);
867
				activity.setCreateTimestamp(LocalDateTime.now());
24621 govind 868
				this.activityRelatedMail(to, cc, subject, message);
24699 govind 869
				this.activityRelatedMail(retailerService.getFofoRetailer(loginDetails.getFofoId()).getEmail(), null,
870
						subject, String.format(PARTNER_REOPEN, ticketId));
24620 govind 871
			}
872
 
873
		}
874
		activityRepository.persist(activity);
875
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
876
		return "response";
877
	}
878
 
24417 govind 879
}