Subversion Repositories SmartDukaan

Rev

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

Rev 23344 Rev 23365
Line 21... Line 21...
21
import com.spice.profitmandi.common.util.StringUtils;
21
import com.spice.profitmandi.common.util.StringUtils;
22
import com.spice.profitmandi.dao.entity.catalog.Item;
22
import com.spice.profitmandi.dao.entity.catalog.Item;
23
import com.spice.profitmandi.dao.entity.catalog.RetailerScheme;
23
import com.spice.profitmandi.dao.entity.catalog.RetailerScheme;
24
import com.spice.profitmandi.dao.entity.catalog.Scheme;
24
import com.spice.profitmandi.dao.entity.catalog.Scheme;
25
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
25
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
-
 
26
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
26
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
27
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
27
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
28
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
28
import com.spice.profitmandi.dao.entity.fofo.Purchase;
29
import com.spice.profitmandi.dao.entity.fofo.Purchase;
29
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
30
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
30
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
31
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
Line 35... Line 36...
35
import com.spice.profitmandi.dao.repository.catalog.RetailerSchemeRepository;
36
import com.spice.profitmandi.dao.repository.catalog.RetailerSchemeRepository;
36
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
37
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
37
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
38
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
38
import com.spice.profitmandi.dao.repository.fofo.FofoLineItemRepository;
39
import com.spice.profitmandi.dao.repository.fofo.FofoLineItemRepository;
39
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
40
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
-
 
41
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
40
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
42
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
41
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
43
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
42
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
44
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
43
import com.spice.profitmandi.dao.repository.fofo.SchemeItemRepository;
45
import com.spice.profitmandi.dao.repository.fofo.SchemeItemRepository;
44
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
46
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
45
import com.spice.profitmandi.service.inventory.OrderService;
47
import com.spice.profitmandi.service.order.OrderService;
46
import com.spice.profitmandi.service.wallet.WalletService;
48
import com.spice.profitmandi.service.wallet.WalletService;
47
 
49
 
48
import in.shop2020.model.v1.catalog.ItemType;
50
import in.shop2020.model.v1.catalog.ItemType;
49
import in.shop2020.model.v1.order.WalletReferenceType;
51
import in.shop2020.model.v1.order.WalletReferenceType;
50
 
52
 
Line 90... Line 92...
90
	private PurchaseRepository purchaseRepository;
92
	private PurchaseRepository purchaseRepository;
91
	
93
	
92
	@Autowired
94
	@Autowired
93
	private OrderRepository orderRepository;
95
	private OrderRepository orderRepository;
94
	
96
	
-
 
97
	@Autowired
-
 
98
	private FofoOrderRepository fofoOrderRepository;
-
 
99
	
95
	@Override
100
	@Override
96
	public void saveScheme(int creatorId, CreateSchemeRequest createSchemeRequest) throws ProfitMandiBusinessException {
101
	public void saveScheme(int creatorId, CreateSchemeRequest createSchemeRequest) throws ProfitMandiBusinessException {
97
		
102
		
98
		this.validateCreateSchemeRequest(createSchemeRequest);
103
		this.validateCreateSchemeRequest(createSchemeRequest);
99
		
104
		
Line 503... Line 508...
503
		}
508
		}
504
		return fofoOrderItemSchemsMap;
509
		return fofoOrderItemSchemsMap;
505
	}
510
	}
506
	
511
	
507
	@Override
512
	@Override
508
	public float processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
513
	public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
509
		Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
514
		Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
-
 
515
		if(purchase.getCompleteTimestamp() != null) {
510
		List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(purchase.getPurchaseReference(), retailerId);
516
			List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(purchase.getPurchaseReference(), retailerId);
511
		LocalDateTime billingTimestamp = LocalDateTime.now();
517
			LocalDateTime billingTimestamp = LocalDateTime.now();
512
		if(!orders.isEmpty()){
518
			if(!orders.isEmpty()){
513
			billingTimestamp = orders.get(0).getBillingTimestamp();
519
				billingTimestamp = orders.get(0).getBillingTimestamp();
514
		}
520
			}
515
		List<Scheme> schemes = schemeRepository.selectActiveAll(SchemeType.IN, billingTimestamp);
521
			List<Scheme> schemes = schemeRepository.selectActiveAll(SchemeType.IN, billingTimestamp);
516
		float totalCashback = 0;
522
			float totalCashback = 0;
517
		if(schemes.isEmpty()){
523
			if(schemes.isEmpty()){
518
			return 0;
524
				return;
519
		}
525
			}
520
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
526
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
521
		LOGGER.info("SchemeIn filter inventoryItems {}", inventoryItems);
527
			LOGGER.info("SchemeIn filter inventoryItems {}", inventoryItems);
522
		
528
			
523
		Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap = this.toInventoryItemSchemesMap(schemes, inventoryItems);
529
			Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap = this.toInventoryItemSchemesMap(schemes, inventoryItems);
524
		
530
			
525
		if(inventoryItemSchemesMap.isEmpty()){
531
			if(inventoryItemSchemesMap.isEmpty()){
526
			return 0;
532
				return;
527
		}
533
			}
528
		Map<InventoryItem, Set<Scheme>> notAllInventoryItemSchemesMap = new HashMap<>();
534
			Map<InventoryItem, Set<Scheme>> notAllInventoryItemSchemesMap = new HashMap<>();
529
		Map<InventoryItem, Set<Scheme>> allInventoryItemSchemesMap = new HashMap<>();
535
			Map<InventoryItem, Set<Scheme>> allInventoryItemSchemesMap = new HashMap<>();
530
		Set<Integer> itemIds = new HashSet<>();
536
			Set<Integer> itemIds = new HashSet<>();
531
		
537
			
532
		for(Map.Entry<InventoryItem, Set<Scheme>> inventoryItemSchemesEntry : inventoryItemSchemesMap.entrySet()){
538
			for(Map.Entry<InventoryItem, Set<Scheme>> inventoryItemSchemesEntry : inventoryItemSchemesMap.entrySet()){
533
			Set<Scheme> notAllSchemes = new HashSet<>();
539
				Set<Scheme> notAllSchemes = new HashSet<>();
534
			Set<Scheme> allSchemes = new HashSet<>();
540
				Set<Scheme> allSchemes = new HashSet<>();
535
			for(Scheme scheme : inventoryItemSchemesEntry.getValue()){
541
				for(Scheme scheme : inventoryItemSchemesEntry.getValue()){
536
				if(!scheme.isRetailerAll()){
542
					if(!scheme.isRetailerAll()){
537
					notAllSchemes.add(scheme);
543
						notAllSchemes.add(scheme);
538
				}else{
544
					}else{
539
					allSchemes.add(scheme);
545
						allSchemes.add(scheme);
-
 
546
					}
540
				}
547
				}
-
 
548
				notAllInventoryItemSchemesMap.put(inventoryItemSchemesEntry.getKey(), notAllSchemes);
-
 
549
				allInventoryItemSchemesMap.put(inventoryItemSchemesEntry.getKey(), allSchemes);
-
 
550
				itemIds.add(inventoryItemSchemesEntry.getKey().getItemId());
541
			}
551
			}
542
			notAllInventoryItemSchemesMap.put(inventoryItemSchemesEntry.getKey(), notAllSchemes);
-
 
543
			allInventoryItemSchemesMap.put(inventoryItemSchemesEntry.getKey(), allSchemes);
-
 
544
			itemIds.add(inventoryItemSchemesEntry.getKey().getItemId());
-
 
545
		}
552
			
546
		
-
 
547
		List<Item> items = itemRepository.selectByIds(itemIds);
553
			List<Item> items = itemRepository.selectByIds(itemIds);
548
		Map<Integer, String> itemStringMap = this.toItemStringMap(items);
554
			Map<Integer, String> itemStringMap = this.toItemStringMap(items);
549
		
555
			
550
		Map<Integer, Float> itemIdCashbackMap = new HashMap<>();
556
			Map<Integer, Float> itemIdCashbackMap = new HashMap<>();
551
		Map<Integer, Integer> itemIdCashbackCountMap = new HashMap<>();
557
			Map<Integer, Integer> itemIdCashbackCountMap = new HashMap<>();
552
		
558
			
553
		for(Map.Entry<InventoryItem, Set<Scheme>> allInventoryItemSchemesEntry : allInventoryItemSchemesMap.entrySet()){
559
			for(Map.Entry<InventoryItem, Set<Scheme>> allInventoryItemSchemesEntry : allInventoryItemSchemesMap.entrySet()){
554
			for(Scheme scheme : allInventoryItemSchemesEntry.getValue()){
560
				for(Scheme scheme : allInventoryItemSchemesEntry.getValue()){
555
				InventoryItem inventoryItem = allInventoryItemSchemesEntry.getKey();
561
					InventoryItem inventoryItem = allInventoryItemSchemesEntry.getKey();
556
				float cashback = this.createSchemeInOut(scheme, inventoryItem);
562
					float cashback = this.createSchemeInOut(scheme, inventoryItem);
557
				if(!itemIdCashbackMap.containsKey(inventoryItem.getItemId())){
563
					if(!itemIdCashbackMap.containsKey(inventoryItem.getItemId())){
558
					itemIdCashbackMap.put(inventoryItem.getItemId(), cashback);
564
						itemIdCashbackMap.put(inventoryItem.getItemId(), cashback);
559
					itemIdCashbackCountMap.put(inventoryItem.getItemId(), 1);
565
						itemIdCashbackCountMap.put(inventoryItem.getItemId(), 1);
560
				}else{
566
					}else{
561
					itemIdCashbackMap.put(inventoryItem.getItemId(), itemIdCashbackMap.get(inventoryItem.getItemId()) + cashback);
567
						itemIdCashbackMap.put(inventoryItem.getItemId(), itemIdCashbackMap.get(inventoryItem.getItemId()) + cashback);
562
					itemIdCashbackCountMap.put(inventoryItem.getItemId(), itemIdCashbackCountMap.get(inventoryItem.getItemId()) + 1);
568
						itemIdCashbackCountMap.put(inventoryItem.getItemId(), itemIdCashbackCountMap.get(inventoryItem.getItemId()) + 1);
-
 
569
					}
-
 
570
					totalCashback = totalCashback + cashback;
563
				}
571
				}
564
				totalCashback = totalCashback + cashback;
-
 
565
			}
572
			}
566
		}
-
 
567
		
-
 
568
		//Map<Integer, Float> itemIdCashbackMap = new HashMap<>();
-
 
569
		
-
 
570
			
573
			
-
 
574
			//Map<Integer, Float> itemIdCashbackMap = new HashMap<>();
-
 
575
			
-
 
576
				
571
		Set<Integer> schemeIds = this.inventoryItemSchemesMapToSchemeIds(notAllInventoryItemSchemesMap);
577
			Set<Integer> schemeIds = this.inventoryItemSchemesMapToSchemeIds(notAllInventoryItemSchemesMap);
572
		if(!schemeIds.isEmpty()){
578
			if(!schemeIds.isEmpty()){
573
			List<Integer> foundSchemeIds = retailerSchemeRepository.selectSchemeIds(schemeIds, retailerId);
579
				List<Integer> foundSchemeIds = retailerSchemeRepository.selectSchemeIds(schemeIds, retailerId);
574
			for(Map.Entry<InventoryItem, Set<Scheme>> notAllInventoryItemSchemesEntry : notAllInventoryItemSchemesMap.entrySet()){
580
				for(Map.Entry<InventoryItem, Set<Scheme>> notAllInventoryItemSchemesEntry : notAllInventoryItemSchemesMap.entrySet()){
575
				for(Scheme scheme : notAllInventoryItemSchemesEntry.getValue()){
581
					for(Scheme scheme : notAllInventoryItemSchemesEntry.getValue()){
576
					if(foundSchemeIds.contains(scheme.getId())){
582
						if(foundSchemeIds.contains(scheme.getId())){
577
						InventoryItem inventoryItem = notAllInventoryItemSchemesEntry.getKey();
583
							InventoryItem inventoryItem = notAllInventoryItemSchemesEntry.getKey();
578
						float cashback = this.createSchemeInOut(scheme, inventoryItem);
584
							float cashback = this.createSchemeInOut(scheme, inventoryItem);
579
						if(!itemIdCashbackMap.containsKey(inventoryItem.getItemId())){
585
							if(!itemIdCashbackMap.containsKey(inventoryItem.getItemId())){
580
							itemIdCashbackMap.put(inventoryItem.getItemId(), cashback);
586
								itemIdCashbackMap.put(inventoryItem.getItemId(), cashback);
581
							itemIdCashbackCountMap.put(inventoryItem.getItemId(), 1);
587
								itemIdCashbackCountMap.put(inventoryItem.getItemId(), 1);
582
						}else{
588
							}else{
583
							itemIdCashbackMap.put(inventoryItem.getItemId(), itemIdCashbackMap.get(inventoryItem.getItemId()) + cashback);
589
								itemIdCashbackMap.put(inventoryItem.getItemId(), itemIdCashbackMap.get(inventoryItem.getItemId()) + cashback);
584
							itemIdCashbackCountMap.put(inventoryItem.getItemId(), itemIdCashbackCountMap.get(inventoryItem.getItemId()) + 1);
590
								itemIdCashbackCountMap.put(inventoryItem.getItemId(), itemIdCashbackCountMap.get(inventoryItem.getItemId()) + 1);
-
 
591
							}
-
 
592
							totalCashback = totalCashback + cashback;
585
						}
593
						}
586
						totalCashback = totalCashback + cashback;
-
 
587
					}
594
					}
588
				}
595
				}
589
			}
596
			}
-
 
597
			for(Map.Entry<Integer, Float> itemIdCashbackEntry : itemIdCashbackMap.entrySet()){
-
 
598
				walletService.addAmountToWallet(retailerId, purchaseId, WalletReferenceType.SCHEME_IN,
-
 
599
						itemIdCashbackCountMap.get(itemIdCashbackEntry.getKey())+"pcs of item "+
-
 
600
						itemStringMap.get(itemIdCashbackEntry.getKey()) +
-
 
601
				" Added for SCHEME_IN against invoiceNumber ["+purchase.getPurchaseReference()+"]", totalCashback);
-
 
602
			}
-
 
603
			purchase.setCashback(totalCashback);
-
 
604
			purchaseRepository.persist(purchase);
590
		}
605
		}
591
		for(Map.Entry<Integer, Float> itemIdCashbackEntry : itemIdCashbackMap.entrySet()){
-
 
592
			walletService.addAmountToWallet(retailerId, purchaseId, WalletReferenceType.SCHEME_IN,
-
 
593
					itemIdCashbackCountMap.get(itemIdCashbackEntry.getKey())+"pcs of item "+
-
 
594
					itemStringMap.get(itemIdCashbackEntry.getKey()) +
-
 
595
			" Added for SCHEME_IN against invoiceNumber ["+purchase.getPurchaseReference()+"]", totalCashback);
-
 
596
		}
-
 
597
		return totalCashback;
-
 
598
	}
606
	}
599
	
607
	
600
	private float createSchemeInOut(Scheme scheme, InventoryItem inventoryItem){
608
	private float createSchemeInOut(Scheme scheme, InventoryItem inventoryItem){
601
		float amount = this.getAmount(inventoryItem, scheme);
609
		float amount = this.getAmount(inventoryItem, scheme);
602
		SchemeInOut schemeInOut = new SchemeInOut();
610
		SchemeInOut schemeInOut = new SchemeInOut();
Line 639... Line 647...
639
		}
647
		}
640
		return inventoryItemIds;
648
		return inventoryItemIds;
641
	}
649
	}
642
 
650
 
643
	@Override
651
	@Override
644
	public float processSchemeOut(int fofoOrderId, int retailerId) throws ProfitMandiBusinessException {
652
	public void processSchemeOut(int fofoOrderId, int retailerId) throws ProfitMandiBusinessException {
-
 
653
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(retailerId, fofoOrderId);
645
		List<Scheme> schemes = schemeRepository.selectActiveAll(SchemeType.OUT, LocalDateTime.now());
654
		List<Scheme> schemes = schemeRepository.selectActiveAll(SchemeType.OUT, LocalDateTime.now());
646
		LOGGER.info("Active Schemes {}", schemes);
655
		LOGGER.info("Active Schemes {}", schemes);
647
		float totalCashback = 0;
656
		float totalCashback = 0;
648
		if(schemes.isEmpty()){
657
		if(schemes.isEmpty()){
649
			return 0;
658
			return;
650
		}
659
		}
651
		
660
		
652
		List<FofoOrderItem> fofoOrderItems = orderService.getByOrderId(fofoOrderId);
661
		List<FofoOrderItem> fofoOrderItems = orderService.getByOrderId(fofoOrderId);
653
		//LOGGER.info("fofoOrderItems {}", fofoOrderItems);
662
		//LOGGER.info("fofoOrderItems {}", fofoOrderItems);
654
		
663
		
655
		Map<FofoOrderItem, Set<Scheme>> fofoOrderItemSchemesMap = this.toFofoOrderItemSchemesMap(schemes, fofoOrderItems);
664
		Map<FofoOrderItem, Set<Scheme>> fofoOrderItemSchemesMap = this.toFofoOrderItemSchemesMap(schemes, fofoOrderItems);
656
		
665
		
657
		LOGGER.info("fofoOrderItemSchemesMap {}", fofoOrderItemSchemesMap);
666
		LOGGER.info("fofoOrderItemSchemesMap {}", fofoOrderItemSchemesMap);
658
		
667
		
659
		if(fofoOrderItemSchemesMap.isEmpty()){
668
		if(fofoOrderItemSchemesMap.isEmpty()){
660
			return 0;
669
			return;
661
		}
670
		}
662
		
671
		
663
		Set<Integer> inventoryItemIds = this.toInventoryItemIds(fofoOrderItemSchemesMap.keySet());
672
		Set<Integer> inventoryItemIds = this.toInventoryItemIds(fofoOrderItemSchemesMap.keySet());
664
		
673
		
665
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds);
674
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds);
Line 708... Line 717...
708
				}
717
				}
709
			}	
718
			}	
710
		}
719
		}
711
		if(totalCashback > 0){
720
		if(totalCashback > 0){
712
			walletService.addAmountToWallet(retailerId, fofoOrderId, WalletReferenceType.SCHEME_OUT, "Added for SCHEME_OUT", totalCashback);
721
			walletService.addAmountToWallet(retailerId, fofoOrderId, WalletReferenceType.SCHEME_OUT, "Added for SCHEME_OUT", totalCashback);
-
 
722
			fofoOrder.setCashback(totalCashback);
-
 
723
			fofoOrderRepository.persist(fofoOrder);
713
		}
724
		}
714
		return totalCashback;
-
 
715
	}
725
	}
716
	
726
	
717
}
727
}