Created
April 17, 2020 16:36
-
-
Save mcihad/88e4ccea8c63c52aba54dc406e1b45e4 to your computer and use it in GitHub Desktop.
Gelir İdaresi Başkanlığının Verilerine Göre Gecikme Zammı Hesabı
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:date_calc/date_calc.dart'; | |
import 'package:test/test.dart'; | |
import 'package:intl/intl.dart'; | |
class DateDifference { | |
int years; | |
int months; | |
int days; | |
DateDifference(this.years, this.months, this.days); | |
} | |
extension DateDifferenceJodaStyle on DateCalc { | |
DateDifference differenceJodaStyle(DateCalc otherDate) { | |
var date1 = this; | |
var date2 = otherDate; | |
var yearDiff = date2.differenceValue(type: DateType.year, date: date1); | |
date1 = date1.addYear(yearDiff); | |
var monthDiff = date2.differenceValue(type: DateType.month, date: date1); | |
date1 = date1.addMonth(monthDiff); | |
var dayDiff = date2.differenceValue(type: DateType.day, date: date1); | |
return DateDifference(yearDiff, monthDiff, dayDiff); | |
} | |
} | |
class GecikmeData { | |
DateCalc startDate; | |
double rate; | |
GecikmeData(this.startDate, this.rate); | |
} | |
double gecikmeHesapla( | |
DateCalc sonOdemeTarih, DateCalc vadeTarih, double tutar) { | |
var gecikmeData = List<GecikmeData>(); | |
var gecikme = 0.0; | |
gecikmeData.add(GecikmeData(DateCalc(2000, 1, 20), 6.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2000, 12, 2), 5.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2001, 3, 29), 10.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2002, 1, 31), 7.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2003, 11, 12), 4.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2004, 1, 2), 4.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2005, 3, 2), 3.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2006, 4, 21), 2.5)); | |
gecikmeData.add(GecikmeData(DateCalc(2009, 11, 20), 1.95)); | |
gecikmeData.add(GecikmeData(DateCalc(2010, 10, 19), 1.40)); | |
gecikmeData.add(GecikmeData(DateCalc(2018, 9, 5), 2.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2019, 7, 1), 2.5)); | |
gecikmeData.add(GecikmeData(DateCalc(2019, 10, 2), 2.0)); | |
gecikmeData.add(GecikmeData(DateCalc(2019, 12, 30), 1.6)); | |
gecikmeData.removeWhere((tarih) => | |
tarih.startDate.isBefore(gecikmeData | |
.where((t) => t.startDate.isBefore(sonOdemeTarih)) | |
.last | |
.startDate) || | |
tarih.startDate.isAfter(vadeTarih)); | |
//ilk tarih ve son tarihi belirle | |
gecikmeData.add(GecikmeData(vadeTarih, 0.0)); | |
gecikmeData.first = GecikmeData(sonOdemeTarih, gecikmeData.first.rate); | |
var len = gecikmeData.length - 1; | |
for (var i = 0; i < len; i++) { | |
var start = gecikmeData[i].startDate; | |
var end = gecikmeData[i + 1].startDate; | |
var rate = gecikmeData[i].rate / 100.0; | |
var diff = start.differenceJodaStyle(end); | |
var localGecikme = 0.0; | |
localGecikme += diff.years * 12 * rate * tutar; | |
localGecikme += diff.months * rate * tutar; | |
localGecikme += (diff.days / 30.0) * rate * tutar; | |
gecikme += localGecikme; | |
} | |
return gecikme; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment