Subversion Repositories SmartDukaan

Rev

Rev 29447 | Rev 30078 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 29447 Rev 30077
Line 5... Line 5...
5
import java.time.LocalTime;
5
import java.time.LocalTime;
6
import java.util.ArrayList;
6
import java.util.ArrayList;
7
import java.util.Arrays;
7
import java.util.Arrays;
8
import java.util.List;
8
import java.util.List;
9
import java.util.Map;
9
import java.util.Map;
-
 
10
import java.util.Map.Entry;
10
import java.util.Set;
11
import java.util.Set;
11
import java.util.stream.Collectors;
12
import java.util.stream.Collectors;
12
 
13
 
13
import javax.servlet.http.HttpServletRequest;
14
import javax.servlet.http.HttpServletRequest;
14
 
15
 
Line 29... Line 30...
29
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30
import com.spice.profitmandi.common.model.CustomRetailer;
31
import com.spice.profitmandi.common.model.CustomRetailer;
31
import com.spice.profitmandi.common.model.ProfitMandiConstants;
32
import com.spice.profitmandi.common.model.ProfitMandiConstants;
32
import com.spice.profitmandi.common.web.util.ResponseSender;
33
import com.spice.profitmandi.common.web.util.ResponseSender;
33
import com.spice.profitmandi.dao.entity.auth.AuthUser;
34
import com.spice.profitmandi.dao.entity.auth.AuthUser;
-
 
35
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionPlan;
-
 
36
import com.spice.profitmandi.dao.entity.auth.PartnerSecondaryPlan;
-
 
37
import com.spice.profitmandi.dao.entity.cs.Position;
34
import com.spice.profitmandi.dao.entity.dtr.User;
38
import com.spice.profitmandi.dao.entity.dtr.User;
35
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
39
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
36
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
40
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
37
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
41
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
38
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
42
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
Line 43... Line 47...
43
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
47
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
44
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
48
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
45
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
49
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
46
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
50
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
47
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
51
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
-
 
52
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
-
 
53
import com.spice.profitmandi.dao.model.PartnerSecondaryPlanModel;
-
 
54
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
-
 
55
import com.spice.profitmandi.dao.model.TargetModel;
48
import com.spice.profitmandi.dao.model.UserCart;
56
import com.spice.profitmandi.dao.model.UserCart;
49
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
57
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
-
 
58
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
-
 
59
import com.spice.profitmandi.dao.repository.auth.PartnerSecondaryPlanRepository;
50
import com.spice.profitmandi.dao.repository.cs.CsService;
60
import com.spice.profitmandi.dao.repository.cs.CsService;
-
 
61
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
51
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
62
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
52
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
63
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
53
import com.spice.profitmandi.dao.repository.dtr.FranchiseeVisitRepository;
64
import com.spice.profitmandi.dao.repository.dtr.FranchiseeVisitRepository;
54
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
65
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
55
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
66
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
56
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
67
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
57
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
68
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
58
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
69
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
-
 
70
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
-
 
71
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
-
 
72
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
59
import com.spice.profitmandi.service.user.RetailerService;
73
import com.spice.profitmandi.service.user.RetailerService;
60
import com.spice.profitmandi.service.user.StoreTimelineTatService;
74
import com.spice.profitmandi.service.user.StoreTimelineTatService;
61
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
75
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
62
import com.spice.profitmandi.web.res.Partner;
76
import com.spice.profitmandi.web.res.Partner;
63
 
77
 
Line 164... Line 178...
164
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
178
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
165
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
179
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
166
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
180
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
167
		List<Lead> leads = null;
181
		List<Lead> leads = null;
168
		if (status.equals(LeadStatus.followUp)) {
182
		if (status.equals(LeadStatus.followUp)) {
-
 
183
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()),
169
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()), LocalDate.now().atStartOfDay().minusDays(30), LocalDate.now().plusDays(3).atTime(LocalTime.MAX));
184
					LocalDate.now().atStartOfDay().minusDays(30), LocalDate.now().plusDays(3).atTime(LocalTime.MAX));
170
		} else {
185
		} else {
171
			leads = leadRepository.selectByAssignAuthIdAndStatus(authUser.getId(), status);
186
			leads = leadRepository.selectByAssignAuthIdAndStatus(authUser.getId(), status);
172
		}
187
		}
173
 
188
 
174
		return responseSender.ok(leads);
189
		return responseSender.ok(leads);
Line 281... Line 296...
281
 
296
 
282
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
297
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
283
 
298
 
284
		Map<String, Set<String>> storeGuyMap = csService.getAuthUserPartnerEmailMapping();
299
		Map<String, Set<String>> storeGuyMap = csService.getAuthUserPartnerEmailMapping();
285
 
300
 
286
		Set<String> emails = storeGuyMap.get(authUser.getEmailId());
301
		Set<String> emails = storeGuyMap.get("ankit.bhatia@smartdukaan.com");
287
		LOGGER.info("emails" + emails);
302
		LOGGER.info("emails" + emails);
288
		List<User> users = userRepository.selectAllByEmailIds(new ArrayList<>(emails));
303
		List<User> users = userRepository.selectAllByEmailIds(new ArrayList<>(emails));
289
		List<Partner> partners = new ArrayList<>();
304
		List<Partner> partners = new ArrayList<>();
290
		for (User user : users) {
305
		for (User user : users) {
291
 
306
 
Line 526... Line 541...
526
		LOGGER.info("status" + status);
541
		LOGGER.info("status" + status);
527
 
542
 
528
		return responseSender.ok(status);
543
		return responseSender.ok(status);
529
 
544
 
530
	}
545
	}
-
 
546
 
-
 
547
	@Autowired
-
 
548
	private com.spice.profitmandi.service.transaction.TransactionService transactionService;
-
 
549
 
-
 
550
	@Autowired
-
 
551
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
-
 
552
 
-
 
553
	@Autowired
-
 
554
	private OrderRepository orderRepository;
-
 
555
 
-
 
556
	@Autowired
-
 
557
	private PositionRepository positionRepository;
-
 
558
 
-
 
559
	@Autowired
-
 
560
	private UserWalletRepository userWalletRepository;
-
 
561
 
-
 
562
	@Autowired
-
 
563
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
-
 
564
 
-
 
565
	@Autowired
-
 
566
	private PartnerSecondaryPlanRepository partnerSecondaryPlanRepository;
-
 
567
 
-
 
568
	@RequestMapping(value = "/getPartnerTarget", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
-
 
569
	@ApiImplicitParams({
-
 
570
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
-
 
571
	public ResponseEntity<?> getPartnerTarget(HttpServletRequest request,
-
 
572
			@RequestParam(name = "gmailId") String gmailId) throws ProfitMandiBusinessException {
-
 
573
 
-
 
574
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
-
 
575
 
-
 
576
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
-
 
577
 
-
 
578
		Set<Integer> fofoIds = storeGuyMap.get("ankit.bhatia@smartdukaan.com");
-
 
579
 
-
 
580
		if (fofoIds == null) {
-
 
581
			List<Position> positions1 = positionRepository.selectAll(authUser.getId());
-
 
582
			if (positions1.stream().filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_MASTER)
-
 
583
					.count() > 0) {
-
 
584
				fofoIds = csService.getPositionCustomRetailerMap(positions1).values().stream().flatMap(x -> x.stream())
-
 
585
						.map(x -> x.getPartnerId()).collect(Collectors.toSet());
-
 
586
			}
-
 
587
		}
-
 
588
 
-
 
589
		List<String> brands = Arrays.asList("Vivo", "Samsung", "Oppo", "Itel", "Others");
-
 
590
		float totalPartnerTargetSecondary = 0;
-
 
591
		float totalPartnerTargetCollection = 0;
-
 
592
 
-
 
593
		float totalPartnerAchievementSecondary = 0;
-
 
594
		float totalPartnerAchievementCollection = 0;
-
 
595
		TargetModel tm = new TargetModel();
-
 
596
 
-
 
597
		List<PartnerTargetAchievementModel> ptams = new ArrayList<>();
-
 
598
 
-
 
599
		if (fofoIds.size() > 0 && fofoIds != null) {
-
 
600
			List<Integer> fofoIdList = new ArrayList<>(fofoIds);
-
 
601
 
-
 
602
			LocalDateTime startDate = LocalDate.now().atStartOfDay();
-
 
603
 
-
 
604
			Map<Integer, CustomRetailer> customRetailers = retailerService.getFofoRetailers(fofoIdList);
-
 
605
 
-
 
606
			Map<Integer, PartnerCollectionPlanModel> collectionPlans = userWalletRepository
-
 
607
					.getPartnerWiseTargetCollections(fofoIdList, startDate).stream()
-
 
608
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
-
 
609
 
-
 
610
			LOGGER.info("collectionPlans {}", collectionPlans);
-
 
611
 
-
 
612
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
-
 
613
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate).stream()
-
 
614
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
-
 
615
 
-
 
616
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
-
 
617
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
-
 
618
				int fofoId = customRetailerEntry.getKey();
-
 
619
				CustomRetailer customRetailer = customRetailerEntry.getValue();
-
 
620
				float totalSecondaryPlan = 0;
-
 
621
				float totalSecondaryAchivement = 0;
-
 
622
 
-
 
623
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
-
 
624
				ptam.setFofoId(fofoId);
-
 
625
				ptam.setBusinessName(customRetailer.getBusinessName());
-
 
626
 
-
 
627
				if (collectionPlans.get(fofoId) != null) {
-
 
628
					totalPartnerTargetCollection += collectionPlans.get(fofoId).getTargetPlan();
-
 
629
 
-
 
630
					totalPartnerAchievementCollection += collectionPlans.get(fofoId).getAchievementPlan();
-
 
631
					ptam.setCollectionTarget(collectionPlans.get(fofoId).getTargetPlan());
-
 
632
					ptam.setCollectionAchievement(collectionPlans.get(fofoId).getAchievementPlan());
-
 
633
				}
-
 
634
 
-
 
635
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
-
 
636
				if (partnerSecondayPlans.get(fofoId) != null) {
-
 
637
					long otherBrandSecondary = 0;
-
 
638
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
-
 
639
						if (!brands.contains(pspm.getBrand())) {
-
 
640
							otherBrandSecondary += pspm.getAchievementPlan();
-
 
641
						} else {
-
 
642
							otherPartnerSecondaryPlanModel = pspm;
-
 
643
						}
-
 
644
						totalSecondaryPlan += pspm.getTargetPlan();
-
 
645
						totalSecondaryAchivement += pspm.getAchievementPlan();
-
 
646
					}
-
 
647
					if (otherPartnerSecondaryPlanModel != null) {
-
 
648
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
-
 
649
					}
-
 
650
					Map<String, PartnerSecondaryPlanModel> secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
-
 
651
							.filter(x -> brands.contains(x.getBrand()))
-
 
652
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
-
 
653
 
-
 
654
					if (secondaryModelMap.containsKey("Others")) {
-
 
655
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
-
 
656
						psp.setAchievementPlan(otherBrandSecondary);
-
 
657
					} else {
-
 
658
						secondaryModelMap.put("Others",
-
 
659
								new PartnerSecondaryPlanModel(fofoId, "Others", 0, otherBrandSecondary));
-
 
660
					}
-
 
661
					for (String brand : brands) {
-
 
662
 
-
 
663
						if (!secondaryModelMap.containsKey(brand)) {
-
 
664
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, 0, 0));
-
 
665
						}
-
 
666
 
-
 
667
					}
-
 
668
 
-
 
669
					ptam.setPartnerSecondaryModel(secondaryModelMap);
-
 
670
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
-
 
671
 
-
 
672
					totalPartnerTargetSecondary += totalSecondaryPlan;
-
 
673
 
-
 
674
					totalPartnerAchievementSecondary += totalSecondaryAchivement;
-
 
675
 
-
 
676
					ptam.setTotalSecondaryAchivewment(totalSecondaryAchivement);
-
 
677
					ptams.add(ptam);
-
 
678
 
-
 
679
				}
-
 
680
 
-
 
681
			}
-
 
682
 
-
 
683
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
-
 
684
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
-
 
685
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
-
 
686
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
-
 
687
			tm.setTargetAchievement(ptams);
-
 
688
 
-
 
689
		}
-
 
690
 
-
 
691
		return responseSender.ok(tm);
-
 
692
 
-
 
693
	}
-
 
694
 
-
 
695
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
-
 
696
	@ApiImplicitParams({
-
 
697
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
-
 
698
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
-
 
699
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
-
 
700
 
-
 
701
		AuthUser authUser = authRepository.selectByGmailId("ankit.bhatia@shop2020.in");
-
 
702
 
-
 
703
		PartnerCollectionPlan pcp = partnerCollectionPlanRepository.selectByLocalDate(LocalDate.now(),
-
 
704
				ptam.getFofoId());
-
 
705
		LOGGER.info("pcp" + pcp);
-
 
706
 
-
 
707
		if (pcp == null) {
-
 
708
			if (ptam.getCollectionTarget() > 0) {
-
 
709
				PartnerCollectionPlan partnerCollectionPlan = new PartnerCollectionPlan();
-
 
710
				partnerCollectionPlan.setAuthId(authUser.getId());
-
 
711
				partnerCollectionPlan.setFofoId(ptam.getFofoId());
-
 
712
				partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
-
 
713
				partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
-
 
714
				partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
-
 
715
				partnerCollectionPlanRepository.persist(partnerCollectionPlan);
-
 
716
			}
-
 
717
		}
-
 
718
 
-
 
719
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
-
 
720
			if (pspm.getValue().getTargetPlan() > 0) {
-
 
721
				PartnerSecondaryPlanModel plan = pspm.getValue();
-
 
722
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
-
 
723
						LocalDate.now(), ptam.getFofoId());
-
 
724
				LOGGER.info("psp" + psp);
-
 
725
				if (psp == null)
-
 
726
					psp = new PartnerSecondaryPlan();
-
 
727
				psp.setAuthId(authUser.getId());
-
 
728
				psp.setBrand(pspm.getKey());
-
 
729
				psp.setFofoId(pspm.getValue().getFofoId());
-
 
730
				psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
-
 
731
				psp.setCreateTimestamp(LocalDateTime.now());
-
 
732
				psp.setUpdatedTimestamp(LocalDateTime.now());
-
 
733
				partnerSecondaryPlanRepository.persist(psp);
-
 
734
			}
-
 
735
		}
-
 
736
 
-
 
737
		return responseSender.ok(true);
-
 
738
	}
-
 
739
 
531
}
740
}
532
741