Subversion Repositories SmartDukaan

Rev

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

Rev 25437 Rev 25438
Line 22... Line 22...
22
import com.spice.profitmandi.common.model.SchemeModel;
22
import com.spice.profitmandi.common.model.SchemeModel;
23
import com.spice.profitmandi.common.util.StringUtils;
23
import com.spice.profitmandi.common.util.StringUtils;
24
import com.spice.profitmandi.dao.entity.catalog.Item;
24
import com.spice.profitmandi.dao.entity.catalog.Item;
25
import com.spice.profitmandi.dao.entity.catalog.RetailerScheme;
25
import com.spice.profitmandi.dao.entity.catalog.RetailerScheme;
26
import com.spice.profitmandi.dao.entity.catalog.Scheme;
26
import com.spice.profitmandi.dao.entity.catalog.Scheme;
27
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
-
 
28
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
27
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
29
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
-
 
30
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
28
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
31
import com.spice.profitmandi.dao.entity.fofo.Purchase;
29
import com.spice.profitmandi.dao.entity.fofo.Purchase;
32
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
30
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
33
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
31
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
34
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
32
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
Line 323... Line 321...
323
			throw new ProfitMandiBusinessException(ProfitMandiConstants.EXPIRE_TIMESTAMP, scheme.getExpireTimestamp(),
321
			throw new ProfitMandiBusinessException(ProfitMandiConstants.EXPIRE_TIMESTAMP, scheme.getExpireTimestamp(),
324
					"SCHM_1006");
322
					"SCHM_1006");
325
		}
323
		}
326
		scheme.setActiveTimestamp(LocalDateTime.now());
324
		scheme.setActiveTimestamp(LocalDateTime.now());
327
		schemeRepository.persist(scheme);
325
		schemeRepository.persist(scheme);
-
 
326
		/*
328
		/*if (scheme.getType() == SchemeType.IN) {
327
		 * if (scheme.getType() == SchemeType.IN) {
329
			this.processPreviousPurchases(scheme);
328
		 * this.processPreviousPurchases(scheme); } else if (scheme.getType() ==
330
		} else if (scheme.getType() == SchemeType.OUT) {
-
 
331
			this.processPreviousSales(scheme);
329
		 * SchemeType.OUT) { this.processPreviousSales(scheme); }
332
		}*/
330
		 */
333
	}
-
 
334
 
-
 
335
	private void processPreviousPurchases(Scheme scheme) throws ProfitMandiBusinessException {
-
 
336
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectBetweenDates(scheme.getStartDateTime(),
-
 
337
				scheme.getEndDateTime());
-
 
338
		if (inventoryItems.isEmpty()) {
-
 
339
			return;
-
 
340
		}
-
 
341
		List<Integer> itemIds = schemeItemRepository.selectItemIdsBySchemeId(scheme.getId());
-
 
342
		if (itemIds.isEmpty()) {
-
 
343
			return;
-
 
344
		}
-
 
345
		List<Item> items = itemRepository.selectByIds(new HashSet<>(itemIds));
-
 
346
		Map<Integer, String> itemStringMap = this.toItemStringMap(items);
-
 
347
		List<InventoryItem> completedInventoryItems = this.toFilteredPurchaseCompletedInventoryItems(inventoryItems,
-
 
348
				itemIds, true);
-
 
349
		if (completedInventoryItems.isEmpty()) {
-
 
350
			return;
-
 
351
		}
-
 
352
		if (scheme.isRetailerAll()) {
-
 
353
			for (InventoryItem inventoryItem : completedInventoryItems) {
-
 
354
				float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
355
				if (cashback > 0) {
-
 
356
					walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
-
 
357
							WalletReferenceType.SCHEME_IN,
-
 
358
							"Added SCHEME_IN for item " + itemStringMap.get(inventoryItem.getItemId())
-
 
359
									+ " against invoiceNumber " + inventoryItem.getPurchase().getPurchaseReference(),
-
 
360
							cashback);
-
 
361
				}
-
 
362
			}
-
 
363
		} else {
-
 
364
			List<Integer> retailerIds = retailerSchemeRepository.selectRetailerIdsBySchemeId(scheme.getId());
-
 
365
			for (InventoryItem inventoryItem : completedInventoryItems) {
-
 
366
				if (retailerIds.contains(inventoryItem.getFofoId())) {
-
 
367
					float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
368
					if (cashback > 0) {
-
 
369
						walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
-
 
370
								WalletReferenceType.SCHEME_IN,
-
 
371
								"Added SCHEME_IN for item " + itemStringMap.get(inventoryItem.getItemId())
-
 
372
										+ " against invoiceNumber "
-
 
373
										+ inventoryItem.getPurchase().getPurchaseReference(),
-
 
374
								cashback);
-
 
375
					}
-
 
376
				}
-
 
377
			}
-
 
378
		}
-
 
379
 
-
 
380
	}
-
 
381
 
-
 
382
	private Map<Integer, Integer> toInventoryItemIdFofoOrderIdMap(List<FofoLineItem> fofoLineItems,
-
 
383
			Map<Integer, FofoOrderItem> fofoOrderItemIdFofoOrderItemMap) {
-
 
384
		Map<Integer, Integer> inventoryItemIdFofoOrderIdMap = new HashMap<>();
-
 
385
 
-
 
386
		for (FofoLineItem fofoLineItem : fofoLineItems) {
-
 
387
			inventoryItemIdFofoOrderIdMap.put(fofoLineItem.getInventoryItemId(),
-
 
388
					fofoOrderItemIdFofoOrderItemMap.get(fofoLineItem.getFofoOrderItemId()).getOrderId());
-
 
389
		}
-
 
390
		return inventoryItemIdFofoOrderIdMap;
-
 
391
	}
-
 
392
 
-
 
393
	private void processPreviousSales(Scheme scheme) throws ProfitMandiBusinessException {
-
 
394
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectBetweenDates(scheme.getStartDateTime(),
-
 
395
				scheme.getEndDateTime());
-
 
396
 
-
 
397
		if (fofoOrderItems.isEmpty()) {
-
 
398
			return;
-
 
399
		}
-
 
400
 
-
 
401
		Map<Integer, FofoOrderItem> fofoOrderItemIdFofoOrderItemMap = this
-
 
402
				.toFofoOrderItemIdFofoOrderItemMap(fofoOrderItems);
-
 
403
 
-
 
404
		List<FofoLineItem> fofoLineItems = fofoLineItemRepository
-
 
405
				.selectByFofoOrderItemIds(fofoOrderItemIdFofoOrderItemMap.keySet());
-
 
406
 
-
 
407
		if (fofoLineItems.isEmpty()) {
-
 
408
			return;
-
 
409
		}
-
 
410
 
-
 
411
		Map<Integer, Integer> inventoryItemIdFofoOrderIdMap = this.toInventoryItemIdFofoOrderIdMap(fofoLineItems,
-
 
412
				fofoOrderItemIdFofoOrderItemMap);
-
 
413
 
-
 
414
		List<InventoryItem> inventoryItems = inventoryItemRepository
-
 
415
				.selectByIds(inventoryItemIdFofoOrderIdMap.keySet());
-
 
416
 
-
 
417
		if (inventoryItems.isEmpty()) {
-
 
418
			return;
-
 
419
		}
-
 
420
 
-
 
421
		List<Integer> itemIds = schemeItemRepository.selectItemIdsBySchemeId(scheme.getId());
-
 
422
 
-
 
423
		if (itemIds.isEmpty()) {
-
 
424
			return;
-
 
425
		}
-
 
426
 
-
 
427
		List<InventoryItem> completedInventoryItems = this.toFilteredPurchaseCompletedInventoryItems(inventoryItems,
-
 
428
				itemIds, false);
-
 
429
 
-
 
430
		if (scheme.isRetailerAll()) {
-
 
431
			for (InventoryItem inventoryItem : completedInventoryItems) {
-
 
432
				float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
433
				if (cashback > 0) {
-
 
434
					walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
-
 
435
							WalletReferenceType.SCHEME_OUT, "Added for SCHEME_OUT", cashback);
-
 
436
				}
-
 
437
			}
-
 
438
		} else {
-
 
439
			List<Integer> retailerIds = retailerSchemeRepository.selectRetailerIdsBySchemeId(scheme.getId());
-
 
440
			for (InventoryItem inventoryItem : completedInventoryItems) {
-
 
441
				if (retailerIds.contains(inventoryItem.getFofoId())) {
-
 
442
					float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
443
					if (cashback > 0) {
-
 
444
						walletService.addAmountToWallet(inventoryItem.getFofoId(),
-
 
445
								inventoryItemIdFofoOrderIdMap.get(inventoryItem.getId()),
-
 
446
								WalletReferenceType.SCHEME_OUT, "Added for SCHEME_OUT", cashback);
-
 
447
					}
-
 
448
				}
-
 
449
			}
-
 
450
		}
-
 
451
	}
-
 
452
 
-
 
453
	private Map<Integer, FofoOrderItem> toFofoOrderItemIdFofoOrderItemMap(List<FofoOrderItem> fofoOrderItems) {
-
 
454
		Map<Integer, FofoOrderItem> fofoOrderItemIdFofoOrderItemMap = new HashMap<>();
-
 
455
		for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
-
 
456
			fofoOrderItemIdFofoOrderItemMap.put(fofoOrderItem.getId(), fofoOrderItem);
-
 
457
		}
-
 
458
		return fofoOrderItemIdFofoOrderItemMap;
-
 
459
	}
-
 
460
 
-
 
461
	private List<InventoryItem> toFilteredPurchaseCompletedInventoryItems(List<InventoryItem> inventoryItems,
-
 
462
			List<Integer> itemIds, boolean purchase) {
-
 
463
		List<InventoryItem> completedInventoryItems = new ArrayList<>();
-
 
464
		for (InventoryItem inventoryItem : inventoryItems) {
-
 
465
			if (purchase && inventoryItem.getPurchase().getCompleteTimestamp() != null
-
 
466
					&& itemIds.contains(inventoryItem.getItemId())) {
-
 
467
				completedInventoryItems.add(inventoryItem);
-
 
468
			} else if (!purchase && itemIds.contains(inventoryItem.getItemId())) {
-
 
469
				completedInventoryItems.add(inventoryItem);
-
 
470
			}
-
 
471
		}
-
 
472
		return completedInventoryItems;
-
 
473
	}
331
	}
474
 
332
 
475
	@Override
333
	@Override
476
	public void expireSchemeById(int schemeId, LocalDateTime expiryTime) throws ProfitMandiBusinessException {
334
	public void expireSchemeById(int schemeId, LocalDateTime expiryTime) throws ProfitMandiBusinessException {
477
		Scheme scheme = schemeRepository.selectById(schemeId);
335
		Scheme scheme = schemeRepository.selectById(schemeId);
Line 494... Line 352...
494
			schemeIdSchemeMap.put(scheme.getId(), scheme);
352
			schemeIdSchemeMap.put(scheme.getId(), scheme);
495
		}
353
		}
496
		return schemeIdSchemeMap;
354
		return schemeIdSchemeMap;
497
	}
355
	}
498
 
356
 
499
	private Set<Integer> inventoryItemSchemesMapToSchemeIds(Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap) {
-
 
500
		Set<Integer> schemeIds = new HashSet<>();
-
 
501
		for (Map.Entry<InventoryItem, Set<Scheme>> inventoryItemSchemesEntry : inventoryItemSchemesMap.entrySet()) {
-
 
502
			for (Scheme scheme : inventoryItemSchemesEntry.getValue()) {
-
 
503
				schemeIds.add(scheme.getId());
-
 
504
			}
-
 
505
		}
-
 
506
		return schemeIds;
-
 
507
	}
-
 
508
 
-
 
509
	private Set<Integer> inventoryItemsToItemIds(List<InventoryItem> inventoryItems) {
357
	private Set<Integer> inventoryItemsToItemIds(List<InventoryItem> inventoryItems) {
510
		Set<Integer> itemIds = new HashSet<>();
358
		Set<Integer> itemIds = new HashSet<>();
511
		for (InventoryItem inventoryItem : inventoryItems) {
359
		for (InventoryItem inventoryItem : inventoryItems) {
512
			itemIds.add(inventoryItem.getItemId());
360
			itemIds.add(inventoryItem.getItemId());
513
		}
361
		}
Line 560... Line 408...
560
				return;
408
				return;
561
			}
409
			}
562
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
410
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
563
			inventoryItems.stream().filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET_BAD)
411
			inventoryItems.stream().filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET_BAD)
564
					&& !x.getLastScanType().equals(ScanType.PURCHASE_RET));
412
					&& !x.getLastScanType().equals(ScanType.PURCHASE_RET));
565
			if(inventoryItems.size()==0) return;
413
			if (inventoryItems.size() == 0)
-
 
414
				return;
566
			Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap = this.toInventoryItemSchemesMap(schemes,
415
			Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap = this.toInventoryItemSchemesMap(schemes,
567
					inventoryItems);
416
					inventoryItems);
568
 
417
 
569
			if (inventoryItemSchemesMap.isEmpty()) {
418
			if (inventoryItemSchemesMap.isEmpty()) {
570
				return;
419
				return;