#summary Overview of work item views available in Melange
#labels Phase-Requirements,Contents-Skeleton,Design-View

The SoC framework provides views that permit presentation and editing of the
various work items in a Program.

== Work Views ==

A [WorkItems#Work Work] is more of an "abstract" entity that is embedded in
other entities when they are created.  Some sort of "Work frame" possibly
could be implemented that is then "plugged in" to other Work views.

== Proposal Views ==

=== Proposal Edit ===

Creates a new [WorkItems#Proposal Proposal] or modifies an existing one.

=== Proposals List ===

Views a list of [WorkItems#Proposal Proposals], sorted and filtered by
different fields.

==== Proposals Feed ====

Implements a GData feed that provides all of the [WorkItems#Proposal Proposal]
details for the Proposals that can be viewed by the [UserRoles#Person], with
sorting and filtering options.

==== Proposals Export ====

Implements a CSV file download that provides all of the [WorkItems#Proposal
Proposal] details for the Proposals that can be viewed by the
[UserRoles#Person].  Sorting and filtering may be possible with query
arguments supplied to the download URL.

=== Proposal Review ===

Attaches a [WorkItems#Review Review] (Comment, [WorkItems#Survey Survey],
etc.) to an existing [WorkItems#Proposal Proposal].  Also enables promoting of
a Proposal to a [WorkItems#Task Task].

== Review Views ==

=== Review Edit ===

Creates a new [WorkItems#Review Review] or modifies an existing one.

=== Reviews List ===

Views a list of [WorkItems#Review Reviews], sorted and filtered by different
fields, such as the type of Review (e.g. [WorkItems#Survey Survey], Comment,
etc.).

==== Reviews Feed ====

Implements a GData feed that provides all of the [WorkItems#Review Review]
details for the Reviews that can be viewed by the [UserRoles#Person], with
sorting and filtering options (such as "only [WorkItems#Survey Surveys]",
"Comments from this [WorkItems#Proposal Proposal]", etc.).

==== Reviews Export ====

Implements a CSV file download that provides all of the [WorkItems#Review
Review] details for the Reviews that can be viewed by the [UserRoles#Person].
Sorting and filtering may be possible with query arguments supplied to the
download URL (such as "all [WorkItems#Survey Survey results] for a specific
type of Survey").

== Survey Views ==

=== Survey Response ===

Responds to a new [WorkItems#Survey Survey] or updates existing responses.

=== Survey Creator ===

Form for creating new [WorkItems#Survey Surveys], including using existing
questions from previous Surveys and creation of new questions.

== Task Views ==

=== Tasks List ===

Views a list of [WorkItems#Task Tasks], sorted and filtered by different
fields, such as task status (pending, in-progress, completed, etc.).

----
_Copyright 2008 Google Inc._
_This work is licensed under a_
[http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License].
[http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png]
