sumTicketTypePerRange method

num sumTicketTypePerRange(
  1. TicketType ticketType, {
  2. PaymentType? paymentType,
  3. DateTime? start,
  4. DateTime? end,
})

Implementation

num sumTicketTypePerRange(TicketType ticketType,
    {PaymentType? paymentType, DateTime? start, DateTime? end}) {
  final filterByTicketType =
      paymentType == null ? this : where((t) => t.paymentType == paymentType);
  final filterByRange = (start != null && end != null)
      ? filterByTicketType
          .where((t) => t.date.isAfter(start) && t.date.isBefore(end))
          .where((t) => t.status == true)
      : filterByTicketType.where((t) => t.status == true);

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

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

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

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

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

    case TicketType.spendCovered:
      return filterByRange
          .where((t) => t.ticketType == TicketType.spendCovered)
          .fold(0.0, (prev, element) => prev + element.received);
    case TicketType.wage:
      return filterByRange
          .where((t) => t.ticketType == TicketType.wage)
          .fold(0.0, (prev, element) => prev + element.received);
    case TicketType.unknown:
      print(
          'rhaaaa unknow ticket type in sumContactTicketTypeRange, not again !');
      return 0;
    default:
      return 0;
  }
}