contactTicketTypeRangeDate method

num contactTicketTypeRangeDate(
  1. TicketType ticketType,
  2. String contactIdString,
  3. DateTime start,
  4. DateTime end,
)

Implementation

num contactTicketTypeRangeDate(TicketType ticketType, String contactIdString,
    DateTime start, DateTime end) {
  final filterByRange = where((t) => t.status)
      .where((t) => '${t.contactId}' == contactIdString)
      .where((t) => t.date.isAfter(start) || t.date.isAtSameMomentAs(start))
      .where((t) => t.date.isBefore(end) || t.date.isAtSameMomentAs(end));

  switch (ticketType) {
    case TicketType.sell:
      return filterByRange
          .where((t) => t.ticketType == TicketType.sell)
          .fold(0, (prev, element) => prev + element.total);

    case TicketType.sellDeferred:
      return filterByRange
          .where((t) => t.ticketType == TicketType.sellDeferred)
          .fold(0, (prev, element) => prev + element.total);

    case TicketType.sellCovered:
      return filterByRange
          .where((t) => t.ticketType == TicketType.sellCovered)
          .fold(0, (prev, element) => prev + element.total);

    case TicketType.spend:
      return filterByRange
          .where((t) => t.ticketType == TicketType.spend)
          .fold(0, (prev, element) => prev + element.total);

    case TicketType.spendDeferred:
      return filterByRange
          .where((t) => t.ticketType == TicketType.spendDeferred)
          .fold(0, (prev, element) => prev + element.total);

    case TicketType.spendCovered:
      return filterByRange
          .where((t) => t.ticketType == TicketType.spendCovered)
          .fold(0, (prev, element) => prev + element.total);

    case TicketType.wage:
      return filterByRange
          .where((t) => t.ticketType == TicketType.wage)
          .fold(0, (prev, element) => prev + element.total);

    case TicketType.unknown:
      print(
          'rhaaaa unknow ticket type in herderTicketTypeRange, not again !');

      return 0;
    default:
      return 0;
  }
}