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 Sep 16, 2022
2 parents 51ea23a + 4a6e838 commit 83e4464
Show file tree
Hide file tree
Showing 48 changed files with 1,052 additions and 204 deletions.
23 changes: 21 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,31 @@ 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.4] - UNRELEASED
### Changed
## [2.5.4] - 2022-09-16
### Added
- Aggiunta la possibilità di disattivare e cancellare gli orari di lavoro predefiniti
non utilizzati.
- Aggiunta la possibilità di rinominare gli orari di lavoro predefiniti.
- Inviata email al dipendente ed all'ufficio opportuno quando ci sono problemi
nell'inserimento di una richiesta di missione o di rimborso
- Aggiunto codice 35R ai codici che riducono le ferie
### Changed
- Reso più robusto il cambio di menu in caso di giorno/mese/anno corrente mancante
- Corretto orrdinamento delle datatable con data e ora in italiano
- Aggiunti codici LAGILE e LAGILE in esportazione situazione mensile relativo a presenza a
lavoro e in smart working
- Corretta generazione form richiesta ferie quando richieste nel passato
- Cambiato comportamento del codice 26 che non deve far maturare residuo orario
- Aggiunto organigramma della sede di appartenenza del dipendente
- Modificata la visualizzazione sui dati contrattuali del tipo di incongruenza sulle inizializzazioni
- Aggiunto controllo per impedire la visualizzazione del flusso ferie anno passato dopo deadline se il
corrispondente parametro in configurazione è a NO
- Aggiunto controllo che visualizza l'username nel caso un utente che ha ruoli su una sede sia un utente
orfano
- Risolto bug che faceva visualizzare un'erronea lista di attività su cui il turnista aveva diritti
di visualizzazione
- Corrette tabelle flussi competenze e assenze per init datatable e aggiornate le datatable alla
ultima versione 1.12.1.

## [2.5.3] - 2022-08-16
### Added
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.5.4-rc1
2.5.4
48 changes: 47 additions & 1 deletion app/controllers/Groups.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package controllers;


import com.google.common.base.Optional;
import common.security.SecurityRules;
import dao.GeneralSettingDao;
Expand All @@ -29,18 +30,21 @@
import helpers.jpa.JpaReferenceBinder;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import lombok.val;
import manager.GroupManager;
import models.GeneralSetting;
import models.Office;
import models.Person;
import models.Role;
import models.User;
import models.UsersRolesOffices;
import models.dto.SeatSituationDto;
import models.flows.Group;
import org.testng.collections.Lists;
import org.testng.util.Strings;
Expand Down Expand Up @@ -211,5 +215,47 @@ public static void blank(long officeId) {
}
render("@edit", office, peopleForGroups);
}

/**
* Ritorna le informazioni sui ruoli presenti nella sede di appartenenza del dipendente.
*/
public static void seatOrganizationChart() {

val currentPerson = Security.getUser().get().person;
//Accesso da utente di sistema senza persona associata
if (currentPerson == null) {
Application.index();
}
Map<Role, List<User>> seatSupervisors = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.SEAT_SUPERVISOR));
Map<Role, List<User>> personnelAdmins = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.PERSONNEL_ADMIN));
Map<Role, List<User>> technicalAdmins = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.TECHNICAL_ADMIN));
Map<Role, List<User>> registryManagers = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.REGISTRY_MANAGER));
Map<Role, List<User>> mealTicketsManagers = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.MEAL_TICKET_MANAGER));
Map<Role, List<User>> personnelAdminsMini = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.PERSONNEL_ADMIN_MINI));
Map<Role, List<User>> shiftManagers = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.SHIFT_MANAGER));
Map<Role, List<User>> reperibilityManagers = groupManager
.createOrganizationChart(currentPerson, roleDao.getRoleByName(Role.REPERIBILITY_MANAGER));


List<Role> roles = uroDao.getUsersRolesOfficesByUser(currentPerson.user)
.stream().map(uro -> uro.role).collect(Collectors.toList());
render(seatSupervisors, personnelAdmins, technicalAdmins, registryManagers, mealTicketsManagers,
personnelAdminsMini, shiftManagers, reperibilityManagers, currentPerson, roles);
}

public static void viewInfoRole(Long id) {
Role role = roleDao.getRoleById(id);
render(role);
}

}



}
14 changes: 11 additions & 3 deletions app/controllers/SwitchTemplate.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package controllers;

import com.google.common.collect.Maps;
import java.time.LocalDate;
import java.util.Map;
import models.Office;
import models.Person;
Expand All @@ -38,9 +39,16 @@ public class SwitchTemplate extends Controller {

private static void executeAction(String action) {

Integer year = Integer.parseInt(session.get("yearSelected"));
Integer month = Integer.parseInt(session.get("monthSelected"));
Integer day = Integer.parseInt(session.get("daySelected"));
LocalDate now = LocalDate.now();
Integer year =
session.get("yearSelected") != null ?
Integer.parseInt(session.get("yearSelected")) : now.getYear();
Integer month =
session.get("monthSelected") != null ?
Integer.parseInt(session.get("monthSelected")) : now.getMonthValue();
Integer day =
session.get("daySelected") != null ?
Integer.parseInt(session.get("daySelected")) : now.getDayOfMonth();
Long personId = Long.parseLong(session.get("personSelected"));
Long officeId = Long.parseLong(session.get("officeSelected"));

Expand Down
2 changes: 2 additions & 0 deletions app/controllers/TeleworkStampings.java
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ public static void teleworkStampings(final Integer year, final Integer month)
}

render(list, year, month, validationList, validated);

}

/**
Expand Down Expand Up @@ -400,6 +401,7 @@ public static void editTeleworkStamping(long teleworkStampingId) {

render(stamping);
}


/**
* Genera il report mensile di telelavoro.
Expand Down
117 changes: 94 additions & 23 deletions app/controllers/WorkingTimes.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import dao.wrapper.IWrapperWorkingTimeType;
import dao.wrapper.function.WrapperModelFunctionFactory;
import helpers.ValidationHelper;
import helpers.Web;
import it.cnr.iit.epas.DateInterval;
import it.cnr.iit.epas.DateUtility;
import java.util.List;
Expand Down Expand Up @@ -88,6 +89,48 @@ public class WorkingTimes extends Controller {
@Inject
private static PeriodManager periodManager;

/**
* Form per l'aggiornamento della descrizione di una tipologia di orario
* di lavoro.
*/
public static void editDescription(Long wttId) {
WorkingTimeType wtt = workingTimeTypeDao.getWorkingTimeTypeById(wttId);
notFoundIfNull(wtt);
if (wtt.office != null) {
rules.checkIfPermitted(wtt.office);
} else {
rules.checkAction("WorkingTime.editDescriptionDefaultWorkingTime");
}
render(wtt);
}

/**
* Aggiornamento della descrizione di una tipologia di orario di lavoro.
*/
public static void updateDescription(Long wttId, @Required String description) {
WorkingTimeType wtt = workingTimeTypeDao.getWorkingTimeTypeById(wttId);
notFoundIfNull(wtt);
if (wtt.office != null) {
rules.checkIfPermitted(wtt.office);
} else {
rules.checkAction("WorkingTime.updateDescriptionDefaultWorkingTime");
}
if (Validation.hasErrors()) {
response.status = 400;
flash.error(Web.msgHasErrors());
render("@edit", wttId, description);
}

log.info("Changing working time type description {} to {}, id = {}.",
wtt.description, description, wtt.id);
wtt.description = description;
wtt.save();
log.info("Saved working time type description {}, id = {}.",
wtt.description, wtt.id);
flash.success("Descrizione tipologia orario di lavoro aggiornata correttamente");
redirectToManageWorkingTime(wtt.office);
}

/**
* Gestione dei tipi orario.
*
Expand All @@ -98,12 +141,16 @@ public static void manageWorkingTime(Long officeId) {
Office office = officeDao.getOfficeById(officeId);
notFoundIfNull(office);
rules.checkIfPermitted(office);

List<IWrapperWorkingTimeType> wttDefault = FluentIterable
.from(workingTimeTypeDao.getDefaultWorkingTimeType())
.from(workingTimeTypeDao.getDefaultWorkingTimeType(Optional.of(false)))
.transform(wrapperFunctionFactory.workingTimeType()).toList();

List<IWrapperWorkingTimeType> wttDefaultDisabled = FluentIterable
.from(workingTimeTypeDao.getDefaultWorkingTimeType(Optional.of(true)))
.transform(wrapperFunctionFactory.workingTimeType()).toList();

render(wttDefault, office);
render(wttDefault, wttDefaultDisabled, office);
}

/**
Expand Down Expand Up @@ -136,24 +183,35 @@ public static void manageOfficeWorkingTime(Long officeId) {


/**
* I contratti attivi che per quella sede hanno quel tipo orario.
* I contratti attivi che per quella sede hanno quel tipo orario,
* oppure per tutte le sedi se si hanno i permessi giusti e si
* imposta il parametro allOffices a true.
*
* @param wttId orario
* @param officeId sede
* @param allOffices boolean per mostrare i contratti di tutte le sedi
*/
public static void showContract(Long wttId, Long officeId) {
public static void showContract(Long wttId, Long officeId, boolean allOffices) {

WorkingTimeType wtt = workingTimeTypeDao.getWorkingTimeTypeById(wttId);
notFoundIfNull(wtt);
Office office = officeDao.getOfficeById(officeId);
notFoundIfNull(office);


rules.checkIfPermitted(wtt.office);
rules.checkIfPermitted(office);
List<Contract> contractList = Lists.newArrayList();
Office office = null;

List<Contract> contractList = wrapperFactory.create(wtt).getAssociatedActiveContract(office);
if (allOffices) {
contractList = wrapperFactory.create(wtt).getAllAssociatedActiveContract();
rules.checkAction("WorkingTimes.showAllContracts");
} else {
office = officeDao.getOfficeById(officeId);
notFoundIfNull(office);
rules.checkIfPermitted(office);

contractList = wrapperFactory.create(wtt).getAssociatedActiveContract(office);
}

render(wtt, contractList, office);
render(wtt, contractList, office, allOffices);

}

Expand Down Expand Up @@ -453,12 +511,7 @@ public static void showHorizontal(Long wttId) {
public static void showWorkingTimeType(Long wttId) {

WorkingTimeType wtt = workingTimeTypeDao.getWorkingTimeTypeById(wttId);
if (wtt == null) {

flash.error("Impossibile caricare il tipo orario specificato. "
+ "Riprovare o effettuare una segnalazione.");
WorkingTimes.manageWorkingTime(null);
}
notFoundIfNull(wtt);

rules.checkIfPermitted(wtt.office);

Expand Down Expand Up @@ -488,10 +541,11 @@ public static void delete(Long wttId) {
wttd.delete();
}
wtt.delete();
log.info("Eliminata tipologia orario di lavoro {}, id={}",
wtt.description, wtt.id);

flash.success("Tipo orario eliminato.");
WorkingTimes.manageOfficeWorkingTime(wtt.office.id);

redirectToManageWorkingTime(wtt.office);
}

/**
Expand All @@ -508,29 +562,46 @@ public static void toggleWorkingTimeTypeEnabled(Long wttId) {
IWrapperWorkingTimeType wwtt = wrapperFactory.create(wtt);

//Prima di disattivarlo controllo che non sia associato ad alcun contratto attivo
if (wtt.disabled == false && wwtt.getAssociatedActiveContract(wtt.office).size() > 0) {
if (wtt.disabled == false && wwtt.getAllAssociatedActiveContract().size() > 0) {

flash.error("Impossibile eliminare il tipo orario selezionato perchè "
+ "attualmente associato ad almeno un contratto attivo.");
manageOfficeWorkingTime(wtt.office.id);
redirectToManageWorkingTime(wtt.office);
}

if (wtt.disabled) {

wtt.disabled = false;
wtt.save();
flash.success("Riattivato correttamente orario di lavoro.");
manageOfficeWorkingTime(wtt.office.id);
log.info("Riattivata tipologia orario di lavoro {}, id={}", wtt.description, wtt.id);
redirectToManageWorkingTime(wtt.office);
} else {

wtt.disabled = true;
wtt.save();
flash.success("Disattivato orario di lavoro.");
manageOfficeWorkingTime(wtt.office.id);
log.info("Disattivata tipologia orario di lavoro {}, id={}", wtt.description, wtt.id);
redirectToManageWorkingTime(wtt.office);
}

}

/**
* Effettua il redirect alla gestione degli orari di lavoro di un ufficio
* se passato come parametro, altrimenti se possibile fa il redirect
* agli orari di lavoro predefiniti.
*/
public static void redirectToManageWorkingTime(Office office) {
flash.keep();
if (office != null && office.id != null) {
manageOfficeWorkingTime(office.id);
} else if (session.get("officeSelected") != null){
manageWorkingTime(Long.parseLong(session.get("officeSelected")));
} else {
Application.indexAdmin();
}
}

/**
* Modale per il cambia orario a tutti.
Expand Down
Loading

0 comments on commit 83e4464

Please sign in to comment.