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

Description
Tout en visualisant les affectations dans les vues d'affectations (F7, shift + F7 et F8), il peut être intéressant d'avoir un aperçu des ressources humaines encore disponibles, regroupées par ateliers. Par disponibles, on entend non-affectées et n'ayant pas de conflit avec un événement durant le poste horaire considéré. Ces informations sont disponibles sur toute la période de temps choisie dans la vue.
Il sera donc possible d'obtenir dans les vues d'affectation 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 "1 jour".

Pour rendre le rapport visible dans les vues d'affectation, placez "Affectation par ligne", "Affectation par équipe" et "Affectation par personne" 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 "Atelier" (ou Equipe si l'on veut un groupement par équipe) et "Poste horaire" en lignes et "Début" 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.ShiftTemplate == Headers._ShiftTemplate & 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 )]).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 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.ShiftTemplate == Headers._ShiftTemplate & 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 )]).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 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