263 lines
8 KiB
Dart
263 lines
8 KiB
Dart
import 'package:ambito/src/entity/entities.dart';
|
|
import 'package:ambito/src/entity/lists/list_display.dart';
|
|
import 'package:ambito/src/entity/lists/list_repository.dart';
|
|
import 'package:ambito/src/entity/measure/category/measure_category.dart';
|
|
import 'package:ambito/src/entity/measure/complete/measure_complete.dart';
|
|
import 'package:ambito/src/entity/measure/measure_grouping.dart';
|
|
import 'package:ambito/src/extensions/extensions.dart';
|
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
|
import 'package:isar/isar.dart';
|
|
|
|
import '../../consts/consts.dart';
|
|
import '../../packages/ambito_notifier/notifier/filter_notifier.dart';
|
|
import '../../widgets/form/fields/field_dropdown.dart';
|
|
import 'group/measure_group.dart';
|
|
|
|
class MeasureRepository extends BaseDB {
|
|
@override
|
|
IsarCollection collection = isar.measureTypes;
|
|
|
|
putMeasureGroups(MeasureGrouping mg) {
|
|
isar.write((isar) {
|
|
isar.measureGroupings.put(mg);
|
|
});
|
|
}
|
|
|
|
MeasureTypes? getTypeByName(String name) {
|
|
return isar.measureTypes.where().measureTypeEqualTo(name).findFirst();
|
|
}
|
|
|
|
Map<String, int> getTypesCounterByCategory(String category) {
|
|
final counter = <String, int>{};
|
|
|
|
/*final allMeasures = isar.measureGroups.where().findAll();
|
|
|
|
for (final measure in allMeasures) {
|
|
if (measure.categories?.isEmpty ?? true || measure.type == null) continue;
|
|
|
|
final typeName = measure.type!.value;
|
|
if (typeName == null) continue;
|
|
|
|
final hasCategory = measure.categories!.any((cat) =>
|
|
cat.value?.toLowerCase().replaceUmlauts() == category.toLowerCase());
|
|
|
|
if (hasCategory) {
|
|
counter[typeName] = (counter[typeName] ?? 0) + 1;
|
|
}
|
|
}*/
|
|
|
|
return counter;
|
|
}
|
|
|
|
Future<bool> getCategoriesGroupsAndTypes() async {
|
|
final categoriesMap = <String, MeasureCategory>{};
|
|
final groupsMap = <String, MeasureGroup>{};
|
|
|
|
final autoIncrementCat = isar.measureCategorys.autoIncrement;
|
|
final autoIncrementType = isar.measureGroups.autoIncrement;
|
|
|
|
// Fetch all measures
|
|
final List<MeasureTypes> allMeasures = isar.measureTypes.where().findAll();
|
|
|
|
for (final MeasureTypes measure in allMeasures) {
|
|
if (measure.measureCategory == null ||
|
|
measure.measureCategory == null ||
|
|
measure.measureCategory!.isEmpty) {
|
|
continue;
|
|
}
|
|
|
|
// Process categories
|
|
for (final cat in measure.measureCategory!) {
|
|
final categoryName = cat.value;
|
|
if (categoryName == null) continue;
|
|
|
|
if (!categoriesMap.containsKey(categoryName)) {
|
|
categoriesMap[categoryName] = MeasureCategory()
|
|
..id = autoIncrementCat()
|
|
..name = categoryName
|
|
..url = categoryName.toLowerCase().replaceUmlauts()
|
|
..image =
|
|
'images/measure/category/${categoryName.toLowerCase().replaceUmlauts()}.jpg'
|
|
..description = 'Lorem ipsum dolor sit amet.'
|
|
..children = 1;
|
|
} else {
|
|
categoriesMap[categoryName]!.children++;
|
|
}
|
|
categoriesMap[categoryName]!.ids.add(measure.id);
|
|
}
|
|
|
|
// Process types
|
|
final groupName = measure.measureGroup!.value;
|
|
if (groupName == null) continue;
|
|
|
|
if (!groupsMap.containsKey(groupName)) {
|
|
groupsMap[groupName] = MeasureGroup()
|
|
..id = autoIncrementType()
|
|
..name = groupName
|
|
..url = groupName.toLowerCase().replaceUmlauts()
|
|
..description = measure.description ?? ''
|
|
..image =
|
|
'images/measure/group/${groupName.toLowerCase().replaceUmlauts()}.jpg' // Add the appropriate image URL if available
|
|
..children = 1
|
|
..categories = measure.measureCategory!
|
|
.map((item) =>
|
|
item.value!.toLowerCase().replaceUmlauts().toString())
|
|
.toList();
|
|
} else {
|
|
groupsMap[groupName]!.categories.addAll(measure.measureCategory!
|
|
.map(
|
|
(item) => item.value!.toLowerCase().replaceUmlauts().toString())
|
|
.toList());
|
|
groupsMap[groupName]!.children++;
|
|
}
|
|
groupsMap[groupName]!.ids.add(measure.id);
|
|
}
|
|
|
|
isar.write((isar) {
|
|
isar.measureCategorys.putAll(categoriesMap.values.toList());
|
|
isar.measureGroups.putAll(groupsMap.values.toList());
|
|
});
|
|
return true;
|
|
}
|
|
|
|
Future<bool> buildLists() async {
|
|
return true;
|
|
}
|
|
|
|
Future<bool> buildMeasureFilters() async {
|
|
return true;
|
|
}
|
|
|
|
int getMeasureCount() {
|
|
return isar.measureTypes.where().count();
|
|
}
|
|
|
|
List<MeasureTypes?> getByIds(List<int> ids) {
|
|
return isar.measureTypes.getAll(ids);
|
|
}
|
|
|
|
List<MeasureTypes> getAllOrdered() {
|
|
return isar.measureTypes.where().sortByMeasureType().findAll();
|
|
}
|
|
|
|
List<MeasureTypes> getAllOrderedByCategory(String category) {
|
|
final lowerCaseCategory = category.toLowerCase().replaceUmlauts();
|
|
final all = isar.measureTypes.where().sortByMeasureType().findAll();
|
|
|
|
return all.where((mt) {
|
|
return mt.measureCategory?.any((idcv) =>
|
|
idcv.value?.toLowerCase().replaceUmlauts() ==
|
|
lowerCaseCategory) ??
|
|
false;
|
|
}).toList();
|
|
}
|
|
|
|
List<MeasureCategory> getCategories() {
|
|
return isar.measureCategorys.where().findAll();
|
|
}
|
|
|
|
List<int>? getIdsByCategory(String category) {
|
|
if (category == '') {
|
|
return isar.measureCategorys
|
|
.where()
|
|
.idsProperty()
|
|
.findAll()
|
|
.expand((x) => x)
|
|
.toList();
|
|
}
|
|
return isar.measureCategorys
|
|
.where()
|
|
.urlEqualTo(category)
|
|
.idsProperty()
|
|
.findFirst();
|
|
}
|
|
|
|
List<int>? getIdsByGroup(String group) {
|
|
if (group == '') {
|
|
return isar.measureCategorys
|
|
.where()
|
|
.idsProperty()
|
|
.findAll()
|
|
.expand((x) => x)
|
|
.toList();
|
|
}
|
|
return isar.measureGroups
|
|
.where()
|
|
.urlEqualTo(group)
|
|
.idsProperty()
|
|
.findFirst();
|
|
}
|
|
|
|
List<int>? getIdsByCategoryAndGroup(String category, String group) {
|
|
Set<int> byCat = Set.from(getIdsByCategory(category) ?? []);
|
|
Set<int> byGroup = Set.from(getIdsByGroup(group) ?? []);
|
|
return byCat.intersection(byGroup).toList();
|
|
}
|
|
|
|
List<MeasureGroup> getGroupsByCategory(String category) {
|
|
return isar.measureGroups
|
|
.where()
|
|
.categoriesElementContains(category)
|
|
.findAll();
|
|
}
|
|
|
|
FieldDropdown getGroupDropDownByCategory(String category) {
|
|
List<MeasureGroup> filterItems = getGroupsByCategory(category);
|
|
|
|
return FieldDropdown(
|
|
name: 'group',
|
|
label: 'Maßnahmengruppe',
|
|
filterValue: ambitoFilterNotifier.activeFilters['group'],
|
|
onClear: () {
|
|
ambitoFilterNotifier.removeFilter('group');
|
|
ambitoFilterNotifier.removeFilter('type');
|
|
},
|
|
onSelected: (value) {
|
|
ambitoFilterNotifier.removeFilter('type');
|
|
ambitoFilterNotifier.setFilter(
|
|
'group',
|
|
value ?? '',
|
|
);
|
|
},
|
|
entries: filterItems.map((item) => item.name!).toList(),
|
|
);
|
|
}
|
|
|
|
FieldDropdown getTypeDropDownByCategoryAndGroup(
|
|
String category, String group) {
|
|
List<ListDisplay> filterItemsToShow =
|
|
ListRepository().getTypesToDisplay(category, group);
|
|
|
|
List<ListDisplay> filterItems = [];
|
|
|
|
for (var filterItem in filterItemsToShow) {
|
|
int childs = ListRepository()
|
|
.getMeasuresToDisplay(
|
|
category, group, filterItem.title!.toLowerCase().replaceUmlauts())
|
|
.length;
|
|
if (childs > 0) {
|
|
filterItems.add(filterItem);
|
|
}
|
|
}
|
|
|
|
return FieldDropdown(
|
|
name: 'type',
|
|
label: 'Maßnahmentyp',
|
|
filterValue: ambitoFilterNotifier.activeFilters['type'],
|
|
onClear: () {
|
|
ambitoFilterNotifier.removeFilter('type');
|
|
},
|
|
onSelected: (value) {
|
|
ambitoFilterNotifier.setFilter(
|
|
'type',
|
|
value ?? '',
|
|
);
|
|
},
|
|
entries: filterItems.map((item) => item.title!).toList(),
|
|
);
|
|
}
|
|
|
|
MeasureComplete? getMeasureCompleteByName(String name) {
|
|
return isar.measureCompletes.where().nameEqualTo(name).findFirst();
|
|
}
|
|
}
|