Ingewikkelde renteberekening

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Machine Software Developer

Bij een bedrijf in de machinebouw, regio Roosendaal, zijn we op zoek naar een: Machine Software Developer Waar ga je werken? Onze opdrachtgever is gespecialiseerd in de grondverzetmachines. Al meer dan 50 jaar leveren ze zowel nationaal als internationaal diverse machines. Het is een familiebedrijf met een informele werksfeer. Wat ga je doen? Als Machine Software Developer ben je verantwoordelijk voor: - Je ontwerpt, ontwikkelt en debugt software voor machinebesturingssystemen en complexe landbouwmachines; - Je stelt gebruikersinterfaces op (cabinedisplays); - Op termijn ga je softwareprojecten leiden voor specifieke machines; - Inclusief planning, documentatie en validatie; - Om specificaties te verifiëren

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een development team met één Senior .NET developer en één junior .NET developer. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit moment veel gebruik van .NET met ASP.NET. Komend kwartaal gaan wij wel gedeeltelijk overstappen naar .NET Core. Verder werken wij ook met SOAP, REST, JSON, HTML5, CSS3

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 »

Social Media Specialist

Social Media Specialist locatie: Rotterdam (Zuid Holland) Wij zoeken op korte termijn een nieuwe collega, een social media specialist/ adviseur sociale media (24 uur), voor ons sprankelende team Communicatie van CJG Rijnmond. Onze focus ligt op het informeren en binden van onze in- en externe klanten en stakeholders en het versterken van onze naamsbekendheid en zichtbaarheid. Dat doen we in nauwe samenwerking met elkaar. Over de functie Ons team bestaat uit 7 communicatieprofessionals met ieder een eigen expertise. Als lid van het online team ben je verantwoordelijk voor het ontwikkelen, uitvoeren en analyseren van onze socialemediastrategie. Ook stel je campagnes

Bekijk vacature »

Back-end developer (Magento2)

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Cymer Patch Server Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12919 Introductie This new patch server will be built on Python and Django ReST and GraphQL services with a React frontend, it will consist of several microservices and run on a Kubernetes cluster. It will be supported by several middleware applications such as ElasticSearch, Redis, RabbitMQ, Oracle and Artifactory. Functieomschrijving The Patch Admin team always aim to deliver software at a high quality, we avoid sacrifices here to maintain our velocity. Practically this means that we practice test driven development and perform end-to-end automated testing on our software. This means

Bekijk vacature »

Software Developer C# / ASP .Net

Functie omschrijving Ben jij een software ontwikkelaar die bekend is met termen ASP .NET, C# en SQL? Lees dan snel verder! Voor een bedrijf binnen de agrarische sector zijn wij namelijk op zoek naar een zelfstandige, enthousiaste en proactieve Software Developer die open staat voor een afwisselende functie met veel uitdaging. Binnen deze organisatie ben jij als Software Developer samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Hierbij draag jij bij aan de vertaling van klantwensen naar effectieve softwareoplossingen. Daarnaast ben je verantwoordelijk voor: Schatten

Bekijk vacature »

PHP Developer

Functie omschrijving Als PHP Developer ga jij aan de slag met uitdagende software projecten. Jij gaat in deze functie software applicaties ontwikkelen. Deze software projecten zijn heel divers, en deze organisatie maakt software, van A tot Z. Klanten kunnen in elke sector werkzaam zijn, van profit tot non-profit. Deze software bouw je vooral in PHP en specifiek Laravel. Dit framework kent dus geen geheimen voor jou. De software die jij gaat ontwikkelen is heel divers, van urenregistratiesystemen tot compleet geautomatiseerde tools. In deze veelzijdige functie ga jij je zeker niet vervelen, elke dag bestaat weer uit nieuwe uitdagingen. Bedrijfsprofiel Deze

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

.NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

C#.NET developer

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Testen en valideren van de ontwikkelde software. Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je gaat aan de slag met diverse technologieën en frameworks. Denk hierbij aan C#, JS frameworks, HTML, CSS, TypeScript,

Bekijk vacature »

PHP developer (Laravel, Docker, Gitlab-CI)

Functie Het IT-team bestaat momenteel uit 4 ontwikkelaars. Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. Een groot deel van de systemen is gebouwd met behulp van het Laravel framework en PHP (minimaal 7.2), Docker voor lokaab gebruik en Gitlab-CI voor het deployen

Bekijk vacature »

Junior Software Developer C# Verhuursector Verhuur

Samengevat: Wij ontwikkelen en leveren softwaresystemen voor de logistieke sector en de verhuursector. Ben jij geschikt als Junior Software Developer? Heb je ervaring met Delphi? Vaste baan: C# Software Developer Logistiek HBO €2.500 - €3.900 Deze werkgever is een software ontwikkelaar, gericht op software voor de logistieke sector. Deze werkgever heeft eigen producten ontwikkelen en leveren ook maatwerk. Ons bedrijf kent een boeiende en inspirerende werkomgeving met een open cultuur en mogelijkheden voor je verdere ontwikkeling. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om

Bekijk vacature »

Front-end Developer vue.js node.js SaaS

Dit ga je doen Het ontwikkelen van nieuwe features die bijdragen aan de groei van de klanten van de organisatie; Je denkt mee over nieuwe innovaties, features en verbeteringen in de applicatiearchitectuur; Je draagt bij aan de continue ontwikkeling van jouw team doordat je elke dag streeft naar het verbeteren van jouw eigen prestaties; Je neemt actief deel aan Scrum meetings en de Frontend Guild. Hier ga je werken Voor een snel groeiend bedrijf de regio Nieuw Vennep zijn wij opzoek naar een ervaren Front-end Developer. De organisatie is actief in de e-commercebranche en ontzorgt haar klanten middels een SaaS-platform.

Bekijk vacature »

Medior Front-end Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte websites die in eigen beheer zijn. In onze vestiging in Nederweert zit onze development afdeling en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé Medior Front-end Developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het uitwerken van designs tot functionele layouts Je

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

19/04/2024 08:07:15
 
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.