Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
33917 ranu 1
package com.spice.profitmandi.service;
2
 
3
import com.spice.profitmandi.common.model.ProfitMandiConstants;
34397 ranu 4
import com.spice.profitmandi.dao.entity.fofo.MonthlyTarget;
33985 ranu 5
import com.spice.profitmandi.dao.entity.inventory.RbmAchievements;
33926 ranu 6
import com.spice.profitmandi.dao.entity.inventory.RbmTargets;
33917 ranu 7
import com.spice.profitmandi.dao.model.*;
33985 ranu 8
import com.spice.profitmandi.dao.repository.catalog.RbmAchievementsRepository;
33926 ranu 9
import com.spice.profitmandi.dao.repository.catalog.RbmTargetsRepository;
34397 ranu 10
import com.spice.profitmandi.dao.repository.fofo.MonthlyTargetRepository;
11
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
33917 ranu 12
import org.apache.logging.log4j.LogManager;
13
import org.apache.logging.log4j.Logger;
14
import org.hibernate.Session;
15
import org.hibernate.SessionFactory;
16
import org.hibernate.query.NativeQuery;
17
import org.springframework.beans.factory.annotation.Autowired;
18
import org.springframework.stereotype.Component;
19
 
20
import javax.persistence.TypedQuery;
21
import java.time.LocalDate;
33926 ranu 22
import java.time.LocalDateTime;
23
import java.time.LocalTime;
34397 ranu 24
import java.time.YearMonth;
33917 ranu 25
import java.util.ArrayList;
26
import java.util.List;
33997 ranu 27
import java.util.Map;
34034 ranu 28
import java.util.Optional;
33997 ranu 29
import java.util.stream.Collectors;
33917 ranu 30
 
31
@Component
32
public class RbmTargetServiceImpl implements RbmTargetService {
33
    private static final Logger LOGGER = LogManager.getLogger(RbmTargetServiceImpl.class);
34
 
35
    @Autowired
36
    SessionFactory sessionFactory;
37
 
33926 ranu 38
    @Autowired
39
    RbmTargetsRepository rbmTargetsRepository;
33917 ranu 40
 
33985 ranu 41
    @Autowired
42
    RbmAchievementsRepository rbmAchievementsRepository;
43
 
34397 ranu 44
    @Autowired
45
    MonthlyTargetRepository monthlyTargetRepository;
46
 
33917 ranu 47
    @Override
48
    public List<WarehouseRbmTargetModel> getWarehouseWiseRbmMonthlyTarget() {
49
        Session session = sessionFactory.getCurrentSession();
50
        final TypedQuery<WarehouseRbmTargetModel> typedQuerySimilar = session.createNamedQuery("RbmTarget.getWarehouseWiseMonthlyTarget", WarehouseRbmTargetModel.class);
51
 
52
        return typedQuerySimilar.getResultList();
53
 
54
    }
55
 
56
    @Override
57
    public List<MTDAchievedTargetModel> getDateWiseAchievedTargetOfRbm(LocalDate startDate, LocalDate endDate) {
58
        Session session = sessionFactory.getCurrentSession();
59
        final TypedQuery<MTDAchievedTargetModel> typedQuerySimilar = session.createNamedQuery("RbmTarget.getRbmAchievedMonthlyTarget", MTDAchievedTargetModel.class);
60
        typedQuerySimilar.setParameter("startDate", startDate);
61
        typedQuerySimilar.setParameter("endDate", endDate);
62
        return typedQuerySimilar.getResultList();
63
 
64
    }
65
 
66
    @Override
34055 ranu 67
    public List<TodayAchievedMovementModel> getMovementWiseAchievementByDate(LocalDate startDate, LocalDate endDate) {
33917 ranu 68
        LOGGER.info("start date {}, end date {}", startDate, endDate);
69
        Session session = sessionFactory.getCurrentSession();
34055 ranu 70
        final TypedQuery<TodayAchievedMovementModel> typedQuerySimilar = session.createNamedQuery("RBMTarget.TodayAchivementByMovement", TodayAchievedMovementModel.class);
33917 ranu 71
        typedQuerySimilar.setParameter("startDate", startDate);
72
        typedQuerySimilar.setParameter("endDate", endDate);
73
        return typedQuerySimilar.getResultList();
74
 
75
    }
76
 
77
    @Override
78
    public List<WarehouseMobileStockByMovementModel> getWarehouseMobileStockByMovement() {
79
        Session session = sessionFactory.getCurrentSession();
80
        final TypedQuery<WarehouseMobileStockByMovementModel> typedQuerySimilar = session.createNamedQuery("WarehouseStock.MovementWiseMobileStock", WarehouseMobileStockByMovementModel.class);
81
 
82
        return typedQuerySimilar.getResultList();
83
 
84
    }
85
 
33991 ranu 86
    @Override
87
    public List<SoldCatalogsReportModel> getCatalogSoldReport(LocalDate startDate, LocalDate endDate) {
88
        Session session = sessionFactory.getCurrentSession();
89
        final TypedQuery<SoldCatalogsReportModel> typedQuerySimilar = session.createNamedQuery("CatalogsReport.SoldCatalogsReport", SoldCatalogsReportModel.class);
90
        typedQuerySimilar.setParameter("startDate", startDate);
91
        typedQuerySimilar.setParameter("endDate", endDate);
92
        return typedQuerySimilar.getResultList();
33917 ranu 93
 
33991 ranu 94
    }
95
 
96
 
33917 ranu 97
    public int getWorkingDaysCount(LocalDate startDate) {
98
        Session session = sessionFactory.getCurrentSession();
99
 
100
        // Convert the LocalDate to a format MySQL can interpret
101
        String startDateString = startDate.toString();
102
 
103
        final NativeQuery<?> nativeQuery = session.createNativeQuery(
104
                "SELECT (DATEDIFF(LAST_DAY(:startDate), :startDate) + 1) " +
105
                        " - (FLOOR((DATEDIFF(LAST_DAY(:startDate), :startDate) + (WEEKDAY(:startDate) + 1)) / 7)) " +
106
                        " - (SELECT COUNT(*) " +
107
                        " FROM logistics.publicholidays " +
108
                        " WHERE date BETWEEN :startDate AND LAST_DAY(:startDate) " +
109
                        " AND WEEKDAY(date) != 6) AS working_days"
110
        );
111
 
112
        // Set the start date parameter for each placeholder
113
        nativeQuery.setParameter("startDate", startDateString);
114
 
115
        Object result = nativeQuery.getSingleResult();
116
        return result != null ? ((Number) result).intValue() : 0;
117
    }
118
 
119
 
120
    @Override
121
    public List<RbmArrViewModel> getRbmTodayArr() throws Exception {
122
        LocalDate todayDate = LocalDate.now();
123
        return getRbmTodayArr(todayDate);
124
    }
125
 
126
    @Override
33997 ranu 127
    public List<RbmTargetAndAchievementsModel> getRbmTargetsAndAchievemnts(LocalDate startDate, LocalDate endDate) {
128
 
34002 ranu 129
        List<RbmTargetsModel> rbmTargetsList = rbmTargetsRepository.selectTargetsModelListByDates(startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33997 ranu 130
 
131
        LOGGER.info("rbmTargetsList {}", rbmTargetsList);
132
        // Group Targtes by RBM and Warehouse
34002 ranu 133
        Map<String, RbmTargetsModel> targetsMap = rbmTargetsList.stream()
33997 ranu 134
                .collect(Collectors.toMap(
135
                        a -> a.getRbmAuthId() + "-" + a.getWarehouseId(),
136
                        a -> a,
137
                        (a1, a2) -> mergeTargets(a1, a2) // Handle duplicates by merging
138
                ));
139
 
140
 
34002 ranu 141
        List<RbmAchievementsModel> rbmAchievements = rbmAchievementsRepository.selectAchievementsModelListByDates(startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33997 ranu 142
        LOGGER.info("rbmTargetsList {}", rbmAchievements);
143
        // Group achievements by RBM and Warehouse
34002 ranu 144
        Map<String, RbmAchievementsModel> achievementMap = rbmAchievements.stream()
33997 ranu 145
                .collect(Collectors.toMap(
146
                        a -> a.getRbmAuthId() + "-" + a.getWarehouseId(),
147
                        a -> a,
148
                        (a1, a2) -> mergeAchievements(a1, a2) // Handle duplicates by merging
149
                ));
150
 
151
        return targetsMap.keySet().stream()
152
                .map(key -> {
153
                    String[] parts = key.split("-");
154
                    int rbmAuthId = Integer.parseInt(parts[0]);
155
                    int warehouseId = Integer.parseInt(parts[1]);
156
 
34002 ranu 157
                    RbmTargetsModel target = targetsMap.get(key);
158
                    RbmAchievementsModel achievement = achievementMap.getOrDefault(key, new RbmAchievementsModel());
33997 ranu 159
 
160
                    RbmTargetAndAchievementsModel model = new RbmTargetAndAchievementsModel();
161
                    model.setAuthId(rbmAuthId);
162
                    model.setRbmName(target.getRbmName());
163
                    model.setWarehouseName(ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(warehouseId, "Unknown"));
164
 
165
                    // Set target values
34006 ranu 166
                    model.setHidTarget((long) target.getHidTarget());
34098 ranu 167
                    model.setRunningTarget((long) target.getRunningTarget());
34006 ranu 168
                    model.setFastMovingTarget((long) target.getFastMovingTarget());
169
                    model.setSlowMovingTarget((long) target.getSlowMovingTarget());
170
                    model.setOtherMovingTarget((long) target.getOtherTarget());
33997 ranu 171
 
172
                    // Set achievement values
34006 ranu 173
                    model.setAchievedHid((long) achievement.getAchievedHidTarget());
34098 ranu 174
                    model.setAchievedRunning((long) achievement.getAchievedRunningTarget());
34006 ranu 175
                    model.setAchievedFastMoving((long) achievement.getAchievedFastMovingTarget());
176
                    model.setAchievedSlowMoving((long) achievement.getAchievedSlowMovingTarget());
177
                    model.setAchievedOtherMoving((long) achievement.getAchievedOtherTarget());
33997 ranu 178
 
179
                    model.setTotalTarget(
34006 ranu 180
                            (long) target.getHidTarget() +
34098 ranu 181
                                    (long) target.getRunningTarget() +
34006 ranu 182
                                    (long) target.getFastMovingTarget() +
183
                                    (long) target.getSlowMovingTarget() +
184
                                    (long) target.getOtherTarget()
33997 ranu 185
                    );
186
                    model.setTotalAchievemnt(
34006 ranu 187
                            (long) achievement.getAchievedHidTarget() +
34098 ranu 188
                                    (long) achievement.getAchievedRunningTarget() +
34006 ranu 189
                                    (long) achievement.getAchievedFastMovingTarget() +
190
                                    (long) achievement.getAchievedSlowMovingTarget() +
191
                                    (long) achievement.getAchievedOtherTarget()
33997 ranu 192
                    );
193
 
194
                    return model;
195
                })
196
                .collect(Collectors.toList());
197
 
198
    }
199
 
34002 ranu 200
    private RbmTargetsModel mergeTargets(RbmTargetsModel a1, RbmTargetsModel a2) {
33997 ranu 201
 
202
        // Merge logic for achievements (aggregate the target and achieved values)
34006 ranu 203
        a1.setHidTarget((a1.getHidTarget()) +
204
                (a2.getHidTarget()));
33997 ranu 205
 
34006 ranu 206
        a1.setFastMovingTarget((a1.getFastMovingTarget()) +
207
                (a2.getFastMovingTarget()));
33997 ranu 208
 
34006 ranu 209
        a1.setSlowMovingTarget((a1.getSlowMovingTarget()) +
210
                (a2.getSlowMovingTarget()));
33997 ranu 211
 
34098 ranu 212
        a1.setRunningTarget((a1.getRunningTarget()) +
213
                (a2.getRunningTarget()));
33997 ranu 214
 
34006 ranu 215
        a1.setOtherTarget((a1.getOtherTarget()) +
216
                (a2.getOtherTarget()));
33997 ranu 217
        return a1;
218
    }
219
 
34002 ranu 220
    private RbmAchievementsModel mergeAchievements(RbmAchievementsModel a1, RbmAchievementsModel a2) {
33997 ranu 221
        // Merge logic for achievements (aggregate the target and achieved values)
34006 ranu 222
        a1.setAchievedHidTarget((a1.getAchievedHidTarget()) +
223
                (a2.getAchievedHidTarget()));
33997 ranu 224
 
34098 ranu 225
        a1.setAchievedRunningTarget((a1.getAchievedRunningTarget()) +
226
                (a2.getAchievedRunningTarget()));
33997 ranu 227
 
34006 ranu 228
        a1.setAchievedFastMovingTarget((a1.getAchievedFastMovingTarget()) +
229
                (a2.getAchievedFastMovingTarget()));
33997 ranu 230
 
34006 ranu 231
        a1.setAchievedSlowMovingTarget((a1.getAchievedSlowMovingTarget()) +
232
                (a2.getAchievedSlowMovingTarget()));
33997 ranu 233
 
34006 ranu 234
        a1.setAchievedOtherTarget((a1.getAchievedOtherTarget()) +
235
                (a2.getAchievedOtherTarget()));
33997 ranu 236
 
237
        return a1;
238
    }
34002 ranu 239
 
33997 ranu 240
    @Override
33917 ranu 241
    public List<RbmArrViewModel> getRbmTodayArr(LocalDate todayDate) throws Exception {
242
 
243
        LocalDate startDateOfMonthDay1 = LocalDate.now().withDayOfMonth(1);
244
 
34289 ranu 245
        List<WarehouseRbmTargetModel> warehouseRbmTargetModelList = this.getWarehouseWiseRbmMonthlyTarget();
246
        List<WarehouseRbmTargetModel> warehouseRbmTargetModels = warehouseRbmTargetModelList.stream().filter(x -> x.getMonthlyTarget() > 0).collect(Collectors.toList());
247
        LOGGER.info("warehouseRbmTargetModels {}", warehouseRbmTargetModels);
248
        List<TodayAchievedMovementModel> todayAchievedMovementModels = getMovementWiseAchievementByDate(todayDate, todayDate.plusDays(1));
33917 ranu 249
 
250
        List<MTDAchievedTargetModel> mtdAchievedTargetModels = getDateWiseAchievedTargetOfRbm(startDateOfMonthDay1, todayDate);
251
 
252
        int remainingWorkingDaysCount = getWorkingDaysCount(todayDate);
253
 
33926 ranu 254
        List<RbmTargets> todayRbmTargetsList = rbmTargetsRepository.selectTargetsByDates(todayDate.atStartOfDay(), todayDate.atTime(LocalTime.MAX));
33917 ranu 255
 
33926 ranu 256
        LOGGER.info("todayRbmTargetsList {}", todayRbmTargetsList);
33917 ranu 257
 
258
        List<RbmArrViewModel> rbmArrViewModels = new ArrayList<>();
259
 
34028 ranu 260
        if (!todayRbmTargetsList.isEmpty()) {
33917 ranu 261
 
34028 ranu 262
            for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
33917 ranu 263
 
34028 ranu 264
                float monthlyTarget = rbmTarget.getMonthlyTarget();
265
                float achievedSoFar = (float) mtdAchievedTargetModels.stream()
266
                        .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
267
                        .mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
268
                        .sum();
33917 ranu 269
 
34028 ranu 270
                float remainingTarget = monthlyTarget - achievedSoFar;
33953 ranu 271
 
34028 ranu 272
                float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
273
 
33926 ranu 274
                String warehouseName = ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(rbmTarget.getWarehouseId(), "Unknown");
33917 ranu 275
 
34288 ranu 276
                LOGGER.info("rbmTarget ==== {}", rbmTarget);
34281 ranu 277
 
34285 ranu 278
                TodayAchievedMovementModel todayAchievedMovementModel = todayAchievedMovementModels.stream()
279
                        .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
280
                        .findFirst()
281
                        .orElse(null);
34283 ranu 282
 
34285 ranu 283
 
34034 ranu 284
                Optional<RbmTargets> optionalTodayRbmTargets = todayRbmTargetsList.stream()
285
                        .filter(x -> x.getRbmAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
286
                        .findFirst();
33917 ranu 287
 
34034 ranu 288
                if (optionalTodayRbmTargets.isPresent()) {
289
                    RbmTargets todayRbmTargets = optionalTodayRbmTargets.get();
290
                    LOGGER.info("todayRbmTargets {}", todayRbmTargets);
291
                    RbmArrViewModel viewModel = new RbmArrViewModel();
33917 ranu 292
 
34034 ranu 293
                    viewModel.setAuthId(rbmTarget.getAuthId());
294
                    viewModel.setRbmName(rbmTarget.getRbmName());
295
                    viewModel.setWarehouseName(warehouseName);
296
                    viewModel.setTodayTarget(Math.round(todayTarget));
297
                    viewModel.setMonthlyTarget(Math.round(monthlyTarget));
298
                    viewModel.setMtdAchievedTarget(Math.round(achievedSoFar));
33926 ranu 299
 
34034 ranu 300
                    viewModel.setTodayHidTarget(Math.round((todayRbmTargets.getHidTarget())));
301
                    viewModel.setTodayFastMovingTarget(Math.round(todayRbmTargets.getFastMovingTarget()));
34098 ranu 302
                    viewModel.setTodaySlowMovingTarget(Math.round(todayRbmTargets.getSlowMovingtarget()));
303
                    viewModel.setTodayRunningTarget(Math.round(todayRbmTargets.getRunningtarget()));
34034 ranu 304
                    viewModel.setTodayOtherMovingTarget(Math.round(todayRbmTargets.getOtherTarget()));
33926 ranu 305
 
34283 ranu 306
                    if (todayAchievedMovementModel != null) {
307
                        viewModel.setTodayAchievedHidTarget(Math.round(todayAchievedMovementModel.getHidBilled()));
308
                        viewModel.setTodayAchievedFastMovingTarget(Math.round(todayAchievedMovementModel.getFastMovingBilled()));
309
                        viewModel.setTodayAchievedSlowMovingTarget(Math.round(todayAchievedMovementModel.getSlowMovinBilled()));
310
                        viewModel.setTodayAchievedRunningTarget(Math.round(todayAchievedMovementModel.getRunningBilled()));
311
                        viewModel.setTodayAchievedOtherMovingTarget(Math.round(todayAchievedMovementModel.getOtherBilled()));
312
                        viewModel.setTotalAchievedTarget(Math.round(todayAchievedMovementModel.getHidBilled() + todayAchievedMovementModel.getFastMovingBilled() + todayAchievedMovementModel.getSlowMovinBilled() + todayAchievedMovementModel.getRunningBilled() + todayAchievedMovementModel.getOtherBilled()));
313
                    } else {
314
                        viewModel.setTodayAchievedHidTarget(0);
315
                        viewModel.setTodayAchievedFastMovingTarget(0);
316
                        viewModel.setTodayAchievedSlowMovingTarget(0);
317
                        viewModel.setTodayAchievedRunningTarget(0);
318
                        viewModel.setTodayAchievedOtherMovingTarget(0);
319
                        viewModel.setTotalAchievedTarget(0);
320
                    }
34034 ranu 321
                    rbmArrViewModels.add(viewModel);
322
                } else {
323
                    LOGGER.info("No matching RbmTargets found for AuthId: {} and rbmname {} and WarehouseId: {}", rbmTarget.getAuthId(), rbmTarget.getRbmName(), rbmTarget.getWarehouseId());
324
                }
33917 ranu 325
 
34034 ranu 326
 
327
 
34028 ranu 328
            }
33917 ranu 329
        }
330
 
331
        LOGGER.info("rbmArrViewModels {}", rbmArrViewModels);
332
        return rbmArrViewModels;
333
    }
334
 
33926 ranu 335
    @Override
336
    public void setMovementWiseRbmTargets() {
337
        LocalDate todayDate = LocalDate.now();
33917 ranu 338
 
33926 ranu 339
        LocalDate startDateOfMonthDay1 = LocalDate.now().withDayOfMonth(1);
340
 
341
        List<WarehouseRbmTargetModel> warehouseRbmTargetModels = this.getWarehouseWiseRbmMonthlyTarget();
342
 
343
        List<MTDAchievedTargetModel> mtdAchievedTargetModels = getDateWiseAchievedTargetOfRbm(startDateOfMonthDay1, todayDate);
344
 
345
 
346
        int remainingWorkingDaysCount = getWorkingDaysCount(todayDate);
347
 
348
        List<WarehouseMobileStockByMovementModel> warehouseMobileStockByMovementModels = getWarehouseMobileStockByMovement();
349
 
350
        for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
351
 
352
            float monthlyTarget = rbmTarget.getMonthlyTarget();
353
            float achievedSoFar = (float) mtdAchievedTargetModels.stream()
354
                    .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
355
                    .mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
356
                    .sum();
357
 
358
 
359
            float remainingTarget = monthlyTarget - achievedSoFar;
33953 ranu 360
            LOGGER.info("remainingTarget {}", remainingTarget);
33926 ranu 361
 
33953 ranu 362
            float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
363
            LOGGER.info("todayTarget {}", todayTarget);
364
 
33926 ranu 365
            // Get the warehouse stock data
366
            WarehouseMobileStockByMovementModel warehouseMobileStockByMovementModel = warehouseMobileStockByMovementModels.stream()
367
                    .filter(x -> x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().orElse(null);
368
 
369
 
370
            if (warehouseMobileStockByMovementModel != null) {
371
 
372
                // Total stock value for this warehouse
373
                float totalStockValue = warehouseMobileStockByMovementModel.getTotalAvailabilityPrice();
374
 
375
                // Calculate target allocation based on stock value proportion
376
                float hidTarget = (warehouseMobileStockByMovementModel.getTotalHidCatalogPrice() / totalStockValue) * todayTarget;
377
                float fastMovingTarget = (warehouseMobileStockByMovementModel.getTotalFastMovingCatalogPrice() / totalStockValue) * todayTarget;
378
                float slowMovingTarget = (warehouseMobileStockByMovementModel.getTotalSlowMovingCatalogPrice() / totalStockValue) * todayTarget;
34098 ranu 379
                float runningTarget = (warehouseMobileStockByMovementModel.getTotalRunningCatalogPrice() / totalStockValue) * todayTarget;
33926 ranu 380
                float otherTarget = (warehouseMobileStockByMovementModel.getTotalOtherCategoryCatalogPrice() / totalStockValue) * todayTarget;
381
 
382
                RbmTargets rbmTargets = new RbmTargets();
383
                rbmTargets.setWarehouseId(rbmTarget.getWarehouseId());
384
                rbmTargets.setRbmAuthId(rbmTarget.getAuthId());
385
                rbmTargets.setRbmName(rbmTarget.getRbmName());
34098 ranu 386
                rbmTargets.setRunningtarget(runningTarget);
33926 ranu 387
                rbmTargets.setHidTarget(hidTarget);
388
                rbmTargets.setFastMovingTarget(fastMovingTarget);
34098 ranu 389
                rbmTargets.setSlowMovingtarget(slowMovingTarget);
33926 ranu 390
                rbmTargets.setOtherTarget(otherTarget);
391
                rbmTargets.setCreateTimestamp(LocalDateTime.now());
392
 
393
                rbmTargetsRepository.persist(rbmTargets);
394
 
395
            }
396
        }
397
 
398
    }
399
 
400
 
33985 ranu 401
    @Override
402
    public void setMovementWiseRbmAchievement() {
403
        LocalDate todayDate = LocalDate.now();
404
 
34055 ranu 405
        List<TodayAchievedMovementModel> todayAchievedMovementModels = getMovementWiseAchievementByDate(todayDate, todayDate.plusDays(1));
33985 ranu 406
 
407
 
408
        for (TodayAchievedMovementModel achievement : todayAchievedMovementModels) {
409
 
410
            RbmAchievements rbmAchievements = new RbmAchievements();
411
 
412
            rbmAchievements.setRbmAuthId(achievement.getAuthId());
413
            rbmAchievements.setRbmName(achievement.getRbmName());
414
            rbmAchievements.setWarehouseId(achievement.getWarehouseId());
415
            rbmAchievements.setAchievedHidTarget(achievement.getHidBilled());
416
            rbmAchievements.setAchievedFastMovingTarget(achievement.getFastMovingBilled());
34098 ranu 417
            rbmAchievements.setAchievedSlowMovingTarget(achievement.getSlowMovinBilled());
418
            rbmAchievements.setAchievedRunningTarget(achievement.getRunningBilled());
34012 ranu 419
            rbmAchievements.setAchievedOtherTarget(achievement.getOtherBilled());
33985 ranu 420
            rbmAchievements.setCreateTimestamp(LocalDateTime.now());
421
 
422
            rbmAchievementsRepository.persist(rbmAchievements);
423
 
424
        }
425
 
426
    }
427
 
34055 ranu 428
    @Override
429
    public List<Sold15daysOldAgingModel> getAgingSale(LocalDate startDate, LocalDate endDate) {
430
        Session session = sessionFactory.getCurrentSession();
431
        final TypedQuery<Sold15daysOldAgingModel> typedQuerySimilar = session.createNamedQuery("Aging.SoldAgingModel", Sold15daysOldAgingModel.class);
34056 ranu 432
        typedQuerySimilar.setParameter("startDate", startDate);
433
        typedQuerySimilar.setParameter("endDate", endDate);
34055 ranu 434
        return typedQuerySimilar.getResultList();
33985 ranu 435
 
34055 ranu 436
    }
437
 
34103 ranu 438
    @Override
439
    public List<RbmBilledFofoIdsModel> getDateWiseBilledFofoIdByRbm(LocalDate startDate, LocalDate endDate) {
440
        Session session = sessionFactory.getCurrentSession();
441
        final TypedQuery<RbmBilledFofoIdsModel> typedQuerySimilar = session.createNamedQuery("RBM.RbmBilledFofoId", RbmBilledFofoIdsModel.class);
442
        typedQuerySimilar.setParameter("startDate", startDate);
443
        typedQuerySimilar.setParameter("endDate", endDate);
444
        return typedQuerySimilar.getResultList();
445
 
446
    }
447
 
34055 ranu 448
    public List<Our15DaysOldAgingStock> our15DaysAgingStock() {
449
        Session session = sessionFactory.getCurrentSession();
450
        final TypedQuery<Our15DaysOldAgingStock> typedQuerySimilar = session.createNamedQuery("Aging.15DaysOurStock", Our15DaysOldAgingStock.class);
451
        return typedQuerySimilar.getResultList();
452
 
453
    }
454
 
34397 ranu 455
    @Autowired
456
    OrderRepository orderRepository;
34055 ranu 457
 
34397 ranu 458
    @Override
34641 ranu 459
    public double calculateFofoIdTodayTarget(int fofoId, double secondryMtd,LocalDate date) {
34397 ranu 460
 
461
        MonthlyTarget monthlyTarget = monthlyTargetRepository.selectByDateAndFofoId(YearMonth.now(), fofoId);
34404 ranu 462
        if (monthlyTarget == null) {
463
            // Log or handle as needed
464
            return 0; // or -1 or some fallback
465
        }
34397 ranu 466
 
467
        double remainingTarget = monthlyTarget.getPurchaseTarget() - secondryMtd;
34716 ranu 468
        double remainingWorkingDays=0;
469
        if(secondryMtd == 0){
470
             remainingWorkingDays = getWorkingDaysCount(date) + 1;
471
        }else {
472
             remainingWorkingDays = getWorkingDaysCount(date);
473
        }
34397 ranu 474
 
475
 
34716 ranu 476
 
34397 ranu 477
        if (remainingWorkingDays == 0) return remainingTarget; // Last day
34716 ranu 478
        LOGGER.info("remainingWorkingDays {}", remainingWorkingDays);
479
        LOGGER.info("remainingTarget {}", remainingTarget);
34397 ranu 480
 
481
        return (int) Math.ceil(remainingTarget / remainingWorkingDays);
482
    }
483
 
484
 
485
 
33917 ranu 486
}