getSymptomsLogReport method

Future<List<UserLogReportData>> getSymptomsLogReport({
  1. required DateTime? startDate,
  2. required DateTime? endDate,
  3. int pageNumber = 1,
  4. int itemsPerPage = 7,
  5. bool isRequiredPagination = false,
})

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;
}