create method
Implementation
@override
Future create() async {
final Program program = await ProgramQuery(database: database)
.byId(this.program as String)
.withAttributes()
.getOne();
TrackedEntityInstance trackedEntityInstance = TrackedEntityInstance(
orgUnit: this.orgUnit as String,
dirty: false,
trackedEntityType: program.trackedEntityType as String,
);
Enrollment enrollment = Enrollment(
trackedEntityType: program.trackedEntityType as String,
orgUnit: this.orgUnit as String,
program: program.id as String,
trackedEntityInstance: trackedEntityInstance.trackedEntityInstance,
status: 'ACTIVE',
dirty: true);
trackedEntityInstance.enrollments = [enrollment];
final List<ProgramTrackedEntityAttribute> reservedAttributes =
(program.programTrackedEntityAttributes ?? [])
.where((attribute) => attribute.generated == true)
.toList();
List<TrackedEntityAttributeValue> attributeValues = [];
await Future.wait(reservedAttributes.map((attribute) async {
final AttributeReservedValue? attributeReservedValue =
await AttributeReservedValueQuery(database: database)
.where(attribute: 'attribute', value: attribute.attribute)
.getOne();
if (attributeReservedValue != null) {
final String id =
'${trackedEntityInstance.trackedEntityInstance}_${attribute.attribute}';
attributeValues.add(TrackedEntityAttributeValue(
id: id,
name: id,
dirty: true,
attribute: attribute.attribute,
trackedEntityInstance: trackedEntityInstance.trackedEntityInstance,
value: attributeReservedValue.value));
await AttributeReservedValueQuery(database: database)
.byId(attributeReservedValue.id as String)
.delete();
}
return null;
}));
trackedEntityInstance.attributes = attributeValues;
this.data = trackedEntityInstance;
await this.save();
return trackedEntityInstance;
}