-
Notifications
You must be signed in to change notification settings - Fork 0
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_dateautomatically updates thedue_date(durationremains constant) -
Updating the
due_dateautomatically updates theduration(start_dateremains constant) -
Updating the
durationautomatically updates thedue_date(start_dateremains 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_dateanddue_dateare both set,durationis ignored (durationcan often be wrong since it's easy to calculate scheduling incorrectly). -
If both
start_dateanddue_dateare provided, Shotgun setsstart_datebeforedue_date. -
Set
milestonebefore other schedule fields (becausestart_date,due_date, anddurationget lost ifmilestoneis not set toFalsefirst) -
If
milestoneis being set toTrue,durationis ignored. -
If
milestoneis set toTrueandstart_dateanddue_dateare also being set to conflicting values, an Exception is raised. -
If
due_dateanddurationare set together (withoutstart_date),durationis set first, thendue_date(otherwise settingdurationwill changedue_dateafter 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)