Redmine
*******
Introduction
============
Redmine est une application web Open Source de gestion complète de projet en mode web, développé en Ruby sur la base du framework Ruby on Rails.
Redmine est basé sur des modules et des plugins, chacun pouvant être activé séparément
Principales fonctionnalités :
* gestion multi-projets,
* gestion fine des droits utilisateurs définis par des rôles,
* gestion de groupes d'utilisateurs,
* rapports de bogues (bugs), demandes d'évolutions,
* Wiki multi-projets,
* forums multi-projets,
* news accessibles par RSS / ATOM,
* notifications par courriel (mail),
* gestion de feuilles de route, GANTT, calendrier, historique,
* intégration avec divers suivis de versions : SVN, CVS, Mercurial, Git, Bazaar & Darcs,
* identification possible via LDAP,
* multilingue (25 langues disponibles pour la 0.7.0),
* support de plusieurs bases de données : MySQL, PostgreSQL ou SQLite.
les modules par défaut:
* Suivi des demandes
* Suivi du temps passé
* Publication d'annonces
* Publication de documents
* Publication de fichiers
* Wiki
* Dépôt de sources
* Forums de discussion
* Calendrier
* Gantt
les points fort, à mon avis de redmine sont:
* hautement personnalisable et paramétrable: on peut tout gérer via une interface sobre et efficace (utilisation ou non de module, de plugin)
* multiplateforme et multibase
* multi-projets et sous projets: tout les projets peuvent être gérés dans un seul outil avec des règles communes
* gestion de documents
* gestion fine des droits:on génère des membres, des rôles ayant des droits et pour chaque projets on associe membre et rôle. La gestion des rôles va jusqu'à l'autorisation des statuts par rôle (un key user pour avoir le droit de placer le statut nouveau ou clotûré)
* gestion propre des rôles et des statuts (il existe des rôles et des statuts lors de l'initialisation de la base mais on peut tout reparamétré)
* utilisation de champs personnalisables dans les demandes et les catégories (on peut facilement ajouter des notions à remplir dans les demandes)
* suivi des demandes par mail (création de demande par mail aussi)
le point faible:
même si l'outil est open source toutes créations ou modifications impose de fortes connaissances en:
* SGBD
* HTML
* CSS
* Javascript
* Ruby
* framework Rails
cela fait beaucoup
Installation
============
Cette installation ce fait sous windows mais elle est transposable sous linux
L'architecture est la suivante:
- appli redmine
- sgbd postgresql
- serveur web webrick
on télécharge sur le net:
- **rubyinstaller-1.8.6-p398.exe** via http://rubyinstaller.org/
- **redmine-1.0.4.zip** via http://rubyforge.org/frs/?group_id=1850
- **postgresql-9.0.1-1-windows.exe** via http://www.postgresql.org/download/windows
.. note::
pour l'installation sous linux, le principe reste le même il faut installer ruby, un SGBD puis les différents modules de rails
* installation de ruby par rubyinstaller-1.8.6-p398 dans C:\ruby186
* décompression de redmine-1.0.4.zip dans C:/users/faoustin/redmine
* modification du fichier C:/users/faoustin/redmine/config/database.yml.example en C:/users/faoustin/redmine/config/database.yml contenant
.. code-block:: bash
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: my_password
encoding: utf8
schema_search_path: public
* installation de postgresql 9.0 via postgresql-9.0.1-1-windows.exe
* création d'une base redmine
.. code-block:: sql
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
* puis dans une console installation des modules manquants
.. code-block:: bash
gem install i18n -v=0.4.2
gem install rails -v=2.3.5
-- installe plusieurs module dont rack en version 1.0.1
gem install postgres-pr
* dans une console paramétrage de redmine
.. code-block:: bash
cd C:\users\faoustin\redmine
rake generate_session_store
set RAILS_ENV=production
--création des tables de la base
rake db:migrate
--intégration des données de base (choisir le mode fr)
rake redmine:load_default_data
-- lancement du server webrick
ruby script/server webrick -e production
* consulter redmine sur http://127.0.0.1:3000/, vous pouvez vous connecter en **admin** password **admin**
.. note::
il est possible de passer dans la commande gem la notion de proxy, par exemple
gem install rails -v=2.3.5 -p http://proxy-ancenis.terrena.fr:8080
.. note::
pour changer le port il faut lancer la commande ruby script/server webrick avec le paramètre *-p 3001* par exemple
puis modifier Général\Nom d'hôte et chemin dans la partie configuration de redmine
.. warning::
l'environnement development permet surtout de ne pas utiliser de cache pour webrick
Au niveau serveur web on peut aussi utiliser **mongrel** qui est écrit en C et ruby
On peut aussi associer mongrel +:
* apache, dans ce cas apache n'est qu'un proxy qui envoie toute les demandes sur le serveur mongrel. (http://nlakkakula.wordpress.com/2008/11/24/10-steps-for-deploying-your-ruby-on-rails-application-on-a-windows-server-2008-apache-mongrel-cluster/)
* nginx , dans ce cas nginx n'est qu'un proxy (http://www.maximegaillard.com/1945-mongrel-et-nginx-deploiement-de-ruby-on-rails.html)
liste des plugins
* http://www.redmine.org/wiki/redmine/Plugin_list
* http://www.redmine.org/plugins
passage à la version 1.3
========================
l'installation est identique mais des versions de softs changent:
* ruby 1.8.7 http://rubyforge.org/frs/download.php/72085/rubyinstaller-1.8.7-p302.exe
puis ::
gem install rails -v=2.3.14
gem install i18n -v=0.4.2
gem install rack -v=1.1.1 or
gem install rack -v=1.1.2
gem install postgres-pr
installation de redmine en tant que service
===========================================
Il est possible sous windows *XP* de créer un service windows qui va lancer le server webrick de votre application.
dans notre cas:
* ruby est installé içi C:/Ruby187
* redmine est installé dans D:/redmine
Pour cela:
* télécharger le ressource kit qui se trouve à cette adresse http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en
* créer le service redmine
.. code-block:: bash
"C:/Program Files/Windows Resource Kits/Tools/"Instsrv.exe redmine "C:/Program Files/Windows Resource Kits/Tools/srvany.exe"
* modifier la clé de registre "HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/redmine"
.. figure:: data/20101216_1.jpg
.. figure:: data/20101216_2.jpg
* créer des dépendances avec d'autres services si besoin (ex le service de la base de donnée)
.. figure:: data/20101228_1.jpg
* lancer le service
.. figure:: data/20101216_3.jpg
* arrêt / lancement des services en ligne de commande
* créer le service redmine
.. code-block:: bash
Net stop redmine
Net start redmine
.. note::
le changement de theme et l'utilisation de prism (mozilla) permet d'avoir l'aspect d'une application standalone
.. warning::
il est possible de suivre en tant réel les logs du service en fessant
.. code-block:: bash
tail -f log\production.log
installation de redmine sous debian6
====================================
Comme souvent cela est plus facile et plus rapide.
Nous allons installer Redmine avec un serveur apache
pour cela:
.. code-block:: bash
apt-get install vim postgresql
apt-get install apache2 libapache2-mod-passenger
apt-get install redmine redmine-pgsql librmagick-ruby
.. note::
lors de l'installation de redmine laisser apt créer et configurer la base postgresql
Nous allons configurer apache
.. code-block:: bash
cp /usr/share/doc/redmine/examples/apache2-passenger-alias.conf /etc/apache2/sites-available/redmine.conf
vim /etc/apache2/sites-available/redmine.conf
modifier le fichier /etc/apache2/sites-available/redmine ainsi
* remplacer "VirtualHost localhost" par `"VirtualHost *:80"`
* décommenter Servername pour indiquer par exemple ServerName myservdeb02.myprop.fr
On vérifie les hôtes apache actuellement activé:
.. code-block:: bash
root@vps102:~# ls -la /etc/apache2/sites-enabled/
total 8
drwxr-xr-x 2 root root 4096 Aug 8 14:09 .
drwxr-xr-x 7 root root 4096 Aug 8 14:09 ..
lrwxrwxrwx 1 root root 26 Aug 8 14:09 000-default -> ../sites-available/default
on voit que default est actuellement activer, il faut donc le désactiver et activer redmine, activer le module rewrite et relancer apache
.. code-block:: bash
a2dissite default
a2ensite redmine.
a2enmod rewrite
/etc/init.d/apache2 reload
et voila il suffit maintenant de ce connecter sur http://myservdeb02.myprop.fr/redmine !!!
.. note::
la config de redmine est sur /etc/redmine/default/database.yml
installation de la dernière version de redmine
==============================================
test réalisé sous Debian7.4
::
apt-get install postgresql postgresql-server-dev-all apache2 subversion rake ruby-dev rubygems librmagick-ruby libopenssl-ruby libpgsql-ruby libapache2-mod-passenger imagemagick libmagickwand-dev libxslt-dev libxml2-dev
gem install -v=3.2.13 rails
gem install -v=2.35.1 selenium-webdriver
gem install rmagick
gem install -v=2.0.2 jquery-rails
gem install -v=1.0.9 coderay
gem install -v=1.5.0 fastercsv
gem install -v=3.0.0 builder
gem install -v=0.3.1 net-ldap
gem install -v=2.3.0 ruby-openid
gem install rack-openid
gem install pg
gem install yard
gem install -v=3.3.2 shoulda
gem install redcarpet
gem install -v=0.13.3 mocha
gem install -v=2.0.0 capybara
gem install -v=1.5.9 nokogiri
création de la base postgresql
::
su postgres
psql
postgres=# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'redmine' NOINHERIT VALID UNTIL 'infinity';
postgres=# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine TEMPLATE template0;
postgres=# \q
exit
modifier /etc/postgresql/9.1/main/postgresql.conf pour listen '*' et port 5432
::
cd /tmp
svn co http://redmine.rubyforge.org/svn/branches/2.3-stable redmine-2.3
mv redmine-2.3/ /var/lib/redmine
cd /var/lib/redmine
::
echo "production:
adapter: postgresql
database: redmine
host: localhost
port:
username: redmine
password: redmine
encoding: utf8
schema_search_path: public" > config/database.yml
::
bundle install --without test production
rake generate_secret_token
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
ln -s /var/lib/redmine/public /var/www/redmine
chown -R www-data:www-data /var/www/redmine
chmod -R 777 files log tmp public/plugin_assets
echo "RailsBaseURI /redmine" > /etc/apache2/sites-available/redmine
a2ensite redmine
/etc/init.d/apache2 restart
installation de l'envoi des emails
==================================
.. code-block:: bash
cd /etc/redmine/default
cp /usr/share/redmine/config/email.yml.example .
mv email.yml.example email.yml
vi email.yml
/etc/init.d/apache2 restart
on doit trouver dans email.yml par exemple
::
production:
delivery_method: :smtp
smtp_settings:
address: srvxxxx1
port: 25
domain: myprop-group.com
authentication: :login
user_name: "informatiquepz"
password: "informatique"
intégration ldap
================
.. figure:: data/20120628_01.png
installation d'un plugin
========================
redmine_wiki_notes
------------------
juste décompresser l'archive et l'installer dans le repertoire plugin
http://www.github.com/dseifert/redmine_wiki_notes
et ajouter dans wiki_syntax.html
::
Wiki Note |
| {{note(text)}} | |
| {{important(text)}} | |
| {{warning(text)}} | |
| {{tip(text)}} | |
todo
----
Nous allons installer un plugin qui fait la gestion de todo
* télécharger et décompresser la plugin à l'url http://www.redmine.org/boards/3/topics/4070 (prendre la branche 'master')
* renommer le repertoire du plugin en 'redmine_todos_plugin'
* arreter redmine (ex sous windows)
.. code-block:: bash
net stop redmine
* sauvegarder votre base de donnée (ici la base ce nomme redmine)
.. code-block:: bash
pg_dump redmine > fichier_de_sortie
* placer le répertoire 'redmine_todos_plugin' dans 'vendor\plugins'
* lancer dans une console à la racine de votre projet redmine
.. code-block:: bash
rake db:migrate_plugins RAILS_ENV=production
* redémarrer redmine
.. code-block:: bash
net start redmine
* connecter vous en admin et allez voir si le plugin est bien présent + paramètres utilisateurs si besoin
Graphviz
--------
Il est possible d'ajouter un plugin qui permet de créer des graphiques **graphviz** à la voler
* télécharger et installer graphviz depuis http://graphviz.org/
* ajouter dans votre path le répertoire d'installation des binaires de graphviz (pour windows uniquement)
* télécharger et décompresser la plugin à l'url http://www.assembla.com/wiki/show/mochaco-public/Mochaco_Graphviz_plugin
* arreter redmine (ex sous windows)
.. code-block:: bash
net stop redmine
* sauvegarder votre base de donnée (ici la base ce nomme redmine)
.. code-block:: bash
pg_dump redmine > fichier_de_sortie
* placer le répertoire 'mochaco_graphviz' dans 'vendor\plugins'
.. note::
il n'est pas utile pour ce plugin de lancer un db:migrate_plugins car le plugin n'a pas d'impact sur la base
* redémarrer redmine
.. code-block:: bash
net start redmine
* connecter vous en admin et allez voir si le plugin est bien présent + paramètres
.. figure:: data/20110107_5.jpg
il suffit par la suite d'utiliser la macro graphviz ainsi
.. code-block:: bash
{{graphviz(dot,
digraph sample{
a -> b -> c;
b -> d;
a [label="URL link", URL="http://www.redmine.org"];
b [label="Wiki link", URL="[[WikiSamplePage]]"];
}
)}}
Mise en place fonctionnelle
===========================
Mon expérience me permet de mettre en avant une démarche d'installation
* n'autoriser qu'un accès à redmine qu'avec une authentification obligatoire
* définir les rôles et leurs droits
* définir les différents statuts d'une demande d'évo (ex demande / analyse / dev / test info / test utilisateur / clos / supprimé)
* définir les champs à ajouter pour les demandes
* qu'avons nous besoins pour résoudre une demande de modification et à quel niveau
* quelle donnée pour la supervision (ex site, demandeur, ...)
* identification des reports
* définir les champs à ajouter pour les projets (ex enveloppe budgétaire)
* créer les projets et sous projets (par défaut pour moi personne ne peut créer de projet hors mis l'admin, un chef de projet peut créer des sous projet)
* créer membres et les lier aux projets avec leurs rôles respectifs
Ajout de statistique
====================
Il est souvent intéressant d'avoir sur la page d’accueil de redmine (la page welcome) des infos de statistique comme:
* nombre de ticket ouvert/fermé/encours pour une période de temps
* répartition des tickets par projet
* répartition des tickets par contributeur
* ...
Il existe des plugins qui permettent de faire des graphiques mais je les trouve lourd et souvent pas adapté à une visualisation rapide.
Il est possible par contre de modifier la page welcome en y intégrant des graphiques qui seront calculés régulièrement via un crontab et l'utilisation open-flash-chart
exemple de fichier python permettant de générer des graphiques
pyofc.py
.. code-block:: python
version = '0.1'
author = 'Frederic Aoustin'
description = 'generate data for open flash chart'
class Chart:
def __init__(self, file, cursor):
try:
self._desc = cursor.description
self._data = cursor.fetchall()
self._file = open(file,'w')
except Exception as e:
raise Exception, 'Error in chart, %s' % e
def generate(self):
pass
class PieChart(Chart):
"""cursor:
| |title|
|lb1|val1 |
|lb2|val2 |
|lb3|val3 |
"""
txt = """&bg_colour=#FDFDFD&
&pie=60,#505050,{font-size: 12px; color: #404040;}&
&values=%(values)s&
&pie_labels=%(labels)s&
&colours=#5E83BF,#C11B01,#D2D2FB,#B0C101,#d01f3c,#356aa0,#C79810,#80a033,#9933CC,#CC3399&
"""
def __init__(self, file, cursor):
Chart.__init__(self, file, cursor)
def generate(self):
id = {}
id['labels'] = ','.join([str(item[0]) for item in self._data])
id['values'] = ','.join([str(item[1]) for item in self._data])
self._file.write(self.txt % id)
self._file.close()
class BarSketchChart(Chart):
"""cursor:
| |y1 |y2 |
|lb1|val1|val4|
|lb2|val2|val5|
|lb3|val3|val6|
"""
txt = """&x_label_style=11,#303030,2&
&y_label_style=11,#303030&
&y_ticks=0,10,1&
&x_labels=%(labels)s&
&y_min=0&
&y_max=%(max_value)s&
&bg_colour=#FDFDFD&
&x_grid_colour=#FDFDFD&
&y_grid_colour=#FDFDFD&
"""
txt2 = """&bar_sketch%(cnt)s=55,6,%(color)s,#000000,%(name)s,10&
&values%(cnt)s=%(values)s&
"""
color = ["#5E83BF","#9933CC","#80a033","#C11B01","#CC3399","#D2D2FB","#B0C101","#d01f3c","#356aa0","#C79810","#80a033","#9933CC","#CC3399"]
def __init__(self, file, cursor):
Chart.__init__(self, file, cursor)
def generate(self):
id = {}
id['labels'] = ','.join([str(item[0]) for item in self._data])
ln = len(self._desc)-1
m = []
for i in self._data:
for j in i[1:]:
m.append(j)
id['max_value'] = max(m)
st = self.txt % id
k=1
for i in range(1,ln+1):
id = {}
id['values'] = ','.join([str(item[i]) for item in self._data])
id['name'] = self._desc[i][0]
id['color'] = self.color[i]
id['max_value'] = max(m)
if k == 1:
id['cnt'] = ''
else:
id['cnt']='_%s' % k
st = st + self.txt2 % id
k = k+1
self._file.write(st)
self._file.close()
class BarGlassChart(BarSketchChart):
"""cursor:
| |y1 |y2 |
|lb1|val1|val4|
|lb2|val2|val5|
|lb3|val3|val6|
"""
txt2 = """&bar_glass%(cnt)s=55,%(color)s,,%(name)s,10&
&values%(cnt)s=%(values)s&
"""
def __init__(self, file, cursor):
BarSketchChart.__init__(self, file, cursor)
class LineHollowChart(BarSketchChart):
"""cursor:
| |y1 |y2 |
|lb1|val1|val4|
|lb2|val2|val5|
|lb3|val3|val6|
"""
txt2 = """&line_hollow%(cnt)s=2,%(color)s,%(name)s,10,4&
&values%(cnt)s=%(values)s&
"""
def __init__(self, file, cursor):
BarSketchChart.__init__(self, file, cursor)
class AreaHollowChart(BarSketchChart):
"""cursor:
| |y1 |y2 |
|lb1|val1|val4|
|lb2|val2|val5|
|lb3|val3|val6|
"""
txt2 = """&area_hollow%(cnt)s=2,3,25,%(color)s,%(name)s,10,%(color)s&
&values%(cnt)s=%(values)s&
"""
def __init__(self, file, cursor):
BarSketchChart.__init__(self, file, cursor)
redminegraph.py (faire un sh pour le mettre dans un crontab)
.. code-block:: python
import psycopg2
import pyofc
link = {'query1':{
'con' : "dbname='redmine_default' host='127.0.0.1' port=5432 user='postgres' password='postgres'",
'query':"""SELECT MOIS,
CREATED ,
TERMINATED,
(SELECT SUM(B.CREATED) FROM ZZ_SYNTHESE_MOIS AS B WHERE B.MOIS <= A.MOIS) - (SELECT SUM(B.TERMINATED) FROM ZZ_SYNTHESE_MOIS AS B WHERE B.MOIS <= A.MOIS) AS OPEN
FROM ZZ_SYNTHESE_MOIS AS A
""",
'chart':'LineHollowChart',
'file':'/usr/share/redmine/public/graph1.txt'
},
'query2':{
'con' : "dbname='redmine_default' host='127.0.0.1' port=5432 user='postgres' password='postgres'",
'query':"""
SELECT WEEK,
CREATED ,
TERMINATED,
(SELECT SUM(B.CREATED) FROM ZZ_SYNTHESE_WEEK AS B WHERE B.WEEK <= A.WEEK) - (SELECT SUM(B.TERMINATED) FROM ZZ_SYNTHESE_WEEK AS B WHERE B.WEEK <= A.WEEK) AS OPEN
FROM ZZ_SYNTHESE_WEEK AS A""",
'chart':'LineHollowChart',
'file':'/usr/share/redmine/public/graph2.txt'
},
'query3':{
'con' : "dbname='redmine_default' host='127.0.0.1' port=5432 user='postgres' password='postgres'",
'query':"""select * from (select
projects.name AS PROJECT,
count(*) *100 / (select count(*) from issues where to_char(issues.created_on, 'YYYY/WW') > to_char(current_timestamp - interval '12 weeks', 'YYYY/WW') )AS CREATED
from issues, projects
WHERE issues.project_id = projects.id
and to_char(issues.created_on, 'YYYY/WW') > to_char(current_timestamp - interval '12 weeks', 'YYYY/WW')
group by projects.name) as A where CREATED >0""",
'chart':'PieChart',
'file':'/usr/share/redmine/public/graph3.txt'
},
'query4':{
'con' : "dbname='redmine_default' host='127.0.0.1' port=5432 user='postgres' password='postgres'",
'query':"""select * from (select
projects.name AS PROJECT,
count(*) *100 / (select count(*) from issues where to_char(issues.created_on, 'YYYY/MM') > to_char(current_timestamp - interval '12 months', 'YYYY/MM') )AS CREATED
from issues, projects
WHERE issues.project_id = projects.id
and to_char(issues.created_on, 'YYYY/MM') > to_char(current_timestamp - interval '12 months', 'YYYY/MM')
group by projects.name) as A where CREATED > 0""",
'chart':'PieChart',
'file':'/usr/share/redmine/public/graph4.txt'
},
}
for i in link.keys():
connect = psycopg2.connect(link[i]['con'])
cursor = connect.cursor()
cursor.execute(link[i]['query'])
if link[i]['chart']=='PieChart':
pyofc.PieChart(link[i]['file'],cursor).generate()
if link[i]['chart']=='BarSketchChart':
pyofc.BarSketchChart(link[i]['file'],cursor).generate()
if link[i]['chart']=='BarGlassChart':
pyofc.BarGlassChart(link[i]['file'],cursor).generate()
if link[i]['chart']=='LineHollowChart':
pyofc.LineHollowChart(link[i]['file'],cursor).generate()
if link[i]['chart']=='AreaHollowChart':
pyofc.AreaHollowChart(link[i]['file'],cursor).generate()
cursor.close()
connect.close()
création des vues dans redmine
.. code-block:: sql
CREATE VIEW ZZ_SYNTHESE_WEEK (WEEK,CREATED, TERMINATED ) AS
SELECT WEEK,
SUM(CREATED) AS CREATED ,
SUM(TERMINATED) AS TERMINATED
FROM(
select
to_char(created_on, 'YYYY/WW') AS WEEK,
count(*) AS CREATED,
0 AS TERMINATED
from issues
WHERE to_char(created_on, 'YYYY/WW') > to_char(current_timestamp - interval '12 weeks', 'YYYY/WW')
group by WEEK
union
select
to_char(updated_on, 'YYYY/WW') AS WEEK,
0 AS CREATED,
count(*) AS TERMINATED
from issues, issue_statuses
where status_id= issue_statuses.id
and issue_statuses.is_closed = TRUE
and to_char(updated_on, 'YYYY/WW') > to_char(current_timestamp - interval '12 weeks', 'YYYY/WW')
group by WEEK) AS A
GROUP BY WEEK
ORDER BY WEEK;
CREATE VIEW ZZ_SYNTHESE_MOIS (MOIS,CREATED, TERMINATED ) AS
SELECT MOIS,
SUM(CREATED) AS CREATED ,
SUM(TERMINATED) AS TERMINATED
FROM(
select
to_char(created_on, 'YYYY/MM') AS MOIS,
count(*) AS CREATED,
0 AS TERMINATED
FROM issues
WHERE to_char(created_on, 'YYYY/MM') > to_char(current_timestamp - interval '12 months', 'YYYY/MM')
group by MOIS
union
select
to_char(updated_on, 'YYYY/MM') AS MOIS,
0 AS CREATED,
count(*) AS TERMINATED
from issues, issue_statuses
where status_id= issue_statuses.id
and issue_statuses.is_closed = TRUE
and to_char(updated_on, 'YYYY/MM') > to_char(current_timestamp - interval '12 months', 'YYYY/MM')
group by MOIS) AS A
GROUP BY MOIS
ORDER BY MOIS;
modification de welcome\index.rhtml
::
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:controller => 'news', :action => 'index', :key => User.current.rss_key, :format => 'atom'},
:title => "#{Setting.app_title}: #{l(:label_news_latest)}") %>
<%= auto_discovery_link_tag(:atom, {:controller => 'projects', :action => 'activity', :key => User.current.rss_key, :format => 'atom'},
:title => "#{Setting.app_title}: #{l(:label_activity)}") %>
<% end %>
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:controller => 'news', :action => 'index', :key => User.current.rss_key, :format => 'atom'},
:title => "#{Setting.app_title}: #{l(:label_news_latest)}") %>
<%= auto_discovery_link_tag(:atom, {:controller => 'projects', :action => 'activity', :key => User.current.rss_key, :format => 'atom'},
:title => "#{Setting.app_title}: #{l(:label_activity)}") %>
<% end %>
sauvegarde
==========
Il faut sauvegarder la base, le code redmine mais aussi les fichiers joints lors de l'utilisation, et les envoyer sur un autre serveur
Dans cette exemple on envoie la sauvegarde sur un serveur zrvpzdev (serveur windows) qui possède un dossier partagé nommé REDMINE
::
su - postgres -c "pg_dump redmine_default" > redmine_default.sql
tar -cjf redmine_db.tar.gz redmine_default.sql
tar -cjf redmine_varlib.tar.gz /var/lib/redmine
tar -cjf redmine_usrshare.tar.gz /usr/share/redmine
smbclient //myservdev/REDMINE -U administrateur%Numeid@1525$ -c 'put redmine_db.tar.gz'
smbclient //myservdev/REDMINE -U administrateur%Numeid@1525$ -c 'put redmine_varlib.tar.gz'
smbclient //myservdev/REDMINE -U administrateur%Numeid@1525$ -c 'put redmine_usrshare.tar.gz'
su - postgres -c "vacuumdb --full --analyze redmine_default"
.. note::
si vous êtes dans un domaine il faut modifier le fichier /etc/samba/smb.conf pour mettre workgroup=myprop par exemple
reste à faire
=============
* installé redmine avec apache sous windows
* optimiser l'utilisation de postgresql + sauvegarde automatique
* voir les plugins qui manque (stat + todolist)
* integration d'un outil de design
* modification en masse
* création d'une page mes activités (multi-projet) avec filtre (projet / user/ date)
todolist
* generation de rss
* rôle sur la validation des taches d'autres (valider les tâches des autres)
* validation des taches doit entrainer des "maj" dans la demande
* filtre dans les taches (projet assigné)
* design
* suppression du choix de la demande