-
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. In order to clarify how updates are handled by Shotgun when there are multiple fields provided, we're showing you how Shotgun thinks in the bullet points below:
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': '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
)
-
Set 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, then ignoreduration
(duration
can often be wrong since it's easy to calculate scheduling incorrectly). -
If both
start_date
anddue_date
are provided, setstart_date
beforedue_date
. -
Set
milestone
before other schedule fields (becausestart_date
,due_date
, and duration get lost ifmilestone
is not set to false first) -
If
milestone
is being set toTrue
, ignoreduration
-
If
milestone
is set toTrue
andstart_date
anddue_date
are also being set to conflicting values, raise an Exception. -
If
due_date
andduration
are set together (withoutstart_date
), setdue_date
afterduration
(otherwise settingduration
will changedue_date
after it is set).