Skip to content

Instantly share code, notes, and snippets.

@mcihad
Created April 17, 2020 16:36
Show Gist options
  • Save mcihad/88e4ccea8c63c52aba54dc406e1b45e4 to your computer and use it in GitHub Desktop.
Save mcihad/88e4ccea8c63c52aba54dc406e1b45e4 to your computer and use it in GitHub Desktop.
Gelir İdaresi Başkanlığının Verilerine Göre Gecikme Zammı Hesabı
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