
org.jlot.mailing.cron.TranslatorNotificationMailJob Maven / Gradle / Ivy
package org.jlot.mailing.cron;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
import org.jlot.core.cron.AbstractDailyNightlyCronJob;
import org.jlot.core.dto.LocalizationDTO;
import org.jlot.core.dto.RatioCollection;
import org.jlot.core.dto.UserDTO;
import org.jlot.core.dto.VersionDTO;
import org.jlot.core.service.api.LocalizationPermissionService;
import org.jlot.core.service.api.LocalizationService;
import org.jlot.core.service.api.ProjectPermissionService;
import org.jlot.core.service.api.TranslationRatioService;
import org.jlot.core.service.api.VersionService;
import org.jlot.mailing.service.TranslatorNotificationMailingService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional(readOnly = true)
public class TranslatorNotificationMailJob extends AbstractDailyNightlyCronJob
{
@Inject
private TranslatorNotificationMailingService translatorNotificationMailingService;
@Inject
private LocalizationService localizationService;
@Inject
private TranslationRatioService translationRatioService;
@Inject
private VersionService versionService;
@Inject
private ProjectPermissionService projectPermissionService;
@Inject
private LocalizationPermissionService localizationPermissionService;
@Override
protected void runJob ( String projectName ) throws Exception
{
Set setDevelopers = projectPermissionService.getUser(projectName);
List listLocalizationDTOs = localizationService.getLocalizations(projectName);
VersionDTO versionDTO = versionService.getCurrentVersion(projectName);
Map map = translationRatioService.getRatioCollectionsByLocaleMap(projectName, versionDTO.getName());
for (LocalizationDTO localizationDTO : listLocalizationDTOs)
{
Set setUsers = localizationPermissionService.getUser(localizationDTO.getId());
for (UserDTO userDTO : setUsers)
{
if (setDevelopers.contains(userDTO) == false)
{
sendNotification(projectName, userDTO, localizationDTO.getLocale(), map);
}
}
}
}
/**
* When a translator hasn't finished his work and the last time he worked on
* Jlot is more than three days ago, the system sends him a notification
* Mail
*
* @param projectName
* @param translator
* @param translatorLocale
* @param map
*
* @author vlstr
*/
public void sendNotification ( String projectName, UserDTO translator, Locale translatorLocale, Map map )
{
LocalizationDTO localizationDTO = localizationService.getLocalization(projectName, translatorLocale);
RatioCollection ratioCollection = map.get(translatorLocale);
Date lastChangesUpdate = localizationDTO.getLastChangesDate();
int reviewPercentage = (int) Math.floor(ratioCollection.getReviewRatio().getPercentage());
int translatePercentage = (int) Math.floor(ratioCollection.getTranslateRatio().getPercentage());
Calendar nowCalendar = Calendar.getInstance();
nowCalendar.add(Calendar.DAY_OF_WEEK, -3);
Date threeDaysAgoDate = nowCalendar.getTime();
if (reviewPercentage < 100 && translatePercentage < 100 && lastChangesUpdate.before(threeDaysAgoDate))
{
translatorNotificationMailingService.executeNotificationJob(projectName, translator);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy