Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3090 mandeep.dh 1
/**
2
 * 
3
 */
4
package in.shop2020.serving.controllers;
5
 
6
import in.shop2020.crm.Activity;
3106 mandeep.dh 7
import in.shop2020.crm.ActivityType;
3090 mandeep.dh 8
import in.shop2020.crm.Agent;
3390 mandeep.dh 9
import in.shop2020.crm.SearchFilter;
3090 mandeep.dh 10
import in.shop2020.crm.Ticket;
11
import in.shop2020.crm.TicketCategory;
12
import in.shop2020.crm.TicketPriority;
13
import in.shop2020.crm.TicketStatus;
14
import in.shop2020.model.v1.user.User;
15
import in.shop2020.model.v1.user.UserContextException;
3390 mandeep.dh 16
import in.shop2020.serving.auth.CRMAuthorizingRealm;
17
import in.shop2020.thrift.clients.CRMClient;
3206 mandeep.dh 18
import in.shop2020.thrift.clients.HelperClient;
3390 mandeep.dh 19
import in.shop2020.thrift.clients.UserClient;
3206 mandeep.dh 20
import in.shop2020.util.CRMConstants;
21
import in.shop2020.utils.HelperService.Client;
22
import in.shop2020.utils.HelperServiceException;
3090 mandeep.dh 23
 
24
import java.util.Date;
25
import java.util.HashMap;
26
import java.util.List;
27
import java.util.Map;
28
 
3390 mandeep.dh 29
import org.apache.shiro.SecurityUtils;
3090 mandeep.dh 30
import org.apache.thrift.TException;
31
 
32
/**
33
 * Action class for ticket pages in CRM tool.
3106 mandeep.dh 34
 * 
3090 mandeep.dh 35
 * @author mandeep
36
 */
37
@SuppressWarnings("serial")
38
public class UserTicketsController extends BaseController {
3206 mandeep.dh 39
    private Map<Long, Ticket>   ticketsMap = new HashMap<Long, Ticket>();
3090 mandeep.dh 40
 
3269 mandeep.dh 41
    private String              userId;
3206 mandeep.dh 42
    private String              userEmailId;
43
    private String              id;
44
    private String              activityDescription;
45
    private String              description;
46
    private String              assigneeEmailId;
47
    private String              status;
48
    private String              priority;
49
    private String              category;
50
    private String              activityType;
51
    private Ticket              ticket;
52
    private List<Activity>      activities;
53
    private String              orderId;
54
    private String              subject;
55
    private String              body;
3090 mandeep.dh 56
 
3106 mandeep.dh 57
    public String index() {
58
        try {
3339 mandeep.dh 59
            List<Ticket> ticketsList = null;
3390 mandeep.dh 60
            SearchFilter searchFilter = new SearchFilter();
61
            crmServiceClient = new CRMClient().getClient();
3339 mandeep.dh 62
 
63
            if (id != null && !id.isEmpty()) {
3390 mandeep.dh 64
                searchFilter.setTicketId(Long.parseLong(id));
65
                ticketsList = crmServiceClient.getTickets(searchFilter);
66
            } else {
67
                searchFilter.setCustomerId(Long.parseLong(userId));
68
                ticketsList = crmServiceClient.getTickets(searchFilter);
3339 mandeep.dh 69
            }
70
 
3106 mandeep.dh 71
            if (ticketsList != null) {
72
                for (Ticket ticket : ticketsList) {
73
                    ticketsMap.put(ticket.getId(), ticket);
74
                }
3090 mandeep.dh 75
            }
3106 mandeep.dh 76
        } catch (TException e) {
77
            log.error("Error while getting tickets", e);
78
            return EXCEPTION;
3090 mandeep.dh 79
        }
3339 mandeep.dh 80
 
3090 mandeep.dh 81
        return INDEX;
82
    }
83
 
3106 mandeep.dh 84
    public String update() {
85
        try {
3390 mandeep.dh 86
            long creatorId = CRMAuthorizingRealm.getAgent(currentAgentEmailId)
87
                    .getId();
3090 mandeep.dh 88
 
3106 mandeep.dh 89
            // Only subject and close date are editable fields for a ticket
90
            Ticket ticket = new Ticket();
91
            ticket.setId(Long.parseLong(id));
92
            ticket.setDescription(description);
93
            ticket.setCategory(TicketCategory.valueOf(category));
94
            ticket.setPriority(TicketPriority.valueOf(priority));
95
            ticket.setStatus(TicketStatus.valueOf(status));
3090 mandeep.dh 96
 
3106 mandeep.dh 97
            // Update when a ticket is closed!
98
            if (TicketStatus.CLOSED.name().equals(status)) {
99
                ticket.setCloseDate(new Date().getTime());
100
            }
3090 mandeep.dh 101
 
3269 mandeep.dh 102
            if (activityDescription == null || activityDescription.isEmpty()) {
103
                activityDescription = "Updating ticket fields";
104
            }
105
 
3106 mandeep.dh 106
            Activity activity = new Activity();
107
            activity.setDescription(activityDescription);
108
            activity.setType(ActivityType.valueOf(activityType));
109
            activity.setTicketPriority(TicketPriority.valueOf(priority));
110
            activity.setTicketStatus(TicketStatus.valueOf(status));
111
            activity.setCreatorId(creatorId);
112
            activity.setTicketCategory(TicketCategory.valueOf(category));
113
            activity.setTicketDescription(description);
3090 mandeep.dh 114
 
3269 mandeep.dh 115
            if (userId != null && !userId.isEmpty()) {
116
                activity.setCustomerId(Long.parseLong(userId));
117
            }
118
 
3206 mandeep.dh 119
            log.info(activityType);
3269 mandeep.dh 120
            if (ActivityType.SEND_EMAIL_TO_CUSTOMER.equals(activity.getType())) {
3206 mandeep.dh 121
                log.info("Sending mail");
122
                Client helperClient = new HelperClient().getClient();
3390 mandeep.dh 123
                activity.setUserEmailId(helperClient.saveUserEmailForSending(
3206 mandeep.dh 124
                        userEmailId, CRMConstants.CRM_EMAIL_SENDOR, subject,
125
                        body, null, CRMConstants.CRM_EMAIL_TYPE));
126
 
127
                // We change activityType to OTHER when pop up box for email
128
                // closes
3269 mandeep.dh 129
                activity.setDescription("Subject: " + subject + "\n\n"
130
                        + "Body: " + body);
3206 mandeep.dh 131
            }
132
 
3106 mandeep.dh 133
            // handling null values appropriately
134
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
3390 mandeep.dh 135
                long assigneeId = CRMAuthorizingRealm.getAgent(
3106 mandeep.dh 136
                        assigneeEmailId).getId();
137
                ticket.setAssigneeId(assigneeId);
138
                activity.setTicketAssigneeId(assigneeId);
139
            }
3090 mandeep.dh 140
 
3390 mandeep.dh 141
            crmServiceClient = new CRMClient().getClient();
3206 mandeep.dh 142
            crmServiceClient.updateTicket(ticket, activity);
3106 mandeep.dh 143
        } catch (TException e) {
144
            log.error("Error while updating ticket", e);
145
            return EXCEPTION;
3269 mandeep.dh 146
        } catch (HelperServiceException hse) {
3206 mandeep.dh 147
            log.error("Error while sending mail", hse);
148
            return EXCEPTION;
149
        }
3106 mandeep.dh 150
 
3090 mandeep.dh 151
        return index();
152
    }
153
 
3106 mandeep.dh 154
    public String edit() {
155
        try {
156
            long ticketId = Long.parseLong(id);
3390 mandeep.dh 157
            SearchFilter searchFilter = new SearchFilter();
158
            searchFilter.setTicketId(ticketId);
159
            crmServiceClient = new CRMClient().getClient();
160
            ticket = crmServiceClient.getTickets(searchFilter).get(0);
161
            activities = crmServiceClient.getActivities(searchFilter);
3206 mandeep.dh 162
            subject = createSubjectString(ticket);
3269 mandeep.dh 163
            userId = String.valueOf(ticket.getCustomerId());
164
            userEmailId = ticket.getCustomerEmailId();
3106 mandeep.dh 165
        } catch (TException e) {
166
            log.error("Error while loading edit page", e);
167
            return EXCEPTION;
168
        }
169
 
3090 mandeep.dh 170
        return EDIT;
171
    }
172
 
3206 mandeep.dh 173
    private String createSubjectString(Ticket ticket) {
174
        return CRMConstants.CRM_SUBJECT_PREFIX_FOR_TICKET_ID + ticket.getId()
175
                + " " + ticket.getCategory().name();
176
    }
177
 
3090 mandeep.dh 178
    public Map<Long, Ticket> getTickets() {
179
        return ticketsMap;
180
    }
181
 
182
    public User getUser() throws UserContextException, TException {
3390 mandeep.dh 183
        userContextServiceClient = new UserClient().getClient();
3269 mandeep.dh 184
        return userContextServiceClient.getUserById(Long.parseLong(userId));
3090 mandeep.dh 185
    }
186
 
3390 mandeep.dh 187
    public Agent getAgent(long agentId) throws TException {
188
        return CRMAuthorizingRealm.getAgent(agentId);
3090 mandeep.dh 189
    }
190
 
191
    public TicketStatus[] getTicketStatuses() {
192
        return TicketStatus.values();
193
    }
194
 
195
    public TicketPriority[] getTicketPriorities() {
196
        return TicketPriority.values();
197
    }
198
 
3106 mandeep.dh 199
    public String create() {
200
        try {
3390 mandeep.dh 201
            long creatorId = CRMAuthorizingRealm.getAgent(currentAgentEmailId)
202
                    .getId();
3106 mandeep.dh 203
            Ticket ticket = new Ticket();
204
            ticket.setDescription(description);
205
            ticket.setCreatorId(creatorId);
206
            ticket.setStatus(TicketStatus.OPEN);
207
            ticket.setPriority(TicketPriority.valueOf(priority));
208
            ticket.setCategory(TicketCategory.valueOf(category));
3390 mandeep.dh 209
 
3106 mandeep.dh 210
            Activity activity = new Activity();
211
            // At creation of ticket activity's description is same as that of
212
            // ticket
3269 mandeep.dh 213
            activity.setDescription("Creating Ticket");
3106 mandeep.dh 214
            activity.setType(ActivityType.OTHER);
215
            activity.setTicketPriority(TicketPriority.valueOf(priority));
216
            activity.setTicketStatus(TicketStatus.OPEN);
217
            activity.setCreatorId(creatorId);
218
            activity.setTicketCategory(TicketCategory.valueOf(category));
219
            activity.setTicketDescription(description);
3090 mandeep.dh 220
 
3269 mandeep.dh 221
            if (orderId != null && !orderId.isEmpty()) {
222
                ticket.setOrderId(Long.parseLong(orderId));
223
            }
224
 
225
            if (userId != null && !userId.isEmpty()) {
226
                ticket.setCustomerId(Long.parseLong(userId));
227
                activity.setCustomerId(Long.parseLong(userId));
228
            }
229
 
3106 mandeep.dh 230
            // handling null values appropriately
231
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
3390 mandeep.dh 232
                long assigneeId = CRMAuthorizingRealm.getAgent(assigneeEmailId)
233
                        .getId();
3106 mandeep.dh 234
                ticket.setAssigneeId(assigneeId);
235
                activity.setTicketAssigneeId(assigneeId);
236
            }
237
 
3390 mandeep.dh 238
            crmServiceClient = new CRMClient().getClient();
3206 mandeep.dh 239
            crmServiceClient.insertTicket(ticket, activity);
3106 mandeep.dh 240
        } catch (TException e) {
241
            log.error("Error while creating ticket", e);
242
            return EXCEPTION;
243
        }
244
 
3090 mandeep.dh 245
        return index();
246
    }
247
 
3390 mandeep.dh 248
    public boolean isAssigneeEditable() {
249
        return SecurityUtils.getSubject().hasRole("TeamLead");
3106 mandeep.dh 250
    }
251
 
252
    public TicketCategory[] getTicketCategories() {
3090 mandeep.dh 253
        return TicketCategory.values();
254
    }
255
 
3106 mandeep.dh 256
    public ActivityType[] getActivityTypes() {
257
        return ActivityType.values();
3090 mandeep.dh 258
    }
259
 
3106 mandeep.dh 260
    public List<Agent> getAllAgents() {
3390 mandeep.dh 261
        return CRMAuthorizingRealm.getAgents();
3106 mandeep.dh 262
    }
263
 
3090 mandeep.dh 264
    public Map<Long, Ticket> getTicketsMap() {
265
        return ticketsMap;
266
    }
267
 
268
    public void setUserId(String userId) {
3269 mandeep.dh 269
        this.userId = userId;
3090 mandeep.dh 270
    }
271
 
3106 mandeep.dh 272
    public void setOrderId(String orderId) {
273
        this.orderId = orderId;
3090 mandeep.dh 274
    }
275
 
3269 mandeep.dh 276
    public String getUserId() {
3106 mandeep.dh 277
        return userId;
278
    }
279
 
280
    public String getId() {
281
        return id;
282
    }
283
 
284
    public void setId(String id) {
285
        this.id = id;
286
    }
287
 
288
    public String getActivityDescription() {
289
        return activityDescription;
290
    }
291
 
292
    public void setActivityDescription(String activityDescription) {
293
        this.activityDescription = activityDescription;
294
    }
295
 
296
    public String getDescription() {
297
        return description;
298
    }
299
 
3090 mandeep.dh 300
    public void setDescription(String description) {
301
        this.description = description;
302
    }
303
 
3106 mandeep.dh 304
    public String getAssigneeEmailId() {
305
        return assigneeEmailId;
3090 mandeep.dh 306
    }
307
 
3106 mandeep.dh 308
    public void setAssigneeEmailId(String assigneeEmailId) {
309
        this.assigneeEmailId = assigneeEmailId;
3090 mandeep.dh 310
    }
311
 
3106 mandeep.dh 312
    public String getStatus() {
313
        return status;
3090 mandeep.dh 314
    }
315
 
3106 mandeep.dh 316
    public void setStatus(String status) {
317
        this.status = status;
3090 mandeep.dh 318
    }
319
 
3106 mandeep.dh 320
    public String getPriority() {
321
        return priority;
3090 mandeep.dh 322
    }
323
 
3106 mandeep.dh 324
    public void setPriority(String priority) {
325
        this.priority = priority;
3090 mandeep.dh 326
    }
327
 
3106 mandeep.dh 328
    public String getCategory() {
329
        return category;
3090 mandeep.dh 330
    }
331
 
3106 mandeep.dh 332
    public void setCategory(String category) {
333
        this.category = category;
3090 mandeep.dh 334
    }
335
 
3106 mandeep.dh 336
    public String getActivityType() {
337
        return activityType;
3090 mandeep.dh 338
    }
339
 
3106 mandeep.dh 340
    public void setActivityType(String activityType) {
341
        this.activityType = activityType;
3090 mandeep.dh 342
    }
343
 
3106 mandeep.dh 344
    public Ticket getTicket() {
345
        return ticket;
3090 mandeep.dh 346
    }
347
 
3106 mandeep.dh 348
    public void setTicket(Ticket ticket) {
349
        this.ticket = ticket;
3090 mandeep.dh 350
    }
351
 
3106 mandeep.dh 352
    public List<Activity> getActivities() {
353
        return activities;
3090 mandeep.dh 354
    }
355
 
3106 mandeep.dh 356
    public void setActivities(List<Activity> activities) {
357
        this.activities = activities;
3090 mandeep.dh 358
    }
359
 
3106 mandeep.dh 360
    public String getOrderId() {
3090 mandeep.dh 361
        return orderId;
362
    }
363
 
3106 mandeep.dh 364
    public void setTicketsMap(Map<Long, Ticket> ticketsMap) {
365
        this.ticketsMap = ticketsMap;
3090 mandeep.dh 366
    }
3206 mandeep.dh 367
 
368
    public String getSubject() {
369
        return subject;
370
    }
371
 
372
    public void setSubject(String subject) {
373
        this.subject = subject;
374
    }
375
 
376
    public String getBody() {
377
        return body;
378
    }
379
 
380
    public void setBody(String body) {
381
        this.body = body;
382
    }
383
 
384
    public String getUserEmailId() {
385
        return userEmailId;
386
    }
387
 
388
    public void setUserEmailId(String userEmailId) {
389
        this.userEmailId = userEmailId;
390
    }
3090 mandeep.dh 391
}