getSymptomsLogReport method
get symptoms log report BETWEEN start & end date based on userId
Implementation
Future<List<UserLogReportData>> getSymptomsLogReport(
{required DateTime? startDate,
required DateTime? endDate,
int pageNumber = 1,
int itemsPerPage = 7,
bool isRequiredPagination = false}) async {
// TODO Add validation for start and end date like not null, end date after start date or equal etc
String logStartDate = defaultDateFormat.format(startDate!);
String logEndDate = defaultDateFormat.format(endDate!);
List<UserLogReportData> usersLogDataList = [];
final dbHelper = MenstrualCycleDbHelper.instance;
int offset = (pageNumber - 1) * itemsPerPage;
String customerId = getCustomerId();
printMenstrualCycleLogs("customerId $customerId");
Database? db = await dbHelper.database;
final List<Map<String, dynamic>> queryResponse;
if (isRequiredPagination) {
queryResponse = await db!.rawQuery(
"Select * from ${MenstrualCycleDbHelper.tableDailyUserSymptomsLogsData} WHERE ${MenstrualCycleDbHelper.columnCustomerId}='$customerId' AND ${MenstrualCycleDbHelper.columnLogDate} BETWEEN '$logStartDate' AND '$logEndDate' ORDER BY ${MenstrualCycleDbHelper.columnLogDate} DESC LIMIT $itemsPerPage OFFSET $offset");
} else {
queryResponse = await db!.rawQuery(
"Select * from ${MenstrualCycleDbHelper.tableDailyUserSymptomsLogsData} WHERE ${MenstrualCycleDbHelper.columnCustomerId}='$customerId' AND ${MenstrualCycleDbHelper.columnLogDate} BETWEEN '$logStartDate' AND '$logEndDate'");
}
final encryption = Encryption.instance;
List.generate(queryResponse.length, (i) {
UserLogReportData userLogsData = UserLogReportData();
userLogsData.id = queryResponse[i][MenstrualCycleDbHelper.columnID];
userLogsData.customerId =
queryResponse[i][MenstrualCycleDbHelper.columnCustomerId];
String symptomsData = encryption.decrypt(
queryResponse[i][MenstrualCycleDbHelper.columnUserEncryptData]);
List<dynamic> jsonData = json.decode(symptomsData.trim());
userLogsData.symptomsData =
jsonData.map((symptom) => SymptomsData.fromMap(symptom)).toList();
List<SymptomsData> newSymptomsDataList = [];
for (int index = 0; index < userLogsData.symptomsData!.length; index++) {
SymptomsData symptomsData = userLogsData.symptomsData![index];
// printMenstrualCycleLogs("Oringal Name ${symptomsData.symptomName}");
symptomsData.symptomName = getSymptomsName(symptomsData.symptomId!);
newSymptomsDataList.add(symptomsData);
}
userLogsData.symptomsData!.clear();
userLogsData.symptomsData!.addAll(newSymptomsDataList);
userLogsData.bodyTemperature = encryption.decrypt(
queryResponse[i][MenstrualCycleDbHelper.columnBodyTemperature]);
userLogsData.bodyTemperatureUnit = encryption.decrypt(
queryResponse[i][MenstrualCycleDbHelper.columnBodyTemperatureUnit]);
userLogsData.weightUnit = encryption
.decrypt(queryResponse[i][MenstrualCycleDbHelper.columnWeightUnit]);
userLogsData.weight = encryption
.decrypt(queryResponse[i][MenstrualCycleDbHelper.columnWeight]);
userLogsData.waterUnit = encryption
.decrypt(queryResponse[i][MenstrualCycleDbHelper.columnWaterUnit]);
userLogsData.waterValue = encryption
.decrypt(queryResponse[i][MenstrualCycleDbHelper.columnWater]);
userLogsData.sleepTime = encryption
.decrypt(queryResponse[i][MenstrualCycleDbHelper.columnSleepTime]);
userLogsData.notes = encryption
.decrypt(queryResponse[i][MenstrualCycleDbHelper.columnNotes]);
userLogsData.meditationTime = encryption.decrypt(
queryResponse[i][MenstrualCycleDbHelper.columnMeditationTime]);
userLogsData.logDate = DateTime.parse(
queryResponse[i][MenstrualCycleDbHelper.columnLogDate]);
userLogsData.cycleDay =
queryResponse[i][MenstrualCycleDbHelper.columnCycleDay];
userLogsData.createdAt =
queryResponse[i][MenstrualCycleDbHelper.columnCreatedDateTime];
usersLogDataList.add(userLogsData);
});
usersLogDataList.sort((a, b) {
DateTime aDate = a.logDate!;
DateTime bDate = b.logDate!;
return bDate.compareTo(aDate);
});
return usersLogDataList;
}