diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js index 97abbd14640708a9dd1004bded626fbd89c6a7d5..7c575abe671e6435262aa761d4723c350accdbba 100644 --- a/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js +++ b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js @@ -6,5 +6,5 @@ import("Classification_lib"); if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) result.string(util.getNewUUID()); -else if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$this.value")) - result.string($ClassificationPlaceholder.TOPSECRETPLACEHOLDER()); \ No newline at end of file +else if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$this.value")) // this means we are editing one of the classificationgroups + result.string($ClassificationPlaceholder.TOPSECRETPLACEHOLDER()); //this placeholder is set for the onUpdateProcess further explanation in there \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js index b5eae575a499261c58669f1e479afebed20e73e4..43a6304543f7b01dab728e1774e8d6f9e06980e0 100644 --- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js +++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js @@ -1,12 +1,12 @@ +import("Classification_lib"); +import("Sql_lib"); +import("system.db"); +import("system.eMath"); import("system.entities"); -import("system.util"); -import("system.text"); import("system.neon"); -import("system.db"); -import("Sql_lib"); +import("system.text"); +import("system.util"); import("system.vars"); -import("Classification_lib"); -import("system.eMath"); try { @@ -45,11 +45,12 @@ function _update() var i; var isGroupDataSet = false; - if(rowdata["CLASSIFICATIONTYPEID.value"] == $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) +// the classificationtypeId.value has the placeholder set when editing a classificationgroup dataset to allow us +// to handle the updating differently depending on whether its an classifcation group dataset or an classification type dataset +// since you want changes to the name of groups to effect only the group name and changes to the group of an classificationtype to change it's group + if(rowdata["CLASSIFICATIONTYPEID.value"] == $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) isGroupDataSet = true; - - vars.get("$local.changed").forEach(function (field, i) { var dbField = dbFields[field]; @@ -63,14 +64,14 @@ function _update() if(!isGroupDataSet) //-> update the classification type dataset { - var groupIds = ClassificationUtils.getAllGroups(vars.get("$field.OBJECT_TYPE")); + var groupIds = ClassificationUtils.getAllGroups(vars.get("$field.OBJECT_TYPE")); //gets all existing groups of the object_type var newGroupId; var newGroupName; var insertGroup = false; var groupchange = true; var newId; for (i = 0; i < columns.length; i++) { - if(columns[i] == "CLASSIFICATIONGROUP_ID") + if(columns[i] == "CLASSIFICATIONGROUP_ID")//if the classificationgroup_Id changed: determine whether or not a new group has to be inserted { if(!groupIds.toString().includes(values[i])) { @@ -101,23 +102,27 @@ function _update() } } - if(groupchange == true) { var gradeColumn, gradeTable, multiplicand, update, gradingTable; var oldGroup = ClassificationUtils.getClassificationGroup(text.decodeMS(uid)[1]); var newMax = ClassificationUtils.getMaxScoreExcludeType(oldGroup, text.decodeMS(uid)[1]); gradingTable = ClassificationUtils.getGradingTableByGroupId(oldGroup); - var lostScore = parseInt(newSelect("max(SCORE)").from("CLASSIFICATIONSCORE").where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", text.decodeMS(uid)[1]).cell()); - if(insertGroup) + + var lostScore = parseInt(newSelect("max(SCORE)") + .from("CLASSIFICATIONSCORE") + .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", text.decodeMS(uid)[1]) + .cell()); //the greatest score of the "moved" classificationtype affects the classificationGradings + + if(insertGroup) //new group has to be inserted { var maxSorting = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING") .from("CLASSIFICATIONGROUP") .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") .where("CLASSIFICATIONTYPE.OBJECT_TYPE", vars.get("$field.OBJECT_TYPE")) .orderBy("CLASSIFICATIONGROUP.SORTING desc") - .table()[0][1]; - db.insertData("CLASSIFICATIONGROUP", ["CLASSIFICATIONGROUPID", "TITLE", "SORTING"], null, [newGroupId, newGroupName, eMath.addInt(maxSorting, 1)]) //insert the new group + .table()[0][1]; //gets the greatest sorting value of the object_type + db.insertData("CLASSIFICATIONGROUP", ["CLASSIFICATIONGROUPID", "TITLE", "SORTING"], null, [newGroupId, newGroupName, eMath.addInt(maxSorting, 1)]) //insert the new group (sorting is greater than the greatest one var gradingColumns = [ "CLASSIFICATIONGRADINGID", @@ -133,13 +138,13 @@ function _update() newGroupId ]; - db.insertData("CLASSIFICATIONGRADING", gradingColumns, null, gradingValues); // insert a "dummy" classificationGradingValue + db.insertData("CLASSIFICATIONGRADING", gradingColumns, null, gradingValues); // insert a "dummy" classificationGradingValue, since not having one results in problems } - else + else // classificationtype has to be moved to another classificatingroup { - newId = vars.get("$field.CLASSIFICATIONGROUP"); - newGradingTable = ClassificationUtils.getGradingTableByGroupId(newId); - newNewMax = eMath.addInt(newMax, lostScore) + newId = vars.get("$field.CLASSIFICATIONGROUP"); //we know that the field has the classificationgroupId of the new group set + newGradingTable = ClassificationUtils.getGradingTableByGroupId(newId); //we use this id to get the gradingtable of the new group + newNewMax = eMath.addInt(newGradingTable[0][1], lostScore) //maxvalue of the gradingtable with the added lostScore = the new maxValue if(newGradingTable[0][1] != newNewMax) //update existing classificationGrading if the maxValue has changed { gradeColumn = ["MAXGRADEFORSCORE"]; @@ -173,7 +178,6 @@ function _update() } } - cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = '" + text.decodeMS(uid)[1] + "'"); columns.push("SCORETYPE"); values.push(vars.get("$field.CLASSIFICATIONTYPEIDDISPLAYVALUE"));