Subversion Repositories SmartDukaan

Rev

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

Rev 35695 Rev 35733
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) {