Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
33873 ranu 1
package com.spice.profitmandi.dao.cart;
2
 
3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
4
import com.spice.profitmandi.dao.entity.catalog.Item;
5
import com.spice.profitmandi.dao.entity.fofo.FofoOpeningStock;
6
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
34384 ranu 7
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
33873 ranu 8
import com.spice.profitmandi.dao.model.PoAndGrnPendingPartnerStockModel;
9
import com.spice.profitmandi.dao.model.SoldAllCatalogitemQtyByPartnerModel;
10
import com.spice.profitmandi.dao.model.SoldFocusedItemPartnerWiseModel;
11
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
12
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
34384 ranu 13
import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;
33873 ranu 14
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
15
import com.spice.profitmandi.dao.repository.fofo.FofoOpeningStockRepository;
34384 ranu 16
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
33873 ranu 17
import com.spice.profitmandi.model.WarehouseItemQtyModel;
18
import com.spice.profitmandi.service.inventory.SaholicInventoryService;
19
import org.apache.logging.log4j.LogManager;
20
import org.apache.logging.log4j.Logger;
21
import org.hibernate.Session;
22
import org.hibernate.SessionFactory;
23
import org.springframework.beans.factory.annotation.Autowired;
24
import org.springframework.stereotype.Component;
25
 
26
import javax.persistence.TypedQuery;
27
import java.time.LocalDateTime;
28
import java.util.*;
29
import java.util.stream.Collectors;
30
 
31
@Component
32
public class SmartCartServiceImpl implements SmartCartService {
33
 
34
    private static final Set<Integer> tagIds = new HashSet<>(Arrays.asList(4));
35
 
36
    private static final Logger logger = LogManager.getLogger(SmartCartServiceImpl.class);
37
 
38
    @Autowired
39
    SessionFactory sessionFactory;
40
 
41
    @Autowired
42
    ItemRepository itemRepository;
43
 
34384 ranu 44
    @Autowired
45
    InventoryItemRepository inventoryItemRepository;
33873 ranu 46
 
34384 ranu 47
 
33873 ranu 48
    @Autowired
49
    CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
50
 
51
    @Autowired
52
    FofoOpeningStockRepository fofoOpeningStockRepository;
53
 
54
 
55
    @Autowired
56
    private FofoStoreRepository fofoStoreRepository;
57
 
58
    @Autowired
59
    private SaholicInventoryService saholicInventoryService;
60
 
34384 ranu 61
    @Autowired
62
    private ActivatedImeiRepository activatedImeiRepository;
63
 
64
 
33873 ranu 65
    @Override
66
    public List<SoldFocusedItemPartnerWiseModel> getAllSoldFocusModelByPartner(int fofoId, LocalDateTime orderDate){
67
        Session session = sessionFactory.getCurrentSession();
68
        final TypedQuery<SoldFocusedItemPartnerWiseModel> typedQuerySimilar = session.createNamedQuery("Focused.soldFocusItemByPartner", SoldFocusedItemPartnerWiseModel.class);
69
 
70
        typedQuerySimilar.setParameter("fofoId", fofoId);
71
        typedQuerySimilar.setParameter("orderDate", orderDate);
72
 
73
        return typedQuerySimilar.getResultList();
74
    }
75
 
76
    @Override
77
    public List<SoldAllCatalogitemQtyByPartnerModel> getAllSoldCatalogItemByPartner(int fofoId, LocalDateTime startOfday, LocalDateTime endOfDay){
78
        Session session = sessionFactory.getCurrentSession();
79
        final TypedQuery<SoldAllCatalogitemQtyByPartnerModel> typedQuerySimilar = session.createNamedQuery("FofoOrder.soldAllItemByToday", SoldAllCatalogitemQtyByPartnerModel.class);
80
 
81
        typedQuerySimilar.setParameter("fofoId", fofoId);
82
        typedQuerySimilar.setParameter("startOfDay", startOfday);
83
        typedQuerySimilar.setParameter("endOfDay", endOfDay);
84
 
85
        return typedQuerySimilar.getResultList();
86
    }
87
 
88
    @Override
89
    public List<PoAndGrnPendingPartnerStockModel> getAllGrnPendingAndPoPartnerStock(int fofoId){
90
        Session session = sessionFactory.getCurrentSession();
91
        final TypedQuery<PoAndGrnPendingPartnerStockModel> typedQuerySimilar = session.createNamedQuery("Order.partnerStockPoAndGrnPending", PoAndGrnPendingPartnerStockModel.class);
92
 
93
        typedQuerySimilar.setParameter("fofoId", fofoId);
94
 
95
        return typedQuerySimilar.getResultList();
96
    }
97
 
98
    @Override
99
    public void addOpeningStock(int itemId, int fofoId, int quantity) throws ProfitMandiBusinessException{
100
        int catalogId = itemRepository.selectById(itemId).getCatalogItemId();
101
        FofoOpeningStock fofoOpeningStock = fofoOpeningStockRepository.findByFofoIdAndCatalogId(fofoId,catalogId);
102
        if(fofoOpeningStock !=null){
103
            int updatedQty = fofoOpeningStock.getCurrentQty() + quantity;
104
            fofoOpeningStock.setCurrentQty(updatedQty);
105
        }
106
 
107
    }
108
 
109
    @Override
110
    public void minusOpeningStock(int itemId, int fofoId, int quantity) throws ProfitMandiBusinessException{
111
        int catalogId = itemRepository.selectById(itemId).getCatalogItemId();
112
        FofoOpeningStock fofoOpeningStock = fofoOpeningStockRepository.findByFofoIdAndCatalogId(fofoId,catalogId);
113
        if(fofoOpeningStock !=null){
114
            int updatedQty = fofoOpeningStock.getCurrentQty() - quantity;
115
            fofoOpeningStock.setCurrentQty(updatedQty);
116
        }
117
 
118
 
119
    }
120
 
121
    @Override
122
    public Set<Integer> getAllItemIdsForSmartCartOfPartner(int fofoId) throws ProfitMandiBusinessException {
123
        List<FofoOpeningStock> fofoOpeningStocks = fofoOpeningStockRepository.selectAllByFofoId(fofoId);
124
 
125
        List<FofoOpeningStock> filteredFofoOpeningStocks = fofoOpeningStocks.stream()
126
                .filter(stock -> stock.getCurrentQty() < stock.getOpeningQty())
127
                .collect(Collectors.toList());
128
 
129
        logger.info("filteredFofoOpeningStocks {}",filteredFofoOpeningStocks);
130
 
131
        if(filteredFofoOpeningStocks.size() > 0) {
132
            Set<Integer> filteredCatalogIds = filteredFofoOpeningStocks.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
133
 
134
 
135
            List<Item> soldItems = itemRepository.selectAllByCatalogIds(filteredCatalogIds);
136
 
137
            List<Integer> soldItemIds = soldItems.stream().map(x -> x.getId()).collect(Collectors.toList());
138
 
139
//        now logic start for check our (smart dukaan) stock item
140
 
141
            FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(fofoId);
142
 
143
            Map<Integer, List<WarehouseItemQtyModel>> itemQtyMap = saholicInventoryService.getSaholicStock(fofoStore.getWarehouseId(), soldItemIds);
144
 
145
 
146
            // Collect items where availability is greater than 0
147
            Set<Integer> saholicStockItemIds = itemQtyMap.entrySet().stream()
148
                    .filter(entry -> entry.getValue().stream().anyMatch(x -> x.getNetAvailability() > 0))
149
                    .map(Map.Entry::getKey)
150
                    .collect(Collectors.toSet());
151
 
152
            if (saholicStockItemIds.size() > 0) {
153
                List<Item> items = itemRepository.selectByIds(saholicStockItemIds);
154
 
155
                Set<Integer> saholictStockCatalogIds = items.stream().map(x -> x.getCatalogItemId()).collect(Collectors.toSet());
156
 
157
 
158
                return saholictStockCatalogIds;
159
            } else {
160
 
161
                return new HashSet<>();
162
            }
163
          } else {
164
            return new HashSet<>();
165
         }
166
        }
167
 
168
 
34384 ranu 169
    @Override
34449 ranu 170
    public Map<Integer, Map<Integer, Integer>> activatedButNotBilledCatalogQtyMap() throws ProfitMandiBusinessException {
34384 ranu 171
        List<FofoStore> fofoStores = fofoStoreRepository.selectAll();
172
        List<Integer> fofoIds = fofoStores.stream().map(x -> x.getId()).collect(Collectors.toList());
34449 ranu 173
        Map<Integer, Map<Integer, Integer>> fofoCatalogQtyMap = new HashMap<>();
34384 ranu 174
        for (Integer fofoId : fofoIds) {
175
            List<InventoryItem> inventoryItems = inventoryItemRepository.selectByActivatedNotSold(fofoId);
34449 ranu 176
            Map<Integer, Integer> catalogIdQtyMap = new HashMap<>();
177
            for (InventoryItem item : inventoryItems) {
178
                Item item1 = itemRepository.selectById(item.getItemId());
179
                Integer catalogId = item1.getCatalogItemId(); // Assuming this exists
180
                catalogIdQtyMap.put(catalogId, catalogIdQtyMap.getOrDefault(catalogId, 0) + 1);
34384 ranu 181
            }
34449 ranu 182
            fofoCatalogQtyMap.put(fofoId, catalogIdQtyMap);
34384 ranu 183
        }
34449 ranu 184
        System.out.println("fofoCatalogQtyMap {}" + fofoCatalogQtyMap);
185
        return fofoCatalogQtyMap;
34384 ranu 186
 
187
    }
188
 
33873 ranu 189
}
190
 
191
 
192