/*
 * This file contains a project skeleton. It is part of the
 * TaskJuggler project management tool. You can use this as a basis to
 * start your own project file.
 */
project your_project_id "Your Project Title"  2011-11-11-0:00--0500 +4m {
  # Set the default time zone for the project. If not specified, UTC
  # is used.
  timezone "America/New_York"
  # Hide the clock time. Only show the date.
  timeformat "%Y-%m-%d"
  # Use US format for numbers
  numberformat "-" "" "," "." 1
  # Use US financial format for currency values. Don't show cents.
  currencyformat "(" ")" "," "." 0
  # Pick a day during the project that will be reported as 'today' in
  # the project reports. If not specified, the current day will be
  # used, but this will likely be outside of the project range, so it
  # can't be seen in the reports.
  now 2011-12-24
  # The currency for all money values is the Euro.
  currency "USD"

  # You can define multiple scenarios here if you need them.
  #scenario plan "Plan" {
  #  scenario actual "Actual"
  #}

  # You can define your own attributes for tasks and resources. This
  # is handy to capture additional information about the project that
  # is not directly impacting the project schedule, but which you like to
  # keep in one place.
  #extend task {
  #  reference spec "Link to Wiki page"
  #}
  #extend resource {
  #  text Phone "Phone"
  #}
}

copyright "Claim your rights here"

# If you have any text block that you need multiple times to describe
# your project, you should define a macro for it. Macros can even have
# variable segments that you can set upon calling the macro.
#
# macro Task [
#   task "A ${1} task" {
#   }
# ]
#
# Can be called as
# ${Task "big"}
# to generate
# task "A big task" {
# }

# You can attach flags to accounts, resources and tasks. These can be
# used to filter out subsets of them during reporting.
flags important, hidden

# If you want to do budget planning for your project, you need to
# define some accounts.
account cost "Project Cost" {
  account dev "Development"
  account doc "Documentation"
}
account rev "Customer Payments"

# The Profit & Loss analysis should be rev - cost accounts.
balance cost rev

# Define your public holidays here.
vacation "New Year's Day" 2012-01-02
vacation "Birthday of Martin Luther King, Jr." 2012-01-16
vacation "Washington's Birthday" 2012-02-20
vacation "Memorial Day" 2012-05-28
vacation "Independence Day" 2012-07-04
vacation "Labor Day" 2012-09-03
vacation "Columbus Day" 2012-10-08
vacation "Veterans Day" 2012-11-12
vacation "Thanksgiving Day" 2012-11-22
vacation "Christmas Day" 2012-12-25

# The daily default rate of all resources. This can be overridden for each
# resource. We specify this so we can do a good calculation of
# the costs of the project.
rate 400.0

# This is a set of example resources.
resource r1 "Resource 1"
resource t1 "Team 1" {
  managers r1
  resource r2 "Resource 2"
  resource r3 "Resource 3"
}

# This is a resource that does not do any work.
resource s1 "System 1" {
  efficiency 0.0
  rate 600.0
}

task project "Project" {
  task wp1 "Workpackage 1" {
    task t1 "Task 1"
    task t2 "Task 2"
  }
  task wp2 "Work package 2" {
    depends !wp1
    task t1 "Task 1"
    task t2 "Task 2"
  }
  task deliveries "Deliveries" {
    task "Item 1" {
      depends !!wp1
    }
    task "Item 2" {
      depends !!wp2
    }
  }
}

# Now the project has been specified completely. Stopping here would
# result in a valid TaskJuggler file that could be processed and
# scheduled. Here reports will be generated to visualize the
# results.

navigator navbar {
  hidereport 0
}

macro TaskTip [
  tooltip istask() -8<-
    '''Start: ''' <-query attribute='start'->
    '''End: ''' <-query attribute='end'->
    ----
    '''Resources:'''

    <-query attribute='resources'->
    ----
    '''Precursors: '''

    <-query attribute='precursors'->
    ----
    '''Followers: '''

    <-query attribute='followers'->
    ->8-
]

textreport frame "" {
  header -8<-
    == TaskJuggler Project Template ==
    <[navigator id="navbar"]>
  ->8-
  footer "----"
  textreport index "Overview" {
    formats html
    center '<[report id="overview"]>'
  }

  textreport "Status" {
    formats html
    center -8<-
      <[report id="status.dashboard"]>
      ----
      <[report id="status.completed"]>
      ----
      <[report id="status.ongoing"]>
      ----
      <[report id="status.future"]>
    ->8-
  }

  textreport wps "Work packages" {
    textreport wp1 "Work package 1" {
      formats html
      center '<[report id="wp1"]>'
    }

    textreport wp2 "Work package 2" {
      formats html
      center '<[report id="wp2"]>'
    }
  }

  textreport "Deliveries" {
    formats html
    center '<[report id="deliveries"]>'
  }

  textreport "ContactList" {
    formats html
    title "Contact List"
    center '<[report id="contactList"]>'
  }
  textreport "ResourceGraph" {
    formats html
    title "Resource Graph"
    center '<[report id="resourceGraph"]>'
  }
}

# A traditional Gantt chart with a project overview.
taskreport overview "" {
  header -8<-
    === Project Overview ===

    The project is structured into 2 work packages.

    # Specification
    # <-reportlink id='frame.wps.wp1'->
    # <-reportlink id='frame.wps.wp2'->
    # Testing

    === Original Project Plan ===
  ->8-
  columns bsi { title 'WBS' },
          name, start, end, effort, cost,
          revenue, chart { ${TaskTip} }
  # For this report we like to have the abbreviated weekday in front
  # of the date. %a is the tag for this.
  timeformat "%a %Y-%m-%d"
  loadunit days
  hideresource 1
  balance cost rev
  caption 'All effort values are in man days.'

  footer -8<-
    === Staffing ===

    All project phases are properly staffed. See [[ResourceGraph]] for
    detailed resource allocations.

    === Current Status ===

    Some blurb about the current situation.
  ->8-
}

# Macro to set the background color of a cell according to the alert
# level of the task.
macro AlertColor [
  cellcolor plan.alert = 0 "#90FF90" # green
  cellcolor plan.alert = 1 "#FFFF90" # yellow
  cellcolor plan.alert = 2 "#FF9090" # red
]

taskreport status "" {
  columns bsi { width 50 title 'WBS' }, name { width 150 },
          start { width 100 }, end { width 100 },
          effort { width 100 },
          alert { tooltip plan.journal
                          != '' "<-query attribute='journal'->" width 150 },
          status { width 150 }

  taskreport dashboard "" {
    headline "Project Dashboard (<-query attribute='now'->)"
    columns name { title "Task" ${AlertColor} width 200},
            resources { width 200 ${AlertColor}
                        listtype bullets
                        listitem "<-query attribute='name'->"
                        start ${projectstart} end ${projectend} },
            alerttrend { title "Trend" ${AlertColor} width 50 },
            journal { width 350 ${AlertColor} }
    journalmode status_up
    journalattributes headline, author, date, summary, details
    hidetask ~hasalert(0)
    sorttasks alert.down, plan.end.up
    period %{${now} - 1w} +1w
  }
  taskreport completed "" {
    headline "Already completed tasks"
    hidetask ~(plan.end <= ${now})
  }
  taskreport ongoing "" {
    headline "Ongoing tasks"
    hidetask ~((plan.start <= ${now}) & (plan.end > ${now}))
  }
  taskreport future "" {
    headline "Future tasks"
    hidetask ~(plan.start > ${now})
  }
}

# A list of tasks showing the resources assigned to each task.
taskreport wp1 "" {
  headline "Work package 1 - Resource Allocation Report"
  columns bsi { title 'WBS' }, name, start, end, effort { title "Work" },
          duration, chart { ${TaskTip} scale day width 500 }
  timeformat "%Y-%m-%d"
  hideresource ~(isleaf() & isleaf_())
  sortresources name.up
  taskroot project.wp1
}
# A list of tasks showing the resources assigned to each task.
taskreport wp2 "" {
  headline "Work package 2 - Resource Allocation Report"
  columns bsi { title 'WBS' }, name, start, end, effort { title "Work" },
          duration, chart { ${TaskTip} scale day width 500 }
  timeformat "%Y-%m-%d"
  hideresource ~(isleaf() & isleaf_())
  sortresources name.up
  taskroot project.wp2
}

# A list of all tasks with the percentage completed for each task
taskreport deliveries "" {
  headline "Project Deliverables"
  columns bsi { title 'WBS' }, name, start, end, note { width 150 }, complete,
          chart { ${TaskTip} }
  taskroot project.deliveries
  hideresource 1
}
# A list of all employees with their contact details.
resourcereport contactList "" {
  headline "Contact list and duty plan"
  columns name,
          email { celltext 1 "[mailto:<-email-> <-email->]" },
          managers { title "Manager" },
          chart { scale day }
  hideresource ~isleaf()
  sortresources name.up
  hidetask 1
}

# A graph showing resource allocation. It identifies whether each
# resource is under- or over-allocated for.
resourcereport resourceGraph "" {
  headline "Resource Allocation Graph"
  columns no, name, effort, rate, weekly { ${TaskTip} }
  loadunit shortauto
  # We only like to show leaf tasks for leaf resources.
  hidetask ~(isleaf() & isleaf_())
  sorttasks plan.start.up
}

