Subversion Repositories SmartDukaan

Rev

Rev 35395 | Rev 35570 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
24417 govind 1
package com.spice.profitmandi.web.controller;
2
 
3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
4
import com.spice.profitmandi.common.model.CustomRetailer;
32812 shampa 5
import com.spice.profitmandi.common.model.ProfitMandiConstants;
24620 govind 6
import com.spice.profitmandi.common.util.Utils;
24417 govind 7
import com.spice.profitmandi.dao.entity.auth.AuthUser;
27690 amit.gupta 8
import com.spice.profitmandi.dao.entity.cs.*;
27270 tejbeer 9
import com.spice.profitmandi.dao.entity.dtr.Document;
24417 govind 10
import com.spice.profitmandi.dao.entity.fofo.ActivityType;
11
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
24699 govind 12
import com.spice.profitmandi.dao.enumuration.cs.TicketStatus;
25570 tejbeer 13
import com.spice.profitmandi.dao.model.CreatePositionModel;
24417 govind 14
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
27690 amit.gupta 15
import com.spice.profitmandi.dao.repository.cs.*;
27270 tejbeer 16
import com.spice.profitmandi.dao.repository.dtr.DocumentRepository;
25570 tejbeer 17
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24417 govind 18
import com.spice.profitmandi.service.authentication.RoleManager;
19
import com.spice.profitmandi.service.user.RetailerService;
20
import com.spice.profitmandi.web.model.LoginDetails;
21
import com.spice.profitmandi.web.util.CookiesProcessor;
22
import com.spice.profitmandi.web.util.MVCResponseSender;
27690 amit.gupta 23
import org.apache.logging.log4j.LogManager;
24
import org.apache.logging.log4j.Logger;
25
import org.springframework.beans.factory.annotation.Autowired;
26
import org.springframework.mail.javamail.JavaMailSender;
27
import org.springframework.stereotype.Controller;
28
import org.springframework.transaction.annotation.Transactional;
29
import org.springframework.ui.Model;
30
import org.springframework.web.bind.annotation.*;
24417 govind 31
 
27690 amit.gupta 32
import javax.servlet.http.HttpServletRequest;
33
import javax.swing.*;
34
import java.time.LocalDateTime;
35
import java.util.*;
36
import java.util.stream.Collectors;
37
 
24417 govind 38
@Controller
39
@Transactional(rollbackFor = Throwable.class)
40
public class CsController {
41
 
31762 tejbeer 42
    private static final Logger LOGGER = LogManager.getLogger(CsController.class);
43
    private static final String ACTIVITY_SUBJECT = "Message related ticketId#%s";
44
    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";
45
    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";
46
    private static final String INTERNAL_REOPEN_MAIL = "Team, Pls note that the Ticket Id %s has been re-opened by %s , pls respond on priority";
47
    private static final String INTERNAL_REOPEN_ACTIVITY_MESSAGE = "Hi,My ticket is not resolved yet,so I have reopened it";
24699 govind 48
 
31762 tejbeer 49
    @Autowired
50
    JavaMailSender mailSender;
24620 govind 51
 
31762 tejbeer 52
    @Autowired
53
    private CsService csService;
24417 govind 54
 
31762 tejbeer 55
    @Autowired
56
    private CookiesProcessor cookiesProcessor;
24417 govind 57
 
31762 tejbeer 58
    @Autowired
59
    private TicketCategoryRepository ticketCategoryRepository;
24417 govind 60
 
31762 tejbeer 61
    @Autowired
62
    private TicketSubCategoryRepository ticketSubCategoryRepository;
24417 govind 63
 
31762 tejbeer 64
    @Autowired
65
    private RegionRepository regionRepository;
24417 govind 66
 
31762 tejbeer 67
    @Autowired
68
    private RetailerService retailerService;
24417 govind 69
 
31762 tejbeer 70
    @Autowired
71
    private MVCResponseSender mvcResponseSender;
24417 govind 72
 
31762 tejbeer 73
    @Autowired
74
    private AuthRepository authRepository;
24417 govind 75
 
31762 tejbeer 76
    @Autowired
77
    private PositionRepository positionRepository;
24417 govind 78
 
31762 tejbeer 79
    @Autowired
80
    private TicketRepository ticketRepository;
24417 govind 81
 
31762 tejbeer 82
    @Autowired
83
    private RoleManager roleManager;
24417 govind 84
 
31762 tejbeer 85
    @Autowired
86
    private ActivityRepository activityRepository;
24417 govind 87
 
31762 tejbeer 88
    @Autowired
89
    private ActivityAttachmentRepository activityAttachmentRepository;
27270 tejbeer 90
 
31762 tejbeer 91
    @Autowired
92
    private TicketAssignedRepository ticketAssignedRepository;
24569 govind 93
 
31762 tejbeer 94
    @Autowired
95
    private PartnerRegionRepository partnerRegionRepository;
24500 govind 96
 
31762 tejbeer 97
    @Autowired
32493 amit.gupta 98
    PartnerPositionRepository partnerPositionRepository;
25570 tejbeer 99
 
31762 tejbeer 100
    @Autowired
101
    FofoStoreRepository fofoStoreRepository;
25570 tejbeer 102
 
31762 tejbeer 103
    @Autowired
104
    DocumentRepository documentRepository;
27270 tejbeer 105
 
31762 tejbeer 106
    @GetMapping(value = "/cs/createCategory")
107
    public String getCreateCategory(HttpServletRequest request, Model model) {
108
        List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
109
        model.addAttribute("ticketCategories", ticketCategories);
110
        return "create-ticket-category";
111
    }
24417 govind 112
 
31762 tejbeer 113
    @PostMapping(value = "/cs/createCategory")
33081 ranu 114
    public String createCategory(HttpServletRequest request,
115
                                 @RequestParam(name = "name") String name,
116
                                 @RequestParam(name = "categoryType") int categoryType,
117
                                 @RequestParam(name = "description") String description,
118
                                 Model model) throws ProfitMandiBusinessException {
31762 tejbeer 119
        TicketCategory ticketCategory = ticketCategoryRepository.selectByName(name);
120
        if (ticketCategory != null) {
121
            throw new ProfitMandiBusinessException("name", name, "already exists!");
122
        }
33081 ranu 123
 
31762 tejbeer 124
        ticketCategory = new TicketCategory();
125
        ticketCategory.setName(name);
126
        ticketCategory.setDescription(description);
33081 ranu 127
 
128
        ticketCategory.setCategoryType(categoryType == 1);
31762 tejbeer 129
        ticketCategoryRepository.persist(ticketCategory);
130
        return "create-ticket-category";
131
    }
24417 govind 132
 
33081 ranu 133
 
31762 tejbeer 134
    @GetMapping(value = "/cs/createSubCategory")
135
    public String getCreateSubCategory(HttpServletRequest request, Model model) {
136
        List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
137
        model.addAttribute("ticketCategories", ticketCategories);
138
        return "create-ticket-sub-category";
139
    }
24417 govind 140
 
31762 tejbeer 141
    @GetMapping(value = "/cs/getSubCategoryByCategoryId")
142
    public String getSubCategoryByCategoryId(HttpServletRequest request, @RequestParam(name = "ticketCategoryId", defaultValue = "") int ticketCategoryId, Model model) {
143
        List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(ticketCategoryId);
144
        TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketCategoryId);
33081 ranu 145
        LOGGER.info("ticketSubCategories {}", ticketSubCategories);
146
        LOGGER.info("ticketCategory {}", ticketCategory);
31762 tejbeer 147
        model.addAttribute("ticketSubCategories", ticketSubCategories);
148
        model.addAttribute("ticketCategory", ticketCategory);
149
        return "ticket-sub-category";
150
    }
24417 govind 151
 
31762 tejbeer 152
    @PostMapping(value = "/cs/createSubCategory")
153
    public String createSubCategory(HttpServletRequest request, @RequestParam(name = "categoryId", defaultValue = "0") int categoryId, @RequestParam(name = "name") String name, @RequestParam(name = "description") String description, Model model) throws ProfitMandiBusinessException {
24417 govind 154
 
31762 tejbeer 155
        TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectTicketSubCategory(categoryId, name);
156
        if (ticketSubCategory != null) {
157
            throw new ProfitMandiBusinessException("name & categoryId", name + "  " + categoryId, "already exists!");
158
        }
24417 govind 159
 
31762 tejbeer 160
        ticketSubCategory = new TicketSubCategory();
161
        ticketSubCategory.setCategoryId(categoryId);
162
        ticketSubCategory.setName(name);
163
        ticketSubCategory.setDescription(description);
164
        ticketSubCategoryRepository.persist(ticketSubCategory);
165
        return "create-ticket-sub-category";
166
    }
24417 govind 167
 
31762 tejbeer 168
    @GetMapping(value = "/cs/createRegion")
169
    public String createRegion(HttpServletRequest request, Model model) {
170
        List<Region> regions = regionRepository.selectAll();
171
        model.addAttribute("regions", regions);
172
        return "create-region";
173
    }
24417 govind 174
 
31762 tejbeer 175
    @PostMapping(value = "/cs/createRegion")
176
    public String createRegion(HttpServletRequest request, @RequestParam(name = "name") String name, @RequestParam(name = "description") String description, Model model) throws Exception {
177
        Region region = regionRepository.selectByName(name);
178
        if (region != null) {
179
            throw new ProfitMandiBusinessException("name", name, "already exists!");
180
        }
181
        region = new Region();
182
        region.setName(name);
183
        region.setDescription(description);
184
        regionRepository.persist(region);
185
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
186
        return "response";
187
    }
24417 govind 188
 
31762 tejbeer 189
    @GetMapping(value = "/cs/getPartners")
33244 ranu 190
    public String getPartners(HttpServletRequest request, @RequestParam(name = "regionId", defaultValue = "0") int regionId, Model model) throws ProfitMandiBusinessException {
31762 tejbeer 191
        List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId()).collect(Collectors.toList());
192
        List<Integer> addedfofoIds = partnerRegionRepository.selectByRegionId(regionId).stream().map(x -> x.getFofoId()).collect(Collectors.toList());
30426 tejbeer 193
 
31762 tejbeer 194
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
195
        Map<Integer, CustomRetailer> fofoRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
196
        model.addAttribute("fofoRetailers", fofoRetailers);
197
        model.addAttribute("addedfofoIds", addedfofoIds);
198
        return "added-region-partners";
199
    }
24569 govind 200
 
31762 tejbeer 201
    @GetMapping(value = "/cs/getPartnersByRegion")
33244 ranu 202
    public String getPartnersByRegion(HttpServletRequest request, @RequestParam(name = "regionId", defaultValue = "0") int regionId, Model model) throws ProfitMandiBusinessException {
31762 tejbeer 203
        List<Integer> fofoIds = null;
204
        fofoIds = partnerRegionRepository.selectByRegionId(regionId).stream().map(x -> x.getFofoId()).collect(Collectors.toList());
25570 tejbeer 205
 
31762 tejbeer 206
        if (fofoIds.contains(0)) {
207
            fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> x.isActive()).collect(Collectors.toList()).stream().map(x -> x.getId()).collect(Collectors.toList());
25570 tejbeer 208
 
31762 tejbeer 209
        }
210
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
25570 tejbeer 211
 
31762 tejbeer 212
        Map<Integer, CustomRetailer> fofoRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
213
        model.addAttribute("fofoRetailers", fofoRetailers);
214
        return "added-subregion-partners";
215
    }
25570 tejbeer 216
 
31762 tejbeer 217
    @GetMapping(value = "/cs/createPartnerRegion")
218
    public String createPartnerRegion(HttpServletRequest request, Model model) {
219
        List<Region> regions = regionRepository.selectAll();
220
        model.addAttribute("regions", regions);
221
        return "create-partner-region";
222
    }
24417 govind 223
 
31762 tejbeer 224
    @PostMapping(value = "/cs/createPartnerRegion")
225
    public String createPartnerRegion(HttpServletRequest request, @RequestParam(name = "regionId") int regionId, @RequestBody List<Integer> selectedFofoIds, Model model) throws Exception {
226
        partnerRegionRepository.delete(regionId);
227
        LOGGER.info("successfully removed");
228
        LOGGER.info(selectedFofoIds.size());
229
        csService.addPartnerToRegion(regionId, selectedFofoIds);
230
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
231
        return "response";
232
    }
24417 govind 233
 
31762 tejbeer 234
    @GetMapping(value = "/cs/getPosition")
33244 ranu 235
    public String getPosition(HttpServletRequest request, @RequestParam int positionId, Model model) throws ProfitMandiBusinessException {
27410 tejbeer 236
 
31762 tejbeer 237
        Position position = positionRepository.selectById(positionId);
27410 tejbeer 238
 
31762 tejbeer 239
        List<CustomRetailer> positionIdCustomRetailer = csService.getPositionCustomRetailerMap(Arrays.asList(position)).get(position.getId());
27410 tejbeer 240
 
31762 tejbeer 241
        Map<Integer, CustomRetailer> regionRetailerMap = csService.getRegionPartners(Arrays.asList(position)).get(position.getRegionId()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
27410 tejbeer 242
 
31762 tejbeer 243
        model.addAttribute("position", position);
244
        model.addAttribute("regionRetailerMap", regionRetailerMap);
245
        model.addAttribute("positionIdCustomRetailer", positionIdCustomRetailer);
27410 tejbeer 246
 
31762 tejbeer 247
        return "position-partner";
248
    }
27410 tejbeer 249
 
31762 tejbeer 250
    @GetMapping(value = "/cs/createPosition")
251
    public String createPosition(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) {
252
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
253
        List<TicketCategory> ticketCategories = ticketCategoryRepository.selectAll();
254
        List<Region> regions = regionRepository.selectAll();
255
        model.addAttribute("escalationTypes", EscalationType.values());
256
        model.addAttribute("authUsers", authUsers);
257
        model.addAttribute("ticketCategories", ticketCategories);
258
        model.addAttribute("regions", regions);
24500 govind 259
 
31762 tejbeer 260
        List<Position> positions = positionRepository.selectAllPosition();
261
        LOGGER.info("positions" + positions);
30426 tejbeer 262
 
31762 tejbeer 263
        Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService.getAuthUserIdAndAuthUserMapUsingPositions(positions);
264
        Map<Integer, TicketCategory> categoryIdAndCategoryMap = csService.getCategoryIdAndCategoryUsingPositions(positions);
265
        Map<Integer, Region> regionIdAndRegionMap = csService.getRegionIdAndRegionMap(positions);
25570 tejbeer 266
 
27410 tejbeer 267
//	    Map<Integer, List<CustomRetailer>> positionIdAndpartnerRegionMap = csService
268
//			.getpositionIdAndpartnerRegionMap(positions);
25570 tejbeer 269
 
27410 tejbeer 270
//	     Map<Integer, List<CustomRetailer>> addedpositionIdAndCustomRetailerMap = csService
271
//				.getPositionCustomRetailerMap(positions);
272
//		LOGGER.info("fofoIdAndCustomRetailerMap" + addedpositionIdAndCustomRetailerMap);
24500 govind 273
 
31762 tejbeer 274
        model.addAttribute("start", offset + 1);
30426 tejbeer 275
 
31762 tejbeer 276
        model.addAttribute("positions", positions);
277
        model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
278
        model.addAttribute("categoryIdAndCategoryMap", categoryIdAndCategoryMap);
279
        model.addAttribute("regionIdAndRegionMap", regionIdAndRegionMap);
280
        // model.addAttribute("positionIdAndCustomRetailerMap",
281
        // addedpositionIdAndCustomRetailerMap);
282
        // model.addAttribute("positionIdAndpartnerRegionMap",
27410 tejbeer 283
// positionIdAndpartnerRegionMap);
25570 tejbeer 284
 
31762 tejbeer 285
        return "create-position";
286
    }
24500 govind 287
 
31762 tejbeer 288
    @GetMapping(value = "/cs/position-paginated")
289
    public String positionPaginated(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) {
24500 govind 290
 
31762 tejbeer 291
        List<Position> positions = positionRepository.selectAll(offset, limit);
292
        Map<Integer, AuthUser> authUserIdAndAuthUserMap = csService.getAuthUserIdAndAuthUserMapUsingPositions(positions);
293
        Map<Integer, TicketCategory> categoryIdAndCategoryMap = csService.getCategoryIdAndCategoryUsingPositions(positions);
294
        Map<Integer, Region> regionIdAndRegionMap = csService.getRegionIdAndRegionMap(positions);
295
        /*
296
         * Map<Integer, List<CustomRetailer>> positionIdAndpartnerRegionMap = csService
297
         * .getpositionIdAndpartnerRegionMap(positions);
298
         * 
299
         * Map<Integer, List<CustomRetailer>> addedpositionIdAndCustomRetailerMap =
300
         * csService .getPositionCustomRetailerMap(positions);
301
         */
25570 tejbeer 302
 
31762 tejbeer 303
        model.addAttribute("positions", positions);
304
        model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
305
        model.addAttribute("categoryIdAndCategoryMap", categoryIdAndCategoryMap);
306
        model.addAttribute("regionIdAndRegionMap", regionIdAndRegionMap);
307
        // model.addAttribute("positionIdAndCustomRetailerMap",
308
        // addedpositionIdAndCustomRetailerMap);
309
        // model.addAttribute("positionIdAndpartnerRegionMap",
310
        // positionIdAndpartnerRegionMap);
25570 tejbeer 311
 
31762 tejbeer 312
        return "position-paginated";
313
    }
24417 govind 314
 
31762 tejbeer 315
    @PostMapping(value = "/cs/createPosition")
316
    public String createPosition(HttpServletRequest request, @RequestBody CreatePositionModel createPositionModel, Model model) throws Exception {
24417 govind 317
 
25570 tejbeer 318
 
31762 tejbeer 319
        LOGGER.info("partnerPosition" + createPositionModel.isTicketAssigned());
320
        Position position = positionRepository.selectPosition(createPositionModel.getAuthUserId(), createPositionModel.getCategoryId(), createPositionModel.getRegionId(), createPositionModel.getEscalationType());
321
        if (position == null) {
322
            position = new Position();
323
            position.setAuthUserId(createPositionModel.getAuthUserId());
324
            position.setCategoryId(createPositionModel.getCategoryId());
325
            position.setEscalationType(createPositionModel.getEscalationType());
326
            position.setRegionId(createPositionModel.getRegionId());
327
            position.setCreateTimestamp(LocalDateTime.now());
328
            position.setTicketAssignee(createPositionModel.isTicketAssigned());
329
            positionRepository.persist(position);
25570 tejbeer 330
 
31762 tejbeer 331
            for (int fofoId : createPositionModel.getFofoIds()) {
25570 tejbeer 332
 
31762 tejbeer 333
                PartnerPosition partnerPosition = new PartnerPosition();
334
                partnerPosition.setFofoId(fofoId);
335
                partnerPosition.setRegionId(createPositionModel.getRegionId());
336
                partnerPosition.setPositionId(position.getId());
32493 amit.gupta 337
                partnerPositionRepository.persist(partnerPosition);
31762 tejbeer 338
                LOGGER.info("partnerPosition" + partnerPosition);
339
            }
24417 govind 340
 
31762 tejbeer 341
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
342
        } else {
343
            throw new ProfitMandiBusinessException("Position", createPositionModel.getAuthUserId(), "already exists!");
344
        }
345
        return "response";
346
    }
25570 tejbeer 347
 
31762 tejbeer 348
    @PostMapping(value = "/cs/updatePartnerPosition")
349
    public String updatePartnerPosition(HttpServletRequest request, @RequestParam(name = "regionId") int regionId, @RequestBody List<Integer> selectedFofoIds, @RequestParam(name = "positionId") int positionId, Model model) throws Exception {
25570 tejbeer 350
 
32493 amit.gupta 351
        partnerPositionRepository.delete(positionId);
31762 tejbeer 352
        for (int fofoId : selectedFofoIds) {
353
            PartnerPosition partnerPosition = new PartnerPosition();
354
            partnerPosition.setFofoId(fofoId);
355
            partnerPosition.setRegionId(regionId);
356
            partnerPosition.setPositionId(positionId);
32493 amit.gupta 357
            partnerPositionRepository.persist(partnerPosition);
31762 tejbeer 358
        }
25570 tejbeer 359
 
31762 tejbeer 360
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
25570 tejbeer 361
 
31762 tejbeer 362
        return "response";
363
    }
24417 govind 364
 
31762 tejbeer 365
    @GetMapping(value = "/cs/createTicket")
366
    public String createTicket(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
367
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
368
        List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
369
        model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
370
        model.addAttribute("ticketCategories", ticketCategories);
371
        return "create-ticket";
372
    }
24417 govind 373
 
31762 tejbeer 374
    @GetMapping(value = "/cs/getSubCategoriesByCategoryId")
375
    public String getSubCategoriesByCategoryId(HttpServletRequest request, @RequestParam(name = "categoryId", defaultValue = "0") int categoryId, Model model) {
31830 amit.gupta 376
        List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAllVisible(categoryId);
31762 tejbeer 377
        LOGGER.info(ticketSubCategories);
378
        model.addAttribute("ticketSubCategories", ticketSubCategories);
379
        return "ticket-sub-categories";
380
    }
24417 govind 381
 
24791 govind 382
 
31762 tejbeer 383
    @GetMapping(value = "/cs/getEscalationTypeByCategoryId")
384
    public String getEscalationTypeByCategoryId(HttpServletRequest request, @RequestParam(name = "categoryId", defaultValue = "0") int categoryId, @RequestParam(name = "authId", defaultValue = "0") int authId, Model model) {
385
        List<Position> positions = positionRepository.selectPositionbyCategoryIdAndAuthId(categoryId, authId);
386
        List<EscalationType> escalationTypes = new ArrayList<>();
24791 govind 387
 
31762 tejbeer 388
        if (!positions.isEmpty()) {
389
            escalationTypes = positions.stream().map(x -> x.getEscalationType()).distinct().collect(Collectors.toList());
390
        }
24620 govind 391
 
31762 tejbeer 392
        LOGGER.info("escalationTypes {}", escalationTypes);
24500 govind 393
 
31762 tejbeer 394
        model.addAttribute("escalationTypes", escalationTypes);
395
        return "ticket-escalationtype";
396
    }
24500 govind 397
 
24824 govind 398
 
31762 tejbeer 399
    @GetMapping(value = "/cs/getCategoriesByAuthId")
400
    public String getCategoriesByAuthId(HttpServletRequest request, @RequestParam(name = "authId", defaultValue = "0") int authId, Model model) {
24824 govind 401
 
24787 govind 402
 
31762 tejbeer 403
        List<Position> positions = positionRepository.selectPositionByAuthId(authId);
24791 govind 404
 
31762 tejbeer 405
        LOGGER.info("positions {}", positions);
24417 govind 406
 
31762 tejbeer 407
        List<TicketCategory> ticketCategories = new ArrayList<TicketCategory>();
24417 govind 408
 
31762 tejbeer 409
        if (!positions.isEmpty()) {
24417 govind 410
 
31762 tejbeer 411
            List<Integer> categoryIds = positions.stream().map(x -> x.getCategoryId()).collect(Collectors.toList());
412
            ticketCategories = ticketCategoryRepository.selectAll(categoryIds);
413
        }
414
        LOGGER.info("ticketCategories {}", ticketCategories);
415
        model.addAttribute("ticketCategories", ticketCategories);
416
        return "ticket-categories";
417
    }
27270 tejbeer 418
 
31762 tejbeer 419
    @PostMapping(value = "/cs/createTicket")
420
    public String createTicket(HttpServletRequest request, @RequestParam(name = "categoryId") int categoryId, @RequestParam(name = "subCategoryId") int subCategoryId, @RequestParam(name = "message") String message, Model model) throws Exception {
421
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
422
        List<Ticket> tickets = ticketRepository.selectAllResolvedMarkedTicketByCreator(loginDetails.getFofoId());
423
        if (tickets.size() > 3 || tickets.size() == 3) {
424
            model.addAttribute("response1", mvcResponseSender.createResponseString(false));
425
        } else {
426
            csService.createTicket(loginDetails.getFofoId(), categoryId, subCategoryId, message);
427
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
428
        }
429
        return "response";
430
    }
27270 tejbeer 431
 
31762 tejbeer 432
    @GetMapping(value = "/cs/myticket")
433
    public String getTicket(HttpServletRequest request, @RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder, @RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus, @RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType, @RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm, Model model) throws ProfitMandiBusinessException {
434
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
435
        List<Ticket> tickets = null;
436
        List<TicketAssigned> ticketAssigneds = null;
437
        long size = 0;
438
        Map<Integer, AuthUser> authUserIdAndAuthUserMap = null;
35569 amit 439
        boolean isAdmin = roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()));
440
        AuthUser currentAuthUser = isAdmin ? authRepository.selectByEmailOrMobile(loginDetails.getEmailId()) : null;
441
 
442
        if (isAdmin) {
443
            int authUserId = currentAuthUser.getId();
31762 tejbeer 444
            if (ticketSearchType == null) {
445
                if (ticketStatus.equals(TicketStatus.RESOLVED)) {
35569 amit 446
                    tickets = ticketRepository.selectAllByAssignee(authUserId, Optional.empty(), sortOrder, null, searchTerm);
447
                    size = ticketRepository.selectAllCountByAssignee(authUserId, Optional.empty(), null, searchTerm);
31762 tejbeer 448
                } else {
35569 amit 449
                    tickets = ticketRepository.selectAllByAssignee(authUserId, Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), sortOrder, null, searchTerm);
450
                    size = ticketRepository.selectAllCountByAssignee(authUserId, Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm);
31762 tejbeer 451
                }
27270 tejbeer 452
 
31762 tejbeer 453
            } else {
27270 tejbeer 454
 
31762 tejbeer 455
                if (ticketStatus.equals(TicketStatus.RESOLVED)) {
35569 amit 456
                    tickets = ticketRepository.selectAllByAssignee(authUserId, Optional.empty(), sortOrder, ticketSearchType, searchTerm);
457
                    size = ticketRepository.selectAllCountByAssignee(authUserId, Optional.empty(), ticketSearchType, searchTerm);
31762 tejbeer 458
                } else {
35569 amit 459
                    tickets = ticketRepository.selectAllByAssignee(authUserId, Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), sortOrder, ticketSearchType, searchTerm);
460
                    size = ticketRepository.selectAllCountByAssignee(authUserId, Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm);
31762 tejbeer 461
                }
462
            }
463
            // LOGGER.info(size + "size");
464
            if (tickets.size() > 0) {
465
                ticketAssigneds = ticketAssignedRepository.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);
469
            }
24500 govind 470
 
31762 tejbeer 471
        } else {
472
            tickets = ticketRepository.selectAllByCreator(loginDetails.getFofoId(), Optional.of(TicketStatus.OPENED.equals(ticketStatus)), sortOrder);
473
            size = ticketRepository.selectAllCountByCreator(loginDetails.getFofoId(), Optional.of(TicketStatus.OPENED.equals(ticketStatus)));
474
        }
475
        authUserIdAndAuthUserMap = csService.getTicketIdAndAuthUserMapUsingTickets(tickets);
24620 govind 476
 
31762 tejbeer 477
        model.addAttribute("size", size);
35569 amit 478
        model.addAttribute("roleType", isAdmin);
479
        // Check if user is in CRM category (only CRM can send external communications)
480
        boolean isCrmUser = isAdmin && positionRepository.hasCategory(currentAuthUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_CRM);
481
        model.addAttribute("isCrmUser", isCrmUser);
24500 govind 482
 
31762 tejbeer 483
        List<Integer> subCategoryIds = tickets.stream().map(x -> x.getSubCategoryId()).collect(Collectors.toList());
484
        Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService.getSubCategoryIdAndSubCategoryMap(subCategoryIds);
24747 govind 485
 
31762 tejbeer 486
        Map<Integer, TicketCategory> subCategoryIdAndCategoryMap = csService.getSubCategoryIdAndCategoryMap(subCategoryIds);
27318 amit.gupta 487
 
31762 tejbeer 488
        List<Integer> ticketIds = tickets.stream().map(x -> x.getId()).collect(Collectors.toList());
24500 govind 489
 
35569 amit 490
        Map<Integer, List<Activity>> activityMap = new HashMap<>();
33864 ranu 491
        Map<Integer, List<Activity>> activityMapWithActivityId = new HashMap<>();
35569 amit 492
        Map<Integer, AuthUser> authUserMap = new HashMap<>();
24500 govind 493
 
31762 tejbeer 494
        if (!ticketIds.isEmpty()) {
35569 amit 495
            // Fetch activities once and group by both ticketId and activityId
496
            List<Activity> allActivities = activityRepository.selectAll(ticketIds);
497
            activityMap = allActivities.stream().collect(Collectors.groupingBy(Activity::getTicketId));
498
            activityMapWithActivityId = allActivities.stream().collect(Collectors.groupingBy(Activity::getId));
24787 govind 499
 
35569 amit 500
            // Only fetch AuthUsers who created activities (instead of all users)
501
            Set<Integer> activityCreatorIds = allActivities.stream()
502
                    .map(Activity::getCreatedBy)
503
                    .filter(id -> id > 0)
504
                    .collect(Collectors.toSet());
505
            if (!activityCreatorIds.isEmpty()) {
506
                authUserMap = authRepository.selectByIds(new ArrayList<>(activityCreatorIds))
507
                        .stream().collect(Collectors.toMap(AuthUser::getId, x -> x));
508
            }
31762 tejbeer 509
        }
24787 govind 510
 
31762 tejbeer 511
        model.addAttribute("tickets", tickets);
512
        model.addAttribute("resolved", ActivityType.RESOLVED);
513
        model.addAttribute("resolved-accepted", ActivityType.RESOLVED_ACCEPTED);
514
        model.addAttribute("resolved-rejected", ActivityType.RESOLVED_REJECTED);
515
        model.addAttribute("authUserIdAndAuthUserMap", authUserIdAndAuthUserMap);
516
        model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
27318 amit.gupta 517
 
31762 tejbeer 518
        model.addAttribute("subCategoryIdAndCategoryMap", subCategoryIdAndCategoryMap);
519
        model.addAttribute("activityMap", activityMap);
33864 ranu 520
        model.addAttribute("authUserMap", authUserMap);
521
        model.addAttribute("activityMapWithActivityId", activityMapWithActivityId);
24500 govind 522
 
31762 tejbeer 523
        model.addAttribute("ticketStatusValues", TicketStatus.values());
524
        model.addAttribute("orderByValues", SortOrder.values());
525
        model.addAttribute("selectedticketStatus", ticketStatus);
526
        model.addAttribute("selectedorderby", sortOrder);
527
        model.addAttribute("ticketSearchTypes", TicketSearchType.values());
528
        model.addAttribute("ticketSearchType", ticketSearchType);
529
        model.addAttribute("searchTerm", searchTerm);
530
        return "ticket";
531
    }
24500 govind 532
 
27124 amit.gupta 533
 
31762 tejbeer 534
    @GetMapping(value = "/cs/getActivities")
535
    public String getActivity(HttpServletRequest request, @RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) throws Exception {
536
        List<Activity> allactivities = activityRepository.selectAll(ticketId);
537
        List<List<ActivityAttachment>> activityAttachments = allactivities.stream().map(x -> x.getActivityAttachment()).collect(Collectors.toList());
538
        for (List<ActivityAttachment> aA : activityAttachments) {
539
            // List<ActivityAttachment> documentId = aA.stream().map(x ->
540
            // x).collect(Collectors.toList());
541
            for (ActivityAttachment attachment : aA) {
542
                Document document = documentRepository.selectById(attachment.getDocumentId());
543
                attachment.setDocumentName(document.getDisplayName());
544
                activityAttachmentRepository.persist(attachment);
545
            }
546
        }
547
        List<Activity> activities = null;
548
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
549
        if (roleManager.isAdmin(loginDetails.getRoleIds())) {
550
            Set<Integer> authUserIds = allactivities.stream().map(x -> x.getCreatedBy()).collect(Collectors.toSet());
35395 amit 551
            List<AuthUser> users = authRepository.selectByIds(new ArrayList<>(authUserIds));
31762 tejbeer 552
            Map<Integer, String> authUserNameMap = users.stream().collect(Collectors.toMap(AuthUser::getId, x -> x.getFirstName() + " " + x.getLastName()));
553
            allactivities.stream().forEach(x -> x.setName(authUserNameMap.get(x.getCreatedBy())));
554
            activities = allactivities;
555
        } else {
556
            activities = allactivities.stream().filter(x -> ActivityType.PARTNER_ACTIVITIES.contains(x.getType())).collect(Collectors.toList());
557
        }
558
        if (activities == null) {
559
            throw new ProfitMandiBusinessException("Activity", ticketId, "No Activity Found");
560
        }
561
        model.addAttribute("response1", mvcResponseSender.createResponseString(activities));
562
        return "response";
24500 govind 563
 
31762 tejbeer 564
    }
24620 govind 565
 
31762 tejbeer 566
    @PostMapping(value = "/cs/createActivity")
567
    public String createActivity(HttpServletRequest request, @RequestParam(name = "ticketId", defaultValue = "0") int ticketId, @RequestParam(name = "assigneeId", defaultValue = "0") int assigneeId, @RequestParam(name = "internal", defaultValue = "true") boolean internal, @RequestParam(name = "message", defaultValue = "") String message, @RequestBody List<Integer> documentIds,
24620 govind 568
 
31762 tejbeer 569
                                 Model model) throws Exception {
24620 govind 570
 
31762 tejbeer 571
        LOGGER.info("documentIds" + documentIds);
572
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
573
        Ticket ticket = ticketRepository.selectById(ticketId);
574
        List<TicketAssigned> ticketAssignedList = ticketAssignedRepository.selectByTicketIds(Arrays.asList(ticketId));
575
        List<Integer> authUserIds = ticketAssignedList.stream().map(x -> x.getAssineeId()).collect(Collectors.toList());
576
        authUserIds.add(ticketAssignedList.get(ticketAssignedList.size() - 1).getManagerId());
35395 amit 577
        Map<Integer, AuthUser> authUsersMap = authRepository.selectByIds(authUserIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
31762 tejbeer 578
        if (ticket.getCloseTimestamp() == null) {
579
            Activity activity = new Activity();
580
            activity.setCreatedBy(0);
581
            activity.setCreateTimestamp(LocalDateTime.now());
582
            String subject = null;
583
            String mailMessage = null;
584
            activity.setMessage(message);
585
            if (!roleManager.isAdmin(new HashSet<>(loginDetails.getRoleIds()))) {
586
                CustomRetailer customRetailer = retailerService.getFofoRetailers(true).get(loginDetails.getFofoId());
587
                activity.setType(ActivityType.COMMUNICATION_IN);
588
                subject = String.format("Ticket Update #%s by franchisee %s", ticket.getId(), customRetailer.getBusinessName() + "(" + customRetailer.getCode() + ")");
589
                mailMessage = String.format("Franchisee message - %s", message);
590
            } else {
591
                AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
592
                activity.setCreatedBy(authUser.getId());
593
                authUsersMap.remove(authUser.getId());
594
                subject = String.format("Ticket Update #%s by %s", ticket.getId(), authUser.getName());
595
                mailMessage = String.format("%s's message - %s", authUser.getFirstName(), message);
35569 amit 596
                // Only CRM users can send external communications
597
                boolean isCrmUser = positionRepository.hasCategory(authUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_CRM);
598
                if (internal || !isCrmUser) {
31762 tejbeer 599
                    activity.setType(ActivityType.COMMUNICATION_INTERNAL);
600
                } else {
601
                    String updatedBy = "SD Team";
31854 amit.gupta 602
                    CustomRetailer customRetailer = retailerService.getFofoRetailers(false).get(ticket.getFofoId());
31762 tejbeer 603
                    subject = String.format("Ticket Update #%s by %s", ticket.getId(), updatedBy);
604
                    String partnerMessage = String.format("%s's message - %s", updatedBy, message);
605
                    this.activityRelatedMail(customRetailer.getEmail(), null, "subject", partnerMessage);
606
                    activity.setType(ActivityType.COMMUNICATION_OUT);
607
                }
608
            }
609
            activityRepository.persist(activity);
610
 
611
            for (Integer documentId : documentIds) {
612
                ActivityAttachment activityAttachment = new ActivityAttachment();
613
                activityAttachment.setActivityId(activity.getId());
614
                activityAttachment.setDocumentId(documentId);
615
                activityAttachmentRepository.persist(activityAttachment);
616
            }
617
 
618
            csService.addActivity(ticket, activity);
619
            AuthUser authUser = authUsersMap.remove(authUserIds.get(0));
620
            if (authUser == null) {
621
                authUser = authUsersMap.remove(authUserIds.get(1));
622
            }
623
            model.addAttribute("response1", mvcResponseSender.createResponseString(authUser));
624
            String[] cc = authUsersMap.entrySet().stream().map(x -> x.getValue().getEmailId()).toArray(String[]::new);
625
            this.activityRelatedMail(authUser.getEmailId(), cc, subject, mailMessage);
626
        } else {
627
            throw new ProfitMandiBusinessException("Ticket", ticket.getId(), "Already closed ticket");
628
        }
629
        return "response";
630
    }
631
 
632
    private void activityRelatedMail(String to, String[] cc, String subject, String message) 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
 
640
    @PostMapping(value = "/cs/closeTicket")
641
    public String closeTicket(HttpServletRequest request, @RequestParam(name = "ticketId", defaultValue = "0") int ticketId, @RequestParam(name = "happyCode") String happyCode, Model model) throws Exception {
642
        Ticket ticket = ticketRepository.selectById(ticketId);
643
        if (ticket.getHappyCode().equals(happyCode)) {
644
            ticket.setCloseTimestamp(LocalDateTime.now());
645
            ticketRepository.persist(ticket);
646
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
647
        } else {
648
            throw new ProfitMandiBusinessException("Ticket", ticketId, "Happy Code can't match");
649
        }
650
        return "response";
651
    }
652
 
34913 ranu 653
    @GetMapping(value = "/cs/myPartyTicketTicket")
654
    public String getMyPartyTicketTicket(HttpServletRequest request, @RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder, @RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus, @RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType, @RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm, Model model) throws ProfitMandiBusinessException {
655
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
656
        long size = 0;
657
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
658
        List<Ticket> tickets = new ArrayList<>();
659
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
660
        Set<Integer> fofoIds = storeGuyMap.get(authUser.getEmailId());
661
 
662
        Map<Integer, List<AuthUser>> authUserListMap = null;
663
        if (fofoIds != null && !fofoIds.isEmpty()) {
664
            for (Integer fofoId : fofoIds) {
665
                List<Ticket> partnerWiseTickets = ticketRepository.selectAllOpenTicketByRetailer(fofoId);
666
 
667
                if (partnerWiseTickets != null && !partnerWiseTickets.isEmpty()) {
668
                    // Filter tickets where last_activity is not "RESOLVED"
669
                    List<Ticket> filteredTickets = partnerWiseTickets.stream()
670
                            .filter(ticket -> ticket.getLastActivity() == null ||
671
                                    ticket.getLastActivity() != ActivityType.RESOLVED)
672
                            .collect(Collectors.toList());
673
 
674
                    tickets.addAll(filteredTickets);
675
                }
676
            }
677
        }
678
 
679
        authUserListMap = csService.getAssignedAuthList(tickets);
680
 
681
 
682
        if (tickets.size() > 0) {
683
            Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
684
            model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
685
        }
686
 
687
        model.addAttribute("size", tickets.size());
688
        model.addAttribute("tickets", tickets);
689
 
690
        List<Integer> subCategoryIds = tickets.stream().map(x -> x.getSubCategoryId()).collect(Collectors.toList());
691
        Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService.getSubCategoryIdAndSubCategoryMap(subCategoryIds);
692
 
693
        Map<Integer, TicketCategory> subCategoryIdAndCategoryMap = csService.getSubCategoryIdAndCategoryMap(subCategoryIds);
694
 
695
        List<Integer> ticketIds = tickets.stream().map(x -> x.getId()).collect(Collectors.toList());
696
        Map<Integer, List<Activity>> activityMap = new HashMap<>();
697
        Map<Integer, List<Activity>> activityMapWithActivityId = new HashMap<>();
35569 amit 698
        Map<Integer, AuthUser> authUserMap = new HashMap<>();
34913 ranu 699
 
700
        if (!ticketIds.isEmpty()) {
35569 amit 701
            // Fetch activities once and group by both ticketId and activityId
702
            List<Activity> allActivities = activityRepository.selectAll(ticketIds);
703
            activityMap = allActivities.stream().collect(Collectors.groupingBy(Activity::getTicketId));
704
            activityMapWithActivityId = allActivities.stream().collect(Collectors.groupingBy(Activity::getId));
34913 ranu 705
 
35569 amit 706
            // Only fetch AuthUsers who created activities (instead of all users)
707
            Set<Integer> activityCreatorIds = allActivities.stream()
708
                    .map(Activity::getCreatedBy)
709
                    .filter(id -> id > 0)
710
                    .collect(Collectors.toSet());
711
            if (!activityCreatorIds.isEmpty()) {
712
                authUserMap = authRepository.selectByIds(new ArrayList<>(activityCreatorIds))
713
                        .stream().collect(Collectors.toMap(AuthUser::getId, x -> x));
714
            }
34913 ranu 715
        }
716
 
717
        model.addAttribute("ticketStatusValues", TicketStatus.values());
718
        model.addAttribute("orderByValues", SortOrder.values());
719
        model.addAttribute("selectedticketStatus", ticketStatus);
720
        model.addAttribute("selectedorderby", sortOrder);
721
        model.addAttribute("tickets", tickets);
722
        model.addAttribute("ticketSearchTypes", TicketSearchType.values());
723
        model.addAttribute("ticketSearchType", ticketSearchType);
724
        model.addAttribute("searchTerm", searchTerm);
725
        model.addAttribute("authUserListMap", authUserListMap);
726
        model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
727
 
728
        model.addAttribute("subCategoryIdAndCategoryMap", subCategoryIdAndCategoryMap);
729
 
730
        model.addAttribute("activityMap", activityMap);
731
        model.addAttribute("authUserMap", authUserMap);
732
        model.addAttribute("activityMapWithActivityId", activityMapWithActivityId);
35569 amit 733
        // Check if user is in CRM category (only CRM can send external communications)
734
        boolean isCrmUser = positionRepository.hasCategory(authUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_CRM);
735
        model.addAttribute("isCrmUser", isCrmUser);
34913 ranu 736
 
737
        return "my-partner-tickets";
738
    }
739
 
31762 tejbeer 740
    @GetMapping(value = "/cs/managerTicket")
741
    public String getManagerTickets(HttpServletRequest request, @RequestParam(name = "orderby", defaultValue = "DESCENDING") SortOrder sortOrder, @RequestParam(name = "ticketStatus", defaultValue = "OPENED") TicketStatus ticketStatus, @RequestParam(name = "ticketSearchType", defaultValue = "") TicketSearchType ticketSearchType, @RequestParam(name = "searchTerm", defaultValue = "0") int searchTerm, Model model) throws ProfitMandiBusinessException {
742
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
743
        long size = 0;
744
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
745
        List<Ticket> tickets = null;
746
        Map<Integer, List<AuthUser>> authUserListMap = null;
747
        if (ticketSearchType == null) {
748
            if (ticketStatus.equals(TicketStatus.RESOLVED)) {
749
                tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(), null, searchTerm);
750
                size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(), null, 0);
751
            } else {
752
                tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, searchTerm);
753
                size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), null, 0);
754
            }
755
        } else {
756
            if (ticketStatus.equals(TicketStatus.RESOLVED)) {
757
                tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.empty(), ticketSearchType, searchTerm);
758
                size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.empty(), ticketSearchType, searchTerm);
759
            } else {
760
                tickets = ticketRepository.selectAllManagerTicket(authUser.getId(), sortOrder, Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm);
761
                size = ticketRepository.selectAllCountByManagerTicket(authUser.getId(), Optional.of(TicketStatus.CLOSED.equals(ticketStatus)), ticketSearchType, searchTerm);
762
            }
763
 
764
        }
765
        authUserListMap = csService.getAssignedAuthList(tickets);
766
 
767
        if (tickets.size() > 0) {
768
            Map<Integer, CustomRetailer> fofoIdsAndCustomRetailer = csService.getPartnerByFofoIds(tickets);
769
            model.addAttribute("fofoIdsAndCustomRetailer", fofoIdsAndCustomRetailer);
770
        }
771
 
772
        model.addAttribute("size", size);
773
        model.addAttribute("tickets", tickets);
774
 
775
        List<Integer> subCategoryIds = tickets.stream().map(x -> x.getSubCategoryId()).collect(Collectors.toList());
776
        Map<Integer, TicketSubCategory> subCategoryIdAndSubCategoryMap = csService.getSubCategoryIdAndSubCategoryMap(subCategoryIds);
777
 
778
        Map<Integer, TicketCategory> subCategoryIdAndCategoryMap = csService.getSubCategoryIdAndCategoryMap(subCategoryIds);
779
 
780
        List<Integer> ticketIds = tickets.stream().map(x -> x.getId()).collect(Collectors.toList());
781
        Map<Integer, List<Activity>> activityMap = new HashMap<>();
33778 ranu 782
        Map<Integer, List<Activity>> activityMapWithActivityId = new HashMap<>();
31762 tejbeer 783
 
784
        if (!ticketIds.isEmpty()) {
785
            activityMap = activityRepository.selectAll(ticketIds).stream().collect(Collectors.groupingBy(x -> x.getTicketId()));
33778 ranu 786
            activityMapWithActivityId = activityRepository.selectAll(ticketIds).stream().collect(Collectors.groupingBy(x -> x.getId()));
31762 tejbeer 787
 
788
        }
33778 ranu 789
 
790
        List<AuthUser> authUsersList = authRepository.selectAll();
791
        Map<Integer, AuthUser> authUserMap = authUsersList.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
792
 
31762 tejbeer 793
        model.addAttribute("ticketStatusValues", TicketStatus.values());
794
        model.addAttribute("orderByValues", SortOrder.values());
795
        model.addAttribute("selectedticketStatus", ticketStatus);
796
        model.addAttribute("selectedorderby", sortOrder);
797
        model.addAttribute("tickets", tickets);
798
        model.addAttribute("ticketSearchTypes", TicketSearchType.values());
799
        model.addAttribute("ticketSearchType", ticketSearchType);
800
        model.addAttribute("searchTerm", searchTerm);
801
        model.addAttribute("authUserListMap", authUserListMap);
802
        model.addAttribute("subCategoryIdAndSubCategoryMap", subCategoryIdAndSubCategoryMap);
803
 
804
        model.addAttribute("subCategoryIdAndCategoryMap", subCategoryIdAndCategoryMap);
805
 
806
        model.addAttribute("activityMap", activityMap);
33778 ranu 807
        model.addAttribute("authUserMap", authUserMap);
808
        model.addAttribute("activityMapWithActivityId", activityMapWithActivityId);
31762 tejbeer 809
 
810
        return "managerTicket";
811
    }
812
 
813
 
814
    @GetMapping(value = "/cs/edit-ticket")
815
    public String getEditTicket(HttpServletRequest request, @RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) {
816
        Ticket ticket = ticketRepository.selectById(ticketId);
817
        List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
818
        TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
819
        List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(ticketSubCategory.getCategoryId());
820
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
821
        model.addAttribute("ticket", ticket);
822
        model.addAttribute("ticketCategories", ticketCategories);
823
        model.addAttribute("ticketSubCategories", ticketSubCategories);
824
        model.addAttribute("ticketSubCategory", ticketSubCategory);
825
        model.addAttribute("authUsers", authUsers);
826
        return "edit-ticket-modal";
827
    }
828
 
34913 ranu 829
    @GetMapping(value = "/cs/edit-partner-ticket")
830
    public String getEditPartnerTicket(HttpServletRequest request, @RequestParam(name = "ticketId", defaultValue = "0") int ticketId, Model model) {
831
        Ticket ticket = ticketRepository.selectById(ticketId);
832
        List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
833
        TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
834
        List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(ticketSubCategory.getCategoryId());
835
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
836
        model.addAttribute("ticket", ticket);
837
        model.addAttribute("ticketCategories", ticketCategories);
838
        model.addAttribute("ticketSubCategories", ticketSubCategories);
839
        model.addAttribute("ticketSubCategory", ticketSubCategory);
840
        model.addAttribute("authUsers", authUsers);
841
        return "edit-ticket-partner-modal";
842
    }
843
 
31762 tejbeer 844
    @PostMapping(value = "/cs/edit-ticket")
845
    public String editTicket(HttpServletRequest request, @RequestParam(name = "ticketId", defaultValue = "0") int ticketId, @RequestParam(name = "subCategoryId", defaultValue = "0") int subCategoryId, @RequestParam(name = "categoryId", defaultValue = "0") int categoryId, @RequestParam(name = "authUserId", defaultValue = "0") int authUserId, @RequestParam(name = "escalationType", defaultValue = "L1") EscalationType escalationType, Model model) throws Exception {
846
        LOGGER.info("Ticket Id {}, CategoryId {}, SubCategory Id {} authUserId {}", ticketId, categoryId, subCategoryId, authUserId);
847
        Ticket ticket = ticketRepository.selectById(ticketId);
848
        csService.updateTicket(categoryId, subCategoryId, ticket, authUserId, escalationType);
849
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
850
        return "response";
851
 
852
    }
853
 
34913 ranu 854
    @PostMapping(value = "/cs/edit-partner-ticket")
855
    public String editPartnerTicket(HttpServletRequest request, @RequestParam(name = "ticketId", defaultValue = "0") int ticketId, @RequestParam(name = "subCategoryId", defaultValue = "0") int subCategoryId, @RequestParam(name = "categoryId", defaultValue = "0") int categoryId, @RequestParam(name = "authUserId", defaultValue = "0") int authUserId, @RequestParam(name = "escalationType", defaultValue = "L1") EscalationType escalationType, Model model) throws Exception {
856
        LOGGER.info("Ticket Id {}, CategoryId {}, SubCategory Id {} authUserId {}", ticketId, categoryId, subCategoryId, authUserId);
857
        Ticket ticket = ticketRepository.selectById(ticketId);
858
        csService.updateTicket(categoryId, subCategoryId, ticket, authUserId, escalationType);
859
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
860
        return "response";
861
 
862
    }
863
 
31762 tejbeer 864
    @PostMapping(value = "/cs/changeTicketAssignee")
865
    public String changeTicketAssignee(HttpServletRequest request, @RequestParam(name = "positionId", defaultValue = "0") int positionId, Model model) throws Exception {
866
        Position position = positionRepository.selectById(positionId);
867
        if (position.isTicketAssignee()) {
868
            position.setTicketAssignee(false);
869
        } else {
870
            position.setTicketAssignee(true);
871
        }
872
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
873
        return "response";
874
    }
875
 
876
 
877
    @DeleteMapping(value = "/cs/removePosition")
878
    public String removePosition(HttpServletRequest request, @RequestParam(name = "positionId", defaultValue = "0") int positionId, Model model) throws Exception {
879
        positionRepository.delete(positionId);
880
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
881
        return "response";
882
    }
883
 
884
    @PostMapping(value = "/cs/create-last-activity")
885
    public String createlastActivity(HttpServletRequest request, @RequestParam(name = "ticketId") int ticketId, @RequestParam(name = "lastactivity") ActivityType lastActivity, Model model) throws Exception {
886
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
887
        Ticket ticket = ticketRepository.selectById(ticketId);
888
        Activity activity = new Activity();
889
        String subject = String.format(ACTIVITY_SUBJECT, ticket.getId());
890
        if (roleManager.isAdmin(loginDetails.getRoleIds())) {
891
            ticket.setLastActivity(lastActivity);
892
            String to = retailerService.getFofoRetailer(ticket.getFofoId()).getEmail();
893
            String message = String.format(PARTNER_RESOLVED_TICKET_MAIL, ticketId, "REOPEN");
894
            activity.setMessage(message);
895
            activity.setCreatedBy(authRepository.selectByEmailOrMobile(loginDetails.getEmailId()).getId());
896
            activity.setTicketId(ticketId);
897
            activity.setCreateTimestamp(LocalDateTime.now());
898
            activity.setType(ActivityType.COMMUNICATION_OUT);
899
            this.activityRelatedMail(to, null, subject, message);
900
        } else {
901
            if (ActivityType.RESOLVED_ACCEPTED == lastActivity) {
902
                ticket.setLastActivity(lastActivity);
903
                ticket.setCloseTimestamp(LocalDateTime.now());
904
                activity.setMessage(ActivityType.RESOLVED_ACCEPTED.toString());
905
                activity.setCreatedBy(0);
906
                activity.setTicketId(ticketId);
907
                activity.setType(ActivityType.COMMUNICATION_IN);
908
                activity.setCreateTimestamp(LocalDateTime.now());
909
            } else {
910
                String message = String.format(INTERNAL_REOPEN_MAIL, ticketId, retailerService.getFofoRetailer(loginDetails.getFofoId()).getBusinessName());
911
                String to = authRepository.selectById(ticket.getL1AuthUser()).getEmailId();
35395 amit 912
                String[] ccTo = authRepository.selectByIds(Arrays.asList(ticket.getL2AuthUser(), ticket.getL3AuthUser(), ticket.getL4AuthUser(), ticket.getL5AuthUser())).stream().map(x -> x.getEmailId()).toArray(String[]::new);
31762 tejbeer 913
                ticket.setLastActivity(lastActivity);
914
                ticket.setUpdateTimestamp(LocalDateTime.now());
915
                ticketAssignedRepository.deleteByTicketId(ticketId);
916
                TicketAssigned ticketAssigned = new TicketAssigned();
917
                ticketAssigned.setAssineeId(ticket.getL1AuthUser());
918
                ticketAssigned.setTicketId(ticketId);
919
                ticketAssignedRepository.persist(ticketAssigned);
920
                activity.setMessage(INTERNAL_REOPEN_ACTIVITY_MESSAGE);
921
                activity.setCreatedBy(0);
922
                activity.setTicketId(ticketId);
923
                activity.setType(ActivityType.COMMUNICATION_IN);
924
                activity.setCreateTimestamp(LocalDateTime.now());
925
                this.activityRelatedMail(to, ccTo, subject, message);
926
                this.activityRelatedMail(retailerService.getFofoRetailer(loginDetails.getFofoId()).getEmail(), null, subject, String.format(PARTNER_REOPEN, ticketId));
927
            }
928
 
929
        }
930
        activityRepository.persist(activity);
931
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
932
        return "response";
933
    }
934
 
32812 shampa 935
 
936
 
937
 
938
 
939
    @PostMapping(value = "/partner-position/update")
940
    public String positionUpdated(Model model, @RequestBody List<PartnerPositonUpdateModel> partnerPositionUpdateModels)
941
            throws Exception {
942
 
32821 shampa 943
        Map<Integer, List<String>> positionIdsToAddMap = partnerPositionUpdateModels.stream().filter(x->x.getPositionIdTo()!=0).collect(Collectors.groupingBy(x->x.getPositionIdTo(),
32812 shampa 944
                Collectors.mapping(x->x.getStoreCode(), Collectors.toList())));
945
 
32821 shampa 946
        Map<Integer, List<String>> positionIdsToRemoveMap = partnerPositionUpdateModels.stream().filter(x->x.getPositionIdFrom()!=0).collect(Collectors.groupingBy(x->x.getPositionIdFrom(),
32812 shampa 947
                Collectors.mapping(x->x.getStoreCode(), Collectors.toList())));
948
 
949
        List<Integer> positionIdsToUpdate = new ArrayList<>();
950
        positionIdsToUpdate.addAll(positionIdsToAddMap.keySet());
951
        positionIdsToUpdate.addAll(positionIdsToRemoveMap.keySet());
952
 
35395 amit 953
        Map<Integer, Position> positionsToUpdateMap =  positionRepository.selectByIds(positionIdsToUpdate).stream().collect(Collectors.toMap(x->x.getId(), x->x));
32812 shampa 954
        List<Integer> invalidPositionIds = positionsToUpdateMap.values().stream().filter(x-> x.getCategoryId()!= ProfitMandiConstants.TICKET_CATEGORY_RBM
34908 ranu 955
                && x.getCategoryId() != ProfitMandiConstants.TICKET_CATEGORY_SALES && x.getCategoryId() != ProfitMandiConstants.TICKET_CATEGORY_ABM).map(x -> x.getId()).collect(Collectors.toList());
32812 shampa 956
        if(invalidPositionIds.size() > 0) {
34908 ranu 957
            String message = "Non RBM/Sales/ABM are not allowed - " + invalidPositionIds;
32812 shampa 958
            throw new ProfitMandiBusinessException(message, message, message);
959
        }
960
 
961
        for (Map.Entry<Integer, List<String>> positionIdStoreMapEntry : positionIdsToAddMap.entrySet()) {
962
            int positionId = positionIdStoreMapEntry.getKey();
963
            Position position = positionsToUpdateMap.get(positionId);
32821 shampa 964
            LOGGER.info("positionId - {}, Position - {}", positionId, position);
32812 shampa 965
            List<String> storeCodesToAdd = positionIdStoreMapEntry.getValue();
966
            List<Integer> retailerIdsToAdd = fofoStoreRepository.selectByStoreCodes(storeCodesToAdd).stream().map(x->x.getId()).collect(Collectors.toList());
967
            Map<Integer, PartnerPosition> partnerPositionsMapByFofoId  = partnerPositionRepository
32821 shampa 968
                    .selectByRegionIdAndPostionId(Arrays.asList(position.getRegionId())
969
                            ,Arrays.asList(positionId)).stream().collect(Collectors.toMap(x->x.getFofoId(),x->x));
32812 shampa 970
            for (Integer retailerIdToAdd : retailerIdsToAdd) {
971
                if (!partnerPositionsMapByFofoId.containsKey(retailerIdToAdd)) {
972
                    PartnerPosition partnerPositionNew = new PartnerPosition();
973
                    partnerPositionNew.setPositionId(positionId);
974
                    partnerPositionNew.setFofoId(retailerIdToAdd);
975
                    partnerPositionNew.setRegionId(position.getRegionId());
32865 amit.gupta 976
                    partnerPositionRepository.persist(partnerPositionNew);
32812 shampa 977
                }
978
            }
979
        }
980
 
981
        for (Map.Entry<Integer, List<String>> positionIdStoreMapEntry : positionIdsToRemoveMap.entrySet()) {
982
 
983
            int positionId = positionIdStoreMapEntry.getKey();
984
            Position position = positionsToUpdateMap.get(positionId);
985
            List<String> storeCodesToRemove = positionIdStoreMapEntry.getValue();
986
            List<Integer> retailerIdsToRemove = fofoStoreRepository.selectByStoreCodes(storeCodesToRemove).stream().map(x->x.getId()).collect(Collectors.toList());
987
            Map<Integer, PartnerPosition> partnerPositionsMapByFofoId  = partnerPositionRepository
988
                    .selectByRegionIdAndPostionId(Arrays.asList(position.getRegionId()),Arrays.asList(positionId)).stream().collect(Collectors.toMap(x->x.getFofoId(),x->x));
989
            for (Integer retailerIdToRemove : retailerIdsToRemove) {
990
                if (partnerPositionsMapByFofoId.containsKey(retailerIdToRemove)) {
991
                   PartnerPosition partnerPositionToRemove =  partnerPositionsMapByFofoId.get(retailerIdToRemove);
992
                   partnerPositionRepository.delete(partnerPositionToRemove);
993
                }
994
            }
995
        }
996
 
997
 
998
 
999
        /*partnerPositionUpdateModels.str
1000
 
1001
        Map<Integer, Position> positionIdMap = positionsToUpdate.stream().collect(Collectors.toMap(x->x.getId(), x->x));
1002
        for (PartnerPositonUpdateModel partnerPositionUpdateModel : partnerPositionUpdateModels) {
1003
            FofoStore fofoStore = fofoStoreRepository.selectByStoreCode(partnerPositionUpdateModel.getStoreCode());
1004
            Position positionFrom = positionIdMap.get(partnerPositionUpdateModel.getPositionIdFrom());
1005
            Position positionTo = positionIdMap.get(partnerPositionUpdateModel.getPositionIdTo());
1006
            if(positionFrom != null) {
1007
                partnerPositionRepository.selectByRegionIdAndPostionId(Arrays.)
1008
              int regionId = positionFrom.getRegionId()
1009
            }
1010
            if(positionTo != null) {
1011
 
1012
            }
1013
        }*/
1014
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1015
        return "response";
1016
 
1017
    }
1018
 
1019
 
24417 govind 1020
}