Ingewikkelde renteberekening

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET Developer start jij in een team met 15 developers. In het team is er genoeg senioriteit om ervoor te zorgen dat jij de juiste begeleiding krijgt. Jij begint als eerst alle software pakketten en processen eigen te maken. Vervolgens ga jij deze software programmeren, onderhouden en testen. Ook ga jij research doen naar nieuwe mogelijkheden en zoek jij uit hoe je dit kan implementeren. Jullie werken intern op project basis en afhankelijk van het project werken jullie wel of niet iedere ochtend met een standup. Je gaat als Full stack developer aan de slag en gaat

Bekijk vacature »

Low-Code Expert/Developer: Power Platform Speciali

Bedrijfsomschrijving Als Low-Code Expert/Developer bij ons innovatieve bedrijf, neem je een cruciale rol op je in de creatie, ondersteuning en implementatie van diverse oplossingen met behulp van het veelzijdige Power Platform. Dit platform omvat Power Apps, Power BI, Power Automate, Power Virtual Agent en Azure Logic Apps. Het Power Platform biedt je de mogelijkheid om klanten te voorzien van naadloze integraties door op maat gemaakte oplossingen te creëren die compatibel zijn met (bijna) alle bestaande software-infrastructuren. Dankzij het uitgebreide scala aan toepassingen, krijg je de kans om als architect en projectleider van je eigen oplossing te fungeren. Dompel jezelf onder

Bekijk vacature »

Front-end Developer

Dit ga je doen Je komt in een DevOps-cultuur te werken waarbij je met je team werkt aan de front-end van diverse brand websites; Het ontwerpen van functionele en grafische ontwerpen die worden geïmplementeerd; Draagt zorg voor het maken van analyses; Je werkt nauw met je collega’s samen en geeft elkaar feedback en suggesties waar nodig; Het uitwerken van vraagstukken die afkomstig zijn van verschillende klanten; Hier ga je werken Deze marktleider op gebied van fietsen en fietservaring is gevestigd in twee provincies, verspreid over meerdere locaties. Jij zult voornamelijk in regio Joure aan de slag gaan. De organisatie doelt

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Frontend Developer

Dit ga je doen Door ontwikkelen van het online platform Deel uitmaken van verschillende ontwikkelteams Meedenken over UI/UX vraagstukken Uitdragen van Front-end binnen de organisatie Hier ga je werken Deze organisatie, gevestigd in de omgeving van Amsterdam, is een grote onderwijs instelling met meerdere vestigingen en een groot aantal studenten. Zo telt deze organisatie +/- 35.000 gebruikers. Bij deze organisatie staat jouw ontwikkeling centraal en is er veel ruimte voor eigen initiatieven. In samenwerking met jouw team ga jij de online omgeving verder ontwikkelen. In de rol van Front end Developer zal jij 50% van jouw tijd werken in het

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Software Programmeur PHP

Functie Wij zijn op zoek naar een PHP programmeur voor een leuke opdrachtgever in omgeving Alblasserdam. Heb jij altijd al willen werken bij een bedrijf dat veilige netwerkverbindingen levert door middel van veilige oplossingen? Lees dan snel verder. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Tevens

Bekijk vacature »

Medior/Senior Python developer (Django)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en werken ze met pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Er is een kwaliteitsfocus en dan biedt ruimte om verbeteringen echt door te voeren binnen de gehele

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

.NET Developer

Functie omschrijving Ervaren .NET Developer gezocht! Wij zoeken een ervaren .NET developer die aan de slag gaat voor een softwarebedrijf in de regio Rhenen. In deze rol ben jij zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Daarnaast houdt jij je bezig met de nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en product specialisten om mooie producten te creëren. Bedrijfsprofiel Waar kom je te werken? Je komt te werken voor snelgroeiende softwareleverancier en allround dienstverlener. Klanten van deze

Bekijk vacature »

Java Developer bij een jonge groeiende organisatie

Bedrijfsomschrijving Vind jij het als Java developer ook zo belangrijk dat een bedrijf je de ruimte en tijd geeft voor persoonlijke ontwikkeling? Dan zit je hier helemaal goed. Deze jonge organisatie is opgericht in 2018 en is ondertussen uitgegroeid tot een club van ongeveer 30 medewerkers. Het gaat hier om een echte Java club, die vrijheid en verantwoordelijkheid erg belangrijk vinden. Het bedrijf heeft een informele sfeer en de teams zijn erg hecht met elkaar. Ze delen graag de kennis en ervaringen met anderen, maar vinden andermans mening ook zeer belangrijk. De organisatie zet zich in voor ontwikkeling en besteed

Bekijk vacature »

Full stack developer Node.js

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

PHP developer (Symfony, Doctrine)

Functie Als PHP developer wordt er een hoge mate van zelfstandigheid verwacht, maar ook dat je goed opereert in een team waar kennis wordt gedeeld en dingen als codereviews erg veel voorkomen. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden

Bekijk vacature »

Senior Lead Front End Developer

Functieomschrijving Voor Stichting Waternet zijn wij op zoek naar een senior Lead Front End Developer. Binnen het DevOps team Online zijn we op zoek naar een Senior Lead Front End developer met kennis van toegankelijkheid. Deze developer zal zich bezighouden met development van webpaginas die in verbinding staan met systemen uit het back office. Taken Ontwerpen, ontwikkelen, implementeren, documenteren en beheren van webapplicaties in een Azure-omgeving Debuggen, analyseren en oplossen van problemen in de OTAPomgevingen Je participeert in het DevOpsTeam Online voor het verder uitwerken en implementeren van gebruikerswensen Je bent betrokken bij toegankelijkheid audits en het implementeren van WCAG

Bekijk vacature »
The Ultimate

The Ultimate

02/08/2010 13:42:20
Quote Anchor link
Hallo mede Php-ers,

Sinds enkele dagen ben ik bezig met een ingewikkelde (althans ik vind het ingewikkeld) renteberekeningsclass. De berekeningen zijn redelijk nauwkeurig en komen voor wat betreft de enkelvoudige rente en meervoudige contractuele rente exact overeen met de online tool die meestal voor dergelijke renteberekeningen wordt gebruikt: http://www.wettelijkerente.net/renteberekening.aspx

De wettelijke handelsrente komt nog niet helemaal overeen met voornoemde online bereken tool en dat betekent dat OF mijn formule onjuist is OF de online rekentool. Uiteraard zou ik graag willen weten of jullie zien waar dit aan ligt en of er verbeterpunten zijn (ongetwijfeld).

Hieronder de 2 classes:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
<?php
    public function checkJaarGrens($vervalDatum,$beginDatum,$eindDatum,$numOfYears){
        // Controleer of de periode jaargrens bevat
        for($i = 1; $i < $numOfYears + 1; $i++)
        {

            if(
            (
$beginDatum < ($vervalDatum + ($i*60*60*24*365))) &&
            (
$eindDatum > ($vervalDatum + ($i*60*60*24*365))) )
            {

            return $vervalDatum + ($i*60*60*24*365);
            }
        }
    }

    
    // Bereken rente
    public function calcRente($renteSoort,$samengesteld){
        
        // Gegevens factuur ophalen
        $db = new PDO('mysql:host=localhost;port=3307;dbname=****','****','****');                
        $sql = "SELECT
                    UNIX_TIMESTAMP(factuurDatum) AS factuurDatum,
                    factuurBedrag,betaalTermijn,renteSamengesteld, rentePercentage
                FROM Invoice WHERE id = '"
.$this->_id."'";
        $result = $db->query($sql);
        foreach($result as $row)
        {

            // Gegevens verzamelen
            $heden = time();
            $factuurBedrag = $row['factuurBedrag'];
            $rentePercentage = $row['rentePercentage'];
            $samengesteld = $row['renteSamengesteld'];
            $factuurDatum = $row['factuurDatum']; // Datum in seconden
            $vervalDatum = $factuurDatum + ($row['betaalTermijn']*24*60*60) + (60*60*24);
            $rentePeriode = $heden - $vervalDatum;
            $subtotaal = $factuurBedrag;
            $subtotaalRente = 0;


            echo '<br /><br />';
            echo 'De begindatum van de factuur is '.$row['factuurDatum'].'<br />';
            echo 'De betaaltermijn is '.$row['betaalTermijn'].' dagen.<br />';
            echo 'Dit zijn '.$row['betaalTermijn']*24*60*60 .' seconden.<br />';
            echo 'Dit betekent een vervalDatum per '.$vervalDatum.'<br />';
            echo 'Dit betekent een vervalDatum per '.date('Y-m-d',$vervalDatum).' tot aan
                    '
.date('Y-m-d',$heden).'<br />';
            echo 'De rentePeriode is dus '.$rentePeriode.' seconden of '.ceil($rentePeriode/24/60/60) .' dagen';        
            echo '<br /><br />';

        }

        
        if($renteSoort == 1) // == Wettelijke handelsrente
        {
        
            if($samengesteld == 1)
            {

            // Bereken wettelijke rente (samengesteld)
            echo 'De wettelijke rente (samengesteld) wordt berekend.<br />';

            $db = new PDO('mysql:host=localhost;port=3307;dbname=****','****','****');                
            $sql = "SELECT
                        UNIX_TIMESTAMP(eindDatum) AS eindDatum,
                        UNIX_TIMESTAMP(beginDatum) AS beginDatum,
                        rentePercentage
                    FROM wettelijkerente
                    WHERE renteSoort = 1
                    ORDER BY beginDatum ASC;
                    "
;
            $result = $db->query($sql);
            $aantalJaar = floor(($heden - $vervalDatum)/60/60/24/365);
            echo 'Er zijn '.$aantalJaar.' jaren<br />';
            foreach($result as $row){
            
                $beginDatum = $row['beginDatum'];
                $eindDatum = $row['eindDatum'];
                $rentePercentage = $row['rentePercentage'];

                // Periodes afbakenen
                if(
                (
$beginDatum < $vervalDatum) && ($eindDatum > $vervalDatum) && ($eindDatum <= $heden) ||
                (
$beginDatum < $vervalDatum) && ($eindDatum > $vervalDatum) && ($eindDatum >= $heden) ||
                (
$beginDatum > $vervalDatum) && ($eindDatum > $vervalDatum) && ($eindDatum <= $heden) ||
                (
$beginDatum > $vervalDatum) && ($eindDatum > $vervalDatum) && ($eindDatum >= $heden)
                )
                {

                    echo 'De begindatum: '.date('d-m-Y',$beginDatum).'<br />';
                    echo 'De einddatum: '.date('d-m-Y',$eindDatum).'<br />';
                    echo 'Het rentepercentage: '.$rentePercentage.'<br />';
                    
                    // ==> Eerste periode
                    if( ($beginDatum < $vervalDatum) && ($eindDatum > $vervalDatum) && ($eindDatum < $heden) )
                    {

                        echo 'Deze periode is gebroken aan het begin.<br />';
                    
                        // Controleer of de periode jaargrens bevat
                        if($this->checkJaarGrens($vervalDatum,$beginDatum,$eindDatum,$aantalJaar) > 0)
                        {

                        
                            // Ja, er is een jaargrens binnen deze periode
                            echo 'Deze periode bevat een jaargrens<br />';

                            $jaarGrens = $this->checkJaarGrens($vervalDatum,$vervalDatum,$eindDatum,$aantalJaar);
                        
                            echo 'Deze periode heeft '. ceil(($eindDatum-$vervalDatum)/60/60/24) .' dagen<br />';
                            
                            // ==> Eerste gedeelte rente
                                                        
                            // Aantal dagen voor de jaargrens

                            $aantalDagen = ceil(($jaarGrens - $vervalDatum)/60/60/24);
                            echo 'Aantal dagen in de periode voor de jaargrens: '.$aantalDagen.'<br />';
                            
                            // Rente voor de jaargrens berekenen
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;

                            echo 'Oud subtotaal = '.$subtotaal.'<br />';
                            echo 'Rente deze periode: '.$renteBedrag.'<br />';
                            echo 'Rente vorige periodes: '.$subtotaalRente.'<br />';
                            echo 'Subtotaal rente: '.$renteBedrag + $subtotaalRente.'<br />';
                            
                            // Oude rente (vorige periodes) en nieuwe rente bij elkaar optellen
                            $subtotaalRente = $subtotaalRente + $renteBedrag;
                            echo 'Subtotaal rente: '.$subtotaalRente.'<br />';
                                    
                            // ==> Nieuw subtotaal berekenen
                            // Nieuwe rente tot nu toe optellen bij subtotaal

                            $subtotaal = $subtotaal + $subtotaalRente;
                            
                            echo 'Nieuw subtotaal = '.$subtotaal.'<br />';
                            
                            // subtotaalRente resetten (want reeds bij subtotaal opgeteld)
                            $subtotaalRente = 0;
                            
                            // ==> Twee gedeelte rente
                            // Aantal dagen voor de jaargrens

                            $aantalDagen = ceil(($eindDatum - $jaarGrens)/60/60/24);
                            echo 'Aantal dagen in de periode na de jaargrens: '.$aantalDagen.'<br />';

                            // Rente na de jaargrens berekenen
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;
                            $subtotaalRente = $subtotaalRente + $renteBedrag;

                            echo 'Nieuwe rente deze periode: '.$renteBedrag.'<br />';
                            echo 'Rente subtotaal: '.$subtotaalRente.'<br />';                            
                            
                        }
else{
                        
                            // Nee, er is geen jaargrens binnen deze periode
                            echo 'Deze periode bevat geen jaargrens.<br />';

                            // Aantal dagen berekenen
                            $aantalDagen = ceil(($eindDatum - $vervalDatum)/60/60/24);
                            echo 'Aantal dagen in deze periode: '.$aantalDagen.'<br />';
                            
                            echo 'Subtotaal: '.$subtotaal.'<br />';
                            
                            // Rente berekenen en toevoegen aan renteSubtotaal
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;
                            echo 'Rentebedrag deze periode: '.$renteBedrag.'<br />';

                            $subtotaalRente = $subtotaalRente + $renteBedrag;
                            echo 'Rente subtotaal: '.$subtotaalRente.'<br />';
                            
                        }
                    }

                    // ==> Laatste periode
                    elseif( (($beginDatum < $vervalDatum) && ($eindDatum > $heden)) ||
                            ((
$beginDatum > $vervalDatum) && ($eindDatum > $heden)) )
                    {

                        echo 'Deze periode is gebroken aan het einde<br />';

                        // Controleer of de periode jaargrens bevat
                        if($this->checkJaarGrens($vervalDatum,$beginDatum,$heden,$aantalJaar) > 0)
                        {


                            // Ja, er is een jaargrens binnen deze periode
                            echo 'Deze periode bevat een jaargrens<br />';

                            $jaarGrens = $this->checkJaarGrens($vervalDatum,$beginDatum,$heden,$aantalJaar);
                        
                            echo 'Deze periode heeft '. ceil(($eindDatum-$vervalDatum)/60/60/24) .' dagen<br />';
                            
                            // ==> Eerste gedeelte rente
                                                        
                            // Aantal dagen voor de jaargrens

                            $aantalDagen = ceil(($jaarGrens - $vervalDatum)/60/60/24);
                            echo 'Aantal dagen in de periode voor de jaargrens: '.$aantalDagen.'<br />';
                            
                            // Rente voor de jaargrens berekenen
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;

                            echo 'Oud subtotaal = '.$subtotaal.'<br />';
                            echo 'Rente deze periode: '.$renteBedrag.'<br />';
                            echo 'Rente vorige periodes: '.$subtotaalRente.'<br />';
                            echo 'Subtotaal rente: '.$renteBedrag + $subtotaalRente.'<br />';
                            
                            // Oude rente (vorige periodes) en nieuwe rente bij elkaar optellen
                            $subtotaalRente = $subtotaalRente + $renteBedrag;
                            echo 'Subtotaal rente: '.$subtotaalRente.'<br />';
                                    
                            // ==> Nieuw subtotaal berekenen
                            // Nieuwe rente tot nu toe optellen bij subtotaal

                            $subtotaal = $subtotaal + $subtotaalRente;
                            
                            echo 'Nieuw subtotaal = '.$subtotaal.'<br />';
                            
                            // subtotaalRente resetten (want reeds bij subtotaal opgeteld)
                            $subtotaalRente = 0;
                            
                            // ==> Twee gedeelte rente
                            // Aantal dagen voor de jaargrens

                            $aantalDagen = ceil(($heden - $jaarGrens)/60/60/24);
                            echo 'Aantal dagen in de periode na de jaargrens: '.$aantalDagen.'<br />';

                            // Rente na de jaargrens berekenen
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;
                            $subtotaalRente = $subtotaalRente + $renteBedrag;

                            echo 'Nieuwe rente deze periode: '.$renteBedrag.'<br />';
                            echo 'Rente subtotaal: '.$subtotaalRente.'<br />';
                            
                        }
else{

                            // Nee, er is geen jaargrens binnen deze periode
                            echo 'Deze periode bevat geen jaargrens.<br />';

                            if($vervalDatum > $heden)
                            {

                                // Aantal dagen berekenen
                                $aantalDagen = ceil(($heden - $vervalDatum)/60/60/24);                            
                            }

                            else
                            {
                                // Aantal dagen berekenen
                                $aantalDagen = ceil(($heden - $beginDatum)/60/60/24);
                            }


                            echo 'Aantal dagen in deze laatste periode: '.$aantalDagen.'<br />';
                            
                            echo 'Subtotaal voor rente: '.$subtotaal.'<br />';

                            echo 'Rente subtotaal vorige periodes: '.$subtotaalRente.'<br />';
                            
                            // Rente berekenen en toevoegen aan renteSubtotaal
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;
                            $subtotaalRente = $subtotaalRente + $renteBedrag;
                            echo 'Nieuwe rente deze periode: '.$renteBedrag.'<br />';
                            echo 'Rente subtotaal: '.$subtotaalRente.'<br />';
                            
                            // Totaalbedrag berekenen
                            $subtotaal = $subtotaal + $subtotaalRente;
                            echo 'Totaalbedrag: '.$subtotaal.'<br />';
                            
                        }
                    }

                    // ==> Tussenperiode
                    else
                    {
                        echo 'Deze periode is niet gebroken maar heel<br />';

                        // Controleer of de periode jaargrens bevat
                        if($this->checkJaarGrens($vervalDatum,$beginDatum,$eindDatum,$aantalJaar) > 0)
                        {

                                                
                            // Ja, er is een jaargrens binnen deze periode
                            echo 'Deze periode bevat een jaargrens<br />';
                            
                            $jaarGrens = $this->checkJaarGrens($vervalDatum,$beginDatum,$eindDatum,$aantalJaar);
                        
                            echo 'Deze periode heeft '. ceil(($eindDatum-$beginDatum)/60/60/24) .' dagen<br />';
                            
                            // ==> Eerste gedeelte rente
                                                        
                            // Aantal dagen voor de jaargrens

                            $aantalDagen = ceil(($jaarGrens - $beginDatum)/60/60/24);
                            echo 'Aantal dagen in de periode voor de jaargrens: '.$aantalDagen.'<br />';
                            
                            // Rente voor de jaargrens berekenen
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;

                            echo 'Oud subtotaal = '.$subtotaal.'<br />';
                            echo 'Rente deze periode: '.$renteBedrag.'<br />';
                            echo 'Rente vorige periodes: '.$subtotaalRente.'<br />';
                            echo 'Subtotaal rente: '.$renteBedrag + $subtotaalRente.'<br />';
                            
                            // Oude rente (vorige periodes) en nieuwe rente bij elkaar optellen
                            $subtotaalRente = $subtotaalRente + $renteBedrag;
                            echo 'Subtotaal rente: '.$subtotaalRente.'<br />';
                                    
                            // ==> Nieuw subtotaal berekenen
                            // Nieuwe rente tot nu toe optellen bij subtotaal

                            $subtotaal = $subtotaal + $subtotaalRente;
                            
                            echo 'Nieuw subtotaal = '.$subtotaal.'<br />';
                            
                            // subtotaalRente resetten (want reeds bij subtotaal opgeteld)
                            $subtotaalRente = 0;
                            
                            // ==> Twee gedeelte rente
                            // Aantal dagen voor de jaargrens

                            $aantalDagen = ceil(($eindDatum - $jaarGrens)/60/60/24);
                            echo 'Aantal dagen in de periode na de jaargrens: '.$aantalDagen.'<br />';

                            // Rente na de jaargrens berekenen
                            $renteBedrag = ($subtotaal * ($rentePercentage/100))/365*$aantalDagen;
                            $subtotaalRente = $subtotaalRente + $renteBedrag;

                            echo 'Nieuwe rente deze periode: '.$renteBedrag.'<br />';
                            echo 'Rente subtotaal: '.$subtotaalRente.'<br />';
                            
                        }
else{

                            // Nee, er is geen jaargrens binnen deze periode
                            echo 'Deze periode bevat geen jaargrens.<br />';

                            // Aantal dagen berekenen
                            $aantalDagen = ceil(($eindDatum - $beginDatum)/60/60/24);
                            echo 'Aantal dagen in deze periode: '.$aantalDagen.'<br />';
                            
                            echo 'Subtotaal: '.$subtotaal.'<br />';
                            
                            // Rente berekenen en toevoegen aan renteSubtotaal
                            $renteBedrag = ($factuurBedrag * ($rentePercentage/100))/365*$aantalDagen;
                            echo 'Rentebedrag deze periode: '.$renteBedrag.'<br />';

                            // Subtotaal rente
                            $subtotaalRente = $subtotaalRente + $renteBedrag;
                            echo 'Rentesubtotaal: '.$subtotaalRente.'<br />';

                        }
                    }

                    
                    
                    echo '<br />';
                }

            }

        
            // Bereken de som van alle rentePeriodes
            
            }
            else
            {
            // Bereken wettelijke rente (enkelvoud)
            return 'De wettelijke rente (enkelvoud) wordt berekend';
            }
        
        }
elseif($renteSoort == 2) // == Wettelijke rente
        {

            if($samengesteld == 1)
            {

            // Bereken wettelijke handelsrente (samengesteld)
            return 'De wettelijke handelsrente (samengesteld) wordt berekend';
            }

            else
            {
            // Bereken wettelijke handelsrente (enkelvoud)
            return 'De wettelijke handelsrente (enkelvoud) wordt berekend';
            }

        }
elseif($renteSoort == 3)
        {


            if($samengesteld == 1) // == Contractuele rente
            {

                // Bereken contractuele rente (samengesteld)
                $bedrag = $factuurBedrag;
                $rente = $rentePercentage;
                $produkt = 100+$rente;
                $rentePeriode = $heden - $vervalDatum;
                $jaar = ceil($rentePeriode/24/60/60)/365;
                for ($i = 1;$i<$jaar;$i++){
                    $bedrag = ($bedrag/100)*$produkt;
                //    echo '<p>Jaar ' . ($i) . ' - ' . $bedrag . '</p>';
                    $value[] = $bedrag;
                }

    
                // Nu dient nog het 'staartje' te worden toegevoegd.
                $restPeriode = floor(($jaar-floor($jaar))*365-2);
                $subtotaal = $value[floor($jaar)-1];
                $restRente = $subtotaal*($rente/100)/365*$restPeriode;
                $totaal = round($subtotaal+$restRente,2);
                echo 'De contractuele rente (samengesteld) wordt berekend.<br />';
                echo 'Resultaat = '.$totaal;
            }

            elseif($samengesteld == 2)
            {

                // Bereken contractuele handelsrente (enkelvoud)
                $rentePeriode = $heden - $vervalDatum;
                echo 'De contractuele rente (enkelvoud) wordt berekend.<br />';
                echo 'Resultaat = ';
                echo number_format($factuurBedrag * ($rentePercentage/100) / 365 * ceil($rentePeriode/24/60/60),2);
                echo '<br />';
            }
        }
    }
    
}

?>


Weergeven doe ik op de volgende wijze:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
    
    $_GET
['dossier'] = '1';
    
    // Instants van classes creeren
    $invoice = new Invoice($_GET['dossier']);
    $user = new User($invoice->getUser());
    $debtor = new Debtor($invoice->getDebtor());
    $dossier = new Dossier($invoice->getId());
    $misc = new Misc();
    
    // Factuurgegevens ophalen
    $db = new PDO('mysql:host=localhost;port=3307;dbname=****','****','****');                
    $sql = "SELECT id,rentePercentage,renteSoort FROM invoice WHERE dossierId = ".$dossier->getId();
    $result = $db->query($sql);
    $i = 0;
    foreach($result as $row) {
        $obj = new Invoice($row['id']);
        // Bereken rente
        echo $obj->calcRente($row['renteSoort'],$row['rentePercentage']);
        $i++;
    }

    unset($obj);
    ?>
Gewijzigd op 02/08/2010 13:52:15 door The Ultimate
 
PHP hulp

PHP hulp

16/06/2025 02:51:10
 
Lars Groot

Lars Groot

02/08/2010 13:43:20
Quote Anchor link
Zou je alles in de code tags willen zetten?
[code*][*/code]
(de * wegdenken)

Bedankt!

Lars

EDIT: Heb je al gedaan :)
Gewijzigd op 02/08/2010 13:43:53 door Lars Groot
 

02/08/2010 14:05:49
Quote Anchor link
Zou je misschien de verschillen kunnen aangeven?
Let ook op, php is een weak typing taal. Dit betekend dus dat je niet per se de waarde kunt verwachten die jij verwacht.
Als jij 0 verwacht, zou dit nog best als 0.000001 kunnen opgeslagen worden.
Dit is eventueel te verhelpen met type casting en sprintf.

Edit:
Natuurlijk is het wel handig om relevante code te plaatsen.
Edit2:
Waarom laat je je db niet lekker met die datum en tijd rekenen?
Edit3:
$subtotaal = $factuurBedrag;
Is die regel nodig?
Edit4:
$aantalJaar = floor(($heden - $vervalDatum)/60/60/24/365);
Een jaar is volgens Système international d'unités 3.15*10^7 seconde lang, een dag 86400 seconde. Dus dan is één jaar 364.5833333(...) dagen lang.
Gewijzigd op 02/08/2010 14:13:52 door
 
The Ultimate

The Ultimate

02/08/2010 14:15:01
Quote Anchor link
Karl Karl op 02/08/2010 14:05:49:
Zou je misschien de verschillen kunnen aangeven?
Let ook op, php is een weak typing taal. Dit betekend dus dat je niet per se de waarde kunt verwachten die jij verwacht.
Als jij 0 verwacht, zou dit nog best als 0.000001 kunnen opgeslagen worden.
Dit is eventueel te verhelpen met type casting en sprintf.
Het verschil is dat er een ander rentebedrag uitkomt. Bijvoorbeeld EUR 100,00 vanaf 02-01-2006 t/m 02-08-2010 levert bij mij 146,8694... op en met de online berekeningstool EUR 153,56

Karl Karl op 02/08/2010 14:05:49:
Natuurlijk is het wel handig om relevante code te plaatsen.
Ik weet niet wat jij hierboven dan ziet, maar dat lijkt me toch redelijk relevant???

Karl Karl op 02/08/2010 14:05:49:
Waarom laat je je db niet lekker met die datum en tijd rekenen?
Geen flauw idee. Kun je een voorbeeld geven?

Karl Karl op 02/08/2010 14:05:49:
$subtotaal = $factuurBedrag;
Is die regel nodig?
Ja, aangezien ik de ene keer subtotaal nodig heb en de andere keer factuurBedrag en subtotaal telkens wordt overschreven.

Karl Karl op 02/08/2010 14:05:49:
$aantalJaar = floor(($heden - $vervalDatum)/60/60/24/365);
Een jaar is volgens Système international d'unités 3.15*10^7 seconde lang, een dag 86400 seconde. Dus dan is één jaar 364.5833333(...) dagen lang.
Goede tip! Ga ik aanpassen.
Gewijzigd op 02/08/2010 14:17:41 door The Ultimate
 
P Lekensteyn

P Lekensteyn

02/08/2010 14:15:18
Quote Anchor link
Moet je echt zo ingewikkeld doen om de rente te berekenen?
8% rente per jaar?
0,022% per dag.
Totaalbedrag is beginbedrag × 1,00022 ^ dagen
In PHP:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$totaal
= $begin * pow(1.00022, $dagen);
?>

Edit: typo
Gewijzigd op 02/08/2010 14:19:11 door P Lekensteyn
 
The Ultimate

The Ultimate

02/08/2010 14:19:03
Quote Anchor link
Peter aka Lekensteyn op 02/08/2010 14:15:18:
Moet je echt zo ingewikkeld doen om de rente te berekenen?
8% rente per jaar?
0,022 per dag.
Totaalbedrag is beginbedrag × 1,022 ^ dagen
In PHP:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$totaal
= $begin * pow(1.022, $dagen);
?>

Naja, misschien niet altijd nee. Maar zie je ook dat er een verschil is in samengestelde en enkelvoudige rente en dat jouw berekening daar geen rekening mee houdt? Maar ik kan hem wellicht gebruiken voor de enkelvoudige renteberekening. Dank u! Bovendien is jouw berekening niet volledig waardoor hij kleiner lijkt dan dat hij is want hoe kom jij bijvoorbeeld aan de rente per dag? ;-)
Gewijzigd op 02/08/2010 14:20:12 door The Ultimate
 

02/08/2010 14:19:42
Quote Anchor link
Ik ging van onderen naar boven kijken. Alleen die calcRente functie daar is eigenlijk interessant...
http://sqlzoo.net/howto/source/z.dir/i06dates.xml
is een voorbeeld van een datum tutorial.

Die if bij // Periodes afbakenen, volgens mij laat die alles door...
 
P Lekensteyn

P Lekensteyn

02/08/2010 14:20:17
Quote Anchor link
Dit is voor enkelvoudig, ik weet niet wat meervoudig inhoud, dus kan je er ook niet mee helpen.
 
The Ultimate

The Ultimate

02/08/2010 14:24:30
Quote Anchor link
Karl Karl op 02/08/2010 14:19:42:
Ik ging van onderen naar boven kijken. Alleen die calcRente functie daar is eigenlijk interessant...
http://sqlzoo.net/howto/source/z.dir/i06dates.xml
is een voorbeeld van een datum tutorial.

Dank u, ga er meteen induiken.

Karl Karl op 02/08/2010 14:19:42:
Die if bij // Periodes afbakenen, volgens mij laat die alles door...

Nope, hij laat bijvoorbeeld niet door wanneer de beginDatum en de eindDatum beiden kleiner zijn dan de vervalDatum. Maar wellicht is het dan handiger om dit om te draaien zit ik nu te denken. Moet voor de zekerheid even controleren of dit de enige is.
 

02/08/2010 14:35:56
Quote Anchor link
Weet je wel zeker dat die rente dat ding berekent correct is?
Als ik deze formules gebruik kom ik steeds rond de 136 uit.
 
The Ultimate

The Ultimate

02/08/2010 14:41:07
Quote Anchor link
Ja dat kan. De hoogte van de wettelijke rente verschilt van periode tot periode. Deze wordt namelijk ongeveer eens per half jaar gewijzigd. Voor een overzicht van de hoogte van de wettelijke rente per periode zie:
http://tarief.wettelijkerente.info/

Ik heb de tarieven dus opgenomen in een database table incasso.wettelijkerente
 

02/08/2010 14:44:19
Quote Anchor link
Dat betekend dus dat de rente per half jaar berekend moet worden? Zoals ik dat lees is dat niet echt standaard...
 
The Ultimate

The Ultimate

02/08/2010 14:48:11
Quote Anchor link
Nee, de rente is in het verleden ook weleens na enkele dagen of na bij voorbeeld 3 maanden gewijzigd. De laatste tijd wijzigt de rente (gelukkig) maar eens per half jaar.

Oja, weet iemand waarom dit niet werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$jaarSecs
= 3.15 * pow(10,7);
echo $jaarSecs;
?>

Dan krijg ik namelijk als uitkomst: 3.15E+7 (niet echt handig).
 

02/08/2010 14:49:59
Quote Anchor link
Dat werkt wel. Wetenschappelijke notatie. Zie sprintf.
Voor jou voorbeeld wijzigt de rente maar eens per half jaar.
Maar ik heb echt geen idee hoe je dit zou uit moeten rekenen. Volgens mij klopt het gewoon niet.

Edit:
Kan je ook gewoon de berekening laten zien?
Al is het alleen maar op papier ofzo....
Gewijzigd op 02/08/2010 22:11:51 door
 
The Ultimate

The Ultimate

03/08/2010 11:16:12
Quote Anchor link
Om de enkelvoudige rente te berekenen heb ik inmiddels de volgende formule:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// ==> Bereken contractuele handelsrente (enkelvoudig)
$aantalDagen = ceil($rentePeriode/60/60/24);
$rentePerDag = ($rentePercentage / 365 / 100) + 1;
$subtotaal = $factuurBedrag * pow($rentePerDag, $aantalDagen);
$subtotaalRente = $subtotaal - $factuurBedrag;

?>


Dit zou juist moeten zijn, maar desondanks krijg ik een andere uitkomst wanneer ik de resultaten vergelijk met http://www.wettelijkerente.net/renteberekening.aspx

Als ik uitga van een factuurbedrag van 100,00 en een rentepercentage van 10%. De startdatum = 01-01-2006 en de einddatum = 03-08-2010. De renteperiode is uiteraard de einddatum - startdatum in secs. Bij mij komt er dan 50.65 uit en op de online berekeningstool 46.08

Wie o wie weet hoe dit komt?
Gewijzigd op 03/08/2010 11:18:34 door The Ultimate
 

03/08/2010 13:50:55
Quote Anchor link
Wederom, volgens mij werkt die site niet correct. De rente is 10% dus dat is een groeifactor van 1.1.
Het begin getal is 100.
Het aantal dagen, jaren, seconde, of whatever weten we niet, das dus X.
Afbeelding
Dus:
100*1.1^X = 145.89
1.1^X = 1.4589
X = 1.1 log 1.4589 = log 1.4589 / log 1.1 = 3.962669338
En wat voor eenheid die heeft, weet ik niet. Geen dagen, geen maanden, geen minuten, geen seconden, dus denk ik jaren.
Dat klinkt op zich ook wel goed, maar je hebt nu tussen die twee data als 4 jaar gehad.
Het gedeelte achter de komma is maar 11.55 maanden (in het totaal overigs 47.55 maanden) dus dan zou je op een verschil van 3 jaar 11 maanden 18 dagen en nog wat onzin uitkomen terwijl je dus 4 jaar 7 maanden 2 dagen nodig zou moeten hebben.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.