Subversion Repositories SmartDukaan

Rev

Rev 29261 | Rev 29404 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
26522 amit.gupta 1
package com.spice.profitmandi.dao.cart;
2
 
28166 tejbeer 3
import java.time.LocalDateTime;
26522 amit.gupta 4
import java.util.ArrayList;
5
import java.util.Arrays;
29327 tejbeer 6
import java.util.Collections;
26522 amit.gupta 7
import java.util.HashMap;
8
import java.util.HashSet;
29327 tejbeer 9
import java.util.LinkedHashMap;
26522 amit.gupta 10
import java.util.List;
11
import java.util.Map;
12
import java.util.Set;
29327 tejbeer 13
import java.util.Map.Entry;
26522 amit.gupta 14
import java.util.stream.Collectors;
15
 
28653 amit.gupta 16
import org.apache.logging.log4j.LogManager;
17
import org.apache.logging.log4j.Logger;
26522 amit.gupta 18
import org.springframework.beans.factory.annotation.Autowired;
28170 tejbeer 19
import org.springframework.stereotype.Component;
26522 amit.gupta 20
 
28653 amit.gupta 21
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
29261 amit.gupta 22
import com.spice.profitmandi.common.model.ProfitMandiConstants;
26522 amit.gupta 23
import com.spice.profitmandi.dao.entity.catalog.Item;
24
import com.spice.profitmandi.dao.entity.catalog.TagListing;
29327 tejbeer 25
import com.spice.profitmandi.dao.entity.cs.PartnerRegion;
26
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
27
import com.spice.profitmandi.dao.entity.inventory.SaholicCIS;
26522 amit.gupta 28
import com.spice.profitmandi.dao.entity.user.Cart;
28166 tejbeer 29
import com.spice.profitmandi.dao.entity.user.CartLine;
26522 amit.gupta 30
import com.spice.profitmandi.dao.entity.user.User;
28653 amit.gupta 31
import com.spice.profitmandi.dao.model.CartItem;
32
import com.spice.profitmandi.dao.model.CartItemResponseModel;
33
import com.spice.profitmandi.dao.model.CartMessage;
34
import com.spice.profitmandi.dao.model.CartResponse;
29327 tejbeer 35
import com.spice.profitmandi.dao.repository.catalog.FocusedModelRepository;
26522 amit.gupta 36
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
37
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
29327 tejbeer 38
import com.spice.profitmandi.dao.repository.cs.PartnerRegionRepository;
26522 amit.gupta 39
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
29327 tejbeer 40
import com.spice.profitmandi.dao.repository.dtr.RetailerBlockBrandsRepository;
26522 amit.gupta 41
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
29327 tejbeer 42
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
28166 tejbeer 43
import com.spice.profitmandi.dao.repository.user.CartLineRepository;
26522 amit.gupta 44
import com.spice.profitmandi.dao.repository.user.CartRepository;
45
import com.spice.profitmandi.dao.repository.user.UserRepository;
29327 tejbeer 46
import com.spice.profitmandi.service.NotificationService;
47
import com.spice.profitmandi.service.inventory.FocusedShortageModel;
28653 amit.gupta 48
import com.spice.profitmandi.service.inventory.SaholicInventoryService;
29327 tejbeer 49
import com.spice.profitmandi.service.transaction.TransactionService;
26522 amit.gupta 50
 
28170 tejbeer 51
@Component
26522 amit.gupta 52
public class CartServiceImpl implements CartService {
53
 
54
	private static final Set<Integer> tagIds = new HashSet<>(Arrays.asList(4));
55
 
28653 amit.gupta 56
	private static final Logger logger = LogManager.getLogger(CartServiceImpl.class);
57
 
26522 amit.gupta 58
	@Autowired
59
	CartRepository cartRepository;
60
 
61
	@Autowired
28653 amit.gupta 62
	CartLineRepository cartLineRepository;
26522 amit.gupta 63
 
64
	@Autowired
65
	FofoStoreRepository fofoStoreRepository;
66
 
67
	@Autowired
68
	TagListingRepository tagListingRepository;
69
 
70
	@Autowired
71
	UserRepository saholicUserRepository;
72
 
73
	@Autowired
74
	ItemRepository itemRepository;
75
 
76
	@Autowired
28653 amit.gupta 77
	SaholicInventoryService saholicInventoryService;
28170 tejbeer 78
 
28166 tejbeer 79
	@Autowired
28653 amit.gupta 80
	CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
26522 amit.gupta 81
 
29327 tejbeer 82
	@Autowired
83
	private FocusedModelRepository focusedModelRepository;
84
 
85
	@Autowired
86
	private PartnerRegionRepository partnerRegionRepository;
87
 
88
	@Autowired
89
	private TransactionService transactionService;
90
 
91
	@Autowired
92
	private RetailerBlockBrandsRepository retailerBlockBrandRepository;
93
 
94
	@Autowired
95
	private OrderRepository orderRepository;
96
 
97
	@Autowired
98
	private NotificationService notificationService;
99
 
26522 amit.gupta 100
	@Override
29327 tejbeer 101
	// Unused method
26522 amit.gupta 102
	public CartModel addToCart(int cartId, int itemId, int quantity, float sellingPrice) {
28653 amit.gupta 103
		CartLine cartItem = cartLineRepository.selectByCartItem(cartId, itemId);
26522 amit.gupta 104
		if (cartItem == null) {
105
			this.createCartItem(cartId, itemId, quantity, sellingPrice);
106
		} else {
107
			cartItem.setQuantity(quantity);
108
			cartItem.setActualPrice(sellingPrice);
109
		}
110
		return null;
111
	}
29327 tejbeer 112
 
26522 amit.gupta 113
	private void createCartItem(int cartId, int itemId, int quantity, float sellingPrice) {
28653 amit.gupta 114
		CartLine cartLine = new CartLine();
115
		cartLine.setActualPrice(sellingPrice);
116
		cartLine.setCartId(cartId);
117
		cartLine.setQuantity(quantity);
26522 amit.gupta 118
		// TODO: Estmiate Logic
28653 amit.gupta 119
		cartLine.setEstimate(2);
120
		cartLineRepository.persist(cartLine);
26522 amit.gupta 121
 
122
	}
123
 
124
	@Override
28653 amit.gupta 125
	public boolean clearCart(int cartId) throws ProfitMandiBusinessException {
126
		List<CartLine> cartLines = cartLineRepository.selectAllByCart(cartId);
127
		cartLines.stream().forEach(cartLine -> cartLineRepository.delete(cartLine));
128
		Cart cart = cartRepository.selectById(cartId);
26522 amit.gupta 129
 
28653 amit.gupta 130
		cart.setUpdateTimestamp(LocalDateTime.now());
131
		cart.setCheckoutTimestamp(null);
132
		cart.setTotalPrice(0);
133
		cart.setWalletAmount(0);
134
		return true;
26522 amit.gupta 135
	}
136
 
137
	@Override
138
	public CartModel getCart(int cartId) {
139
		// TODO Auto-generated method stub
140
		return null;
141
	}
142
 
143
	// As of now it only works for Fofo Partners need to be refactored later
144
	private Map<Integer, Integer> getAvailabilityMap(User user, Set<Integer> itemIds) {
145
		Map<Integer, Integer> itemAvailabilityMap = new HashMap<>();
146
		List<TagListing> tags = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds);
147
		tags.stream().forEach(tagListing -> {
148
			if (!tagListing.isActive() || tagListing.isHotDeals()) {
149
				// show actual values here
150
			} else {
151
				itemAvailabilityMap.put(tagListing.getItemId(), 100);
152
			}
153
		});
154
		return itemAvailabilityMap;
155
	}
156
 
157
	// As of now it only works for Fofo Partners need to be refactored later
158
	private Map<Integer, Integer> getMinBuyQtyMap(User user, Set<Integer> itemIds) {
159
		List<Item> items = itemRepository.selectByIds(itemIds);
160
		return items.stream().collect(Collectors.toMap(x -> x.getId(), x -> x.getCategoryId() == 10020 ? 1 : 10));
161
	}
162
 
163
	// As of now it only works for Fofo Partners need to be refactored later
164
	private Map<Integer, Float> getPriceMap(User user, Set<Integer> itemIds) {
165
		List<TagListing> tags = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds);
166
		return tags.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x.getSellingPrice()));
167
 
168
	}
169
 
28166 tejbeer 170
	@Override
28653 amit.gupta 171
	public CartResponse getCartValidation(int cartId) throws ProfitMandiBusinessException {
172
		/*
173
		 * # No need to validate duplicate items since there are only two ways # to add
174
		 * items to a cart and both of them check whether the item being # added is a
175
		 * duplicate of an already existing item.
176
		 */
177
 
178
		Cart cart = cartRepository.selectById(cartId);
179
		List<CartLine> cartLines = cartLineRepository.selectAllByCart(cartId);
180
 
181
		User saholicUser = saholicUserRepository.selectByCartId(cartId);
182
 
183
		int totalQty = 0;
184
		double totalAmount = 0;
185
		CartResponse cartResponse = new CartResponse();
186
		List<CartMessage> cartMessages = new ArrayList<>();
187
		List<CartItemResponseModel> cartItemModels = new ArrayList<>();
188
		cartResponse.setCartMessages(cartMessages);
189
		cartResponse.setCartItems(cartItemModels);
190
 
191
		int cartMessageChanged = 0;
192
		int cartMessageOOS = 0;
193
		int cartMessageUndeliverable = 0;
194
 
195
		Set<Integer> itemIds = cartLines.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
196
		logger.info("iteme ids -- {}", itemIds);
197
		List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds);
198
		Map<Integer, TagListing> tagListingsMap = tagListings.stream()
199
				.collect(Collectors.toMap(x -> x.getItemId(), x -> x));
200
 
201
		cart.setTotalPrice(0);
202
		int nonAccessoryQuantity = 0;
203
		for (CartLine cartLine : cartLines) {
204
			boolean itemQuantityChanged = false;
205
			CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
206
			int oldEstimate = cartLine.getEstimate();
207
			int itemId = cartLine.getItemId();
208
			Item item = null;
209
			try {
210
				item = itemRepository.selectById(itemId);
211
				cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
212
			} catch (ProfitMandiBusinessException e) {
213
				e.printStackTrace();
214
				logger.info("Error finding item with id {}", itemId);
215
				cartLineRepository.delete(cartLine);
216
				continue;
217
			}
218
			cartItemResponseModel.setItemId(itemId);
219
			cartItemResponseModel.setQuantity(0);
220
			cartItemResponseModel.setColor(item.getColor());
221
			List<CartItemMessage> cartItemMessages = new ArrayList<>();
222
			cartItemResponseModel.setCartItemMessages(cartItemMessages);
223
			cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
224
			cartItemResponseModel.setMinBuyQuantity(1);
225
			cartItemResponseModel.setQuantityStep(1);
226
			cartItemResponseModel.setMaxQuantity(0);
227
 
228
			/*
229
			 * int netAvailability = itemAvailabilityMap.get(itemId).stream()
230
			 * .collect(Collectors.summingInt(x -> x.getNetavailability()));
231
			 */
232
			int availability = 30;
233
			if (availability < cartLine.getQuantity()) {
234
				cartLine.setQuantity(availability);
235
				itemQuantityChanged = true;
236
			}
237
			cartItemResponseModel.setMaxQuantity(Math.max(availability, 100));
238
			if (availability < cartItemResponseModel.getMinBuyQuantity()) {
239
				cartItemResponseModel.setMinBuyQuantity(availability);
240
			}
241
			if (cartLine.getQuantity() < cartItemResponseModel.getMinBuyQuantity()) {
242
				itemQuantityChanged = true;
243
				cartLine.setQuantity(cartItemResponseModel.getMinBuyQuantity());
244
			}
245
 
246
			if (cartLine.getQuantity() > cartItemResponseModel.getMaxQuantity()) {
247
				itemQuantityChanged = true;
248
				cartLine.setQuantity(cartItemResponseModel.getMaxQuantity());
249
			}
250
			cartLine.setActualPrice(tagListingsMap.get(itemId).getSellingPrice());
251
			if (item.getCategoryId() == 10006 || item.getCategoryId() == 10010) {
252
				nonAccessoryQuantity += cartItemResponseModel.getQuantity();
253
				cartItemResponseModel.setCategoryName("mobile");
254
			}
255
			cartItemResponseModel.setSellingPrice(cartLine.getActualPrice());
256
 
257
			if (availability > 0) {
258
				cart.setTotalPrice(cart.getTotalPrice() + (cartLine.getActualPrice() * cartLine.getQuantity()));
259
				cartItemResponseModel.setQuantity(cartLine.getQuantity());
260
				cartItemResponseModel.setEstimate(2);
261
				if (itemQuantityChanged) {
262
					cartMessageChanged += 1;
263
					if (oldEstimate != cartItemResponseModel.getEstimate()) {
264
						cartLine.setEstimate(cartItemResponseModel.getEstimate());
265
						cart.setUpdateTimestamp(LocalDateTime.now());
266
						totalAmount += cartLine.getActualPrice() * cartLine.getQuantity();
267
					}
268
				}
269
			} else {
270
				cartItemResponseModel.setQuantity(0);
271
				cartMessageOOS += 1;
272
				CartItemMessage cartItemMessage = new CartItemMessage();
273
				cartItemMessage.setType("danger");
274
				cartItemMessage.setMessageText("Out of Stock");
275
				cartItemMessages.add(cartItemMessage);
276
				cartLineRepository.delete(cartLine);
277
			}
278
			totalQty += cartItemResponseModel.getQuantity();
279
 
280
			if (cartItemMessages.size() > 0) {
281
				cartResponse.getCartItems().add(0, cartItemResponseModel);
282
			} else {
283
				cartResponse.getCartItems().add(cartItemResponseModel);
284
			}
285
		}
286
		if (cart.getCheckoutTimestamp() != null) {
287
			if (cart.getUpdateTimestamp().isBefore(cart.getCheckoutTimestamp())) {
288
				cart.setCheckoutTimestamp(null);
289
			}
290
		}
291
		cartResponse.setTotalQty(totalQty);
292
		cartResponse.setTotalAmount(totalAmount);
293
		cartResponse.setNonAccessoryQuantity(nonAccessoryQuantity);
294
		cartResponse.setShippingCharge(0);
295
		cartResponse.setCartMessageChanged(cartMessageChanged);
296
		cartResponse.setCartMessageOOS(cartMessageOOS);
297
		cartResponse.setCartMessageUndeliverable(cartMessageUndeliverable);
298
		cartResponse.setCod(false);
299
		return cartResponse;
300
	}
301
 
302
	@Override
303
	public void addItemsToCart(int cartId, List<CartItem> cartItems) throws ProfitMandiBusinessException {
304
		logger.info("cart items {}", cartItems);
305
		cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
306
		Map<Integer, Integer> itemQuantityMap = cartItems.stream()
307
				.collect(Collectors.toMap(x -> x.getItemId(), x -> x.getQuantity()));
308
		List<CartLine> cartLines = cartLineRepository.selectAllByCart(cartId);
309
		// Delete cartLines with 0 values
310
		for (CartLine cartLine : cartLines) {
311
			Integer quantity = itemQuantityMap.get(cartLine.getItemId());
312
			if (quantity == null || quantity.intValue() == 0) {
313
				cartLineRepository.delete(cartLine);
314
			} else {
315
				cartLine.setQuantity(itemQuantityMap.get(cartLine.getItemId()));
316
				cartLine.setUpdateTimestapm(LocalDateTime.now());
317
			}
318
		}
319
		for (CartItem cartItem : cartItems) {
320
			if (cartLineRepository.selectByCartItem(cartId, cartItem.getItemId()) == null) {
321
				CartLine cartLineNew = new CartLine();
322
				cartLineNew.setItemId(cartItem.getItemId());
323
				cartLineNew.setQuantity(cartItem.getQuantity());
324
				cartLineNew.setCartId(cartId);
325
				cartLineNew.setCreateTimestamp(LocalDateTime.now());
326
				cartLineRepository.persist(cartLineNew);
327
			}
328
		}
329
 
330
	}
331
 
332
	@Override
333
	public void addAddressToCart(int cartId, long addressId) throws ProfitMandiBusinessException {
334
		Cart cart = cartRepository.selectById(cartId);
335
		cart.setAddressId((int) addressId);
336
 
337
	}
338
 
339
	@Override
28166 tejbeer 340
	public void addShoppingBag(int cartId, long qty) {
341
		CartLine cl = new CartLine();
29261 amit.gupta 342
		cl.setItemId(ProfitMandiConstants.ITEM_CARRY_BAG);
28166 tejbeer 343
		cl.setQuantity((int) qty);
344
		cl.setCartId(cartId);
345
		cl.setCreateTimestamp(LocalDateTime.now());
346
		cl.setDataProtectionAmount(0);
347
		cl.setEstimate(0);
29261 amit.gupta 348
		cl.setInsuranceAmount(0f);
28166 tejbeer 349
		cl.setDataProtectionInsurer(0);
29261 amit.gupta 350
		cl.setActualPrice(0.01f);
28166 tejbeer 351
		cartLineRepository.persist(cl);
352
 
353
	}
354
 
28653 amit.gupta 355
	@Override
356
	public CartModel removeFromCart(int cartId, int itemId) {
357
		// TODO Auto-generated method stub
358
		return null;
359
	}
360
 
29327 tejbeer 361
	@Override
362
	public List<FocusedShortageModel> focusedModelShortageValidation(int fofoId,
363
			Map<Integer, Integer> catalogCartQtyMap) throws ProfitMandiBusinessException {
364
 
365
		logger.info("fofoId {}", fofoId);
366
 
367
		Map<Integer, Long> inStockItemModel = new HashMap<>();
368
		Map<Integer, Long> itempendingIndent = new HashMap<>();
369
		Map<Integer, Long> grnItemPendingOrders = new HashMap<>();
370
 
371
		Map<Integer, Integer> focusedModelMap = null;
372
 
373
		inStockItemModel = currentInventorySnapshotRepository.selectSumInMobileStockGroupByCatalog(fofoId).stream()
374
				.collect(Collectors.toMap(x -> x.getCatalogItemId(), x -> x.getQty()));
375
 
376
		itempendingIndent = transactionService.getInTransitOrders(fofoId).stream()
377
				.collect(Collectors.groupingBy(x -> x.getLineItem().getItem().getCatalogItemId(),
378
						Collectors.summingLong(x -> (long) x.getLineItem().getQuantity())));
379
 
380
		grnItemPendingOrders = orderRepository.selectPendingGrnOrders(fofoId).stream()
381
				.collect(Collectors.groupingBy(x -> x.getLineItem().getItem().getCatalogItemId(),
382
						Collectors.summingLong(x -> (long) x.getLineItem().getQuantity())));
383
		List<PartnerRegion> partnerRegions = partnerRegionRepository.selectByfofoId(fofoId);
384
 
385
		FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(fofoId);
386
 
387
		List<String> retailerBlockBrands = retailerBlockBrandRepository.selectAllByRetailer(fofoId).stream()
388
				.map(x -> x.getBlockBrands()).collect(Collectors.toList());
389
 
390
		if (partnerRegions.size() > 0) {
391
			focusedModelMap = focusedModelRepository
392
					.selectAllByRegionIds(
393
							partnerRegions.stream().map(x -> x.getRegionId()).collect(Collectors.toList()))
394
					.stream().collect(Collectors.toMap(x -> x.getCatalogId(), x -> x.getMinimumQty()));
395
		} else {
396
			focusedModelMap = new HashMap<>();
397
		}
398
 
399
		Map<Integer, List<SaholicCIS>> itemAvailabilityMap = saholicInventoryService.getSaholicStock()
400
				.get(fofoStore.getWarehouseId());
401
 
402
		Map<Integer, Integer> catalogItemAailabilityMap = new HashMap<>();
403
 
404
		for (Entry<Integer, Integer> fm : focusedModelMap.entrySet()) {
405
 
406
			List<Item> items = itemRepository.selectAllByCatalogItemId(fm.getKey());
407
 
408
			int allColorNetAvailability = 0;
409
			for (Item item : items) {
410
				if (retailerBlockBrands.contains(item.getBrand()))
411
					continue;
412
				List<SaholicCIS> currentAvailability = itemAvailabilityMap.get(item.getId());
413
 
414
				if (currentAvailability != null) {
415
					allColorNetAvailability += currentAvailability.stream()
416
							.collect(Collectors.summingInt(SaholicCIS::getNetavailability));
417
				}
418
			}
419
 
420
			catalogItemAailabilityMap.put(fm.getKey(), allColorNetAvailability);
421
 
422
		}
423
 
424
		List<FocusedShortageModel> focusedModelShortageList = new ArrayList<>();
425
 
426
		for (Entry<Integer, Integer> fm : focusedModelMap.entrySet()) {
427
 
428
			logger.info("fm {}", fm);
429
 
430
			long overallStock = (inStockItemModel.get(fm.getKey()) == null ? 0 : inStockItemModel.get(fm.getKey()))
431
					+ (itempendingIndent.get(fm.getKey()) == null ? 0 : itempendingIndent.get(fm.getKey()))
432
					+ (grnItemPendingOrders.get(fm.getKey()) == null ? 0 : grnItemPendingOrders.get(fm.getKey()));
433
			logger.info("overallStock {}", overallStock);
434
 
435
			// Blocked brands available quantity is discussed to zero
436
			long warehouseStock = catalogItemAailabilityMap.get(fm.getKey()) == null ? 0
437
					: catalogItemAailabilityMap.get(fm.getKey());
438
			logger.info("warehouseStock {}", warehouseStock);
439
 
440
			long cartValue = catalogCartQtyMap.get(fm.getKey()) == null ? 0 : catalogCartQtyMap.get(fm.getKey());
441
 
442
			logger.info("cartValue" + cartValue);
443
			long totalStock = overallStock + cartValue;
444
			logger.info("totalStock" + totalStock);
445
 
446
			long shortQty = Math.min(fm.getValue() - totalStock, warehouseStock);
447
			logger.info("shortQty {}", shortQty);
448
 
449
			if (shortQty > 0) {
450
 
451
				Map<Integer, Integer> requiredItemQty = new HashMap<>();
452
 
453
				List<Item> it = itemRepository.selectAllByCatalogItemId(fm.getKey());
454
				FocusedShortageModel fms = new FocusedShortageModel();
455
				fms.setShortageQty((int) shortQty);
456
				fms.setCatalogId(fm.getKey());
457
				fms.setAvailabitiy(fm.getValue());
458
				fms.setInStock(overallStock);
459
 
460
				fms.setItemName(it.get(0).getBrand() + it.get(0).getModelNumber() + it.get(0).getModelName());
461
 
462
				Map<Integer, Integer> itemQtyMap = new HashMap<>();
463
 
464
				for (Item i : it) {
465
 
466
					List<SaholicCIS> ca = itemAvailabilityMap.get(i.getId());
467
 
468
					if (ca != null) {
469
 
470
						itemQtyMap.put(i.getId(),
471
								ca.stream().collect(Collectors.summingInt(SaholicCIS::getNetavailability)));
472
					}
473
				}
474
 
475
				itemQtyMap = itemQtyMap.entrySet().stream()
476
						.sorted(Collections.reverseOrder(Map.Entry.comparingByValue())).collect(Collectors
477
								.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
478
 
479
				for (long i = shortQty; i > 0; i--) {
480
					if (shortQty == 0) {
481
						break;
482
					}
483
 
484
					for (Entry<Integer, Integer> itemQty : itemQtyMap.entrySet()) {
485
 
486
						int availbleQty = itemQty.getValue();
487
						if (availbleQty == 0) {
488
							break;
489
						}
490
						if (requiredItemQty.get(itemQty.getKey()) == null) {
491
							requiredItemQty.put(itemQty.getKey(), 1);
492
							availbleQty = availbleQty - 1;
493
							if (availbleQty != 0) {
494
								itemQtyMap.put(itemQty.getKey(), availbleQty);
495
							}
496
							shortQty -= 1;
497
						} else {
498
 
499
							int qty = requiredItemQty.get(itemQty.getKey());
500
 
501
							requiredItemQty.put(itemQty.getKey(), qty + 1);
502
 
503
							availbleQty = availbleQty - 1;
504
							if (availbleQty != 0) {
505
								itemQtyMap.put(itemQty.getKey(), availbleQty);
506
							}
507
							shortQty -= 1;
508
						}
509
 
510
						if (shortQty == 0) {
511
							break;
512
						}
513
 
514
					}
515
 
516
				}
517
 
518
				Set<CartItem> cartItems = new HashSet<>();
519
				for (Entry<Integer, Integer> itemQtySet : requiredItemQty.entrySet()) {
520
 
521
					CartItem ci = new CartItem();
522
					Item item = itemRepository.selectById(itemQtySet.getKey());
523
					TagListing tl = tagListingRepository.selectByItemId(item.getId());
524
					ci.setItemId(item.getId());
525
					ci.setQuantity(itemQtySet.getValue());
526
					ci.setSellingPrice(tl.getSellingPrice());
527
					cartItems.add(ci);
528
 
529
				}
530
				fms.setCartItems(cartItems);
531
 
532
				// fms.setItemQtyAvailability(requiredItemQty);
533
 
534
				focusedModelShortageList.add(fms);
535
 
536
			}
537
 
538
		}
539
 
540
		logger.info("focusedModelShortageList {}", focusedModelShortageList);
541
		return focusedModelShortageList;
542
	}
543
 
26522 amit.gupta 544
}