Ingewikkelde renteberekening

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lead Webdeveloper

As Lead Web Developer at KUBUS you are responsible for the implementation design of requirements and the software architecture of the web application and services of BIMcollab. In your role as lead developer you will naturally search for the optimum between the required implementation time, the performance of the application and a fast go-to-market of features, in line with our automated test and release train. Together with the other senior developers in your team you monitor the architecture of the application and you advise the product owner about necessary refactoring to improve the maintainability of the platform. Our development team

Bekijk vacature »

Junior PHP Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

HBO startersfunctie .NET Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Ben je in januari 2023 klaar met je HBO opleiding en zoek je een mooie uitdaging? Wacht niet langer en solliciteer direct! Voor een familiebedrijf in de regio van Boxtel ben ik op zoek naar een C#.NET Ontwikkelaar. Jij gaat aan de slag met de (door)ontwikkeling van de maatwerksoftware projecten en gaat ook nieuwe software bouwen, middels de Microsoft-stack. Het bedrijf maakt gebruik van de volgende technieken: C# & ASP.NET; MVC; MS SQL; Entity Framework; Je krijgt hier veel tijd om te leren en eventueel door te groeien en het

Bekijk vacature »

T-SQL Database developer

Functie omschrijving Ben jij een ETL database specialist? Houd jij ervan om te puzzelen met Databases, Query's & Stored procedures? Zoek jij uitdaging, vrijheid en verantwoordelijkheid? Zoek dan niet verder! Wij zijn per direct op zoek naar medior en senior database developers. Je gaat werken voor een relatief klein softwarebedrijf in omgeving Tilburg. Samen met 12 collega's (allemaal techneuten), ga jij je bezig houden met het bouwen en/of onderhouden van database software. Deze software wordt internationaal ingezet voor het automatiseren van logistieke processen. Jouw werkzaamheden gaan er als volgt uit zien: Je bent in een klein team met developers, verantwoordelijk

Bekijk vacature »

Oracle Apex developer

Bedrijfsomschrijving My client is a technology company based in Den Bosch, the Netherlands. They specialize in providing innovative software solutions to clients, and they are currently looking for an experienced Oracle Apex developer to join the IT team. Functieomschrijving As an Oracle Apex developer, you will be responsible for designing, developing, and maintaining web-based applications using Oracle Apex. You will work closely with project managers, business analysts, and other developers to ensure that clients' needs are met and that the software solutions are of the highest quality. Responsibilities: Design, develop, and maintain Oracle Apex applications. Work with project managers and

Bekijk vacature »

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

Bekijk vacature »

Ervaren Full stack developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house functie bij een bedrijf met enorme groeipotentie? Ben jij op zoek naar een nieuwe uitdaging vol afwisseling en gezelligheid? Dan ben je bij dit bedrijf aan het juiste adres! Wij zijn in omgeving Breda op zoek naar een ervaren full stack developer. Je gaat werken voor een zeer gewilde werkgever met goede arbeidsvoorwaarden. Je krijgt een plekje in het jonge IT team, work hard, play hard is hier duidelijk het motto! Jouw werkzaamheden zien er als volgt uit: Jij bent verantwoordelijk voor het ontwerpen en bouwen van webapplicaties. Je bent

Bekijk vacature »

Mendix Ontwikkelaar - Vernieuwen van het applicati

Bedrijfsomschrijving De ontwikkelingen in de transportsector gaan razendsnel. Bij ons kun je een belangrijke rol spelen in deze sector. We streven ernaar om onze klanten te ontzorgen op het gebied van continuïteit en veiligheid met innovatieve producten en diensten. We willen dat onze klanten de veiligste vervoerders van Europa worden. Ons team werkt hard om deze ambitieuze doelstellingen te bereiken en we bieden een motiverende werkomgeving aan. We zijn op zoek naar zelfstarters met een focus op resultaat en beslissingsbevoegdheid. Functieomschrijving Als Mendix ontwikkelaar bij deze organisatie heb je een gevarieerde baan. Het applicatielandschap wordt vernieuwd en de “schade en

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor een informele club in omgeving Delft zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Als ontwikkelaar kom je terecht op een afdeling van 6 medewerkers. Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Er wordt voornamelijk gewerkt met PHP, Java en

Bekijk vacature »

Medior/Senior Software Developers gezocht in de Ra

Functie Op dit moment staan er posities open voor de volgende functies: Front-end, Back-End & Fullstack software developer. Als Front-End software developer werk je met JavaScript en de bijbehorende technologieën zoals TypeScript, Angular, React, Vue en Svelte. Als Back-End software developer ben je bezig in NodeJS en doe je dit met behulp van AWS, NoSQL, REST en GraphQL. Je krijgt leuke en uitdagende opdrachten met een gemiddelde duur van anderhalf jaar. Hier werk je in een team met andere IT’ers aan het ontwikkelen en verbeteren van software. Je wordt begeleid door een accountmanager die fungeert als jouw aanspreekpunt. Het team

Bekijk vacature »

Full stack developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Front-End Developer

As a Front-End Developer at Coolblue you improve the user-friendliness of our webshop for millions of customers. How do I become a Front-End Developer at Coolblue? As a Front-End Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present these within the team. You also take pride in your work and welcome any feedback. Would you like to become a Front-End Developer at Coolblue? Read below if the job suits you. You

Bekijk vacature »

Full Stack PHP Developer

Functieomschrijving Ervaren PHP Developer gezocht! Wij zijn op zoek naar een ervaren PHP Developer die het IT team van een organisatie in de regio Ermelo gaat versterken. Voor deze functie zijn we op zoek naar een enthousiaste en breed georiënteerde IT-er die deze innovatieve organisatie nog een stap verder gaat brengen. Wij zijn op zoek naar iemand die communicatief goed is en die zelfstandig problemen op kan lossen. Je bent verantwoordelijk voor het samenwerken met een externe partij het is hierbij jouw taak om deze partij uit te dagen op het geleverde werk. Het schrijven van concepten aan de AI

Bekijk vacature »

Technical Asset Specialist Substations

TenneT is growing fast to realize its strategic ambitions. We play a leading role in driving the energy transition. We are looking for a passionate Technical Asset Specialist for substations (onshore and offshore) at our location in Arnhem who will contribute to this and that might be you? Your contribution to TenneT We are searching for a motivated and engaged colleague as a technical asset specialist (onshore and offshore) for instrument transformers and surge arresters, with preferably a strong background in the area of insulation coordination. As a specialist for insulation coordination you are responsible for overarching topics regarding insultation

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

09/05/2024 23:41:14
 
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.