Skip to content

Updating Task Dates: How Shotgun Thinks

kporangehat edited this page May 20, 2011 · 9 revisions

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 has start_date only

Task = {'start_date': '2011-05-20', 'due_date': None, 'duration': None, 'id':123}

Update start_date

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.

Update due_date

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).

Update duration

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 has due_date only

# Task = {'start_date': None, 'due_date': '2011-05-25', 'duration': None, 'id':123}

Update start_date

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).

Update due_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.

Update duration

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 has duration only

# Task = {'start_date': None, 'due_date': None, 'duration': 2400, 'id':123}

Update start_date

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).

Update due_date

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)

Update duration

sg.update ('Task', 123, {'duration':3600})
# Task = {'start_date': None, 'due_date': None, 'duration': 3600, 'id':123}

only duration is updated.

Task has start_date and due_date (no duration)

# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': None, 'id':123}

Update start_date

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).

Update due_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)

Update duration

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 has start_date, due_date, and duration

# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}

Update start_date

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).

Update due_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)

Update duration

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 and due_date are both set, then ignore duration (duration can often be wrong since it's easy to calculate scheduling incorrectly).

  • If both start_date and due_date are provided, set start_date before due_date.

  • Set milestone before other schedule fields (because start_date, due_date, and duration get lost if milestone is not set to false first)

  • If milestone is being set to True, ignore duration

  • If milestone is set to True and start_date and due_date are also being set to conflicting values, raise an Exception.

  • If due_date and duration are set together (without start_date), set due_date after duration (otherwise setting duration will change due_date after it is set).

Clone this wiki locally