Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
3024 mandeep.dh 1
/**
2
 * 
3
 */
4
package in.shop2020.crm.service.handler;
5
 
5851 amar.kumar 6
import in.shop2020.alert.AlertService;
7
import in.shop2020.alert.EntityType;
8
import in.shop2020.alert.MonitoredEntity;
3024 mandeep.dh 9
import in.shop2020.crm.Activity;
3390 mandeep.dh 10
import in.shop2020.crm.ActivityType;
3024 mandeep.dh 11
import in.shop2020.crm.Agent;
5936 amar.kumar 12
import in.shop2020.crm.TicketStatus;
3024 mandeep.dh 13
import in.shop2020.crm.CRMService.Iface;
3390 mandeep.dh 14
import in.shop2020.crm.SearchFilter;
3024 mandeep.dh 15
import in.shop2020.crm.Ticket;
5916 amar.kumar 16
import in.shop2020.crm.TicketCategory;
3024 mandeep.dh 17
import in.shop2020.crm.handler.ActivityHandler;
18
import in.shop2020.crm.handler.AgentHandler;
19
import in.shop2020.crm.handler.TicketHandler;
5851 amar.kumar 20
import in.shop2020.thrift.clients.AlertClient;
3024 mandeep.dh 21
 
22
import java.text.ParseException;
23
import java.util.ArrayList;
5851 amar.kumar 24
import java.util.Calendar;
3339 mandeep.dh 25
import java.util.Date;
3024 mandeep.dh 26
import java.util.List;
5909 amar.kumar 27
import java.util.Map;
3024 mandeep.dh 28
 
3499 mandeep.dh 29
import org.apache.commons.logging.Log;
30
import org.apache.commons.logging.LogFactory;
3024 mandeep.dh 31
import org.apache.thrift.TException;
32
import org.springframework.context.ApplicationContext;
33
import org.springframework.context.support.ClassPathXmlApplicationContext;
34
import org.springframework.stereotype.Service;
3206 mandeep.dh 35
import org.springframework.transaction.annotation.Transactional;
3024 mandeep.dh 36
 
37
/**
38
 * Implementation of the interface/services exposed by thrift to clients!
39
 * 
40
 * @author mandeep
41
 */
42
@Service
43
public class CRMServiceHandler implements Iface {
3499 mandeep.dh 44
    private static final Log log = LogFactory.getLog(CRMServiceHandler.class);
45
 
4008 mandeep.dh 46
    private TicketHandler      ticketHandler;
47
    private ActivityHandler    activityHandler;
48
    private AgentHandler       agentHandler;
49
 
50
    public CRMServiceHandler() {
51
        log.info("Creating context");
52
        ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
53
        ticketHandler              = context.getBean(TicketHandler.class);
54
        activityHandler            = context.getBean(ActivityHandler.class);
55
        agentHandler               = context.getBean(AgentHandler.class);
56
    }
57
 
3390 mandeep.dh 58
    public List<Ticket> getTickets(SearchFilter searchFilter) throws TException {
3024 mandeep.dh 59
        List<Ticket> ttickets = new ArrayList<Ticket>();
3390 mandeep.dh 60
        for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
61
                .getTickets(in.shop2020.crm.domain.SearchFilter
62
                        .create(searchFilter))) {
3024 mandeep.dh 63
            ttickets.add(ticket.getThriftTicket());
64
        }
65
 
66
        return ttickets;
67
    }
68
 
3390 mandeep.dh 69
    public List<Ticket> getUnassignedTickets() throws TException {
70
        List<Ticket> tickets = new ArrayList<Ticket>();
71
 
72
        for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
73
                .getUnassignedTickets()) {
74
            tickets.add(ticket.getThriftTicket());
75
        }
76
 
77
        return tickets;
78
    }
79
 
3206 mandeep.dh 80
    @Transactional
3390 mandeep.dh 81
    public void updateTicket(Ticket ticket, Activity activity)
82
            throws TException {
3024 mandeep.dh 83
        try {
84
            ticketHandler.updateTicket(in.shop2020.crm.domain.Ticket
85
                    .create(ticket));
3206 mandeep.dh 86
            activity.setTicketId(ticket.getId());
3390 mandeep.dh 87
            activityHandler.insertActivity(in.shop2020.crm.domain.Activity
88
                    .create(activity));
5851 amar.kumar 89
            try{
90
	            /*For now monitoring is only done for New tickets and hence once any 
91
	        	 * activity is done on a ticket after its creation, we stop monitoring that ticket*/
5916 amar.kumar 92
            	if(activity.getType()== ActivityType.SEND_EMAIL_TO_CUSTOMER || 
93
            			activity.getType()== ActivityType.ESCALATE_TICKET ||
5936 amar.kumar 94
            			activity.getType()== ActivityType.CALLED_CUSTOMER || 
95
            			activity.getTicketStatus().equals(TicketStatus.CLOSED)) {
5916 amar.kumar 96
		        	AlertService.Client alertClient = new AlertClient().getClient();
97
		            alertClient.endMonitoringEntity(EntityType.TICKET, "ticketId = " + ticket.getId());
98
            	}
5851 amar.kumar 99
            } catch(Exception ex) {
100
            	log.error("Exception while ending monitoring for ticketId " + ticket.getId());
101
            	log.error(ex);
102
            }
3024 mandeep.dh 103
        } catch (ParseException e) {
104
            throw new TException("Could not update " + ticket, e);
105
        }
106
    }
107
 
3206 mandeep.dh 108
    @Transactional
3390 mandeep.dh 109
    public long insertTicket(Ticket ticket, Activity activity)
110
            throws TException {
3024 mandeep.dh 111
        try {
3390 mandeep.dh 112
            long ticketId = ticketHandler
113
                    .insertTicket(in.shop2020.crm.domain.Ticket.create(ticket));
3206 mandeep.dh 114
            activity.setTicketId(ticketId);
3390 mandeep.dh 115
            activityHandler.insertActivity(in.shop2020.crm.domain.Activity
116
                    .create(activity));
5851 amar.kumar 117
            try {
7871 amar.kumar 118
            	if(ticket.getCategory()!= TicketCategory.DELIVERY_PROBLEM &&
119
            			ticket.getCategory()!= TicketCategory.PRODUCT_PROCUREMENT &&
120
            			ticket.getCategory()!= TicketCategory.DOA_RECEIVED) {
5916 amar.kumar 121
		            MonitoredEntity entity = new MonitoredEntity();
122
		            entity.setEntityType(EntityType.TICKET);
123
		            entity.setEventType(0);
124
		            entity.setEntityIdentifier("ticketId = " + new Long(ticketId).toString());
125
		            entity.setDescription(ticket.getDescription());
126
		            Calendar thresholdTime = Calendar.getInstance();
127
		            thresholdTime.add(Calendar.HOUR, 4);
128
		            entity.setWarnExpiryTime(thresholdTime.getTimeInMillis());
129
		            thresholdTime.add(Calendar.HOUR, 2);
130
		            entity.setCriticalExpiryTime(thresholdTime.getTimeInMillis());
131
		            AlertService.Client alertClient = new AlertClient().getClient();
132
		            alertClient.scheduleAlert(entity);
133
            	}
5851 amar.kumar 134
            } catch (Exception ex) {
135
            	log.error("Exception while scheduling alert for Ticket Id "+ticketId);
136
            	log.error(ex);
137
            }
3206 mandeep.dh 138
            return ticketId;
3024 mandeep.dh 139
        } catch (ParseException e) {
140
            throw new TException("Could not insert " + ticket, e);
141
        }
142
    }
143
 
3390 mandeep.dh 144
    public List<Activity> getActivities(SearchFilter searchFilter)
145
            throws TException {
3024 mandeep.dh 146
        List<Activity> tactivities = new ArrayList<Activity>();
7596 kshitij.so 147
        //Start:- Added By Manish Sharma for Displaying Current Ticket Status for Unread Customer Activities on 21-Jun-2013
148
        in.shop2020.crm.domain.SearchFilter filter_to_check  =in.shop2020.crm.domain.SearchFilter.create(searchFilter);
3168 mandeep.dh 149
        List<in.shop2020.crm.domain.Activity> activities = activityHandler
7596 kshitij.so 150
                .getActivities(filter_to_check);
151
        in.shop2020.crm.domain.SearchFilter new_searchFilter = new in.shop2020.crm.domain.SearchFilter();
152
        //End:- Added By Manish Sharma for Displaying Current Ticket Status for Unread Customer Activities on 21-Jun-2013
153
 
3168 mandeep.dh 154
        if (activities != null) {
155
            for (in.shop2020.crm.domain.Activity ticket : activities) {
7596 kshitij.so 156
            	//Start:- Added By Manish Sharma for Displaying Current Ticket Status for Unread Customer Activities on 21-Jun-2013
157
            	in.shop2020.crm.Activity activity = ticket.getThriftActivity();
158
            	if(filter_to_check.getIsActivityRead()!=null && !filter_to_check.getIsActivityRead()){
159
	            	if(activity.getTicketId() > 0){
160
		            	new_searchFilter.setTicketId(activity.getTicketId());
161
		            	List<in.shop2020.crm.domain.Ticket> tickets_as_per_activity= ticketHandler.getTickets(new_searchFilter);
162
		            	activity.setTicketStatus(tickets_as_per_activity.get(0).getStatus());
163
		            }
164
            	}
165
                tactivities.add(activity);
166
                //End:- Added By Manish Sharma for Displaying Current Ticket Status for Unread Customer Activities on 21-Jun-2013
3168 mandeep.dh 167
            }
3024 mandeep.dh 168
        }
3390 mandeep.dh 169
 
3024 mandeep.dh 170
        return tactivities;
171
    }
172
 
3405 mandeep.dh 173
    public long insertActivity(Activity activity) throws TException {
3024 mandeep.dh 174
        try {
3405 mandeep.dh 175
            return activityHandler.insertActivity(in.shop2020.crm.domain.Activity
3024 mandeep.dh 176
                    .create(activity));
177
        } catch (ParseException e) {
178
            throw new TException("Could not insert " + activity, e);
179
        }
180
    }
181
 
3390 mandeep.dh 182
    @Transactional
183
    public void markAsRead(long activityId, long agentId) throws TException {
184
        in.shop2020.crm.domain.SearchFilter searchFilter = new in.shop2020.crm.domain.SearchFilter();
185
        searchFilter.setActivityId(activityId);
186
        activityHandler.markAsRead(activityId);
3168 mandeep.dh 187
        in.shop2020.crm.domain.Activity activity = activityHandler
3390 mandeep.dh 188
                .getActivities(searchFilter).get(0);
4089 mandeep.dh 189
 
190
        // Setting activity fields from latest ticket fields
191
        if (activity.getTicketId() != null) {
192
            searchFilter.setTicketId(activity.getTicketId());
193
            in.shop2020.crm.domain.Ticket ticket = ticketHandler.getTickets(searchFilter).get(0);
194
            activity.setTicketAssigneeId(ticket.getAssigneeId());
195
            activity.setTicketCategory(ticket.getCategory());
196
            activity.setTicketDescription(ticket.getDescription());
197
            activity.setTicketPriority(ticket.getPriority());
198
            activity.setTicketStatus(ticket.getStatus());
199
        }
200
 
3390 mandeep.dh 201
        activity.setCreatorId(agentId);
202
        activity.setDescription("Marked as read ticketId: "
203
                + activity.getTicketId() + ", activityId: " + activityId);
204
        activity.setType(ActivityType.OTHER);
205
        activityHandler.insertActivity(activity);
3024 mandeep.dh 206
    }
207
 
3390 mandeep.dh 208
    public List<Agent> getAgents(SearchFilter searchFilter) throws TException {
209
        List<Agent> agents = new ArrayList<Agent>();
3024 mandeep.dh 210
 
3390 mandeep.dh 211
        for (in.shop2020.crm.domain.Agent agent : agentHandler
212
                .getAgents(in.shop2020.crm.domain.SearchFilter
213
                        .create(searchFilter))) {
214
            agents.add(agent.getThriftAgent());
3024 mandeep.dh 215
        }
216
 
3390 mandeep.dh 217
        return agents;
3024 mandeep.dh 218
    }
5286 amar.kumar 219
 
220
    public List<Agent> getInactiveAgents(SearchFilter searchFilter) throws TException {
221
        List<Agent> agents = new ArrayList<Agent>();
3024 mandeep.dh 222
 
5286 amar.kumar 223
        for (in.shop2020.crm.domain.Agent agent : agentHandler
224
                .getInactiveAgents(in.shop2020.crm.domain.SearchFilter
225
                        .create(searchFilter))) {
226
            agents.add(agent.getThriftAgent());
227
        }
228
 
229
        return agents;
230
    }
231
 
3390 mandeep.dh 232
    public void updatePasswordForAgent(String agentEmailId, String password)
3339 mandeep.dh 233
            throws TException {
3390 mandeep.dh 234
        agentHandler.updatePasswordForAgent(agentEmailId, password);
235
    }
3339 mandeep.dh 236
 
3390 mandeep.dh 237
    public long getLastEmailProcessedTimestamp() throws TException {
238
        return agentHandler.getLastEmailProcessedTimestamp().getTime();
3339 mandeep.dh 239
    }
240
 
3390 mandeep.dh 241
    public void updateLastEmailProcessedTimestamp(long timestamp)
3024 mandeep.dh 242
            throws TException {
3390 mandeep.dh 243
        agentHandler.updateLastEmailProcessedTimestamp(new Date(timestamp));
3024 mandeep.dh 244
    }
245
 
3088 mandeep.dh 246
    public List<String> getRoleNamesForAgent(String agentEmailId)
3168 mandeep.dh 247
            throws TException {
3088 mandeep.dh 248
        return agentHandler.getRoleNamesForAgent(agentEmailId);
249
    }
250
 
251
    public List<String> getPermissionsForRoleName(String roleName)
3168 mandeep.dh 252
            throws TException {
3088 mandeep.dh 253
        return agentHandler.getPermissionsForRoleName(roleName);
254
    }
4793 amar.kumar 255
 
256
    public void changeAgentStatus(boolean status, String emailId)
257
    		throws TException {
258
    	agentHandler.changeAgentStatus(status, emailId);
259
    }
3088 mandeep.dh 260
 
3375 rajveer 261
	public boolean isAlive() throws TException {
4624 mandeep.dh 262
        try {
263
            return !agentHandler.getAgents(null).isEmpty();
264
        } catch (Exception e) {
265
            log.error("Could not fetch agents", e);
266
        }
3375 rajveer 267
 
4624 mandeep.dh 268
        return false;
269
    }
270
 
3375 rajveer 271
	public void closeSession() throws TException {
272
	}
4793 amar.kumar 273
 
274
	public void insertAgent(Agent agent, List<String> role) throws TException {
275
		agentHandler.insertAgent(in.shop2020.crm.domain.Agent.create(agent), role);
276
	}
277
 
278
	public void unassignAgentTickets(int assigneeId) {
279
		ticketHandler.unassignAgentTickets(assigneeId);
280
	}
5168 amar.kumar 281
 
282
	public void changeAgentRole(long id, List<String> role) {
283
		agentHandler.changeAgentRole(id,role);
284
	}
285
 
286
	public int getOpenTicketCountForAgent(long agentId) {
287
		return ticketHandler.getOpenTicketCountForAgent(agentId);
288
	}
5909 amar.kumar 289
 
290
	public Map<String,Long> getOpenTicketsMap() {
291
		return ticketHandler.getOpenTicketsMap();
292
	}
3024 mandeep.dh 293
}