applyGroupFilterExp method

bool applyGroupFilterExp(
  1. GroupFilterExp groupFilterExp,
  2. Map<String, dynamic> map
)

Implementation

bool applyGroupFilterExp(
    GroupFilterExp groupFilterExp, Map<String, dynamic> map) {
  bool? filterAndOk;
  for (var filter in groupFilterExp.filterExps) {
    if (groupFilterExp.operatorEx == OperatorFilterEx.OR) {
      /// Como é uma expressão or, caso esse filtro seja verdadeiro sempre retorna true

      if (filter is FilterExpColumn) {
        var value = map[filter.line!.key];
        if (filter.line!.formatData != null) {
          value = filter.line!.formatData!
              .formatData(ObjFormatData(data: value, map: map));
        }
        if (filterByTypeSearch(filter.typeSearch, value, filter.value)) {
          return true;
        }
      } else if (filter is FilterSelectColumn) {
        var value = map[filter.line!.key];
        if (filter.line!.formatData != null) {
          value = filter.line!.formatData!
              .formatData(ObjFormatData(data: value, map: map));
        }
        if (filterByTypeSearch(filter.typeSearch, value, filter.value)) {
          return true;
        }
      } else if (filter is FilterExpRangeCollun) {
        if (map[filter.line!.key] != null &&
            map[filter.line!.key] >
                (filter.dateStart?.millisecondsSinceEpoch ?? 0) &&
            map[filter.line!.key] <
                (filter.dateEnd?.millisecondsSinceEpoch ??
                    double.maxFinite.toInt())) {
          return true;
        } else {
          return false;
        }
      } else if (filter is GroupFilterExp) {
        if (applyGroupFilterExp(filter, map)) {
          return true;
        }
      }
    } else if (groupFilterExp.operatorEx == OperatorFilterEx.AND) {
      /// Expressão AND seta filterAndOk = true caso seja true, caso seja falso retorna false na função,
      if (filter is FilterExpColumn) {
        var value = map[filter.line!.key];
        if (filter.line!.formatData != null) {
          value = filter.line!.formatData!
              .formatData(ObjFormatData(data: value, map: map));
        }
        if (filterByTypeSearch(filter.typeSearch, value, filter.value)) {
          filterAndOk = true;
        } else {
          return false;
        }
      } else if (filter is FilterSelectColumn) {
        var value = map[filter.line!.key];
        if (filter.line!.formatData != null) {
          value = filter.line!.formatData!
              .formatData(ObjFormatData(data: value, map: map));
        }
        if (filterByTypeSearch(filter.typeSearch, value, filter.value)) {
          filterAndOk = true;
        } else {
          return false;
        }
      } else if (filter is GroupFilterExp) {
        if (applyGroupFilterExp(filter, map)) {
          filterAndOk = true;
        } else {
          return false;
        }
      } else if (filter is FilterExpRangeCollun) {
        if (map[filter.line!.key] != null &&
            map[filter.line!.key] >
                (filter.dateStart?.millisecondsSinceEpoch ?? 0) &&
            map[filter.line!.key] <
                (filter.dateEnd?.millisecondsSinceEpoch ??
                    double.maxFinite.toInt())) {
          filterAndOk = true;
        } else {
          return false;
        }
      }
    }
  }
  return filterAndOk ?? false;
}