composeFilter method

dynamic composeFilter(
  1. FilterParams? filter
)

Implementation

dynamic composeFilter(FilterParams? filter) {
  filter = filter ?? FilterParams();

  var criteria = [];

  var search = filter.getAsNullableString('search');
  if (search != null) {
    var searchRegex = RegExp(r'^' + search, caseSensitive: false);
    var searchCriteria = [];
    searchCriteria.add({
      'type': {r'$regex': searchRegex.pattern}
    });
    searchCriteria.add({
      'party.name': {r'$regex': searchRegex.pattern}
    });
    searchCriteria.add({
      'ref_item.name': {r'$regex': searchRegex.pattern}
    });
    searchCriteria.add({
      'ref_party.name': {r'$regex': searchRegex.pattern}
    });
    criteria.add({r'$or': searchCriteria});
  }

  var id = filter.getAsNullableString('id') ??
      filter.getAsNullableString('activity_id');
  if (id != null) {
    criteria.add({'_id': id});
  }

  var orgId = filter.getAsNullableString('org_id');
  if (orgId != null) {
    criteria.add({'org_id': orgId});
  }

  var type = filter.getAsNullableString('type');
  if (type != null) {
    criteria.add({'type': type});
  }

  // Decode include types
  var includeTypes = filter.getAsObject('include_types');
  if (includeTypes != null) {
    if (includeTypes is! List) {
      includeTypes = ('' + includeTypes).split(',');
    }
    criteria.add({
      'type': {r'$in': includeTypes}
    });
  }

  // Decode exclude types
  var excludeTypes = filter.getAsObject('exclude_types');
  if (excludeTypes != null) {
    if (excludeTypes is! List) {
      excludeTypes = ('' + excludeTypes).split(',');
    }
    criteria.add({
      'type': {r'$nin': excludeTypes}
    });
  }

  var partyId = filter.getAsNullableString('party_id');
  if (partyId != null) {
    criteria.add({'party.id': partyId});
  }

  var refItemId = filter.getAsNullableString('ref_item_id');
  if (refItemId != null) {
    criteria.add({'ref_item.id': refItemId});
  }

  var refParentId = filter.getAsNullableString('ref_parent_id');
  if (refParentId != null) {
    criteria.add({'ref_parent.id': refParentId});
  }

  var refPartyId = filter.getAsNullableString('ref_party_id');
  if (refPartyId != null) {
    criteria.add({'ref_party.id': refPartyId});
  }

  var toTime = filter.getAsNullableDateTime('to_time');
  if (toTime != null) {
    criteria.add({
      'time': {r'$lt': toTime}
    });
  }

  var fromTime = filter.getAsNullableDateTime('from_time');
  if (fromTime != null) {
    criteria.add({
      'time': {r'$gte': fromTime}
    });
  }

  return criteria.isNotEmpty ? {r'$and': criteria} : null;
}