Ingewikkelde renteberekening

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Cobol Developer

Dit ga je doen Als Cobol Ontwikkelaar zal je gaan meebouwen aan een onderdeel van het backend systeem waarbij je het functionele ontwerp vertaald naar een technische oplossing die geïntegreerd kan worden in de huidige omgeving. Je zorgt ervoor dat de bedrijfsprocessen op een efficiënte manier worden uitgevoerd en werkt proactief aan het verbeteren hiervan. Samen met jouw collega’s reviewen jullie elkaars code en test je je eigen code. Je werkt nauw samen met andere ontwikkelaars, testers en functioneel ontwerpers. Taken pakket: Beheren en doorontwikkelen van de bestaande omgeving; Vertalen van een functionele vragen naar een technische oplossing; Doorvoeren van

Bekijk vacature »

Software developer (Python)

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 houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

Ervaren PHP Developer

Functieomschrijving PHP Developer met brede ervaring gezocht! Ben jij een Full Stack PHP Developer met brede ervaring die toe is aan een volgende stap? Lees dan snel verder! Voor onze eindklant in de regio Nunspeet zijn wij op zoek naar een ervaren PHP Developer die het IT Team van deze organisatie gaat versterken. Wij zoeken een enthousiaste en breed georiënteerde IT-er die er voor gaat zorgen dat deze innovatieve organisatie de volgende stap gaat maken. Om deze functie goed uit te kunnen voeren moet je communicatief goed zijn en in staat zijn om zelfstandig problemen op te lossen. Daarnaast bestaat

Bekijk vacature »

C# Developer Research and Development - Delft

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Delft Vacature ID: 6307 Introductie C# Developer Research and Development - Delft - Onze klant is één van de meest innovatieve bedrijven in de region van Delft. Op dit moment zijn ze voor het innovatie centrum. In het innovatie centrum wordt gewerkt aan de nieuwste technieken voor navigatie software. R&D / C# / Pattern Recognition / Algorithms / 3d Data / DotNET Functieomschrijving Als C# Developer kom je te werken in een innovatief scrumteam. We ontwikkelen en door ontwikkelen de nieuwste technieken op het gebied van navigatie software. Deze software wordt onder andere

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 »

Java/Kotlin Developer

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Software Developer

Dit ga je doen Ontwikkelen aan de software dat beschikbaar is op de substations; Ontwikkelen in C++, C, Python en JavaScript. Daarnaast op een Embedded Linux omgeving, opgebouwd met containers en DevOps; Meewerken aan cyber security (OWASP); Uitvoeren/bouwen van geautomatiseerde testen in samenwerking met de Quality Specialist; Vertalen van wensen van de klanten/business naar werkbare/duurzame oplossingen. Hier ga je werken Als Software Ontwikkelaar kom je te werken bij een organisatie gericht op de (internationale) energiemarkt, waar wordt gewerkt voor het verwerven en verwerken van realtime, high quality data. Er wordt gewerkt vanuit het hart van de substations en direct voor

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Wil jij bij een platte en informele organisatie werken? Lees dan snel verder! Voor een opdrachtgever in omgeving Boskoop dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? 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. Je gaat software en webapplicaties ontwikkelen met behulp van de talen

Bekijk vacature »

Front end developer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers met passie voor hun vak. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van ontwerp en ontwikkeling zullen samenkomen in een proof of concept. Nadat is vastgesteld dat de oplossing voldoet aan de belangrijkste behoeftes worden producten of services gevalideerd door middel van korte iteraties. Hiermee zorgen ze ervoor dat het werk voldoet aan de technische vereisten en gebruikersbehoefte. Door het inzetten van de nieuwste technologieën die toekomstbestendig zijn weten ze klanten omver te blazen. Ook geven en organiseren ze veel

Bekijk vacature »

Full Stack Java ontwikkelaar

Functieomschrijving Voor de politie zijn wij op zoek naar een Full stack Java ontwikkelaar. Als ervaren full stack Java ontwikkelaar binnen de gewenste deadlines meewerken aan de totstandkoming van de gewenste werkzaamheden. Taken Upgraden van GeoServer, SOLR, Oracle Spatial database, Tomcat Migreren Oracle Spatial naar PostgreSQL/PostGIS Migreren SOLR naar ElasticSearch Geografische gegevens op het interne netwerk beschikbaar maken Doorontwikkelen en actualiseren van de geografische services Het up to date brengen van de CI/CD pipeline, samen met medewerkers die verantwoordelijk zijn voor de CI/CD tooling Aanspreekbaar op de solution architectuur en stemt die met collega's in het cluster Geo De opdracht

Bekijk vacature »

Back End Developer .NET

Dit ga je doen Ontwikkelen in C# .NET en werken aan nieuwbouw, uitbouw en onderhoud van de software (die communiceren met 68.000 sensoren, waardoor er meerdere miljoenen berichten per uur verwerkt worden); Samenwerken in Scrum Teams; Meewerken aan verschillende, uitdagende projecten; Werken met nieuwe technologieën en vrijheid krijgen om jezelf te ontwikkelen en door te groeien. Hier ga je werken Je komt als Developer te werken bij een organisatie die gespecialiseerd is in software die real-time wordt gebruikt. De software constateert waar werk moet worden uitgevoerd en de chauffeurs worden met een andere applicatie hierop geattendeerd. Ook wordt er direct

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer!? Sta jij aan het begin van jouw loopbaan of heb jij misschien al enige ervaring? Vind jij het daarnaast belangrijk om jezelf constant te kunnen ontwikkelen en uitdagen? Lees dan snel verder! Voor een vooraanstaand softwarehuis in Nieuwegein ben ik op zoek naar een Junior Software Developer. De eigenaar van het bedrijf is ervan bewust dat je als junior nog een hoop kan leren, waardoor je de eerste maanden veel begeleiding en diverse trainingen krijgt. Daarna ga je samen met je collega's aan zowel kleine als grote projecten werken.

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »

Senior .Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net 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. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij dit jaar Microsoft Partner of the year geworden. Sogetisten staan klaar voor elkaar, hebben lol met elkaar en daarmee behalen we de mooiste resultaten! Werken bij Sogeti

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

24/04/2024 21:18:06
 
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.