getLastPeriodDate method

Future<String> getLastPeriodDate()

Return last periods start date

Implementation

Future<String> getLastPeriodDate() async {
  final mInstance = MenstrualCycleWidget.instance!;
  String customerId = mInstance.getCustomerId();
  String lastPeriodsDate = "";
  printLogs("customerId : $customerId");
  printLogs(
      "customerId decrypt : ${Encryption.instance.decrypt(customerId)}");
  Database? db = await instance.database;

  final List<Map<String, dynamic>> queryResponse = await db!.rawQuery(
      "Select * from $tableUserPeriodsLogsData WHERE $columnCustomerId='$customerId' ORDER BY $columnPeriodEncryptDate DESC");

  List<DateTime> selectedPeriodsDate = [];

  List.generate(queryResponse.length, (i) {
    selectedPeriodsDate.add(DateTime.parse(Encryption.instance
        .decrypt(queryResponse[i][columnPeriodEncryptDate])));
  });

  selectedPeriodsDate.sort((a, b) => b.compareTo(a));
  printLogs("selectedPeriodsDate New Data : ${selectedPeriodsDate.length}");

  int oneDaysCount = 0; // Only If user selected only one cycle of periods
  if (selectedPeriodsDate.isNotEmpty) {
    if (selectedPeriodsDate.length == 1) {
      mInstance.lastPeriodLength = 1;
      oneDaysCount = 1;
      //printLogs("Count length ==1: ${selectedPeriodsDate.length}");
      lastPeriodsDate =
          CalenderDateUtils.dateDayFormat(selectedPeriodsDate[0]);
    } else {
      for (int index = 1; index < selectedPeriodsDate.length; index++) {
        //printLogs(
        //    "Days: ${selectedPeriodsDate[index - 1].difference(selectedPeriodsDate[index]).inDays} = ${selectedPeriodsDate[index]} = ${selectedPeriodsDate[index - 1]}");
        int inDays = selectedPeriodsDate[index - 1]
            .difference(selectedPeriodsDate[index])
            .inDays;
        if (inDays > 2) {
          //printLogs("Count inDays >2: $oneDaysCount");
          mInstance.lastPeriodLength = oneDaysCount + 1;
          lastPeriodsDate =
              CalenderDateUtils.dateDayFormat(selectedPeriodsDate[index - 1]);
          break;
        } else if (inDays == 1) {
          oneDaysCount = oneDaysCount + 1;
        }
      }
    }

    // Only If user selected only one cycle of periods
    if (lastPeriodsDate.isEmpty &&
        oneDaysCount == selectedPeriodsDate.length - 1) {
      mInstance.lastPeriodLength = oneDaysCount + 1;

      //printLogs("Count --- isEmpty: $oneDaysCount");
      lastPeriodsDate = CalenderDateUtils.dateDayFormat(
          selectedPeriodsDate[selectedPeriodsDate.length - 1]);
    }
  }
  if (oneDaysCount == 0) {
    mInstance.lastPeriodLength = 0;
  }
  //printLogs("lastPeriodsDate ------ : $lastPeriodsDate");
  return lastPeriodsDate;
}