Commit 44470b3

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-08-06 15:42:47
implement intake import
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent ad25c20
Changed files (2)
app
lib
features
model
export_import
app/lib/features/export_import/export_button_bar.dart
@@ -77,6 +77,7 @@ class ExportButtonBar extends StatelessWidget {
                     final converter = CsvConverter(
                       Provider.of<CsvExportSettings>(context, listen: false),
                       Provider.of<ExportColumnsManager>(context, listen: false),
+                      await RepositoryProvider.of<MedicineRepository>(context).getAll(),
                     );
                     final importedRecords = await showImportPreview(
                       context,
@@ -189,6 +190,7 @@ void performExport(BuildContext context, [AppLocalizations? localizations]) asyn
       final csvConverter = CsvConverter(
         Provider.of<CsvExportSettings>(context, listen: false),
         Provider.of<ExportColumnsManager>(context, listen: false),
+        await RepositoryProvider.of<MedicineRepository>(context).getAll(),
       );
       final csvString = csvConverter.create(await _getEntries(context));
       final data = Uint8List.fromList(utf8.encode(csvString));
app/lib/model/export_import/csv_converter.dart
@@ -10,7 +10,7 @@ import 'package:health_data_store/health_data_store.dart';
 /// Utility class to convert between csv strings and [BloodPressureRecord]s.
 class CsvConverter {
   /// Create converter between csv strings and [BloodPressureRecord] values that respects settings.
-  CsvConverter(this.settings, this.availableColumns);
+  CsvConverter(this.settings, this.availableColumns, this.availableMedicines);
 
   /// Settings that apply for ex- and import.
   final CsvExportSettings settings;
@@ -18,6 +18,9 @@ class CsvConverter {
   /// Columns manager used for ex- and import.
   final ExportColumnsManager availableColumns;
 
+  /// Medicines to choose from during import.
+  final List<Medicine> availableMedicines;
+
   /// Create the contents of a csv file from passed records.
   String create(List<FullEntry> entries) {
     final columns = settings.exportFieldsConfiguration.getActiveColumns(availableColumns);
@@ -139,7 +142,9 @@ class CsvConverter {
             (piece) => piece.$1 == RowDataFieldType.notes,)?.$2 ?? '';
       final int? color = recordPieces.firstWhereOrNull(
             (piece) => piece.$1 == RowDataFieldType.color,)?.$2;
-      
+      final List<dynamic>? intakesData = recordPieces.firstWhereOrNull(
+            (piece) => piece.$1 == RowDataFieldType.intakes,)?.$2;
+
       // manually trim quotes after https://pub.dev/packages/csv/changelog#600
       noteText = noteText.trim();
       if (noteText.endsWith('"')) {
@@ -160,7 +165,17 @@ class CsvConverter {
         note: noteText,
         color: color,
       );
-      entries.add((record, note, []));
+      final intakes = intakesData
+        ?.map((s) {
+          if (s is! (String, double)) return null;
+          final (designation, weightMg) = s;
+          final med = availableMedicines.firstWhereOrNull((med) => med.designation == designation);
+          if (med == null) return null;
+          return MedicineIntake(time: timestamp, medicine: med, dosis: Weight.mg(weightMg));
+        })
+        .whereNotNull()
+        .toList();
+      entries.add((record, note, intakes ?? []));
       currentLineNumber++;
     }