percentage at childs of mandatory programs implemented
This commit is contained in:
1 parent
7bf9b0d245
commit
c315f1feef
2 files changed
+51
-12
No files matched your search
@@ -101,7 +101,7 @@
|
||||
{
|
||||
"type": "User Mentor",
|
||||
"name": "Julian-Molina",
|
||||
"config": "{}",
|
||||
"config": "{\n \"percentage\": 90\n}",
|
||||
"project": "Governance",
|
||||
"id": "97483d0f-35ec-4471-a981-0d22565e0d63",
|
||||
"savedPayload": {
|
||||
|
||||
@@ -45,7 +45,7 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
if (userProfile.tokenPowerSwitch[programPropertyName] === undefined) { continue }
|
||||
if (userProfile.tokenPowerSwitch[programPropertyName].payload === undefined) { continue }
|
||||
|
||||
reserProgram(userProfile.tokenPowerSwitch[programPropertyName])
|
||||
resetProgram(userProfile.tokenPowerSwitch[programPropertyName])
|
||||
}
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
@@ -77,7 +77,7 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
calculateProgram(userProfile.tokenPowerSwitch[programPropertyName])
|
||||
}
|
||||
|
||||
function reserProgram(node) {
|
||||
function resetProgram(node) {
|
||||
if (node === undefined) { return }
|
||||
if (node.payload === undefined) { return }
|
||||
node.payload[programPropertyName] = {
|
||||
@@ -95,14 +95,14 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
node.type === 'User Profile' &&
|
||||
node.tokenPowerSwitch !== undefined
|
||||
) {
|
||||
reserProgram(node.tokenPowerSwitch)
|
||||
resetProgram(node.tokenPowerSwitch)
|
||||
return
|
||||
}
|
||||
if (
|
||||
node.type === 'Token Power Switch' &&
|
||||
node[programPropertyName] !== undefined
|
||||
) {
|
||||
reserProgram(node[programPropertyName])
|
||||
resetProgram(node[programPropertyName])
|
||||
return
|
||||
}
|
||||
if (
|
||||
@@ -110,7 +110,7 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
node[usersArrayPropertyName] !== undefined
|
||||
) {
|
||||
for (let i = 0; i < node[usersArrayPropertyName].length; i++) {
|
||||
reserProgram(node[usersArrayPropertyName][i])
|
||||
resetProgram(node[usersArrayPropertyName][i])
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -118,7 +118,7 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
node.type === userNodeType &&
|
||||
node.payload.referenceParent !== undefined
|
||||
) {
|
||||
reserProgram(node.payload.referenceParent)
|
||||
resetProgram(node.payload.referenceParent)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -183,7 +183,8 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
function distributeProgramPower(
|
||||
node,
|
||||
mentoshipPower,
|
||||
count
|
||||
count,
|
||||
percentage
|
||||
) {
|
||||
if (node === undefined) { return }
|
||||
if (node.payload === undefined) { return }
|
||||
@@ -223,16 +224,49 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
accumulatedIncomingProgramPower = accumulatedIncomingProgramPower + node.payload[programPropertyName].incomingPower
|
||||
|
||||
if (node[usersArrayPropertyName] !== undefined) {
|
||||
/*
|
||||
Before distributing the program power, we will calculate how the power
|
||||
is going to be switched between all nodes. The first pass is about
|
||||
scanning all sibling nodes to see which ones have a percentage defined
|
||||
at their config, and check that all percentages don't add more than 100.
|
||||
*/
|
||||
let totalPercentage = 0
|
||||
let totalNodesWithoutPercentage = 0
|
||||
for (let i = 0; i < node[usersArrayPropertyName].length; i++) {
|
||||
distributeProgramPower(node[usersArrayPropertyName][i], mentoshipPower / node[usersArrayPropertyName].length, 0)
|
||||
let childNode = node[usersArrayPropertyName][i]
|
||||
let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage')
|
||||
if (percentage !== undefined && isNaN(percentage) !== true) {
|
||||
totalPercentage = totalPercentage + percentage
|
||||
} else {
|
||||
totalNodesWithoutPercentage++
|
||||
}
|
||||
}
|
||||
if (totalPercentage > 100) {
|
||||
node.payload.uiObject.setErrorMessage('Program Power Switching Error. Total Percentage of children nodes is grater that 100.')
|
||||
return
|
||||
}
|
||||
let defaultPercentage = 0
|
||||
if (totalNodesWithoutPercentage > 0) {
|
||||
defaultPercentage = (100 - totalPercentage) / totalNodesWithoutPercentage
|
||||
}
|
||||
/*
|
||||
Here we do the actual distribution.
|
||||
*/
|
||||
for (let i = 0; i < node[usersArrayPropertyName].length; i++) {
|
||||
let childNode = node[usersArrayPropertyName][i]
|
||||
let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage')
|
||||
if (percentage === undefined || isNaN(percentage) === true) {
|
||||
percentage = defaultPercentage
|
||||
}
|
||||
distributeProgramPower(childNode, mentoshipPower * percentage / 100, 0, percentage)
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
case userNodeType: {
|
||||
node.payload[programPropertyName].outgoingPower = node.payload.parentNode.payload[programPropertyName].outgoingPower / node.payload.parentNode[usersArrayPropertyName].length
|
||||
node.payload[programPropertyName].outgoingPower = node.payload.parentNode.payload[programPropertyName].outgoingPower * percentage / 100
|
||||
|
||||
drawUserNode(node)
|
||||
drawUserNode(node, percentage)
|
||||
if (node.payload.referenceParent !== undefined) {
|
||||
distributeProgramPower(node.payload.referenceParent, mentoshipPower / 10, 0)
|
||||
}
|
||||
@@ -279,7 +313,7 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
drawProgram(programNode)
|
||||
}
|
||||
|
||||
function drawUserNode(node) {
|
||||
function drawUserNode(node, percentage) {
|
||||
if (node.payload !== undefined) {
|
||||
|
||||
const outgoingPowerText = new Intl.NumberFormat().format(node.payload[programPropertyName].outgoingPower)
|
||||
@@ -289,6 +323,11 @@ function newFoundationsUtilitiesMandatoryProgram() {
|
||||
|
||||
node.payload.uiObject.setValue(outgoingPowerText + ' ' + programPowerName)
|
||||
|
||||
node.payload.uiObject.percentageAngleOffset = 180
|
||||
node.payload.uiObject.percentageAtAngle = true
|
||||
|
||||
node.payload.uiObject.setPercentage(percentage)
|
||||
|
||||
node.payload.uiObject.statusAngleOffset = 0
|
||||
node.payload.uiObject.statusAtAngle = false
|
||||
|
||||
|
||||
Reference in new issue
Block a user