downloadByProgramAndInstances method

Future downloadByProgramAndInstances({
  1. required String program,
  2. required List<String> trackedEntityInstances,
  3. Dio? dioTestClient,
})

Implementation

Future downloadByProgramAndInstances(
    {required String program,
    required List<String> trackedEntityInstances,
    Dio? dioTestClient}) async {
  final dhisUrl =
      'trackedEntityInstances.json?program=${program}&fields=${(this.selected).isNotEmpty ? this.selected.join(',') : '*'}&trackedEntityInstance=${trackedEntityInstances.join(";")}';

  final response = await HttpClient.get(dhisUrl,
      database: this.database, dioTestClient: dioTestClient);
  // if (response.body != null && response.body.runtimeType){}
  data = response.body != null && response.body[this.apiResourceName] != null
      ? response.body[this.apiResourceName]?.toList()
      : [];

  List<TrackedEntityInstance> trackedEntityInstanceData =
      data.map<TrackedEntityInstance>((dataItem) {
    Map<String, dynamic> dataMap = dataItem as Map<String, dynamic>;
    dataMap['dirty'] = false;
    dataMap['synced'] = true;

    return TrackedEntityInstance.fromJson(dataMap);
  }).toList();

  await TrackedEntityInstanceQuery(database: database)
      .setData(trackedEntityInstanceData)
      .save();
}