bonjour à tous.
bon voila, j'ai besoin d'un coup de main pour avancer un programme que je fais.
disons que je loue des maisons, et j'ai un système de saisons!
j'ai 4 saisons avec les id 1, 2, 3...
pour chacune de ces saisons, j'ai des tarifs de location par semaine, weekend et nuitée différents !
exemple :
voici un tableau ou je rends ma maison dispo avec les saison de mon choix :
ici je loue ma maison entre les dates suivantes (aaaa-mm-jj) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $dates_loc = array(array('date_debut' => '2010-05-02', 'date_fin' => '2010-05-16', 'saison' => 1, 'tarifs' => array('tarif_semaine' => 500, 'tarif_weekend' => 150, 'tarif_nuitee' => 40)), array('date_debut' => '2010-05-17', 'date_fin' => '2010-05-31', 'saison' => 2, 'tarifs' => array('tarif_semaine' => 400, 'tarif_weekend' => 100, 'tarif_nuitee' => 30)), array('date_debut' => '2010-06-01', 'date_fin' => '2010-06-12', 'saison' => 3, 'tarifs' => array('tarif_semaine' => 300, 'tarif_weekend' => 75, 'tarif_nuitee' => 25))); $nb_dates_loc = count($dates_loc);
- entre le 2010-05-02 et le 2010-05-16
- entre le 2010-05-17 et le 2010-05-31
- entre le 2010-05-01 et le 2010-06-12
bon maintenant, disons que j'ai trouvé un locataire, il veut prendre ma maison entre le 2010-05-04 et le 2010-05-28 !!
le tarif semaine : du lundi au vendredi
weekend : samedi et dimanche
nuitée : lorsque ce n'est ni une semaine ni un week end.
par exemple :
disons que je loue ma maison entre un mercredi et le dimanche de la semaine d'après. la première semaine est incomplète, il s'agit dond d'une nuitée, on paira au jour. ensuite on paie le week end comme convenue, et la semaine d'après aussi.
CEPENDANT, si durant la semaine d'après par exemple on change de "saison", on doit calculer les jours individuellement.
pour avoir la liste de chaque jour entre 2 dates, j'ai la fonction suisante :
voici le tableau du locataire, avec les dates qu'il souhaite disposer du bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 function getDatesBetween($dStart, $dEnd) { $iStart = strtotime ($dStart); $iEnd = strtotime ($dEnd); if (false === $iStart || false === $iEnd) { return false; } $aStart = explode ('-', $dStart); $aEnd = explode ('-', $dEnd); if (count ($aStart) !== 3 || count ($aEnd) !== 3) { return false; } if (false === checkdate ($aStart[1], $aStart[2], $aStart[0]) || false === checkdate ($aEnd[1], $aEnd[2], $aEnd[0]) || $iEnd <= $iStart) { return false; } for ($i = $iStart; $i < $iEnd + 86400; $i = strtotime ('+1 day', $i) ) { $sDateToArr = strftime ('%Y-%m-%d', $i); $aDates[] = $sDateToArr; } if (isset ($aDates) && !empty ($aDates)) { return $aDates; } else { return false; } }
et voici la méga fonction de la mort qui tue que j'ai commencé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $dates_reserv = array(array('date_debut' => '2010-05-04', 'date_fin' => '2010-05-28')); $nb_dates_reserv = count($dates_reserv);
bon je coince en bas de la fonction >_<
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 /****************************************************************************************************/ /* CALCUL DU PRIX POUR CHAQUE RESERVATION */ /****************************************************************************************************/ $tab_jour_et_tarifs = array(); $prix_ht = 0; for($j=0;$j<$nb_dates_reserv;$j++) { // création d'un tableau ayant tous les jours de réservation avec les tarifs $k = 0; $liste_dates_reserv = getDatesBetween($dates_reserv[$j]['date_debut'], $dates_reserv[$j]['date_fin']); foreach($liste_dates_reserv as $date_reserv) { for($i=0;$i<$nb_dates_loc;$i++) { list($annee, $mois, $jour) = explode('-', $dates_loc[$i]['date_debut']); $date_debut = mktime(0,0,0,$mois,$jour,$annee); list($annee, $mois, $jour) = explode('-', $dates_loc[$i]['date_fin']); $date_fin = mktime(0,0,0,$mois,$jour,$annee); list($annee, $mois, $jour) = explode('-', $date_reserv); $jour_reservation = mktime(0,0,0,$mois,$jour,$annee); // si la date de RESERVATION est entre les 2 dates de LOCATION, on s'occupe des calculs if(($jour_reservation >= $date_debut) && ($jour_reservation <= $date_fin)) { $tab_jour_et_tarifs[$k]['jour'] = date('Y-m-d', $jour_reservation); $tab_jour_et_tarifs[$k]['saison'] = $dates_loc[$i]['saison']; $tab_jour_et_tarifs[$k]['tarifs'] = $dates_loc[$i]['tarifs']; $k++; } } } $nb_jour = count($tab_jour_et_tarifs); //print_r($tab_jour_et_tarifs); for($i=0;$i<$nb_jour;$i++) { /****************************************************/ /* RECHERCHE DES SEMAINES A 5 JOURS */ /****************************************************/ list($annee, $mois, $jour) = explode('-', $tab_jour_et_tarifs[$i]['jour']); // est-ce un lundi ? $num_jour = date('w', mktime(0,0,0,$mois,$jour,$annee)); $semaine = true; if($num_jour == 1) { // pour les 4 jours prochains for($l=1;$l<=4;$l++) { // si c'est une semaine et qu'elle est toute entiere dans la meme saison ... $demain = date('Y-m-d', mktime(0,0,0,$mois,$jour+$l,$annee)); if(($tab_jour_et_tarifs[$i+$l]['jour'] == $demain) && ()) } } } }
jusque là j'ai réussi a réunir tous les jours réservés, avec la saison qui leur correspond et les différents tarifs.
mais je n'arrive plus à avancer, et j'ai la tête enflée :s
Pourriez-vous m'aider ?
Partager