if/ else statement verwijzen naar stap (x)
Voor een verhuurservice ben ik bezig met het maken van een script die bepaald wat de klant uiteindelijk gaat betalen. Nu is hiervoor al jarenlang hetzelfde systeem in gebruik namelijk; er zijn 3 prijscategorieen.
Huurt de klant het artikel maar voor 1 dag dan is de prijs wat hoger.
Huurt de klant voor meerdere dagen dan is het tarief per dag iets lager dan de prijs voor een losse dag.
Huurt de klant het artikel voor een week (5,6 of 7) dagen dan wordt hier een weektarief voor gerekend
Het eerste deel voor het huren van een de artikelen (tot en met de weekprijs) kan ik oplossen door het gebruiken van else/ if statements.
Nu het probleem wat als ik een rest heb. Ik huur het artikel voor 9 dagen.
Dan heb ik de weekprijs + 2 * een meerdagen tarief.
Ik wil dan het aantal huurdagen omzetten in het aantal huur_weken.
het aantal huurweken afronden naar beneden. Nu heb ik een rest.
Nu vermenigvuldig ik het aantal afgeronde huurweken met 7 zodat k het aantal dagen in de weken weet.
Daarna trek ik het aantal week dagen van het aantal huurdagen af en heb ik de resterende huurdagen.
De resterende dagen moeten worden vermenigvuldigt met de meer_dagen tarieven.
Totaal prijs: is aantal huurweken + aantal resterende dagen.
Tot zover ben ik gekomen:
Code (php)
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
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
<?php>
$prijs = array(
'losse_dag' => 5,
'meerdagen' => 4,
'week' => 20
);
$aantal_huurdagen = 9;
//Aangenomen getal, deze komt straks uit de functie waarbij strtotime wordt gebruikt om het dagen verschil te bepalen uit een eind en begin datum.
$aantal_huurweken = $aantal_huurdagen /7;
$aantal_huurweken_afgerond = floor($aantal_huurweken);
if ($aantal_huurdagen == 0)
{
$totaal_prijs = ($aantal_huurdagen + 1) * $prijs['losse_dag'];
// hier wordt 1 bij op geteld omdat als ik een dag blijf is mijn begin en eind datum gelijk en komt er 0 uit, dan zou de klant dus niks hoeven betalen.
}
elseif ($aantal_huurdagen < 5)
{
$totaal_prijs = ($aantal_huurdagen +1) * $prijs['meerdagen'];
// zie commentaar hierboven, de klant zou voor een dag te weinig betalen.
}
elseif ($aantal_huurdagen <= 7)
{
$totaal_prijs = $aantal_huurweken * $prijs['week'];
}
elseif ($aantal_huurdagen > 7)
//mocht de klant het artikel huren voor 8 dagen is dit de weekprijs + een rest.
{
$totaal_prijs = ($aantal_huurweken_afgerond * $prijs['week']) + ?);
//Resterend aantal losse dagane moet bij het aantal weken opgeteld worden
}
?>
$prijs = array(
'losse_dag' => 5,
'meerdagen' => 4,
'week' => 20
);
$aantal_huurdagen = 9;
//Aangenomen getal, deze komt straks uit de functie waarbij strtotime wordt gebruikt om het dagen verschil te bepalen uit een eind en begin datum.
$aantal_huurweken = $aantal_huurdagen /7;
$aantal_huurweken_afgerond = floor($aantal_huurweken);
if ($aantal_huurdagen == 0)
{
$totaal_prijs = ($aantal_huurdagen + 1) * $prijs['losse_dag'];
// hier wordt 1 bij op geteld omdat als ik een dag blijf is mijn begin en eind datum gelijk en komt er 0 uit, dan zou de klant dus niks hoeven betalen.
}
elseif ($aantal_huurdagen < 5)
{
$totaal_prijs = ($aantal_huurdagen +1) * $prijs['meerdagen'];
// zie commentaar hierboven, de klant zou voor een dag te weinig betalen.
}
elseif ($aantal_huurdagen <= 7)
{
$totaal_prijs = $aantal_huurweken * $prijs['week'];
}
elseif ($aantal_huurdagen > 7)
//mocht de klant het artikel huren voor 8 dagen is dit de weekprijs + een rest.
{
$totaal_prijs = ($aantal_huurweken_afgerond * $prijs['week']) + ?);
//Resterend aantal losse dagane moet bij het aantal weken opgeteld worden
}
?>
Ik kom dus vast te zitten nadat het aantal huurdagen groter als 7 wordt.
Nu ben ik beginner met php en weet ik niet of dit script uberhaupt werkt.
Ik wilde laten zien wat ik precies wil doen met het script.
Gewijzigd op 01/01/1970 01:00:00 door Kevin damstra
En wat wil je als antwoord als er 40 dagen wordt gehuurd?
Code (php)
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
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
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
$inputBeginDatum = '14-03-1993';
$inputEindDatum = '19-01-2010';
// Zet de data om in een DateTime object (kijk maar eens op php.net hierover)
$beginDatum = DateTime::createFromFormat('d-m-Y', $inputBeginDatum);
$eindDatum = DateTime::createFromFormat('d-m-Y', $inputEindDatum);
// Bereken het verschil (automatisch)
$verschil = $eindDatum->diff($beginDatum);
// Zet het veschil om in een aantal dagen
$dagen = (int) $verschil->format('%a');
$prijs = array(
'dag' => 2,
'week' => 10,
'maand' => 30
);
// Minder dan 1 week
if($dagen < 7)
$prijs = $dagen*$prijs['dag'];
// Minder dan 1 maand. $dagen/7 is het aantal weken, met ceil() naar boven afgerond (ik neem aan dat je dat wilt)
elseif($dagen < 28)
$prijs = ceil($dagen/7)*$prijs['week'];
else {
$maanden = (int) $verschil->format('%m') + (int) $verschil->format('%y') * 12;
// Als er een rest-stuk is, voeg een extra maand toe (haal dit weg als je het niet wilt)
if((int) $verschil->format('%d') > 0)
$maanden++;
$prijs = $maanden*$prijs['maand'];
}
echo $prijs;
?>
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
$inputBeginDatum = '14-03-1993';
$inputEindDatum = '19-01-2010';
// Zet de data om in een DateTime object (kijk maar eens op php.net hierover)
$beginDatum = DateTime::createFromFormat('d-m-Y', $inputBeginDatum);
$eindDatum = DateTime::createFromFormat('d-m-Y', $inputEindDatum);
// Bereken het verschil (automatisch)
$verschil = $eindDatum->diff($beginDatum);
// Zet het veschil om in een aantal dagen
$dagen = (int) $verschil->format('%a');
$prijs = array(
'dag' => 2,
'week' => 10,
'maand' => 30
);
// Minder dan 1 week
if($dagen < 7)
$prijs = $dagen*$prijs['dag'];
// Minder dan 1 maand. $dagen/7 is het aantal weken, met ceil() naar boven afgerond (ik neem aan dat je dat wilt)
elseif($dagen < 28)
$prijs = ceil($dagen/7)*$prijs['week'];
else {
$maanden = (int) $verschil->format('%m') + (int) $verschil->format('%y') * 12;
// Als er een rest-stuk is, voeg een extra maand toe (haal dit weg als je het niet wilt)
if((int) $verschil->format('%d') > 0)
$maanden++;
$prijs = $maanden*$prijs['maand'];
}
echo $prijs;
?>
Als het te ondeuidelijk is kan ik het wel even uitleggen.
Gewijzigd op 01/01/1970 01:00:00 door Pim -
Om het eenvoudig te maken wil de ik een dag week en maand prijs aankaarten, maar omdat maanden verschillend aantal dagen hebben maak ik het alleen amar moeilijker.
Ik heb de beginpost aangepast voor het werkelijke probleem dat moet worden opgelost.
Mijn excuses, als iemand me kan helpen ben ik daar erg dankbaar voor
Volgens mij heb ik juist dat probleem opgelost in het script hierboven. Wat mis je dan?
dus nadat het aantal weken zijn uitgerekend pak je hetgeen wat over is in het aantal dagen.
Maar daarna is de prijs het aantal weken * weektarief, ik zie het niet terug dat het rest wordt opgeteld bij het eerst bepaalde aantal weken.
Het script wat je hebt samengesteld is crasht overigens op line 67,
Het kan aan mij liggen en dat ik nog niet genoeg van php weet om het te volgen, toch bedankt alvast voor de moeite :)
kevin damstra schreef op 20.01.2010 12:51:
Ja ik zie dat je het verschil overpakt in format dagen,
dus nadat het aantal weken zijn uitgerekend pak je hetgeen wat over is in het aantal dagen.
Maar daarna is de prijs het aantal weken * weektarief, ik zie het niet terug dat het rest wordt opgeteld bij het eerst bepaalde aantal weken.
Het script wat je hebt samengesteld is crasht overigens op line 67,
Het kan aan mij liggen en dat ik nog niet genoeg van php weet om het te volgen, toch bedankt alvast voor de moeite :)
dus nadat het aantal weken zijn uitgerekend pak je hetgeen wat over is in het aantal dagen.
Maar daarna is de prijs het aantal weken * weektarief, ik zie het niet terug dat het rest wordt opgeteld bij het eerst bepaalde aantal weken.
Het script wat je hebt samengesteld is crasht overigens op line 67,
Het kan aan mij liggen en dat ik nog niet genoeg van php weet om het te volgen, toch bedankt alvast voor de moeite :)
Mmm, zoveel regels heeft het script niet eens, maar omdat je het in een bestaand script hebt geïmplementeerd zijn wellicht de regels anders. Misschien dat je even de regel kunt plaatsen waar het fout gaat?
Code (php)
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
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
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$aantal_huurdagen = 125;
$prijs = array(
'losse_dag' => 5,
'meerdag' => 4,
'week' => 20,
'maand' => 50
);
$maandduur = 28;
$weekduur = 7;
$aantal_betaalmaanden = floor($aantal_huurdagen / $maandduur);
$aantal_betaalweken = floor(($aantal_huurdagen - ($aantal_betaalmaanden * $maandduur)) / $weekduur);
$aantal_betaalmeerdagen = floor(($aantal_huurdagen - ($aantal_betaalmaanden * $maandduur) - ($aantal_betaalweken * $weekduur)));
$aantal_betaaldagen = ($aantal_betaalmeerdagen > 0) ? 1 : 0;
$aantal_betaalmeerdagen = ($aantal_betaaldagen > 0) ? $aantal_betaalmeerdagen - 1 : 0;
$maand = ($aantal_betaalmaanden == 1) ? ' maand, ' : ' maanden, ';
$week = ($aantal_betaalweken == 1) ? ' week, ' : ' weken, ';
$meerdag = ($aantal_betaalmeerdagen == 1) ? ' meerdag en ' : ' meerdagen en ';
$dag = ($aantal_betaaldagen == 1) ? ' dag' : ' dagen';
$totaal_prijs = ($aantal_betaalmaanden * $prijs['maand']) + ($aantal_betaalweken * $prijs['week']) + ($aantal_betaalmeerdagen * $prijs['meerdag']) + ($aantal_betaaldagen * $prijs['losse_dag']);
echo 'Aantal dagen is: ' . $aantal_huurdagen . '<br/>';
echo 'Dat is: ' . $aantal_betaalmaanden . $maand . $aantal_betaalweken . $week . $aantal_betaalmeerdagen . $meerdag . $aantal_betaaldagen . $dag . '<br/>';
echo 'De kosten zijn: ' . number_format($totaal_prijs, 2, '.', '') . '<br/>';
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$aantal_huurdagen = 125;
$prijs = array(
'losse_dag' => 5,
'meerdag' => 4,
'week' => 20,
'maand' => 50
);
$maandduur = 28;
$weekduur = 7;
$aantal_betaalmaanden = floor($aantal_huurdagen / $maandduur);
$aantal_betaalweken = floor(($aantal_huurdagen - ($aantal_betaalmaanden * $maandduur)) / $weekduur);
$aantal_betaalmeerdagen = floor(($aantal_huurdagen - ($aantal_betaalmaanden * $maandduur) - ($aantal_betaalweken * $weekduur)));
$aantal_betaaldagen = ($aantal_betaalmeerdagen > 0) ? 1 : 0;
$aantal_betaalmeerdagen = ($aantal_betaaldagen > 0) ? $aantal_betaalmeerdagen - 1 : 0;
$maand = ($aantal_betaalmaanden == 1) ? ' maand, ' : ' maanden, ';
$week = ($aantal_betaalweken == 1) ? ' week, ' : ' weken, ';
$meerdag = ($aantal_betaalmeerdagen == 1) ? ' meerdag en ' : ' meerdagen en ';
$dag = ($aantal_betaaldagen == 1) ? ' dag' : ' dagen';
$totaal_prijs = ($aantal_betaalmaanden * $prijs['maand']) + ($aantal_betaalweken * $prijs['week']) + ($aantal_betaalmeerdagen * $prijs['meerdag']) + ($aantal_betaaldagen * $prijs['losse_dag']);
echo 'Aantal dagen is: ' . $aantal_huurdagen . '<br/>';
echo 'Dat is: ' . $aantal_betaalmaanden . $maand . $aantal_betaalweken . $week . $aantal_betaalmeerdagen . $meerdag . $aantal_betaaldagen . $dag . '<br/>';
echo 'De kosten zijn: ' . number_format($totaal_prijs, 2, '.', '') . '<br/>';
?>
Er is een kanttekening, de losse dag die voorkomt is alleen bij het huren van echt een losse dag.
Stel de klant heeft 4 weken, 4 meerdagen en 1 dag
dan komt hieruit (4*20) + (4*4) + (1*5), dit zou moeten zijn (4*20) + (5*4)
dus 5 meerdagen omdat in 129 dagen geen losse dag meer voor kan komen.
Daarnaast betaal ik bij 5 dagen de weekprijs en niet 4 meerdagen en 1 losse dag.
De weekprijs is 5,6 en 7 dagen dus dan is het niet mogelijk om weekduur een waarde mee te geven.
Ik zal hem ff uit pluizen en kijken of ik dat aan kan passen
Thnx
Gewijzigd op 01/01/1970 01:00:00 door kevin damstra
1 dag = losse_dag_prijs
5 dagen = week_prijs
7 dagen = week_prijs
9 dagen = (1*week_prijs) + (2*meerdagen_prijs)
11 dagen = (1*week_prijs + (4*meerdagen_prijs)
12 dagen = (2*week_prijs)
14 dagen = (2*week_prijs)
15 dagen = (2*week_prijs)+(1*meerdagen_prijs)
Daarnaast hebben wij het maandtarief geschrapt, dit komt maar eens in de zoveel jaren voor dat iemand zo lang huurt. daar is dan ook geen speciaal tarief voor nodig.
Gewijzigd op 01/01/1970 01:00:00 door kevin damstra
Code (php)
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
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
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$aantal_huurdagen = 125;
$prijs = array(
'losse_dag' => 5,
'meerdag' => 4,
'week' => 20
);
$weekmax = 7;
$weekmin = 5;
$aantal_betaalweken = floor($aantal_huurdagen / $weekmax);
$aantal_betaalmeerdagen = floor(($aantal_huurdagen - ($aantal_betaalweken * $weekmax)));
$aantal_betaalweken = ($aantal_betaalmeerdagen >= $weekmin) ? $aantal_betaalweken + 1 : $aantal_betaalweken;
$aantal_betaalmeerdagen = ($aantal_betaalmeerdagen >= $weekmin) ? 0 : $aantal_betaalmeerdagen;
$aantal_betaaldagen = ($aantal_huurdagen == 1) ? 1 : 0;
$aantal_betaalmeerdagen = ($aantal_betaaldagen == 0) ? $aantal_betaalmeerdagen : 0;
$week = ($aantal_betaalweken == 1) ? ' week, ' : ' weken, ';
$meerdag = ($aantal_betaalmeerdagen == 1) ? ' meerdag en ' : ' meerdagen en ';
$dag = ($aantal_betaaldagen == 1) ? ' dag' : ' dagen';
$totaal_prijs = ($aantal_betaalweken * $prijs['week']) + ($aantal_betaalmeerdagen * $prijs['meerdag']) + ($aantal_betaaldagen * $prijs['losse_dag']);
echo 'Aantal dagen is: ' . $aantal_huurdagen . '<br/>';
echo 'Dat is: ' . $aantal_betaalweken . $week . $aantal_betaalmeerdagen . $meerdag . $aantal_betaaldagen . $dag . '<br/>';
echo 'De kosten zijn: ' . number_format($totaal_prijs, 2, '.', '') . '<br/>';
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$aantal_huurdagen = 125;
$prijs = array(
'losse_dag' => 5,
'meerdag' => 4,
'week' => 20
);
$weekmax = 7;
$weekmin = 5;
$aantal_betaalweken = floor($aantal_huurdagen / $weekmax);
$aantal_betaalmeerdagen = floor(($aantal_huurdagen - ($aantal_betaalweken * $weekmax)));
$aantal_betaalweken = ($aantal_betaalmeerdagen >= $weekmin) ? $aantal_betaalweken + 1 : $aantal_betaalweken;
$aantal_betaalmeerdagen = ($aantal_betaalmeerdagen >= $weekmin) ? 0 : $aantal_betaalmeerdagen;
$aantal_betaaldagen = ($aantal_huurdagen == 1) ? 1 : 0;
$aantal_betaalmeerdagen = ($aantal_betaaldagen == 0) ? $aantal_betaalmeerdagen : 0;
$week = ($aantal_betaalweken == 1) ? ' week, ' : ' weken, ';
$meerdag = ($aantal_betaalmeerdagen == 1) ? ' meerdag en ' : ' meerdagen en ';
$dag = ($aantal_betaaldagen == 1) ? ' dag' : ' dagen';
$totaal_prijs = ($aantal_betaalweken * $prijs['week']) + ($aantal_betaalmeerdagen * $prijs['meerdag']) + ($aantal_betaaldagen * $prijs['losse_dag']);
echo 'Aantal dagen is: ' . $aantal_huurdagen . '<br/>';
echo 'Dat is: ' . $aantal_betaalweken . $week . $aantal_betaalmeerdagen . $meerdag . $aantal_betaaldagen . $dag . '<br/>';
echo 'De kosten zijn: ' . number_format($totaal_prijs, 2, '.', '') . '<br/>';
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Ik ga nu gewoon ff van alles testen, en voeg het formulier toe.
Als de databases zijn ingevuld met artikelen moet ook dat hiermee weer verrekend worden.
Stapje voor stapje komen we er wel,