processInsert method

  1. @override
Future<RemoteDto?> processInsert()
override

Implementation

@override
Future<RemoteDto?> processInsert() async {
  RemoteDto? remoteDto = null;
  bool doesCrcMatch = false;

  await _preProcessing();
  try {
    doesCrcMatch = super.doesCrcMatch(tableTransactions.getJoinCrcString());
  } on SqlException catch (e) {
    if (e.sqlExceptionEnum != SqlExceptionEnum.ENTRY_NOT_FOUND &&
        e.sqlExceptionEnum != SqlExceptionEnum.FAILED_SELECT) rethrow;
  }

  if (!doesCrcMatch && passedWaterState != WaterState.CLIENT_REJECTED) {
    waterLine.setWaterError(WaterError.CRC_NOT_MATCH);
    tableTransactions.getTrDto().id=-1;
    remoteDto = await commitChanges(null);
  } else {
    switch (passedWaterState) {
      case WaterState.CLIENT_STORED: // This is a item entered by ADMIN
        remoteDto = await super.writeAdd();
        try {
          await tableTransactions.updateWaterLineField();
        } on SqlException catch (e) {
          if (e.sqlExceptionEnum != SqlExceptionEnum.ENTRY_NOT_FOUND) rethrow;
        }
        break;
      case WaterState.CLIENT_APPROVED: // Approved by ADMIN
        try {
          await tableTransactions.getChangesFromDto();
          await tableTransactions.updateWaterLineField();
        } on SqlException catch (e) {
          if (e.sqlExceptionEnum != SqlExceptionEnum.ENTRY_NOT_FOUND) rethrow;
        }
        waterLine.setWaterState(WaterState.SERVER_APPROVED);
        remoteDto = await commitChanges(null);
        break;
      case WaterState.CLIENT_REJECTED: // Rejected by ADMIN, so remove
        try {
          await tableTransactions.delete(null);
        } on SqlException catch (e) {
          if (e.sqlExceptionEnum == SqlExceptionEnum.ENTRY_NOT_FOUND) {
            print("WS $e");
          } else rethrow;
        }
        waterLine.setWaterState(WaterState.SERVER_REJECTED);
        remoteDto = await commitChanges(null);
        break;
      default:
    }
  }
  return remoteDto;
}