saveRecord method

Future<Map<String, dynamic>> saveRecord()

Implementation

Future<Map<String,dynamic>> saveRecord() async{
    Map<String,dynamic> result={"status":"failure","message":"nothing executed","operation":"INSERT"};
    try{
        String primaryKeyField="id";
        result[attributePrimaryKey]=primaryKeyField;
        int primaryKeyValue=0;
        formatValues();
        String validateStatus=validateValues();
        if(validateStatus=="success"){
            Map<String,dynamic> values=new Map();
            Map<String,dynamic> userDefinedFunctions=new Map();
            String uniqueCondition="1=1";
            fields.forEach((name,field){
                var value=getFieldValue(name);
                if(name.equalsIgnoreCase("id")){
                    primaryKeyValue=int.parse(value.toString());
                }
                String type=field[fieldType];
                List attributes=getFieldAttributes(name);
                if(attributes.contains(attributeUniqueKey)||attributes.contains(attributeCheckUnique)||attributes.contains(attributeCheckModify)||attributes.contains(attributeCheckUpdate)){
                    uniqueCondition+=" AND $name="+getFieldSQLValue(name);
                }
                userDefinedFunctions=updateUserDefinedFunction(userDefinedFunctions,name);
                if(!attributes.contains(attributeAutoIncrement)&&!attributes.contains(attributeTimestamp)&&type!=typeUserDefinedFunction){
                    values[name]=value;
                }
            });
            Map<String,dynamic> fetchResponse=await fetchRecords(condition: uniqueCondition);
            if(fetchResponse["status"].toString()=="success"){
                List fetchRecords=fetchResponse["records"];
                if(fetchRecords.isNotEmpty){
                    Map<String,dynamic> record=fetchRecords.first;
                    primaryKeyValue=record[primaryKeyField];
                    uniqueCondition+=" AND $primaryKeyField=$primaryKeyValue";
                    result["operation"]="UPDATE";
                }
            }
            Map<String,dynamic> response;
            if(result["operation"].toString()=="INSERT"){
                response=await dbHandler!.insertRecords(table: table,values: values,userDefinedFunctions:userDefinedFunctions);
            }
            else{
                response=await dbHandler!.updateConditionedRecords(table: table,values: values,userDefinedFunctions:userDefinedFunctions,condition:uniqueCondition);
            }

            if(response.getString("status").equalsIgnoreCase("success")){
                result["status"]="success";
                if(result["operation"].toString()=="INSERT") {
                    result["message"] = "record inserted successfully";
                    primaryKeyValue=response["record_id"];
                }
                else{
                    result["message"] = "${response["records"]} record(s) updated successfully";
                    result["record_count"] =response["records"];
                }
                if(primaryKeyField!=""){
                    Map<String,dynamic> savedResponse=await fetchRecords(condition: "$primaryKeyField=$primaryKeyValue");
                    if(savedResponse["status"].toString()=="success"){
                        List savedRecords=savedResponse["records"];
                        if(savedRecords.isNotEmpty){
                            result["record"]=savedRecords.first;
                        }
                        else{
                            result["message"]="fetch count 0";
                        }
                    }
                    else{
                        result["message"]=savedResponse["message"];
                    }
                }
            }
            else{
                result["message"]=response["message"];
            }
        }
        else{
            result["message"]=validateStatus;
        }
    }
    catch(ex,stack){
        result["message"]=Simplify.getExceptionMessage(ex,stack: stack);
    }
    return result;
}