Subversion Repositories SmartDukaan

Rev

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