| Line 475... |
Line 475... |
| 475 |
Map<Integer, Item> itemMap = this.toItemMap(items);
|
475 |
Map<Integer, Item> itemMap = this.toItemMap(items);
|
| 476 |
|
476 |
|
| 477 |
Set<Integer> nonSerializedItemIds = new HashSet<>();
|
477 |
Set<Integer> nonSerializedItemIds = new HashSet<>();
|
| 478 |
Set<String> serialNumbers = new HashSet<>();
|
478 |
Set<String> serialNumbers = new HashSet<>();
|
| 479 |
List<InsuranceModel> insuredModels = new ArrayList<>();
|
479 |
List<InsuranceModel> insuredModels = new ArrayList<>();
|
| - |
|
480 |
noGST = items.stream().anyMatch(item -> "NOGST".equals(item.getHsnCode()));
|
| 480 |
for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
|
481 |
for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
|
| 481 |
Item item = itemMap.get(customFofoOrderItem.getItemId());
|
482 |
Item item = itemMap.get(customFofoOrderItem.getItemId());
|
| 482 |
noGST = item.getHsnCode().equals("NOGST");
|
- |
|
| 483 |
if (item.getType().equals(ItemType.SERIALIZED)) {
|
483 |
if (item.getType().equals(ItemType.SERIALIZED)) {
|
| 484 |
for (SerialNumberDetail serialNumberDetail : customFofoOrderItem.getSerialNumberDetails()) {
|
484 |
for (SerialNumberDetail serialNumberDetail : customFofoOrderItem.getSerialNumberDetails()) {
|
| 485 |
serialNumbers.add(serialNumberDetail.getSerialNumber());
|
485 |
serialNumbers.add(serialNumberDetail.getSerialNumber());
|
| 486 |
if (serialNumberDetail.getAmount() > 0) {
|
486 |
if (serialNumberDetail.getAmount() > 0) {
|
| 487 |
if (customer.getEmailId() == null || customer.getEmailId().equals("")) {
|
487 |
if (customer.getEmailId() == null || customer.getEmailId().equals("")) {
|
| Line 583... |
Line 583... |
| 583 |
Map<Integer, Integer> inventoryItemIdQuantityUsed = new HashMap<>(); // to keep track of inventoryitem quanity
|
583 |
Map<Integer, Integer> inventoryItemIdQuantityUsed = new HashMap<>(); // to keep track of inventoryitem quanity
|
| 584 |
// used for scan records insertion
|
584 |
// used for scan records insertion
|
| 585 |
|
585 |
|
| 586 |
LOGGER.info("itemMap keys {}", itemMap.keySet());
|
586 |
LOGGER.info("itemMap keys {}", itemMap.keySet());
|
| 587 |
|
587 |
|
| 588 |
// N+1 fix: Fetch live demo serial numbers once before the loop (was being fetched per serialized item)
|
588 |
// Fetch live demo serial numbers only for this order's serials (not entire table)
|
| 589 |
Set<String> liveDemoSerialNumbers = new HashSet<>(liveDemoBillingRespository.selectAllSerialNumber());
|
- |
|
| 590 |
// Batch-fetch LiveDemoSerialNumber entities for all matching serialized inventory serials
|
- |
|
| 591 |
List<String> matchingLiveDemoSerials = serializedInventoryItemMap.values().stream()
|
589 |
List<String> orderSerials = serializedInventoryItemMap.values().stream()
|
| 592 |
.flatMap(Set::stream)
|
590 |
.flatMap(Set::stream)
|
| 593 |
.map(InventoryItem::getSerialNumber)
|
591 |
.map(InventoryItem::getSerialNumber)
|
| 594 |
.filter(liveDemoSerialNumbers::contains)
|
- |
|
| 595 |
.collect(Collectors.toList());
|
592 |
.collect(Collectors.toList());
|
| 596 |
Map<String, LiveDemoSerialNumber> liveDemoSerialNumberMap = new HashMap<>();
|
593 |
Map<String, LiveDemoSerialNumber> liveDemoSerialNumberMap = new HashMap<>();
|
| 597 |
if (!matchingLiveDemoSerials.isEmpty()) {
|
594 |
if (!orderSerials.isEmpty()) {
|
| 598 |
liveDemoSerialNumberMap = liveDemoBillingRespository.selectBySerialNumbers(matchingLiveDemoSerials).stream()
|
595 |
liveDemoSerialNumberMap = liveDemoBillingRespository.selectBySerialNumbers(orderSerials).stream()
|
| 599 |
.collect(Collectors.toMap(LiveDemoSerialNumber::getSerialNumber, ld -> ld, (a, b) -> a));
|
596 |
.collect(Collectors.toMap(LiveDemoSerialNumber::getSerialNumber, ld -> ld, (a, b) -> a));
|
| 600 |
}
|
597 |
}
|
| 601 |
|
598 |
|
| 602 |
// Lets reduce quantity and decide what inventory items to use.
|
599 |
// Lets reduce quantity and decide what inventory items to use.
|
| 603 |
for (Item item : items) {
|
600 |
for (Item item : items) {
|
| Line 645... |
Line 642... |
| 645 |
}
|
642 |
}
|
| 646 |
inventoryItemsToBill.put(item.getId(), inventoryItemsNonSerializedUsed);
|
643 |
inventoryItemsToBill.put(item.getId(), inventoryItemsNonSerializedUsed);
|
| 647 |
}
|
644 |
}
|
| 648 |
}
|
645 |
}
|
| 649 |
|
646 |
|
| 650 |
Map<Integer, PriceModel> itemIdMopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIdCustomFofoOrderItemMap.keySet(), fofoId);
|
- |
|
| 651 |
LOGGER.info("itemIdMopMap {}", itemIdMopPriceMap);
|
- |
|
| 652 |
if (accessoriesDeals) {
|
- |
|
| 653 |
this.validateDpPrice(fofoId, itemIdMopPriceMap, itemIdCustomFofoOrderItemMap);
|
647 |
// DP/MOP price validation disabled as of 11 sep 2025 as per tarun sir
|
| 654 |
} else {
|
- |
|
| 655 |
this.validateMopPrice(fofoId, itemIdMopPriceMap, itemIdCustomFofoOrderItemMap);
|
- |
|
| 656 |
}
|
- |
|
| 657 |
|
648 |
|
| 658 |
String fofoStoreCode = this.getFofoStoreCode(fofoId);
|
649 |
String fofoStoreCode = this.getFofoStoreCode(fofoId);
|
| 659 |
String documentNumber = null;
|
650 |
String documentNumber = null;
|
| 660 |
if (noGST) {
|
651 |
if (noGST) {
|
| 661 |
documentNumber = this.getSecurityDepositNumber(fofoId, fofoStoreCode);
|
652 |
documentNumber = this.getSecurityDepositNumber(fofoId, fofoStoreCode);
|
| Line 1841... |
Line 1832... |
| 1841 |
return serialNumbers;
|
1832 |
return serialNumbers;
|
| 1842 |
}
|
1833 |
}
|
| 1843 |
|
1834 |
|
| 1844 |
static final List<String> MOP_VOILATED_BRANDS = Arrays.asList("Live Demo", "Almost New");
|
1835 |
static final List<String> MOP_VOILATED_BRANDS = Arrays.asList("Live Demo", "Almost New");
|
| 1845 |
|
1836 |
|
| - |
|
1837 |
// DP price validation disabled as of 11 sep 2025 as per tarun sir
|
| 1846 |
private void validateDpPrice(int fofoId, Map<
|
1838 |
private void validateDpPrice(int fofoId, Map<
|
| 1847 |
Integer, PriceModel> itemIdMopPriceMap, Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws
|
1839 |
Integer, PriceModel> itemIdMopPriceMap, Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws
|
| 1848 |
ProfitMandiBusinessException {
|
1840 |
ProfitMandiBusinessException {
|
| 1849 |
if (pricingService.getMopVoilatedRetailerIds().contains(fofoId)) return;
|
- |
|
| 1850 |
for (Map.Entry<Integer, CustomFofoOrderItem> entry : itemIdCustomFofoLineItemMap.entrySet()) {
|
- |
|
| 1851 |
int itemId = entry.getKey();
|
- |
|
| 1852 |
CustomFofoOrderItem customFofoOrderItem = entry.getValue();
|
- |
|
| 1853 |
LOGGER.info("CustomFofoOrderItem -- {}", customFofoOrderItem);
|
- |
|
| 1854 |
PriceModel priceModel = itemIdMopPriceMap.get(itemId);
|
- |
|
| 1855 |
Item item = itemRepository.selectById(itemId);
|
- |
|
| 1856 |
// Comment this as of now 11 sep 2025 as per tarun sir
|
- |
|
| 1857 |
/*if (!MOP_VOILATED_BRANDS.contains(item.getBrand()) && (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID || item.getCategoryId() == ProfitMandiConstants.TABLET_CATEGORY_ID || item.getCategoryId() == ProfitMandiConstants.LED_CATEGORY_ID) && customFofoOrderItem.getSerialNumberDetails().stream().filter(x -> org.apache.commons.lang.StringUtils.isNotEmpty(x.getSerialNumber())).collect(Collectors.toList()).size() > 0) {
|
- |
|
| 1858 |
if (Utils.compareFloat(priceModel.getPrice(), customFofoOrderItem.getSellingPrice() + customFofoOrderItem.getDiscountAmount()) > 0) {
|
- |
|
| 1859 |
throw new ProfitMandiBusinessException("Selling Price for ", item.getItemDescription(), "FFORDR_1010");
|
- |
|
| 1860 |
}
|
- |
|
| 1861 |
} else {
|
- |
|
| 1862 |
if (!MOP_VOILATED_BRANDS.contains(item.getBrand()) && priceModel.getPurchasePrice() > customFofoOrderItem.getSellingPrice()) {
|
- |
|
| 1863 |
throw new ProfitMandiBusinessException("Selling Price", itemRepository.selectById(itemId).getItemDescription(), "Selling Price should not be less than DP");
|
- |
|
| 1864 |
}
|
- |
|
| 1865 |
}*/
|
- |
|
| 1866 |
}
|
- |
|
| 1867 |
}
|
1841 |
}
|
| 1868 |
|
1842 |
|
| - |
|
1843 |
// MOP price validation disabled as of 11 sep 2025 as per tarun sir
|
| 1869 |
private void validateMopPrice(int fofoId, Map<
|
1844 |
private void validateMopPrice(int fofoId, Map<
|
| 1870 |
Integer, PriceModel> itemIdMopPriceMap, Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws
|
1845 |
Integer, PriceModel> itemIdMopPriceMap, Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws
|
| 1871 |
ProfitMandiBusinessException {
|
1846 |
ProfitMandiBusinessException {
|
| 1872 |
if (pricingService.getMopVoilatedRetailerIds().contains(fofoId)) return;
|
- |
|
| 1873 |
Map<Integer, Float> invalidMopItemIdPriceMap = new HashMap<>();
|
- |
|
| 1874 |
for (Map.Entry<Integer, PriceModel> entry : itemIdMopPriceMap.entrySet()) {
|
- |
|
| 1875 |
CustomFofoOrderItem customFofoOrderItem = itemIdCustomFofoLineItemMap.get(entry.getKey());
|
- |
|
| 1876 |
Item item = itemRepository.selectById(customFofoOrderItem.getItemId());
|
- |
|
| 1877 |
if (!(MOP_VOILATED_BRANDS.contains(item.getBrand()) || item.getCategoryId() != ProfitMandiConstants.MOBILE_CATEGORY_ID || item.getCategoryId() != ProfitMandiConstants.TABLET_CATEGORY_ID) && customFofoOrderItem.getSellingPrice() + customFofoOrderItem.getDiscountAmount() < entry.getValue().getPrice()) {
|
- |
|
| 1878 |
invalidMopItemIdPriceMap.put(entry.getKey(), customFofoOrderItem.getSellingPrice());
|
- |
|
| 1879 |
}
|
- |
|
| 1880 |
}
|
- |
|
| 1881 |
// Comment this as of now 11 sep 2025 as per tarun sir
|
- |
|
| 1882 |
/*if (!invalidMopItemIdPriceMap.isEmpty()) {
|
- |
|
| 1883 |
LOGGER.error("Invalid itemIds selling prices{} should be greater than mop prices {}", invalidMopItemIdPriceMap, itemIdMopPriceMap);
|
- |
|
| 1884 |
throw new ProfitMandiBusinessException("invalidMopItemIdPrice", invalidMopItemIdPriceMap, "FFORDR_1010");
|
- |
|
| 1885 |
}*/
|
- |
|
| 1886 |
|
- |
|
| 1887 |
}
|
1847 |
}
|
| 1888 |
|
1848 |
|
| 1889 |
private void updateInventoryItemsAndScanRecord(Set<InventoryItem> inventoryItems, int fofoId, Map<
|
1849 |
private void updateInventoryItemsAndScanRecord(Set<InventoryItem> inventoryItems, int fofoId, Map<
|
| 1890 |
Integer, Integer> inventoryItemQuantityUsed, int fofoOrderId) {
|
1850 |
Integer, Integer> inventoryItemQuantityUsed, int fofoOrderId) {
|
| 1891 |
for (InventoryItem inventoryItem : inventoryItems) {
|
1851 |
for (InventoryItem inventoryItem : inventoryItems) {
|