Intro

This is a description of a to be developed web-project.  It will be used in the development of our webdev framework as a practical development case. The goal is to get a real life completed list of development use cases, as well as to get some way to assess the accuracy of the porposed solutions.

Scope and Domain

This project will produce a browser based interactive system to manage offers on projects for customers (and their contacts) that consist of tasks, subtasks on which workers will register performances.

Tupper by the way is the word-spoken version of the initial acronym "TPR - Time Planning and Registration" for this project.

Glossary of terms

Disclaimer: This is more database/storage oriented then the average stakeholder will typically feed you with. Nevertheless it is not checked for validity in any way. At best it should only be read as a suggestion for organizing the storage layer.  The good news is: there is no back end system yet, it should be created as part of the project.

contact: someone or some company

describing properties:

  • name
  • #contact parameters (name-value pairs like gsm=+32-476-473633, email=john@example.com
  • an optional but uniquely identifying code (e.g. rbk, vlk, mpo, ..)
  • comment (any text)
  • optional group_contact_reference: pointing to the larger group (a contact by itself) this one is part/member of (check that no cycles are created)
  • colour-hexcode (auto-assigned if left blank)

notes:

  • for normalization and upfront data cleaning the available (already used) names of contact-parameters in use should be presented to the user, so no additional differently spelled variants of the same parameter-names get in use.

task: something that needs to happen

describing properties:

  • label
  • description
  • expected start and finish
  • estimated work duration (in hours or days?)
  • type of task (free-added list of already existing ones)
  • status
  • importance: for sorting task by opportunity, rather than by urgency
  • #subtasks (references to composing tasks)
  • seqnr (ordering this task amongst its siblings)
  • assigned_to_worker_ref (references the worker active on this task, if in practice there is more then one (via subtasks) then this holds the one 'responsible for closure and further time reporting)
  • covered_in_invoice_ref: for closed tasks this shows the invoice covering the involved work.

lifecycle

  • coded in the status code
    • open: initially created, to-do
    • assigned: to some worker
    • done: internal work is done
    • delivered: the done work has been passed on for acceptance to customer/contact
    • accepted: the done work has been accepted
    • denied: no longer needed, suddenly unuseful, or out of scope
  • possible transitions
                         /------------------------------------------------------>  denied
                        /            /     /     /               /            / 
                       /            /     |     /               /            /
                      /             |  busy     |               |            |
                      |             | ^    \    |               |            |
                      |             |/      v   |               |            |
       (init) ---> open ---> assigned -----> done  --> delivered --> accepted -->  closed (==invoiced)
                        ^          / ^                    /
                         \--------/   \------------------/
                          (ignore)         (reject)
  • Status change only on leafs. Start/finished/duration fields of parent tasks are calculated from subtasks.

task-dependency: a 'pre-requisite' relation between two tasks

special properties

  • prerequisite_task_ref
  • dependent_task_ref
  • blocking-since (date-time)

Note: a task-subtask relation is not considered as a dependency.

task-history: audit-trail of things that happened to a certain task

describing properties:

  • time-stamp
  • user_id
  • event (code for status-change, or other modification, e.g. value-before & value-after)
  • description

project: a set of tasks proposed to be delivered for a certain customer before some date, at some supposed cost

describing properties:

  • label
  • customer_ref: for who this project is
  • task_ref: pointer to the top level full-project task, composed of smaller ones
  • price
  • due-date
  • description: free text scope, need and other details like PO, fixed price or rate, agreed payment period...

invoice: a payment for accepted performance

  • project_ref: the related project
  • date
  • price
  • detail
  • payment_day

worker: person with (future) registered performances on tasks assigned

  • contact_ref
  • code
  • day_cost
  • hours_per_week
  • mugshot

performance: chunk of time spend on the completion of a task

  • task_ref: on which this time was spent
  • label
  • description
  • worker_ref: person doing the effort
  • from
  • till (optional: possibly left open for ongoing work)
  • duration
  • type_of_work
  • coverd_in_invoice_ref

Note:

  • The type code will double to accommodate for "off time" (holidays) as well. In that case some internal 'task' will be referenced.
  • For other values normalization effort will be taken

Use cases to cater for

  1. Time registration: for workers, entering performances
  2. To-Do list generation:  per task (project, or sub levels) - sorted to urgency and/or opportunity (value)
  3. List performances assigned to 'accepted' tasks and convert those into invoices.
  4. subsequent calculation
  5. (later) Invoice management and Payment-control

Features

  • Use of hcalender(microformats) en ical formats for the planning of tasks
  • Use geo coding (microformats) for locations (contact-param)
  • Envision cli clients for fast time-registration-entry (in console or alt-f2:  'tr-start xyz' 'tr-done abc')
  • Visualization of projects in Gantt-charts (including time-lines and critical paths)
  • Feeding or fed by Google Calendar for holidays?

Screens (wireframes)

a. timeregistration

   (user is logged in, folows link to time-registration)

   Overview per week: shows line with 8-16-20 time-alllocation-slots, empty or marked in colour that is associated to the customer/contact
   (popup to show legend of colours)

   wk |    Ma    |    Di    |    Wo    |    Do    |    Vr    |    Za    |    Zo    |
   ---+----------+----------+----------+----------+----------+----------+----------+
   33 | xxxxxxx- | xxxxxxxx | xxxxxxxx | xxxxxxxx | xxxxxxxx | -------- | -------- |
   34 | xxxxxxx- | xxxxxxxx | xxxxxxxx | xxxxxxxx | xxxxxxxx | -------- | -------- |
   35 | -------- | -------- | -------- | -------- | -------- | -------- | -------- |

Each cell can be selected, and leads to a selection below to show

   Detail voor  Ma 27-aug-2007    [save] | [reset]   
     van  | tot  | task_ref / extra description
    ------+------+--------------------------------------------------
     0830 | 1130 | [taskfinder] 37466 - het gras afrijden 
          |      | notes:  [                              
          |      |                   textarea                       ]
          |      | taak-status-verandering: [  selecteer status | V ]
          |      | links                    [  enter link svn/jira/ ] +
          |      |
    ------+------+--------------------------------------------------
     1130 | 1200 | 37467 - de vaat doen
    ------+------+--------------------------------------------------
     [new]                

b. TaskFinder - tree/hierarchy browsing widget to get down from customer to task

   + MyTasks (sorted desc due date)
       + task 4857
       + task 9903
   + All Tasks
       + contact 1
       + contact 2
       + contact 3
         + offer - task 6
         + offer - task 7
           + sub-task 45
           + sub-task 46

c. Planning & TaskManagement - Entry of subtasks (chuck-splitting) and assignment

   [task-finder in 2 possible modes:]
   ( ) hierarchy  [contact ] / [offer] / [task x] / > selected task shows subtasks
   ( ) search:    [keyword  ]                       > show text-matching tasks

   [tasks]
    due   | label /desc                      | assigned to | % completed / status 
   -------+----------------------------------+-------------+-------------
    02-09 | gras afrijden                    | (name drop) |   50%
     + (inline details) desc, registered performances, contact, 
       (when selected ) parent-task, (blocking) dependent tasks
   -------+----------------------------------+-------------+-------------
    03-09 | gras bemesten                    |  Jan        |    0%
   -------+----------------------------------+-------------+-------------
    05-09 | wieden                           |  Joris      |   30%
   -------+----------------------------------+-------------+-------------   
   [new task | new offer]


   [workers] (dragable for assignment)
      dragframe   dragframe   dragframe   dragframe   
      icon        icon        icon        icon        
      name        name        name        name        

d. overview performances for contact

  status taak:  [  select list filter | V ]     
    { options:  passed only | complete & passed | all }
  
   contact                                 |  
    + offer                                | due   |complete bar|  time | price
      + performance                        | worker   |  datum  |  time | status
  -----------------------------------------+----------+---------+-------+--------  
  gemeente x                               |       
    + [ ] website                          | 30-09 |[--->| ] 80%|  4d 0h| xxx €
      [x] een of ander graaf ding          |  erp     |   20-09 |     8h| complete
      [x] meer                             |  prs     |   20-09 |     8h| progress
      [x] minder                           |  drk     |   20-09 |     8h| passed
      [ ] van hetzelfde                    |  drk     |   20-09 |     8h| 
      
      [invoice]
  -----------------------------------------+----------+---------+-------+--------  
  intern product y
    + cursus                                                    | 3d 6h |  xxx € 
    + rls 2.0                                                   |12d 4h |  xxx € 
  -----------------------------------------+----------+---------+-------+--------  
  intern event z
    + analyze                                                   | 10d 7h|  xxx €
  -----------------------------------------+----------+---------+-------+--------  
      

e. pagelayout - home, navigation and menu

   [logo-link-home]
   
   login / UserName | tasks mngt | contacts mngt |  my time |prestation view |
   -------------------
   actual page content

f. contacts

   [new]  - find by name [  narrow-as-you-type-box ]

   -----------------------------------------------------------------
   Name                - FirstName - Member of  - number
   [outerthought bvba ]  [        ]  [ (drop)|v]  [ 0475939111 ]

   details - type | value                 [new]
             -----+-----------------------------
             tel  | +32-3388220           [e][d]
             fax  | +32-2415656           [e][d]
             email| info@outerthought.org [e][d]
      
   [new] subcontacts   [add] > [   select-list | v ]
             naam1      |     naam 2    |    naam3
             naam4      |     naam 5    |    naam6
             naam7      |               |

Note: pushing [new] at level of subcontact, shows a new contact screen where 'member of' field is pre-filled