/** * permet de recupérer les dernières infos d'absences lié à un utilisateur et de calculer les nb * de jours de congés/rtt restant * * @param utilisateur * @return * @throws AbsenceException */ public SessionUtilisateur loadSessionUtilisateur(Long utilisateurId, Date dateAbsence) throws Exception { // date du jour Date now = new Date(); now = DateUtils.truncate(now, Calendar.DATE); Utilisateur utilisateur = utilisateurRepository.findOne(utilisateurId); SessionUtilisateur session = new SessionUtilisateur(); session.setUtilisateur(utilisateur); // recuperation des rtt de l'utilisateur sur la période liée à la date d'absence souhaitée List<DemandeAbsence> rtts = absenceRepository.findByUtilisateur( utilisateur.getId(), getDateDebutPeriodeRTT(dateAbsence), getDateFinPeriodeRTT(dateAbsence), TypeAbsence.RTT); // recuperation des conges de l'utilisateur sur la période liée à la date d'absence souhaitée List<DemandeAbsence> conges = absenceRepository.findByUtilisateur( utilisateur.getId(), getDateDebutPeriodeConges(dateAbsence), getDateFinPeriodeConges(dateAbsence), TypeAbsence.CONGE); // recuperation des conges de l'utilisateur sur la période liée à la date d'absence souhaitée List<DemandeAbsence> autresConges = absenceRepository.findByUtilisateur( utilisateur.getId(), now, DateUtils.addYears(now, 1), TypeAbsence.AUTRE); // init des compteurs par rapport aux infos utilisateurs (congés/RTT de l'année + deltas // éventuels) CompteurConges compteurs = new CompteurConges(); session.setCompteurs(compteurs); compteurs.setCongesAposer(utilisateur.getNbConges()); compteurs.setRttAposer(utilisateur.getNbRTT()); // prise en compte des deltas si la date de l'absence se trouve dans la période courante if (isPeriodeCouranteConges(dateAbsence)) { compteurs.setCongesAposer(compteurs.getCongesAposer() + utilisateur.getDeltaJoursConges()); } if (isPeriodeCouranteRTT(dateAbsence)) { compteurs.setRttAposer(compteurs.getRttAposer() + utilisateur.getDeltaJoursRTT()); } // maj des compteurs par rapport à la liste des absences // TODO gérer les cas de 80% for (DemandeAbsence rtt : rtts) { if (!rtt.getStatut().equals(StatutAbsence.REFUSE)) { float nbJours = getNbJoursForAbsence(rtt); compteurs.setRttAposer(compteurs.getRttAposer() - nbJours); if (rtt.getStatut().equals(StatutAbsence.POSE)) { compteurs.setRttEnAttente(compteurs.getRttEnAttente() + nbJours); } } if (rtt.getDateDebut().after(now)) { session.getAbsences().add(rtt); } } for (DemandeAbsence conge : conges) { if (!conge.getStatut().equals(StatutAbsence.REFUSE)) { float nbJours = getNbJoursForAbsence(conge); compteurs.setCongesAposer(compteurs.getCongesAposer() - nbJours); if (conge.getStatut().equals(StatutAbsence.POSE)) { compteurs.setCongesEnAttente(compteurs.getCongesEnAttente() + nbJours); } } if (conge.getDateDebut().after(now)) { session.getAbsences().add(conge); } } for (DemandeAbsence conge : autresConges) { if (conge.getDateDebut().after(now)) { session.getAbsences().add(conge); } } Collections.sort(session.getAbsences()); // ajout des absences sur la période suivante List<DemandeAbsence> rttFuturs = absenceRepository.findByUtilisateur( utilisateur.getId(), DateUtils.addDays(getDateFinPeriodeRTT(dateAbsence), 1), TypeAbsence.RTT); List<DemandeAbsence> congesFuturs = absenceRepository.findByUtilisateur( utilisateur.getId(), DateUtils.addDays(getDateFinPeriodeConges(dateAbsence), 1), TypeAbsence.CONGE); List<DemandeAbsence> autresCongesFuturs = absenceRepository.findByUtilisateur( utilisateur.getId(), DateUtils.addDays(getDateFinPeriodeConges(dateAbsence), 1), TypeAbsence.AUTRE); session.getAbsencesFutures().addAll(rttFuturs); session.getAbsencesFutures().addAll(congesFuturs); session.getAbsencesFutures().addAll(autresCongesFuturs); Collections.sort(session.getAbsencesFutures()); return session; }