400 | | To maximize the flexibility in mixing and matching plugins to provide features for project management, I propose to leverage Trac's [http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture Component Architecture] to specify a number of interfaces in a `tracpm` namespace. In this way a Gantt chart, a workload chart, a task scheduler, etc. can all use the `tracpm` interfaces regardless of whether, for example, Subtickets of Childtickets (or even ticket decomposition in a future Trac core) are used to represent parent/child relationships. |
| 400 | To maximize the flexibility in mixing and matching plugins to provide features for project management, I propose to leverage Trac's [http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture Component Architecture] to specify a number of interfaces in a `tracpm` namespace. In this way a Gantt chart, a workload chart, a task scheduler, etc. can all use the `tracpm` interfaces regardless of whether, for example, Subtickets or Childtickets (or even ticket decomposition in a future Trac core) are used to represent parent/child relationships. |
438 | | startFromFinish(task,finish):: return the date on which ''task'' must begin to complete by ''finish''. If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''. |
439 | | |
440 | | startFromFinish(task,finish,resource):: return the date on which ''task'' must begin for ''resource'' to complete it by ''finish''. If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''. May account for ''resource's'' vacation, etc. in addition to the general work calendar. |
441 | | |
442 | | finishFromStart(task,start):: return the date on which ''task'' will complete if started on ''start''. If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''. |
443 | | |
444 | | finishFromStart(task,start,resource):: return the date on which ''task'' will complete if ''resource'' started it on ''start''. If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''. May account for ''resource's'' vacation, etc. in addition to the general work calendar. |
445 | | |
446 | | '''NOTE that the functions above likely need to be passed a percentEffort.''' |
447 | | |
| 438 | '''Used to have `startFromFinish()` and `finishFromState()` here but those are likely scheduler functions. I think what we need here is `hoursAvailable(resource, date)` which a scheduler can call on each date and subtract the result from the work it is trying to schedule.''' |
461 | | * If using As Soon As Possible, tasks without precedessors should be done done today (or the start of the project, if that's later), and their successors when they are done, etc. |
462 | | * If using As Late As Possible, tasks without successors should be done at the end of the project and their predecessors done right before they must start, etc. |
| 452 | * If using ''As Soon As Possible'', tasks without predecessors should be done done today (or the start of the project, if that's later), and their successors when they are done, etc. |
| 453 | * If using ''As Late As Possible'', tasks without successors should be done at the end of the project and their predecessors done right before they must start, etc. |
466 | | * It is an error for a task to have an assignedStart ''and'' an assignedFinish. |
467 | | * If a task has an assignedStart, the computedStart is the assignedStart and the computedFinish is the computedStart plus the duration. |
468 | | * If a task has an assignedFinish, the computedFinish is the assignedFinish and the computedStared is the computedFinish minus the duration. |
469 | | |
470 | | NOTE: Once a task is begun, its assignedStart is set from the computedStart so recomputing a schedule doesn't change its start. We may have to deal with split tasks, however, if a task is begun then put down and resumed later. |
471 | | |
472 | | * Handle dependencies (This must be done iteratively for all of a task's dependencies. Several FS dependencies may produce different computedStart dates with the latest one being use. Interaction between other types of dependencies is complex.) |
473 | | * If a task has an FS dependency on another task, its computedStart is the other task's computedFinish plus lag. The task's computedFinish is computedStart plus duration. |
474 | | * If a task has an SS dependency on another task, its computedStart is the other task's computedStart plus lag. The task's computedFinish is computedStart plus duration. |
475 | | * If a task has an FF dependency on another task, its computedFinish is the other task's computedFinish plus lag. The task's computedStart is the computedFinish minus duration. |
476 | | * If a task has an SF dependency on another task, its computedFinish is the other task's computedStart plus lag. The task's computedStart is the computedFinish minus duration. |
| 457 | * It is an error for a task to have an ''assignedStart'' ''and'' an ''assignedFinish''. |
| 458 | * If a task has an ''assignedStart'', the ''computedStart'' is the ''assignedStart'' and the ''computedFinish'' is the ''computedStart'' plus the duration. |
| 459 | * If a task has an ''assignedFinish'', the ''computedFinish'' is the ''assignedFinish'' and the ''computedStared'' is the ''computedFinish'' minus the duration. |
| 460 | |
| 461 | NOTE: Once a task is begun, its ''assignedStart'' is set from the ''computedStart'' so recomputing a schedule doesn't change its start. We may have to deal with split tasks, however, if a task is begun then put down and resumed later. |
| 462 | |
| 463 | * Handle dependencies (This must be done iteratively for all of a task's dependencies. Several FS dependencies may produce different ''computedStart'' dates with the latest one being use. Interaction between other types of dependencies is complex.) |
| 464 | * If a task has an FS dependency on another task, its ''computedStart'' is the other task's ''computedFinish'' plus lag. The task's ''computedFinish'' is ''computedStart'' plus duration. |
| 465 | * If a task has an SS dependency on another task, its ''computedStart'' is the other task's ''computedStart'' plus lag. The task's ''computedFinish'' is computedStart plus duration. |
| 466 | * If a task has an FF dependency on another task, its ''computedFinish'' is the other task's ''computedFinish'' plus lag. The task's ''computedStart'' is the ''computedFinish'' minus duration. |
| 467 | * If a task has an SF dependency on another task, its ''computedFinish'' is the other task's ''computedStart'' plus lag. The task's ''computedStart'' is the ''computedFinish'' minus duration. |