Rapport avancé - Affectation - Personnes sans conflit avec un évènement ni une affectation, par atelier, dans la vue d'ouverture

Description
Lors de la réalisation du planning dans la vue d'ouverture, il peut être intéressant de savoir sur combien de personnes on peut compter dans chaque atelier. Nous allons ici nous intéresser aux personnes n'ayant pas de conflit avec un évènement pendant le poste horaire concerné par une ouverture, ni étant déjà affectée sur un poste. Nous généralisons ceci à tous les postes horaires de la période de temps choisie. Les postes horaires pour lesquels il n'y a pas d'ouverture ne seront pas pris en compte.
Il sera donc possible d'obtenir dans la vue d'ouverture un tableau de la forme suivante reprenant le nombre de personnes disponibles, ou la liste de leur noms.


Configuration
Placez d'abord une brique "Rapport temporel" avec en période "Semaine"

Pour rendre le rapport visible dans la vue d'ouverture, placez "Ouvertures" dans l'onglet "Vues" de la brique "Rapport temporel".

Ajoutez ensuite à cette première brique une brique "Tableau de synthèse". Utilisez "Formule" comme source ainsi que dans les cellules. Cochez également la case "Hauteur automatique des cellules". Choisissez le positionnement du contenu des cellules comme bon vous semble.

Dans les onglets "Paramètres", "Lignes" et "Colonnes" de la brique "Tableau de synthèse", on définie les formules à utiliser ainsi que les entêtes du rapport. Choisissez respectivement "Atelier" (ou Equipe si l'on veut un groupement par équipe) et "Horaire" en lignes et en colonnes. N'oubliez pas de sélectionner la génération des lignes et des colonnes vides.

Pour obtenir le nombre des personnes disponibles, utilisez la formule suivante dans la case "Formule de la cellule" de l'onglet "Paramètres"

String ToDisplay;

IList<Team> teams = Source.TeamCalendar.GetTeamCalendars(Properties.TeamCalendar.Team.Workshop == Headers._Workshop & Properties.TeamCalendar.Optional != true).Where( Properties.Allocation.ShiftOccurence == Headers._ShiftOccurence & Properties.Allocation.ShiftOccurence.Optional != true ).Select( Properties.TeamCalendar.Team ).GetItems() ;

if(teams.Count < 1)
{
ToDisplay = "";
}
else
{
if(Source.Allocation.Count < 1)
{
ToDisplay = Source.Personnel.Where(Properties.Personnel.Teams[Properties.Team.This.In( teams )]).Distinct() .Available(AvailableMode.UnavailableIfAtLeastOneEvent, NotAvailLimitMode.TakeIntoAccountNotAvailLimit).List();
}
else
{
ToDisplay = Source.Personnel.Where(Properties.Personnel.Teams[ Properties.Team.This.In( teams )] & !Properties.Personnel.This.In_(Source.Allocation.Select(Properties.Allocation.Personnel ))).Distinct().Available(AvailableMode.UnavailableIfAtLeastOneEvent, NotAvailLimitMode.TakeIntoAccountNotAvailLimit).List();
}
}

ToDisplay

Pour obtenir la liste des noms des personnes disponibles, utilisez la formule suivante dans la case "Formule de la cellule" de l'onglet "Paramètres"

String ToDisplay;

IList<Team> teams = Source.TeamCalendar.GetTeamCalendars(Properties.TeamCalendar.Team.Workshop == Headers._Workshop & Properties.TeamCalendar.Optional != true).Where( Properties.Allocation.ShiftOccurence == Headers._ShiftOccurence & Properties.Allocation.ShiftOccurence.Optional != true ).Select( Properties.TeamCalendar.Team ).GetItems() ;

if(teams.Count < 1)
{
ToDisplay = "";
}
else
{
if(Source.Allocation.Count < 1)
{
ToDisplay = Source.Personnel.Where(Properties.Personnel.Teams[Properties.Team.This.In( teams )]).Distinct() .Available(AvailableMode.UnavailableIfAtLeastOneEvent, NotAvailLimitMode.TakeIntoAccountNotAvailLimit).Count.ToString();
}
else
{
ToDisplay = Source.Personnel.Where(Properties.Personnel.Teams[ Properties.Team.This.In( teams )] & !Properties.Personnel.This.In_(Source.Allocation.Select(Properties.Allocation.Personnel ))).Distinct().Available(AvailableMode.UnavailableIfAtLeastOneEvent, NotAvailLimitMode.TakeIntoAccountNotAvailLimit).Count.ToString();
}
}

ToDisplay



Pour d'autres façons de gérer les évènements dans l'analyse de la disponibilité des personnes, il faut jouer sur les paramètres de la fonction Available ( voir Available ).

ATTENTION : si aucune affectation ne sont présentes la partie !Properties.Personnel.This.In_(Source.Allocation.Select(Properties.Allocation.Personnel ).Distinct()) ne renverra pas les bonnes informations. A la place de fournir tous le monde, il renvoie rien.



Revu et validé par RVA 30-03-16
Fichiers
image001.png
image002.png
image003.png
image004.png
image005.png
image006.png
image007.png