Subversion Repositories SmartDukaan

Rev

Rev 25979 | Rev 25989 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.spice.profitmandi.web.controller;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.spice.profitmandi.dao.entity.auth.AuthUser;
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
import com.spice.profitmandi.dao.entity.user.Lead;
import com.spice.profitmandi.dao.entity.user.LeadActivity;
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
import com.spice.profitmandi.web.model.LoginDetails;
import com.spice.profitmandi.web.util.CookiesProcessor;
import com.spice.profitmandi.web.util.MVCResponseSender;

@Controller
@Transactional(rollbackOn = Throwable.class)
public class LeadController {
        private static final Logger LOGGER = LogManager.getLogger(LeadController.class);

        @Autowired
        private LeadRepository leadRepository;

        @Autowired
        private LeadActivityRepository leadActivityRepository;

        @Autowired
        private StateRepository stateRepository;

        @Autowired
        private AuthRepository authRepository;

        @Autowired
        private CookiesProcessor cookiesProcessor;

        @Autowired
        private MVCResponseSender mvcResponseSender;

        @RequestMapping(value = "/getOpenLead", method = RequestMethod.GET)
        public String getOpenLead(HttpServletRequest request, Model model) throws Exception {
                List<Lead> leads = leadRepository.selectAllByStatus(LeadStatus.followUp);
                List<Integer> authIds = new ArrayList<>();
                if (!leads.isEmpty()) {

                        for (Lead lead : leads) {
                                authIds.add(lead.getAssignTo());
                        }
                        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
                                        .collect(Collectors.toMap(x -> x.getId(), x -> x));

                        model.addAttribute("lead", leads);
                        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);

                } else {
                        model.addAttribute("lead", leads);
                }

                List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName())
                                .collect(Collectors.toList());
                List<AuthUser> authUsers = authRepository.selectAllActiveUser();
                model.addAttribute("stateNames", stateNames);
                model.addAttribute("authUsers", authUsers);

                return "lead";
        }

        @RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
        public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
                List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
                model.addAttribute("leadActivity", leadActivity);
                return "lead_activity_modal";
        }

        @RequestMapping(value = "/createLead", method = RequestMethod.POST)
        public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest,
                        Model model) throws Exception {
                LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
                LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
                Lead lead = new Lead();
                lead.setFirstName(createRefferalRequest.getFirstName());
                lead.setLastName(createRefferalRequest.getLastName());
                lead.setLeadMobile(createRefferalRequest.getMobile());
                lead.setState(createRefferalRequest.getState());
                lead.setCity(createRefferalRequest.getCity());
                lead.setAddress(createRefferalRequest.getAddress());
                lead.setCreatedTimestamp(LocalDateTime.now());
                lead.setUpdatedTimestamp(LocalDateTime.now());
                lead.setStatus(createRefferalRequest.getStatus());
                lead.setAssignTo(createRefferalRequest.getAssignTo());
                lead.setSource(createRefferalRequest.getSource());
                // change
                AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
                String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
                lead.setCreatedBy(authUserName);
                lead.setAuthId(authUser.getId());

                leadRepository.persist(lead);
                LeadActivity leadActivity = new LeadActivity();
                leadActivity.setLeadId(lead.getId());
                leadActivity.setRemark(createRefferalRequest.getRemark());

                if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
                        leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
                } else {
                        leadActivity.setSchelduleTimestamp(null);
                }
                leadActivity.setCreatedTimestamp(LocalDateTime.now());
                leadActivityRepository.persist(leadActivity);
                model.addAttribute("response", mvcResponseSender.createResponseString(true));
                return "response";

        }

        @RequestMapping(value = "/editLead", method = RequestMethod.POST)
        public String EditLead(HttpServletRequest request, @RequestParam int assignTo, @RequestParam String remark,
                        @RequestParam int leadId, Model model) throws Exception {

                LeadActivity leadActivity = new LeadActivity();
                leadActivity.setLeadId(leadId);
                leadActivity.setRemark(remark);
                leadActivity.setCreatedTimestamp(LocalDateTime.now());
                leadActivityRepository.persist(leadActivity);
                Lead lead = leadRepository.selectById(leadId);
                lead.setAssignTo(assignTo);
                lead.setUpdatedTimestamp(LocalDateTime.now());

                model.addAttribute("response", mvcResponseSender.createResponseString(true));
                return "response";

        }
}