Subversion Repositories SmartDukaan

Rev

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

Rev 27389 Rev 27391
Line 86... Line 86...
86
	private static final Logger LOGGER = LogManager.getLogger(SchemeController.class);
86
	private static final Logger LOGGER = LogManager.getLogger(SchemeController.class);
87
 
87
 
88
	@Autowired
88
	@Autowired
89
	private SchemeService schemeService;
89
	private SchemeService schemeService;
90
 
90
 
91
	
-
 
92
	@Autowired
91
	@Autowired
93
	private StateGstRateRepository stateGstRateRepository;
92
	private StateGstRateRepository stateGstRateRepository;
94
	
93
 
95
	@Autowired
94
	@Autowired
96
	private SchemeRepository schemeRepository;
95
	private SchemeRepository schemeRepository;
97
 
96
 
98
	@Autowired
97
	@Autowired
99
	private SchemeItemRepository schemeItemRepository;
98
	private SchemeItemRepository schemeItemRepository;
Line 121... Line 120...
121
	private RoleRepository roleRepository;
120
	private RoleRepository roleRepository;
122
 
121
 
123
	@Autowired
122
	@Autowired
124
	private ResponseSender<?> responseSender;
123
	private ResponseSender<?> responseSender;
125
 
124
 
126
	@Autowired
-
 
127
	private OfferRepository offerRepository;
-
 
128
 
-
 
129
	@Autowired
-
 
130
	private OfferMarginRepository offerMarginRepository;
-
 
131
 
-
 
132
	@Autowired
-
 
133
	private FofoStoreRepository fofoStoreRepository;
-
 
134
 
-
 
135
	@Autowired
-
 
136
	private OfferPartnerRepository offerPartnerRepository;
-
 
137
 
-
 
138
	@Autowired
-
 
139
	private ItemRepository itemRepository;
-
 
140
 
125
 
141
	@Autowired
-
 
142
	private Gson gson;
-
 
143
 
-
 
144
	@Autowired
-
 
145
	private RetailerService retailerService;
-
 
146
 
-
 
147
	@Autowired
-
 
148
	private Mongo mongoClient;
-
 
149
 
126
 
150
	@Autowired
127
	@Autowired
151
	private PartnerTypeChangeService partnerTypeChangeService;
128
	private PartnerTypeChangeService partnerTypeChangeService;
152
 
129
 
153
	@RequestMapping(value = "/createScheme", method = RequestMethod.GET)
130
	@RequestMapping(value = "/createScheme", method = RequestMethod.GET)
Line 340... Line 317...
340
			partnerType = partnerTypeChangeService.getTypeOnDate(loginDetails.getFofoId(), LocalDate.now());
317
			partnerType = partnerTypeChangeService.getTypeOnDate(loginDetails.getFofoId(), LocalDate.now());
341
		}
318
		}
342
		if (!(searchTerm.equals("")) && searchItem.equals("")) {
319
		if (!(searchTerm.equals("")) && searchItem.equals("")) {
343
			schemes = schemeRepository.selectBySearchTerm(searchTerm, offset, limit);
320
			schemes = schemeRepository.selectBySearchTerm(searchTerm, offset, limit);
344
			if (!(schemes.size() == 0)) {
321
			if (!(schemes.size() == 0)) {
345
				for(Scheme scheme  : schemes) {
322
				for (Scheme scheme : schemes) {
346
					if(scheme.getAmountType().equals(AmountType.PERCENTAGE)) {
323
					if (scheme.getAmountType().equals(AmountType.PERCENTAGE)) {
347
						scheme.setAmountModel(scheme.getAmount() + "%");
324
						scheme.setAmountModel(scheme.getAmount() + "%");
348
					} else {
325
					} else {
349
						scheme.setAmountModel(scheme.getAmount() + "");
326
						scheme.setAmountModel(scheme.getAmount() + "");
350
					}
327
					}
351
				}
328
				}
352
				
329
 
353
				size = schemeRepository.selectAllCount();
330
				size = schemeRepository.selectAllCount();
354
				LOGGER.info("schemes" + schemes);
331
				LOGGER.info("schemes" + schemes);
355
				model.addAttribute("schemes", schemes);
332
				model.addAttribute("schemes", schemes);
356
				model.addAttribute("start", offset + 1);
333
				model.addAttribute("start", offset + 1);
357
				model.addAttribute("size", size);
334
				model.addAttribute("size", size);
Line 372... Line 349...
372
			if (!(searchItem.equals("")) && searchTerm.equals("")) {
349
			if (!(searchItem.equals("")) && searchTerm.equals("")) {
373
				itemId = Integer.parseInt(searchItem);
350
				itemId = Integer.parseInt(searchItem);
374
			}
351
			}
375
			schemes = schemeService.selectSchemeByPartnerType(partnerType, itemId, isAdmin, offset, limit);
352
			schemes = schemeService.selectSchemeByPartnerType(partnerType, itemId, isAdmin, offset, limit);
376
			TagListing tagListing = tagListingRepository.selectByItemId(itemId);
353
			TagListing tagListing = tagListingRepository.selectByItemId(itemId);
377
			for(Scheme scheme  : schemes) {
354
			for (Scheme scheme : schemes) {
378
				if(scheme.getAmountType().equals(AmountType.PERCENTAGE)) {
355
				if (scheme.getAmountType().equals(AmountType.PERCENTAGE)) {
379
					float taxRate = stateGstRateRepository.getIgstTaxRate(Arrays.asList(itemId)).get(itemId);
356
					float taxRate = stateGstRateRepository.getIgstTaxRate(Arrays.asList(itemId)).get(itemId);
380
					float taxableSellingPrice = tagListing.getSellingPrice() / (1 + taxRate / 100);
357
					float taxableSellingPrice = tagListing.getSellingPrice() / (1 + taxRate / 100);
381
					float amount = taxableSellingPrice * scheme.getAmount() / 100;
358
					float amount = taxableSellingPrice * scheme.getAmount() / 100;
382
							scheme.setAmountModel(amount +" ("+ scheme.getAmount() + "%)");
359
					scheme.setAmountModel(amount + " (" + scheme.getAmount() + "%)");
383
				} else {
360
				} else {
384
					scheme.setAmountModel(scheme.getAmount() + "");
361
					scheme.setAmountModel(scheme.getAmount() + "");
385
				}
362
				}
386
			}
363
			}
387
			size = schemeService.selectSchemeCount(partnerType, itemId, isAdmin);
364
			size = schemeService.selectSchemeCount(partnerType, itemId, isAdmin);
Line 662... Line 639...
662
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
639
		model.addAttribute("roleType", roleManager.isAdmin(loginDetails.getRoleIds()));
663
		return "schemes-paginated";
640
		return "schemes-paginated";
664
 
641
 
665
	}
642
	}
666
 
643
 
667
	@RequestMapping(value = "/getCreateOffer", method = RequestMethod.GET)
-
 
668
	public String getCreateOffer(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
669
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
670
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
671
				.collect(Collectors.toList());
-
 
672
 
-
 
673
		List<String> brands = mongoClient.getMongoBrands(loginDetails.getFofoId(), null, 3).stream()
-
 
674
				.map(x -> (String) x.get("name")).collect(Collectors.toList());
-
 
675
 
-
 
676
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
-
 
677
 
-
 
678
		model.addAttribute("customRetailersMap", customRetailersMap);
-
 
679
		model.addAttribute("itemCriteriaType", ItemCriteriaType.values());
-
 
680
		model.addAttribute("brands", brands);
-
 
681
		model.addAttribute("partnerCategories", PartnerType.values());
-
 
682
		return "scheme_offer";
-
 
683
 
-
 
684
	}
-
 
685
 
-
 
686
	@RequestMapping(value = "/createOffer", method = RequestMethod.POST)
-
 
687
	public String createOffer(HttpServletRequest request, @RequestBody CreateOfferRequest createOfferRequest,
-
 
688
			Model model) throws Exception {
-
 
689
		LOGGER.info("createOfferRequest" + createOfferRequest.getAmountOffer());
-
 
690
 
-
 
691
		Offer offer = new Offer();
-
 
692
		offer.setName(createOfferRequest.getName());
-
 
693
		offer.setDescription(createOfferRequest.getDescription());
-
 
694
		offer.setItemCreteria(createOfferRequest.getItemCriteria());
-
 
695
		offer.setTargetType(createOfferRequest.getTargetType());
-
 
696
		offer.setAmountType(createOfferRequest.getAmountType());
-
 
697
		offer.setStartDateTime(createOfferRequest.getStartDate());
-
 
698
		offer.setEndDateTime(createOfferRequest.getEndDate());
-
 
699
		offer.setPrice(createOfferRequest.getPrice());
-
 
700
		offer.setCreatedTimestamp(LocalDateTime.now());
-
 
701
		offer.setSchemeType(createOfferRequest.getSchemeType());
-
 
702
		offer.setCriteria(createOfferRequest.getCriteria());
-
 
703
		offer.setPartnerType(createOfferRequest.getPartnerType());
-
 
704
 
-
 
705
		if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
-
 
706
			ItemTypeParams itemTypeParams = new ItemTypeParams();
-
 
707
			itemTypeParams.setCatalogId(createOfferRequest.getCatalogIds());
-
 
708
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
-
 
709
			sit.setItemTypeParams(itemTypeParams);
-
 
710
			offer.setItemParam(gson.toJson(itemTypeParams));
-
 
711
		} else if (createOfferRequest.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
-
 
712
			ItemTypeParams itemTypeParams = new ItemTypeParams();
-
 
713
			itemTypeParams.setBrands(createOfferRequest.getBrands());
-
 
714
			SimpleItemType sit = new SimpleItemType(itemTypeParams);
-
 
715
			sit.setItemTypeParams(itemTypeParams);
-
 
716
			offer.setItemParam(gson.toJson(itemTypeParams));
-
 
717
		}
-
 
718
 
-
 
719
		offerRepository.persist(offer);
-
 
720
		if (createOfferRequest.getFofoIds().isEmpty()) {
-
 
721
			List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
722
					.collect(Collectors.toList());
-
 
723
			for (Integer fofoId : fofoIds) {
-
 
724
				PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fofoId,
-
 
725
						offer.getStartDateTime().toLocalDate());
-
 
726
				if (offer.getPartnerType().equals(partnerType)) {
-
 
727
					LOGGER.info("partnerType" + partnerType);
-
 
728
					LOGGER.info("fofoId" + fofoId);
-
 
729
 
-
 
730
					OfferPartner op = new OfferPartner();
-
 
731
					op.setFofoId(fofoId);
-
 
732
					op.setOfferId(offer.getId());
-
 
733
					offerPartnerRepository.persist(op);
-
 
734
				}
-
 
735
 
-
 
736
			}
-
 
737
		}
-
 
738
 
-
 
739
		else {
-
 
740
 
-
 
741
			for (Integer fofoId : createOfferRequest.getFofoIds()) {
-
 
742
				OfferPartner op = new OfferPartner();
-
 
743
				op.setFofoId(fofoId);
-
 
744
				op.setOfferId(offer.getId());
-
 
745
				offerPartnerRepository.persist(op);
-
 
746
			}
-
 
747
		}
-
 
748
		for (AmountMarginModel amm : createOfferRequest.getAmountOffer()) {
-
 
749
			Offermargin om = new Offermargin();
-
 
750
			om.setValue(amm.getValue());
-
 
751
			om.setMargin(amm.getMargin());
-
 
752
			om.setOfferId(offer.getId());
-
 
753
			offerMarginRepository.persist(om);
-
 
754
		}
-
 
755
 
-
 
756
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
-
 
757
		return "response";
-
 
758
 
-
 
759
	}
-
 
760
 
-
 
761
	@RequestMapping(value = "/getOffers", method = RequestMethod.GET)
-
 
762
	public String createOffer(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
763
			@RequestParam(name = "limit", defaultValue = "10") int limit,
-
 
764
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
-
 
765
			throws Exception {
-
 
766
 
-
 
767
		List<Offer> offers = null;
-
 
768
		long size = 0;
-
 
769
 
-
 
770
		offers = offerRepository.selectAll(offset, limit);
-
 
771
		size = offerRepository.selectAllCount();
-
 
772
 
-
 
773
		model.addAttribute("offers", offers);
-
 
774
		model.addAttribute("start", offset + 1);
-
 
775
		model.addAttribute("size", size);
-
 
776
		model.addAttribute("searchTerm", searchTerm);
-
 
777
 
-
 
778
		if (offers.size() < limit) {
-
 
779
			model.addAttribute("end", offset + offers.size());
-
 
780
		} else {
-
 
781
			model.addAttribute("end", offset + limit);
-
 
782
		}
-
 
783
 
-
 
784
		return "offer_history";
-
 
785
 
-
 
786
	}
-
 
787
 
-
 
788
	@RequestMapping(value = "/getPaginatedOffers", method = RequestMethod.GET)
-
 
789
	public String getPaginatedOffers(HttpServletRequest request,
-
 
790
			@RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
791
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
792
			throws ProfitMandiBusinessException {
-
 
793
 
-
 
794
		List<Offer> offers = null;
-
 
795
		offers = offerRepository.selectAll(offset, limit);
-
 
796
		model.addAttribute("offers", offers);
-
 
797
 
-
 
798
		return "offer_history_paginated";
-
 
799
	}
-
 
800
 
-
 
801
	@RequestMapping(value = "/searchOffer")
-
 
802
	public String getOfferById(HttpServletRequest request,
-
 
803
			@RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
804
			@RequestParam(name = "limit", defaultValue = "10") int limit,
-
 
805
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
-
 
806
			throws ProfitMandiBusinessException {
-
 
807
		List<Offer> offers = null;
-
 
808
		long size = 0;
-
 
809
		if (!(searchTerm.equals(""))) {
-
 
810
			offers = offerRepository.selectBySearchTerm(searchTerm, offset, limit);
-
 
811
			if (!(offers.size() == 0)) {
-
 
812
				size = offerRepository.selectAllCount();
-
 
813
				LOGGER.info("offers" + offers);
-
 
814
				model.addAttribute("offers", offers);
-
 
815
				model.addAttribute("start", offset + 1);
-
 
816
				model.addAttribute("size", size);
-
 
817
				model.addAttribute("searchTerm", searchTerm);
-
 
818
				if (offers.size() < limit) {
-
 
819
					model.addAttribute("end", offset + offers.size());
-
 
820
				} else {
-
 
821
					model.addAttribute("end", offset + limit);
-
 
822
				}
-
 
823
			} else {
-
 
824
				throw new ProfitMandiBusinessException("OfferId", searchTerm, "offerId Not Found");
-
 
825
			}
-
 
826
		} else {
-
 
827
 
-
 
828
			offers = offerRepository.selectAll(offset, limit);
-
 
829
			size = schemeRepository.selectAllCount();
-
 
830
 
-
 
831
			model.addAttribute("offers", offers);
-
 
832
			model.addAttribute("start", offset + 1);
-
 
833
			model.addAttribute("size", size);
-
 
834
			model.addAttribute("searchTerm", searchTerm);
-
 
835
 
-
 
836
			if (offers.size() < limit) {
-
 
837
				model.addAttribute("end", offset + offers.size());
-
 
838
			} else {
-
 
839
				model.addAttribute("end", offset + limit);
-
 
840
			}
-
 
841
		}
-
 
842
		return "offer_history";
-
 
843
	}
-
 
844
 
-
 
845
	@RequestMapping(value = "/updateOfferStatus", method = RequestMethod.POST)
-
 
846
	public String updateOfferStatus(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
-
 
847
 
-
 
848
		Offer offer = offerRepository.selectById(id);
-
 
849
		LOGGER.info("status" + offer.getStatus());
-
 
850
 
-
 
851
		if (offer.getStatus() == false) {
-
 
852
			offer.setStatus(true);
-
 
853
		} else {
-
 
854
			offer.setStatus(false);
-
 
855
		}
-
 
856
		offer.setCreatedTimestamp(LocalDateTime.now());
-
 
857
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
-
 
858
		return "response";
-
 
859
 
-
 
860
	}
-
 
861
 
-
 
862
	@RequestMapping(value = "/getOfferMargin", method = RequestMethod.GET)
-
 
863
	public String getOfferMargin(HttpServletRequest request,
-
 
864
			@RequestParam(name = "offerId", defaultValue = "0") int offerId, Model model) throws Exception {
-
 
865
		Offer offer = offerRepository.selectById(offerId);
-
 
866
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
867
				.collect(Collectors.toList());
-
 
868
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
-
 
869
		List<OfferPartner> offerPartners = offerPartnerRepository.selectByOfferId(offerId);
-
 
870
 
-
 
871
		LOGGER.info("offerId" + offer.getId());
-
 
872
 
-
 
873
		Map<Integer, Double> value = offerRepository.selectSumOfferByRetailer(offer.getStartDateTime(),
-
 
874
				offer.getEndDateTime(), 0, offer, true);
-
 
875
 
-
 
876
		LOGGER.info("value" + value);
-
 
877
		List<Offermargin> offerMargin = offerMarginRepository.selectByOfferId(offerId);
-
 
878
		Map<Integer, Double> partnerValueMap = new HashMap<>();
-
 
879
		Map<Integer, List<Double>> partnerMarginMap = new HashMap<Integer, List<Double>>();
-
 
880
		Map<Integer, Integer> shortageAmount = new HashMap<>();
-
 
881
 
-
 
882
		for (OfferPartner op : offerPartners) {
-
 
883
 
-
 
884
			LOGGER.info("offerPartneer" + op.getFofoId());
-
 
885
			if (value.containsKey(op.getFofoId())) {
-
 
886
				partnerValueMap.put(op.getFofoId(), value.get(op.getFofoId()));
-
 
887
 
-
 
888
			} else {
-
 
889
				value.put(op.getFofoId(), 0d);
-
 
890
 
-
 
891
				partnerValueMap.put(op.getFofoId(), 0d);
-
 
892
 
-
 
893
			}
-
 
894
			List<Double> valSetOne = new ArrayList<Double>();
-
 
895
 
-
 
896
			for (Offermargin om : offerMargin) {
-
 
897
 
-
 
898
				if (value.get(op.getFofoId()) <= om.getValue()) {
-
 
899
					LOGGER.info("om1" + om.getMargin());
-
 
900
					shortageAmount.put(op.getFofoId(), om.getValue() - value.get(op.getFofoId()).intValue());
-
 
901
					valSetOne.add(om.getMargin());
-
 
902
					partnerMarginMap.put(op.getFofoId(), valSetOne);
-
 
903
 
-
 
904
					break;
-
 
905
				} else {
-
 
906
					LOGGER.info("om2" + om.getMargin());
-
 
907
					valSetOne.add(om.getMargin());
-
 
908
 
-
 
909
					int shortage = om.getValue() - value.get(op.getFofoId()).intValue();
-
 
910
 
-
 
911
					if (shortage < 0) {
-
 
912
						shortageAmount.put(op.getFofoId(), 0);
-
 
913
					}
-
 
914
 
-
 
915
					partnerMarginMap.put(op.getFofoId(), valSetOne);
-
 
916
 
-
 
917
				}
-
 
918
			}
-
 
919
 
-
 
920
		}
-
 
921
 
-
 
922
		LOGGER.info("partnerMarginMap" + partnerMarginMap);
-
 
923
		LOGGER.info("partnerValueMap" + partnerValueMap);
-
 
924
		LOGGER.info("shortageAmount" + shortageAmount);
-
 
925
 
-
 
926
		ItemTypeParams scp = gson.fromJson(offer.getItemParam(), ItemTypeParams.class);
-
 
927
		if (offer.getItemCriteria().equals(ItemCriteriaType.Multiple_Brand)) {
-
 
928
			List<String> brands = scp.getBrands();
-
 
929
			model.addAttribute("brands", brands);
-
 
930
		}
-
 
931
		if (offer.getItemCriteria().equals(ItemCriteriaType.Item_Model)) {
-
 
932
			List<Integer> catalogIds = scp.getCatalogId();
-
 
933
			List<Item> newList = new ArrayList<>();
-
 
934
			Set<Integer> catalogId = new HashSet<>();
-
 
935
			List<Item> items = itemRepository.selectAllByCatalogIds(catalogIds.stream().collect(Collectors.toSet()));
-
 
936
			for (Item item : items) {
-
 
937
				if (catalogId.add(item.getCatalogItemId())) {
-
 
938
					newList.add(item);
-
 
939
				}
-
 
940
			}
-
 
941
			model.addAttribute("items", newList);
-
 
942
		}
-
 
943
		model.addAttribute("partnerMarginMap", partnerMarginMap);
-
 
944
		model.addAttribute("partnerValueMap", partnerValueMap);
-
 
945
		model.addAttribute("customRetailersMap", customRetailersMap);
-
 
946
		model.addAttribute("offerMargin", offerMargin);
-
 
947
		model.addAttribute("offer", offer);
-
 
948
		model.addAttribute("shortageAmount", shortageAmount);
-
 
949
 
-
 
950
		return "offer_margin_detail";
-
 
951
 
-
 
952
	}
-
 
953
 
-
 
954
	@RequestMapping(value = "/offerById", method = RequestMethod.GET)
-
 
955
	public String offerById(HttpServletRequest request, int offerId, Model model) throws ProfitMandiBusinessException {
-
 
956
		Offer offer = offerRepository.selectById(offerId);
-
 
957
 
-
 
958
		model.addAttribute("offer", offer);
-
 
959
 
-
 
960
		return "offer-edit";
-
 
961
 
-
 
962
	}
-
 
963
 
-
 
964
	@RequestMapping(value = "/extendByOfferId", method = RequestMethod.POST)
-
 
965
	public String extendByOfferId(HttpServletRequest request,
-
 
966
 
-
 
967
			int offerId, @RequestBody LocalDateTime extendDatetime, Model model) throws Exception {
-
 
968
 
-
 
969
		LOGGER.info("ExtendDatetime" + extendDatetime);
-
 
970
		LOGGER.info("schemeId" + offerId);
-
 
971
		Offer offer = offerRepository.selectById(offerId);
-
 
972
 
-
 
973
		offer.setEndDateTime(extendDatetime);
-
 
974
		offerRepository.persist(offer);
-
 
975
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
-
 
976
		return "response";
-
 
977
	}
-
 
978
 
-
 
979
}
644
}
980
645