Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

package com.spice.profitmandi.web.v2.controller;

import com.spice.profitmandi.common.enumuration.ActivationType;
import com.spice.profitmandi.dao.enumuration.dtr.CommunicationType;
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeActivityStatus;
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
import com.spice.profitmandi.dao.enumuration.dtr.VisitStatus;
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
import com.spice.profitmandi.web.controller.LeadController;
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
import com.spice.profitmandi.web.req.RbmSalesRatingRequest;
import com.spice.profitmandi.web.v2.response.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;

@RestController
@RequestMapping("/v2")
public class V2LeadController extends V2BaseController {

    @Autowired
    private LeadController leadController;

    @PostMapping("/lead")
    public ResponseEntity<ApiResponse<?>> LeadUser(@RequestBody CreateRefferalRequest createRefferalRequest) throws Throwable {
        return wrapResponse(leadController.LeadUser(createRefferalRequest));
    }

    @GetMapping("/lead-description")
    public ResponseEntity<ApiResponse<?>> leadDescription(HttpServletRequest request,
                                                          @RequestParam(name = "gmailId") String gmailId,
                                                          @RequestParam(name = "status") LeadStatus status) throws Throwable {
        return wrapResponse(leadController.leadDescription(request, gmailId, status));
    }

    @GetMapping("/getlead")
    public ResponseEntity<ApiResponse<?>> getLead(HttpServletRequest request,
                                                  @RequestParam(name = "id") int id) throws Throwable {
        return wrapResponse(leadController.getLead(request, id));
    }

    @GetMapping("/check-existing-lead")
    public ResponseEntity<ApiResponse<?>> getLeadByMobile(HttpServletRequest request,
                                                          @RequestParam(name = "mobile") String mobile) throws Throwable {
        return wrapResponse(leadController.getLeadByMobile(request, mobile));
    }

    @PostMapping("/leadUpdate")
    public ResponseEntity<ApiResponse<?>> leadUpdate(HttpServletRequest request,
                                                     @RequestParam(name = "id") int id,
                                                     @RequestParam(name = "status") LeadStatus status,
                                                     @RequestParam(name = "colorCheck") Boolean colorCheck,
                                                     @RequestParam(name = "remark") String remark,
                                                     @RequestParam(name = "reason") String reason,
                                                     @RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp,
                                                     @RequestParam(name = "closureTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime closureTimestamp,
                                                     @RequestParam(name = "communicationType") CommunicationType communicationType) throws Throwable {
        return wrapResponse(leadController.leadUpdate(request, id, status, colorCheck, remark, reason, schelduleTimestamp, closureTimestamp, communicationType));
    }

    @PostMapping("/newLead")
    public ResponseEntity<ApiResponse<?>> newLead(HttpServletRequest request,
                                                  @RequestBody CreateRefferalRequest createRefferalRequest) throws Throwable {
        return wrapResponse(leadController.newLead(request, createRefferalRequest));
    }

    @GetMapping("/getPartnersList")
    public ResponseEntity<ApiResponse<?>> getPartners(HttpServletRequest request,
                                                      @RequestParam(name = "gmailId") String gmailId) throws Throwable {
        return wrapResponse(leadController.getPartners(request, gmailId));
    }

    @PostMapping("/franchise-first-visit")
    public ResponseEntity<ApiResponse<?>> FranchiseFirstVisit(HttpServletRequest request,
                                                              @RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Throwable {
        return wrapResponse(leadController.FranchiseFirstVisit(request, createFranchiseeRequest));
    }

    @PostMapping("/franchise-visit")
    public ResponseEntity<ApiResponse<?>> FranchiseVisit(HttpServletRequest request,
                                                         @RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Throwable {
        return wrapResponse(leadController.FranchiseVisit(request, createFranchiseeRequest));
    }

    @GetMapping("/getFranchiseVisit")
    public ResponseEntity<ApiResponse<?>> getFranchiseVisit(HttpServletRequest request,
                                                            @RequestParam(name = "gmailId") String gmailId,
                                                            @RequestParam(name = "status") FranchiseeVisitStatus status,
                                                            @RequestParam(name = "offset", defaultValue = "0") int offset,
                                                            @RequestParam(name = "limit", defaultValue = "10") int limit) throws Throwable {
        return wrapResponse(leadController.getFranchiseVisit(request, gmailId, status, offset, limit));
    }

    @GetMapping("/getFranchiseActivity")
    public ResponseEntity<ApiResponse<?>> getFranchiseActivity(HttpServletRequest request,
                                                               @RequestParam(name = "id") int id) throws Throwable {
        return wrapResponse(leadController.getFranchiseActivity(request, id));
    }

    @GetMapping("/getFranchiseeInfo")
    public ResponseEntity<ApiResponse<?>> getFranchiseeInfo(HttpServletRequest request,
                                                            @RequestParam(name = "id") int id) throws Throwable {
        return wrapResponse(leadController.getFranchiseeInfo(request, id));
    }

    @PostMapping("/franchise-visit-update")
    public ResponseEntity<ApiResponse<?>> franchiseVisitUpdate(HttpServletRequest request,
                                                               @RequestParam(name = "id") int id,
                                                               @RequestParam(name = "action") FranchiseeActivityStatus action,
                                                               @RequestParam(name = "resolution") String resolution,
                                                               @RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp) throws Throwable {
        return wrapResponse(leadController.franchiseVisitUpdate(request, id, action, resolution, schelduleTimestamp));
    }

    @GetMapping("/onBoardingTimelineStatus")
    public ResponseEntity<ApiResponse<?>> onBoardingTimelineStatus(HttpServletRequest request, Model model) throws Throwable {
        return wrapResponse(leadController.onBoardingTimelineStatus(request, model));
    }

    @GetMapping("/purchaseExist")
    public ResponseEntity<ApiResponse<?>> purchaseExist(HttpServletRequest request) throws Throwable {
        return wrapResponse(leadController.purchaseExist(request));
    }

    @GetMapping("/onBoardingTimelineVisibility")
    public ResponseEntity<ApiResponse<?>> onBoardingTimelineVisibility(HttpServletRequest request, Model model) throws Throwable {
        return wrapResponse(leadController.onBoardingTimelineVisibility(request, model));
    }

    @GetMapping("/getPartnerTarget")
    public ResponseEntity<ApiResponse<?>> getPartnerTarget(HttpServletRequest request,
                                                           @RequestParam String gmailId,
                                                           @RequestParam String dayValue,
                                                           @RequestParam ActivationType activationType) throws Throwable {
        return wrapResponse(leadController.getPartnerTarget(request, gmailId, dayValue, activationType));
    }

    @GetMapping("/getInactivePartnerTarget")
    public ResponseEntity<ApiResponse<?>> getInactivePartnerTarget(HttpServletRequest request,
                                                                    @RequestParam String gmailId,
                                                                    @RequestParam String dayValue,
                                                                    @RequestParam ActivationType activationType) throws Throwable {
        return wrapResponse(leadController.getInactivePartnerTarget(request, gmailId, dayValue, activationType));
    }

    @PostMapping("/target")
    public ResponseEntity<ApiResponse<?>> createPartnerTarget(HttpServletRequest request,
                                                              @RequestBody PartnerTargetAchievementModel ptam) throws Throwable {
        return wrapResponse(leadController.createPartnerTarget(request, ptam));
    }

    @PostMapping("/uploadFranchiseeVisit")
    public ResponseEntity<ApiResponse<?>> readCsvFileAndSetLead(HttpServletRequest request,
                                                                @RequestPart MultipartFile multipartFile) throws Throwable {
        return wrapResponse(leadController.readCsvFileAndSetLead(request, multipartFile));
    }

    @GetMapping("/downloadFranchiseeVisitTemplate")
    public ResponseEntity<?> downloadFranchiseeVisitTemplate(HttpServletRequest request) throws Throwable {
        // Returns byte[] with CSV headers - pass through directly, cannot wrap
        return leadController.downloadFranchiseeVisitTemplate(request);
    }

    @PostMapping("/markVisitAttendance")
    public ResponseEntity<ApiResponse<?>> markVisitAttendance(HttpServletRequest request,
                                                              @RequestParam(name = "id") int id) throws Throwable {
        return wrapResponse(leadController.markVisitAttendance(request, id));
    }

    @GetMapping("/getVisitRequests")
    public ResponseEntity<ApiResponse<?>> getVisitRequests(HttpServletRequest request,
                                                           @RequestParam(name = "gmailId") String gmailId,
                                                           Model model) throws Throwable {
        return wrapResponse(leadController.getVisitRequests(request, gmailId, model));
    }

    @PostMapping("/visitRequest")
    public ResponseEntity<ApiResponse<?>> visitRequest(HttpServletRequest request,
                                                       @RequestParam(name = "gmailId") String gmailId,
                                                       @RequestParam(name = "visitId") int visitId,
                                                       @RequestParam(name = "status") VisitStatus status,
                                                       Model model) throws Throwable {
        return wrapResponse(leadController.visitRequest(request, gmailId, visitId, status, model));
    }

    @PostMapping("/rbmRating")
    public ResponseEntity<ApiResponse<?>> rbmRating(HttpServletRequest request,
                                                    @RequestBody RbmSalesRatingRequest rbmSalesRatingRequest,
                                                    Model model) throws Throwable {
        return wrapResponse(leadController.rbmRating(request, rbmSalesRatingRequest, model));
    }
}