Subversion Repositories SmartDukaan

Rev

Rev 34404 | Rev 34716 | 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
                        " - (CASE WHEN WEEKDAY(:startDate) = 6 THEN 1 ELSE 0 END) " +
107
                        " - (SELECT COUNT(*) " +
108
                        " FROM logistics.publicholidays " +
109
                        " WHERE date BETWEEN :startDate AND LAST_DAY(:startDate) " +
110
                        " AND WEEKDAY(date) != 6) AS working_days"
111
        );
112
 
113
        // Set the start date parameter for each placeholder
114
        nativeQuery.setParameter("startDate", startDateString);
115
 
116
        Object result = nativeQuery.getSingleResult();
117
        return result != null ? ((Number) result).intValue() : 0;
118
    }
119
 
120
 
121
    @Override
122
    public List<RbmArrViewModel> getRbmTodayArr() throws Exception {
123
        LocalDate todayDate = LocalDate.now();
124
        return getRbmTodayArr(todayDate);
125
    }
126
 
127
    @Override
33997 ranu 128
    public List<RbmTargetAndAchievementsModel> getRbmTargetsAndAchievemnts(LocalDate startDate, LocalDate endDate) {
129
 
34002 ranu 130
        List<RbmTargetsModel> rbmTargetsList = rbmTargetsRepository.selectTargetsModelListByDates(startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33997 ranu 131
 
132
        LOGGER.info("rbmTargetsList {}", rbmTargetsList);
133
        // Group Targtes by RBM and Warehouse
34002 ranu 134
        Map<String, RbmTargetsModel> targetsMap = rbmTargetsList.stream()
33997 ranu 135
                .collect(Collectors.toMap(
136
                        a -> a.getRbmAuthId() + "-" + a.getWarehouseId(),
137
                        a -> a,
138
                        (a1, a2) -> mergeTargets(a1, a2) // Handle duplicates by merging
139
                ));
140
 
141
 
34002 ranu 142
        List<RbmAchievementsModel> rbmAchievements = rbmAchievementsRepository.selectAchievementsModelListByDates(startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
33997 ranu 143
        LOGGER.info("rbmTargetsList {}", rbmAchievements);
144
        // Group achievements by RBM and Warehouse
34002 ranu 145
        Map<String, RbmAchievementsModel> achievementMap = rbmAchievements.stream()
33997 ranu 146
                .collect(Collectors.toMap(
147
                        a -> a.getRbmAuthId() + "-" + a.getWarehouseId(),
148
                        a -> a,
149
                        (a1, a2) -> mergeAchievements(a1, a2) // Handle duplicates by merging
150
                ));
151
 
152
        return targetsMap.keySet().stream()
153
                .map(key -> {
154
                    String[] parts = key.split("-");
155
                    int rbmAuthId = Integer.parseInt(parts[0]);
156
                    int warehouseId = Integer.parseInt(parts[1]);
157
 
34002 ranu 158
                    RbmTargetsModel target = targetsMap.get(key);
159
                    RbmAchievementsModel achievement = achievementMap.getOrDefault(key, new RbmAchievementsModel());
33997 ranu 160
 
161
                    RbmTargetAndAchievementsModel model = new RbmTargetAndAchievementsModel();
162
                    model.setAuthId(rbmAuthId);
163
                    model.setRbmName(target.getRbmName());
164
                    model.setWarehouseName(ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(warehouseId, "Unknown"));
165
 
166
                    // Set target values
34006 ranu 167
                    model.setHidTarget((long) target.getHidTarget());
34098 ranu 168
                    model.setRunningTarget((long) target.getRunningTarget());
34006 ranu 169
                    model.setFastMovingTarget((long) target.getFastMovingTarget());
170
                    model.setSlowMovingTarget((long) target.getSlowMovingTarget());
171
                    model.setOtherMovingTarget((long) target.getOtherTarget());
33997 ranu 172
 
173
                    // Set achievement values
34006 ranu 174
                    model.setAchievedHid((long) achievement.getAchievedHidTarget());
34098 ranu 175
                    model.setAchievedRunning((long) achievement.getAchievedRunningTarget());
34006 ranu 176
                    model.setAchievedFastMoving((long) achievement.getAchievedFastMovingTarget());
177
                    model.setAchievedSlowMoving((long) achievement.getAchievedSlowMovingTarget());
178
                    model.setAchievedOtherMoving((long) achievement.getAchievedOtherTarget());
33997 ranu 179
 
180
                    model.setTotalTarget(
34006 ranu 181
                            (long) target.getHidTarget() +
34098 ranu 182
                                    (long) target.getRunningTarget() +
34006 ranu 183
                                    (long) target.getFastMovingTarget() +
184
                                    (long) target.getSlowMovingTarget() +
185
                                    (long) target.getOtherTarget()
33997 ranu 186
                    );
187
                    model.setTotalAchievemnt(
34006 ranu 188
                            (long) achievement.getAchievedHidTarget() +
34098 ranu 189
                                    (long) achievement.getAchievedRunningTarget() +
34006 ranu 190
                                    (long) achievement.getAchievedFastMovingTarget() +
191
                                    (long) achievement.getAchievedSlowMovingTarget() +
192
                                    (long) achievement.getAchievedOtherTarget()
33997 ranu 193
                    );
194
 
195
                    return model;
196
                })
197
                .collect(Collectors.toList());
198
 
199
    }
200
 
34002 ranu 201
    private RbmTargetsModel mergeTargets(RbmTargetsModel a1, RbmTargetsModel a2) {
33997 ranu 202
 
203
        // Merge logic for achievements (aggregate the target and achieved values)
34006 ranu 204
        a1.setHidTarget((a1.getHidTarget()) +
205
                (a2.getHidTarget()));
33997 ranu 206
 
34006 ranu 207
        a1.setFastMovingTarget((a1.getFastMovingTarget()) +
208
                (a2.getFastMovingTarget()));
33997 ranu 209
 
34006 ranu 210
        a1.setSlowMovingTarget((a1.getSlowMovingTarget()) +
211
                (a2.getSlowMovingTarget()));
33997 ranu 212
 
34098 ranu 213
        a1.setRunningTarget((a1.getRunningTarget()) +
214
                (a2.getRunningTarget()));
33997 ranu 215
 
34006 ranu 216
        a1.setOtherTarget((a1.getOtherTarget()) +
217
                (a2.getOtherTarget()));
33997 ranu 218
        return a1;
219
    }
220
 
34002 ranu 221
    private RbmAchievementsModel mergeAchievements(RbmAchievementsModel a1, RbmAchievementsModel a2) {
33997 ranu 222
        // Merge logic for achievements (aggregate the target and achieved values)
34006 ranu 223
        a1.setAchievedHidTarget((a1.getAchievedHidTarget()) +
224
                (a2.getAchievedHidTarget()));
33997 ranu 225
 
34098 ranu 226
        a1.setAchievedRunningTarget((a1.getAchievedRunningTarget()) +
227
                (a2.getAchievedRunningTarget()));
33997 ranu 228
 
34006 ranu 229
        a1.setAchievedFastMovingTarget((a1.getAchievedFastMovingTarget()) +
230
                (a2.getAchievedFastMovingTarget()));
33997 ranu 231
 
34006 ranu 232
        a1.setAchievedSlowMovingTarget((a1.getAchievedSlowMovingTarget()) +
233
                (a2.getAchievedSlowMovingTarget()));
33997 ranu 234
 
34006 ranu 235
        a1.setAchievedOtherTarget((a1.getAchievedOtherTarget()) +
236
                (a2.getAchievedOtherTarget()));
33997 ranu 237
 
238
        return a1;
239
    }
34002 ranu 240
 
33997 ranu 241
    @Override
33917 ranu 242
    public List<RbmArrViewModel> getRbmTodayArr(LocalDate todayDate) throws Exception {
243
 
244
        LocalDate startDateOfMonthDay1 = LocalDate.now().withDayOfMonth(1);
245
 
34289 ranu 246
        List<WarehouseRbmTargetModel> warehouseRbmTargetModelList = this.getWarehouseWiseRbmMonthlyTarget();
247
        List<WarehouseRbmTargetModel> warehouseRbmTargetModels = warehouseRbmTargetModelList.stream().filter(x -> x.getMonthlyTarget() > 0).collect(Collectors.toList());
248
        LOGGER.info("warehouseRbmTargetModels {}", warehouseRbmTargetModels);
249
        List<TodayAchievedMovementModel> todayAchievedMovementModels = getMovementWiseAchievementByDate(todayDate, todayDate.plusDays(1));
33917 ranu 250
 
251
        List<MTDAchievedTargetModel> mtdAchievedTargetModels = getDateWiseAchievedTargetOfRbm(startDateOfMonthDay1, todayDate);
252
 
253
        int remainingWorkingDaysCount = getWorkingDaysCount(todayDate);
254
 
33926 ranu 255
        List<RbmTargets> todayRbmTargetsList = rbmTargetsRepository.selectTargetsByDates(todayDate.atStartOfDay(), todayDate.atTime(LocalTime.MAX));
33917 ranu 256
 
33926 ranu 257
        LOGGER.info("todayRbmTargetsList {}", todayRbmTargetsList);
33917 ranu 258
 
259
        List<RbmArrViewModel> rbmArrViewModels = new ArrayList<>();
260
 
34028 ranu 261
        if (!todayRbmTargetsList.isEmpty()) {
33917 ranu 262
 
34028 ranu 263
            for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
33917 ranu 264
 
34028 ranu 265
                float monthlyTarget = rbmTarget.getMonthlyTarget();
266
                float achievedSoFar = (float) mtdAchievedTargetModels.stream()
267
                        .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
268
                        .mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
269
                        .sum();
33917 ranu 270
 
34028 ranu 271
                float remainingTarget = monthlyTarget - achievedSoFar;
33953 ranu 272
 
34028 ranu 273
                float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
274
 
33926 ranu 275
                String warehouseName = ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(rbmTarget.getWarehouseId(), "Unknown");
33917 ranu 276
 
34288 ranu 277
                LOGGER.info("rbmTarget ==== {}", rbmTarget);
34281 ranu 278
 
34285 ranu 279
                TodayAchievedMovementModel todayAchievedMovementModel = todayAchievedMovementModels.stream()
280
                        .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
281
                        .findFirst()
282
                        .orElse(null);
34283 ranu 283
 
34285 ranu 284
 
34034 ranu 285
                Optional<RbmTargets> optionalTodayRbmTargets = todayRbmTargetsList.stream()
286
                        .filter(x -> x.getRbmAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
287
                        .findFirst();
33917 ranu 288
 
34034 ranu 289
                if (optionalTodayRbmTargets.isPresent()) {
290
                    RbmTargets todayRbmTargets = optionalTodayRbmTargets.get();
291
                    LOGGER.info("todayRbmTargets {}", todayRbmTargets);
292
                    RbmArrViewModel viewModel = new RbmArrViewModel();
33917 ranu 293
 
34034 ranu 294
                    viewModel.setAuthId(rbmTarget.getAuthId());
295
                    viewModel.setRbmName(rbmTarget.getRbmName());
296
                    viewModel.setWarehouseName(warehouseName);
297
                    viewModel.setTodayTarget(Math.round(todayTarget));
298
                    viewModel.setMonthlyTarget(Math.round(monthlyTarget));
299
                    viewModel.setMtdAchievedTarget(Math.round(achievedSoFar));
33926 ranu 300
 
34034 ranu 301
                    viewModel.setTodayHidTarget(Math.round((todayRbmTargets.getHidTarget())));
302
                    viewModel.setTodayFastMovingTarget(Math.round(todayRbmTargets.getFastMovingTarget()));
34098 ranu 303
                    viewModel.setTodaySlowMovingTarget(Math.round(todayRbmTargets.getSlowMovingtarget()));
304
                    viewModel.setTodayRunningTarget(Math.round(todayRbmTargets.getRunningtarget()));
34034 ranu 305
                    viewModel.setTodayOtherMovingTarget(Math.round(todayRbmTargets.getOtherTarget()));
33926 ranu 306
 
34283 ranu 307
                    if (todayAchievedMovementModel != null) {
308
                        viewModel.setTodayAchievedHidTarget(Math.round(todayAchievedMovementModel.getHidBilled()));
309
                        viewModel.setTodayAchievedFastMovingTarget(Math.round(todayAchievedMovementModel.getFastMovingBilled()));
310
                        viewModel.setTodayAchievedSlowMovingTarget(Math.round(todayAchievedMovementModel.getSlowMovinBilled()));
311
                        viewModel.setTodayAchievedRunningTarget(Math.round(todayAchievedMovementModel.getRunningBilled()));
312
                        viewModel.setTodayAchievedOtherMovingTarget(Math.round(todayAchievedMovementModel.getOtherBilled()));
313
                        viewModel.setTotalAchievedTarget(Math.round(todayAchievedMovementModel.getHidBilled() + todayAchievedMovementModel.getFastMovingBilled() + todayAchievedMovementModel.getSlowMovinBilled() + todayAchievedMovementModel.getRunningBilled() + todayAchievedMovementModel.getOtherBilled()));
314
                    } else {
315
                        viewModel.setTodayAchievedHidTarget(0);
316
                        viewModel.setTodayAchievedFastMovingTarget(0);
317
                        viewModel.setTodayAchievedSlowMovingTarget(0);
318
                        viewModel.setTodayAchievedRunningTarget(0);
319
                        viewModel.setTodayAchievedOtherMovingTarget(0);
320
                        viewModel.setTotalAchievedTarget(0);
321
                    }
34034 ranu 322
                    rbmArrViewModels.add(viewModel);
323
                } else {
324
                    LOGGER.info("No matching RbmTargets found for AuthId: {} and rbmname {} and WarehouseId: {}", rbmTarget.getAuthId(), rbmTarget.getRbmName(), rbmTarget.getWarehouseId());
325
                }
33917 ranu 326
 
34034 ranu 327
 
328
 
34028 ranu 329
            }
33917 ranu 330
        }
331
 
332
        LOGGER.info("rbmArrViewModels {}", rbmArrViewModels);
333
        return rbmArrViewModels;
334
    }
335
 
33926 ranu 336
    @Override
337
    public void setMovementWiseRbmTargets() {
338
        LocalDate todayDate = LocalDate.now();
33917 ranu 339
 
33926 ranu 340
        LocalDate startDateOfMonthDay1 = LocalDate.now().withDayOfMonth(1);
341
 
342
        List<WarehouseRbmTargetModel> warehouseRbmTargetModels = this.getWarehouseWiseRbmMonthlyTarget();
343
 
344
        List<MTDAchievedTargetModel> mtdAchievedTargetModels = getDateWiseAchievedTargetOfRbm(startDateOfMonthDay1, todayDate);
345
 
346
 
347
        int remainingWorkingDaysCount = getWorkingDaysCount(todayDate);
348
 
349
        List<WarehouseMobileStockByMovementModel> warehouseMobileStockByMovementModels = getWarehouseMobileStockByMovement();
350
 
351
        for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
352
 
353
            float monthlyTarget = rbmTarget.getMonthlyTarget();
354
            float achievedSoFar = (float) mtdAchievedTargetModels.stream()
355
                    .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
356
                    .mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
357
                    .sum();
358
 
359
 
360
            float remainingTarget = monthlyTarget - achievedSoFar;
33953 ranu 361
            LOGGER.info("remainingTarget {}", remainingTarget);
33926 ranu 362
 
33953 ranu 363
            float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
364
            LOGGER.info("todayTarget {}", todayTarget);
365
 
33926 ranu 366
            // Get the warehouse stock data
367
            WarehouseMobileStockByMovementModel warehouseMobileStockByMovementModel = warehouseMobileStockByMovementModels.stream()
368
                    .filter(x -> x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().orElse(null);
369
 
370
 
371
            if (warehouseMobileStockByMovementModel != null) {
372
 
373
                // Total stock value for this warehouse
374
                float totalStockValue = warehouseMobileStockByMovementModel.getTotalAvailabilityPrice();
375
 
376
                // Calculate target allocation based on stock value proportion
377
                float hidTarget = (warehouseMobileStockByMovementModel.getTotalHidCatalogPrice() / totalStockValue) * todayTarget;
378
                float fastMovingTarget = (warehouseMobileStockByMovementModel.getTotalFastMovingCatalogPrice() / totalStockValue) * todayTarget;
379
                float slowMovingTarget = (warehouseMobileStockByMovementModel.getTotalSlowMovingCatalogPrice() / totalStockValue) * todayTarget;
34098 ranu 380
                float runningTarget = (warehouseMobileStockByMovementModel.getTotalRunningCatalogPrice() / totalStockValue) * todayTarget;
33926 ranu 381
                float otherTarget = (warehouseMobileStockByMovementModel.getTotalOtherCategoryCatalogPrice() / totalStockValue) * todayTarget;
382
 
383
                RbmTargets rbmTargets = new RbmTargets();
384
                rbmTargets.setWarehouseId(rbmTarget.getWarehouseId());
385
                rbmTargets.setRbmAuthId(rbmTarget.getAuthId());
386
                rbmTargets.setRbmName(rbmTarget.getRbmName());
34098 ranu 387
                rbmTargets.setRunningtarget(runningTarget);
33926 ranu 388
                rbmTargets.setHidTarget(hidTarget);
389
                rbmTargets.setFastMovingTarget(fastMovingTarget);
34098 ranu 390
                rbmTargets.setSlowMovingtarget(slowMovingTarget);
33926 ranu 391
                rbmTargets.setOtherTarget(otherTarget);
392
                rbmTargets.setCreateTimestamp(LocalDateTime.now());
393
 
394
                rbmTargetsRepository.persist(rbmTargets);
395
 
396
            }
397
        }
398
 
399
    }
400
 
401
 
33985 ranu 402
    @Override
403
    public void setMovementWiseRbmAchievement() {
404
        LocalDate todayDate = LocalDate.now();
405
 
34055 ranu 406
        List<TodayAchievedMovementModel> todayAchievedMovementModels = getMovementWiseAchievementByDate(todayDate, todayDate.plusDays(1));
33985 ranu 407
 
408
 
409
        for (TodayAchievedMovementModel achievement : todayAchievedMovementModels) {
410
 
411
            RbmAchievements rbmAchievements = new RbmAchievements();
412
 
413
            rbmAchievements.setRbmAuthId(achievement.getAuthId());
414
            rbmAchievements.setRbmName(achievement.getRbmName());
415
            rbmAchievements.setWarehouseId(achievement.getWarehouseId());
416
            rbmAchievements.setAchievedHidTarget(achievement.getHidBilled());
417
            rbmAchievements.setAchievedFastMovingTarget(achievement.getFastMovingBilled());
34098 ranu 418
            rbmAchievements.setAchievedSlowMovingTarget(achievement.getSlowMovinBilled());
419
            rbmAchievements.setAchievedRunningTarget(achievement.getRunningBilled());
34012 ranu 420
            rbmAchievements.setAchievedOtherTarget(achievement.getOtherBilled());
33985 ranu 421
            rbmAchievements.setCreateTimestamp(LocalDateTime.now());
422
 
423
            rbmAchievementsRepository.persist(rbmAchievements);
424
 
425
        }
426
 
427
    }
428
 
34055 ranu 429
    @Override
430
    public List<Sold15daysOldAgingModel> getAgingSale(LocalDate startDate, LocalDate endDate) {
431
        Session session = sessionFactory.getCurrentSession();
432
        final TypedQuery<Sold15daysOldAgingModel> typedQuerySimilar = session.createNamedQuery("Aging.SoldAgingModel", Sold15daysOldAgingModel.class);
34056 ranu 433
        typedQuerySimilar.setParameter("startDate", startDate);
434
        typedQuerySimilar.setParameter("endDate", endDate);
34055 ranu 435
        return typedQuerySimilar.getResultList();
33985 ranu 436
 
34055 ranu 437
    }
438
 
34103 ranu 439
    @Override
440
    public List<RbmBilledFofoIdsModel> getDateWiseBilledFofoIdByRbm(LocalDate startDate, LocalDate endDate) {
441
        Session session = sessionFactory.getCurrentSession();
442
        final TypedQuery<RbmBilledFofoIdsModel> typedQuerySimilar = session.createNamedQuery("RBM.RbmBilledFofoId", RbmBilledFofoIdsModel.class);
443
        typedQuerySimilar.setParameter("startDate", startDate);
444
        typedQuerySimilar.setParameter("endDate", endDate);
445
        return typedQuerySimilar.getResultList();
446
 
447
    }
448
 
34055 ranu 449
    public List<Our15DaysOldAgingStock> our15DaysAgingStock() {
450
        Session session = sessionFactory.getCurrentSession();
451
        final TypedQuery<Our15DaysOldAgingStock> typedQuerySimilar = session.createNamedQuery("Aging.15DaysOurStock", Our15DaysOldAgingStock.class);
452
        return typedQuerySimilar.getResultList();
453
 
454
    }
455
 
34397 ranu 456
    @Autowired
457
    OrderRepository orderRepository;
34055 ranu 458
 
34397 ranu 459
    @Override
34641 ranu 460
    public double calculateFofoIdTodayTarget(int fofoId, double secondryMtd,LocalDate date) {
34397 ranu 461
 
462
        MonthlyTarget monthlyTarget = monthlyTargetRepository.selectByDateAndFofoId(YearMonth.now(), fofoId);
34404 ranu 463
        if (monthlyTarget == null) {
464
            // Log or handle as needed
465
            return 0; // or -1 or some fallback
466
        }
34397 ranu 467
 
468
        double remainingTarget = monthlyTarget.getPurchaseTarget() - secondryMtd;
469
 
34641 ranu 470
        double remainingWorkingDays = getWorkingDaysCount(date);
34397 ranu 471
 
472
        if (remainingWorkingDays == 0) return remainingTarget; // Last day
473
 
474
        return (int) Math.ceil(remainingTarget / remainingWorkingDays);
475
    }
476
 
477
 
478
 
33917 ranu 479
}