Petite confirmation de test

nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006 - 11 juil. 2005 à 10:05
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006 - 11 juil. 2005 à 15:57
Voila je dois tester si les dates d une demande de congé pour une periode donnée (TsDepart, TsRetour) n'empiètent pas sur un depôt préalablement posé et enregistré dans une table congé. Je récupère les valeurs de depart et de retour enregistrée dans la table dans $LigneTable['Date_depart'] $LigneTable['Date_retour']. Pour moi le test en pseudolanguage serait :

Si (((TsDepart>=$LigneTable['Date_depart']) && (TsRetour)<=$LigneTable['Date_retour']))
|| Si (TsDepart<=$LigneTable['Date_depart']) && ((TsRetour>=$LigneTable['Date_depart'])&&(TsRetour<=$LigneTable['Date_retour'])))

je sais que ce n'est pas évident a voir mais cela fait plusieurs jour que je bug dessus ... si qq 1 a une idée je le remercie d'avance

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!

21 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 10:10
Hello,



ben oui, c'est ca. Pourquoi tu bloques ?
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 10:16
en php cela me donne

if ((($timestamp_depart_heure>=strtotime($LigneTable['date_depart']))
&& ($timestamp_retour_heure<=strtotime($LigneTable['Date_retour'])))
|| ($timestamp_depart_heure<=strtotime($LigneTable['Date_depart'])
&& ($timestamp_retour_heure>=strtotime($LigneTable['Date_depart'])
&&($timestamp_retour_heure<=strtotime($LigneTable['Date_retour'])))))

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 10:24
Pourquoi tu ne fais pas ca directement dans ta requete sql ? Tu testes
s'il existe un empietement directement. Puisqu'apparemment tu utilises
des timestamp, ca ne va pas etre complique.

SELECT COUNT(*) FROM table WHERE TsDepart >= $timestamp_depart_heure AND...



Ils ne doivent pas empieter comment, tes temps?

Du tout ?
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 10:30
Imagine qu un utilisateur veuille déposer un congé pour une periode donnée, je dois juste tester si ce congé est possible cad si il n existe pas deja un congé (ou portion de congé) pendant cette période

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 11:00
Ok.

donc...
c'est complexe pour un lundi matin lol.
Tu dois tester si une date de depart OU une date de retour est comprise entre 2 dates d'arrivee et de retour.
Puis si une date d'arrivee est < a une autre mais >a une date de retour...
Ou si une date de depart est > a une autre mais < a une date de retour...

hmm...

lol desole mais pour un lundi matin, c'est difficile, j'ai du mal.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 11:05
Deja tu peux te simplifier la vie avec BETWEEN directement dans la
requete. Si tu veux tout faire dans php...ce sera plus long je pense.
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 11:25
ok je vais essayer avec une requete SQL mais moi comme test (modfié par rapport a au dessus ) j ai :

if (($timestamp_depart_heure >= strtotime($LigneTable['date_depart']))
&& ($timestamp_depart_heure <= strtotime($LigneTable['Date_retour'])))

et
if(($timestamp_depart_heure <= strtotime($LigneTable['Date_depart']))
&& ($timestamp_retour_heure >= strtotime($LigneTable['Date_depart'])))

j'imagine dionc que pour testé les deux cela serait :

if ((($timestamp_depart_heure >= strtotime($LigneTable['date_depart']))
&& ($timestamp_depart_heure <= strtotime($LigneTable['Date_retour']))))
||(($timestamp_depart_heure <= strtotime($LigneTable['Date_depart']))
&& ($timestamp_retour_heure >= strtotime($LigneTable['Date_depart'])))

Cela est il correct ??

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 11:34
Si tu ne vois pas pas de pbs et merci beaucoup pour ton aide (surtt un lundi matin ^^ )

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 11:43
Ouais mais il manque au moins 1 cas :



A part du 20 au 25.

B part du 24 au 29.



Pour B, tu as sa date de depart > date depart de A, et date retour > date retour de A.

Et pourtant ca se chevauche.
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 12:22
en fait c'est surtt que je ne suis pas sur de mes syntax. Si je veux dire un truc du genre
DateDepart <= TsDepart <= DateRetour c'est bien cela qu'il faut que je code
if (TsDepart => DateDepart) &&(TsDepart <= DateRetour)

C'est surtt au niveau des parenthèses que je ne suis pas sûr.

En y repensant je crois que si je dis :

( SI le depart ou le retour est situé dans un congé deposé enregistré dans la base)
* Si DateDepart <= TsDepart <= DateRetour
* Si DateDepart <= TsRetour <= DateRetour

(Si le congé deposé englobe un congé préalablement déposé) * Si TsDepart <DateDepart et TsRetour> DateRetour

Avec DateDepart et DateRetour qui correspondent au congés préalablement déposés.

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 12:37
if ( (a <= b <= c && d <= e <= f) || (blabla) )

Les parentheses forcent la precedence.
&& precede || (sans parentheses)

Voila.
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 14:14
Ok merci. Mais on peut faire un encadrement genre
if (a <= b <= c) ou on doit faire if(a<=b && b<=c) ?

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 14:22
Non, pas d'encadrement possible. Donc 2eme solution :-)
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 14:39
Oki merci bien je posterai la réponse le jour ou çca marchera

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 15:08
je crois que je vais m'arracher les cheveux... Je me suis arrété ici :

if(($timestamp_depart_heure >= strtotime($LigneTable['Date_depart']))&&($timestamp_depart_heure <= strtotime($LigneTable['Date_retour'])))
{
$boolAjout = false;

}

else if (($timestamp_retour_heure >= strtotime($LigneTable['Date_depart']))&&($timestamp_retour_heure <= strtotime($LigneTable['Date_retour'])))
{
$boolAjout = false;
}
else if(($timestamp_depart_heure <strtotime($LigneTable['Date_depart']))&&($timestamp_retour_heure> strtotime($LigneTable['Date_retour'])))
{
$boolAjout = false;
}

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 15:11
C'est quoi le probleme exactement ? Ca ne marche pas du tout ? Qu'est ce qui ne marche pas ?
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 15:41
Alors apparemment si mes dates de demandes sont à l'interieure d'un congé déja posé il ne bloque pas ( ca fonctionne pas ) quand ma date de depart est à l'interieur d'un congé posé mais que la date de retour est en dehors il bloque (ca marche) quand ma date de depart est inferieur a un congé mais que le retour se situe pendant ce congé ca bloque pas ( ca marche pas ) et enfin si la date de depart est inferieur a un congé et que la date de retour est aussi superieur il bloque donc ca marche ...

En essayant d'être plus clair :
Soit dateDepart et dateRetour les dates des congés déposés ( différents tuples de la base ) et TsDepart, TsRetour les dates de demande.

si dateDepart<=TsDepart<=dateRetour && dateDepart<=TsRetour<=dateRetour ne fonctionne pas.
si dateDepart<=TsDepart<=dateRetour && TsRetour=>dateRetour ca fonctionne
si TsDepart<=dateDepart && dateDepart<=TsRetour<=dateRetour ne fonctionne pas
si TsDepart<=dateDepart && TsRetour=>dateRetour ca fonctionne

je remarque également que dans le cas ou je pose un congé deja posé donc TsDepart=dateDepart && TsReour=dateRetour cela ne fonctionne pas. Evidemment si je pose des dates qui n'ont rien a voir avec celles de la base (aucun chevauchement) cela fonctionne correctement ;)

Quoi que tu repondes encore merci !!!!
Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 15:52
Ah, heu...prout ?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 juil. 2005 à 15:52
Je plaisante ;-)
je suis tres fatigue aujourd'hui. Je regarde ca un peu plus tard, ou demain .-)
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
11 juil. 2005 à 15:53
je te fait un copier coller de ma partie de prog :


//si je met $boolAjout = true ici il ne passe jamais a false ?????!!!!!!!
if (isset($btnValider) && ($btnValider != ""))
{
$pt = new dev_SQL;
$Query = "SELECT numero_conge, date_depart, date_retour
FROM conges
WHERE numero_util = {$HTTP_SESSION_VARS['IdUtil']}";

$TabConges=array();
$i=0;
$pt->query($Query);

for(;$LigneTable=$pt->fetch_array();)
{
if($timestamp_depart_heure >= strtotime($LigneTable['Date_depart'])&&$timestamp_depart_heure <= strtotime($LigneTable['Date_retour']))
{
$boolAjout = false;

}

else if ($timestamp_retour_heure >= strtotime($LigneTable['Date_depart'])&&$timestamp_retour_heure <= strtotime($LigneTable['Date_retour']))
{
$boolAjout = false;
}

else if (($timestamp_depart_heure <= strtotime($LigneTable['Date_depart']))&&($timestamp_retour_heure >= strtotime($LigneTable['Date_retour'])))
{
$boolAjout = false;
}

$TabConges[$i]=$LigneTable;
$i++;
}

// Il s agit du traitement donc le pb ne sera pas la !!!!
if ($boolAjout == true)
{ ?>
<script>alert('Votre demande à été transmise à : '); </script> <?
// Ajout dans la table conge via l'objet oConge
$oConge->CreerConge($HTTP_SESSION_VARS['IdUtil'], date("d/m/Y"),
date ("d/m/Y H:i:s",$timestamp_depart_heure),
date ("d/m/Y H:i:s",$timestamp_retour_heure),
$CommentUtil,"t","t",$CommentDirection);
// Initialisation du message à envoyer
$oMesgUtil = new CMesgUtil ($IdUtil);
$Urgent='t';
$Texte="Demande de congés du ". date ("d/m/Y H:i:s",$timestamp_depart_heure) .
" au " . date ("d/m/Y H:i:s",$timestamp_retour_heure).".";

// Envoi d'un message au superieur pour annoncer le depot d'un conge
//$oMesgUtil->Envoyer ($Urgent, $Texte, getNumChef($idCnx,$HTTP_SESSION_VARS['IdUtil']));

}
else
{
?>
<script language="JavaScript">
alert("Il existe déja un congé pendant cette date. Veuillez vérifier.");
</script>
<?

}
//$TestExist = $oConge->VerifCongeExist($HTTP_SESSION_VARS['IdUtil'], date($timestamp_depart_heure), date($timestamp_retour_heure));

}

Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!
0