-
Notifications
You must be signed in to change notification settings - Fork 204
Updating Task Dates: How Shotgun Thinks
When updating Task dates in an API update() request, there is no specified order to the values that are passed in. Shotgun also does automatic calculation of the start_date
, due_date
, and duration
fields for convenience. In order to clarify how updates are handled by Shotgun we are providing some general rules below and examples of what will happen when you make updates to your Tasks.
-
Updating the
start_date
automatically updates thedue_date
(duration
remains constant) -
Updating the
due_date
automatically updates theduration
(start_date
remains constant) -
Updating the
duration
automatically updates thedue_date
(start_date
remains constant) -
When updating Task values, Shotgun sets schedule fields (
milestone
,duration
,start_date
,due_date
) after all other fields, because the Project and Task Assignees affect schedule calculations. -
If
start_date
anddue_date
are both set,duration
is ignored (duration
can often be wrong since it's easy to calculate scheduling incorrectly). -
If both
start_date
anddue_date
are provided, Shotgun setsstart_date
beforedue_date
. -
Set
milestone
before other schedule fields (becausestart_date
,due_date
, andduration
get lost ifmilestone
is not set toFalse
first) -
If
milestone
is being set toTrue
,duration
is ignored. -
If
milestone
is set toTrue
andstart_date
anddue_date
are also being set to conflicting values, an Exception is raised. -
If
due_date
andduration
are set together (withoutstart_date
),duration
is set first, thendue_date
(otherwise settingduration
will changedue_date
after it is set).
The following examples show what the resulting Task object will look like after being run on the initial Task object listed under the header of each section.
Regardless of current values on the Task, this behavior rules
Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
duration
is ignored if also provided. It is instead set automatically as (due_date
- start_date
)
sg.update ('Task', 123, {'start_date':'2011-05-25', 'due_date':'2011-05-30', 'duration':1200})
# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
start_date
is updated.
due_date
is updated.
duration
is calculated as (due_date
- start_date
) **note the value provided in the update() is ignored. (and in this case was also incorrect).
sg.update ('Task', 123, {'start_date':'2011-05-25', 'duration':3600})
# Task = {'start_date': '2011-05-25', 'due_date': '2011-06-01', 'duration': 3600, 'id':123}
start_date
is updated.
duration
is updated.
due_date
is updated to (start_date
+ duration
).
sg.update ('Task', 123, {'due_date': '2011-05-20', 'duration':3600})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-20', 'duration': 600, 'id':123}
duration
is updated.
due_date
is updated.
duration
is calculated as (due_date
- start_date
) note that this means the duration
provided is overwritten and thus ignored.
Task = {'start_date': '2011-05-20', 'due_date': None, 'duration': None, 'id':123}
sg.update ('Task', 123, {'start_date':'2011-05-25'})
# Task = {'start_date': '2011-05-25', 'due_date': None, 'duration': None, 'id':123}
Only start_date
is updated.
sg.update ('Task', 123, {'due_date':'2011-05-25'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
due_date
is updated.
duration
is updated to (due_date
- start_date
).
sg.update ('Task', 123, {'duration':2400})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
duration
is updated.
due_date
is set to (start_date
+ duration
)
# Task = {'start_date': None, 'due_date': '2011-05-25', 'duration': None, 'id':123}
sg.update ('Task', 123, {'start_date':'2011-05-20'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
start_date
is updated.
duration
is updated to (due_date
- start_date
).
sg.update ('Task', 123, {'due_date':'2011-05-20'})
# Task = {'start_date': None, 'due_date': '2011-05-20', 'duration': None, 'id':123}
only due_date
is updated.
sg.update ('Task', 123, {'duration':2400})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
duration
is updated.
start_date
is set to (due_date
- duration
)
# Task = {'start_date': None, 'due_date': None, 'duration': 2400, 'id':123}
sg.update ('Task', 123, {'start_date':'2011-05-20'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
start_date
is updated.
due_date
is updated to (start_date
+ duration
).
sg.update ('Task', 123, {'due_date':'2011-05-25'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
due_date
is updated.
start_date
is updated to (due_date
- duration
)
sg.update ('Task', 123, {'duration':3600})
# Task = {'start_date': None, 'due_date': None, 'duration': 3600, 'id':123}
only duration
is updated.
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': None, 'id':123}
sg.update ('Task', 123, {'start_date':'2011-05-25'})
# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-25', 'duration': 600, 'id':123}
start_date
is updated.
duration
is updated to (due_date
- start_date
).
sg.update ('Task', 123, {'due_date':'2011-05-30'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 4200, 'id':123}
due_date
is updated.
duration
is updated to (due_date
- start_date
)
sg.update ('Task', 123, {'duration':3600})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-27', 'duration': 3600, 'id':123}
duration
is updated.
due_date
is updated to (start_date
+ duration
)
# Task = {'start_date': '2011-05-20', 'due_date': None, 'duration': 2400, 'id':123}
sg.update ('Task', 123, {'start_date':'2011-05-25'})
# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
start_date
is updated.
due_date
is updated to (start_date
+ duration
).
sg.update ('Task', 123, {'due_date':'2011-05-30'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 4200, 'id':123}
due_date
is updated.
duration
is updated to (due_date
- start_date
).
sg.update ('Task', 123, {'duration':3600})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-27', 'duration': 3600, 'id':123}
duration
is updated.
due_date
is updated to (start_date
+ duration
)
# Task = {'start_date': None, 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
sg.update ('Task', 123, {'start_date':'2011-05-25'})
# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
start_date
is updated.
due_date
is updated to (start_date
+ duration
).
sg.update ('Task', 123, {'due_date':'2011-05-30'})
# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
due_date
is updated.
start_date
is updated to (due_date
- duration
).
sg.update ('Task', 123, {'duration':3600})
# Task = {'start_date': '2011-05-18', 'due_date': '2011-05-25', 'duration': 3600, 'id':123}
duration
is updated.
start_date
is updated to (due_date
- duration
)
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
sg.update ('Task', 123, {'start_date':'2011-05-25'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
start_date
is updated.
due_date
is updated to (start_date
+ duration
).
sg.update ('Task', 123, {'due_date':'2011-05-30'})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 4200, 'id':123}
due_date
is updated.
duration
is updated to (due_date
- start_date
)
sg.update ('Task', 123, {'duration':3600})
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-27', 'duration': 3600, 'id':123}
duration
is updated.
due_date
is updated to (start_date
+ duration
)