<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
[[SCRUM in Under 10 Minutes|http://www.youtube.com/watch?v=Q5k7a9YEoUI]]
[img[About|images/product/Projango Agile - About.png]]

The About Dialog provides detailed information about the installed Projango Agile version and contains additional links to the homepages of Projango and xenatec.

This online help and the [[License Manager]] are also reachable via this dialog.

To enrich our twitter and facebook fan community links to these services are also included.
!Why another project management tool?
As software developer, ~IT-consultants and project manager we, the founders of xenatec information concepts, have always had the problem to find an easy to handle and not too expensive tool to keep track of our activities. The tools on the market were either very expensive or unusable or extremely complex to use. Usually the projects we were involved in were small, so only small budgets for tools existed. We decided to change the situation and develop an easy to handle fresh new product from scratch which should not be too expensive for small teams.

!The histoy of Projango Agile
xenatec information concepts started the development of Projango Agile in 2007. We started this project as a spare time project, initially allowing only slow progress. After some corrections of tool's goal we had a stable concept at the beginning of 2010 and since this time we put more and more effort into the development of a marketable product. Winning a pilot customer gave us access to an early user feedback; Projango Agile is now in production use since mid 2010. Since that time we calibrated and optimized a lot of things to make Projango constantly more user friendly. For the first release we have set our goal to provide one of the best electronic Scrum task boards on the market, and at the beginning of 2012 xenatec information concepts proudly made the first public release available.

!Why another Scrum tool?
The answer is really simple. When we started in 2007 there were not that many Scrum tools available. And we wanted to be as close to a physical Scrum Taskboard as it is possilbe on a web based tool.

!Vision & Mission
The currently visible part of Projango is only the tip of the iceberg. As described above Projango Agile has currently the focus on the intuitive task board handling and supports only Scrum as project management method, but in the future we will extend Projango Agile step by step towards a fully featured project management platform which supports different project management approaches. Our next Goal is to also support Kanban principles and to allow a smooth interaction between Kanban and Scrum teams.

Projango has the aim to be a project management tool that gives you a quick start to work, an intuitive user experience and maximal transparency of the current status at a glance.

Our mission is to help project teams to get transparency into their progress and into the state of their projects. With Projango Agile, we want to make it easy for everyone and especially small project teams with a small budget to use a good project management tool to plan and track their progress. For this reason Projango Agile is completely free for 5 users and because we are using a lot of freely available components we want to give back Projango Agile to the community, so Projango Agile is also free to use for nonprofit organizations and community projects.

!Roadmap
*Enhanced Scrum functionality
**More configuration options
**Improved project backlog
**Support for several teams
*Feature planning functionality
**New feature story board
*Kanban support
**Integrate Kanban features
**New Kanban board
**New Kanban statistics and charts
*Roadmap Planning
*Requirement Management
*Discussion functionality
*Integrate a light weight bug tracking functionality
*Integrate a test management connected to the requirements and features

!The name Projango
Projango is the short form of "project and go" and reflects the idea to have an easy to use project management tool which enables a lot of people with a minimal effort and a quick start to keep track of their projects.
[img[Acceptance Criteria Window|images/product/Projango Agile - Acceptance Criteria Window.png]]

The acceptance criteria window shows all the acceptance criteria attached to a work item.

New acceptance criteria can be added by directly entering the acceptance criterion details into the text area and pressing the Add button. Alternatively the {{constant{Add Acceptance Criterion}}} button at the toolbar can be used which opens a special editor window. To edit an existing entry use the right click menu on the list or open the acceptance criterion details with a double click on the list entry.
A check of the ongoing async computes should not be executed while Projango is in use to prevent potential clashes with user actions.
It is started by calling the page: <nowiki>http://yourserver/asyncComputation</nowiki> from a browser with a logged in Projango session.
If the check detects and lists ongoing async computes, these can be restarted by clicking on the 'Restart' button.
!Backup of a Projango system
In order to backup the contents of Projango, the following steps must be taken:
*Dump the contents of the postgres database configured during the installation:
{{{
su -c "pg_dump -F c projango > ${BACKUP_LOCATION}/projango.backup" ${POSTGRES_USER}
}}}
*Make a backup of Projango's ~LDAP-files in the ~JBoss work directory:
{{{
cp -r /usr/local/jboss/standalone/tmp/work/jboss.web/default-host/projango-directory ${BACKUP_LOCATION}/ldap-backup
}}}
*Make a backup of Projango's Jackrabbit-files in the Jackrabbit repository directory:
{{{
cd /opt/projango/jackrabbit
zip -r ${BACKUP_LOCATION}/projango_jackrabbit.zip *
}}}
{{rightpad{[<img[Chart Selector Menu|images/product/Projango Agile - Menu Chart.png]]}}}
|!Menu Item|!Function|h
|Sprint Dashboard|Opens the [[Sprint Dashboard]].|
|Burndown Chart|Opens the [[Sprint Burndown Chart]] window.|
|Sprint Info|Opens the [[Sprint Info]] window.|
|Story State Chart|Opens the [[Sprint Story State Chart]] window.|
|Task State Chart|Opens the [[Sprint Task State Chart]] window.|
|Task Count Resolution Chart|Opens the [[Sprint Task Count Resolution Chart]] window.|
|Task Estimation Resolution Chart|Opens the [[Sprint Task Estimation Resolution Chart]] window.|
!Sprint Charts
*[[Sprint Dashboard]]
*[[Sprint Burndown Chart]]
*[[Sprint Info]]
*[[Sprint Story State Chart]]
*[[Sprint Task State Chart]]
*[[Sprint Task Count Resolution Chart]]
*[[Sprint Task Estimation Resolution Chart]]
Background: #fff
Foreground: #000
PrimaryPale: #eea
PrimaryLight: #a00
PrimaryMid: #500
PrimaryDark: #a63
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #800
TertiaryPale: #eee
TertiaryLight: #ddd
TertiaryMid: #ccc
TertiaryDark: #999
Error: #f88
HeaderLight: #fff
HeaderDark: #fff
HeaderTextForeground: #500
HeaderTextShadow: #bbb
[img[Comments Window|images/product/Projango Agile - Comments Window.png]]

The comments window shows all the comments attached to a work item.

New comments can be added by directly entering comment text into the text area and pressing the Add button. Alternatively the {{constant{Add Comment}}} button at the toolbar can be used which opens a special editor window. To edit an existing entry use the right click menu on the list or open the comment with a double click on the list entry.
A consistency check should not be executed while Projango is in use, it is a resource intensive and long running operation.
It is started by calling the page: <nowiki>http://yourserver/consistencyCheck</nowiki> from a browser with a logged in Projango session.
A consistency repair should not be executed while Projango is in use, it is a resource intensive and long running operation.
It is started by calling the page: <nowiki>http://yourserver/consistencyCheck?repair=true</nowiki> from a browser with a logged in Projango session.
Projango contains components developed by other authors, they are distributed under different licenses.
This page contains the complete list of the components. A great thank you to all those authors for allowing the use inside this software.

!!Icons
|!Package|!	Autor|!Copyright|!License|
|[[Fugue|http://p.yusukekamiyamane.com]]|Yusuke Kamiyamane|© 2011 Yusuke Kamiyamane. All rights reserved.|[[Creative Commons Attribution 3.0 License|http://creativecommons.org/licenses/by/3.0/]]|
|[[Diagona|http://p.yusukekamiyamane.com]]|Yusuke Kamiyamane|© 2011 Yusuke Kamiyamane. All rights reserved.|[[Creative Commons Attribution 3.0 License|http://creativecommons.org/licenses/by/3.0/]]|
|[[Silk|http://www.famfamfam.com]]|Mark James|© Mark James|[[Creative Commons Attribution 2.5 License|http://creativecommons.org/licenses/by/2.5/]]|
|[[Silk Companion 1|http://damieng.com/creative/icons/silk-companion-1-icons]]|Damien Guard|© Damien Guard|[[Creative Commons Attribution 3.0 License|http://creativecommons.org/licenses/by/3.0/]]|
|[[Silk Companion II|http://www.cagintranet.com/archive/download-famfamfam-silk-companion-2-icon-pack]]|Chris Cagle|© Chris Cagle|[[Creative Commons Attribution 3.0 License|http://creativecommons.org/licenses/by/3.0/]]|

!!Libraries
|!Package|!Copyright|!License|
|[[apache-commons-collections-3.2.1|http://commons.apache.org/collections/]]|© 2001-2008 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[apache-commons-fileupload-1.3|http://commons.apache.org/fileupload/]]|© 2002-2010 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[apache-commons-jexl-2.0.1|http://commons.apache.org/jexl/]]|© 2001-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[apache-commons-lang|http://commons.apache.org/lang/]]|© 2001-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[apache-commons-math|http://commons.apache.org/lang/]]|© 2001-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[apache-log4j-1.2.16|http://logging.apache.org/log4j/1.2/]]|© 1999-2010 Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[apache-poi-3.7|http://poi.apache.org/]]|© 2002-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-beanutils-1.8.0|http://commons.apache.org/beanutils/]]|© 2000-2010 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-codec-1.3|http://commons.apache.org/codec/]]|© 2002-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-collections-3.2.1|http://commons.apache.org/collections/]]|© 2001-2008 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-compress-1.1|http://commons.apache.org/compress/]]|© 2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-configuration-1.6|http://commons.apache.org/configuration/]]|© 2001-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-dbcp-1.3|http://commons.apache.org/dbcp/]]|© 2001-2010 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-digester-2.0|http://commons.apache.org/digester/]]|© 2001-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-io-1.4|http://commons.apache.org/io/]]|© 2002-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-jexl-1.1|http://commons.apache.org/jexl/]]|© 2001-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-lang-2.3|http://commons.apache.org/lang/]]|© 2001-2011 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[commons-logging-1.1.1|http://commons.apache.org/logging/]]|© 2001-2008 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[concurrent-1.3.4|http://g.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html]]| |Public Domain|
|[[guava-r08|http://code.google.com/p/guava-libraries/]]|© 2011 The Guava Authors|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[gwt-2.5.1|http://code.google.com/intl/de-DE/webtoolkit/]]|© 2009 Google|[[Apache License, Version 2.0|http://code.google.com/intl/de-DE/webtoolkit/terms.html]]|
|[[gwt-log-3.1.0|http://code.google.com/p/gwt-log/]]|© 2009 Fred Sauer|[[Apache License, Version 2.0|http://code.google.com/intl/de-DE/webtoolkit/terms.html]]|
|[[jackson-2.1|http://wiki.fasterxml.com/JacksonHome]]|© 2009 ~FasterXML, LLC|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[jackrabbit-2.4|http://jackrabbit.apache.org/]]|© 2004-2010 The Apache Software Foundation|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[jasperreports-4.0.2|http://jasperforge.org/projects/jasperreports]]|© 2000 - 2010 ~JasperForge|[[GNU Lesser General Public License, Version 3.0|http://www.gnu.org/licenses/lgpl.html]]|
|[[java-image-scaling-0.8.5|http://code.google.com/p/java-image-scaling/]]|© 2009, Morten ~Nobel-Joergensen|[[GNU Lesser General Public License, Version 3.0|http://www.gnu.org/licenses/lgpl.html]]|
|[[jh-labs-filters|http://www.jhlabs.com/ip/filters/]]|© JH Labs|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[joda-time-2.0|http://joda-time.sourceforge.net/]]|© 2002-2011 Joda.org|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|
|[[jxls-1.0-RC-1|http://jxls.sourceforge.net/]]|© 2005-2011 jXLS Team|[[GNU Lesser General Public License, Version 3.0|http://www.gnu.org/licenses/lgpl.html]]|
|[[postgresql-9.1|http://www.postgresql.org/]]|© 1996-2012 ~PostgreSQL Global Development Group |[[PostgreSQL License|http://www.postgresql.org/about/licence/]]|
|[[resteasy-1.2|http://www.jboss.org/resteasy]]|© ~JBoss.org|[[LGPL|http://www.gnu.org/licenses/lgpl.html]]|
|[[slf4j-1.6.1|http://www.slf4j.org/]]|© 2004-2011 QOS.ch|[[MIT license|http://www.slf4j.org/license.html]]|
|[[SmartGWT|http://code.google.com/p/smartgwt]]|© 2008 and beyond, Isomorphic Software, Inc.|[[GNU Lesser General Public License, Version 3.0|http://www.gnu.org/licenses/lgpl.html]]|
|[[truelicence-1.29|http://java.net/projects/truelicense]]|© 2005-2010 Schlichtherle IT Services|[[Apache License, Version 2.0|http://www.apache.org/licenses/LICENSE-2.0.html]]|

!!This online help
|!Package|!Copyright|!License|
|[[TiddlyWiki|http://www.tiddlywiki.com/]]|© 2007-2011 UnaMesa Association|BSD Open Source License|
|[[SimpleSearchPlugin|http://devpad.tiddlyspot.com/#SimpleSearchPlugin]]|© FND|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|

[[Projango User Guide]]
!FAQ
!! When trying to log in, I permanently see the warning that the browser lost contact to the Projango server
A Projango client needs to store the login as a cookie. Please check if your browser is allowed to store cookies originating from the Projango server.

!! When logging in after a Projango update I see a message about "class xyz is not serializable,..."
Your browser still caches the Projango pages of the previous Projango version. Please reload the Projango page.

!! Is it possible to bookmark a currently opened scrum board?
Not directly, because Projango currently always has the same URL, so the latest opened board is automatically reopened on a normal bookmarked Projango. But you can define by hand which project or iteration you want to preselect by adding some additional URL parameters. The parameter for a project is @@projectUId@@ and for an iteration it is @@iterationUId@@. The value of the parameters are the unique identifier of the work item. The unique identifier is shown at the info tab inside the details editor.

Here are examples of ~URLs using the parameter:
{{{
http://localhost:8080/ScrumBoard.html?projectUId=123
http://localhost:8080/ScrumBoard.html?iterationUId=123
}}}

!! Why does a list stop supporting Drag & Drop when sorting or grouping is used?
As long as sorting or grouping is not used, the items in a list are presented in a "natural" order; an object that gets dropped at a certain list position can therefore be put at that position in that order.
Once grouping or sorting gets used, it is impossible to deduce that needed position of a dropped item. It would land between two items which are at arbitrary positions in the "natural" order, giving no clue about the position the user actually had in mind. Drag & Drop gets deactivated in these cases to prevent unwanted results.

!! Starting Projango during ~JBoss startup fails with log errors "Did not receive a response to the deployment operation within the allowed timeout period [30 seconds]"
You need to increase ~JBoss' timeout for the deployment of applications. This is done in  //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// at the attribute """//"""subsystem[xmlns="urn:jboss:domain:deployment-scanner:1.0"]/deployment-scanner[@deployment-timeout]:
{{{
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
}}}
!! Starting Projango during ~JBoss startup fails with a lot of log errors "~ARJUNA016037: Could not find new ~XAResource to use for recovering non-serializable ~XAResource ... ~TwoPhaseOutcome.~FINISH_OK, product: ~HornetQ/2.0,..."
Remove files in the directory //<~JBOSS_HOME>/standalone/tx-object-store/~ShadowNoFileLockStore/defaultStore/~StateManager/~BasicAction/~TwoPhaseCoordinator/~AtomicAction//.
!! Starting Projango during ~JBoss startup still fails
You can narrow down the possible causes by manually deploying the individual deployments that are part of a Projango application. In //<~JBOSS_HOME>/standalone/deployments//, rename the following files one by one, checking for each file in the logfile if it was successfully deployed before carrying on with the next one:
*postgresql-9.1-902.jdbc4.jar.failed -> postgresql-9.1-902.jdbc4.jar.dodeploy
*jackrabbit-jca-2.4.1.rar.failed -> jackrabbit-jca-2.4.1.rar.dodeploy
*projango-ear.ear.failed -> projango-ear.ear.dodeploy
~JBoss should automatically start deploying each file after some seconds once it was renamed.
A failure of deploying the postgresql-9.1-902.jdbc4.jar or the jackrabbit-jca-2.4.1.rar may indicate misconfigured database authentification or missing rights to read the directory ///opt/projango//.
!! After restoring a backup, starting ~JBoss fails with log errors "Unable to initialize workspace 'default': javax.jcr.~RepositoryException: Unable to aquire read lock."
The restored backup contains an //.lock// file. In a default installation this file is located at ///opt/projango/jackrabbit//. Shut down ~JBoss, delete the stale lock file and start ~JBoss again.
!! Why do edits in the Projango LDAP not show up in Projango when I modified the LDAP externally?
Projango assumes that it has exclusive control over the LDAP. To force it to reread the externally modified data, restart the application or edit user data inside Projango.
!! The ~JBoss log file lists "Unable to get managed connection" failures
If the log file contains failure messages of the kind:
{{{
...
Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/jdbc/projangoDatasource
...
Caused by: javax.resource.ResourceException: IJ000655: No managed connections available within configured blocking timeout (30000 [ms])
...
}}}
, you need to increase the pool sizes for connections, which is described in [[Resource sizing]]
!! The ~JBoss log file lists "Failed to acquire a permit " failures
If the log file contains failure messages of the kind:
{{{
...
javax.ejb.EJBTransactionRolledbackException: JBAS014516: Failed to acquire a permit within 5 MINUTES
...
}}}
, you may have many background operations underway, increasing the maximum amount of EJB 3 threads might help, which is described in [[Resource sizing]]. 
!! The ~JBoss logs an error message about "Retrieving meta data not supported" at startup
The following message can be neglected, it informs about an optional, but not neccessary feature of the used jackrabbit framework.
{{{
...
(JCA PoolFiller) Exception in thread "JCA PoolFiller" java.lang.UnsupportedOperationException: Retrieving meta data not supported.
...
}}}
!! The Burndown Chart or the Delta value in the Dashboard do not update any more
Perform an [[Async Compute Check|AsyncComputeCheck]] and restart any listed computes.
!Set the password for the administrator
[img[Data Initialization|images/product/Projango Agile - Data Initialization.png]]
On the first startup the password for the Projango Agile administrator must be set.

You will then be logged in as administrator and the wizard to create users is shown.

!Create Users with the user wizard
More details are available at the special [[User Wizard]] page.

After creating some users the administrator should log out and a normal user can create the first sprint.

!Create the first sprint with the sprint wizard
More details are available at the special [[Sprint Wizard]] page.


To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
!Installation on Unix Systems
*[[Default Setup Ubuntu Server 12.04 with Projango|Setup Ubuntu Server 12.04 with Projango]]. Follow these steps when you use an out-of-the-box ~JBoss 7.1.1 and have no restrictions regarding filesystem locations.
*[[Manual Setup Ubuntu Server 12.04 with Projango]]. Follow these steps in all other cases.
!Installation on Windows
*[[Default Setup on Windows 7 with Projango|Setup on Windows 7 with Projango]]. Follow these steps when you use an out-of-the-box ~JBoss 7.1.1 and have no restrictions regarding filesystem locations.
*[[Manual Setup on Windows 7 with Projango]]. Follow these steps in all other cases.
/%!Security
*[[Using Projango with HTTPS]]%/
!Resource sizing
Projango needs to be set up adequately for the targeted amount of users, as described in [[Resource sizing]].
!!@ISODSTAMP@ (1.2.0 General Availability)
- New: Dashboards can now be directly loaded at startup via URL parameter. 
- New: Sprint state 'In Planning' allows unrestricted task state modifications. 
- Enhancement: Updated Projango to ~SmartGWT 3.1
- Enhancement: Provided an installation script for Ubuntu 12.04 server installations.
- Enhancement: More finegrained adaption of a task's initial estimation to the current estimation.
- Fix: Eliminated technical error for backlog with more than 250 stories.
- Fix: Text areas for comments, acceptance criteria and web links are now resizeable.
- Fix: Removed unnecessary restrictions for the delete workflow for several work item types.
- Fix: Stories in a completed or similar state can now be dragged into an unstarted sprint.
- Fix: Stories of a sprint will not reappear in the backlog when the sprint gets deleted.

!!2013-03-08 (1.1.0 General Availability)
- New: Charts for sprint data can now be opened from sprint lists.
- New: Excel export of open backlogs and story lists.
- Enhancement: A task's initial estimation now always gets adapted to the current estimation while the sprint is 'New'.
- Fix: Suppressed id numbers in the sprint selection.
- Fix: Vanishing Tasknotes will now be prevented while dragging.
- Fix: Several minor fixes.

!!2013-02-06 (1.0.0 General Availability)
- Enhancement: Projango now scales better for multiple clients.
- Enhancement: The undelete operation now performs a partial consistency check, only covering the work items concerned.
- Fix: Stories dragged into the open backlog now are stored at the correct position.
- Fix: Prevented multiple concurrent licence windows.
- Fix: Retrofitting the estimation of a task now updates the burndown chart.

!!2012-12-06 (Release Candidate 7)
- Enhancement: Tightened the consistency check concerning order inconsistencies.
- Enhancement: Data changes leading to inconsistencies now get refused.
- Fix: Preventing logins during migration.
- Fix: Preventing drops of pushes.
- Fix: No more potential freeze-up upon task note drag.
- Fix: Added Firefox 17 support.
- Fix: Task note ghosts and disconnected state icons are now prevented.
- Fix: The story line progress bars have stopped wandering.

!!2012-11-19 (Release Candidate 6)
- Enhancement: Improved overall performance.
- Fix: Push messages are now cleaned up at session timeout.

!!2012-11-02 (Release Candidate 5)
- New: Update procedure now accounts for in-flight async computes.
- New: Zipped user guide can now be downloaded from inside the user guide.
- Enhancement: Improved performance while handling backlogs.
- Enhancement: Add- and ~OK-Buttons disable while comments, acceptance criteria, web links and time registration entries are still empty.
- Enhancement: Stories copied to backlog now have an adjusted estimation.
- Enhancement: New story and task notes now open with the focus already in the name field.
- Fix: Push system now doesn't leave unserializable ~XAResources behind.
- Fix: Computed values now get rounded.
- Fix: Colliding task note drags on several clients now don't lead to desynced displays.
- Fix: Changing the estimation on a currently saved new note now doesn't lead to a duplicated note.

!!2012-09-05 (Release Candidate 4)
- New: Calculation of further ratios of work time hours per storypoints.
- Enhancement: Improved performance of clients while updating a scrum board.
- Enhancement: Included further columns into story listgrids.
- Fix: Previously unspecified 'save failed'-messages now cite the cause of the failure.

!!2012-07-13 (Release Candidate 3)
- New: Projango is now moved to ~JBoss 7.1. Older versions are not supported any more.
- New: Projango is now preconfigured to Postgres 9.1.
- New: Support for premium licenses.
- New: The backup & restore script included with the User Guide now also cover JMS messages.
- New: The rejection workflow for multiple 'tasks to verify' now allows the input of individidual reasons as well as one general reason.
- New: Dialogs for comments, web links and acceptance criteria now offer an "add"-functionality that keeps the dialog open for further work.
- Enhancement: Improved performance for 'delete work item' and 'copy to backlog' workflows.
- Enhancement: Sprint reports now omit those parts of times worked that are outside of the sprint timespan.
- Enhancement: Work items added via the context menu in a work item list will be entered at the selected row, not at the end.
- Enhancement: Projango allows deferring or canceling stories while non-final tasks exist.
- Fix: Time Registration admins can now edit other users' entries.
- Fix: Tasks can now be dragged from a task list onto the scrum board.
- Fix: Dragging multiple stories from a story list onto the scrum board now works.
- Fix: Excel reports do now show a straight ideal velocity line during DST transitions.

!!2012-03-03 (Release Candidate 2)
- New: Drag & Drop support of stories between scrum board and backlog.
- New: A verification description can be added after a verification which is shown as a tooltip on the verifcation icon.
- New: Expand or collapse all notes of the scrum board with one click.
- New: Quick Start Wizard to create new users.
- New: Quick Start Wizard to easily create a new project with a related sprint.
- New: Usability improvements: The quick edit mode of notes is now also reachable via the context menu. A project or sprint can now also be added via the context menu of the scrum board.
- Enhancement: Improved online help.
- Fix: Several problems in the area of the of the burndown chart are resolved.
- Fix: A lot of other minor fixes.

!!2011-12-15 (Release Candidate 1)
- New: Projango is now moved to ~JBoss 7. Older versions are not supported any more.
- New: Story estimation and the sum of task estimations are now shown in separate fields on the story note.
- New: Fast selection of priorities, moscow classification, risk, task characteristic, service classes and story state via context menus on the correlating icons.
- New: The toolbar shows now managed progress bars for task and task estimations on an iteration level.
- New: Stories now support Kanban like service classes.
- New: Stories can now be added to the board by using the context menu.
- New: The acceptance criteria icon is now shown on the notes if there is at least one acceptance critera set.
- New: Moving stories between projects is now possible by using the backlogs of both projects as an intermediate location.
- New: Improved differentiation between managed and unmanaged calculations for all charts and progress bars.
- New: Additional automatic updated iteration information panel which shows the remaining days of a sprint, the delta to the optimal velocity and the remaining unresolved tasks. The information panel can be switched between managed and unmanaged mode.
- New: Additional interactive chart to show the stories per story states of an iteration. The chart can be switched between managed and unmanaged mode.
- New: Additional interactive chart to show the tasks per task states of an iteration. The chart can be switched between managed and unmanaged mode.
- New: Additional interactive chart to show the resolved task estimation relation of an iteration. The chart can be switched between managed and unmanaged mode.
- New: Additional interactive chart to show the resolved task count relation of an iteration. The chart can be switched between managed and unmanaged mode.
- New: All relevant iteration information is now combined on a automatically updated dashboard offering a one-stop shopping for the overview of the sprint progress. The dashboard can be switched between managed and unmanaged mode.
- New: All kind of charts are now updated on changes automatically without an explicit refresh.
- New: Aggregated calculations for hours per storypoint, managed and unmanaged delta to optimal velocity, initial task velocity and all task velocity on iteration level.
- New: Scrum board secures closed iterations and projects against inadvertent changes.
- New: The layout of work item lists can now be saved on a per-browser basis.
- Enhancement: More naturally expected double click behavior on notes. A double click on a note now only enlarges and shrinks the note. To quick edit a note additionally the Ctrl-key have to be pressed. To open the detail editor the Alt-key have to be pressed on a double click.
- Enhancement: The burn down chart appearance was refreshed, is automatically updated and has a feature to calculate values interactively by moving a bar on the chart.
- Enhancement: Both progress bars on a story line for tasks and task estimations represent now the unmanaged progress, this shows more explicitly how much of the whole effort to complete a story is done.
- Enhancement: The burndown chart and all other charts are now shown immediately. All calculations are done as a background task on the server.
- Enhancement: Improved and much more easier positioning of a task note on drop.
- Enhancement: Unified workflow for comments, acceptance criteria, links and time registration.
- Enhancement: Excel reports can now handle more than 30 stories.
- Enhancement: Excel reports and board use the same numbering scheme for tasks.
- Enhancement: Dates of iterations and projects are now handled in centralized server timezone context.
- Fix: Automatic detection and update of obsolete client information now works correctly.
- Fix: Drag & Drop of task notes now also works in Internet Explorer.
- Fix: Daily estimations of tasks created after sprint start are now shown correctly in Excel reports.
- Fix: Excel report is now generated even if the sprint length exceeds 190 days
- Fix: Several other minor fixes.

!!2011-06-03 (Milestone 3)
- New: Generation and export of detailed PDF documentation on all major work items.
- New: Time registration feature on task level including the export of time registration  details as PDF on task level.
- New: Calculation of the time worked sums on all work item levels including the export of the time worked sums in the iteration Excel report and all other detailed PDF documents.
- New: Introduction of a new coloring feature for projects, stories and tasks. Story notes and task notes now have a gray default color on the info strip. This default color can be changed on project level.
- New: Introduction of a new version check feature which allows a Projango user to check if the current installation is up-to-date.
- Enhancement: Improved work-flow in case of moving stories between iterations without the need to use the backlog. Moving a story to another iteration can now be executed via the context menu on that story even if the story is actually part of an iteration.
- Enhancement: The copy to backlog feature is now reachable via all story context menus.
- Enhancement: The story menu button on the story line is replaced by the story owner avatar. The menu is still available as context menu on the complete story line.
- Enhancement: Adjusted backlog behavior: Stories without an iteration are now part of the open backlog, only stories "In Progress" will be listed in the active backlog.
- Enhancement: A fast enlarge and shrink feature on notes via a combination of Ctrl-key or Shift-key and a mouse move.
- Enhancement: The priority quick edit is moved to the note number area to avoid misunderstandings in clicking some icons on the icon strip.
- Enhancement: Fast opening of the detailed editor on a note has changed to Ctrl + double click.
- Enhancement: A special red administrator default icon which makes the differentiation to a normal user more visible.
- Enhancement: Improvements on the repository repair system which is now able to list all changes performed.
- Enhancement: Secured report delivery: Only logged in clients are served.
- Enhancement: Projango doesn't enforce a page reload upon communication problems, thus leaving the possibility of a manual copy of data before doing a manual reload.
- Enhancement: Improved stability in case of drag and drop of task notes.
- Enhancement: It is now possible to define a project owner.
- Enhancement: All major state icons are now displayed on the story line if the a non default value is set.
- Enhancement: If the impeded flag is set on a story or task it is now possible to add a impediment description which is displayed as hover text directly on the impeded icon.
- Enhancement: Bookmark-able preselect of the project or iteration which is loaded on the board via the URL parameter projectUId or iterationUId.
- Fix: Several other minor fixes.

!!2011-04-26 (Hotfix)
- Corrections concerning drag and drop of notes.

!!2011-04-16 (Milestone 2)
- Improved usability throughout Projango:
- Harmonized and cleaned up detail dialogs and forms.
- Continuous context menu support on all work item lists.
- Drag & Drop support on all work item lists.
- Item dialogs show relations and a detailed list of sub work items.
- Projango supports traversal between work items through lists of sub work items.
- User management is separated into a user list for administrators and a details only presentation for self management.
- User selector shows now the real name and surname of a user instead of the login name.
- The story state can be changed directly on the story line at the scrum board.
- It is possible now to deactivate unneeded user accounts to comply with the licensed amount of users. Deactivated users are not visible and selectable in the user selectors and this users are also not able to log in.
- It is possible now to archive unneeded projects and iterations to get a better overview on the active work. Archived projects and iterations are not visible in the project and iteration selector.
- A today marker is added to the burndown chart.
- Several fixes and improved stability.

!!2011-03-14
- Multiple selected stories, tasks etc. in a list can now be deleted in one go through the context menu.
- Stories can now be copied back into the backlog through the context menu of a story list.
- Unfinished saves are now signaled prior to leaving Projango.
- Overall performance improvements.

!!2010-12-09
- Projects and iterations may now be ordered by the user.
- Improved the contents of the server log.

!!2010-11-29
- Several fixes
- Stale iterations on the board are now cleaned up after removing/deleting iterations.

!!2010-11-14
- Several fixes.
- New feature to manage external web links for stories and tasks.

!!2010-11-08 (Milestone 1)
- Performance improvements on client and server.

- Several UI fixes
    - Improved context menu support.
    - Improved comment handling.
    - Improved acceptance criteria handling.
    - Improved trag handling of task notes for faster user interaction.

- First version of a PDF report on iteration level.

- Various other bug fixes.

!!2010-10-10
- A more strict and clear interaction in using notes:

    Not changed:
    - Expanding and collapsing a note with a single click on the note icon.
    - Changing the owner/verifier by clicking the user icon in the non edit mode of a note.
    - Changing the current estimation by clicking the estimation number in the non edit mode of a note.

    Changed:
    - A double click on the note content in the non editing mode opens the note edit mode.
    - A double click on the note content + ~CTRL-Key in the non editing mode opens the comments window.
    - A click on the note icon + ~CTRL-Key opens also the note edit mode.
    - A click on the note icon + ~ALT-Key opens the note detail dialog.

- Changes in the backlog-centered workflows:
&nbsp;  Seemingly unsuitable Stories (state of story or contained tasks are atypical) must now be acknowledged before copying them into the backlog.
&nbsp;  Stories copied back into the backlog are now reset into the "New" state.
&nbsp;  When moving stories away from the backlog, closed iterations are no longer offered as a move target.
&nbsp;  Closed stories as well as all stories in a closed iteration are now listed in the "Closed" backlog.

!!2010-10-08
- The name and description of a story note or task note supports scrolling with the mouse wheel in the non editing mode by pressing the ~CTRL-Key while using the mouse wheel.
- The story estimation at the story note can be set via quick edit as in the task notes.

!!2010-10-06
- A user can now add comments to stories and tasks.
- A spinner is shown while changes of a task note or story note are persisted. Interaction with that note is blocked for that time.
[img[License Manager|images/product/Projango Agile - License Manager.png]]

The License Manager gives you an overview about the installed licenses. All details like the holder, the type of license and the amount of users or the expiry date are shown.

Currently it is not possible to update or upload new or additional licenses via Projango, they have to be updated directly on the server.
Most of the lists used in Projango allow you to rearrange the columns and to sort and group the displayed items by providing context menus on the list header.
These customizations can be saved on a per list-type basis by the appropriate button in the list's toolbar.
To reset these customizations simply use ctrl + left click on the button and reopen the window holding the list.

''Note:'' Once a list is sorted or grouped, Projango automatically deactivates the drop functionality into that list: with the items rearranged into an completely other order, it is not possible any more to deduce the correct position for the unsorted view.
Dropping only gets reactivated when the customized sorting and grouping gets reset.
!Login
[img[Login|images/product/Projango Agile - Login.png]]

The login screen is the entrance into the world of Projango.

With a click on the projango logo the [[About Dialog]] is shown which also provides links to this online help or the [[License Manager]].

An existing username and passwort must be entered to start working with Projango Agile. 
[[Start|Projango User Guide]]
[[About Projango Agile]]
[[First Startup]]
[[Scrum Taskboard]]
[[FAQ]]
[[Short Cuts]]
[[Installation]]
[[Update]]
[[Operation]]
[[Latest Changes]]
!These are the steps to follow to setup Projango on a Ubuntu Server 12.04 System
!! A word on security concerns
This installation procedure is suited for a trusted environment. To set up a more secure system [[other guides|http://www.linuxsecurity.com/resource_files/host_security/securing-debian-howto/ch-sec-services.en.html]] are recommended.

The following description uses several placeholders to note several filesystem locations, which default to the following:
|!Placeholder|!Default value|h
|<~JBOSS_HOME>|///usr/local/jboss//|
|<~JACKRABBIT_STORE>|///opt/projango/jackrabbit//|
|<location of unpacked projango_package.zip>|///tmp/projango-install//|
|Placeholders for installation description|c

!! Linux setup
Select Postgres 9.1 and ~OpenSSH to install on setup time.

If you wish to reach Projango under the standard http port 80, this can be achieved by adapting the iptables of your linux network configuration. 

!!User setup
*Create an admin user 'administrator' with the installation.
*Create an jboss user 'jboss' and set the homedir and the default shell
{{{
sudo useradd -d /usr/local/jboss -s /bin/sh jboss
}}}
*Attention! Do not set a password for the 'jboss' user
* Reset the postgres user password
{{{
sudo passwd -d postgres
sudo su postgres -c passwd
}}}

!!Install Oracle Java 6 JDK
*It is necessary to install the JDK for using ~JBoss
** Use [[Martin Wimpress' oab-java.sh|http://blog.flexion.org/2012/01/16/install-sun-java-6-jre-jdk-from-deb-packages/]] to prepare the next step
** Now we can install the Java Runtime with
{{{
apt-get install sun-java6-jdk
}}}

!!Configure ~PostgreSQL
*Adapt the linux kernel shmmax value to fit postgres' needs (41943040 or more) by editing /etc/sysctl.d/30-postgresql-shm.conf:
{{{
sudo vi /etc/sysctl.d/30-postgresql-shm.conf
....
kernel.shmmax = 41943040
}}}
*Apply this modification by running:
{{{
sudo sysctl -p  /etc/sysctl.d/30-postgresql-shm.conf
}}}
*Start the postgres server:
{{{
sudo /etc/init.d/postgresql start
}}}
*Set the listening address range by editing the file /etc/postgresql/9.1/main/postgresql.conf
{{{
sudo vi /etc/postgresql/9.1/main/postgresql.conf
....
listen_addresses = '*'
}}}
*Set the client authentication by adding the following line to the file /etc/postgresql/9.1/main/pg_hba.conf
{{{
sudo vi /etc/postgresql/9.1/main/pg_hba.conf
...
host    all         all         192.168.0.0/16        md5
}}}

''Note:'' After changing the access configuration it is necessary to reload the postgres service.
*We have to do the following {{{psql}}}-calls as user 'postgres'
{{{
su postgres
}}}
*Change the database admin password to a known value:
{{{
psql -c "ALTER ROLE postgres  WITH PASSWORD 'DBAdminPasswort';"
}}}
*Create the Projango database:
{{{
psql -c "CREATE DATABASE projango  WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;"
}}}
*Enable prepared statements. This is done by setting max_prepared_transactions to a value greater than 0 in postgresql.conf. The ~PostgreSQL documentation recommends to set it at least to the value of max_connections, which in turn defaults to 100:
{{{
sudo vi /etc/postgresql/9.1/main/postgresql.conf
...
max_prepared_transactions = 100
}}}
A restart of ~PostgreSQL is required to make this change effective.

!!! Configure database connection
When installing the Database and the application server on different machines, you need to reconfigure the connection configuration of Projango.
To this end replace the preconfigured connection string {{{"jdbc:postgresql://localhost:5432/projango"}}} as needed in the following files:
* /tmp/projango-install/opt/projango/jackrabbit/workspaces/default/workspace.xml
* /tmp/projango-install/usr/local/jboss/modules/com/xenatec/projango/config/main/projango-repository.xml
!!! Note
Jackrabbit copies contents of projango-repository.xml into its own location. When relocating the database of a Projango installation it is necessary to modify the connection string in an extended set of files:
*/usr/local/jboss/modules/com/xenatec/projango/config/main/projango-repository.xml
*/opt/projango/jackrabbit/repository.xml
*/opt/projango/jackrabbit/workspaces/default/workspace.xml

!!Install the unzip tool
{{{
apt-get install unzip
}}}

!!Install the ~JBoss Server:
*Unzip the file jboss-as-7.1.1.Final.zip to /usr/local. Change the owner to the jboss user and create a short symbolic link:
{{{
sudo unzip /tmp/jboss-as-7.1.1.Final.zip -d /usr/local
sudo chown -R jboss:jboss /usr/local/jboss-as-7.1.1.Final
sudo ln -s /usr/local/jboss-as-7.1.1.Final /usr/local/jboss
}}}
*To allow needed configuration, copy the default config file to the location where jboss will find it:
{{{
sudo mkdir /etc/jboss-as
sudo cp /usr/local/jboss/bin/init.d/jboss-as.conf /etc/jboss-as/
sudo chmod u+x /usr/local/jboss/bin/standalone.sh
}}}
*Adapt the configuration as needed by editing ///etc/jboss-as/jboss-as.conf// as follows:
** Add a ~JBOSS_HOME:
{{{
...
# The jboss home directory
#
JBOSS_HOME=/usr/local/jboss

...
}}}
** Uncomment and modify the ~JBOSS_USER:
{{{
...
JBOSS_USER=jboss
...
}}}
** Projango needs the ~JBoss 7 server to be started with the standalone-full-configuration. Therefore set the required configuration file to use:
{{{
...
JBOSS_CONFIG=standalone-full.xml
...
}}}
*Copy the init scipt to provide a start-/stop-script for the ~JBoss Server:
{{{
sudo cp /usr/local/jboss/bin/init.d/jboss-as-standalone.sh /etc/init.d/jboss
sudo chmod a+x /etc/init.d/jboss
}}}
*In the jboss start script, comment out the sourcing of the nonexistent 'functions' file and the nonexistent 'success' and 'failure':
{{{
...
# Source function library.
# /etc/init.d/functions
...
# success
...
# failure
...
}}}
*Add ~JBoss to the init system to start automatically
{{{
sudo update-rc.d jboss defaults
}}}

!!Adapt the Projango Agile installation package to your environment
*Modify the value for the ~HomeDir to the chosen value in //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml//:
{{{
       <config-property name="HomeDir">
         <JACKRABBIT_STORE>
       </config-property>
  <!-- e.g.:
       <config-property name="HomeDir">
         /opt/projango/jackrabbit
       </config-property>
  -->
}}}
If you use another database than ~PostgreSQL 9.1, you need to perform the following steps:
*Add a suitable ~JDBC-driver into the //<~JBOSS_HOME>/standalone/deployments//-directory.
*Extract  //~META-INF/jboss-deployment-structure.xml// from //<location of unpacked projango_package.zip>/usr/local/jboss/standalone/deployments/jackrabbit-jca-2.4.1.rar//.
*Modify the dependency to the ~JDBC-Driver to the chosen value.
{{{
...
    <dependencies>
...
          <module name="deployment.some.other.jdbc.jar" />
...
}}}
*Zip the modified //jboss-deployment-structure.xml// back into the //~META-INF//-folder of //<location of unpacked projango_package.zip>/usr/local/jboss/standalone/deployments/jackrabbit-jca-2.4.1.rar//.
*Adapt the memory settings for ~JBoss in /usr/local/jboss/bin/standalone.conf:
{{{
...
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms64m -Xmx768m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
 ...
}}}
!!Configure Jackrabbit
*Create a jackrabbit data store at <~JACKRABBIT_STORE>, for example :
{{{
sudo mkdir -p /opt/projango/jackrabbit
sudo chown -R jboss:jboss /opt/projango
}}}
!!Install Projango by copying several files to the ~JBoss installation
{{{
JBOSS_HOME=<JBOSS_HOME>
PROJANGO_INSTALL_TEMP=<location of unpacked projango_package.zip>
sudo -u jboss mkdir -p $JBOSS_HOME/modules/javax/jcr/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/modules/javax/jcr/main/jcr-2.0.jar $JBOSS_HOME/modules/javax/jcr/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/modules/javax/jcr/main/module.xml $JBOSS_HOME/modules/javax/jcr/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/deployments/jackrabbit-jca-2.4.1.rar $JBOSS_HOME/standalone/deployments
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/deployments/postgresql-9.1-902.jdbc4.jar $JBOSS_HOME/standalone/deployments
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/deployments/projango-ear.ear $JBOSS_HOME/standalone/deployments

sudo -u jboss mkdir -p $JBOSS_HOME/modules/com/xenatec/projango/config/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/modules/com/xenatec/projango/config/main/* $JBOSS_HOME/modules/com/xenatec/projango/config/main
}}}

!!Adapt //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// for Projango Agile.
If you are installing Projango on an unmodified ~JBoss, you can simply copy the adapted version of standalone-full.xml that comes with the Projango install package:
{{{
sudo cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/configuration/standalone-full.xml $JBOSS_HOME/standalone/configuration
}}}
If you already modified the standalone-full.xml, you need to manually incorporate the changes. The detailed changes are specified at [[Modifications in standalone-full.xml]]

Dependent of the underlying hardware it may be necessary to adapt the deployment-timeout of ~JBoss.
If the Application log errors like "Did not receive a response to the deployment operation within the allowed timeout period [30 seconds]." you need to increase the timeout. This is done in  //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// at the attribute """//"""subsystem[xmlns="urn:jboss:domain:deployment-scanner:1.1"]/deployment-scanner[@deployment-timeout]:
{{{
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
}}}

You can now start the ~JBoss.
{{{
/etc/init.d/jboss start
}}}

When this command has finished, the ~JBoss will in turn start the contained Projango application. The end of the start procedure can be detected by a {{{JBAS018559: Deployed "projango-ear.ear"}}} message in //<~JBOSS_HOME>/standalone/log/server.log//.

Once the ~JBoss and the contained Projango application have started, you can enter Projango at http://yourserver:8080/. You will be asked to setup the admin user at [[First Startup]].
!These are the steps to follow to setup Projango on a Windows 7 System
!!A word on security concerns
This installation procedure is suited for a trusted environment. To set up a more secure system other guides are recommended.
!!Default values, Notation

The following description uses several placeholders to note several filesystem locations, which default to the following:
|!Placeholder|!Default value|h
|<~JBOSS_HOME>|//P:\usr\local\jboss//|
|<~JACKRABBIT_STORE>|//P:\opt\projango\jackrabbit//|
|<location of unpacked projango_package.zip>|//P:\tmp\projango-install//|
|Placeholders for installation description|c

!!User setup
Create an user which will be running the application server and perform the rest of the installation process as that user.
!!Install Oracle Java 7 SDK
Install the Java SDK as the user created in the previous chapter.
!!Configure ~PostgreSQL
Install ~PostgreSQL 9.1.
*Create the Projango database by executing the following SQL-statement in pgAdmin:
{{{
CREATE DATABASE projango  WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;
}}}
*Enable prepared statements. This is done by setting max_prepared_transactions to a value greater than 0 in <~POSTGRES_INSTALLATION>/9.1/data/postgresql.conf. The ~PostgreSQL documentation recommends to set it at least to the value of max_connections, which in turn defaults to 100:
{{{
max_prepared_transactions = 100
}}}
A restart of ~PostgreSQL is required to make this change effective.

!!Install the ~JBoss Server:

''Note:'' Projango needs "~JBoss AS 7", the "~JBoss AS 7 Web" will not suffice.
Unzip the file //jboss-as-7.1.1.Final.zip// to <~JBOSS_HOME>.

Projango needs the ~JBoss 7 server to be started with the standalone-full-configuration.
Therefore add a line to <~JBOSS_HOME>/bin/standalone.bat, setting """--"""server-config=standalone-full.xml:
{{{
"%JAVA%" %JAVA_OPTS% ^
 "-Dorg.jboss.boot.log.file=%JBOSS_LOG_DIR%\boot.log" ^
 "-Dlogging.configuration=file:%JBOSS_CONFIG_DIR%/logging.properties" ^
    -jar "%JBOSS_HOME%\jboss-modules.jar" ^
    -mp "%JBOSS_MODULEPATH%" ^
    -jaxpmodule "javax.xml.jaxp-provider" ^
     org.jboss.as.standalone ^
    -Djboss.home.dir="%JBOSS_HOME%" ^
    --server-config=standalone-full.xml ^
    %*
}}}
*Adapt the memory settings for ~JBoss in <~JBOSS_HOME>/bin/standalone.conf:
{{{
...
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms64m -Xmx768m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
 ...
}}}

!!! Installing ~JBoss as service
~JBoss 7 does not contain a windows service support out of the box. The following steps are needed to make ~JBoss a Windows service.
* Download the latest "~JBoss Web Native" at http://www.jboss.org/jbossweb/downloads/.
* unzip the bin-directory of "~JBoss Web Native" into the ~JBoss installation's bin dir:
{{{
unzip jboss-native-2.0.10-windows-x64-ssl.zip bin/* -d %JBOSS_HOME%
}}}
* modify the new %~JBOSS_HOME%\bin\service.bat:
{{{
...
set SVCNAME=JBAS71SVC
set SVCDISP=JBoss Application Server 7.1
set SVCDESC=JBoss Application Server 7.1.1 GA/Platform: Windows x64
...
:cmdStart
...
call standalone.bat < .r.lock >> run.log 2>&1
...
:cmdStop
...
call jboss-cli   --connect  command=:shutdown < .s.lock >> shutdown.log 2>&1
...
:cmdRestart
...
call jboss-cli   --connect  command=:shutdown < .s.lock >> shutdown.log 2>&1
...
call standalone.bat < .r.lock >> run.log 2>&1
...
}}}
*Install ~JBoss as service:
{{{
cd %JBOSS_HOME%\bin
service install
}}}
~JBoss is now ready to be started as service.

!!Adapt the Projango Agile installation package to your environment
*Modify the value for the HomeDir to the chosen value by changing the homeDir value in //<~JBOSS_HOME>\standalone\configuration\standalone-full.xml//:
{{{
       <config-property name="HomeDir">
         <JACKRABBIT_STORE>
       </config-property>
  <!-- e.g.:
       <config-property name="HomeDir">
         /opt/projango/jackrabbit
       </config-property>
  -->
}}}
If you use another database than ~PostgreSQL 9.1, you need to perform the following steps:
*Add a suitable ~JDBC-driver into the //<~JBOSS_HOME>/standalone/deployments//-directory.
*Extract  //~META-INF/jboss-deployment-structure.xml// from //<location of unpacked projango_package.zip>/usr/local/jboss/standalone/deployments/jackrabbit-jca-2.4.1.rar//.
*Modify the dependency to the ~JDBC-Driver to the chosen value.
{{{
...
    <dependencies>
...
          <module name="deployment.some.other.jdbc.jar" />
...
}}}
*Zip the modified //jboss-deployment-structure.xml// back into the //~META-INF//-folder of //<location of unpacked projango_package.zip>/usr/local/jboss/standalone/deployments/jackrabbit-jca-2.4.1.rar//.


!!Install Projango by copying several files to the ~JBoss installation
{{{
SET JBOSS_HOME=<JBOSS_HOME>
SET PROJANGO_INSTALL_TEMP=<location of unpacked projango_package.zip>
mkdir %JBOSS_HOME%\modules\javax\jcr\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\javax\jcr\main\jcr-2.0.jar %JBOSS_HOME%\modules\javax\jcr\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\javax\jcr\main\jcr-2.0.jar.index %JBOSS_HOME%\modules\javax\jcr\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\javax\jcr\main\module.xml %JBOSS_HOME%\modules\javax\jcr\main
mkdir %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\com\xenatec\projango\config\main\projango-repository.xml %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\com\xenatec\projango\config\main\module.xml %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\standalone\deployments\jackrabbit-jca-2.4.1.rar %JBOSS_HOME%\standalone\deployments
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\standalone\deployments\postgresql-9.1-902.jdbc4.jar %JBOSS_HOME%\standalone\deployments

mkdir %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\com\xenatec\projango\config\main\* %JBOSS_HOME%\modules\com\xenatec\projango\config\main
}}}

!!Adapt //<~JBOSS_HOME>\standalone\configuration\standalone-full.xml// for Projango Agile.
Incorporate the changes that are specified at [[Modifications in standalone-full.xml]]

!!Adapt //<~JBOSS_HOME>\standalone\configuration\standalone-full.xml// to the hardware situation.
Dependent on the underlying hardware it may be necessary to adapt the deployment-timeout of ~JBoss.
If the Application log errors like "Did not receive a response to the deployment operation within the allowed timeout period [30 seconds]." you need to increase the timeout. This is done in  //<~JBOSS_HOME>\standalone\configuration\standalone-full.xml// at the attribute """//"""subsystem[xmlns="urn:jboss:domain:deployment-scanner:1.1"]/deployment-scanner[@deployment-timeout]:
{{{
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
}}}

You can now start the ~JBoss.

When the ~JBoss has started, it will in turn start the contained Projango application. The end of the start procedure can be detected by a {{{JBAS018559: Deployed "projango-ear.ear"}}} message in //<~JBOSS_HOME>/standalone/log/server.log//.

Once the ~JBoss and the contained Projango application have started, you can enter Projango at http://yourserver:8080/ . You will be asked to setup the admin user at [[First Startup]].
*[[Project and Sprint Tree Selector]]
*[[Right Click Menu on nothing selected]]
*[[Right Click Menu on a Project]]
*[[Right Click Menu on a Sprint]]
*[[Right Click Menu on a Story]]
*[[Right Click Menu on a Task]]
*[[Chart Selector Menu]]

Projango requires the existence of several resources. These are configured in //<~JBOSS_HOME>\standalone\configuration\standalone-full.xml//
* Add a projango datasource. Under """//"""subsystem[xmlns="urn:jboss:domain:datasources:1.0"]/datasources add the section:
{{{
<xa-datasource jndi-name="java:/jdbc/projangoDatasource" pool-name="projangoDatasource_Pool"
        enabled="true" use-java-context="true" use-ccm="true">
    <xa-datasource-property name="ServerName">
	localhost
    </xa-datasource-property>
    <xa-datasource-property name="PortNumber">
	5432
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
	projango
    </xa-datasource-property>
    <xa-datasource-class>
	org.postgresql.xa.PGXADataSource
    </xa-datasource-class>
    <driver>
	postgresql-9.1-902.jdbc4.jar
    </driver>
    <xa-pool>
        <max-pool-size>
            50
        </max-pool-size>
        <prefill>
            false
        </prefill>
        <use-strict-min>
            false
        </use-strict-min>
        <flush-strategy>
            FailingConnectionOnly
        </flush-strategy>
        <pad-xid>
            false
        </pad-xid>
        <wrap-xa-resource>
            true
        </wrap-xa-resource>
    </xa-pool>
    <security>
	<user-name>
	    postgres
	</user-name>
	<password>
	    postgres
	</password>
    </security>
</xa-datasource>
}}}
If you used another password than 'postgres' for the database admin role, you will have to use your password value in this section.

* Configure messaging for the Projango JMS queues.
** Relax security for JMS queues. Under """//"""subsystem[xmlns="urn:jboss:domain:messaging:1.1"]/hornetq-server add the section:
{{{
<security-enabled>false</security-enabled>
}}}
** Add the Projango ~JMS-queues. Under """//"""subsystem[xmlns="urn:jboss:domain:messaging:1.1"]/jms-destinations add the section:
{{{
<jms-queue name="push">
    <entry name="queue/projango/push"/>
    <durable>
	true
    </durable>
</jms-queue>
<jms-queue name="computations">
    <entry name="queue/projango/computations"/>
    <durable>
	true
    </durable>
</jms-queue>
<jms-queue name="computationsDLQ">
    <entry name="queue/projango/computationsDLQ"/>
    <durable>
	true
    </durable>
</jms-queue>
}}}
** Configure the Projango ~JMS-queues. Under """//"""subsystem[xmlns="urn:jboss:domain:messaging:1.0"]/address-settings add a section in front of the section <address-setting match="#">:
{{{
<address-setting match="jms.queue.computations">
    <dead-letter-address>
	jms.queue.computationsDLQ
    </dead-letter-address>
    <expiry-address>
	jms.queue.ExpiryQueue
    </expiry-address>
    <redelivery-delay>
	60000
    </redelivery-delay>
    <max-size-bytes>
	104857600
    </max-size-bytes>
    <page-size-bytes>
	10485760
    </page-size-bytes>
    <message-counter-history-day-limit>
	10
    </message-counter-history-day-limit>
    <address-full-policy>
	PAGE
    </address-full-policy>
    <max-delivery-attempts>
	100
    </max-delivery-attempts>
</address-setting>
<address-setting match="jms.queue.push">
    <max-size-bytes>
	10485760
    </max-size-bytes>
    <message-counter-history-day-limit>
	10
    </message-counter-history-day-limit>
    <address-full-policy>
	BLOCK
    </address-full-policy>
    <max-delivery-attempts>
	0
    </max-delivery-attempts>
</address-setting>
}}}
** Make the Queues persisted. Remove the  """//"""subsystem[xmlns="urn:jboss:domain:messaging:1.0"]/persistence-enabled tag or change its value to true:
{{{
<persistence-enabled>
    true               <!-- Set to true or remove the entire persistence-enabled-tag. -->
</persistence-enabled>
}}}
** Provide a cluster password. Under the  """//"""subsystem[xmlns="urn:jboss:domain:messaging:1.0"] add the following tags:
{{{
<cluster-user>
    someuser
</cluster-user>
<cluster-password>
    someuser
</cluster-password>
}}}
* Switch of validation of archives for the ~JCA-subsystem. Under """//"""subsystem[xmlns="urn:jboss:domain:jca:1.1"] add the section:
{{{
<archive-validation enabled="false" fail-on-error="true" fail-on-warn="false"/>
}}}
* Add the resource adapter for Jackrabbit. Under """//"""subsystem[xmlns="urn:jboss:domain:resource-adapters:1.0"] add the section:
{{{
<resource-adapters>
	<resource-adapter>
	    <archive>
		jackrabbit-jca-2.4.1.rar
	    </archive>
	    <transaction-support>
		XATransaction
	    </transaction-support>
	    <connection-definitions>
		<connection-definition class-name="org.apache.jackrabbit.jca.JCAManagedConnectionFactory"
			jndi-name="java:/jca/projango" enabled="true" use-java-context="true"
			pool-name="jackrabbit-jca-2_4_1_rar-Pool" use-ccm="true">
			     <config-property name="HomeDir">
				 /opt/projango/jackrabbit    <!--  Enter your value of <JACKRABBIT_STORE> here. -->
			     </config-property>
			     <config-property name="ConfigFile">
				 classpath:projango-repository.xml
			     </config-property>
                            <config-property name="BindSessionToTransaction">
                                true
                            </config-property>
                            <xa-pool>
                                <min-pool-size>3</min-pool-size>
                                <max-pool-size>50</max-pool-size>
                                <prefill>true</prefill>
                                <use-strict-min>true</use-strict-min>
                            </xa-pool>
		</connection-definition>
	    </connection-definitions>
	</resource-adapter>
</resource-adapters>
}}}

* Add the login-Module for Projango. Under """//"""subsystem[xmlns="urn:jboss:domain:security:1.1"]/security-domains add the section:
{{{
<security-domain name="projango" cache-type="default">
    <authentication>
	<login-module code="org.jboss.security.auth.spi.LdapLoginModule" flag="required">
	    <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
	    <module-option name="java.naming.provider.url" value="ldap://127.0.0.1:10389"/>
	    <module-option name="java.naming.security.authentication" value="simple"/>
	    <module-option name="java.naming.security.principal" value="uid=admin,ou=system"/>
	    <module-option name="java.naming.security.credentials" value="secret"/>
	    <module-option name="principalDNSuffix" value=", ou=users, ou=system"/>
	    <module-option name="principalDNPrefix" value="cn="/>
	    <module-option name="uidAttributeID" value="roleOccupant"/>
	    <module-option name="roleAttributeID" value="cn"/>
	    <module-option name="rolesCtxDN" value="ou=roles, ou=system"/>
	    <module-option name="matchOnUserDN" value="true"/>
	    <module-option name="roleAttributeIsDN" value="false"/>
	</login-module>
	<login-module code="org.jboss.security.ClientLoginModule" flag="required">
	    <module-option name="restore-login-identity" value="true"/>
	</login-module>
    </authentication>
</security-domain>
}}}
** Allow public access to Projango Agile.  Modify the /server/interfaces section to your needs:
{{{
<interfaces>
    <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
    </interface>
    <interface name="public">
        <any-address/>
   </interface>
</interfaces>
}}}
** Set Projango Agile as default web module. Set projango as default web module attribute at profile/subsystem[@xmlns="urn:jboss:domain:web:1.1"]/connector/virtual-server :
{{{
        <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
            <virtual-server name="default-host" default-web-module="projango">
                <alias name="localhost"/>
            </virtual-server>
        </subsystem>
}}}

** Modify logging to separate noisy third-party-logs and to prevent from passwords leaking into the log file. Modify /profile/subsystem[@xmlns="urn:jboss:domain:logging:1.1"]:
{{{
        <subsystem xmlns="urn:jboss:domain:logging:1.1">
...
            <periodic-rotating-file-handler name="JCR_FILE" autoflush="true">
                <level name="ALL"/>
                <file relative-to="jboss.server.log.dir" path="jcr.log"/>
                <suffix value="yyyy-MM-dd"/>
                <append value="true"/>
            </periodic-rotating-file-handler>
...
            <logger category="org.apache.jackrabbit.core.ItemSaveOperation" use-parent-handlers="false">
                <level name="ERROR"/>
                <handlers>
                    <handler name="JCR_FILE"/>
                </handlers>
            </logger>
            <logger category="org.apache.jackrabbit.spi.commons.nodetype.constraint" use-parent-handlers="false">
                <level name="ALL"/>
                <handlers>
                    <handler name="JCR_FILE"/>
                </handlers>
            </logger>
            <logger category="org.apache.directory.server.core.authn" use-parent-handlers="false">
                <level name="WARN"/>
                <handlers>
                    <handler name="FILE"/>
                </handlers>
            </logger>
...
        </subsystem>
}}}
** Dependent of the underlying hardware it may be necessary to adapt the deployment-timeout of ~JBoss.
{{indent{
If the Application log errors like "Did not receive a response to the deployment operation within the allowed timeout period [30 seconds]." you need to increase the timeout. This is done at the attribute """//"""subsystem[xmlns="urn:jboss:domain:deployment-scanner:1.1"]/deployment-scanner[@deployment-timeout]:
}}}
{{{
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
}}}
!Operation and maintenance of a Projango system
Xenatec strongly advises to regularly backup a Projango system; [[a basic backup script|projango_backup.sh]] and [[a basic restore script|projango_restore.sh]] accompanied by [[a configuration file|projango_operation_config.sh]] come with this user guide.
''Note:'' depending on the configuration of your system an adaption of the postgreSQL access rules may be necessary for successful backups and restores.
''Note:'' depending on the configuration of your system an adaption of the backup deposit location may be necessary.
Projango utilizes several persistence frameworks, the following chapters describe the correct way to handle the persisted data for all persistence frameworks used.
*[[Backup]]
*[[Restore]]
*[[Reset]]
In case of an inconsistent repository several repair measurements are available:
*[[Consistency check]]
*[[Consistency repair]]
*[[Rebuilding the Jackrabbit index]]
*[[Async Compute check|AsyncComputeCheck]]

!Adapting timeouts
Depending on the system on which Projango is installed it may be necessary to increase timeout values for the Projango application.
!!Default timeout
The default ~JBoss-wide timeout can be changed by modifiying the """//"""subsystem[@xmlns="urn:jboss:domain:transactions:1.1"]/coordinator-environment@default-timeout value, given in seconds, in //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml//
{{{
...
        <subsystem xmlns="urn:jboss:domain:transactions:1.1">
...
            <coordinator-environment default-timeout="600"/>
...
}}}
!!Consistency check, migration postprocessing, report generation
These timeouts can be changed by uncommenting the associated sections in //<~JBOSS_HOME>/standalone/deployments/projango-ear.ear!/projango-ejb.jar!/~META-INF/jboss-ejb3.xml// (meaning: inside the .jar that is inside the .ear)
{{{
		<!-- Consistency check
		-->
		<container-transaction>
...
			<tx:trans-timeout>
				<tx:timeout>72000</tx:timeout>
				<tx:unit>Seconds</tx:unit>
			</tx:trans-timeout>
		</container-transaction>
...
}}}
!Configuration
Projango allows you to turn off the up-to-date checks by changing the upToDateCheckEnabled-entry in //<~JBOSS_HOME>/modules/com/xenatec/projango/config/main/projango-client.properties//:
{{{
...
# Should the Projango clients perform an up-to-date check?
upToDateCheckEnabled=false
...
}}}
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::HeaderLight]] [[ColorPalette::HeaderDark]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<!--
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
-->
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
!Contents
*[[About Projango Agile]]
*[[Installation]]
*[[Update]]
*[[First Startup]]
*[[Scrum Taskboard]]
*[[FAQ]]
*[[Short Cuts]]
*[[Operation]]
*[[Latest Changes]]
*[[Software License Agreements]]
*[[Credits & Licenses]]
[[Download this user guide|ProjangoUserGuide.zip]]
[img[The Project Backlog|images/product/Projango Agile - Backlog.png]]

The Project Backlog has three tabs.
*The Backlog tab contains all stories of the project which are planned and not assigned to a sprint.
*The Active tab contains all stories of the project which are currently assigned to sprints and not closed.
*The Closed tab contains all stories of the project which are closed.

In the backlog tab it is possible to assign a sprint to a an active iteration which has the state {{constant{New}}} or {{constant{In Progress}}}.

The content of each list can be customized, the customization can be saved by the button in the toolbar.

Sorting or grouping the items in the open backlog will automatically disable Drag & Drop.

The stories can be expanded to also get the list of tasks of a story inside the list.
!Project Overview
[img[Project Overview|images/product/Projango Agile - Project Overview.png]]

The Overview tab contains the major settings of a project.

!Project Details
[img[Project Details|images/product/Projango Agile - Project Details.png]]

The Details tab contains additional, less frequently used settings.

By setting the Archived State to {{constant{Archived}}} the project will be made unreachable via the Sprint Selector in the Scrum Board Toolbar.

If the default note color is set to a specific value the left border of story notes and task notes gets colored in this color.

If the default note text color is set to a specific value the text inside the left border section of story notes or task notes gets colored in this color.

Activating the service class support enables an additional setting on stories. It is then possible to give the stories Kanban-like story classes. All stories with an unset service class will have the service class {{constant{Standard}}}. The service class is then also shown at the [[Story Line]] and [[Story Note]].

!Project Info
[img[Project Info|images/product/Projango Agile - Project Info.png]]

The Info tab contains some generated and non editable data of the project.

!Project Relations
[img[Project Relations|images/product/Projango Agile - Project Relations.png]]

The Relations tab lists all relations of the project to other work items.

!Project Sprint Planning
[img[Project Sprint Planning|images/product/Projango Agile - Project Sprint Planning.png]]

The Sprint Planning tab lists all sprints of the current project. Sprints can be added or edited via the right click menu or by a double click on an existing sprint; the details editor for the added or existing sprint then opens. More details about the sprint details editor are provided on the special [[Sprint Details Editor]] page.

The content of the list can be customized, the customization can be saved by the button in the toolbar.

Sorting or grouping the items will automatically disable Drag & Drop. !Project Backlog

[img[Project Backlog|images/product/Projango Agile - Project Sprint Backlog.png]]

The Project Backlog lists the stories of the project which are planned, active  or closed. More details about the backlog are provided on the special [[Project Backlog]] page.
!Overview
[img[Project Planning|images/product/Projango Agile - Project Planning.png]]

The Project Planning window provides a list of all projects inside Projango Agile. To add an additional project use the toolbar button or the right click menu. To edit an existing project a double click on the project can be used as well as the right click menu. The [[details editor for the project|Project Details Editor]] then opens.

The content of the list can be customized, the customization can be saved by the button in the toolbar.

Sorting or grouping the items will automatically disable Drag & Drop. 
[img[The Sprint Selector|images/product/Projango Agile - Sprint Selector.png]]

With the sprint tree selector the selection of the taskboard content is controled.

When selecting a project currently an empty area gets shown on the board; the right click menu changes to [[Right Click Menu on a Project]] and the project related toolbar buttons are activated.

When selecting a sprint the sprint data gets loaded. The right click menu changes to [[Right Click Menu on a Sprint]] and the sprint related toolbar buttons are activated.

If cookies are allowed in the browser the last selected project or sprint will be loaded automatically after a reload.

The Jackrabbit repository used by Projango has a file-based index. In case of an index inconsistency a manual rebuild of this index must be triggered:
*Shutdown the application server
*Remove the directory /opt/projango/jackrabbit/repository/index
*Remove the directory /opt/projango/jackrabbit/workspaces/default/index
*Start the application server
The first access to Projango will trigger an automatic buildup of the index, which, depending on the size of the repository, can take several minutes or hours.
!Resetting a Projango system
In order to reset a Projango installation to its initial empty state, the following steps must be taken:
*Drop and create the postgres database:
{{{
su -c "psql -c \"drop DATABASE projango \"" ${POSTGRES_USER}
su -c "psql -c \"CREATE DATABASE projango  WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;\"" ${POSTGRES_USER}
}}}
*Clear the Jackrabbit files
{{{
rm -r /opt/projango/jackrabbit/*
}}}
*Clear the ~LDAP-files in the ~JBoss work directory:
{{{
rm -r /usr/local/jboss/standalone/tmp/work/jboss.web/default-host/projango-directory/*
}}}
*Clear the ~JMS journal of the ~JBoss:
''Note'': If Projango shares ~JBoss with other applications, their JMS message may also be destroyed with this operation. If you choose to leave out clearing the JMS journal, Projango may log errors about non-handleable messages. These messages will not threaten the consistency of Projango data.
{{{
rm -r /usr/local/jboss/standalone/data/messagingjournal
}}}
!Connection pools
To allow simultaneous client requests to be processed, Projango needs adequately sized connection pools.
Recommended are at least 5 connections for each user requesting in parallel.
These values get configured at two places in //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml//
* At the projango datasource. Under """//"""subsystem[xmlns="urn:jboss:domain:datasources:1.0"]/datasources/xa-datasource[jndi-name="jdbc/projangoDatasource"] add or modify the <xa-pool> section:
{{{
<xa-datasource jndi-name="java:/jdbc/projangoDatasource" pool-name="projangoDatasource_Pool"
        enabled="true" use-java-context="true" use-ccm="true">
...
	<xa-pool>
	    <max-pool-size>
		50
	    </max-pool-size>
	    <prefill>
		false
	    </prefill>
	    <use-strict-min>
		false
	    </use-strict-min>
	    <flush-strategy>
		FailingConnectionOnly
	    </flush-strategy>
	    <pad-xid>
		false
	    </pad-xid>
	    <wrap-xa-resource>
		true
	    </wrap-xa-resource>
	</xa-pool>
...
</xa-datasource>
}}}
* At the resource adapter for Jackrabbit. Under """//"""subsystem[xmlns="urn:jboss:domain:resource-adapters:1.0"]/resource-adapters/resource-adapter modify the max-pool-size section for the Jackrabbit resource adapter:
{{{
<resource-adapters>
	<resource-adapter>
...
	    <connection-definitions>
		<connection-definition class-name="org.apache.jackrabbit.jca.JCAManagedConnectionFactory"
			jndi-name="java:/jca/projango" enabled="true" use-java-context="true"
			pool-name="jackrabbit-jca-2_4_1_rar-Pool" use-ccm="true">
                            <config-property name="HomeDir">
                             /opt/projango/jackrabbit
                            </config-property>
                            <config-property name="ConfigFile">
                             classpath:projango-repository.xml
                            </config-property>
                            <config-property name="BindSessionToTransaction">
                                true
                            </config-property>
                            <xa-pool>
                                <min-pool-size>3</min-pool-size>
                                <max-pool-size>50</max-pool-size>
                                <prefill>true</prefill>
                                <use-strict-min>true</use-strict-min>
                            </xa-pool>
		</connection-definition>
	    </connection-definitions>
	</resource-adapter>
</resource-adapters>
}}}
!~EJB3 Threads
Projango processes several technical and business tasks in the background. Projango needs an adequate amount of ~EJB3 threads, to work properly.
Should you encounter log messages of the kind {{{javax.ejb.EJBTransactionRolledbackException: JBAS014516: Failed to acquire a permit within 5 MINUTES}}}, we recommend to increase the maximum of these threads. 
This value gets configured in //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml//
* At the projango datasource. Under """//"""subsystem[xmlns="urn:jboss:domain:ejb3:1.2"]/thread-pools/thread-pool[@name="default"]/max-threads:
{{{
<subsystem xmlns="urn:jboss:domain:ejb3:1.2">
...
            <thread-pools>
                <thread-pool name="default">
                    <max-threads count="20"/>
...
}}}
!Restore of a Projango system
In order to restore a previous backup, the following steps must be taken while the ~JBoss is stopped:

*Drop, create and restore the postgres database:
{{{
su -c "psql -c \"drop DATABASE projango \"" ${POSTGRES_USER}
su -c "psql -c \"CREATE DATABASE projango WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;\"" ${POSTGRES_USER}
su -c "pg_restore -d projango < ${RESTORE_LOCATION}projango.backup" ${POSTGRES_USER}
}}}
*Replace the Jackrabbit-files as jboss user:
{{{
rm -r /opt/projango/jackrabbit/*
cd /opt/projango/jackrabbit
unzip ${RESTORE_LOCATION}projango_jackrabbit.zip
}}}
*Replace the ~LDAP-files in the ~JBoss work directory as jboss user:
{{{
rm -r /usr/local/jboss/standalone/tmp/work/jboss.web/default-host/projango-directory/*
cp -r ${RESTORE_LOCATION}/ldap-backup/* /usr/local/jboss/standalone/tmp/work/jboss.web/default-host/projango-directory/
}}}
When relocating a Projango installation by restoring a backup it may be necessary to modify the connection string to the postgres database in the following set of files:
*/usr/local/jboss/standalone/deployments/jackrabbit-jca-2.4.1.rar!/~META-INF/ra.xml (meaining: inside the rar-file)
*/opt/projango/jackrabbit/repository.xml
*/opt/projango/jackrabbit/workspaces/default/workspace.xml
Projango allows the retrofitting of single values of a workitem: the workitem will adopt the currently given value for all it's history.
{{rightpad{[<img[Menu on Project selected|images/product/Projango Agile - Menu Project.png]]}}}
|!Menu Item|!Function|h
|Add Sprint|Opens the [[Sprint Details Editor]] to create a new sprint.|
|Sprint Planning|Opens the [[Sprint Planning]] window.|
|Backlog|Opens the [[Project Backlog]] window.|
|Add Project|Opens the [Project Details Editor] to create a new project.|
|Project Planning|Opens the [[Project Planning]] window.|
|Create Project PDF Report|Creates a PDF document with all project information inside.|
{{rightpad{[<img[Menu on Sprint selected|images/product/Projango Agile - Menu Sprint.png]]}}}
|!Menu Item|!Function|h
|Add Story|At the Taskboard a new [[Story Line]] and [[Story Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Story Details Editor]] to create a new story.|
|Sprint Dashboard|Opens the [[Sprint Dashboard]] window.|
|Burndown Chart|Opens the [[Sprint Burndown Chart]] window.|
|Edit Sprint|Opens the [[Sprint Details Editor]] to edit the sprint data.|
|Sprint Planning|Opens the [[Sprint Planning]] window.|
|Backlog|Opens the [[Project Backlog]] window.|
|Create Sprint Excel Report|Creates a Microsoft Excel document with sprint data and statistics inside.|
|Create Sprint PDF Report|Creates a PDF document with all sprint information inside.|
{{rightpad{[<img[Menu on Story selected|images/product/Projango Agile - Menu Story.png]]}}}
|!Menu Item|!Function|h
|Add Task|At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Task}}} is preselected.|
|Add Urgent Task|At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Urgent Task}}} is preselected.|
|Add Bug|At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Bug}}} is preselected.|
|Add Enhancement|At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Enhancement}}} is preselected.|
|Add Call|At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Call}}} is preselected.|
|Add Test|At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Test}}} is preselected.|
|Add Note|At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Note}}} is preselected.|
|Add Impediment |At the Taskboard a new [[Task Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Task Details Editor]] to create a new story. The task characteristic {{constant{Impediment}}} is preselected.|
|Comments|Opens the [[Comments Window]].|
|Acceptance Criteria|Opens the [[Acceptance Criteria Window]].|
|Web Links|Opens the [[Web Links Window]]. If there are already web links available these can be directly used by opening the submenu.|
|Add Story|At the Taskboard a new [[Story Line]] and [[Story Note]] is directly added and opened for quick editing. Anywhere else this opens the [[Story Details Editor]] to create a new story.|
|Edit Story Details|Opens the [[Story Details Editor]] to edit the story data.|
|Remove from Sprint|Removes the story from the sprint and put it back to the [[Project Backlog]].|
|Assign to Sprint|Opens a sprint selector window to choose the sprint to which the story should directly be assigned. If a story is already assigned to another sprint it is removed from that current sprint.|
|Copy to Backlog|A copy of the current story is newly created with all unresolved or deferred tasks. The completed or canceled tasks are not copied. Time registration information also does not get copied. This function can be used to easily move unresolved work from one sprint to the next.|
|Delete Story|The story is deleted from the system and will not be available anymore.|
|Create Story PDF Report|Creates a PDF document with all story information inside.|
{{rightpad{[<img[Menu on Task selected|images/product/Projango Agile - Menu Task.png]]}}}
|!Menu Item|!Function|h
|Comments|Opens the [[Comments Window]].|
|Acceptance Criteria|Opens the [[Acceptance Criteria Window]].|
|Web Links|Opens the [[Web Links Window]]. If there are already web links available these can be directly used by opening the submenu.|
|Time Registrations|Opens the [[Time Registrations Window]].|
|Add Story|At the Taskboard a new [[Story Line]] and [[Story Note]] are directly added and opened for quick editing. Anywhere else this opens the [[Story Details Editor]] to create a new story.|
|Edit Task Note|Opens the [[Task Note]] for the quick edit mode.|
|Edit Task Details|Opens the [[Task Details Editor]] to edit the task data.|
|Delete Task|The task is deleted from the system and will not be available anymore.|
|Create Task PDF Report|Creates a PDF document with all task information inside.|
{{rightpad{[<img[Menu on nothing selected|images/product/Projango Agile - Menu None.png]]}}}
|!Menu Item|!Function|h
|Add Project|Opens the [[project detail editor|Project Planning]] to create a new project.|
|Project Planning|Opens the [[Project Planning]] window.|
!Overview

[img[Toolbar 1|images/product/Projango Agile -Scrumboard Overview with pointers.png]]

|!No|!Function|h
|1|The [[Toolbar]]|
|2|The Newsticker|
|3|The Task State Columns|
|4|The [[Story Line]]|
|5|The [[Story Note]]|
|6|The [[Task Note]]|

!Purpose of the Projango Agile Scrum Taskboard
If you are familiar with Scrum and you have your physical taskboard in your office then you should see a lot of parallels between your taskboard and Projango Agile. The idea behind Projango Agile is to have the same look and feel and the same user experience you have on a physical taskboard combined with all the benefits of an electronic system.

You have your usual story and task notes, your state colums and your story lines. You can update a lot of information directly on the notes via an easy quick edit mechanism without leaving the board or having to work with some inconvenient forms. To change the state of a task note or the story order simply use the drag and drop mechanism. Projango Agile will automatically detect significant changes and performs some additional settings like setting the owner for you. If the possibilities of the quick edit feature are not sufficient, you can additionally open a detail editor for less frequently used settings.

All changes you make on your personal board are immediately updated on all other open task boards, statistics get updated on the fly. That allows you to work with distributed teams on a shared board. Combine it with a phone or video conference to do your daily standup meeting or put the dashboard on a screen in the office to always have your current sprint status visible.

!Features of the Projango Agile Scrum Taskboard
[1] At the top of taskboard we have the toolbar. Most of the elements of the toolbar are sprint related and get activated when a sprint is selected via the tree selector. When only a project is selected only the project related features are activated. More details about the toolbar are available on the special [[Toolbar]] page.
[2] The second element of the taskboard is the newsticker. The newsticker shows some information about the Sprint and reminds you about how long the Sprint will still run.
[3] As in a physical taskboard also in Projango Agile the first column is reserved for the Story Notes. Additional to the usual task states {{constant{To Do}}}, {{constant{In Progress}}} and {{constant{Completed}}} there are the states {{constant{Ready To Verify}}}, {{constant{Verifying}}}, {{constant{Canceled}}} and {{constant{Deferred}}}.
[4] The story line contains some overview information about the story. With the story line the stories of the sprint can be reordered by a simple drag and drop action. More details about the story line are available on the special [[Story Line]] page.
[5] The story note contains the information about a story. The story note is by default displayed in a small format which only shows the essential information. By a simple double click it is possible to also display some detailed information. More details about the story note are available on the special [[Story Note]] page.
[5] The task note contains the information about a task. The task note is by default displayed in a small format which only shows the essential information. By a simple double click it is possible to also display some detailed information. More details about the task note are available on the special [[Task Note]] page.

!Work with the Projango Agile Scrum Taskboard
On a fresh installation Projango Agile provides some wizards for an easy start. With the wizards you are able to create some users, a first project and a first sprint. More details are available at the [[First Startup]] page. If there is already a project or sprint available, you can select the project or sprint via the tree selector at the toolbar.

If a sprint is loaded you can use the right click menu to create a new story directly at the board. A new story line then gets created and the story note is opened for editing. Type in the name of the story and maybe a more detailed description. With a click on the owner icon you can select the owner of the story. With a click on the estimation you can give the story an estimation. With a click on the story number you can select a priority. Save the story via the shown icon menu inside the story note.

Now you are ready to add some tasks to the story. Use the right click menu again to create a task. The workflow is exactly the same as it was for a story. By saving the task note the estimation is also used as the initial estimation of a task. After the save action you can see that the calculated values of the story line and story note are immediately updated.

You can always reorder the stories via drag and drop on the story line or story note. If you have created some stories which you do not want to have in your sprint you can move them into the project backlog via the right click menu. If you want to split a story you can simply create an additional one and move tasks via drag and drop from one story to another.

When you have added all your stories and tasks and you are satisfied with your story order, the sprint planning is over and you are able to start your sprint by opening the sprint details via the icon in the toolbar and set the sprint in progress. That's all, now you are ready to work with your first sprint.

!Additional Chapters
*[[First Startup]]
*[[Login]]
*[[Project Planning]]
*[[Project Backlog]]
*[[Project Details Editor]]
*[[Sprint Planning]]
*[[Sprint Details Editor]]
*[[Story Details Editor]]
*[[Task Details Editor]]
*[[User Management]]
*[[User Details Editor]]
*[[Toolbar]]
*[[Story Line]]
*[[Story Note]]
*[[Task Note]]
*[[List Behavior]]
*[[Menus]]
*[[About Dialog]]
*[[License Manager]]
*[[Up-to-date Check]]
*[[Charts]]
*[[Comments Window]]
*[[Acceptance Criteria Window]]
*[[Web Links Window]]
*[[Time Registrations Window]]
!Steps to follow to setup Projango on an Ubuntu Server 12.04 System
!! A word on security concerns
This installation procedure is suited for a trusted environment. To set up a more secure system [[other guides|http://www.linuxsecurity.com/resource_files/host_security/securing-debian-howto/ch-sec-services.en.html]] are recommended.

!!Precondition
*This description requires an unmodified ~JBoss 7.1.1.
*The following description uses several placeholders to note several filesystem locations, which default to the following:
|!Placeholder|!Default value|h
|<~JBOSS_HOME>|///usr/local/jboss//|
|<~JACKRABBIT_STORE>|///opt/projango/jackrabbit//|
|<location of unpacked projango_package.zip>|///tmp/projango-install//|
|Placeholders for installation description|c
If these preconditions are not met, you need to follow the [[Manual Setup Ubuntu Server 12.04 with Projango]].

!!Installation on a freshly installed Ubuntu 12.04 server system
If Projango should be setup on a freshly installed Ubuntu 12.04 server, the script {{{install_on_fresh_ubuntu_12.04_server.sh}}} provided with the installation package can be used. Be aware that this script does not check for potential third-party data or programs, using this script is therefore not recommended when you already have modified the Ubuntu installation.

!! Linux setup
Select Postgres 9.1 and ~OpenSSH to install on setup time.

This guide describes how to set up ~JBoss running as non-priviledged user, so it cannot bind to port 80. If you wish to reach Projango under the standard http port 80, this can for example be achieved by adapting the iptables of your linux network configuration. 

!!User setup
*Create an admin user 'administrator' with the installation
*Create an jboss user 'jboss' and set the homedir and the default shell
{{{
sudo useradd -d /usr/local/jboss -s /bin/sh jboss
}}}
*Attention! Do not set a password for the 'jboss' user
* Reset the postgres user password
{{{
sudo passwd -d postgres
sudo su postgres -c passwd
}}}

!!Install Oracle Java 6 JDK
It is necessary to install the JDK for using ~JBoss.
*Either follow Oracle's instructions
*Or you might want to give oab-java a try:
** Use [[Martin Wimpress' oab-java.sh|https://github.com/flexiondotorg/oab-java6]] to prepare the next step
** Now we can install the Java Runtime with <html><pre>
apt-get install sun-java6-jdk
</pre></html>
!!Configure ~PostgreSQL
*Adapt the linux kernel shmmax value to fit postgres' needs (41943040 or more) by editing /etc/sysctl.d/30-postgresql-shm.conf:
{{{
sudo vi /etc/sysctl.d/30-postgresql-shm.conf
....
kernel.shmmax = 41943040
}}}
*Apply this modification by running:
{{{
sudo sysctl -p  /etc/sysctl.d/30-postgresql-shm.conf
}}}
*Start the postgres server:
{{{
sudo /etc/init.d/postgresql start
}}}
*Set the listening address range by editing the file /etc/postgresql/9.1/main/postgresql.conf
{{{
sudo vi /etc/postgresql/9.1/main/postgresql.conf
....
listen_addresses = '*'
}}}
*Set the client authentication by adding the following line to the file /etc/postgresql/9.1/main/pg_hba.conf (you need to adjust the subnet mask to your actual network).
{{{
sudo vi /etc/postgresql/9.1/main/pg_hba.conf
...
host    all         all         192.168.0.0/16        md5
}}}

''Note:'' After changing the access configuration it is necessary to reload the postgres service.
*We have to do the following {{{psql}}}-calls as user 'postgres'
{{{
su postgres
}}}
*Change the database admin password to a known value:
{{{
psql -c "ALTER ROLE postgres  WITH PASSWORD 'DBAdminPasswort';"
}}}
''Note:'' The Projango installation package comes with the password 'postgres' preconfigured. If you choose another password, an adaptation will be needed in a later step of this installation.

*Create the Projango database:
{{{
psql -c "CREATE DATABASE projango  WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;"
}}}
*Enable prepared statements. This is done by setting max_prepared_transactions to a value greater than 0 in postgresql.conf. The ~PostgreSQL documentation recommends to set it at least to the value of max_connections, which in turn defaults to 100:
{{{
sudo vi /etc/postgresql/9.1/main/postgresql.conf
...
max_prepared_transactions = 100
}}}
A restart of ~PostgreSQL is required to make this change effective.

!!! Configure database connection
When installing the Database and the application server on different machines, you need to reconfigure the connection configuration of Projango.
To this end replace the preconfigured connection string {{{"jdbc:postgresql://localhost:5432/projango"}}} as needed in the following files:
* /tmp/projango-install/opt/projango/jackrabbit/workspaces/default/workspace.xml
* /tmp/projango-install/usr/local/jboss/modules/com/xenatec/projango/config/main/projango-repository.xml
!!! Note
Jackrabbit copies contents of projango-repository.xml into its own location. When relocating the database of a Projango installation it is necessary to modify the connection string in an extended set of files:
*/usr/local/jboss/modules/com/xenatec/projango/config/main/projango-repository.xml
*/opt/projango/jackrabbit/repository.xml
*/opt/projango/jackrabbit/workspaces/default/workspace.xml

!!Install the unzip tool
{{{
apt-get install unzip
}}}

!!Install the ~JBoss Server:
*Get and unzip the file jboss-as-7.1.1.Final.zip to /usr/local. Change the owner to the jboss user and create a short symbolic link:
{{{
cd /tmp
wget http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip
sudo unzip /tmp/jboss-as-7.1.1.Final.zip -d /usr/local
sudo chown -R jboss:jboss /usr/local/jboss-as-7.1.1.Final
sudo ln -s /usr/local/jboss-as-7.1.1.Final /usr/local/jboss
}}}
*Setup configuration for ~JBoss and integrate ~JBoss into the init system:
{{{
PROJANGO_INSTALL_TEMP=/tmp/projango-install

sudo mkdir /etc/jboss-as
sudo cp $PROJANGO_INSTALL_TEMP/etc/jboss-as/jboss-as.conf /etc/jboss-as/jboss-as.conf

sudo cp $PROJANGO_INSTALL_TEMP/etc/init.d/jboss /etc/init.d/jboss
sudo chmod a+x /etc/init.d/jboss
sudo update-rc.d jboss defaults
}}}
*Adapt the memory settings for ~JBoss in /usr/local/jboss/bin/standalone.conf:
{{{
...
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms64m -Xmx768m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
 ...
}}}
!!Configure Jackrabbit
*Create a jackrabbit data store:
{{{
sudo mkdir -p /opt/projango/jackrabbit
sudo chown -R jboss:jboss /opt/projango
}}}

!!Install Projango by copying several files to the ~JBoss installation
{{{
JBOSS_HOME=/usr/local/jboss
PROJANGO_INSTALL_TEMP=/tmp/projango-install
sudo -u jboss mkdir -p $JBOSS_HOME/modules/javax/jcr/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/modules/javax/jcr/main/jcr-2.0.jar $JBOSS_HOME/modules/javax/jcr/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/modules/javax/jcr/main/module.xml $JBOSS_HOME/modules/javax/jcr/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/deployments/jackrabbit-jca-2.4.1.rar $JBOSS_HOME/standalone/deployments
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/deployments/postgresql-9.1-902.jdbc4.jar $JBOSS_HOME/standalone/deployments
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/deployments/projango-ear.ear $JBOSS_HOME/standalone/deployments

sudo -u jboss mkdir -p $JBOSS_HOME/modules/com/xenatec/projango/config/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/modules/com/xenatec/projango/config/main/* $JBOSS_HOME/modules/com/xenatec/projango/config/main
sudo -u jboss cp $PROJANGO_INSTALL_TEMP/usr/local/jboss/standalone/configuration/standalone-full.xml $JBOSS_HOME/standalone/configuration
}}}
!!Adapt <~JBOSS_HOME>/standalone/configuration/standalone-full.xml to the chosen password for the postgres database admin.
If you used another password than 'postgres' for the database admin role (that was done with {{{psql -c "ALTER ROLE postgres ...}}} above), you will have to adapt the preconfigured value in //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// at the attribute """//"""subsystem[xmlns="urn:jboss:domain:datasources:1.0"]/datasources/xa-datasource[@jndi-name="java:/jdbc/projangoDatasource"]/security/password:
{{{
<password>yourpassword</password>
}}}
!!Adapt <~JBOSS_HOME>/standalone/configuration/standalone-full.xml to the hardware situation.
Dependent on the underlying hardware it may be necessary to adapt the deployment-timeout of ~JBoss.
If the Application log errors like "Did not receive a response to the deployment operation within the allowed timeout period [30 seconds]." you need to increase the timeout. This is done in  //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// at the attribute """//"""subsystem[xmlns="urn:jboss:domain:deployment-scanner:1.1"]/deployment-scanner[@deployment-timeout]:
{{{
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
}}}

You can now start the ~JBoss.
{{{
  sudo /etc/init.d/jboss start
}}}

When this command has finished, the ~JBoss will in turn start the contained Projango application. The end of the start procedure can be detected by a {{{JBAS018559: Deployed "projango-ear.ear"}}} message in //<~JBOSS_HOME>/standalone/log/server.log//.

Once the ~JBoss and the contained Projango application have started, you can enter Projango at http://yourserver:8080/ . You will be asked to setup the admin user at [[First Startup]].
!These are the steps to follow to setup Projango on a Windows 7 System
!!A word on security concerns
This installation procedure is suited for a trusted environment. To set up a more secure system other guides are recommended.
!!Precondition
*This description requires an unmodified ~JBoss 7.1.1.
*The following description uses several placeholders to note several filesystem locations, which default to the following:
|!Placeholder|!Default value|h
|<~JBOSS_HOME>|//P:\usr\local\jboss//|
|<~JACKRABBIT_STORE>|//P:\opt\projango\jackrabbit//|
|<location of unpacked projango_package.zip>|//P:\tmp\projango-install//|
|Placeholders for installation description|c
If these preconditions are not met, you need to follow the [[Manual Setup on Windows 7 with Projango]].

!!User setup
Create an user which will be running the application server and perform the rest of the installation process as that user.
!!Install Oracle Java 7 SDK
Install the Java SDK as the user created in the previous chapter.
!!Configure ~PostgreSQL
Install ~PostgreSQL 9.1.
*Create the Projango database by executing the following ~SQL-statement in pgAdmin:
{{{
CREATE DATABASE projango  WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;
}}}
*Enable prepared statements. This is done by setting max_prepared_transactions to a value greater than 0 in <~POSTGRES_INSTALLATION>/9.1/data/postgresql.conf. The ~PostgreSQL documentation recommends to set it at least to the value of max_connections, which in turn defaults to 100:
{{{
max_prepared_transactions = 100
}}}
A restart of ~PostgreSQL is required to make this change effective.

!!Install the ~JBoss Server:

''Note:'' Projango needs "~JBoss AS 7", the "~JBoss AS 7 Web" will not suffice.
Unzip the file //jboss-as-7.1.1.Final.zip// to <~JBOSS_HOME>.

Projango needs the ~JBoss 7 server to be started with the standalone-full-configuration.
Therefore add a line to <~JBOSS_HOME>/bin/standalone.bat, setting """--"""server-config=standalone-full.xml:
{{{
"%JAVA%" %JAVA_OPTS% ^
 "-Dorg.jboss.boot.log.file=%JBOSS_LOG_DIR%\boot.log" ^
 "-Dlogging.configuration=file:%JBOSS_CONFIG_DIR%/logging.properties" ^
    -jar "%JBOSS_HOME%\jboss-modules.jar" ^
    -mp "%JBOSS_MODULEPATH%" ^
    -jaxpmodule "javax.xml.jaxp-provider" ^
     org.jboss.as.standalone ^
    -Djboss.home.dir="%JBOSS_HOME%" ^
    --server-config=standalone-full.xml ^
    %*
}}}
*Adapt the memory settings for ~JBoss in <~JBOSS_HOME>/bin/standalone.conf:
{{{
...
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms64m -Xmx768m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
 ...
}}}

!!! Installing ~JBoss as service
~JBoss 7 does not contain a windows service support out of the box. The following steps are needed to make ~JBoss a Windows service.
* Download the latest "~JBoss Web Native" at http://www.jboss.org/jbossweb/downloads/.
* unzip the bin-directory of "~JBoss Web Native" into the ~JBoss installation's bin dir:
{{{
unzip jboss-native-2.0.10-windows-x64-ssl.zip bin/* -d %JBOSS_HOME%
}}}
* modify the new %~JBOSS_HOME%\bin\service.bat:
{{{
...
set SVCNAME=JBAS71SVC
set SVCDISP=JBoss Application Server 7.1
set SVCDESC=JBoss Application Server 7.1.1 GA/Platform: Windows x64
...
:cmdStart
...
call standalone.bat < .r.lock >> run.log 2>&1
...
:cmdStop
...
call jboss-cli   --connect  command=:shutdown < .s.lock >> shutdown.log 2>&1
...
:cmdRestart
...
call jboss-cli   --connect  command=:shutdown < .r.lock >> shutdown.log 2>&1
...
call standalone.bat < .r.lock >> run.log 2>&1
...
}}}
*Install ~JBoss as service:
{{{
cd %JBOSS_HOME%\bin
service install
}}}
~JBoss is now ready to be started as service.

!!Install Projango by copying several files to the ~JBoss installation
{{{
SET JBOSS_HOME=P:\usr\local\jboss
SET PROJANGO_INSTALL_TEMP=P:\tmp\projango-install
mkdir %JBOSS_HOME%\modules\javax\jcr\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\javax\jcr\main\jcr-2.0.jar %JBOSS_HOME%\modules\javax\jcr\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\javax\jcr\main\jcr-2.0.jar.index %JBOSS_HOME%\modules\javax\jcr\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\javax\jcr\main\module.xml %JBOSS_HOME%\modules\javax\jcr\main
mkdir %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\com\xenatec\projango\config\main\projango-repository.xml %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\com\xenatec\projango\config\main\module.xml %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\standalone\deployments\jackrabbit-jca-2.4.1.rar %JBOSS_HOME%\standalone\deployments
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\standalone\deployments\postgresql-9.1-902.jdbc4.jar %JBOSS_HOME%\standalone\deployments

mkdir %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\modules\com\xenatec\projango\config\main\* %JBOSS_HOME%\modules\com\xenatec\projango\config\main
copy %PROJANGO_INSTALL_TEMP%\usr\local\jboss\standalone\configuration\standalone-full.xml %JBOSS_HOME%\standalone\configuration
}}}

!!Adapt <~JBOSS_HOME>/standalone/configuration/standalone-full.xml to the chosen password for the postgres database admin.
If you used another password than 'postgres' for the database admin role, you will have to adapt the preconfigured value in //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// at the attribute """//"""subsystem[xmlns="urn:jboss:domain:datasources:1.0"]/datasources/xa-datasource[@jndi-name="java:/jdbc/projangoDatasource"]/security/password:
{{{
<password>yourpassword</password>
}}}
!!Adapt <~JBOSS_HOME>/standalone/configuration/standalone-full.xml to the hardware situation.
Dependent of the underlying hardware it may be necessary to adapt the deployment-timeout of ~JBoss.
If the Application log errors like "Did not receive a response to the deployment operation within the allowed timeout period [30 seconds]." you need to increase the timeout. This is done in  //<~JBOSS_HOME>\standalone\configuration\standalone-full.xml// at the attribute """//"""subsystem[xmlns="urn:jboss:domain:deployment-scanner:1.1"]/deployment-scanner[@deployment-timeout]:
{{{
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
}}}

You can now start the ~JBoss.

When the ~JBoss has started, it will in turn start the contained Projango application. The end of the start procedure can be detected by a {{{JBAS018559: Deployed "projango-ear.ear"}}} message in //<~JBOSS_HOME>/standalone/log/server.log//.

Once the ~JBoss and the contained Projango application have started, you can enter Projango at http://yourserver:8080/ . You will be asked to setup the admin user at [[First Startup]].
!!Scrum Board Notes
|left double click|Toggle the note size between standard and detailed|
|Ctrl + left double click|Open the note for editing|
|Alt + left double click|Open the detail editor for the note content|
|Alt + mouse wheel|Scroll the note content under the mouse pointer without opening the note for editing|
|Shift + mouse move|Enlarge the note|
|Ctrl + mouse move|Shrink the note|
|Alt + drop note|The user is not changed in case of a state with automatic user change|
|Alt +Ctrl + left click on task icon|Open the menu to change the task characteristic|
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>>
/***
|''Name''|SimpleSearchPlugin|
|''Description''|displays search results as a simple list of matching tiddlers|
|''Authors''|FND|
|''Version''|0.4.1|
|''Status''|stable|
|''Source''|http://devpad.tiddlyspot.com/#SimpleSearchPlugin|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/SimpleSearchPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Keywords''|search|
!Revision History
!!v0.2.0 (2008-08-18)
* initial release
!!v0.3.0 (2008-08-19)
* added Open All button (renders Classic Search option obsolete)
* sorting by relevance (title matches before content matches)
!!v0.4.0 (2008-08-26)
* added tag matching
!To Do
* tag matching optional
* animations for container creation and removal
* when clicking on search results, do not scroll to the respective tiddler (optional)
* use template for search results
!Code
***/
//{{{
if(!version.extensions.SimpleSearchPlugin) { //# ensure that the plugin is only installed once
version.extensions.SimpleSearchPlugin = { installed: true };

if(!config.extensions) { config.extensions = {}; }

config.extensions.SimpleSearchPlugin = {
	heading: "Search Results",
	containerId: "searchResults",
	btnCloseLabel: "close",
	btnCloseTooltip: "dismiss search results",
	btnCloseId: "search_close",
	btnOpenLabel: "Open all",
	btnOpenTooltip: "open all search results",
	btnOpenId: "search_open",

	displayResults: function(matches, query) {
		story.refreshAllTiddlers(true); // update highlighting within story tiddlers
		var el = document.getElementById(this.containerId);
		query = '"""' + query + '"""'; // prevent WikiLinks
		if(el) {
			removeChildren(el);
		} else { //# fallback: use displayArea as parent
			var container = document.getElementById("displayArea");
			el = document.createElement("div");
			el.id = this.containerId;
			el = container.insertBefore(el, container.firstChild);
		}
		var msg = "!" + this.heading + "\n";
		if(matches.length > 0) {
			msg += "''" + config.macros.search.successMsg.format([matches.length.toString(), query]) + ":''\n";
			this.results = [];
			for(var i = 0 ; i < matches.length; i++) {
				this.results.push(matches[i].title);
				msg += "* [[" + matches[i].title + "]]\n";
			}
		} else {
			msg += "''" + config.macros.search.failureMsg.format([query]) + "''"; // XXX: do not use bold here!?
		}
		createTiddlyButton(el, this.btnCloseLabel, this.btnCloseTooltip, config.extensions.SimpleSearchPlugin.closeResults, "button", this.btnCloseId);
		wikify(msg, el);
		if(matches.length > 0) { // XXX: redundant!?
			createTiddlyButton(el, this.btnOpenLabel, this.btnOpenTooltip, config.extensions.SimpleSearchPlugin.openAll, "button", this.btnOpenId);
		}
	},

	closeResults: function() {
		var el = document.getElementById(config.extensions.SimpleSearchPlugin.containerId);
		removeNode(el);
		config.extensions.SimpleSearchPlugin.results = null;
		highlightHack = null;
	},

	openAll: function(ev) {
		story.displayTiddlers(null, config.extensions.SimpleSearchPlugin.results);
		return false;
	}
};

config.shadowTiddlers.StyleSheetSimpleSearch = "/*{{{*/\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " {\n" +
	"\toverflow: auto;\n" +
	"\tpadding: 5px 1em 10px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryPale]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " h1 {\n" +
	"\tmargin-top: 0;\n" +
	"\tborder: none;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " ul {\n" +
	"\tmargin: 0.5em;\n" +
	"\tpadding-left: 1.5em;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button {\n" +
	"\tdisplay: block;\n" +
	"\tborder-color: [[ColorPalette::TertiaryDark]];\n" +
	"\tpadding: 5px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button:hover {\n" +
	"\tborder-color: [[ColorPalette::SecondaryMid]];\n" +
	"\tbackground-color: [[ColorPalette::SecondaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnCloseId + " {\n" +
	"\tfloat: right;\n" +
	"\tmargin: -5px -1em 5px 5px;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnOpenId + " {\n" +
	"\tfloat: left;\n" +
	"\tmargin-top: 5px;\n" +
	"}\n" +
	"/*}}}*/";
store.addNotification("StyleSheetSimpleSearch", refreshStyles);

// override Story.search()
Story.prototype.search = function(text, useCaseSensitive, useRegExp) {
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(), useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack, null, "excludeSearch");
	var q = useRegExp ? "/" : "'";
	config.extensions.SimpleSearchPlugin.displayResults(matches, q + text + q);
};

// override TiddlyWiki.search() to sort by relevance
TiddlyWiki.prototype.search = function(searchRegExp, sortField, excludeTag, match) {
	var candidates = this.reverseLookup("tags", excludeTag, !!match);
	var primary = [];
	var secondary = [];
	var tertiary = [];
	for(var t = 0; t < candidates.length; t++) {
		if(candidates[t].title.search(searchRegExp) != -1) {
			primary.push(candidates[t]);
		} else if(candidates[t].tags.join(" ").search(searchRegExp) != -1) {
			secondary.push(candidates[t]);
		} else if(candidates[t].text.search(searchRegExp) != -1) {
			tertiary.push(candidates[t]);
		}
	}
	var results = primary.concat(secondary).concat(tertiary);
	if(sortField) {
		results.sort(function(a, b) {
			return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);
		});
	}
	return results;
};

} //# end of "install only once"
//}}}

{{projango_logo{[img[images/ProjangoLogo.png]]}}}{{title_text{}}}{{search{<<search>><<newTiddler>>}}}
SOFTWARE LICENSE AGREEMENTS

VERY IMPORTANT - READ CAREFULLY!

This Projango Software License Agreement (hereinafter, this "LICENSE") is a legal agreement between you (either an individual or a single entity) and xenatec information concepts (hereinafter, "XENATEC"), for the software containing this LICENSE or products identified on the projango.com or xenatec.com web sites, on the disk or ~CD-ROM enclosed with the package which contain computer software and associated media and printed materials, and may include "on-line" or electronic documentation (the "SOFTWARE") and for which the license files are either provided on the enclosed CD, download package or obtained through XENATEC or its authorized distributors.

IT IS NECESSARY FOR YOU TO AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE BEFORE YOU ARE PERMITTED TO CONTINUE TO INSTALL THE SOFTWARE. BY CLICKING THE "I ACCEPT" BUTTON, OR BY INSTALLING, COPYING, OR OTHERWISE USING THE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE INCLUDING THE WARRANTY DISCLAIMERS, LIMITATIONS ON LIABILITY AND TERMINATION PROVISIONS.

If you do not agree to the terms of this LICENSE, EXIT NOW!

I. OWNERSHIP; LICENSE GRANT.

This is a license agreement and NOT an agreement for sale. XENATEC continues to own the copy of the SOFTWARE contained on the web site, disk or ~CD-ROM and all copies thereof. Your rights to the SOFTWARE are specified in this LICENSE, and XENATEC retains all rights not expressly granted to you in this LICENSE. XENATEC hereby grants to you, and you accept, a non-exclusive, non-transferable license to use, copy and modify the SOFTWARE only as authorized below.

II. PERMITTED USES.

This LICENSE grants you the following rights:

A. The SOFTWARE can be used for personal usage (at home) as well as for commercial usage (at work) with the license files either provided on the enclosed CD, download package or obtained through XENATEC or its authorized distributors.

The following restrictions apply for unregistered users (if the default license files are used) :

1. Projango is limited to the amount of free users. (Usually XENATEC provides 5 FREE USERS.)

2. Projango usage can be limited in time in case of a special trial license. (Usually XENATEC provides an unlimited license for the free users.)

3. XENATEC is not able to provide any kind of free support for the free edition of Projango.


III. PRIVACY POLICY

A. Up-to-date check
By default, Projango checks if the installed version is up-to-date by calling a special web service to get the newest version information. XENATEC reserves the right to collect anonymous access information for statistical purpose.

B. This up-to-date check feature can be turned off (disabled) using configuration options of the software.

C. When accepting this license, the user recognizes to have been warned about this up-to-date check feature.


IV. PROHIBITED USES.

You may not, without the prior written permission of XENATEC:

A. Disassemble, decompile or "unlock", decode or otherwise reverse translate or engineer, or attempt in any manner to reconstruct or discover any source code or underlying algorithms of SOFTWARE provided in object code form only.

B. Use, copy, modify, or merge copies of the SOFTWARE and any accompanying documents except as permitted in this LICENSE.

C. Transfer, rent, lease, or sublicense the SOFTWARE.

D. Distribute the SOFTWARE in a run-time.

E. Distribute the SOFTWARE via a public Internet access.


V. COPYRIGHT.

All title and copyrights in and to the SOFTWARE (including but not limited to any images, photographs, animation, video, audio, music, text and "applets" incorporated into the SOFTWARE) and the accompanying printed materials are owned by XENATEC or its suppliers. The SOFTWARE is protected by German copyright laws and international treaty provisions. All rights are reserved worldwide. You must treat the SOFTWARE like any other copyrighted material, except that you may, in addition to the copies permitted in this LICENSE, make one copy of the SOFTWARE solely for backup or archival purposes. No part of the accompanying printed materials may be reproduced, transmitted, transcribed, stored in any retrieval system, or translated into any language by any means without the express prior written permission of XENATEC.

VI. TERMINATION.

This LICENSE and your right to use the SOFTWARE will terminate immediately without notice from XENATEC if you fail to comply with the terms and conditions of this LICENSE. Upon termination, you agree to destroy the SOFTWARE, including all accompanying documents and copies. This is in addition to and not in lieu of any criminal, civil or other remedies available to XENATEC.

VII. LIMITED WARRANTY.

A. Softwares are provided "AS IS", without warranty of any kind. XENATEC does not warranty that the SOFTWARE will be error-free. XENATEC DOES NOT PROVIDE ANY TECHNICAL SUPPORT FOR FREE.

B. XENATEC AND ITS SUPPLIERS DISCLAIM ALL OTHER WARRANTIES, EITHER EXPRESS OR IMPLIED, WHETHER ARISING BY STATUTE OR OTHERWISE IN LAW OR FROM A COURSE OF DEALING OR USAGE OR TRADE, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF ACCURACY, COMPLETENESS, PERFORMANCE, CURRENCY, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE WITH REGARD TO THE SOFTWARE.

VIII. LIMITATION OF LIABILITIES.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[img[Burndown Chart|images/product/Projango Agile - Burndown Chart.png]]

The sprint burndown chart shows the progress of the current estimations on a time line since start of the sprint. The chart shows both the managed (green line) and unmanaged (blue line) data to visualize the differences and show the impact of management on the sprint.

The yellow line represents the 'now' time in the chart.

With the mouse you can move a marker (red line) over the chart to calculate the exact numbers on that point in time.

The sprint burndown chart is updated automatically when data gets changed.
[img[Managed Dashboard|images/product/Projango Agile - Managed Dashboard.png]]

The sprint dashboard aggregates all relavant information about a sprint on one page. All of the elements are also available as separate windows.

The dashboard is updated automatically when data gets changed so it can be placed somewhere on a prominent place in the office to always show the current state of the sprint.

When the dashboard is opened the managed data is shown. With the toggle button inside the window header it is possible to switch between managed and unmanaged data.
!Sprint Overview
[img[Sprint Overview|images/product/Projango Agile - Sprint Overview.png]]

The Overview tab contains the major settings of a sprint.

!Sprint Details
[img[Sprint Details|images/product/Projango Agile - Sprint Details.png]]

The Details tab contains additional, less frequently used settings.

By setting the Archived State to {{constant{Archived}}} the sprint is not reachable any more via the Sprint Selector in the Scrum Board Toolbar.

!Sprint Info
[img[Sprint Info|images/product/Projango Agile - Sprint Info.png]]

The Info tab contains some generated and non editable data of the sprint. Some of the values are specific for sprints:
|!Label|!Description|!Time Worked observed|!Estimation observed|!Tasks observed|h
|Delta to Ideal Velocity (managed)|The difference in the burndown chart between the current estimation for all non-deferred tasks and the ideal velocity value. ||Current estimation of tasks that are not deferred.||
|Delta to Ideal Velocity (unmanaged)|The difference in the burndown chart between the current estimation for all tasks and the ideal velocity value. ||Current estimation.||
|Velocity based on Planned Tasks|All initial estimations from planned tasks that are completed and part of an accepted story.||Initial Estimation.|Completed planned tasks in stories with the verified state 'Accepted'. A planned task entered its sprint when it was 'New'.|
|Velocity based on all Tasks|All initial estimations that are completed and part of an accepted story.||Initial Estimation.|Completed tasks in stories with the verified state 'Accepted'. |
|Days to go|The days between now and the sprint end day.||||
|Stories Planned|Amount of planned stories. A planned story entered its sprint when it was 'New'.||||
|Stories Unplanned|Amount of unplanned stories. An unplanned story entered its sprint when it was 'In Progress'.||||
|Tasks Planned|The amount of tasks that entered their sprint when it was 'New'.|||Planned tasks. A planned task entered its sprint when it was 'New'.|
|Tasks Unplanned|The amount of tasks that entered their sprint when it was 'In Progress'.|||Unplanned tasks. An unplanned task entered its sprint when it was 'In Progress'.|
|Initial Estimation of all Tasks|The initial estimations of all tasks of the sprint. ||Initial Estimation.|All tasks of the sprint.|
|Initial Estimation of Planned Tasks|The initial estimations of the planned tasks of the sprint. A planned task entered its sprint when it was 'New'.||Initial estimation.|Planned tasks. A planned task entered its sprint when it was 'New'.|
|Initial Estimation of Unplanned Tasks|The initial estimations of the unplanned tasks. An unplanned task entered its sprint when it was 'In Progress'.||Initial estimation.|Unplanned tasks. An unplanned task entered its sprint when it was 'In Progress'.|
|Initial Estimation of Final Tasks|The initial estimations from tasks in final states, i.e. completed and canceled tasks of the sprint.||Initial Estimation.|Tasks in final states i.e. completed and canceled tasks of the sprint.|
|Initial Estimation of Final Tasks with registered Work Time|The initial estimations from tasks with work time registrations in a final states, i.e. completed and canceled tasks of the sprint.||Initial Estimation.|Tasks with time registrations in final states i.e. completed and canceled tasks of the sprint.|
|Initial Estimation of Final Planned Tasks|The initial estimations from planned tasks in final states i.e. completed and canceled tasks of the sprint that  entered the sprint when it was 'New'. ||Initial Estimation.|Planned tasks in final states i.e. completed and canceled tasks of the sprint.|
|Initial Estimation of Final Planned Tasks with registered Work Time|The initial estimations of planned tasks with work time registrations in final states, i.e. completed and canceled tasks of the sprint.||Initial Estimation.|Planned tasks with time registrations in final states i.e. completed and canceled tasks of the sprint.|
|Current Estimation (managed)|The current estimation sum over the non-deferred tasks in the sprint.||Current estimation.|Tasks that are not deferred.|
|Current Estimation (unmanaged)     |The current estimation sum over all tasks in the sprint.||Current estimation.|All tasks of the sprint.|
|Current Estimation of Planned Tasks (unmanaged)|The current estimation sum over all planned tasks in the sprint.||Current estimation.|Planned tasks. A planned task entered its sprint when it was 'New'.|
|Current Estimation of Unplanned Tasks (unmanaged)|The current estimation sum over all unplanned tasks in the sprint.||Current estimation.|Unplanned tasks. An unplanned task entered its sprint when it was 'In Progress'.|
|Story Points Burned Down (Absolutely)|The initially estimated story points from all tasks (even those that entered the sprint after it started) that got burned down.||Estimation burned down, that is, the part or the initial estimation that already misses at the current estimation.|All tasks of the sprint.|
|Story Points Burned Down (Effectively)|The difference in the burndown chart between the start  and now. More formally: the story points that were estimated at the sprint start (without the tasks that entered the sprint after it started) compared with the latest estimation (also considering tasks th||For the initial estimation: the initial estimation from planned tasks. For the current estimation: the current estimation for all members.|For the initial estimation: planned tasks. A planned task entered its sprint when it was 'New'. For the current estimation: All tasks of the sprint.|
|Story Points Burned Down for Planned Tasks|Story points that got burned down in the sprint for planned tasks of the sprint. A planned task entered its sprint when it was 'New'.||Estimation burned down, that is, the part or the initial estimation that already misses at the current estimation.|Planned tasks. A planned task entered its sprint when it was 'New'.|
|Story Points Burned Down for Unplanned Tasks|Story points that got burned down in the sprint for unplanned tasks. An unplanned task entered its sprint when it was 'In Progress'.||Estimation burned down, that is, the part or the initial estimation that already misses at the current estimation.|Unplanned tasks. An unplanned task entered its sprint when it was 'In Progress'.|
|Registered Work Time during sprint|Work time registered for the time span between the start and the end of the sprint.|Time worked at sprint time, that is, time worked registered for the time span between the start and the end of the sprint.||All tasks of the sprint.|
|Registered Work Time for sprint Tasks in total|All work time registered on tasks of the sprint.|All time worked||All tasks of the sprint.|
|Registered Work Time for Planned Tasks|Amount of hours worked on tasks that were part of the sprint at the sprint start. |Time worked at sprint time, that is, time worked registered for the time span between the start and the end of the sprint.||Planned tasks. A planned task entered its sprint when it was 'New'.|
|Registered Work Time for Unplanned Tasks|Amount of hours worked on tasks that entered the sprint after it started.|Time worked at sprint time, that is, time worked registered for the time span between the start and the end of the sprint.||Unplanned tasks. An unplanned task entered its sprint when it was 'In Progress'.|
|Registered Work Time for Final Tasks|The sum of work time registrations of final tasks, i.e. completed and canceled tasks of the sprint.|Time worked registered for the time span between the start and the end of the sprint.||Tasks in final states i.e. completed and canceled tasks of the sprint.|
|Registered Work Time for Final Planned Tasks|The sum of work time registrations of final planned tasks, i.e. completed and canceled tasks of the sprint that entered the sprint when it was 'New'.|Time worked registered for the time span between the start and the end of the sprint.||Planned tasks in final states i.e. completed and canceled tasks of the sprint that entered its sprint when it was 'New'.|
|h/SP for all Tasks|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a completed task. This value considers Story Points from all completed tasks in the sprint. This value considers time worked from all completed tasks in t|Time worked registered for tasks that are completed.|Initial Estimation.||
|h/SP for Final Tasks|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from all final tasks in the sprint. This v|Time worked registered for the time span between the start and the end of the sprint on tasks that are final, i.e. completed and canceled tasks of the sprint.|Initial Estimation and unmanaged current estimation.|Tasks in final states i.e. completed and canceled tasks of the sprint.|
|h/SP for Final Planned Tasks|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from final tasks in the sprint that were p|Time worked registered for the time span between the start and the end of the sprint on planned tasks in final states, i.e. completed and canceled tasks of the sprint that entered its sprint when it was 'New'.|Initial Estimation and unmanaged current estimation.|Planned tasks in final states, i.e. completed and canceled tasks of the sprint that entered its sprint when it was 'New'.|
|h/SP for Final Tasks with registered Work Time|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from all final tasks in the sprint that  t|Time worked registered for the time span between the start and the end of the sprint on tasks that are final, i.e. completed and canceled tasks of the sprint.|Initial Estimation and unmanaged current estimation.|Tasks with time registrations in final states i.e. completed and canceled tasks of the sprint.|
|h/SP for Final Planned Tasks with registered Work Time|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from final tasks in the sprint that have s|Time worked registered for the time span between the start and the end of the sprint on planned tasks in final states, i.e. completed and canceled tasks of the sprint that entered its sprint when it was 'New'.|Initial Estimation and unmanaged current estimation.|Planned tasks with time registrations in final states, i.e. completed and canceled tasks of the sprint that entered its sprint when it was 'New'.|
|h/SP for Final Tasks (total registered Time)|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from all final tasks in the sprint. This v|Time worked registered for the time span between the start and the end of the sprint.|Initial Estimation and unmanaged current estimation.|For time worked: all tasks. For Story Points: tasks in final states i.e. completed and canceled tasks of the sprint.|
|h/SP for Final Planned Tasks (total registered Time)|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from final tasks in the sprint that were p|Time worked registered for the time span between the start and the end of the sprint.|Initial Estimation and unmanaged current estimation.|For time worked: all tasks. For Story Points: planned tasks in final states, i.e. completed and canceled tasks of the sprint that entered its sprint when it was 'New'.|
|h/SP for Final Tasks with registered Work Time (total registered Time)|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from all final tasks in the sprint that  t|Time worked registered for the time span between the start and the end of the sprint.|Initial Estimation and unmanaged current estimation.|For time worked: all tasks. For Story Points: tasks with time registrations in final states i.e. completed and canceled tasks of the sprint.|
|h/SP for Final Planned Tasks with registered Work Time (total registered Time)|This value denotes how much work time was necessary to burn down one initially estimated Story Point on a task in a final state. Tasks are final when they are completed or canceled. This value considers Story Points from final tasks in the sprint that have s|Time worked registered for the time span between the start and the end of the sprint.|Initial Estimation and unmanaged current estimation.|For time worked: all tasks. For Story Points: planned tasks with time registrations in final states, i.e. completed and canceled tasks of the sprint that entered its sprint when it was 'New'.|
|h/SP Burned Down for all Tasks|This value denotes how much work time was necessary to burn down one story point. This value covers all tasks.|Time worked registered for the time span between the start and the end of the sprint.|Initial Estimation and unmanaged current estimation.|All tasks of the sprint.|
|h/SP Burned Down for Planned Tasks|This value denotes how much work time was necessary on planned tasks to burn down one planned story point from these planned tasks. A planned task entered its sprint when it was 'New'.|Time worked at sprint time on planned tasks, that is, time worked registered for the time span between the start and the end of the sprint on tasks that entered the sprint when it was 'New'.|Initial Estimation and unmanaged current estimation.|Planned tasks. A planned task entered its sprint when it was 'New'.|
|h/SP Burned Down for Planned Tasks (total registered Time)|This value denotes how much work time was necessary to burn down one planned story point. This value covers only story points from planned tasks. An planned task entered its sprint when it was 'New'.|Time worked registered for the time span between the start and the end of the sprint.|Initial Estimation and unmanaged current estimation.|For time worked: all tasks. For Story Points: Planned tasks. A planned task entered its sprint when it was 'New'.|

!Sprint Relations
[img[Sprint Relations|images/product/Projango Agile - Sprint Relations.png]]

The Relations tab lists all relations of the sprint to other work items.

!Sprint Stories
[img[Sprint Stories|images/product/Projango Agile - Sprint Stories.png]]

The Stories tab lists all stories of the current sprint. Stories can be added or edited via the right click menu or by a double click on an existing story; the details editor for the added or existing story then opens. More details about the story details editor are provided on the special [[Story Details Editor]] page.

The content of the list can be customized, the customization can be saved by the button in the toolbar.

Sorting or grouping the items will automatically disable Drag & Drop.

!Sprint Final Report
[img[Sprint  Final Report|images/product/Projango Agile - Sprint Final Report.png]]

The Final Report tab provides a space to document the things of a sprint presentation meeting. This documentation is also part of the printed sprint report.
[img[Managed Sprint Info|images/product/Projango Agile - Managed Sprint Info.png]]

The sprint info shows the calculated numbers of a sprint which are of most interest.

The sprint info is updated automatically when data gets changed.

When the sprint info is opened the managed data is shown. With the toggle button inside the window header it ist possible to switch between managed and unmanaged data.
!Overview
[img[Project Planning|images/product/Projango Agile - Sprint Planning.png]]

The Sprint Planning window provides a list of all sprints of the project. To add an additional sprint use the toolbar button or the right click menu. To edit an existing sprint a double click on the sprint can be used instead of the right click menu. The [[details editor for the sprint|Sprint Details Editor]] then opens.

The content of the list can be customized, the customization can be saved by the button in the toolbar.

Sorting or grouping the items will automatically disable Drag & Drop. 
[img[Story State Chart|images/product/Projango Agile - Story State Chart.png]]

The sprint story state chart shows a stacked chart where the percentages of stories in a specific state are visualized. By hovering the mouse over a chart segement it is possible to get the detail of this segment as a tooltip.

The sprint story state chart is updated automatically when data gets changed.
[img[Managed Task Count Resolution Chart|images/product/Projango Agile - Managed Task Count Resolution Chart.png]]

The sprint task count resolution chart shows a progress bar where the percentages of tasks in resolved and unresolved states are visualized. By hovering the mouse over a chart segement it is possible to get the detail of this segment as a tooltip.

The sprint task count resolution chart is updated automatically when data gets changed.

When the sprint task count resolution chart is opened the managed data is shown. With the toggle button inside the window header it ist possible to switch between managed and unmanaged data.
[img[Managed Task Estimation Resolution Chart|images/product/Projango Agile - Managed Task Estimation Resolution Chart.png]]

The sprint task estimation resolution chart shows a progress bar where the percentages of current estimations of tasks in resolved and unresolved states are visualized. By hovering the mouse over a chart segement it is possible to get the detail of this segment as a tooltip.

The sprint task estimation resolution chart is updated automatically when data gets changed.

When the sprint task estimation resolution chart is opened the managed data is shown. With the toggle button inside the window header it ist possible to switch between managed and unmanaged data.
[img[Task State Chart|images/product/Projango Agile - Task State Chart.png]]

The sprint task state chart shows a stacked chart where the percentages of tasks in a specific state are visualized. By hovering the mouse over a chart segement it is possible to get the detail of this segment as a tooltip.

The sprint task state chart is updated automatically when data gets changed.
!Sprint Wizard 1
[img[Sprint Wizard 1|images/product/Projango Agile - Sprint Wizard 1.png]]

This wizard is started when you log on as a normal user and there is no project or sprint selectable via the sprint selector. It allows to easily create a sprint inside a related project.

Type in at least the name of the project; you should also usually set the project {{constant{In Progress}}} if you want to start to work with the project immediately.

!Sprint Wizard 2
[img[Sprint Wizard 2|images/product/Projango Agile - Sprint Wizard 2.png]]

Type in at least the name of the sprint; you should also usually set the goal, a start date and an end date of the sprint.

After clicking Finish the project and the related sprint are created and the taskboard automatically switches to this newly created sprint.
Projango keeps track of the resolution of a sprint workload. Projango provides indicators based on the amount of tasks processed as well as the amount of estimated work done.
These indicators come in two flavors, "unmanaged" and "managed". "Managed" resolution indicators take into account that deferred tasks and stories do not count for ongoing sprints.

Both the state of a task as well as the state of its containing story influence the resolution. This overview describes when a task counts as resolved;
|!Story State|!Task State|!Unmanaged|!Managed|h
|New, In Progress, Accepted, Paused, Closed|To Do -  Verifying | unresolved |unresolved|
|New, In Progress, Accepted, Paused, Closed|Completed, Canceled | resolved | resolved |
|New, In Progress, Accepted, Paused, Closed|Deferred | unresolved | resolved |
| Completed | To Do -  Verifying |>| does not occur |
| Completed | Completed, Canceled | resolved | resolved |
| Completed | Deferred | unresolved | resolved |
| Deferred | To Do -  Verifying | unresolved |resolved|
| Deferred | Completed, Canceled | resolved | resolved |
| Deferred | Deferred | unresolved | resolved |
| Canceled | Any | resolved | resolved |
!Story Overview
[img[Story Overview|images/product/Projango Agile - Story Overview.png]]

The Overview tab contains the major settings of a story.

!Story Details
[img[Story Details|images/product/Projango Agile - Story Details.png]]

The Details tab contains additional, less frequently used settings.

*The service class setting and the delivery date are only available when service classes are used in the project. To enable this feature you need to enable the service class feature in the project details settings.
*With the priority setting you can give a story a special priority. The priority is shown as an icon at the [[Story Note]] and [[Story Line]].
*With the risk setting you can give a story a special risk marker. The priority is shown as an icon at the [[Story Note]].
*With the ~MoSCoW classification setting you can give a story a special ~MoSCoW classification. The ~MoSCoW classification is shown as an icon at the [[Story Note]] and [[Story Line]].
*With the verified state setting you can signal if a story is accepted or rejected. The verified state is shown as an icon at the [[Story Note]] and [[Story Line]].
*The verifier is the user which has verified the story. The verifier is shown in the tooltip of the verification icon of the story note.
*The verification description is shown in the tooltip of the verification icon of the story note.
*With the impeded setting you can signal if a story is impeded. If so you can additionally add an impediment description. The impeded state is shown as an icon at the [[Story Note]] and [[Story Line]] and the impediment description is shown as a tooltip of the impediment icon.
*With the color settings you can influence the right border of a story note or the colors a story is shown in the lists. If a different color than the default color is set the color is also shown as an icon at the [[Story Line]].

!Story Info
[img[Story Info|images/product/Projango Agile - Story Info.png]]

The Info tab contains some generated and non editable data of the story.

!Story Relations
[img[Story Relations|images/product/Projango Agile - Story Relations.png]]

The Relations tab lists all relations of the story to other work items.

!Story Acceptance Criteria
[img[Story Acceptance Criteria|images/product/Projango Agile - Story Acceptance Criteria.png]]

The Acceptance Criteria tab lists all acceptance criteria of a story. To add an additional acceptance criterion use the toolbar button or the right click menu. To edit an existing acceptance criterion a double click on the acceptance criterion can be used as well as the right click menu. The editor for the added or existing acceptance criterion then opens.

!Story Comments
[img[Story Comments|images/product/Projango Agile - Story Comments.png]]

The Comments tab lists all comments of a story. To add an additional comment use the toolbar button or the right click menu. To edit an existing comment a double click on the comment can be used as well as the right click menu. The editor for the added or existing comment then opens.

!Story Web Links
[img[Story Web Links|images/product/Projango Agile - Story Web Links.png]]

The Web Links tab lists all web links of a story. To add an additional web link use the toolbar button or the right click menu. To edit an existing web link a double click on the web link can be used as well as the right click menu. The editor for the added or existing web link then opens.

!Story Tasks
[img[Story Tasks|images/product/Projango Agile - Story Tasks.png]]

The Tasks tab lists all tasks of a story. To add an additional tasks use the toolbar button or the right click menu. To edit an existing task a double click on the tasks can be used as well as the right click menu. The details editor for the added or existing task then opens. More details about the task details editor are provided on the special [[Task Details Editor]] page.

The content of the list can be customized, the customization can be saved by the button in the toolbar.

Sorting or grouping the items will automatically disable Drag & Drop. 
[img[Toolbar 1|images/product/Projango Agile -Scrumboard StoryLine with Pointers.png]]

|!No|!Function|h
|1|Open and close the story line|
|2|The story number in context of the sprint|
|3|The story name|
|4|The impediment indicator of the story|
|5|The impediment indicator for one or more tasks of the story|
|6|The all tasks finished indicator|
|7|The verified indicator|
|8|The Service Class|
|9|The ~MoSCoW Classification|
|10|The priority|
|11|The color of the story|
|12|The state of the story|
|13|The estimation of the story|
|14|The sum of all initial task estimations|
|15|The sum of the current task estimations|
|16|The owner of the story|
|17|The unmanaged task count resolution|
|18|The unmanaged task estimation resolution|

{{rightpad{[<img[Story Note|images/product/Projango Agile - Story Note with Pointers.png]]}}}
|!No|!Function|h
|1|The story name|
|2|The story description|
|3|The story number in the context of a sprint. A click on this number opens the selection menu for priorities.|
|4|The avatar of the owner of the story. A click on this image opens the quick selection for the owner selection.|
|5|The story estimation. A click on this number opens the quick selection of the story estimation|
|6|The sum of the current task estimations|
|7|The story icon. A simple left click on the icon toggles between standard size and detailed mode. A simple left click + ~CTRL-Key opens the node for editing. A simple left click + ~ALT-Key opens the story details editor. In editing mode a simple left click saves the changes.|
|8|The story state icon. A click on this icon opens the story state menu.|
|9|The service class icon. A click on this icon opens the service class menu.|
|10|The impediment icon. Hover over this icon to get the impediment description shown.|
|11|The accepted icon|
|12|The priority icon. A click on this icon opens the priority menu.|
|13|The ~MoSCoW classification icon. A click on this icon opens the ~MoSCoW classification menu.|
|14|The risk icon. A click on this icon opens the risk menu.|
|15|The comment icon. A click on this icon opens the [[Comments Window]].|
|16|The acceptance critera icon. A click on this icon opens the [[Acceptance Criteria Window]].|
|17|The web link icon. A left click on this icon opens the a sub menu with all the web links for a direct jump to the target. A right click opens the [[Web Links Window]].|
|18|The time registration icon. On hovering with the mouse over the icon the sum of all time registrations for tasks of the story is shown.|

!!Short Cuts
|left double click|Toggle the note size between standard and detailed|
|Ctrl + left double click|Open the note for editing|
|Alt + left double click|Open the detail editor for the note content|
|Alt + mouse wheel|Scroll the note content under the mouse pointer without opening the note for editing|
|Shift + mouse move|Enlarge the note|
|Ctrl + mouse move|Shrink the note|
/*{{{*/
.headerShadow .title_text,
.headerShadow .projango_logo,
.headerShadow .xenatec_logo {
     position: absolute;
}

.headerShadow .projango_logo {
     top: 0;
     left: 0;
}

.headerShadow .xenatec_logo {
     top: 25px;
     right: 0;
}

.headerShadow .title_text {
     top: 28px;
     left: 432px;
     width: 400px;
     font-weight: bold;
     display: none;
}

.headerForeground .title_text {
     position: absolute;
     top: 25px;
     left: 430px;
     width: 400px;
     font-weight: bold;
}


.headerForeground .projango_logo,
.headerForeground .xenatec_logo {
     display: none;
}

.header .search {
     font-size: 0.3em;
     color:[[ColorPalette::HeaderTextForeground]];
     position: absolute;
     width: 15em;
     right: 13px;
     top: 30px;
}

.header .search a {
display: block;
margin: 0 0.4em;
padding: 0.2em 0.3em;
color:[[ColorPalette::HeaderTextForeground]];
}

.header .search a:hover {
color:[[ColorPalette::Background]];
background-color:[[ColorPalette::HeaderTextForeground]];
}

.header .searchField{
     margin: 0.4em 0.5em;
     border:1px solid [[ColorPalette::HeaderTextForeground]];
     color:[[ColorPalette::HeaderTextForeground]];
}

#displayArea {
margin: 1em 1em 0 12em;
}

.leftpad img { padding-left:3em; }
.rightpad img { padding-right:3em; }
.constant {font-weight:bold;}

/*}}}*/
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::HeaderTextShadow]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette:HeaderTextShadow]];}
.headerForeground {color:[[ColorPalette::HeaderTextForeground]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette:HeaderTextForeground]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
!Task Overview
[img[Task Overview|images/product/Projango Agile - Task Overview.png]]

The Overview tab contains the major settings of a task.

!Task Details
[img[Story Details|images/product/Projango Agile - Task Details.png]]

The Details tab contains additional, less frequently used settings.

*With the task characteristic you can change the task icon.
*With the priority setting you can give a task a special priority. The priority is shown as an icon at the [[Task Note]].
*With the ~MoSCoW classification setting you can give a task a special ~MoSCoW classification. The ~MoSCoW classification is shown as an icon at the [[Task Note]].
*With the verified state setting you can signal if a task is accepted or rejected. The verified state is shown as an icon at the [[Task Note]]. This field is automatically set if a task was in a verifying state and is moved to completed or back in progress or to do state.
*The verifier is the user which has verified the task. The verifier is shown in the tooltip of the verification icon of the story note. This field is automatically set if a task was in a verifying state.
*The verification description is shown in the tooltip of the verification icon of the story note.
*With the impeded setting you can signal whether a task is impeded. When a task is impeded you can additionally add an impediment description. The impeded state is shown as an icon at the [[Task Note]] and the impediment description is shown as a tooltip of the impediment icon.
*The initial setting is an indicator that a task was in another state as the initial new or to do state. This is also reflected in another color of the state indicator of the [[Task Note]]. It is possible to reset the value here but usually this value is set automatically and does not need to be modified manually.
*The initial member flag is an indicator that this task was in the sprint before the sprint was started. This is important for the different velocity calculations. It is possible to reset the value here but usually this value is set automatically and needs not to be modified manually.
*The {{constant{retrofit previous values of the current estimation}}} flag can be set to store the current estimation as a historic estimation since Sprint start. This flag will be reset automatically. This is an advanced setting and can be used to correct the statistics if a task is added after the sprint start but should be there from the beginning of the sprint since it was forgotten to be added during the sprint planning.
*With the color settings you can influence the right border of a task note or the colors a task is shown in the lists.


If you ever discover later on that no current estimation was given to a task while defining it, you have the possibility to retrofit it so that charts and reports cite its correct value.

!Task Info
[img[Task Info|images/product/Projango Agile - Task Info.png]]

The Info tab contains some generated and non editable data of the task.

!Task Relations
[img[Task Relations|images/product/Projango Agile - Task Relations.png]]

The Relations tab lists all relations of the task to other work items.

!Task Acceptance Criteria
[img[Task Acceptance Criteria|images/product/Projango Agile - Task Acceptance Criteria.png]]

The Acceptance Criteria tab lists all acceptance criteria of a task. To add an additional acceptance criterion use the toolbar button or the right click menu. To edit an existing acceptance criterion a double click on the acceptance criterion can be used as well as the right click menu. The editor for the added or existing acceptance criterion then opens.

!Task Comments
[img[Task Comments|images/product/Projango Agile - Task Comments.png]]

The Comments tab lists all comments of a task. To add an additional comment use the toolbar button or the right click menu. To edit an existing comment a double click on the comment can be used as well as the right click menu. The editor for the added or existing comment then opens.

!Task Web Links
[img[Task Web Links|images/product/Projango Agile - Task Web Links.png]]

The Web Links tab lists all web links of a story. To add an additional web link use the toolbar button or the right click menu. To edit an existing web link a double click on the web link can be used as well as the right click menu. The editor for the added or existing web link then opens.

!Task Time Registrations
[img[Task Time Registration|images/product/Projango Agile - Task Time Registration.png]]

The Time Registrations tab lists all time registrations of a task. To add an additional time registration use the toolbar button or the right click menu. To edit an existing time registration a double click on the time registration can be used as well as the right click menu. The editor for the added or existing time registration then opens.
{{rightpad{[<img[Task Note|images/product/Projango Agile - Task Note with Pointers.png]]}}}
|!No|!Function|h
|1|The task name|
|2|The task description|
|3|The task number in the context of a story. A click on this number opens the selection menu for priorities.|
|4|The avatar of the owner of the task or the verifier in case the task is in the verifying state.|
|5|The current task estimation. A click on this number opens the quick selection of the current task estimation.|
|6|The task icon which shows also the task characteristic. A simple left click on the icon toggles between standard size and detailed mode. A simple left click + ~CTRL-Key opens the node for editing. A simple left click + ~ALT-Key opens the story details editor. A simple left click with ~CTRL+~ALT-Key opens the task charactersitic menu. In editing mode a simple left click saves the changes.|
|7|The task state icon. A click on this icon opens the story state menu.|
|8|The impediment icon. Hover over this icon to get the impediment description shown.|
|9|The accepted icon|
|10|The priority icon. A click on this icon opens the priority menu.|
|11|The comment icon. A click on this icon opens the [[Comments Window]].|
|12|The acceptance critera icon. A click on this icon opens the [[Acceptance Criteria Window]].|
|13|The web link icon. A left click on this icon opens the a sub menu with all the web links for a direct jump to the target. A right click opens the [[Web Links Window]].|
|14|The time registration icon. Click on this icon opens the [[Time Registrations Window]].|



!!Short Cuts
|left double click|Toggle the note size between standard and detailed|
|Ctrl + left double click|Open the note for editing|
|Alt + left double click|Open the detail editor for the note content|
|Alt + mouse wheel|Scroll the note content under the mouse pointer without opening the note for editing|
|Shift + mouse move|Enlarge the note|
|Ctrl + mouse move|Shrink the note|
|Alt + drop note|The user is not changed in case of a state with automatic user change|
|Alt +Ctrl + left click on task icon|Open the menu to change the task characteristic|
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed.
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	tooltipSave : "click here to save this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	previousKey : config.options.txtPreviousTabKey,
	nextKey : config.options.txtNextTabKey,
	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
	handler: function(place,macroName,params) {
		var previous = null;
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
					config.macros.tiddlersBar.createActiveTabButton(d,title);
					if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
					previous = "active";
				}
				else {
					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
					if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
					previous=btn;
				}
				var isDirty =story.isDirty(title);
				var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild);
				}
				else place.appendChild(d);
			})
	},
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onTabSave : function(e) {
		var t = this.getAttribute("tiddler");
		if (!e) e=window.event;
		if (t) config.commands.saveTiddler.handler(e,null,t);
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (!event) event=window.event;
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
		return false;
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	},
	createActiveTabButton : function(place,title) {
		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
			btn.setAttribute("tiddler", title);
		}
		else
			createTiddlyText(place,title);
	}
}

story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;

story.closeTiddler = function(title,animate,unused) {
	if (title==config.macros.tiddlersBar.currentTiddler)
		config.macros.tiddlersBar.selectNextTab();
	story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
	story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
	var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
	if (config.macros.tiddlersBar.isShown()) {
		story.forEachTiddler(function(t,e){
			if (t!=title) e.style.display="none";
			else e.style.display="";
		})
		config.macros.tiddlersBar.currentTiddler=title;
	}
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
	coreRefreshPageTemplate(title);
	if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}

ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)

config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);

config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");

//}}}
[img[Time Registrations Window|images/product/Projango Agile - Time Registrations Window.png]]

The time registrations window shows all the time registrations attached to a work item.

New time registrations can be added by direct entering of the time registration details into the form and pressing the Add button. Alternatively the Add Time Registration button at the toolbar can be used which opens a special editor window. To edit an existing entry use the right click menu on the list or open the time registration details with a double click on the list entry.

Time registration details are only visible to authorized people which have the right to see the details. A normal user is only able to see his own time registration details. However it is always visible for every user how many hours are booked on a task and also the aggregated information on the stories and sprints.
!User Features

[img[Toolbar 1|images/product/Projango Agile -Scrumboard Toolbar with Pointers 1.png]]
[img[Toolbar 2|images/product/Projango Agile -Scrumboard Toolbar with Pointers 2.png]]

|!No|!Function|h
|1|Open the [[Sprint Details Editor]].|
|2|Open the [[Chart Selector Menu]].|
|3|Create an Excel report of the sprint.|
|4|Create a PDF report of the sprint.|
|5|Open all story lines and show the task notes. A left click + ~ALT-Key enlarges all notes of the taskboard.|
|6|Close all story lines. A left click + ~ALT-Key shrinks all notes of the taskboard.|
|7|Toggle between several and only one open story line mode.|
|8|[[Selector|Project and Sprint Tree Selector]] for the current project or sprint.|
|9|Open the [[project list|Project Planning]].|
|10|Open the [[sprint|Sprint Planning]] list of the current selected project. A left click + ~ALT-Key opens the [[Sprint Wizard]] for a fast creation of a project with a related sprint.|
|11|Open the [[backlog|Project Backlog]] of the current selected project.|
|12|Logout.|
|13|Open the online help|
|14|Open the [[user self management|User Management]].|
|15|The managed task count resolution.|
|16|The managed task estimation resolution.|
|17|Open the [[about dialog|About Dialog]] which also includes the [[license manager|License Manager]].|
|18|Open the [[up-to-date Check|Up-to-date Check]].|

!Administrator Features

[img[Toolbar 2|images/product/Projango Agile -Scrumboard Toolbar with Pointers 3.png]]

|!No|!Function|h
|19|Open the [[user management|User Management]]. A left click + ~ALT-Key opens the [[User Wizard]] for a fast creation of users.|

!Up-to-date Check Info
[img[Up-to-date Check Info|images/product/Projango Agile - Up-to-date Check Info.png]]

!Up-to-date Check News
[img[Up-to-date Check News|images/product/Projango Agile - Up-to-date Check News.png]]

!Up-to-date Check Latest Changes
[img[Up-to-date Check Latest Changes|images/product/Projango Agile - Up-to-date Check Latest Changes.png]]
To update Projango you normally only need to exchange the projango-ear.ear. Xenatec strongly advises to stop the application server and to [[make a backup|Backup]] prior to an update.

In case of a default installation, the projango-ear.ear resides in ///usr/local/jboss/standalone/deployments//

A data migration for a Projango installation will be performed automatically as soon as an updated but yet unmigrated Projango system receives the first request.
Make sure that an current backup of the Projango data exists before confirming the start of the migration.

!! Manual tasks
Some changes for an updated Projango Agile cannot be performed automatically, since they regard the configuration of the ~JEE-Server itself, not the Projango application. Please check if you are about to install one of the cited updates of Projango and perform the required steps manually.

!!!Updating from Projango Agile, V1.0.0.M3-20110603-1141 and earlier

*You need to install ~JBoss 7.1 as described in [[Installation]].
*Xenatec strongly advises that you update your system and the projango database to ~PostgresQL 9.1 and conduct the adaptions for ~PostgresQL described in [[Installation]].
*Prior to the first ~JBoss start, you need to move your Projango's ~LDAP-files (previously residing as //<~JBOSS5_HOME>/server/default/work/jboss.web/localhost/projango-directory//) to the ~JBoss 7.1 work directory: //<~JBOSS_HOME>/standalone/tmp/work/jboss.web/default-host/// (when performed correctly, a directory //<~JBOSS_HOME>/standalone/tmp/work/jboss.web/default-host/projango-directory// and subdirectories //schema// and //system// exist after the move). If you have already started ~JBoss before moving Projango's ~LDAP-files, initial //schema// and //system// subdirectories were created that must be removed before copying Projango's ~LDAP-files into that directory.
* If you choose to __not__ update your ~PostgresQL-Installation to Postgres 9.1, you need to
**replace the //<~JBOSS7_1_HOME>/standalone/deployments/postgresql-9.1-902.jdbc4.jar// with the previous version that resided at //<~JBOSS5_1_HOME>/server/default/lib/postgresql-8.4-701.jdbc4.jar// and
**modify //~META-INF/jboss-deployment-structure.xml// inside //<~JBOSS7_1_HOME>/standalone/deployments/jackrabbit-jca-2.4.1.rar// (in spite the extension, this file is an zip archive): the dependency defined in this file must be changed to :
{{{
<module name="deployment.postgresql-8.4-701.jdbc4.jar" />
}}}
!!!Updating from Projango Agile, V1.0.0.~RC2-20120303-1947
*You need to install ~JBoss 7.1 as described in [[Installation]].
*Xenatec strongly advises that you update your system and the projango database to ~PostgresQL 9.1 and conduct the adaptions for  ~PostgresQL described in [[Installation]].
*Prior to the first ~JBoss start, you need to move your Projango's ~LDAP-files (previously residing as //<~JBOSS7_0_HOME>/standalone/tmp/work/jboss.web/default-host/projango-directory//) to the ~JBoss 7.1 work directory: //<~JBOSS_HOME>/standalone/tmp/work/jboss.web/default-host/// (when performed correctly, a directory //<~JBOSS_HOME>/standalone/tmp/work/jboss.web/default-host/projango-directory// and subdirectories //schema// and //system// exist after the move). If you have already started ~JBoss before moving Projango's ~LDAP-files, initial //schema// and //system// subdirectories were created that must be removed before copying Projango's ~LDAP-files into that directory.
* If you choose to __not__ update your ~PostgresQL-Installation to Postgres 9.1, you need to
**replace the //<~JBOSS7_1_HOME>/standalone/deployments/postgresql-9.1-902.jdbc4.jar// with the previous version that resided at //<~JBOSS7_0_HOME>/standalone/deployments/postgresql-8.4-701.jdbc4.jar// and
**modify //~META-INF/jboss-deployment-structure.xml// inside //<~JBOSS7_1_HOME>/standalone/deployments/jackrabbit-jca-2.4.1.rar// (in spite the extension, this file is an zip archive): the dependency defined in this file must be changed to :
{{{
<module name="deployment.postgresql-8.4-701.jdbc4.jar" />
}}}
!!!Updating from Projango Agile, V1.0.0.~RC3-20120713-0934
** Projango advises you to modify logging to separate noisy third-party-logs. Adapt //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// while the ~JBoss is shut down. Add the following to  /profile/subsystem[@xmlns="urn:jboss:domain:logging:1.1"]:
{{{
        <subsystem xmlns="urn:jboss:domain:logging:1.1">
...
            <logger category="org.apache.jackrabbit.core.ItemSaveOperation" use-parent-handlers="false">
                <level name="ERROR"/>
                <handlers>
                    <handler name="JCR_FILE"/>
                </handlers>
            </logger>
...
        </subsystem>
}}}
*Substitute queue name. Adapt //<~JBOSS_HOME>/standalone/configuration/standalone-full.xml// while the ~JBoss is shut down. 
**Modify /profile/subsystem[@xmlns="urn:jboss:domain:messaging:1.1"]/address-settings/address-setting[@match="jms.queue.push"]:
{{{
...
		    <address-setting match="jms.queue.pushcleanup">
...
		    </address-setting>
...
}}}
**Modify /profile/subsystem[@xmlns="urn:jboss:domain:messaging:1.1"]/jms-destinations/jms-queue[@name="push"]:
{{{
...
                <jms-queue name="pushcleanup">
                    <entry name="queue/projango/pushcleanup"/>
...
		</jms-queue>
...
}}}
!!Licence update
To update a license you need to exchange the file projango_license.lic.

In case of a default installation, the license file resides in ///usr/local/jboss/modules/com/xenatec/projango/config/main/projango_license.lic//

!! A migration logs "Error while merging indexes" error messages
During a migration, some log entries of the following form may occur:
{{{
[IndexMerger] Error while merging indexes:
java.io.IOException: Directory was previously created with a different LockFactory instance; please pass null as the lockFactory instance and use setLockFactory to change it
	at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:192)
        ...
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
}}}

These messages can be discarded. They are generated by the underlying repository engine, since one of its background tasks got outperformed by the synchronous migration tasks.


!User Overview
[img[Project Details|images/product/Projango Agile - User Overview.png]]

The Overview tab contains the major settings of a user.

!User Details
[img[User Details|images/product/Projango Agile - User Details.png]]

The Details tab contains additional, less frequently used setting.

!User Info
[img[User Infos|images/product/Projango Agile - User Info.png]]

The Info tab contains some generated and non editable data of the user.

!User Relations
[img[User Relations|images/product/Projango Agile - User Relations.png]]

The Relations tab lists all relations of the user to other work items.
!User Management
[img[User Management|images/product/Projango Agile - User Management.png]]

The User Management window provides a list of all users inside Projango Agile. To add an additional user use the toolbar button or the right click menu. To edit an existing user a double click on the user can be used as well as the right click menu. The [[details editor for the user|User Details Editor]] then opens.
!User Wizard 1
[img[User Wizard 1|images/product/Projango Agile - User Wizard 1.png]]

Create a new user by entering the user credentials. The user avatar image can be uploaded by a simple click on the icon.

All users are created immediately on pressing the Next button. Selecting the Cancel button in a later page does not delete the already created users.

!User Wizard 2
[img[User Wizard 2|images/product/Projango Agile - User Wizard 2.png]]

Here the administrator can decide to create other users or to leave the wizard.

Selecting Cancel closes the wizard, but leaves all created users in place.
Selecting Finish leads to an automatic request to log out as administrator; it is recommended to begin the normal work as an usual user.
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<!--
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
-->
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
[img[Web Links Window|images/product/Projango Agile - Web Links Window.png]]

The web links window shows all the web links attached to a work item.

New web links can be added by directly entering the web link details into the form and pressing the Add button. Alternatively the Add Web Link button at the toolbar can be used which opens a special editor window. To edit an existing entry use the right click menu on the list or open the web link details with a double click on the list entry.

Weblinks are directly reachable via a sub menu of the right click menu of the work item they belong to. It is also possible to jump to the target by selecting {{constant{Browse To}}} in the web link's context menu in the web link list.
Projango User Guide