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