Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
criluc committed Aug 16, 2022
2 parents a47454f + 517196f commit 0eb6c55
Show file tree
Hide file tree
Showing 36 changed files with 522 additions and 270 deletions.
25 changes: 23 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.5.3] - 2022-08-16

### Added
- Aggiunta email di warning per assenze per missione non inserite a causa di assenze preesistenti
- Aggiunta possibilità per il responsabile di sede di vedere i flussi di richiesta ferie anche
di personale non del proprio istituto ma di cui si è responsabile di sede (utile per le Aree di Ricerca)
- Aggiunte alcune label per gli screenreader per migliorare l'accessibilità
- Aggiunta possibilità di vedere nel menù la gestione dei telework se questi sono abilitati per
l'utente
- Aggiunta possibilità di vedere il menu con i flussi di lavoro al personale che è responsabile di
sede, anche sulle sedi diversa dalla propria di assegnazione
### Changed
- Corretto controllo dei buoni pasto inviati ad Attestati (funzionalità solo per CNR)
- La cancellazione dei servizi di reperibilità adesso è possibile anche se il servizio
ha associato delle persone ma non ha nessun giorno di reperibilità assegnato
- Modificato il comportamento del codice 39LA per l'assegnazione del buono pasto (non lo assegna)
- Rimosso codice 40LA dalla lista dei codici prendibili
- Modificata lista dei flussi attivi evitando di mostrare quelli relativi alla propria sede se non
si hanno gli opportuni permessi
- Rimossa scritta SSO nella form di login tramite OAuth
- Modificato messaggio di errore in caso di richiesta riposo compensativo senza ore sufficienti

## [2.5.2] - 2022-07-06

### Added
Expand All @@ -15,7 +37,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Aggiunta possibilità di cedere un giorno di reperibilità
- Aggiunto controllo sulla visibilità della presenza giornaliera dei dipendenti appartenenti ad un
gruppo da parte del responsabile di gruppo

### Changed
- Corretto messaggio di errore in caso di attestato di fine mese non calcolato correttamente
- Modificato il conteggio dei giorni di presenza in sede quando un dipendente è in telelavoro e
Expand Down Expand Up @@ -223,4 +244,4 @@ e tipologia di orario di lavoro e aggiornamento del corrispondente externalId

## [2.0.0] - 2021-02-25
### Added
- Prima relaase pubblica open source
- Prima relaase pubblica open source
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.5.2
2.5.3
47 changes: 32 additions & 15 deletions app/controllers/AbsenceRequests.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import helpers.TemplateExtensions;
import helpers.Web;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -59,6 +60,7 @@
import models.UsersRolesOffices;
import models.absences.AbsenceType;
import models.absences.GroupAbsenceType;
import models.absences.GroupAbsenceType.GroupAbsenceTypePattern;
import models.absences.JustifiedType;
import models.absences.definitions.DefaultAbsenceType;
import models.absences.definitions.DefaultGroup;
Expand Down Expand Up @@ -248,17 +250,18 @@ public static void listToApprove(AbsenceRequestType type) {
fromDate);
List<Group> groups =
groupDao.groupsByOffice(person.office, Optional.absent(), Optional.of(false));
List<UsersRolesOffices> roleList = uroDao.getUsersRolesOfficesByUser(person.user);
List<UsersRolesOffices> roleList =
uroDao.getAdministrativeUsersRolesOfficesByUser(person.user);
List<AbsenceRequest> results =
absenceRequestDao.allResults(roleList, fromDate, Optional.absent(), type, groups, person);
List<AbsenceRequest> myResults = absenceRequestDao.toApproveResults(roleList, Optional.absent(),
Set<AbsenceRequest> myResults = absenceRequestDao.toApproveResults(roleList, Optional.absent(),
Optional.absent(), type, groups, person);
List<AbsenceRequest> approvedResults = absenceRequestDao.totallyApproved(roleList, fromDate,
Optional.absent(), type, groups, person);
val config = absenceRequestManager.getConfiguration(type, person);
val onlyOwn = false;
log.debug("Preparate richieste da approvare per {} in {} ms. Da approvare = {}",
person.getFullname(), System.currentTimeMillis() - start, myResults.size());
log.debug("Preparate richieste da approvare per {} in {} ms. Da approvare = {}. Flussi attivi = {}",
person.getFullname(), System.currentTimeMillis() - start, myResults.size(), results.size());
render(config, results, type, onlyOwn, approvedResults, myResults);
}

Expand Down Expand Up @@ -302,8 +305,13 @@ public static void blank(Optional<Long> personId, LocalDate from, AbsenceRequest
val absenceRequest = new AbsenceRequest();
absenceRequest.type = type;
absenceRequest.person = person;

PeriodChain periodChain = null;
GroupAbsenceType groupAbsenceType = null;

if (type.equals(AbsenceRequestType.COMPENSATORY_REST) && person.isTopQualification()) {
groupAbsenceType = absenceComponentDao
.groupAbsenceTypeByName(DefaultGroup.RIPOSI_CNR.name()).get();
PersonStampingRecap psDto = stampingsRecapFactory.create(person, LocalDate.now().getYear(),
LocalDate.now().getMonthOfYear(), true);
int maxDays = (Integer) configurationManager.configValue(person.office,
Expand All @@ -312,26 +320,32 @@ public static void blank(Optional<Long> personId, LocalDate from, AbsenceRequest
handleCompensatoryRestSituation = true;
}
if (type.equals(AbsenceRequestType.VACATION_REQUEST)) {
GroupAbsenceType vacationGroup =
groupAbsenceType =
absenceComponentDao.groupAbsenceTypeByName(DefaultGroup.FERIE_CNR.name()).get();
IWrapperPerson wperson = wrapperFactory.create(person);

for (Contract contract : wperson.orderedYearContracts(LocalDate.now().getYear())) {
VacationSituation vacationSituation = absenceService.buildVacationSituation(contract,
LocalDate.now().getYear(), vacationGroup, Optional.absent(), false);
LocalDate.now().getYear(), groupAbsenceType, Optional.absent(), false);
vacationSituations.add(vacationSituation);
}
periodChain = absenceService
.residual(person, groupAbsenceType, LocalDate.now());
}
if (type.equals(AbsenceRequestType.PERSONAL_PERMISSION)) {
groupAbsenceType = absenceComponentDao
.groupAbsenceTypeByName(DefaultGroup.G_661.name()).get();
periodChain = absenceService
.residual(person, groupAbsenceType, LocalDate.now());
}
GroupAbsenceType permissionGroup = absenceComponentDao
.groupAbsenceTypeByName(DefaultGroup.G_661.name()).get();
PeriodChain periodChain = absenceService
.residual(person, permissionGroup, LocalDate.now());


boolean showVacationPeriods = false;
boolean retroactiveAbsence = false;
absenceRequest.startAt = absenceRequest.endTo = LocalDateTime.now().plusDays(1);
boolean insertable = true;
GroupAbsenceType groupAbsenceType = absenceRequestManager.getGroupAbsenceType(absenceRequest);
groupAbsenceType = absenceRequestManager.getGroupAbsenceType(absenceRequest);

AbsenceType absenceType = null;
AbsenceForm absenceForm = absenceService.buildAbsenceForm(absenceRequest.person,
absenceRequest.startAtAsDate(), null, absenceRequest.endToAsDate(), null, groupAbsenceType,
Expand All @@ -340,6 +354,7 @@ public static void blank(Optional<Long> personId, LocalDate from, AbsenceRequest
absenceService.insert(absenceRequest.person, absenceForm.groupSelected, absenceForm.from,
absenceForm.to, absenceForm.absenceTypeSelected, absenceForm.justifiedTypeSelected,
null, null, false, absenceManager);


render("@edit", absenceRequest, insertable, insertReport, vacationSituations,
compensatoryRestAvailable, handleCompensatoryRestSituation, showVacationPeriods,
Expand All @@ -358,10 +373,12 @@ public static void edit(final AbsenceRequest absenceRequest, boolean retroactive

rules.checkIfPermitted(absenceRequest);
boolean insertable = true;
GroupAbsenceType permissionGroup = absenceComponentDao
.groupAbsenceTypeByName(DefaultGroup.G_661.name()).get();
PeriodChain periodChain = absenceService
.residual(absenceRequest.person, permissionGroup, LocalDate.now());
GroupAbsenceType permissionGroup = groupAbsenceType;
PeriodChain periodChain = null;
if (!groupAbsenceType.name.equals(DefaultGroup.RIPOSI_CNR.name())) {
periodChain = absenceService
.residual(absenceRequest.person, permissionGroup, LocalDate.now());
}

if (absenceRequest.startAt == null || absenceRequest.endTo == null) {
Validation.addError("absenceRequest.startAt",
Expand Down
12 changes: 11 additions & 1 deletion app/controllers/Competences.java
Original file line number Diff line number Diff line change
Expand Up @@ -986,14 +986,24 @@ public static void evaluateReperibility(Long reperibilityTypeId, boolean confirm
flash.success("Riabilitato servizio %s", type.description);
activateServices(type.office.id);
}
if (!type.personReperibilities.isEmpty()) {

log.debug("Reperibility type = {}, personReperibilities.size = {}, "
+ "personReperibilitiesDays.size = {}",
type, type.personReperibilities.size(),
type.personReperibilities.stream().flatMap(pr -> pr.personReperibilityDays.stream()).collect(Collectors.toList()).size());

if (!type.personReperibilities.isEmpty() &&
!type.personReperibilities.stream().flatMap(pr -> pr.personReperibilityDays.stream()).collect(Collectors.toList()).isEmpty()) {
type.disabled = true;
type.save();
log.info("Disabilitato servizio {}", type);
flash.success("Il servizio è stato disabilitato e non rimosso perchè legato con informazioni "
+ "importanti presenti in altre tabelle");

} else {
type.personReperibilities.stream().forEach(pr -> pr.delete());
type.delete();
log.info("Rimosso servizio {}", type);
flash.success("Servizio rimosso con successo");
}
activateServices(type.office.id);
Expand Down
Loading

0 comments on commit 0eb6c55

Please sign in to comment.