Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.support.controllers;

import java.util.Arrays;
import java.util.List;

import in.shop2020.model.v1.order.Pmsa;
import in.shop2020.model.v1.order.PmsaSearchFilter;
import in.shop2020.model.v1.order.TransactionService.Client;
import in.shop2020.support.utils.ReportsUtils;
import in.shop2020.thrift.clients.TransactionClient;

import javax.mail.internet.InternetAddress;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.xwork.StringUtils;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ValidationAwareSupport;

@SuppressWarnings("serial")

@InterceptorRefs({
        @InterceptorRef("defaultStack"),
        @InterceptorRef("login")
})
@Results({
        @Result(name = "redirect", location = "${url}", type = "redirect"),
        @Result(name="authsuccess", type="redirectAction", params = {"actionName" , "reports"})
})
public class PmsaController extends ValidationAwareSupport implements ServletRequestAware ,ServletResponseAware, ServletContextAware{

        private static Logger logger = LoggerFactory.getLogger(PmsaController.class);

        private HttpServletRequest request;
        private HttpSession session;
        private HttpServletResponse response;
        private String id;
        private String name;
        private String refererEmail;
        private String phone;
        private String address;
        private String state;
        private String pincode;
        private String activated;
        private String level;
        private String associateEmail;
        private String result;
        private String code;
        private String l1Email;
        private List<Pmsa> searchResults;
        private Pmsa pmsaUser;
        private String pmsa_id;
        private String referrerEmail;
        private List<String> levels;
        private String customH3;
        private List<Long> stats;

        public List<Long> getStats() {
                return stats;
        }

        public void setStats(List<Long> stats) {
                this.stats = stats;
        }

        public String getCustomH3() {
                return customH3;
        }

        public void setCustomH3(String customH3) {
                this.customH3 = customH3;
        }

        public List<String> getLevels() {
                return levels;
        }

        public void setLevels(List<String> levels) {
                this.levels = levels;
        }

        public String getReferrerEmail() {
                return referrerEmail;
        }

        public void setReferrerEmail(String referrerEmail) {
                this.referrerEmail = referrerEmail;
        }

        public String getPmsa_id() {
                return pmsa_id;
        }

        public void setPmsa_id(String pmsa_id) {
                this.pmsa_id = pmsa_id;
        }

        public Pmsa getPmsaUser() {
                return pmsaUser;
        }

        public void setPmsaUser(Pmsa pmsaUser) {
                this.pmsaUser = pmsaUser;
        }

        public List<Pmsa> getSearchResults() {
                return searchResults;
        }

        public void setSearchResults(List<Pmsa> searchResults) {
                this.searchResults = searchResults;
        }

        public String getL1Email() {
                return l1Email;
        }

        public void setL1Email(String l1Email) {
                this.l1Email = l1Email;
        }

        public String getL2Email() {
                return l2Email;
        }

        public void setL2Email(String l2Email) {
                this.l2Email = l2Email;
        }

        private String l2Email;

        public String getCode() {
                return code;
        }

        public void setCode(String code) {
                this.code = code;
        }

        public String index() throws TException {
                if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE),request.getServletPath())) {
                        return "authfail";
                }
                Client tc = new TransactionClient().getClient();
                stats = tc.getStatsForAssociates(getUserEmail());
                return "index";
        }
        
        public String edit() throws NumberFormatException, TException{
                if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().replace("/","").substring(request.getContextPath().length()-1).split("!")[0])) {
                        logger.info(request.getRequestURI().replace("/","").substring(request.getContextPath().length()-1).split("!")[0]);
                        return "authfail";
                }
                logger.info("id "+id);
                Client tc = new TransactionClient().getClient();
                pmsaUser = tc.getPmsaUser(Long.valueOf(id),getUserEmail());
                return "edit";
        }
        
        public String myProfile() throws TException{
                if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().replace("/","").substring(request.getContextPath().length()-1).split("!")[0])) {
                        logger.info(request.getRequestURI().replace("/","").substring(request.getContextPath().length()-1).split("!")[0]);
                        return "authfail";
                }
                Client tc = new TransactionClient().getClient();
                pmsaUser = tc.getmypmsaprofile(getUserEmail());
                return "pmsa-myprofile";
        }

        public String show() {
                if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().substring(request.getContextPath().length()).split("/")[1])) {
                        logger.info(request.getRequestURI().substring(request.getContextPath().length()).split("/")[1]);
                        return "authfail";
                }
                if (id.equals("pmsa-add-user")){
                        
                        if (referrerEmail==null || referrerEmail.isEmpty()){
                                levels = Arrays.asList("L2","L3");
                                referrerEmail = getUserEmail();
                        }
                        else{
                                levels = Arrays.asList("L3");
                        }
                        
                }
                return id;
        }

        private boolean checkEmptyString(String s){
                if (s==null || s.trim().isEmpty()){
                        return true;
                }
                return false;
        }

        private boolean checkEmail(String email){
                try{
                        InternetAddress ia = new InternetAddress(email);
                        ia.validate();
                }
                catch(Exception e){
                        return false;
                }
                return true;
        }
        
        public String pendingUsers() throws TException{
                Client tc = new TransactionClient().getClient();
                searchResults = tc.getPendingAssociates(getUserEmail());
                setCustomH3("Activation Pending Users");
                return "pmsa-search-results";
        }
        
        public String recentUsers() throws TException{
                Client tc = new TransactionClient().getClient();
                searchResults = tc.getPmsaUsers(getUserEmail());
                setCustomH3("Recently Created Users");
                return "pmsa-search-results";
        }

        private boolean validate(Pmsa pmsa) throws Exception{
                if (checkEmptyString(pmsa.getName())){
                        throw new Exception("Name not valid");
                }
                try{
                        Long.valueOf(pmsa.getPhone());
                }
                catch(Exception e){
                        throw new Exception("Phone number not valid");
                }
                if (checkEmptyString(pmsa.getPhone()) || pmsa.getPhone().length()!=10){
                        throw new Exception("Phone number not valid 10 digit required");
                }
                if (!checkEmail(pmsa.getEmailId())){
                        throw new Exception("Email address not valid");
                }
                if (checkEmptyString(pmsa.getAddress())){
                        throw new Exception("Address not valid");
                }
                if (checkEmptyString(pmsa.getState())){
                        throw new Exception("State not valid");
                }
                if (checkEmptyString(pmsa.getLevel())){
                        throw new Exception("Level not valid");
                }
                if (!checkPincode(pmsa.getPin())){
                        throw new Exception("Pincode not valid");
                }
                return true;
        }

        private boolean checkPincode(String pin) {
                if(pin.trim().length()!=6){
                        return false;
                }
                Long long_pin;
                try{
                        long_pin = Long.valueOf(pin);
                }
                catch(Exception e){
                        return false;
                }
                if (long_pin < 110000 || long_pin >=860000){
                        return false;
                }
                return true;
        }

        public String searchUser() throws TException{
                PmsaSearchFilter searchFilter = new PmsaSearchFilter();
                if (name !=null && !name.trim().isEmpty()){
                        searchFilter.setName(name);
                }
                if (associateEmail !=null && !associateEmail.trim().isEmpty()){
                        searchFilter.setEmailId(associateEmail);
                }
                if (phone !=null && !phone.trim().isEmpty()){
                        searchFilter.setPhone(phone);
                }
                if (code !=null && !code.trim().isEmpty()){
                        searchFilter.setCode(code);
                }
                if (l1Email !=null && !l1Email.trim().isEmpty()){
                        searchFilter.setL1_email(l1Email);
                }
                if (l2Email !=null && !l2Email.trim().isEmpty()){
                        searchFilter.setL2_email(l2Email);
                }
                Client tc = new TransactionClient().getClient();
                searchResults = tc.searchPmsa(searchFilter,getUserEmail());
                return "pmsa-search-results";
        }
        
        public String updateUser(){
                Pmsa pmsa = new Pmsa();
                pmsa.setId(Long.valueOf(pmsa_id));
                pmsa.setName(name);
                pmsa.setPhone(phone);
                pmsa.setEmailId(associateEmail);
                pmsa.setAddress(address.replace("\n", "").replace("\r", ""));
                pmsa.setState(state);
                pmsa.setLevel(level);
                pmsa.setActivated(Boolean.valueOf(activated));
                pmsa.setPin(pincode);
                try {
                        validate(pmsa);
                        try{
                                Client tc = new TransactionClient().getClient();
                                setResult(tc.updatePmsaUser(pmsa, getUserEmail()));
                        }
                        catch(Exception tce){
                                tce.printStackTrace();
                                setResult("Service error plz try again");
                        }
                } catch (Exception e) {
                        setResult(e.getMessage());
                }
                return "pmsa-result"; 
        }

        public String addNewUser(){
                Pmsa pmsa = new Pmsa();
                pmsa.setName(name);
                pmsa.setPhone(phone);
                pmsa.setEmailId(associateEmail);
                pmsa.setAddress(address.replace("\n", "").replace("\r", ""));
                pmsa.setState(state);
                pmsa.setLevel(level);
                pmsa.setActivated(Boolean.valueOf(activated));
                pmsa.setPin(pincode);
                try {
                        validate(pmsa);
                        try{
                                Client tc = new TransactionClient().getClient();
                                setResult(tc.addSalesAssociate(pmsa, referrerEmail, getUserEmail()));
                        }
                        catch(Exception tce){
                                tce.printStackTrace();
                                setResult("Service error plz try again");
                        }
                } catch (Exception e) {
                        setResult(e.getMessage());
                }
                return "pmsa-result"; 
        }

        public String getUserEmail() {
                return session.getAttribute(ReportsUtils.USER_EMAIL).toString();
        }

        public String getId() {
                return id;
        }

        public void setId(String id) {
                this.id = id;
        }


        public String getName() {
                return name;
        }

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

        public String getPhone() {
                return phone;
        }

        public void setPhone(String phone) {
                this.phone = phone;
        }

        public String getAddress() {
                return address;
        }

        public void setAddress(String address) {
                this.address = address;
        }

        public String getState() {
                return state;
        }

        public void setState(String state) {
                this.state = state;
        }

        public String getPincode() {
                return pincode;
        }

        public void setPincode(String pincode) {
                this.pincode = pincode;
        }

        public String getActivated() {
                return activated;
        }

        public void setActivated(String activated) {
                this.activated = activated;
        }

        public String getLevel() {
                return level;
        }

        public void setLevel(String level) {
                this.level = level;
        }

        public String getAssociateEmail() {
                return associateEmail;
        }

        public void setAssociateEmail(String associateEmail) {
                this.associateEmail = associateEmail;
        }

        public void setServletRequest(HttpServletRequest req) {
                this.request = req;
                this.session = req.getSession();        
        }

        @Override
        public void setServletContext(ServletContext arg0) {
                // TODO Auto-generated method stub

        }

        public void setServletResponse(HttpServletResponse response) {
                this.response = response;
        }

        public void setRefererEmail(String refererEmail) {
                this.refererEmail = refererEmail;
        }

        public String getRefererEmail() {
                return refererEmail;
        }

        public String getResult() {
                return result;
        }

        public void setResult(String result) {
                this.result = result;
        }

}