1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| # $date_debut_saisie, my $date_fin_saisie sont les dates au format AAAA-MM-JJ
sub traitement ()
{
($date_debut_saisie, my $date_fin_saisie) = @_;
# Je fais tout ce traitement sur la date pour traiter l'incrementation de la date dans la boucle for (le balayage peut porter sur plus d'un an)
my $date_calcul;
#
# Definition de la date de début et de la date de fin du balayage
#
my $date_debut_complete =
DateTime->new( year => 2004,
month => 9,
day => 1,
hour => 0,
minute => 0,
second => 0,
nanosecond => 0,
time_zone => "floating",
);
my $date_debut = $date_debut_complete->clone() -> truncate(to => 'day');
my @date_entree = split /-/, $date_debut_saisie;
my $date_deb =
DateTime->new( year => $date_entree[0],
month => $date_entree[1],
day => $date_entree[2],
hour => 0,
minute => 0,
second => 0,
nanosecond => 0,
time_zone => "floating",
); # date de début des calculs
my @date_entree = split /-/, $date_fin_saisie;
my $date_fin =
DateTime->new( year => $date_entree[0],
month => $date_entree[1],
day => $date_entree[2],
hour => 0,
minute => 0,
second => 0,
nanosecond => 0,
time_zone => "floating",
); # date de fin des calculs
#
# Dates à Balayer
#
for ( my $dt = $date_deb->clone(); $dt <= $date_fin; $dt->add(days => 1))
{
my @date_jour = split /-/, $dt;
my @chaine = split /T/, $date_jour[2]; # pour en extraire la chaine avant le T
$date_jour[2] = $chaine[0];
my @date_decomposee = ($date_jour[0],$date_jour[1],$date_jour[2]);
$date_calcul = join ('-', @date_decomposee);
#
# Definition de la liste des villes à balayer
#
# Effacement de la table qui contient les villes
my $sth = $dbh->do("TRUNCATE TABLE VillesDuJour;");
# Remplissage de la table contenant les Villes du jour sur lequel porte les calculs
my $nb_insert = $dbh->do(qq{INSERT INTO VillesDuJour (Ville) SELECT Ville FROM Globalite_test WHERE Globalite_test.date = '$date_calcul' GROUP BY Ville}, undef, 'DONE') or die $dbh->errstr;
# recuperation des noms de ces villes
$sth = $dbh->prepare("SELECT Ville FROM VillesDuJour;");
$sth->execute() or die $sth->errstr;
$nb_lignes = 0;
while (my $ref = $sth->fetchrow_hashref())
{
my @choix_n_Data;
my @choix_Personne;
# $Ville[] va contenir les differentes villes d'un jour
$Ville[$nb_lignes] = $ref->{'Ville'};
# mise à zéro de la colonne choix
# $sth_1 = $dbh->do("UPDATE Complements SET choix = 0 WHERE date = '$date_calcul' AND ville = '$Ville[$nb_lignes]';");
my $ligne = $dbh->do(qq{UPDATE Complements SET choix = 0 WHERE date = '$date_calcul' AND ville = '$Ville[$nb_lignes]'}, undef, 'DONE') or die $dbh->errstr;
# Param est un entier < 10, RoGJ : est une donnee de classement
my $sth_1 = $dbh->prepare("SELECT Ville, date, Param, Personne FROM Complements WHERE date = '$date_calcul' AND Ville = '$Ville[$nb_lignes]' ORDER BY RoGJ DESC;") or die $dbh->errstr;
$rv = $sth_1->execute or die $sth_1->errstr;
$explo_select = 0;
while (my $ref = $sth_1->fetchrow_hashref())
{
# $Ville[] va contenir les differentes les villes d'un jour
$Param = $ref->{'Param'};
$Personne = $ref->{'Personne'};
if (@choix_n_Data[$Param] == 0)
{
@choix_n_Data[$Param] = 1;
print "Ville : $Ville[$nb_lignes] , date : $date_calcul , parametre : $n_Course, Personne : $Personne \n";
# permet de vérifier que les valeurs sont bonnes. Elles le sont
my $ligne_modifiee = $dbh->do(qq{UPDATE Complements SET choix = 1 WHERE date = '$date_calcul' AND Ville = '$Ville[$nb_lignes]' AND Param = '$Param' AND Personne = '$Personne'}, undef, 'DONE') or die $dbh->errstr;
if ($ligne_modifiee eq 0) {
exit; # il n'y a pas eu d'UPDATE
}
############ TEST DU BON ENREGISTREMENT DE LA VALEUR DE choix
# La ou est le SELECT ne renvoie qu'une ligne. Donc cette boucle WHILE n'a qu'un passage. Mais je laisse quand même cette boucle. Ce n'est que du texte
my $sth_2 = $dbh->prepare("SELECT Ville, date, param, choix FROM Complements WHERE date = '$date_calcul' AND Ville = '$Ville[$nb_lignes]' AND Param = '$Param' AND Personne = '$Personne' ;") or die $dbh->errstr;
$rv = $sth_2->execute or die $sth_2->errstr;
$explo_select_test = 0;
while (my $ref = $sth_2->fetchrow_hashref())
{
$Ville = $ref->{'Ville'};
$Param = $ref->{'Param'};
$Personne = $ref->{'Personne'};
$choix = $ref->{'choix'};
print "Resultat du controle : pour la ville $Ville et le parametre $Param et la Personne $Personne le choix vaut $choix \n ";
$explo_select_test++;
}
# et là je constate que le champ choix a bien la valeur voulue. |
Partager