Bonjour,
Je n’ai pas encore mon accès developpeur, je pose donc la question ici :
la fonction history::all retourne-t-elle systématiquement des valeurs ordonnées entre date de début et date de fin ?
Mon contexte :
j’ajoute des valeurs dans l’historique d’une commande avant la dernière valeur existante avec la commande addHistoryValue
Avant de faire cet ajout, les lignes suivantes retournent bien la dernière date d’historique, soit $dateEnd :
$all = history::all($cmdId, $dateBegin, $dateEnd);
$dateCollectPreviousIndex = count($all) ? $all[count($all) - 1]->getDatetime() : null;
Après l’ajout, la même commande retourne la date de l’historique ajouté. C’est ce qui a été constaté hier par un utilisateur de mon plugin.
Aujourd’hui,s’il exécute la même commande (dans un scénario), la date retournée est bien la dernière date du même intervalle
Avez-vous une idée de cette observation ?
[2021-01-16 18:50:58][DEBUG] : [Virtuel][Plugin Veolia ] Commande = 27966 Récupération historique index entre le 2020-12-31 23:55:00 et le 2021-01-14 23:55:00 Diff = 1
[2021-01-16 18:50:58][DEBUG] : [Virtuel][Plugin Veolia ] Date de collecte précédente de l'index = 2021-01-14 23:55:00
[2021-01-16 19:50:39][INFO] : [Virtuel][Plugin Veolia ] Enregistrement mesure manquante : Cmd = 27966 Date = 2021-01-11 23:55:00 => Mesure = 586703
[2021-01-16 19:50:39][DEBUG] : [Virtuel][Plugin Veolia ] Commande = 27966 Récupération historique index entre le 2020-12-31 23:55:00 et le 2021-01-14 23:55:00 Diff = 1
[2021-01-16 19:50:39][DEBUG] : [Virtuel][Plugin Veolia ] Date de collecte précédente de l'index = 2021-01-11 23:55:00
Résolution : ajouter une fonction de tri :
function sortHisto($a, $b)
{
if (is_null($a) || is_null($b)) {
return 0;
}
$dateA = $a->getDatetime();
$dateB = $b->getDatetime();
if ($dateA == $dateB) {
return 0;
}
elseif ($dateA < $dateB) {
return -1;
}
else {
return 1;
}
}
$all = history::all($cmdId, $dateBegin, $dateEnd);
usort($all, "sortHisto");