feat : add qvm countdown job

This commit is contained in:
zakaria.hachem
2025-11-04 16:00:13 +01:00
parent 0a9e03261b
commit f369e97915
4 changed files with 87 additions and 0 deletions

View File

@ -0,0 +1,48 @@
package com.axelor.apps.qvm.job;
import com.axelor.exception.service.TraceBackService;
import com.axelor.inject.Beans;
import java.util.List;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.SchedulerException;
import com.axelor.apps.qvm.service.QvmOperationService;
import com.axelor.apps.qvm.service.QvmOperationServiceImpl;
public class CalculateCountdownJob implements Job {
private final Logger log = LoggerFactory.getLogger(CalculateCountdownJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException{
if (isRunning(context)) {
return;
}
try{
log.debug("Calculating operation countdown ...");
Beans.get(QvmOperationServiceImpl.class).updateAllCountdowns();
}catch(Exception e){
log.error("Error while operation countdown");
TraceBackService.trace(e);
}
}
private boolean isRunning(JobExecutionContext context) {
try {
return context
.getScheduler()
.getCurrentlyExecutingJobs()
.stream()
.anyMatch(
j ->
j.getTrigger().equals(context.getTrigger())
&& !j.getFireInstanceId().equals(context.getFireInstanceId()));
} catch (SchedulerException e) {
return false;
}
}
}

View File

@ -39,4 +39,7 @@ public interface QvmOperationService {
@Transactional
public QvmOperation createNextOperation(QvmOperation operation, Long userId)
throws AxelorException;
@Transactional
public void updateAllCountdowns()throws AxelorException;
}

View File

@ -28,10 +28,13 @@ import com.axelor.i18n.I18n;
import com.axelor.inject.Beans;
import com.google.inject.Inject;
import com.google.inject.persist.Transactional;
import java.time.LocalDate;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.axelor.apps.qvm.exception.IExceptionMessage;
import java.time.temporal.ChronoUnit;
public class QvmOperationServiceImpl implements QvmOperationService {
@ -152,4 +155,27 @@ public class QvmOperationServiceImpl implements QvmOperationService {
System.out.println("Create next operation : "+nextOperation);
return nextOperation;
}
@Transactional
public void updateCountdown(QvmOperation operation, LocalDate today) {
if (operation.getOperationDate() != null) {
LocalDate operationDate = operation.getOperationDate();
int daysBetween = (int) ChronoUnit.DAYS.between(today, operationDate);
operation.setCountdown(daysBetween);
qvmOperationRepo.save(operation);
}
}
public void updateAllCountdowns() {
List<QvmOperation> operations = qvmOperationRepo.all()
.filter("self.operationDate IS NOT NULL AND self.statusSelect = :status")
.bind("status", 2)
.fetch();
LocalDate today = LocalDate.now();
for (QvmOperation operation : operations){
System.out.println("operation : "+operation);
updateCountdown(operation,today);
}
}
}

View File

@ -165,4 +165,14 @@ public class QvmOperationController {
throw e;
}
}
public void updateCountdowns(ActionRequest request, ActionResponse response) {
try {
Beans.get(QvmOperationService.class).updateAllCountdowns();
} catch (AxelorException e) {
TraceBackService.trace(e);
response.setError(e.getMessage());
}
response.setFlash("Countdowns updated successfully");
}
}