composeFilter method
dynamic
composeFilter(
- 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;
}