Rapport avancé - Vérifier les compétences des personnes affectées

Dans le cas où les affectations sont faites longtemps à l'avance, il se peut que les personnes perdent leur compétence, malgré des affectations déjà faite.
Le but de ce rapport est d'identifier les personnes affectées à des postes de travail pour lesquels ils n'ont plus la compétence.


Il y a trois cas comme on peut le voir ci-dessus :
1) La personne n'a pas la compétence
2) La personne n'a pas encore la compétence
3) La personne n'a plus la compétence

Attention que la date à laquelle on met fin est la date NON COMPRISE (car il considère que c'est la date à 0h00 du matin), comme partout dans PPF.

Donc ceci est normal


Les ajustements possibles :
- A la place du poste horaire, on peut indiquer le jour et l'heure si jamais vous souhaitez lancer le rapport à la semaine plutôt qu'une maille d'une journée.
- Retirer le premier cas (la personne n'a pas la compétence), car dès que vous allez forcer manuellement quelqu'un par rapport aux compétences, vous aller la voir apparaître dans le rapport.
- Le texte de contenu de la cellule du rapport peut être adapter

Voici comment créer le rapport :
1) Créer une brique parent en mettant la période à un jour charge
2) Créer la brique Tableau de Synthèse avec comme type de source Affectation et données dans le tableau Formule. Ne pas oublier de cocher la case Hauteur automatique des cellules.
3) Dans les colonnes ajouter "Début" et cocher le case "générer les lignes colonnes vides"
4) Enregistrer (si pas déjà fait avant)
5) Copier-coller la formule ci-dessous et la valider.
6) Enregistrer

Formule

bool debug = false;
string toDisplay = "";

var data = Source.Allocation.GetItems();

foreach(var alloc in data)
{
if(alloc.Personnel != null)
{
toDisplay += debug ? alloc.Start + " - " + alloc.Role.Role.Description + " : " + alloc.Personnel.FirstName + " " + alloc.Personnel.LastName + "\n" : "";

var personnelSkills = alloc.Personnel.Skills;

foreach (var roleSkill in alloc.Role.Role.Skills)
{
if(personnelSkills.Select(s => s.Skill).Contains(roleSkill))
{
//Cas où la personne a la compétence, il faut alors vérifier les dates
toDisplay += debug ? roleSkill.Description + " - " + "\n" : "";
var start = personnelSkills.Where(s => s.Skill == roleSkill).Select(s => s.Start);
var end = personnelSkills.Where(s => s.Skill == roleSkill).Select(s => s.End);
//Date de l'entête de colonne
var dtHeader = ((Synthetis.PeopleForce.Model.Interface.IPeriod)Headers._RealStart);
if (dtHeader != null)
{
var dtStart = dtHeader.Start;
if(start != null && dtStart <start.First())
{
//Si le start existe et qu'il est après, la personne n'a pas encore la compétence
toDisplay += !debug ? alloc.ShiftOccurence.ShiftTemplate.Description + " - " + alloc.Role.Role.Description + " : " + alloc.Personnel.FirstName +
" " + alloc.Personnel.LastName + " aura la compétence " + roleSkill.Description + " à partir de " + start.First().ToString() + "\n" : "";

}
else if (end != null && dtStart > end.First())
{
//si le end existe et qu'il est avant, la personne n'a plus la compétence
toDisplay += !debug ? alloc.ShiftOccurence.ShiftTemplate.Description + " - " + alloc.Role.Role.Description + " : " + alloc.Personnel.FirstName +
" " + alloc.Personnel.LastName + " n'a plus la compétence " + roleSkill.Description + " depuis " + end.First().ToString() + "\n" : "";
}
}
}
else
{
//Cas où la personne n'a pas la compétence
toDisplay += debug ? "La personne n'a pas la compétence" + "\n":"";
toDisplay += !debug ? alloc.ShiftOccurence.ShiftTemplate.Description + " - " + alloc.Role.Role.Description + " : " +
alloc.Personnel.FirstName + " " + alloc.Personnel.LastName + " n'a pas la compétence " + roleSkill.Description + "\n" : "";
}
}
}
}

toDisplay
Date de création: 18/05/2018 11:27      Mis à jour: 18/05/2018 11:28
Fichiers
DataImage39.png
DataImage75.png