Calculate Planned End Date based on Initial Estimate or Effort
Calculate Planned End Date based on Initial Estimate and Planned Start Date
The rule converts Initial Estimate to working days (weekends are not included)
[
{
"type": "source:targetprocess:EntityChanged",
"entityTypes": [
"feature",
"epic"
],
"modifications": {
"created": true,
"deleted": false,
"updated": [
"InitialEstimate",
"PlannedStartDate"
]
}
},
{
"type": "filter:Relational",
"or": [
{
"and": [
{
"target": {
"type": "field",
"name": "InitialEstimate",
"target": {
"type": "pipelineBlockOutput"
}
},
"value": {
"type": "constant",
"value": 0
},
"operator": {
"type": ">"
}
},
{
"target": {
"type": "field",
"name": "PlannedStartDate",
"target": {
"type": "pipelineBlockOutput"
}
},
"value": null,
"operator": {
"type": "exists"
}
}
]
}
]
},
{
"type": "action:JavaScript",
"script": "//8 ideal hours or points -> 1 wokring day\nlet daysToAdd = args.Current.InitialEstimate / 8;\n\nvar date = new Date(args.Current.PlannedStartDate);\n\nconst dow = date.getDay();\nif (dow === 0) { daysToAdd++; }\n\n// If the start date plus the additional days falls on or after the closest Saturday calculate weekends\nif (dow + daysToAdd >= 6) {\n //Subtract days in current working week from work days\n var remainingWorkDays = daysToAdd - (5 - dow);\n //Add current working week's weekend\n daysToAdd += 2;\n if (remainingWorkDays > 5) {\n //Add two days for each working week by calculating how many weeks are included\n daysToAdd += 2 * Math.floor(remainingWorkDays / 5);\n //Exclude final weekend if remainingWorkDays resolves to an exact number of weeks\n if (remainingWorkDays % 5 === 0)\n daysToAdd -= 2;\n }\n}\n\ndate.setDate(date.getDate() + daysToAdd);\n\nreturn {\n command: \"targetprocess:UpdateResource\",\n payload: {\n resourceType: args.ResourceType,\n resourceId: args.ResourceId,\n fields:\n {\n PlannedEndDate: date\n }\n }\n};"
}
]
Calculate Planned End Date based on Effort and Planned Start Date
The rule converts Effort to working days (weekends are not included)
[
{
"type": "source:targetprocess:EntityChanged",
"entityTypes": [
"userstory"
],
"modifications": {
"created": true,
"deleted": false,
"updated": [
"PlannedStartDate",
"Effort"
]
}
},
{
"type": "filter:Relational",
"or": [
{
"and": [
{
"target": {
"type": "field",
"name": "Effort",
"target": {
"type": "pipelineBlockOutput"
}
},
"value": {
"type": "constant",
"value": 0
},
"operator": {
"type": ">"
}
},
{
"target": {
"type": "field",
"name": "PlannedStartDate",
"target": {
"type": "pipelineBlockOutput"
}
},
"value": null,
"operator": {
"type": "exists"
}
}
]
}
]
},
{
"type": "action:JavaScript",
"script": "//8 ideal hours or points -> 1 wokring day\nlet daysToAdd = args.Current.Effort / 8;\n\nvar date = new Date(args.Current.PlannedStartDate);\n\nconst dow = date.getDay();\nif (dow === 0) { daysToAdd++; }\n\n// If the start date plus the additional days falls on or after the closest Saturday calculate weekends\nif (dow + daysToAdd >= 6) {\n //Subtract days in current working week from work days\n var remainingWorkDays = daysToAdd - (5 - dow);\n //Add current working week's weekend\n daysToAdd += 2;\n if (remainingWorkDays > 5) {\n //Add two days for each working week by calculating how many weeks are included\n daysToAdd += 2 * Math.floor(remainingWorkDays / 5);\n //Exclude final weekend if remainingWorkDays resolves to an exact number of weeks\n if (remainingWorkDays % 5 === 0)\n daysToAdd -= 2;\n }\n}\n\ndate.setDate(date.getDate() + daysToAdd);\n\nreturn {\n command: \"targetprocess:UpdateResource\",\n payload: {\n resourceType: args.ResourceType,\n resourceId: args.ResourceId,\n fields:\n {\n PlannedEndDate: date\n }\n }\n};"
}
]
Updated over 5 years ago