getEarningData function

List<EarningData> getEarningData(
  1. ProviderData item
)

Implementation

List<EarningData> getEarningData(ProviderData item){
  List<EarningData> items = [];
  EarningData data = EarningData();
  ordersDataCache.sort((a, b) => b.time.compareTo(a.time));

  //
  DateTime _now = DateTime.now();
  DateTime _firstDayOfWeek = _now.subtract(Duration(days: _now.weekday));
  DateTime _firstDayOfMonth = _now.subtract(Duration(days: _now.day));

  for (var booking in ordersDataCache)
    if (booking.finished && booking.providerId == item.id){
      data.count++;
      //
      EarningData item = EarningData();
      item.id = booking.id;
      item.time = booking.time;
      item.name = booking.name;
      item.customerName = booking.customerName;
      //
      // subtotal = price - coupon + addon
      // total = subtotal + subtotal*tax
      //
      //
      //
      item.total = booking.total;
      data.total += item.total;
      //
      item.admin = booking.toAdmin;
      data.admin += item.admin;
      //
      item.provider = booking.subtotal - item.admin;
      data.provider += item.provider;
      //
      item.tax = booking.tax; //item.total*booking.tax/100;
      data.tax += item.tax;
      // print("booking.id=${booking.id} booking.providerId =${booking.providerId} _total=$_total _toAdmin=$_toAdmin provider=${data.total - _toAdmin} data.total=${data.total} data.count=${data.count}");
      //
      if (item.time.year == _now.year && item.time.month == _now.month && item.time.day == _now.day){
        data.todayEarning += booking.total;
        data.todayBooking++;
      }
      if (item.time.millisecondsSinceEpoch > _firstDayOfWeek.millisecondsSinceEpoch){ // this week
        data.thisWeekEarning += booking.total;
        data.thisWeekBooking++;
      }
      if (item.time.millisecondsSinceEpoch > _firstDayOfMonth.millisecondsSinceEpoch){ // this month
        data.thisMonthEarning += booking.total;
      }
      data.totalBooking++;
      //
      items.add(item);
    }
  data.payout = data.provider;
  for (var item2 in payout)
    if (item2.providerId == item.id)
      data.payout -= item2.total;
  if (data.payout < 0)
    data.payout = 0;

  items.sort((a, b) => b.time.compareTo(a.time));

  items.add(data);
  return items;
}