Subversion Repositories SmartDukaan

Rev

Rev 7162 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.serving.controllers;

import java.util.ArrayList;
import java.util.List;

import in.shop2020.crm.Agent;
import in.shop2020.crm.SearchFilter;
import in.shop2020.serving.auth.CRMAuthorizingRealm;
import in.shop2020.thrift.clients.CRMClient;

import org.apache.commons.lang.StringUtils;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;

public class AgentController extends BaseController {
        
        private static final String adminEmailId = "admin@shop2020.in";
        
        private List<Agent>  agents = new ArrayList<Agent>();
        private int id;
        private String name;
        private String emailId;
        private String password;
        private List<String> role;
        private String managerEmailId;
        private String newPassword;
        private int managerId;
        private String pmCrmUser;

        private static final long serialVersionUID = 7884813082235471597L;

        public AgentController()        {
                super();
        }
        
        public String index() {
                try {
                SearchFilter searchFilter = new SearchFilter();
                crmServiceClient = new CRMClient().getClient();
                agents = crmServiceClient.getAgents(searchFilter);
        } catch (TException e) {
            log.error("Error while getting agents", e);
        }
        return INDEX;
    }
        
        public String createAgent(){
                try{
                        Agent agent = new Agent();
                        agent.setName(name);
                        agent.setEmailId(emailId);
                        agent.setManagerId(managerId);  
                        agent.setPassword(new Sha256Hash(password).toHex());
                        agent.setIs_active(true);
                        if((pmCrmUser!=null && "on".equalsIgnoreCase(pmCrmUser)) || role.contains("PMAgent")){
                                agent.setIs_pmCrmUser(true);
                        }else{
                                agent.setIs_pmCrmUser(false);
                        }
                        if(role.contains("Outbound")||role.contains("TeamLead")){
                                agent.setIs_allAssignable(true);
                        }else{
                                agent.setIs_allAssignable(false);
                        }
                        crmServiceClient = new CRMClient().getClient();
                        crmServiceClient.insertAgent(agent,role);
                        SearchFilter searchfilter = new SearchFilter();
                        searchfilter.setAgentEmailId(emailId);
                        List<Agent> createdAgent = crmServiceClient.getAgents(searchfilter);
                        CRMAuthorizingRealm.addAgent(createdAgent.get(0));
                        log.info("Agent Creation complete");
                } catch (TException e) {
                        log.error("Error while creating agent", e);
                        return EXCEPTION;
                }
                return index();
        }


        public String changePassword(){
                try {
                        crmServiceClient = new CRMClient().getClient();
                        crmServiceClient.updatePasswordForAgent(emailId, new Sha256Hash(newPassword).toHex());
                        
                        // Dummy call to reload agents
                CRMAuthorizingRealm.getAgent(-1);
                } catch (TException e) {
                        log.error("Error while changing password of agent", e);
                        e.printStackTrace();
                        return EXCEPTION;
                }
                return index();
        }
        
        public String deActivateAgent(){
                try {
                        crmServiceClient = new CRMClient().getClient();
                        crmServiceClient.changeAgentStatus(false, emailId);
                        crmServiceClient.unassignAgentTickets(id);
                        CRMAuthorizingRealm.removeAgent(new Long((long)id), emailId);
                } catch (TException e) {
                        log.error("Error while deactivating agent", e);
                        e.printStackTrace();
                        return EXCEPTION; 
                }
                return index();
        }
        
        public String changeAgentRole(){
                try{
                        log.info("Agent id : "+id +" role : " + role);
                        crmServiceClient = new CRMClient().getClient();
                        crmServiceClient.changeAgentRole(new Long((long)id),role);
                } catch (Exception e) {
                        
                }
                return index();
        }
        
        public String getOpenTicketCount(long id) {
                try {
                        crmServiceClient = new CRMClient().getClient();
                        return (new Integer(crmServiceClient.getOpenTicketCountForAgent(id))).toString();
                } catch (TTransportException e) {
                        e.printStackTrace();
                } catch (TException e) {
                        e.printStackTrace();
                }
                return "-1";
        }
        
        public List<String> getRoleForAgent(String emailId) throws TException{
                crmServiceClient = new CRMClient().getClient();
                return crmServiceClient.getRoleNamesForAgent(emailId);
        }
        
        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public String getPassword() {
                return password;
        }

        public void setPassword(String password) {
                this.password = password;
        }

        public List<String> getRole() {
                return role;
        }

        public void setRole(List<String> role) {
                this.role = role;
        }

        public String getEmailId() {
                return emailId;
        }
        
        public void setEmailId(String emailId) {
                this.emailId = emailId;
        }

        public String getNewPassword() {
                return newPassword;
        }

        public void setNewPassword(String newPassword) {
                this.newPassword = newPassword;
        }

        public List<Agent> getAgents() {
                String currentEmailId = getCurrentAgentEmailId();
                log.info("currentEmailId="+currentEmailId);
                long managerId =0;
                boolean isManager=false;
                List<Agent> managedAgents = new ArrayList<Agent>();
                for(Agent tempAgent : agents) {
                        if(StringUtils.equalsIgnoreCase(tempAgent.getEmailId(), currentEmailId)) {
                                managerId = tempAgent.getId();
                                break;
                        }
                }
                
                if(currentEmailId.equals(adminEmailId)) {
                        return agents;
                } else {
                        if(managerId!=0) {
                                for(Agent tempAgent : agents) {
                                        if(tempAgent.getManagerId() == managerId){
                                                isManager=true;
                                                managedAgents.add(tempAgent);
                                        }
                                }
                                if (isManager){
                                        for(Agent tempAgent : agents) {
                                                if(tempAgent.getId() == managerId){
                                                        managedAgents.add(tempAgent);
                                                }
                                        }
                                }
                                return managedAgents;
                        }
                        else {
                                return null;
                        }
                                
                }
                
        }

        public void setAgents(List<Agent> agents) {
                this.agents = agents;
        }
        
        public String getManagerEmailId() {
                return managerEmailId;
        }

        public void setManagerEmailId(String managerEmailId) {
                this.managerEmailId = managerEmailId;
        }
        
        public int getManagerId() {
                return managerId;
        }

        
        public void setManagerId(int managerId) {
                this.managerId = managerId;
        }

        public int getId() {
                return id;
        }

        public void setId(int id) {
                this.id = id;
        }
        
        public static void main(String args[]) throws TException {
                SearchFilter searchFilter = new SearchFilter();
                searchFilter.setAgentId(10);
                in.shop2020.crm.CRMService.Client crmServiceClient = new CRMClient().getClient();
        List<Agent> agents = crmServiceClient.getAgents(searchFilter);
        System.out.println(agents);
        }

        public String getPmCrmUser() {
                return pmCrmUser;
        }

        public void setPmCrmUser(String pmCrmUser) {
                this.pmCrmUser = pmCrmUser;
        }
        
}