Merge branch 'master' into subcontracting
10
.gitignore
vendored
|
|
@ -1,7 +1,7 @@
|
|||
# ignore build output directory
|
||||
navalplanner-webapp/target
|
||||
navalplanner-business/target
|
||||
navalplanner-gantt-zk/target
|
||||
libreplan-webapp/target
|
||||
libreplan-business/target
|
||||
libreplan-gantt-zk/target
|
||||
ganttzk-demo-webapp/target
|
||||
ganttzk/target
|
||||
|
||||
|
|
@ -14,8 +14,8 @@ ganttzk/target
|
|||
*.patch
|
||||
|
||||
#ignore logs
|
||||
navalplanner-webapp/*.log
|
||||
navalplanner-webapp/*.log.????-??-??
|
||||
libreplan-webapp/*.log
|
||||
libreplan-webapp/*.log.????-??-??
|
||||
|
||||
#ignore backup files
|
||||
*~
|
||||
|
|
|
|||
45
AUTHORS
|
|
@ -1,16 +1,47 @@
|
|||
|
||||
Authors
|
||||
=======
|
||||
|
||||
* Cristina Alavariño Pérez <cristina.alvarino@comtecsf.es>
|
||||
|
||||
LibrePlan Team
|
||||
--------------
|
||||
|
||||
* Cristina Alvariño Pérez <cristina.alvarino@cafedered.es>
|
||||
* Jacobo Aragunde Pérez <jaragunde@igalia.com>
|
||||
* Fernando Bellas Permuy <fbellas@udc.es>
|
||||
* José María Casanova Crespo <jmcasanova@igalia.com>
|
||||
* Nacho Barrientos Arias <nacho@igalia.com>
|
||||
* Xavier Castaño García <xcastanho@igalia.com>
|
||||
* Ignacio Díaz Teijido <ignacio.diaz@comtecsf.es>
|
||||
* Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* Ignacio Díaz Teijido <ignacio.diaz@cafedered.es>
|
||||
* Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
* Francisco Javier Morán Rúa <jmoran@igalia.com>
|
||||
* Diego Pino García <dpino@igalia.com>
|
||||
* Manuel Rego Casasnovas <mrego@igalia.com>
|
||||
* Farruco Sanjurjo Arcay <fsanjurjo@igalia.com>
|
||||
* Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* Lorenzo Tilve Álvaro <ltilve@igalia.com>
|
||||
|
||||
|
||||
Previous Team Members
|
||||
---------------------
|
||||
|
||||
* Fernando Bellas Permuy <fbellas@udc.es>
|
||||
* José María Casanova Crespo <jmcasanova@igalia.com>
|
||||
* Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* Pablo Fernández de la Cigoña Nóvoa <pcigonha@igalia.com>
|
||||
* Farruco Sanjurjo Arcay <fsanjurjo@igalia.com>
|
||||
|
||||
|
||||
Translators
|
||||
-----------
|
||||
|
||||
* [es] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [gl] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [pt] Helena Grosso <lenagrosso@gmail.com>
|
||||
* [ru] Pavel Rudensky <prudensky@gmail.com>
|
||||
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
* Eloy Calatayud <ecalatayud@wirelessgalicia.com>
|
||||
* Sergio Carracedo <cto@opsou.com>
|
||||
* Pedro Figueras <sales@opsou.com>
|
||||
* Dmytro Melanchenko <melanchenko@gmail.com>
|
||||
* Adrián Pérez <aperez@igalia.com>
|
||||
|
|
|
|||
45
HACKING
|
|
@ -64,11 +64,11 @@ Debian/Ubuntu
|
|||
|
||||
* Use SQL sentences::
|
||||
|
||||
CREATE DATABASE navaldev;
|
||||
CREATE DATABASE navaldevtest;
|
||||
CREATE USER naval WITH PASSWORD 'naval';
|
||||
GRANT ALL PRIVILEGES ON DATABASE navaldev TO naval;
|
||||
GRANT ALL PRIVILEGES ON DATABASE navaldevtest TO naval;
|
||||
CREATE DATABASE libreplandev;
|
||||
CREATE DATABASE libreplandevtest;
|
||||
CREATE USER libreplan WITH PASSWORD 'libreplan';
|
||||
GRANT ALL PRIVILEGES ON DATABASE libreplandev TO libreplan;
|
||||
GRANT ALL PRIVILEGES ON DATABASE libreplandevtest TO libreplan;
|
||||
|
||||
* Download source code::
|
||||
|
||||
|
|
@ -76,6 +76,7 @@ Debian/Ubuntu
|
|||
|
||||
* Compile project::
|
||||
|
||||
$ cd libreplan/
|
||||
$ mvn clean install
|
||||
|
||||
* Launch application::
|
||||
|
|
@ -103,11 +104,11 @@ Fedora
|
|||
|
||||
* Use SQL sentences::
|
||||
|
||||
CREATE DATABASE navaldev;
|
||||
CREATE DATABASE navaldevtest;
|
||||
CREATE USER naval WITH PASSWORD 'naval';
|
||||
GRANT ALL PRIVILEGES ON DATABASE navaldev TO naval;
|
||||
GRANT ALL PRIVILEGES ON DATABASE navaldevtest TO naval;
|
||||
CREATE DATABASE libreplandev;
|
||||
CREATE DATABASE libreplandevtest;
|
||||
CREATE USER libreplan WITH PASSWORD 'libreplan';
|
||||
GRANT ALL PRIVILEGES ON DATABASE libreplandev TO libreplan;
|
||||
GRANT ALL PRIVILEGES ON DATABASE libreplandevtest TO libreplan;
|
||||
|
||||
* Set ``postgres`` user password::
|
||||
|
||||
|
|
@ -125,6 +126,7 @@ Fedora
|
|||
|
||||
* Compile project::
|
||||
|
||||
$ cd libreplan/
|
||||
$ mvn clean install
|
||||
|
||||
* Launch application::
|
||||
|
|
@ -163,11 +165,11 @@ openSUSE
|
|||
|
||||
* Use SQL sentences::
|
||||
|
||||
CREATE DATABASE navaldev;
|
||||
CREATE DATABASE navaldevtest;
|
||||
CREATE USER naval WITH PASSWORD 'naval';
|
||||
GRANT ALL PRIVILEGES ON DATABASE navaldev TO naval;
|
||||
GRANT ALL PRIVILEGES ON DATABASE navaldevtest TO naval;
|
||||
CREATE DATABASE libreplandev;
|
||||
CREATE DATABASE libreplandevtest;
|
||||
CREATE USER libreplan WITH PASSWORD 'libreplan';
|
||||
GRANT ALL PRIVILEGES ON DATABASE libreplandev TO libreplan;
|
||||
GRANT ALL PRIVILEGES ON DATABASE libreplandevtest TO libreplan;
|
||||
|
||||
* Set ``postgres`` user password::
|
||||
|
||||
|
|
@ -185,6 +187,7 @@ openSUSE
|
|||
|
||||
* Compile project::
|
||||
|
||||
$ cd libreplan/
|
||||
$ mvn clean install
|
||||
|
||||
* Launch application::
|
||||
|
|
@ -275,11 +278,11 @@ profiles defined in ``pom.xml`` of business and webapp modules).
|
|||
|
||||
* *dev* - Development environment (default)
|
||||
|
||||
It uses databases ``navaldev`` and ``navaldevtest``.
|
||||
It uses databases ``libreplandev`` and ``libreplandevtest``.
|
||||
|
||||
* *prod* - Production environment
|
||||
|
||||
Unlike *dev* it uses database ``navalprod`` and `navalprodtest``.
|
||||
Unlike *dev* it uses database ``libreplanprod`` and `libreplanprodtest``.
|
||||
|
||||
It is needed to use it in combination with *postgresql* or *mysql* profiles.
|
||||
|
||||
|
|
@ -361,10 +364,10 @@ For MySQL users here are specific instructions.
|
|||
|
||||
* SQL sentences to create database::
|
||||
|
||||
CREATE DATABASE navaldev;
|
||||
CREATE DATABASE navaldevtest;
|
||||
GRANT ALL ON navaldev.* to 'naval'@'localhost' identified by 'naval';
|
||||
GRANT ALL ON navaldevtest.* to 'naval'@'localhost' identified by 'naval';
|
||||
CREATE DATABASE libreplandev;
|
||||
CREATE DATABASE libreplandevtest;
|
||||
GRANT ALL ON libreplandev.* to 'libreplan'@'localhost' identified by 'libreplan';
|
||||
GRANT ALL ON libreplandevtest.* to 'libreplan'@'localhost' identified by 'libreplan';
|
||||
|
||||
* Compile project::
|
||||
|
||||
|
|
|
|||
68
INSTALL
|
|
@ -35,16 +35,21 @@ Instructions:
|
|||
|
||||
* Download the package::
|
||||
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.1.1-1_amd64.deb
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/files/LibrePlan/libreplan_1.2.0-1_amd64.deb
|
||||
|
||||
* Install package::
|
||||
|
||||
# dpkg -i libreplan_1.1.1-1_amd64.deb
|
||||
# dpkg -i libreplan_1.2.0-1_amd64.deb
|
||||
|
||||
* Install dependencies::
|
||||
|
||||
# apt-get install -f
|
||||
|
||||
.. WARNING::
|
||||
|
||||
If you have problems with printing support review the last section `Fix
|
||||
printing in Debian Squeeze`_.
|
||||
|
||||
|
||||
LibrePlan manual installation
|
||||
-----------------------------
|
||||
|
|
@ -68,15 +73,24 @@ Debian/Ubuntu
|
|||
|
||||
* Download database installation script::
|
||||
|
||||
$ wget -O install.sql http://downloads.sourceforge.net/project/libreplan/LibrePlan/install_1.1.1.sql
|
||||
$ wget -O install.sql http://downloads.sourceforge.net/project/librelplan/LibrePlan/install_1.2.0.sql
|
||||
|
||||
* Create database structure::
|
||||
|
||||
$ psql -h localhost -U libreplan -W libreplan < install.sql
|
||||
|
||||
.. WARNING::
|
||||
|
||||
It is very important to execute the previous command specifiying
|
||||
``libreplan`` user (as you can see in the ``-U`` option). Otherwise your
|
||||
LibrePlan installation is not going to start properly and you could find in
|
||||
your log files something like that::
|
||||
|
||||
JDBCExceptionReporter - ERROR: permission denied for relation entity_sequence
|
||||
|
||||
* Download ``.war`` file from SourceForge.net::
|
||||
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.1.1.war
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.2.0.war
|
||||
|
||||
* Create a new file ``/etc/tomcat6/Catalina/localhost/libreplan.xml`` (file
|
||||
name has to match with ``.war`` name) with database configuration for
|
||||
|
|
@ -128,6 +142,11 @@ Debian/Ubuntu
|
|||
|
||||
* Go to http://localhost:8080/libreplan/
|
||||
|
||||
.. WARNING::
|
||||
|
||||
If you have problems with printing support review the last section `Fix
|
||||
printing in Debian Squeeze`_.
|
||||
|
||||
|
||||
openSUSE
|
||||
~~~~~~~~
|
||||
|
|
@ -170,15 +189,24 @@ openSUSE
|
|||
|
||||
* Download database installation script::
|
||||
|
||||
$ wget -O install.sql http://downloads.sourceforge.net/project/libreplan/LibrePlan/install_1.1.1.sql
|
||||
$ wget -O install.sql http://downloads.sourceforge.net/project/libreplan/LibrePlan/install_1.2.0.sql
|
||||
|
||||
* Create database structure::
|
||||
|
||||
$ psql -h localhost -U libreplan -W libreplan < install.sql
|
||||
|
||||
.. WARNING::
|
||||
|
||||
It is very important to execute the previous command specifiying
|
||||
``libreplan`` user (as you can see in the ``-U`` option). Otherwise your
|
||||
LibrePlan installation is not going to start properly and you could find in
|
||||
your log files something like that::
|
||||
|
||||
JDBCExceptionReporter - ERROR: permission denied for relation entity_sequence
|
||||
|
||||
* Download ``.war`` file from SourceForge.net::
|
||||
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.1.1.war
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.2.0.war
|
||||
|
||||
* Create a new file ``/etc/tomcat6/Catalina/localhost/libreplan.xml`` (file
|
||||
name has to match with ``.war`` name) with database configuration for
|
||||
|
|
@ -215,7 +243,33 @@ Logs
|
|||
|
||||
Since *LibrePlan 1.1.1* log system is configured automatically creating a new
|
||||
folder under ``/var/log/tomcat6/`` with ``.war`` name. For example:
|
||||
``/var/log/tomcat6/libreplan.war``.
|
||||
``/var/log/tomcat6/libreplan/``.
|
||||
|
||||
Inside this new directory there will be two files (``libreplan.log`` and
|
||||
``libreplan-error.log``) that will be rotated every day.
|
||||
|
||||
|
||||
Fix printing in Debian Squeeze
|
||||
------------------------------
|
||||
|
||||
Since LibrePlan 1.2 printing support is not working properly in Debian Squeeze.
|
||||
To fix this issue, basically, you have to get a newer version of CutyCapt and
|
||||
WebKit dependencies from Debian testing.
|
||||
|
||||
Instructions:
|
||||
|
||||
* Make sure stable remains the default distribution to pull packages from::
|
||||
|
||||
# echo 'APT::Default-Release "stable";' >> /etc/apt/apt.conf
|
||||
|
||||
* Add a new repository to make testing packages available to ``apt-get``::
|
||||
|
||||
# echo "deb http://ftp.debian.org/debian testing main" >> /etc/apt/sources.list
|
||||
|
||||
* Refresh package index::
|
||||
|
||||
# apt-get update
|
||||
|
||||
* Fetch and install ``cutycapt`` (and its dependencies) from testing::
|
||||
|
||||
# apt-get -t testing install cutycapt
|
||||
|
|
|
|||
107
README
|
|
@ -5,32 +5,84 @@ LibrePlan
|
|||
Description
|
||||
-----------
|
||||
|
||||
*LibrePlan* is a free software web application for project management.
|
||||
*LibrePlan* is a free software web application for project management,
|
||||
monitoring and control.
|
||||
|
||||
*LibrePlan* is a planning tool for users based on some concepts: company and
|
||||
multi-project overview, criteria assignments, tasks tagging, resources
|
||||
management, resource allocation (specific and generic), company load control,
|
||||
external integration, etc.
|
||||
*LibrePlan* is a collaborative tool to plan, monitor and control projects and
|
||||
has a rich web interface which provides a desktop alike user experience. All the
|
||||
team members can take part in the planning and this makes possible to have a
|
||||
real-time planning.
|
||||
|
||||
It was designed thinking on a scenario where multiple projects and resources
|
||||
interact to carry out the work inside a company. Besides, it makes possible
|
||||
the communication with other company tools providing a wide set of web
|
||||
services to import and export data.
|
||||
|
||||
Although its name is clearly related to shipbuilding, *LibrePlan* is a fully
|
||||
useful planning tool for any type of company whose workflow requires project and
|
||||
order administration and scheduling.
|
||||
|
||||
Features
|
||||
~~~~~~~~
|
||||
|
||||
* Multiproject management. It offers a global vision of the company managing
|
||||
several projects sharing resources.
|
||||
* Group resource allocations: dynamic groups based on criteria.
|
||||
* Flexible calendars.
|
||||
* Configurable Gantt chart from Work Breakdown Structure (WBS) [1]_.
|
||||
* Resource Breakdown Structure (RBS) chart [2]_.
|
||||
* Overload resource allocation control.
|
||||
* Earned Value Management [3]_.
|
||||
* Cost analysis based on work reports.
|
||||
* Integration with other *LibrePlan* instances and third-parties.
|
||||
* Other functionalities: Materials, quality forms, project templates, planning
|
||||
scenarios, multiple task progress measurement ...
|
||||
* Resource management:
|
||||
|
||||
* Two type of resources: machines and workers.
|
||||
* Flexible calendars easily reusable.
|
||||
* Resource configuration based on skills and roles.
|
||||
|
||||
* Planning:
|
||||
|
||||
* Simple way to configure and estimate the work to plan. It is carried out
|
||||
through Work Breakdown Structures (WBS) [1]_.
|
||||
* Different detail levels during the planning.
|
||||
* Two ways to allocate resources:
|
||||
|
||||
* Specific allocation: Concrete individuals.
|
||||
* Assisted generic allocation: Based on skills and roles fulfilled by the
|
||||
resources.
|
||||
|
||||
* Templates to reuse work. Projects can be created based on templates for
|
||||
repeatable tasks being able to save time.
|
||||
|
||||
* Automatic resource reallocation in order to minimize overload (overtime).
|
||||
|
||||
* Advanced allocation. Manual configuration of daily work hours on a task
|
||||
when automatic allocation does not suit your needs.
|
||||
|
||||
* Monte Carlo method. Statistical simulation to calculate the possibility to
|
||||
complete a project in a range of dates.
|
||||
|
||||
* Projects control and monitoring:
|
||||
|
||||
* Company global analysis.
|
||||
|
||||
* Earned Value Management [2]_. Project management method to objectively
|
||||
measure progress and performance of a project.
|
||||
|
||||
* Planning quality management. It is possible to control quality of the tasks
|
||||
to be performed through forms.
|
||||
|
||||
* Projects cost analysis.
|
||||
|
||||
* Reported hours: worked hours are assigned to each task to track costs during
|
||||
the planning
|
||||
|
||||
* Progress measurement through different unit types.
|
||||
|
||||
* Outsourcing
|
||||
|
||||
LibrePlan provides support for companies that do outsourcing:
|
||||
|
||||
* Project tasks can be outsourced and sent to the LibrePlan installation of
|
||||
the supplier.
|
||||
|
||||
* You can receive progress notifications of the subcontractors to know how
|
||||
outsourced tasks are evolving .
|
||||
|
||||
* Other features:
|
||||
|
||||
* Materials. You can manage the materials that planned tasks need to be
|
||||
carried out.
|
||||
|
||||
* Complete users system with permissions, LDAP authentication, etc.
|
||||
|
||||
|
||||
Requirements
|
||||
|
|
@ -77,14 +129,14 @@ The cutting-edge version of this project is always available from the Git
|
|||
repository at http://libreplan.git.sourceforge.net/.
|
||||
|
||||
Released versions are available at
|
||||
http://sourceforge.net/projects/libreplan/files.
|
||||
http://sourceforge.net/projects/libreplan/files/.
|
||||
|
||||
|
||||
Webpage
|
||||
-------
|
||||
|
||||
You can find more information about *LibrePlan* at
|
||||
http://www.libreplan.org/en/.
|
||||
http://www.libreplan.com/.
|
||||
|
||||
For information related with *LibrePlan* development you can visit the wiki at
|
||||
http://wiki.libreplan.org/.
|
||||
|
|
@ -100,7 +152,7 @@ License
|
|||
-------
|
||||
|
||||
*LibrePlan* is released under the terms of the GNU Affero General Public
|
||||
License version 3 [4]_.
|
||||
License version 3 [3]_.
|
||||
|
||||
Please read the ``COPYING`` file for details.
|
||||
|
||||
|
|
@ -109,14 +161,13 @@ Authors
|
|||
-------
|
||||
|
||||
This project is sponsored by *Fundación para o Fomento da Calidade Industrial e
|
||||
o Desenvolvemento Tecnolóxico de Galicia* [5]_.
|
||||
o Desenvolvemento Tecnolóxico de Galicia* [4]_.
|
||||
|
||||
Please see ``AUTHORS`` file for more information about the authors.
|
||||
|
||||
|
||||
|
||||
.. [1] http://en.wikipedia.org/wiki/Work_Breakdown_Structure
|
||||
.. [2] http://en.wikipedia.org/wiki/Resource_Breakdown_Structure
|
||||
.. [3] http://en.wikipedia.org/wiki/Earned_Value_Management
|
||||
.. [4] http://www.fsf.org/licensing/licenses/agpl.html
|
||||
.. [5] http://www.fundacioncalidade.org/
|
||||
.. [2] http://en.wikipedia.org/wiki/Earned_Value_Management
|
||||
.. [3] http://www.fsf.org/licensing/licenses/agpl.html
|
||||
.. [4] http://www.fundacioncalidade.org/
|
||||
|
|
|
|||
12
UPDATE
|
|
@ -26,11 +26,11 @@ Instructions:
|
|||
|
||||
* Download the new package::
|
||||
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.1.1-1_amd64.deb
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/NavalPlan/navalplan_1.1.1-1_amd64.deb
|
||||
|
||||
* Install package::
|
||||
|
||||
# dpkg -i libreplan_1.1.1-1_amd64.deb
|
||||
# dpkg -i navalplan_1.1.1-1_amd64.deb
|
||||
|
||||
* Install new dependencies if needed::
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ Debian/Ubuntu
|
|||
are upgrading from *LibrePlan 1.0.4* to *LibrePlan 1.1.1* you should download
|
||||
``upgrade_1.1.0.sql``::
|
||||
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/LibrePlan/upgrade_1.1.0.sql
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/NavalPlan/upgrade_1.1.0.sql
|
||||
|
||||
* Upgrade database::
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ Debian/Ubuntu
|
|||
|
||||
* Download ``.war`` file of new version from SourceForge.net::
|
||||
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.1.1.war
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/NavalPlan/navalplan_1.1.1.war
|
||||
|
||||
* Backup current deployed application::
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ openSUSE
|
|||
are upgrading from *LibrePlan 1.0.4* to *LibrePlan 1.1.1* you should download
|
||||
``upgrade_1.1.0.sql``::
|
||||
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/LibrePlan/upgrade_1.1.0.sql
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/NavalPlan/upgrade_1.1.0.sql
|
||||
|
||||
* Upgrade database::
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ openSUSE
|
|||
|
||||
* Download ``.war`` file of new version from SourceForge.net::
|
||||
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/LibrePlan/libreplan_1.1.1.war
|
||||
$ wget -O libreplan.war http://downloads.sourceforge.net/project/libreplan/NavalPlan/navalplan_1.1.1.war
|
||||
|
||||
* Backup current deployed application::
|
||||
|
||||
|
|
|
|||
46
debian/changelog
vendored
|
|
@ -1,4 +1,12 @@
|
|||
libreplan (1.1.3-1) maverick; urgency=low
|
||||
libreplan (1.2.0-1) maverick; urgency=low
|
||||
|
||||
* Released LibrePlan 1.2.0
|
||||
* Created a transitional package navalplan-1.2.0-1 in order to ease the
|
||||
migration from NavalPlan 1.1 to LibrePlan 1.2
|
||||
|
||||
-- Manuel Rego Casasnovas <rego@igalia.com> Thu, 01 Dec 2011 16:40:00 +0100
|
||||
|
||||
navalplan (1.1.3-1) maverick; urgency=low
|
||||
|
||||
* Fixed important issue in Gantt view for big projects with labels.
|
||||
* Added bugs fixed from stable branch.
|
||||
|
|
@ -6,7 +14,7 @@ libreplan (1.1.3-1) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <rego@igalia.com> Fri, 12 Aug 2011 13:08:00 +0200
|
||||
|
||||
libreplan (1.1.2-1) maverick; urgency=low
|
||||
navalplan (1.1.2-1) maverick; urgency=low
|
||||
|
||||
* Fixed critical bug that causes concurrency issues editing projects with
|
||||
labels.
|
||||
|
|
@ -15,7 +23,7 @@ libreplan (1.1.2-1) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <rego@igalia.com> Wed, 18 Jul 2011 13:23:00 +0200
|
||||
|
||||
libreplan (1.1.1-1) maverick; urgency=low
|
||||
navalplan (1.1.1-1) maverick; urgency=low
|
||||
|
||||
* Changed dependency from OpenJDK to default-jdk or default-jre.
|
||||
* Added bugs fixed from stable branch.
|
||||
|
|
@ -23,7 +31,7 @@ libreplan (1.1.1-1) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <rego@igalia.com> Wed, 07 Jun 2011 09:15:00 +0200
|
||||
|
||||
libreplan (1.1.0-1) maverick; urgency=low
|
||||
navalplan (1.1.0-1) maverick; urgency=low
|
||||
|
||||
* Removed unnecessary dependency with texlive-latex-recommended and pgf
|
||||
packages.
|
||||
|
|
@ -33,35 +41,35 @@ libreplan (1.1.0-1) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Wed, 19 Apr 2011 07:50:00 +0200
|
||||
|
||||
libreplan (1.0.6-1) maverick; urgency=low
|
||||
navalplan (1.0.6-1) maverick; urgency=low
|
||||
|
||||
* Several important bugs fixed during 1.1 stabilization.
|
||||
* Released version 1.0.6.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Tue, 27 Apr 2011 11:49:00 +0200
|
||||
|
||||
libreplan (1.0.5-1) maverick; urgency=low
|
||||
navalplan (1.0.5-1) maverick; urgency=low
|
||||
|
||||
* Added bugs fixed from stable branch.
|
||||
* Released version 1.0.5.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Fri, 08 Apr 2011 11:20:46 +0200
|
||||
|
||||
libreplan (1.0.4-1) maverick; urgency=low
|
||||
navalplan (1.0.4-1) maverick; urgency=low
|
||||
|
||||
* Added bugs fixed from stable branch.
|
||||
* Released version 1.0.4.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Thu, 17 Mar 2011 12:27:47 +0100
|
||||
|
||||
libreplan (1.0.3-1) maverick; urgency=low
|
||||
navalplan (1.0.3-1) maverick; urgency=low
|
||||
|
||||
* Added bugs fixed from stable branch.
|
||||
* Released version 1.0.3.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Mon, 14 Feb 2011 07:23:58 +0100
|
||||
|
||||
libreplan (1.0.2-1) maverick; urgency=low
|
||||
navalplan (1.0.2-1) maverick; urgency=low
|
||||
|
||||
* Fixed database installation script.
|
||||
* Added bugfixed from stable branch.
|
||||
|
|
@ -69,7 +77,7 @@ libreplan (1.0.2-1) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Fri, 21 Jan 2011 12:07:33 +0100
|
||||
|
||||
libreplan (1.0.1-1) maverick; urgency=low
|
||||
navalplan (1.0.1-1) maverick; urgency=low
|
||||
|
||||
* Added dependency with ttf-freefont on Debian package (needed for Jasper
|
||||
reports).
|
||||
|
|
@ -78,7 +86,7 @@ libreplan (1.0.1-1) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <mrego@erizana> Fri, 14 Jan 2011 09:58:33 +0100
|
||||
|
||||
libreplan (1.0.0-1) maverick; urgency=low
|
||||
navalplan (1.0.0-1) maverick; urgency=low
|
||||
|
||||
* Updated to upstream. Released version 1.0.
|
||||
* Added upgrade script needed to upgrade to version 1.0.
|
||||
|
|
@ -86,33 +94,33 @@ libreplan (1.0.0-1) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Tue, 07 Jan 2011 16:45:00 +0100
|
||||
|
||||
libreplan (0.9.2-3) maverick; urgency=low
|
||||
navalplan (0.9.2-3) maverick; urgency=low
|
||||
|
||||
* Added missing postgresql dependency.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Tue, 07 Jan 2011 10:00:00 +0100
|
||||
|
||||
libreplan (0.9.2-2) maverick; urgency=low
|
||||
navalplan (0.9.2-2) maverick; urgency=low
|
||||
|
||||
* Added postgresql-client dependency needed because of dbconfig.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Tue, 05 Jan 2011 16:12:00 +0100
|
||||
|
||||
libreplan (0.9.2-1) maverick; urgency=low
|
||||
navalplan (0.9.2-1) maverick; urgency=low
|
||||
|
||||
* Updated to upstream.
|
||||
* Fixed issues on debian package.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Tue, 04 Jan 2011 15:58:19 +0100
|
||||
|
||||
libreplan (0.9.1) maverick; urgency=low
|
||||
navalplan (0.9.1) maverick; urgency=low
|
||||
|
||||
* Updated to upstream.
|
||||
* Fixed problems with translations.
|
||||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Thu, 23 Dec 2010 00:14:54 +0100
|
||||
|
||||
libreplan (0.9.0) maverick; urgency=low
|
||||
navalplan (0.9.0) maverick; urgency=low
|
||||
|
||||
* Updated to upstream.
|
||||
* Fixed issues with context.xml file.
|
||||
|
|
@ -121,19 +129,19 @@ libreplan (0.9.0) maverick; urgency=low
|
|||
|
||||
-- Manuel Rego Casasnovas <mrego@igalia.com> Tue, 21 Dec 2010 17:31:08 +0100
|
||||
|
||||
libreplan (20100908) lucid; urgency=low
|
||||
navalplan (20100908) lucid; urgency=low
|
||||
|
||||
* Updated to upstream.
|
||||
|
||||
-- Jose Maria Casanova Crespo (Chema) <jmcasanova@igalia.com> Wed, 8 Sep 2010 00:00:00 +0000
|
||||
|
||||
libreplan (20100415) karmic; urgency=low
|
||||
navalplan (20100415) karmic; urgency=low
|
||||
|
||||
* Updated to upstream.
|
||||
|
||||
-- Jose Maria Casanova Crespo (Chema) <jmcasanova@igalia.com> Thu, 15 Mar 2010 14:30:00 +0000
|
||||
|
||||
libreplan (20100324) karmic; urgency=low
|
||||
navalplan (20100324) karmic; urgency=low
|
||||
|
||||
* Initial release.
|
||||
|
||||
|
|
|
|||
25
debian/control
vendored
|
|
@ -5,19 +5,32 @@ Maintainer: Adrian Perez <aperez@igalia.com>
|
|||
Build-Depends: debhelper (>= 7.0.50), maven2, python-docutils,
|
||||
gettext (>= 0.17), default-jdk
|
||||
Standards-Version: 3.8.4
|
||||
Homepage: http://www.libreplan.org/en/
|
||||
Homepage: http://www.libreplan.com/
|
||||
|
||||
Package: libreplan
|
||||
Architecture: any
|
||||
Depends: cutycapt, postgresql, postgresql-client, xvfb, dbconfig-common, ucf,
|
||||
tomcat6, default-jre-headless | default-jre, libpg-java, ttf-freefont,
|
||||
${misc:Depends}
|
||||
Description: Web application for project management.
|
||||
LibrePlan is a planning tool for users based on some concepts: company and
|
||||
Description: Web application for project planning, monitoring and control.
|
||||
LibrePlan is a collaborative tool to plan, monitor and control projects and has
|
||||
a rich web interface which provides a desktop alike user experience. All the
|
||||
team members can take part in the planning and this makes possible to have a
|
||||
real-time planning.
|
||||
.
|
||||
It was designed thinking on a scenario where multiple projects and resources
|
||||
interact to carry out the work inside a company. Besides, it makes possible
|
||||
the communication with other company tools providing a wide set of web
|
||||
services to import and export data.
|
||||
|
||||
Package: navalplan
|
||||
Architecture: all
|
||||
Pre-Depends: libreplan (>= 1.2.0-1)
|
||||
Depends: ${misc:Depends}
|
||||
Description: Web application for project management (transitional package)
|
||||
NavalPlan is a planning tool for users based on some concepts: company and
|
||||
multi-project overview, criteria assignments, tasks tagging, resources
|
||||
management, resource allocation (specific and generic), company load control,
|
||||
external integration, etc.
|
||||
.
|
||||
Although its name is clearly related to shipbuilding, LibrePlan is a fully
|
||||
useful planning tool for any type of company whose workflow requires project
|
||||
and order administration and scheduling.
|
||||
This package can be safely deleted after Libreplan is successfully installed.
|
||||
|
|
|
|||
27
debian/control.lucid
vendored
|
|
@ -3,21 +3,34 @@ Section: web
|
|||
Priority: optional
|
||||
Maintainer: Adrian Perez <aperez@igalia.com>
|
||||
Build-Depends: debhelper (>= 7.0.50), maven2, python-docutils,
|
||||
gettext (>= 0.17), texlive-latex-recommended, pgf, openjdk-6-jdk
|
||||
gettext (>= 0.17), openjdk-6-jdk
|
||||
Standards-Version: 3.8.4
|
||||
Homepage: http://www.libreplan.org/en/
|
||||
Homepage: http://www.libreplan.com/
|
||||
|
||||
Package: libreplan
|
||||
Architecture: any
|
||||
Depends: cutycapt, postgresql, postgresql-client, xvfb, dbconfig-common, ucf,
|
||||
tomcat6, openjdk-6-jre-headless | openjdk-6-jre, libpg-java, ttf-freefont,
|
||||
${misc:Depends}
|
||||
Description: Web application for project management.
|
||||
LibrePlan is a planning tool for users based on some concepts: company and
|
||||
Description: Web application for project planning, monitoring and control.
|
||||
LibrePlan is a collaborative tool to plan, monitor and control projects and has
|
||||
a rich web interface which provides a desktop alike user experience. All the
|
||||
team members can take part in the planning and this makes possible to have a
|
||||
real-time planning.
|
||||
.
|
||||
It was designed thinking on a scenario where multiple projects and resources
|
||||
interact to carry out the work inside a company. Besides, it makes possible
|
||||
the communication with other company tools providing a wide set of web
|
||||
services to import and export data.
|
||||
|
||||
Package: navalplan
|
||||
Architecture: all
|
||||
Pre-Depends: libreplan (>= 1.2.0-1)
|
||||
Depends: ${misc:Depends}
|
||||
Description: Web application for project management (transitional package)
|
||||
NavalPlan is a planning tool for users based on some concepts: company and
|
||||
multi-project overview, criteria assignments, tasks tagging, resources
|
||||
management, resource allocation (specific and generic), company load control,
|
||||
external integration, etc.
|
||||
.
|
||||
Although its name is clearly related to shipbuilding, LibrePlan is a fully
|
||||
useful planning tool for any type of company whose workflow requires project
|
||||
and order administration and scheduling.
|
||||
This package can be safely deleted after Libreplan is successfully installed.
|
||||
|
|
|
|||
27
debian/control.squeeze
vendored
|
|
@ -3,21 +3,34 @@ Section: web
|
|||
Priority: optional
|
||||
Maintainer: Adrian Perez <aperez@igalia.com>
|
||||
Build-Depends: debhelper (>= 7.0.50), maven2, python-docutils,
|
||||
gettext (>= 0.17), texlive-latex-recommended, pgf, openjdk-6-jdk
|
||||
gettext (>= 0.17), openjdk-6-jdk
|
||||
Standards-Version: 3.8.4
|
||||
Homepage: http://www.libreplan.org/en/
|
||||
Homepage: http://www.libreplan.com/
|
||||
|
||||
Package: libreplan
|
||||
Architecture: any
|
||||
Depends: cutycapt, postgresql, postgresql-client, xvfb, dbconfig-common, ucf,
|
||||
tomcat6, openjdk-6-jre-headless | openjdk-6-jre, libpg-java, ttf-freefont,
|
||||
${misc:Depends}
|
||||
Description: Web application for project management.
|
||||
LibrePlan is a planning tool for users based on some concepts: company and
|
||||
Description: Web application for project planning, monitoring and control.
|
||||
LibrePlan is a collaborative tool to plan, monitor and control projects and has
|
||||
a rich web interface which provides a desktop alike user experience. All the
|
||||
team members can take part in the planning and this makes possible to have a
|
||||
real-time planning.
|
||||
.
|
||||
It was designed thinking on a scenario where multiple projects and resources
|
||||
interact to carry out the work inside a company. Besides, it makes possible
|
||||
the communication with other company tools providing a wide set of web
|
||||
services to import and export data.
|
||||
|
||||
Package: navalplan
|
||||
Architecture: all
|
||||
Pre-Depends: libreplan (>= 1.2.0-1)
|
||||
Depends: ${misc:Depends}
|
||||
Description: Web application for project management (transitional package)
|
||||
NavalPlan is a planning tool for users based on some concepts: company and
|
||||
multi-project overview, criteria assignments, tasks tagging, resources
|
||||
management, resource allocation (specific and generic), company load control,
|
||||
external integration, etc.
|
||||
.
|
||||
Although its name is clearly related to shipbuilding, LibrePlan is a fully
|
||||
useful planning tool for any type of company whose workflow requires project
|
||||
and order administration and scheduling.
|
||||
This package can be safely deleted after Libreplan is successfully installed.
|
||||
|
|
|
|||
2
debian/libreplan.install
vendored
|
|
@ -3,4 +3,4 @@ debian/tmp/etc/tomcat6/policy.d/51libreplan.policy
|
|||
debian/tmp/usr/share/dbconfig-common/data/libreplan/install/pgsql
|
||||
debian/tmp/usr/share/dbconfig-common/data/libreplan/upgrade/pgsql/1.0.0
|
||||
debian/tmp/usr/share/dbconfig-common/data/libreplan/upgrade/pgsql/1.1.0
|
||||
debian/tmp/usr/share/tomcat6/lib/postgresql-jdbc3.jar
|
||||
debian/tmp/usr/share/dbconfig-common/data/libreplan/upgrade/pgsql/1.2.0
|
||||
|
|
|
|||
3
debian/libreplan.postinst
vendored
|
|
@ -68,6 +68,9 @@ then
|
|||
|
||||
fi
|
||||
|
||||
if [ ! -L /usr/share/tomcat6/lib/postgresql-jdbc3.jar ] ; then
|
||||
ln -sf /usr/share/java/postgresql-jdbc3.jar /usr/share/tomcat6/lib/
|
||||
fi
|
||||
|
||||
if [ -x /etc/init.d/tomcat6 ] ; then
|
||||
if [ -x "$(which invoke-rc.d 2> /dev/null)" ] ; then
|
||||
|
|
|
|||
26
debian/navalplan.postinst
vendored
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
#! /bin/bash
|
||||
|
||||
if [[ $1 = configure ]]
|
||||
then
|
||||
# Remove old deployment directory as it's no longer necessary.
|
||||
if [ -d /var/lib/tomcat6/webapps/navalplan/ ] ; then
|
||||
rm -r /var/lib/tomcat6/webapps/navalplan/
|
||||
fi
|
||||
|
||||
# Make sure the driver is there, as it might be removed when
|
||||
# uninstalling older versions of the package.
|
||||
if [ ! -L /usr/share/tomcat6/lib/postgresql-jdbc3.jar ] ; then
|
||||
ln -sf /usr/share/java/postgresql-jdbc3.jar /usr/share/tomcat6/lib/
|
||||
fi
|
||||
|
||||
# Start tomcat again
|
||||
if [ -x /etc/init.d/tomcat6 ] ; then
|
||||
if [ -x "$(which invoke-rc.d 2> /dev/null)" ] ; then
|
||||
invoke-rc.d tomcat6 start
|
||||
else
|
||||
/etc/init.d/tomcat6 start
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
#DEBHELPER#
|
||||
95
debian/navalplan.preinst
vendored
Executable file
|
|
@ -0,0 +1,95 @@
|
|||
#! /bin/bash
|
||||
|
||||
base_dbconfig_data_dir="/usr/share/dbconfig-common/data"
|
||||
|
||||
install_upgrade_to() {
|
||||
upgrade_file="$base_dbconfig_data_dir/libreplan/upgrade/pgsql/$1"
|
||||
echo "Applying SQL statements to upgrade to version $1..."
|
||||
push_sql_from_file_as_user $upgrade_file $navalplan_user $navalplan_db
|
||||
}
|
||||
|
||||
push_sql_from_file_as_user() {
|
||||
filepath=$1
|
||||
username=$2
|
||||
database=$3
|
||||
psql -U $username -h $database_host \
|
||||
$database < $filepath > /dev/null 2>&1
|
||||
}
|
||||
|
||||
execute_sql_as_admin() {
|
||||
sql=$1
|
||||
su - -s /bin/sh $navalplan_admin_user -c "psql -c \"$sql\"" > /dev/null
|
||||
}
|
||||
|
||||
if [[ $1 = upgrade && -r /etc/dbconfig-common/libreplan.conf
|
||||
&& -r /etc/dbconfig-common/navalplan.conf ]]
|
||||
then
|
||||
old_version=$2
|
||||
|
||||
. /etc/dbconfig-common/libreplan.conf
|
||||
libreplan_user=${dbc_dbuser}
|
||||
libreplan_passwd=${dbc_dbpass}
|
||||
libreplan_db=${dbc_dbname}
|
||||
|
||||
. /etc/dbconfig-common/navalplan.conf
|
||||
navalplan_user=${dbc_dbuser}
|
||||
navalplan_passwd=${dbc_dbpass}
|
||||
navalplan_db=${dbc_dbname}
|
||||
navalplan_admin_user=${dbc_dbadmin}
|
||||
|
||||
if [ -z "${dbc_dbhost}" ] ; then
|
||||
database_host='localhost'
|
||||
else
|
||||
database_host=${dbc_dbhost}
|
||||
fi
|
||||
|
||||
export PGPASSFILE=`mktemp`
|
||||
chmod 600 $PGPASSFILE
|
||||
|
||||
old_db_dump=`mktemp`
|
||||
chown $navalplan_admin_user:root $old_db_dump;
|
||||
chmod 660 $old_db_dump;
|
||||
|
||||
# Stop tomcat to flush active connections.
|
||||
if [ -x /etc/init.d/tomcat6 ] ; then
|
||||
if [ -x "$(which invoke-rc.d 2> /dev/null)" ] ; then
|
||||
invoke-rc.d tomcat6 stop
|
||||
else
|
||||
/etc/init.d/tomcat6 stop
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Dropping newly created empty database...";
|
||||
execute_sql_as_admin "DROP DATABASE $libreplan_db;"
|
||||
|
||||
echo "Trying to apply upgrades to old database..."
|
||||
|
||||
echo "*:*:*:*:$navalplan_passwd" > $PGPASSFILE
|
||||
|
||||
dpkg --compare-versions $old_version "<<" "1.0.0-1"
|
||||
if [ $? -eq 0 ]; then
|
||||
install_upgrade_to "1.0.0"
|
||||
fi
|
||||
dpkg --compare-versions $old_version "<<" "1.1.0-1"
|
||||
if [ $? -eq 0 ]; then
|
||||
install_upgrade_to "1.1.0"
|
||||
fi
|
||||
dpkg --compare-versions $old_version "<<" "1.2.0-1"
|
||||
if [ $? -eq 0 ]; then
|
||||
install_upgrade_to "1.2.0"
|
||||
fi
|
||||
|
||||
echo "Dumping old database..."
|
||||
su - -s /bin/sh $navalplan_admin_user -c "pg_dump $navalplan_db >> $old_db_dump" > /dev/null
|
||||
|
||||
echo "Creating and populating new database...";
|
||||
execute_sql_as_admin "CREATE DATABASE $libreplan_db;"
|
||||
execute_sql_as_admin "GRANT ALL PRIVILEGES ON DATABASE $libreplan_db TO $libreplan_user;"
|
||||
execute_sql_as_admin "ALTER DATABASE $libreplan_db OWNER TO $libreplan_user;"
|
||||
echo "*:*:*:*:$libreplan_passwd" > $PGPASSFILE
|
||||
push_sql_from_file_as_user $old_db_dump $libreplan_user $libreplan_db
|
||||
|
||||
rm $PGPASSFILE $old_db_dump
|
||||
|
||||
fi
|
||||
#DEBHELPER#
|
||||
7
debian/rules
vendored
|
|
@ -81,13 +81,16 @@ install:
|
|||
# Copy SQL upgrade script for version 1.1.0
|
||||
$(call CMD,cp $(CURDIR)/scripts/database/upgrade_1.1.0.sql \
|
||||
$(CURDIR)/debian/tmp/usr/share/dbconfig-common/data/libreplan/upgrade/pgsql/1.1.0)
|
||||
# Copy SQL upgrade script for version 1.2.0
|
||||
$(call CMD,cp $(CURDIR)/scripts/database/upgrade_1.2.0.sql \
|
||||
$(CURDIR)/debian/tmp/usr/share/dbconfig-common/data/libreplan/upgrade/pgsql/1.2.0)
|
||||
# Install Policy file
|
||||
$(call CMD,mkdir -p $(CURDIR)/debian/tmp/etc/tomcat6/policy.d)
|
||||
$(call CMD,cp $(CURDIR)/debian/51libreplan.policy \
|
||||
$(CURDIR)/debian/tmp/etc/tomcat6/policy.d/)
|
||||
# Link Java PostgreSQL library
|
||||
$(call CMD,mkdir -p $(CURDIR)/debian/tmp/usr/share/tomcat6/lib)
|
||||
$(call CMD,ln -sf /usr/share/java/postgresql-jdbc3.jar $(CURDIR)/debian/tmp/usr/share/tomcat6/lib)
|
||||
#$(call CMD,mkdir -p $(CURDIR)/debian/tmp/usr/share/tomcat6/lib)
|
||||
#$(call CMD,ln -sf /usr/share/java/postgresql-jdbc3.jar $(CURDIR)/debian/tmp/usr/share/tomcat6/lib)
|
||||
$(call CMD,dh_install)
|
||||
|
||||
binary-indep: build install
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
|
@ -44,9 +44,9 @@ work as ``.zul`` page still does not exist.
|
|||
If you want to run LibrePlan in development mode you need to follow the next
|
||||
instructions:
|
||||
|
||||
* Create a PostgreSQL database called ``navaldev`` with permissions for a
|
||||
user ``naval`` with password ``naval`` (see ``INSTALL`` file for other
|
||||
databases and more info).
|
||||
* Create a PostgreSQL database called ``libreplandev`` with permissions for a
|
||||
user ``libreplan`` with password ``libreplan`` (see ``INSTALL`` file for
|
||||
other databases and more info).
|
||||
|
||||
* Compile LibrePlan with the following command from project root folder::
|
||||
|
||||
|
|
@ -381,7 +381,7 @@ Now you have defined a very basic report layout using some common elements
|
|||
with other LibrePlan reports like header and footer. The result in iReport would
|
||||
be something similar to the screenshot.
|
||||
|
||||
.. figure:: ireport-resources-list-report.png
|
||||
.. figure:: img/ireport-resources-list-report.png
|
||||
:alt: iRerpot screenshot for Resources List report
|
||||
:width: 100%
|
||||
|
||||
|
|
@ -568,7 +568,7 @@ are able to see how the basic functionality of JasperReports in LibrePlan is
|
|||
integrated. The next step will be to show real data in the report getting it
|
||||
from database.
|
||||
|
||||
.. figure:: resources-list-report-example-data-pdf.png
|
||||
.. figure:: img/resources-list-report-example-data-pdf.png
|
||||
:alt: Resources List report with example data in PDF format
|
||||
:width: 100%
|
||||
|
||||
|
|
|
|||
|
|
@ -82,9 +82,9 @@ this behaviour and use it in all the tasks they want.
|
|||
If you want to run LibrePlan in development mode you need to follow the next
|
||||
instructions:
|
||||
|
||||
* Create a PostgreSQL database called ``navaldev`` with permissions for a
|
||||
user ``naval`` with password ``naval`` (see ``HACKING`` file for other
|
||||
databases and more info).
|
||||
* Create a PostgreSQL database called ``libreplandev`` with permissions for a
|
||||
user ``libreplan`` with password ``libreplan`` (see ``HACKING`` file for
|
||||
other databases and more info).
|
||||
|
||||
* Compile LibrePlan with the following command from project root folder::
|
||||
|
||||
|
|
@ -2637,7 +2637,7 @@ developing new web services. For each web service, some test scripts are
|
|||
provided in order to check implementation.
|
||||
|
||||
|
||||
.. _LibrePlan: http://www.libreplan.org/en/
|
||||
.. _LibrePlan: http://www.libreplan.com/
|
||||
.. _CRUD: http://en.wikipedia.org/wiki/Create,_read,_update_and_delete
|
||||
.. _Hibernate: http://www.hibernate.org/
|
||||
.. _`Optimistic Locking`: http://en.wikipedia.org/wiki/Optimistic_locking
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ $ sudo apt-get install postgresql
|
|||
$ sudo su -c "psql" postgres
|
||||
|
||||
<----------------- Executar os seguintes comandos SQL ----------
|
||||
create database navaldev;
|
||||
create user naval with password 'naval';
|
||||
grant all privileges on database navaldev to naval;
|
||||
create database libreplandev;
|
||||
create user libreplan with password 'libreplan';
|
||||
grant all privileges on database libreplandev to libreplan;
|
||||
\q
|
||||
------------------------------------------------------------------
|
||||
|
||||
|
|
@ -40,9 +40,9 @@ para permitir o acceso a base de datos
|
|||
<Resource name="jdbc/libreplan-ds" auth="Container"
|
||||
type="javax.sql.DataSource"
|
||||
maxActive="100" maxIdle="30" maxWait="10000"
|
||||
username="naval" password="naval"
|
||||
username="libreplan" password="libreplan"
|
||||
driverClassName="org.postgresql.Driver"
|
||||
url="jdbc:postgresql://localhost/navaldev"/>
|
||||
url="jdbc:postgresql://localhost/libreplandev"/>
|
||||
...
|
||||
</Context>
|
||||
---------------------- ---------------------------------------
|
||||
|
|
@ -96,4 +96,4 @@ Neste intre a aplicación debería estar accesible en : http://localhost:8080/li
|
|||
------------------------------------------------------------------------
|
||||
Se quixeramos facer un volcado da base de datos so precisariamos empregar o seguinte comando, isto non é necesario para a instalación.
|
||||
|
||||
$ pg_dump -h localhost -U naval -c -F p -v -f bdxestionproducion.dump navaldev
|
||||
$ pg_dump -h localhost -U libreplan -c -F p -v -f bdxestionproducion.dump libreplandev
|
||||
|
|
|
|||
196
doc/src/technical/howto-start-development-with-eclipse.rst
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
How To Start Development With Eclipse
|
||||
=====================================
|
||||
|
||||
.. sectnum::
|
||||
|
||||
:Author: Manuel Rego Casasnovas
|
||||
:Contact: rego@igalia.com
|
||||
:Date: 16/12/2011
|
||||
:Copyright:
|
||||
Some rights reserved. This document is distributed under the Creative
|
||||
Commons Attribution-ShareAlike 3.0 licence, available in
|
||||
http://creativecommons.org/licenses/by-sa/3.0/.
|
||||
:Abstract:
|
||||
Quick guide to start the development of LibrePlan_ using Eclipse_ IDE.
|
||||
As this is the most common way of work among LibrePlan developers team.
|
||||
|
||||
.. contents:: Table of Contents
|
||||
|
||||
|
||||
Download LibrePlan source code
|
||||
------------------------------
|
||||
|
||||
You need to download LibrePlan_ source code to start hacking on it. You have two
|
||||
options:
|
||||
|
||||
a) Clone Git repository (recommended)::
|
||||
|
||||
$ git clone git://libreplan.git.sourceforge.net/gitroot/libreplan/libreplan libreplan
|
||||
|
||||
b) Download last version source code::
|
||||
|
||||
$ wget http://downloads.sourceforge.net/project/libreplan/files/LibrePlan/libreplan_1.2.0.tar.gz
|
||||
$ tar -xzvf libreplan_1.2.0.tar.gz
|
||||
|
||||
You should review ``HACKING`` file to check that you have installed all the
|
||||
requirements.
|
||||
|
||||
|
||||
Download Eclipse Java EE
|
||||
------------------------
|
||||
|
||||
* Go to download Eclipse page: http://www.eclipse.org/downloads/
|
||||
|
||||
* Download Eclipse IDE for **Java EE Developers** for your architecture
|
||||
|
||||
.. figure:: img/libreplan-download-eclipse.png
|
||||
:alt: Eclipse downloads webpage
|
||||
:width: 100%
|
||||
|
||||
Eclipse downloads webpage
|
||||
|
||||
|
||||
Install Ecliplse
|
||||
----------------
|
||||
|
||||
* Go to ``/opt/`` (or any other folder when you want to install Eclipse)::
|
||||
|
||||
# cd /opt/
|
||||
|
||||
* Uncompress downloaded file and set proper permissions::
|
||||
|
||||
# tar -xzvf ~/Downloads/eclipse-jee-indigo-SR1-linux-gtk-x86_64.tar.gz
|
||||
# chown -R root:root eclipse/
|
||||
|
||||
* Add symbolic link to launch Eclipse::
|
||||
|
||||
# cd /usr/local/bin/
|
||||
# ln -s /opt/eclipse/eclipse
|
||||
|
||||
|
||||
Install Eclipse Maven plugin (m2e)
|
||||
----------------------------------
|
||||
|
||||
* Run Eclipse::
|
||||
|
||||
$ eclipse
|
||||
|
||||
* Choose your workspace folder (or accept the default one) and mark to don't ask
|
||||
about it again
|
||||
|
||||
* Go to *Help* > *Install New Software...*
|
||||
|
||||
* Click in option *Add* and set the following values and click *Ok*:
|
||||
|
||||
* Name: m2e
|
||||
* Location: http://download.eclipse.org/technology/m2e/releases/
|
||||
|
||||
* Click *Next* to install plugin
|
||||
|
||||
.. figure:: img/libreplan-m2e.png
|
||||
:alt: Instal Eclipse Maven plugin (m2e)
|
||||
:width: 100%
|
||||
|
||||
Install Eclipse Maven plugin (m2e)
|
||||
|
||||
* Accept license agreements and click *Finish*
|
||||
|
||||
* Restart Eclipse once plugin installation has finished
|
||||
|
||||
|
||||
Import LibrePlan project
|
||||
------------------------
|
||||
|
||||
* Go to *File* > *Import*
|
||||
|
||||
* Select as import source *Maven* > *Exising Maven Projects* and click *Next*
|
||||
|
||||
.. figure:: img/libreplan-import-maven.png
|
||||
:alt: Import LibrePlan as Maven project
|
||||
:width: 100%
|
||||
|
||||
Import LibrePlan as Maven project
|
||||
|
||||
* Set as *Root Directory* the path where you downloaded LibrePlan source code
|
||||
|
||||
* Then mark all projects and click *Finish*
|
||||
|
||||
.. figure:: img/libreplan-poms.png
|
||||
:alt: Import LibrePlan from existent path
|
||||
:width: 100%
|
||||
|
||||
Import LibrePlan from existent path
|
||||
|
||||
* It is recommended to close ``libreplan`` project (right click over the project
|
||||
and choose *Close*)
|
||||
|
||||
|
||||
Configure project to run
|
||||
------------------------
|
||||
|
||||
* Go to *Run* > *Run Configurations...*
|
||||
|
||||
* Create a new *Maven Build* called *New_configuration*
|
||||
|
||||
* Change the following values:
|
||||
|
||||
* Name: LibrePlan
|
||||
* Base directory: Choose ``libreplan-webapp`` folder in your workspace
|
||||
* Goals: ``jetty:stop jetty:run``
|
||||
* Profiles (optional): ``-userguide,-reports`` (to disable userguide and
|
||||
reports profiles to save compilation time as they are not mandatory to run
|
||||
LibrePlan)
|
||||
* Mark the following checkboxes (recommended):
|
||||
|
||||
* Resolve Workspace artifacts
|
||||
* Update Snapshots
|
||||
* Skip Tests
|
||||
|
||||
.. figure:: img/libreplan-run-configurations.png
|
||||
:alt: Configure how to run LibrePlan in Eclipse
|
||||
:width: 100%
|
||||
|
||||
Configure how to run LibrePlan in Eclipse
|
||||
|
||||
* Click *Run* and application will be available at
|
||||
http://localhost:8080/libreplan-webapp/
|
||||
|
||||
|
||||
Configure Eclipse to follow coding style guidelines
|
||||
---------------------------------------------------
|
||||
|
||||
* Go to *Window* > *Preferences*
|
||||
|
||||
* Look for the different options to use always spaces instead of tabs and use 4
|
||||
spaces size for indentation
|
||||
|
||||
.. figure:: img/libreplan-preferences-tab.png
|
||||
:alt: Eclipse Preferences window
|
||||
:width: 100%
|
||||
|
||||
Eclipse Preferences window
|
||||
|
||||
* Create new profile to follow the coding style guidelines
|
||||
|
||||
.. figure:: img/libreplan-eclipse-profile.png
|
||||
:alt: New profile based on Eclipse default one
|
||||
:width: 100%
|
||||
|
||||
New profile based on Eclipse default one
|
||||
|
||||
* Configure *Save Actions* marking the following options:
|
||||
|
||||
* Perform the selected actions on save
|
||||
* Format source code
|
||||
* Format edited lines
|
||||
* Organize imports
|
||||
|
||||
.. figure:: img/libreplan-preferences-save-actions.png
|
||||
:alt: Save Actions configuration
|
||||
:width: 100%
|
||||
|
||||
Save Actions configuration
|
||||
|
||||
|
||||
.. _LibrePlan: http://www.libreplan.com/
|
||||
.. _Eclipse: http://www.eclipse.org
|
||||
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 131 KiB |
BIN
doc/src/technical/img/libreplan-download-eclipse.png
Normal file
|
After Width: | Height: | Size: 316 KiB |
BIN
doc/src/technical/img/libreplan-eclipse-profile.png
Normal file
|
After Width: | Height: | Size: 152 KiB |
BIN
doc/src/technical/img/libreplan-import-maven.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
doc/src/technical/img/libreplan-m2e.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
doc/src/technical/img/libreplan-poms.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
doc/src/technical/img/libreplan-preferences-save-actions.png
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
doc/src/technical/img/libreplan-preferences-tab.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
doc/src/technical/img/libreplan-run-configurations.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
|
@ -6,7 +6,7 @@ Introduction
|
|||
The purpose of this document is to describe the features of LibrePlan and provide user information on how to configure and use the application.
|
||||
|
||||
LibrePlan is an opensource web application for project planning. Its main goal is to provide a complete solution for company project management.
|
||||
For any specific information you may need about this software, please contact the development team at http://www.libreplan.org/en/contact
|
||||
For any specific information you may need about this software, please contact the development team at http://www.libreplan.com/contact/
|
||||
|
||||
|
||||
.. figure:: images/company_view.png
|
||||
|
|
|
|||
|
|
@ -4,16 +4,20 @@ Assignment of resources
|
|||
.. asigacion_
|
||||
.. contents::
|
||||
|
||||
The assignment of resources is one of the program's most important features, and can be carried out in two different ways:
|
||||
The assignment of resources is one of the program's most important features,
|
||||
and can be carried out in two different ways:
|
||||
|
||||
* Specific assignment.
|
||||
|
||||
* Generic assignment.
|
||||
|
||||
Both types of assignment are explained in the following sections.
|
||||
|
||||
To carry out either of the two types of resource assignment, the following steps are necessary:
|
||||
To carry out either of the two types of resource assignment, the following
|
||||
steps are necessary:
|
||||
|
||||
* Go to the planning of an order.
|
||||
|
||||
* Right click on the task to be planned.
|
||||
|
||||
.. figure:: images/resource-assignment-planning.png
|
||||
|
|
@ -23,16 +27,37 @@ To carry out either of the two types of resource assignment, the following steps
|
|||
|
||||
* The program shows a screen in which the following information can be viewed:
|
||||
|
||||
* List of criteria that must be fulfilled. For each hour group, a list of hour groups is shown, each of which requires a list of criteria.
|
||||
* Task information: start and end date of the task.
|
||||
* Type of calculation: The system allows users to choose the strategy to be used to calculate assignments:
|
||||
* List of criteria that must be fulfilled. For each hour group, a list of
|
||||
hour groups is shown, each of which requires a list of criteria.
|
||||
|
||||
* Calculate number of hours: This calculates the number of hours required to be devoted to the assigned resources, which are given an end date and a resource number per day.
|
||||
* Calculate end date: This calculates the end date of the task based on the number of task resources and the total number of hours to finish the task.
|
||||
* Calculate number of resources: This calculates the number of resources required to finish the task on a specific date and devotes a known number of hours to them.
|
||||
* Task information: start and end date of the task.
|
||||
|
||||
* Recommended assignment: This option allows the program to gather criteria that must be fulfilled and the total number of hours from all hour groups, and then recommends a generic assignment. If there was a prior assignment, the system deletes it and replaces it with the new one.
|
||||
* Assignments: A list of assignments that have been carried out. This list shows the generic assignments (the number will be the list of fulfilled criteria, and the number of hours and resources per day). Every assignment carried out can be explicitly removed by clicking the delete button.
|
||||
* Type of calculation: The system allows users to choose the strategy to
|
||||
be used to calculate assignments:
|
||||
|
||||
* Calculate number of hours: This calculates the number of hours
|
||||
required to be devoted to the assigned resources, which are given an
|
||||
end date and a resource number per day.
|
||||
|
||||
* Calculate end date: This calculates the end date of the task based on
|
||||
the number of task resources and the total number of hours to finish
|
||||
the task.
|
||||
|
||||
* Calculate number of resources: This calculates the number of resources
|
||||
required to finish the task on a specific date and devotes a known
|
||||
number of hours to them.
|
||||
|
||||
* Recommended assignment: This option allows the program to gather
|
||||
criteria that must be fulfilled and the total number of hours from all
|
||||
hour groups, and then recommends a generic assignment. If there was
|
||||
a prior assignment, the system deletes it and replaces it with the new
|
||||
one.
|
||||
|
||||
* Assignments: A list of assignments that have been carried out. This list
|
||||
shows the generic assignments (the number will be the list of fulfilled
|
||||
criteria, and the number of hours and resources per day). Every
|
||||
assignment carried out can be explicitly removed by clicking the delete
|
||||
button.
|
||||
|
||||
.. figure:: images/resource-assignment.png
|
||||
:scale: 50
|
||||
|
|
@ -40,7 +65,9 @@ To carry out either of the two types of resource assignment, the following steps
|
|||
Resource assignment
|
||||
|
||||
* Users select "Search resources".
|
||||
* The program shows a new screen consisting of a criteria tree and a list to the right of workers that fulfil the selected criteria:
|
||||
|
||||
* The program shows a new screen consisting of a criteria tree and a list to
|
||||
the right of workers that fulfil the selected criteria:
|
||||
|
||||
.. figure:: images/resource-assignment-search.png
|
||||
:scale: 50
|
||||
|
|
@ -49,22 +76,34 @@ To carry out either of the two types of resource assignment, the following steps
|
|||
|
||||
* Users can select:
|
||||
|
||||
* Specific assignment. See the "Specific assignment" section to find out what is involved when choosing this option.
|
||||
* Generic assignment. See the "Generic assignment" section to find out what is involved when choosing this option.
|
||||
* Specific assignment. See the "Specific assignment" section to find out
|
||||
what is involved when choosing this option.
|
||||
|
||||
* Users select a list of criteria (generic) or a list of workers (specific). A multiple-choice selection is performed by pressing the "Ctrl" button when clicking each worker/criterion.
|
||||
* Generic assignment. See the "Generic assignment" section to find out
|
||||
what is involved when choosing this option.
|
||||
|
||||
* Users then click the "Select" button. It is important to remember that if a generic assignment is not marked, users need to choose a worker or machine to perform an assignment. If this is not done, it is sufficient for users to choose one or several criteria.
|
||||
* Users select a list of criteria (generic) or a list of workers (specific).
|
||||
A multiple-choice selection is performed by pressing the "Ctrl" button
|
||||
when clicking each worker/criterion.
|
||||
|
||||
* The program then shows the selected criteria or resource list on the list of assignments from the original resource assignment screen.
|
||||
* Users then click the "Select" button. It is important to remember that if
|
||||
a generic assignment is not marked, users need to choose a worker or
|
||||
machine to perform an assignment. If this is not done, it is sufficient
|
||||
for users to choose one or several criteria.
|
||||
|
||||
* Users must choose the hours or resources per day depending on the assignment method used on the program.
|
||||
* The program then shows the selected criteria or resource list on the list
|
||||
of assignments from the original resource assignment screen.
|
||||
|
||||
* Users must choose the hours or resources per day depending on the
|
||||
assignment method used on the program.
|
||||
|
||||
|
||||
Specific assignment
|
||||
===================
|
||||
|
||||
This is the specific assignment of a resource to a project task, i.e. the user decides which specific "name and surname(s)" or "machine" must be assigned to a task.
|
||||
This is the specific assignment of a resource to a project task, i.e. the
|
||||
user decides which specific "name and surname(s)" or "machine" must be
|
||||
assigned to a task.
|
||||
|
||||
Specific assignment can be carried out on the screen shown in this image:
|
||||
|
||||
|
|
@ -74,20 +113,38 @@ Specific assignment can be carried out on the screen shown in this image:
|
|||
|
||||
Specific resource assignment
|
||||
|
||||
When a resource is specifically assigned, the program creates daily assignments in relation to the percentage of daily assigned resources selected, by previously comparing it with the available resource calendar. For example, an assignment of 0.5 resources for a 32-hour task means that 4 hours per day are assigned to the specific resource to fulfil the task (supposing a working calendar of 8 hours per day).
|
||||
When a resource is specifically assigned, the program creates daily
|
||||
assignments in relation to the percentage of daily assigned resources
|
||||
selected, by previously comparing it with the available resource calendar.
|
||||
For example, an assignment of 0.5 resources for a 32-hour task means that
|
||||
4 hours per day are assigned to the specific resource to fulfil the
|
||||
task (supposing a working calendar of 8 hours per day).
|
||||
|
||||
Specific machine assignment
|
||||
---------------------------
|
||||
|
||||
Specific machine assignment functions in the same way as that for workers. When a machine is assigned a task, the system stores a specific assignment of hours for the chosen machine. The main difference is that the system searches the list of assigned workers or criteria at the moment the machine is assigned:
|
||||
Specific machine assignment functions in the same way as that for workers.
|
||||
When a machine is assigned a task, the system stores a specific assignment
|
||||
of hours for the chosen machine. The main difference is that the system
|
||||
searches the list of assigned workers or criteria at the moment the machine
|
||||
is assigned:
|
||||
|
||||
* If the machine has a list of assigned workers, the program chooses from those that are required by the machine for the assigned calendar. For example, if the machine calendar is 16 hours per day and the resource calendar is 8 hours, two resources are assigned from the list of available resources.
|
||||
* If the machine has one or several assigned criteria, generic assignments are carried out from among the resources that fulfil the criteria assigned to the machine.
|
||||
* If the machine has a list of assigned workers, the program chooses from
|
||||
those that are required by the machine for the assigned calendar. For
|
||||
example, if the machine calendar is 16 hours per day and the resource
|
||||
calendar is 8 hours, two resources are assigned from the list of available
|
||||
resources.
|
||||
|
||||
* If the machine has one or several assigned criteria, generic assignments
|
||||
are carried out from among the resources that fulfil the criteria assigned
|
||||
to the machine.
|
||||
|
||||
Generic assignment
|
||||
==================
|
||||
|
||||
Generic assignment occurs when users do not choose resources specifically, but leave the decision to the program, which distributes the loads among the company's available resources.
|
||||
Generic assignment occurs when users do not choose resources specifically,
|
||||
but leave the decision to the program, which distributes the loads among the
|
||||
company's available resources.
|
||||
|
||||
.. figure:: images/asignacion-xenerica.png
|
||||
:scale: 50
|
||||
|
|
@ -97,42 +154,77 @@ Generic assignment occurs when users do not choose resources specifically, but l
|
|||
The assignment system uses the following assumptions as a basis:
|
||||
|
||||
* Tasks have criteria that are required from resources.
|
||||
|
||||
* Resources are configured to fulfil criteria.
|
||||
|
||||
However, the system does not fail when criteria have not been assigned, but when all resources fulfil the non-requirement of criteria.
|
||||
However, the system does not fail when criteria have not been assigned, but
|
||||
when all resources fulfil the non-requirement of criteria.
|
||||
|
||||
The generic assignment algorithm functions in the following way:
|
||||
|
||||
* All resources and days are treated as containers where daily assignment of hours fit, based on the maximum assignment capacity in the task calendar.
|
||||
* All resources and days are treated as containers where daily assignment of
|
||||
hours fit, based on the maximum assignment capacity in the task calendar.
|
||||
|
||||
* The system searches for the resources that fulfil the criterion.
|
||||
* The system analyses which assignments currently have different resources that fulfil criteria.
|
||||
* The resources that fulfil the criteria are chosen from those that have sufficient availability.
|
||||
* If freer resources are not available, assignments are made to the resources that have less availability.
|
||||
* Over-assignment of resources only starts when all the resources that fulfil the respective criteria are 100% assigned until the total amount required to carry out the task is attained.
|
||||
|
||||
* The system analyses which assignments currently have different resources
|
||||
that fulfil criteria.
|
||||
|
||||
* The resources that fulfil the criteria are chosen from those that have
|
||||
sufficient availability.
|
||||
|
||||
* If freer resources are not available, assignments are made to the
|
||||
resources that have less availability.
|
||||
|
||||
* Over-assignment of resources only starts when all the resources that
|
||||
fulfil the respective criteria are 100% assigned until the total amount
|
||||
required to carry out the task is attained.
|
||||
|
||||
Generic machine assignment
|
||||
--------------------------
|
||||
|
||||
Generic machine assignment functions in the same way as worker assignment. For example, when a machine is assigned to a task, the system stores a generic assignment of hours for all machines that fulfil the criteria as described for the resources in general. However, in addition, the system performs the following procedure for machines:
|
||||
Generic machine assignment functions in the same way as worker assignment.
|
||||
For example, when a machine is assigned to a task, the system stores
|
||||
a generic assignment of hours for all machines that fulfil the criteria as
|
||||
described for the resources in general. However, in addition, the system
|
||||
performs the following procedure for machines:
|
||||
|
||||
* For all machines chosen for generic assignment:
|
||||
|
||||
* It collects the machine's configuration information: alpha value, assigned workers and criteria.
|
||||
* If the machine has an assigned list of workers, the program chooses the number required by the machine depending on the assigned calendar. For example, if the machine calendar is 16 hours per day and the resource calendar is 8 hours, the program assigns two resources from the list of available resources.
|
||||
* If the machine has one or several assigned criteria, the program makes generic assignments from among the resources that fulfil the criteria assigned to the machine.
|
||||
* It collects the machine's configuration information: alpha value,
|
||||
assigned workers and criteria.
|
||||
|
||||
* If the machine has an assigned list of workers, the program chooses the
|
||||
number required by the machine depending on the assigned calendar. For
|
||||
example, if the machine calendar is 16 hours per day and the resource
|
||||
calendar is 8 hours, the program assigns two resources from the list of
|
||||
available resources.
|
||||
|
||||
* If the machine has one or several assigned criteria, the program makes
|
||||
generic assignments from among the resources that fulfil the criteria
|
||||
assigned to the machine.
|
||||
|
||||
|
||||
Advanced assignment
|
||||
===================
|
||||
|
||||
Advanced assignments allow users to design assignments that are automatically carried out by the application in order to personalise them. This procedure allows users to manually choose the daily hours that are dedicated by resources to tasks that are assigned or define a function that is applied to the assignment.
|
||||
Advanced assignments allow users to design assignments that are
|
||||
automatically carried out by the application in order to personalise them.
|
||||
This procedure allows users to manually choose the daily hours that are
|
||||
dedicated by resources to tasks that are assigned or define a function that
|
||||
is applied to the assignment.
|
||||
|
||||
The steps to follow in order to manage advanced assignments are:
|
||||
|
||||
* Go to the advanced assignment window. There are two ways to access advanced assignments:
|
||||
|
||||
* Go to a specific order and change the view to advanced assignment. In this case, all the tasks on the order and assigned resources (specific and generic) will be shown.
|
||||
* Go to the resource assignment window by clicking the "Advanced assignment" button. In this case, the assignments that show the resources (generic and specific) assigned for a task will be shown.
|
||||
* Go to a specific order and change the view to advanced assignment. In
|
||||
this case, all the tasks on the order and assigned resources (specific
|
||||
and generic) will be shown.
|
||||
|
||||
* Go to the resource assignment window by clicking the "Advanced
|
||||
assignment" button. In this case, the assignments that show the
|
||||
resources (generic and specific) assigned for a task will be shown.
|
||||
|
||||
.. figure:: images/advance-assignment.png
|
||||
:scale: 45
|
||||
|
|
@ -141,25 +233,45 @@ The steps to follow in order to manage advanced assignments are:
|
|||
|
||||
* Users can choose the required zoom level they want:
|
||||
|
||||
* If the chosen zoom is more than one day. If users change the assigned hour value to a week, month, four-month or six-month period, the system distributes the hours lineally for all days throughout the chosen period.
|
||||
* If the chosen zoom is one day. If users change the assigned hour value to a day, these hours only apply to a day. Consequently, users can decide how many hours they want to assign per day to task resources.
|
||||
* If the chosen zoom is more than one day. If users change the assigned
|
||||
hour value to a week, month, four-month or six-month period, the system
|
||||
distributes the hours lineally for all days throughout the chosen
|
||||
period.
|
||||
|
||||
* If the chosen zoom is one day. If users change the assigned hour value
|
||||
to a day, these hours only apply to a day. Consequently, users can
|
||||
decide how many hours they want to assign per day to task resources.
|
||||
|
||||
* Users can choose to design an advanced assignment function. In order to do so, users have to:
|
||||
|
||||
* Choose the function on the selection list that appears at the side of each resource and click "Configure".
|
||||
* The system shows a new window if the chosen function needs to be specifically configured. Supported functions:
|
||||
* Choose the function on the selection list that appears at the side of
|
||||
each resource and click "Configure".
|
||||
|
||||
* Segments: A function that allows users to define segments to which a polynomial function is applied. The function per segment is configured as follows:
|
||||
* The system shows a new window if the chosen function needs to be
|
||||
specifically configured. Supported functions:
|
||||
|
||||
* Segments: A function that allows users to define segments to which
|
||||
a polynomial function is applied. The function per segment is
|
||||
configured as follows:
|
||||
|
||||
* Date. Date on which the segment ends. If the following value is established (length), the date is calculated, alternatively, length is calculated.
|
||||
* Defining the length of each segment. This indicates what percentage of the task's duration is required for the segment.
|
||||
* Defining the amount of work. This indicates what workload percentage is expected to be completed in this segment. The quantity of work must be incremental. For example, if there is a 10% segment, the next one must be larger (for example, 20%).
|
||||
* Segment graphs and accumulated loads.
|
||||
* Date. Date on which the segment ends. If the following value is
|
||||
established (length), the date is calculated, alternatively, length is
|
||||
calculated.
|
||||
|
||||
* Defining the length of each segment. This indicates what percentage of
|
||||
the task's duration is required for the segment.
|
||||
|
||||
* Users then click "Accept".
|
||||
* The program stores the function and applies it to the daily resource assignments.
|
||||
* Defining the amount of work. This indicates what workload percentage
|
||||
is expected to be completed in this segment. The quantity of work must
|
||||
be incremental. For example, if there is a 10% segment, the next one
|
||||
must be larger (for example, 20%).
|
||||
|
||||
* Segment graphs and accumulated loads.
|
||||
|
||||
* Users then click "Accept".
|
||||
|
||||
* The program stores the function and applies it to the daily resource
|
||||
assignments.
|
||||
|
||||
.. figure:: images/stretches.png
|
||||
:scale: 40
|
||||
|
|
|
|||
|
|
@ -1,17 +1,21 @@
|
|||
Reports
|
||||
########
|
||||
|
||||
.. _informes:
|
||||
.. contents::
|
||||
|
||||
|
||||
Reports
|
||||
=======
|
||||
|
||||
"LibrePlan" is integrated with *JasperReports* to manage reports, which allows users to enter various reports to analyse available data in the program.
|
||||
|
||||
The defined reports are:
|
||||
|
||||
#. `Report on worked hours by resource <15-1-report-hours-worked-by-resource.html>`__
|
||||
#. `Report on the total hours worked by resource in a month <15-2-total-hours-by-resource-month.html>`__
|
||||
#. `Report on the work and progress per report <15-3-work-progress-per-project.html>`__
|
||||
Reports
|
||||
#######
|
||||
|
||||
.. _informes:
|
||||
.. contents::
|
||||
|
||||
|
||||
"LibrePlan" is integrated with *JasperReports* to manage reports, which allows users to enter various reports to analyse available data in the program.
|
||||
|
||||
The defined reports are:
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="15-1-report-hours-worked-by-resource.html">Report on worked hours by resource</a>
|
||||
</li><li>
|
||||
<a href="15-2-total-hours-by-resource-month.html">Report on the total hours worked by resource in a month</a>
|
||||
</li><li>
|
||||
<a href="15-3-work-progress-per-project.html">Report on the work and progress per report</a>
|
||||
</ul>
|
||||
|
|
|
|||
83
doc/src/user/en/16-ldap-authentication.rst
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
LDAP Configuration
|
||||
##################
|
||||
|
||||
.. contents::
|
||||
|
||||
This screen allows to establish a connection with LDAP to delegate
|
||||
authentication and/or authorization.
|
||||
|
||||
It is divided in four different areas related which are explained below:
|
||||
|
||||
Activation
|
||||
==========
|
||||
|
||||
This area is used to set the properties about the way in which *LibrePlan* uses
|
||||
LDAP.
|
||||
|
||||
If the field *Enable LDAP authentication* is checked, *LibrePlan* will look in
|
||||
LDAP each time an user tries to login in the application.
|
||||
|
||||
The field *Use LDAP roles* checked means that a mapping between LDAP roles and
|
||||
LibrePlan roles is established, so the permissions for an user in LibrePlan
|
||||
will depend on the roles in LDAP that the user has.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
This section has the parameter values for accessing LDAP.*Base, UserDN and
|
||||
Password* are parameters used to connect to LDAP and search for the users, so
|
||||
given user must have permission to do that operation in LDAP. At bottom part of
|
||||
this section there is a button to check if LDAP connection is possible with the
|
||||
given parameters. It is a good idea to try it before continuing the
|
||||
configuration.
|
||||
|
||||
Authentication
|
||||
==============
|
||||
|
||||
Here can be configured the property in LDAP nodes where should be found the
|
||||
given login name. The property *UserId* must be filled with the name of the
|
||||
property where the login name is stored in LDAP.
|
||||
|
||||
The checkbox *Save passwords in database* when it is checked, means that the
|
||||
password is stored also in LibrePlan database. In this way, if LDAP is offline
|
||||
or unreachable, LDAP users could authenticate against LibrePlan database. If it
|
||||
is not checked, LDAP users can only be authenticated against LDAP.
|
||||
|
||||
Authorization
|
||||
=============
|
||||
|
||||
This section allows to define an strategy for matching LDAP roles with
|
||||
LibrePlan roles. In fact, the first choice is the strategy to use, depending on
|
||||
LDAP implementation.
|
||||
|
||||
Group strategy
|
||||
--------------
|
||||
|
||||
When this strategy is used, it means that LDAP has a role-group strategy. It
|
||||
means that users in LDAP are nodes that hang directly from a branch which
|
||||
represents the group. In this way, considering as example an LDAP with a branch
|
||||
(group) called *Admin* and two nodes (users) in the branch called *John* and
|
||||
*William*, an administrator could assign to both users a role in LibrePlan. The
|
||||
only parameter needed in this case is the *Group path* that represents the path
|
||||
in LDAP to find the branches with the groups.
|
||||
|
||||
Property strategy
|
||||
-----------------
|
||||
|
||||
When administrator decides to use this strategy, it means that each user is a
|
||||
LDAP node and in the node exists a property that represents the group(s) for
|
||||
the user. In this case, the configuration needs two parameters:
|
||||
|
||||
* *Role property*. It represents the property in user's node in LDAP which
|
||||
contains all the roles for that user.
|
||||
|
||||
* *Role search query*. It represents the path in LDAP to find the nodes of
|
||||
the users; in this case, note that is important to know that string
|
||||
"[USER_ID]" represents the place where the login name given in the login
|
||||
form should be placed to get the correct user's node in LDAP.
|
||||
|
||||
At the bottom of this section there is a table with all the LibrePlan roles and
|
||||
a text field next to each one. This is for matching roles. For instance, if
|
||||
administrator decides that *Administration* LibrePlan role matches with *admin*
|
||||
and *administrators* roles of LDAP, in the text field should appear:
|
||||
"admin;administrators". The character for splitting roles is ";".
|
||||
|
|
@ -1,55 +1,84 @@
|
|||
About
|
||||
#################
|
||||
|
||||
.. _acercade:
|
||||
.. contents::
|
||||
|
||||
|
||||
Licence
|
||||
========
|
||||
|
||||
Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
|
||||
Desenvolvemento Tecnolóxico de Galicia
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Written by
|
||||
================
|
||||
|
||||
- Javier Morán <jmoran@igalia.com>
|
||||
- Oscar González <ogonzalez@igalia.com>
|
||||
- Diego Pino <dpino@igalia.com>
|
||||
- Manuel Rego <mrego@igalia.com>
|
||||
- José María Casanova <jmcasanova@igalia.com>
|
||||
- Lorenzo Tilve <ltilve@igalia.com>
|
||||
- Jacobo Aragunde <jaragunde@igalia.com>
|
||||
- Susana Montes <smontes@wirelessgalicia.com>
|
||||
- Xavier Castaño <xcastanho@igalia.com>
|
||||
- Farruco Sanjurjo <fsanjurjo@igalia.com>
|
||||
- Fernando Bellas <fbellas@udc.es>
|
||||
|
||||
|
||||
Public funding
|
||||
================================
|
||||
|
||||
Inside the global scope that LibrePlan is designed for regarding planning management, a project was developed to solve some common polanning problems. This project is partially financed by Xunta de Galicia, Ministerio de Industria, Turismo e Comercio, and by the European Union, Fondo Europeo de Desenvolvemento Rexional.
|
||||
|
||||
.. figure:: images/logos.png
|
||||
:scale: 100
|
||||
|
||||
This project was part of Plan Avanza:
|
||||
|
||||
.. figure:: images/avanza.gif
|
||||
:scale: 100
|
||||
|
||||
About
|
||||
#################
|
||||
|
||||
.. _acercade:
|
||||
.. contents::
|
||||
|
||||
|
||||
Licence
|
||||
========
|
||||
|
||||
Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
|
||||
Desenvolvemento Tecnolóxico de Galicia
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
Written by
|
||||
================
|
||||
|
||||
LibrePlan Team
|
||||
--------------
|
||||
|
||||
* Cristina Alvariño Pérez <cristina.alvarino@cafedered.es>
|
||||
* Jacobo Aragunde Pérez <jaragunde@igalia.com>
|
||||
* Nacho Barrientos Arias <nacho@igalia.com>
|
||||
* Xavier Castaño García <xcastanho@igalia.com>
|
||||
* Ignacio Díaz Teijido <ignacio.diaz@cafedered.es>
|
||||
* Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
* Francisco Javier Morán Rúa <jmoran@igalia.com>
|
||||
* Diego Pino García <dpino@igalia.com>
|
||||
* Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* Lorenzo Tilve Álvaro <ltilve@igalia.com>
|
||||
|
||||
Previous Team Members
|
||||
---------------------
|
||||
|
||||
* Fernando Bellas Permuy <fbellas@udc.es>
|
||||
* José María Casanova Crespo <jmcasanova@igalia.com>
|
||||
* Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* Pablo Fernández de la Cigoña Nóvoa <pcigonha@igalia.com>
|
||||
* Farruco Sanjurjo Arcay <fsanjurjo@igalia.com>
|
||||
|
||||
Translators
|
||||
-----------
|
||||
|
||||
* [es] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [gl] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [pt] Helena Grosso <lenagrosso@gmail.com>
|
||||
* [ru] Pavel Rudensky <prudensky@gmail.com>
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
* Eloy Calatayud <ecalatayud@wirelessgalicia.com>
|
||||
* Sergio Carracedo <cto@opsou.com>
|
||||
* Pedro Figueras <sales@opsou.com>
|
||||
* Dmytro Melanchenko <melanchenko@gmail.com>
|
||||
* Adrián Pérez <aperez@igalia.com>
|
||||
|
||||
|
||||
Public funding
|
||||
================================
|
||||
|
||||
Inside the global scope that LibrePlan is designed for regarding planning management, a project was developed to solve some common polanning problems. This project is partially financed by Xunta de Galicia, Ministerio de Industria, Turismo e Comercio, and by the European Union, Fondo Europeo de Desenvolvemento Rexional.
|
||||
|
||||
.. figure:: images/logos.png
|
||||
:scale: 100
|
||||
|
||||
This project was part of Plan Avanza:
|
||||
|
||||
.. figure:: images/avanza.png
|
||||
:scale: 100
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.8 KiB |
BIN
doc/src/user/en/images/avanza.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
|
@ -23,4 +23,5 @@
|
|||
12-formularios-calidad Xavier Castaño (xcastanho@igalia.com)
|
||||
13-usuarios Xavier Castaño (xcastanho@igalia.com)
|
||||
14-custos Xavier Castaño (xcastanho@igalia.com)
|
||||
15-informes Xavier Castaño (xcastanho@igalia.com)
|
||||
15-informes Xavier Castaño (xcastanho@igalia.com)
|
||||
16-ldap-authentication Ignacio Diaz Teijido (ignacio.diaz@cafedered.com)y Javier Moran Rua (jmoran@igalia.com)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ proyectos. Su objetivo principal es proporcionar una solución completa para la
|
|||
gestión de los proyectos de la empresa.
|
||||
Para cualquier información específica que necesites sobre este software, por
|
||||
favor ponte en contacto con el equipo de desarrollo en
|
||||
http://www.libreplan.org/es/contacto
|
||||
http://www.libreplan.com/contact/
|
||||
|
||||
|
||||
.. figure:: images/company_view.png
|
||||
|
|
|
|||
90
doc/src/user/es/16-ldap-authentication.rst
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
Configuracion LDAP
|
||||
##################
|
||||
|
||||
.. contents::
|
||||
|
||||
Esta pantalla permite establecer una conexión LDAP para delegar autenticación y/o autorización.
|
||||
|
||||
Está dividida en catro áreas diferentes relacionadas que se explican debajo:
|
||||
|
||||
Activación
|
||||
==========
|
||||
|
||||
|
||||
Esta área se usa para establecer las propiedades que configuran como *LibrePlan* usa LDAP.
|
||||
|
||||
Si el campo *Habilita autenticación LDAP* está marcado, *LibrePlan* utiliza el
|
||||
LDAP para autenticar cada vez que el usuario intenta entrar en la aplicación.
|
||||
|
||||
El campo *Usar LDAP roles* marcado significa que el mapping entre el roles LDAP
|
||||
y roles LibrePlan está establecido, de manera que los permisos en LibrePlan dependen
|
||||
de los roles que el usuario tiene en el LDAP.
|
||||
|
||||
Configuración
|
||||
=============
|
||||
|
||||
Esta sección tiene los parámentros para el acceso al LDAP. Los parámetros
|
||||
*Base, UserDN y Password* son los parámetros para conectar al LDAP y buscar a
|
||||
los usuarios. El usuario configurado debe tener permiso en
|
||||
el LDAP. En la última parte de esta sección hay un botón para comprobar que la
|
||||
conexión con el LDAP es posible con los parámetros configurados. Es una buena idea
|
||||
probar la conexión antes de continuar con la configuración.
|
||||
|
||||
Autenticación
|
||||
=============
|
||||
|
||||
En esta sección se configuran la propiedad de los nodos de LDAP donde se
|
||||
encuentra almacenada el login del usuario. La propiedad *UserId* debe ser
|
||||
rellenado con el nombre de la propiedad donde el login está almacenado en el
|
||||
LDAP.
|
||||
|
||||
El checkbox *Almacenar contraseñas en la base de datos* cuando se encuentra
|
||||
marcado, indica que la contraseña se almacena también en la base de datos
|
||||
LibrePlan. De esta forma, si el LDAP está offline o no existe conectividad, los
|
||||
usuarios del LDAP pueden autenticarse contra la base de datos de LibrePlan. Si
|
||||
no está marcado, los usuario de LDAP sólo pueden ser autenticados contro el
|
||||
LDAP.
|
||||
|
||||
|
||||
Autorización
|
||||
============
|
||||
|
||||
Esta sección permite definir la estrategia para asociar los roles de LDAP con
|
||||
los roles de LibrePlan.
|
||||
|
||||
Estrategia de grupo
|
||||
-------------------
|
||||
|
||||
Cuando se usa esta estrategia, implica que el LDAP está usando una estrageia de
|
||||
grupo de rol. Significa que los usuarios en el LDAP son nodos que cuelgan
|
||||
directamente de una rama que representa el grupo. Un ejemplo de ello sería tener
|
||||
un LDAP con una rama (grupo) llamada *Admin* y que tuviera debajo dos nodos
|
||||
(usuarios) llamados *John* y *William*. En este caso un administrador de
|
||||
LibrePlan podría asignar ambos usuarios a un rol en LibrePlan.
|
||||
|
||||
El único parámetro en este caso es el *Path de grupo* que representa la ruta en
|
||||
LDAP para encontras las ramas que representan los grupos.
|
||||
|
||||
Estrategia de propiedad
|
||||
-----------------------
|
||||
|
||||
Cuando un usuario administrador decide usar esta estrategia, implica que cada
|
||||
usuario es un nodo de LDAP y que en el nodo existe una propiedad que representa
|
||||
el grupo o grupos al que pertenece el usuairo. En este caso, la configuración
|
||||
necesita dos parámetros:
|
||||
|
||||
* *Propiedad del rol*. Representa la propiedad en el nodo del usuario que
|
||||
contiene todos los roles para el mismo.
|
||||
|
||||
* *Consulta para la búsqueda de roles*. Representa la ruta en el LDAP para
|
||||
encontrar los nodos de los usuarios. En este caso, hay que tener en cuenta que
|
||||
la cadena "[USER_ID]" representa el lugar en el que el nombre del usuario
|
||||
proporcionado en el formulario de entrada debe ser situado para obtener el
|
||||
nodo apropiado correspondiente al usuario en el LDAP.
|
||||
|
||||
En el fondo de la pantalla de esta sección hay una tabla con todos los roles de
|
||||
LibrePlan y un campo de texto anexo a cada uno de ellos. Esta área es para la
|
||||
asociación de los roles. Por ejemplo, si un usuario administrador de LibrePlan
|
||||
decide que rol de LibrePlan *Administración* se corresponde con los roles
|
||||
*admin* y *administrators* del LDAP en el campo de texto hay que configurar:
|
||||
"admin;administrators". El carácter de separación de roles es ";".
|
||||
|
|
@ -1,55 +1,85 @@
|
|||
Acerca de
|
||||
#################
|
||||
|
||||
.. _acercade:
|
||||
.. contents::
|
||||
|
||||
|
||||
Licencia
|
||||
================
|
||||
|
||||
Este programa es software libre; puede redistribuirlo o modificarlo bajo los
|
||||
términos de la Licencia Pública Generala Affero GNU tal como se publica por la
|
||||
Free Software Foundation; ya sea la versión 3 de la Licencia, o (a su elección)
|
||||
cualquier versión posterior.
|
||||
|
||||
Este programa se distribuye con la esperanza de que le sea útil, pero SIN
|
||||
NINGUNA GARANTÍA; sin incluso la garantía implícita de MERCANTILIDAD o IDONEIDAD
|
||||
PARA UN PROPÓSITO PARTICULAR. Vea la Licencia Pública General Affero GNU para
|
||||
más detalles.
|
||||
|
||||
Debería haber recibido una copia de la Licencia Pública General Affero GNU junto
|
||||
con este programa. Si no es así, visite <http://www.gnu.org/licenses/>.
|
||||
|
||||
Escrito por
|
||||
================
|
||||
|
||||
- Javier Morán <jmoran@igalia.com>
|
||||
- Oscar González <ogonzalez@igalia.com>
|
||||
- Diego Pino <dpino@igalia.com>
|
||||
- Manuel Rego <mrego@igalia.com>
|
||||
- José María Casanova <jmcasanova@igalia.com>
|
||||
- Lorenzo Tilve <ltilve@igalia.com>
|
||||
- Jacobo Aragunde <jaragunde@igalia.com>
|
||||
- Susana Montes <smontes@wirelessgalicia.com>
|
||||
- Xavier Castaño <xcastanho@igalia.com>
|
||||
- Farruco Sanjurjo <fsanjurjo@igalia.com>
|
||||
- Fernando Bellas <fbellas@udc.es>
|
||||
|
||||
Financiación pública
|
||||
========================
|
||||
|
||||
Dentro del marco global de LibrePlan y la gestión de la planificación, se desarrolló un proyecto que pretende resolver
|
||||
una serie de problemas comunes de planificación.
|
||||
Este proyecto fue cofinanciado por la Xunta de Galicia, el Ministerio de Industria, Turismo y Comercio, y la
|
||||
Unión Europea, Fondo Europeo de Desarrollo Regional.
|
||||
|
||||
|
||||
.. figure:: images/logos.png
|
||||
:scale: 100
|
||||
|
||||
El proyecto formo parte del Plan Avanza:
|
||||
|
||||
.. figure:: images/avanza.gif
|
||||
:scale: 100
|
||||
|
||||
Acerca de
|
||||
#################
|
||||
|
||||
.. _acercade:
|
||||
.. contents::
|
||||
|
||||
|
||||
Licencia
|
||||
================
|
||||
|
||||
Este programa es software libre; puede redistribuirlo o modificarlo bajo los
|
||||
términos de la Licencia Pública Generala Affero GNU tal como se publica por la
|
||||
Free Software Foundation; ya sea la versión 3 de la Licencia, o (a su elección)
|
||||
cualquier versión posterior.
|
||||
|
||||
Este programa se distribuye con la esperanza de que le sea útil, pero SIN
|
||||
NINGUNA GARANTÍA; sin incluso la garantía implícita de MERCANTILIDAD o IDONEIDAD
|
||||
PARA UN PROPÓSITO PARTICULAR. Vea la Licencia Pública General Affero GNU para
|
||||
más detalles.
|
||||
|
||||
Debería haber recibido una copia de la Licencia Pública General Affero GNU junto
|
||||
con este programa. Si no es así, visite <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
Escrito por
|
||||
================
|
||||
|
||||
Equipo de LibrePlan
|
||||
-------------------
|
||||
|
||||
* Cristina Alvariño Pérez <cristina.alvarino@cafedered.es>
|
||||
* Jacobo Aragunde Pérez <jaragunde@igalia.com>
|
||||
* Nacho Barrientos Arias <nacho@igalia.com>
|
||||
* Xavier Castaño García <xcastanho@igalia.com>
|
||||
* Ignacio Díaz Teijido <ignacio.diaz@cafedered.es>
|
||||
* Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
* Francisco Javier Morán Rúa <jmoran@igalia.com>
|
||||
* Diego Pino García <dpino@igalia.com>
|
||||
* Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* Lorenzo Tilve Álvaro <ltilve@igalia.com>
|
||||
|
||||
Anteriores miembros del equipo
|
||||
------------------------------
|
||||
|
||||
* Fernando Bellas Permuy <fbellas@udc.es>
|
||||
* José María Casanova Crespo <jmcasanova@igalia.com>
|
||||
* Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* Pablo Fernández de la Cigoña Nóvoa <pcigonha@igalia.com>
|
||||
* Farruco Sanjurjo Arcay <fsanjurjo@igalia.com>
|
||||
|
||||
Traductores
|
||||
-----------
|
||||
|
||||
* [es] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [gl] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [pt] Helena Grosso <lenagrosso@gmail.com>
|
||||
* [ru] Pavel Rudensky <prudensky@gmail.com>
|
||||
|
||||
Contribuidores
|
||||
--------------
|
||||
|
||||
* Eloy Calatayud <ecalatayud@wirelessgalicia.com>
|
||||
* Sergio Carracedo <cto@opsou.com>
|
||||
* Pedro Figueras <sales@opsou.com>
|
||||
* Dmytro Melanchenko <melanchenko@gmail.com>
|
||||
* Adrián Pérez <aperez@igalia.com>
|
||||
|
||||
|
||||
Financiación pública
|
||||
========================
|
||||
|
||||
Dentro del marco global de LibrePlan y la gestión de la planificación, se desarrolló un proyecto que pretende resolver
|
||||
una serie de problemas comunes de planificación.
|
||||
Este proyecto fue cofinanciado por la Xunta de Galicia, el Ministerio de Industria, Turismo y Comercio, y la
|
||||
Unión Europea, Fondo Europeo de Desarrollo Regional.
|
||||
|
||||
|
||||
.. figure:: images/logos.png
|
||||
:scale: 100
|
||||
|
||||
El proyecto formo parte del Plan Avanza:
|
||||
|
||||
.. figure:: images/avanza.gif
|
||||
:scale: 100
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
|
@ -23,4 +23,5 @@
|
|||
12-formularios-calidad Xavier Castaño (xcastanho@igalia.com)
|
||||
13-usuarios Xavier Castaño (xcastanho@igalia.com)
|
||||
14-custos Xavier Castaño (xcastanho@igalia.com)
|
||||
15-informes Xavier Castaño (xcastanho@igalia.com)
|
||||
15-informes Xavier Castaño (xcastanho@igalia.com)
|
||||
16-ldap-authentication Ignacio Diaz Teijido (ignacio.diaz@cafedered.com) y Javier Moran Rua (jmoran@igalia.com)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ proxectos. O seu obxectivo principal é proporcionar unha solución completa par
|
|||
xestión dos proxectos da empresa.
|
||||
Para calquera información específica que necesites sobre este software, por
|
||||
favor ponte en contacto co equipo de desenvolvemento en
|
||||
http://www.libreplan.org/contacto
|
||||
http://www.libreplan.com/contact/
|
||||
|
||||
|
||||
.. figure:: images/company_view.png
|
||||
|
|
|
|||
90
doc/src/user/gl/16-ldap-authentication.rst
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
Configuracion LDAP
|
||||
##################
|
||||
|
||||
.. contents::
|
||||
|
||||
Esta pantalla permite establecer unha conexión LDAP para delegar autenticación e/ou autorización.
|
||||
|
||||
Está dividida en catro áreas diferentes relacionadas que se explican debaixo:
|
||||
|
||||
Activación
|
||||
==========
|
||||
|
||||
|
||||
Esta área úsase para establecer as propiedades que configuran como *LibrePlan* usa LDAP.
|
||||
|
||||
Se o campo *Habilita autenticación LDAP* está marcado, *LibrePlan* utiliza o
|
||||
LDAP para autenticar cada vez que o usuario tenta entrar na aplicación.
|
||||
|
||||
O campo *Usar LDAP roles* marcado significa que o mapping entre os roles LDAP
|
||||
e os roles de LibrePlan está establecido, de maneira que os permisos en LibrePlan dependen
|
||||
dos roles que o usuario ten no LDAP.
|
||||
|
||||
Configuración
|
||||
=============
|
||||
|
||||
Esta sección ten os parámentros para o acceso ao LDAP. Os parámetros
|
||||
*Basee, UserDN e Password* son os parámetros para conectar ao LDAP e buscar aos
|
||||
usuarios. O usuario configurado debe ter permiso no
|
||||
LDAP. Na última parte desta sección hai un botón para comprobar que a
|
||||
conexión co LDAP é posible cos parámetros configurados. É unha boa idea
|
||||
probar a conexión antes de continuar coa configuración.
|
||||
|
||||
Autenticación
|
||||
=============
|
||||
|
||||
Nesta sección configúranse a propiedade dos nodos de LDAP onde se atopa
|
||||
almacenada o login do usuario. A propiedade *UserId* debe ser
|
||||
enchido co nome da propiedade onde o login está almacenado no
|
||||
LDAP.
|
||||
|
||||
O checkbox *Almacenar contrasinais na base de datos* cando se atopa
|
||||
marcado, indica que a contrasinal se almacena tamén na base de datos
|
||||
LibrePlan. Desta forma, se o LDAP está offline ou non existe conectividad, os
|
||||
usuarios do LDAP poden autenticarse contra a base de datos de LibrePlan. Se
|
||||
non está marcado, o usuario de LDAP só poden ser autenticados contro o
|
||||
LDAP.
|
||||
|
||||
|
||||
Autorización
|
||||
============
|
||||
|
||||
Esta sección permite definir a estratexia para asociar os roles de LDAP cos
|
||||
roles de LibrePlan.
|
||||
|
||||
Estratexia de grupo
|
||||
-------------------
|
||||
|
||||
Cando se usa esta estratexia, implica que o LDAP está a usar unha estratexia de grupo
|
||||
de rol. Significa que os usuarios no LDAP son nodos que colgan
|
||||
directamente dunha rama que representa o grupo. Un exemplo diso sería ter
|
||||
un LDAP cunha rama (grupo) chamada *Admin* e que tivese debaixo dous nodos
|
||||
(usuarios) chamados *John* e *William*. Neste caso un administrador de LibrePlan
|
||||
podería asignar ambos usuarios a un rol en LibrePlan.
|
||||
|
||||
O único parámetro neste caso é o *Path de grupo* que representa a ruta en LDAP
|
||||
para atopar as ramas que representan os grupos.
|
||||
|
||||
Estratexia de propiedade
|
||||
------------------------
|
||||
|
||||
Cando un usuario administrador decide usar esta estratexia, implica que cada
|
||||
usuario é un nodo de LDAP e que no nodo existe unha propiedade que representa
|
||||
o grupo ou grupos ao que pertence o usuairo. Neste caso, a configuración
|
||||
necesita dous parámetros:
|
||||
|
||||
* *Propiedade do rol*. Representa a propiedade no nodo do usuario que
|
||||
contén todos os roles para o mesmo.
|
||||
|
||||
* *Consulta para a procura de roles*. Representa a ruta no LDAP para
|
||||
atopar os nodos dos usuarios. Neste caso, hai que ter en conta que
|
||||
a cadea "[USER_IDE]" representa o lugar no que o nome do usuario
|
||||
proporcionado no formulario de entrada debe ser situado para obter o
|
||||
nodo apropiado correspondente ao usuario no LDAP.
|
||||
|
||||
No fondo da pantalla desta sección hai unha táboa con todos os roles de LibrePlan
|
||||
e un campo de texto anexo a cada un deles. Esta área é para a
|
||||
asociación dos roles. Por exemplo, se un usuario administrador de LibrePlan
|
||||
decide que rol de LibrePlan *Administración* correspóndese cos roles
|
||||
*admin* e *administrators* do LDAP no campo de texto hai que configurar:
|
||||
"admin;administrators". O carácter de separación de roles é ";".
|
||||
|
|
@ -1,52 +1,82 @@
|
|||
Acerca de
|
||||
#################
|
||||
|
||||
.. _acercade:
|
||||
.. contents::
|
||||
|
||||
|
||||
Licenza
|
||||
================
|
||||
|
||||
Este programa é software libre; pode redistribuílo ou modificalo baixo as
|
||||
condicións da Licenza Pública Xeral Affero GNU tal como a publica a Free
|
||||
Software Foundation; tanto na versión 3 da Licenza como (segundo o seu
|
||||
criterio) en calquera versión posterior.
|
||||
|
||||
Este programa distribúese esperando que sexa útil, mais SEN NINGUNHA GARANTÍA;
|
||||
mesmo sen a garantía implícita de VALOR COMERCIAL ou IDONEIDADE PARA UN
|
||||
PROPÓSITO PARTICULAR. Para máis detalles vexa a Licenza Pública Xeral Affero
|
||||
GNU.
|
||||
|
||||
Debeu recibir unha copia da Licenza Pública Xeral Affero GNU xunto con este
|
||||
programa. En caso contrario, visite <http://www.gnu.org/licenses/>.
|
||||
|
||||
Escrito por
|
||||
================
|
||||
|
||||
- Javier Morán <jmoran@igalia.com>
|
||||
- Oscar González <ogonzalez@igalia.com>
|
||||
- Diego Pino <dpino@igalia.com>
|
||||
- Manuel Rego <mrego@igalia.com>
|
||||
- José María Casanova <jmcasanova@igalia.com>
|
||||
- Lorenzo Tilve <ltilve@igalia.com>
|
||||
- Jacobo Aragunde <jaragunde@igalia.com>
|
||||
- Susana Montes <smontes@wirelessgalicia.com>
|
||||
- Xavier Castaño <xcastanho@igalia.com>
|
||||
- Farruco Sanjurjo <fsanjurjo@igalia.com>
|
||||
- Fernando Bellas <fbellas@udc.es>
|
||||
|
||||
Financiación pública
|
||||
========================
|
||||
|
||||
Dentro do marco global de LibrePlan e a xestión da planificación, desenvolveuse un proxecto que pretende resolver unha serie de problemas comúns de planificación. Este proxecto foi cofinanciado pola Xunta de Galicia, o Ministerio de Industria, Turismo e Comercio, e pola Unión Europea, Fondo Europeo de Desenvolvemento Rexional.
|
||||
|
||||
|
||||
.. figure:: images/logos.png
|
||||
:scale: 100
|
||||
|
||||
Así mesmo o proxecto formou parte do Plan Avanza:
|
||||
|
||||
.. figure:: images/avanza.gif
|
||||
:scale: 100
|
||||
|
||||
Acerca de
|
||||
#################
|
||||
|
||||
.. _acercade:
|
||||
.. contents::
|
||||
|
||||
|
||||
Licenza
|
||||
================
|
||||
|
||||
Este programa é software libre; pode redistribuílo ou modificalo baixo as
|
||||
condicións da Licenza Pública Xeral Affero GNU tal como a publica a Free
|
||||
Software Foundation; tanto na versión 3 da Licenza como (segundo o seu
|
||||
criterio) en calquera versión posterior.
|
||||
|
||||
Este programa distribúese esperando que sexa útil, mais SEN NINGUNHA GARANTÍA;
|
||||
mesmo sen a garantía implícita de VALOR COMERCIAL ou IDONEIDADE PARA UN
|
||||
PROPÓSITO PARTICULAR. Para máis detalles vexa a Licenza Pública Xeral Affero
|
||||
GNU.
|
||||
|
||||
Debeu recibir unha copia da Licenza Pública Xeral Affero GNU xunto con este
|
||||
programa. En caso contrario, visite <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
Escrito por
|
||||
================
|
||||
|
||||
Equipo de LibrePlan
|
||||
-------------------
|
||||
|
||||
* Cristina Alvariño Pérez <cristina.alvarino@cafedered.es>
|
||||
* Jacobo Aragunde Pérez <jaragunde@igalia.com>
|
||||
* Nacho Barrientos Arias <nacho@igalia.com>
|
||||
* Xavier Castaño García <xcastanho@igalia.com>
|
||||
* Ignacio Díaz Teijido <ignacio.diaz@cafedered.es>
|
||||
* Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
* Francisco Javier Morán Rúa <jmoran@igalia.com>
|
||||
* Diego Pino García <dpino@igalia.com>
|
||||
* Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* Lorenzo Tilve Álvaro <ltilve@igalia.com>
|
||||
|
||||
Anteriores membros do equipo
|
||||
----------------------------
|
||||
|
||||
* Fernando Bellas Permuy <fbellas@udc.es>
|
||||
* José María Casanova Crespo <jmcasanova@igalia.com>
|
||||
* Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* Pablo Fernández de la Cigoña Nóvoa <pcigonha@igalia.com>
|
||||
* Farruco Sanjurjo Arcay <fsanjurjo@igalia.com>
|
||||
|
||||
Traductores
|
||||
-----------
|
||||
|
||||
* [es] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [gl] Manuel Rego Casasnovas <rego@igalia.com>
|
||||
* [pt] Helena Grosso <lenagrosso@gmail.com>
|
||||
* [ru] Pavel Rudensky <prudensky@gmail.com>
|
||||
|
||||
Contribuidores
|
||||
--------------
|
||||
|
||||
* Eloy Calatayud <ecalatayud@wirelessgalicia.com>
|
||||
* Sergio Carracedo <cto@opsou.com>
|
||||
* Pedro Figueras <sales@opsou.com>
|
||||
* Dmytro Melanchenko <melanchenko@gmail.com>
|
||||
* Adrián Pérez <aperez@igalia.com>
|
||||
|
||||
|
||||
Financiación pública
|
||||
========================
|
||||
|
||||
Dentro do marco global de LibrePlan e a xestión da planificación, desenvolveuse un proxecto que pretende resolver unha serie de problemas comúns de planificación. Este proxecto foi cofinanciado pola Xunta de Galicia, o Ministerio de Industria, Turismo e Comercio, e pola Unión Europea, Fondo Europeo de Desenvolvemento Rexional.
|
||||
|
||||
|
||||
.. figure:: images/logos.png
|
||||
:scale: 100
|
||||
|
||||
Así mesmo o proxecto formou parte do Plan Avanza:
|
||||
|
||||
.. figure:: images/avanza.gif
|
||||
:scale: 100
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
|
@ -23,4 +23,5 @@
|
|||
12-formularios-calidad Xavier Castaño (xcastanho@igalia.com)
|
||||
13-usuarios Xavier Castaño (xcastanho@igalia.com)
|
||||
14-custos Xavier Castaño (xcastanho@igalia.com)
|
||||
15-informes Xavier Castaño (xcastanho@igalia.com)
|
||||
15-informes Xavier Castaño (xcastanho@igalia.com)
|
||||
16-ldap-authentication Ignacio Diaz Teijido (ignacio.diaz@cafedered.com) e Javier Moran Rua (jmoran@igalia.com)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
import sys, shlex, subprocess
|
||||
from optparse import OptionParser, OptionGroup
|
||||
from docutils.writers import latex2e
|
||||
import re
|
||||
|
||||
try:
|
||||
import locale
|
||||
|
|
@ -42,6 +43,23 @@ OPT.docinfo.add_option("-i", "--info", dest="docinfo",
|
|||
help="Read project information from FILE")
|
||||
|
||||
|
||||
is_index_filename = re.compile(r'^[0-9]{2}-[a-zA-Z].*').match
|
||||
|
||||
|
||||
def str_to_numeric_tuple(s):
|
||||
r = []
|
||||
for item in s.split("-"):
|
||||
try:
|
||||
r.append(int(item, 10))
|
||||
except ValueError:
|
||||
# Tried to convert a non-integer, bail out
|
||||
break
|
||||
return tuple(r)
|
||||
|
||||
def str_tuple_sort(a, b):
|
||||
return cmp(str_to_numeric_tuple(a), str_to_numeric_tuple(b))
|
||||
|
||||
|
||||
def optparser(*groups):
|
||||
parser.add_option_group(OPT.common)
|
||||
[parser.add_option_group(g) for g in groups]
|
||||
|
|
@ -50,7 +68,12 @@ def optparser(*groups):
|
|||
|
||||
class DupRefsRemover(object):
|
||||
def __init__(self, out):
|
||||
self.out = out
|
||||
if hasattr(out, "write"):
|
||||
self.out = out.write
|
||||
elif hasattr(out, "handle_line"):
|
||||
self.out = out.handle_line
|
||||
else:
|
||||
raise ValueError("%r has no write/handle_line" % out)
|
||||
self.ref = dict()
|
||||
|
||||
def handle_line(self, line):
|
||||
|
|
@ -64,9 +87,35 @@ class DupRefsRemover(object):
|
|||
else:
|
||||
# Add reference and print it out
|
||||
self.ref[r[0]] = r[1]
|
||||
self.out.write(line)
|
||||
self.out(line)
|
||||
else:
|
||||
self.out.write(line)
|
||||
self.out(line)
|
||||
|
||||
|
||||
class UnderlineXlate(object):
|
||||
_XLATE = {
|
||||
"#": "=",
|
||||
"=": "-",
|
||||
"-": "~",
|
||||
"~": "^",
|
||||
}
|
||||
|
||||
def __init__(self, out):
|
||||
if hasattr(out, "write"):
|
||||
self.out = out.write
|
||||
elif hasattr(out, "handle_line"):
|
||||
self.out = out.handle_line
|
||||
else:
|
||||
raise ValueError("%r has no write/handle_line" % out)
|
||||
|
||||
def handle_line(self, line):
|
||||
sline = line.strip()
|
||||
if len(sline):
|
||||
if sline[0] in self._XLATE:
|
||||
sline = sline.replace(sline[0], self._XLATE[sline[0]])
|
||||
self.out(sline)
|
||||
return
|
||||
self.out(line)
|
||||
|
||||
|
||||
|
||||
|
|
@ -135,10 +184,10 @@ class LaTeXStandaloneTranslator(latex2e.LaTeXTranslator):
|
|||
if self.d_class.document_class == "igaliabk":
|
||||
self.d_class.document_class = "book"
|
||||
|
||||
try:
|
||||
del self.head_prefix[self.head_prefix.index(self.typearea)]
|
||||
except AttributeError:
|
||||
pass
|
||||
try:
|
||||
del self.head_prefix[self.head_prefix.index(self.typearea)]
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
def __get_typearea(self):
|
||||
if self._class == "igaliabk" or self._class.startswith("scr"):
|
||||
|
|
@ -239,13 +288,17 @@ class DocTool(object):
|
|||
print
|
||||
|
||||
out = DupRefsRemover(sys.stdout)
|
||||
out_xlate = UnderlineXlate(out)
|
||||
|
||||
args = list(args)
|
||||
args.sort(str_tuple_sort)
|
||||
|
||||
for name in args:
|
||||
if not name.endswith(".rst"):
|
||||
continue
|
||||
|
||||
f = file(name, "rU")
|
||||
map(out.handle_line,
|
||||
map(is_index_filename(name) and out.handle_line or out_xlate.handle_line,
|
||||
filter(lambda l: ".. contents::" not in l,
|
||||
f.readlines())
|
||||
)
|
||||
|
|
@ -263,9 +316,12 @@ class DocTool(object):
|
|||
f.close()
|
||||
print
|
||||
|
||||
args = list(args)
|
||||
args.sort(str_tuple_sort)
|
||||
|
||||
for name in args:
|
||||
# Skip non-RST inputs
|
||||
if not name.endswith(".rst"):
|
||||
if not name.endswith(".rst") or not is_index_filename(name):
|
||||
continue
|
||||
|
||||
f = file(name, "rU")
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.libreplan</groupId>
|
||||
<artifactId>libreplan</artifactId>
|
||||
<version>1.1.3</version>
|
||||
<version>1.2.0</version>
|
||||
</parent>
|
||||
<artifactId>ganttzk</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
|
|
|||
|
|
@ -221,6 +221,9 @@ public class FunctionalityExposedForExtensions<T> implements IContext<T> {
|
|||
accumulatedDependencies, child));
|
||||
i++;
|
||||
}
|
||||
} else if (navigator.isMilestone(data)) {
|
||||
Milestone milestone = (Milestone) result;
|
||||
milestone.setOwner(position.getParent());
|
||||
}
|
||||
|
||||
result.setShowingReportedHours(planner.showReportedHoursRightNow());
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import java.util.List;
|
|||
import org.joda.time.LocalDate;
|
||||
import org.zkoss.ganttz.adapters.IDisabilityConfiguration;
|
||||
import org.zkoss.ganttz.data.GanttDiagramGraph;
|
||||
import org.zkoss.ganttz.data.Task;
|
||||
import org.zkoss.ganttz.timetracker.TimeTracker;
|
||||
import org.zkoss.ganttz.timetracker.TimeTrackerComponent;
|
||||
import org.zkoss.ganttz.timetracker.zoom.IZoomLevelChangedListener;
|
||||
|
|
@ -136,6 +137,13 @@ public class GanttPanel extends XulElement implements AfterCompose {
|
|||
registerZoomLevelChangedListener();
|
||||
}
|
||||
|
||||
public void updateTooltips() {
|
||||
for (Task task : this.tasksLists.getAllTasks()) {
|
||||
task.updateTooltipText();
|
||||
}
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public TimeTrackerComponent getTimeTrackerComponent() {
|
||||
return timeTrackerComponent;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@ public class LeftPane extends HtmlMacroComponent {
|
|||
|
||||
private FilterAndParentExpandedPredicates predicate;
|
||||
|
||||
private Planner planner;
|
||||
|
||||
public void setGoingDownInLastArrowCommand(
|
||||
CommandContextualized<?> goingDownInLastArrowCommand) {
|
||||
this.leftTasksTree
|
||||
|
|
@ -52,18 +54,19 @@ public class LeftPane extends HtmlMacroComponent {
|
|||
}
|
||||
|
||||
public LeftPane(IDisabilityConfiguration disabilityConfiguration,
|
||||
List<Task> topLevelTasks,
|
||||
Planner planner,
|
||||
FilterAndParentExpandedPredicates predicate) {
|
||||
this.topLevelTasks = topLevelTasks;
|
||||
this.topLevelTasks = planner.getDiagramGraph().getTopLevelTasks();
|
||||
this.disabilityConfiguration = disabilityConfiguration;
|
||||
this.predicate = predicate;
|
||||
this.planner = planner;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompose() {
|
||||
super.afterCompose();
|
||||
leftTasksTree = new LeftTasksTree(disabilityConfiguration,
|
||||
topLevelTasks, predicate);
|
||||
leftTasksTree = new LeftTasksTree(disabilityConfiguration, planner,
|
||||
predicate);
|
||||
getContainer().appendChild(leftTasksTree);
|
||||
leftTasksTree.afterCompose();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,6 +54,13 @@ import org.zkoss.zul.Treecell;
|
|||
import org.zkoss.zul.Treeitem;
|
||||
import org.zkoss.zul.TreeitemRenderer;
|
||||
|
||||
/**
|
||||
* Tree element to display tasks structure in the planning Gantt <br />
|
||||
*
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* @author Manuel Rego Casasnovas <mrego@igalia.com>
|
||||
* @author Lorenzo Tilve Álvaro <ltilve@igalia.com>
|
||||
*/
|
||||
public class LeftTasksTree extends HtmlMacroComponent {
|
||||
|
||||
private final class TaskBeanRenderer implements TreeitemRenderer {
|
||||
|
|
@ -75,12 +82,9 @@ public class LeftTasksTree extends HtmlMacroComponent {
|
|||
container.addExpandListener(expandListener);
|
||||
|
||||
}
|
||||
final int[] path = tasksTreeModel.getPath(tasksTreeModel.getRoot(),
|
||||
task);
|
||||
String cssClass = "depth_" + path.length;
|
||||
LeftTasksTreeRow leftTasksTreeRow = LeftTasksTreeRow.create(
|
||||
disabilityConfiguration, task,
|
||||
new TreeNavigator(tasksTreeModel, task));
|
||||
disabilityConfiguration, task, new TreeNavigator(
|
||||
tasksTreeModel, task), planner);
|
||||
if (task.isContainer()) {
|
||||
expandWhenOpened((TaskContainer) task, item);
|
||||
}
|
||||
|
|
@ -96,9 +100,6 @@ public class LeftTasksTree extends HtmlMacroComponent {
|
|||
List<Object> rowChildren = row.getChildren();
|
||||
List<Treecell> treeCells = ComponentsFinder.findComponentsOfType(
|
||||
Treecell.class, rowChildren);
|
||||
for (Treecell cell : treeCells) {
|
||||
cell.setSclass(cssClass);
|
||||
}
|
||||
detailsForBeans.put(task, leftTasksTreeRow);
|
||||
deferredFiller.isBeingRendered(task, item);
|
||||
}
|
||||
|
|
@ -330,12 +331,15 @@ public class LeftTasksTree extends HtmlMacroComponent {
|
|||
|
||||
private final List<Task> visibleTasks = new ArrayList<Task>();
|
||||
|
||||
private Planner planner;
|
||||
|
||||
public LeftTasksTree(IDisabilityConfiguration disabilityConfiguration,
|
||||
List<Task> tasks,
|
||||
Planner planner,
|
||||
FilterAndParentExpandedPredicates predicate) {
|
||||
this.disabilityConfiguration = disabilityConfiguration;
|
||||
this.tasks = tasks;
|
||||
this.tasks = planner.getTaskList().getAllTasks();
|
||||
this.predicate = predicate;
|
||||
this.planner = planner;
|
||||
}
|
||||
|
||||
private void fillModel(Collection<? extends Task> tasks, boolean firstTime) {
|
||||
|
|
|
|||
|
|
@ -24,15 +24,19 @@ package org.zkoss.ganttz;
|
|||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.zkoss.ganttz.adapters.IDisabilityConfiguration;
|
||||
import org.zkoss.ganttz.data.GanttDate;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IModifications;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IUpdatablePosition;
|
||||
import org.zkoss.ganttz.data.Task;
|
||||
import org.zkoss.ganttz.util.ComponentsFinder;
|
||||
import org.zkoss.util.Locales;
|
||||
|
|
@ -47,6 +51,13 @@ import org.zkoss.zul.Treecell;
|
|||
import org.zkoss.zul.api.Label;
|
||||
import org.zkoss.zul.api.Treerow;
|
||||
|
||||
/**
|
||||
* Row composer for Tasks details Tree <br />
|
||||
*
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* @author Manuel Rego Casasnovas <mrego@igalia.com>
|
||||
* @author Lorenzo Tilve Álvaro <ltilve@igalia.com>
|
||||
*/
|
||||
public class LeftTasksTreeRow extends GenericForwardComposer {
|
||||
|
||||
public interface ILeftTasksTreeNavigator {
|
||||
|
|
@ -71,31 +82,32 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
|
||||
private Textbox endDateTextBox;
|
||||
|
||||
private Datebox startDateBox;
|
||||
|
||||
private Datebox endDateBox;
|
||||
private Datebox openedDateBox = null;
|
||||
|
||||
private DateFormat dateFormat;
|
||||
|
||||
private Planner planner;
|
||||
|
||||
private final ILeftTasksTreeNavigator leftTasksTreeNavigator;
|
||||
|
||||
private final IDisabilityConfiguration disabilityConfiguration;
|
||||
|
||||
public static LeftTasksTreeRow create(
|
||||
IDisabilityConfiguration disabilityConfiguration, Task bean,
|
||||
ILeftTasksTreeNavigator taskDetailnavigator) {
|
||||
ILeftTasksTreeNavigator taskDetailnavigator, Planner planner) {
|
||||
return new LeftTasksTreeRow(disabilityConfiguration, bean,
|
||||
taskDetailnavigator);
|
||||
taskDetailnavigator, planner);
|
||||
}
|
||||
|
||||
private LeftTasksTreeRow(IDisabilityConfiguration disabilityConfiguration,
|
||||
Task task,
|
||||
ILeftTasksTreeNavigator leftTasksTreeNavigator) {
|
||||
Task task, ILeftTasksTreeNavigator leftTasksTreeNavigator,
|
||||
Planner planner) {
|
||||
this.disabilityConfiguration = disabilityConfiguration;
|
||||
this.task = task;
|
||||
this.dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locales
|
||||
.getCurrent());
|
||||
this.leftTasksTreeNavigator = leftTasksTreeNavigator;
|
||||
this.planner = planner;
|
||||
}
|
||||
|
||||
public Task getTask() {
|
||||
|
|
@ -110,19 +122,6 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
this.nameBox = nameBox;
|
||||
}
|
||||
|
||||
public Datebox getStartDateBox() {
|
||||
return startDateBox;
|
||||
}
|
||||
|
||||
public void setStartDateBox(Datebox startDateBox) {
|
||||
this.startDateBox = startDateBox;
|
||||
this.startDateBox.setCompact(true);
|
||||
this.startDateBox.setFormat("dd/MM/yyyy");
|
||||
}
|
||||
|
||||
public Datebox getEndDateBox() {
|
||||
return endDateBox;
|
||||
}
|
||||
|
||||
public Task getData() {
|
||||
return task;
|
||||
|
|
@ -137,21 +136,35 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
public void userWantsDateBox(Component component) {
|
||||
if (component == startDateTextBox) {
|
||||
if (canChangeStartDate()) {
|
||||
showDateBox(startDateBox, startDateTextBox);
|
||||
createDateBox(startDateTextBox);
|
||||
}
|
||||
}
|
||||
if (component == endDateTextBox) {
|
||||
if (canChangeEndDate()) {
|
||||
showDateBox(endDateBox, endDateTextBox);
|
||||
createDateBox(endDateTextBox);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showDateBox(Datebox dateBox, Textbox associatedTextBox) {
|
||||
associatedTextBox.setVisible(false);
|
||||
dateBox.setVisible(true);
|
||||
dateBox.setFocus(true);
|
||||
dateBox.setOpen(true);
|
||||
public void createDateBox(Textbox textbox) {
|
||||
openedDateBox = new Datebox();
|
||||
openedDateBox.setFormat("short");
|
||||
openedDateBox.setButtonVisible(false);
|
||||
|
||||
try {
|
||||
openedDateBox.setValue(dateFormat.parse(textbox.getValue()));
|
||||
} catch (ParseException e) {
|
||||
return;
|
||||
}
|
||||
|
||||
registerOnEnterOpenDateBox(openedDateBox);
|
||||
registerBlurListener(openedDateBox);
|
||||
registerOnChangeDatebox(openedDateBox, textbox);
|
||||
|
||||
textbox.setVisible(false);
|
||||
textbox.getParent().appendChild(openedDateBox);
|
||||
openedDateBox.setFocus(true);
|
||||
openedDateBox.setOpen(true);
|
||||
}
|
||||
|
||||
private enum Navigation {
|
||||
|
|
@ -204,20 +217,6 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
case DOWN:
|
||||
focusGoDown(position);
|
||||
break;
|
||||
case LEFT:
|
||||
if (position == 0) {
|
||||
focusGoUp(getTextBoxes().size() - 1);
|
||||
} else {
|
||||
textBoxes.get(position - 1).focus();
|
||||
}
|
||||
break;
|
||||
case RIGHT:
|
||||
if (position < textBoxes.size() - 1) {
|
||||
textBoxes.get(position + 1).focus();
|
||||
} else {
|
||||
focusGoDown(0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("case not covered: " + navigation);
|
||||
}
|
||||
|
|
@ -233,25 +232,15 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
* the component that has lost focus
|
||||
*/
|
||||
public void dateBoxHasLostFocus(Datebox dateBox) {
|
||||
if (dateBox == startDateBox) {
|
||||
hideDateBox(startDateBox, startDateTextBox);
|
||||
}
|
||||
if (dateBox == endDateBox) {
|
||||
hideDateBox(endDateBox, endDateTextBox);
|
||||
}
|
||||
}
|
||||
|
||||
private void hideDateBox(Datebox dateBoxToDissapear,
|
||||
Textbox associatedTextBox) {
|
||||
dateBoxToDissapear.setVisible(false);
|
||||
associatedTextBox.setVisible(true);
|
||||
dateBox.getPreviousSibling().setVisible(true);
|
||||
dateBox.setParent(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAfterCompose(Component component) throws Exception {
|
||||
super.doAfterCompose(component);
|
||||
findComponents((Treerow) component);
|
||||
registerListeners();
|
||||
registerTextboxesListeners();
|
||||
updateComponents();
|
||||
task
|
||||
.addFundamentalPropertiesChangeListener(new PropertyChangeListener() {
|
||||
|
|
@ -263,27 +252,22 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
});
|
||||
}
|
||||
|
||||
private void registerListeners() {
|
||||
private void registerTextboxesListeners() {
|
||||
if (disabilityConfiguration.isTreeEditable()) {
|
||||
registerKeyboardListener(nameBox);
|
||||
registerOnChange(nameBox);
|
||||
registerKeyboardListener(startDateTextBox);
|
||||
registerKeyboardListener(endDateTextBox);
|
||||
|
||||
registerOnEnterListener(startDateTextBox);
|
||||
registerOnEnterListener(endDateTextBox);
|
||||
|
||||
registerOnEnterOpenDateBox(startDateBox);
|
||||
registerOnEnterOpenDateBox(endDateBox);
|
||||
|
||||
registerBlurListener(startDateBox);
|
||||
registerBlurListener(endDateBox);
|
||||
|
||||
registerOnChange(nameBox);
|
||||
registerOnChange(startDateBox);
|
||||
registerOnChange(endDateBox);
|
||||
registerOnChange(startDateTextBox);
|
||||
registerOnChange(endDateTextBox);
|
||||
}
|
||||
}
|
||||
|
||||
public void registerDateboxListeners(Datebox datebox) {
|
||||
}
|
||||
|
||||
private void findComponents(Treerow row) {
|
||||
List<Object> rowChildren = row.getChildren();
|
||||
List<Treecell> treeCells = ComponentsFinder.findComponentsOfType(Treecell.class,
|
||||
|
|
@ -294,14 +278,10 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
findComponentsForEndDateCell(treeCells.get(2));
|
||||
}
|
||||
|
||||
private static Datebox findDateBoxOfCell(Treecell treecell) {
|
||||
List<Object> children = treecell.getChildren();
|
||||
return ComponentsFinder.findComponentsOfType(Datebox.class, children).get(0);
|
||||
}
|
||||
|
||||
private static Textbox findTextBoxOfCell(Treecell treecell) {
|
||||
List<Object> children = treecell.getChildren();
|
||||
return ComponentsFinder.findComponentsOfType(Textbox.class, children).get(0);
|
||||
return ComponentsFinder.findComponentsOfType(Textbox.class, children)
|
||||
.get(0);
|
||||
}
|
||||
|
||||
private void findComponentsForNameCell(Treecell treecell) {
|
||||
|
|
@ -332,6 +312,18 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
});
|
||||
}
|
||||
|
||||
private void registerOnChangeDatebox(final Datebox datebox,
|
||||
final Textbox textbox) {
|
||||
datebox.addEventListener("onChange", new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) {
|
||||
textbox.setValue(dateFormat.format(datebox.getValue()));
|
||||
updateBean(textbox);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void registerOnEnterListener(final Textbox textBox) {
|
||||
textBox.addEventListener("onOK", new EventListener() {
|
||||
|
||||
|
|
@ -355,7 +347,6 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
private void findComponentsForStartDateCell(Treecell treecell) {
|
||||
if (disabilityConfiguration.isTreeEditable()) {
|
||||
startDateTextBox = findTextBoxOfCell(treecell);
|
||||
startDateBox = findDateBoxOfCell(treecell);
|
||||
} else {
|
||||
startDateLabel = (Label) treecell.getChildren().get(0);
|
||||
}
|
||||
|
|
@ -363,8 +354,6 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
|
||||
private void findComponentsForEndDateCell(Treecell treecell) {
|
||||
if (disabilityConfiguration.isTreeEditable()) {
|
||||
endDateBox = findDateBoxOfCell(treecell);
|
||||
endDateBox.setDisabled(true);
|
||||
endDateTextBox = findTextBoxOfCell(treecell);
|
||||
} else {
|
||||
endDateLabel = (Label) treecell.getChildren().get(0);
|
||||
|
|
@ -384,13 +373,35 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
public void updateBean(Component updatedComponent) {
|
||||
if (updatedComponent == getNameBox()) {
|
||||
task.setName(getNameBox().getValue());
|
||||
} else if (updatedComponent == getStartDateBox()) {
|
||||
Date begin = getStartDateBox().getValue();
|
||||
task.moveTo(GanttDate.createFrom(begin));
|
||||
} else if (updatedComponent == getEndDateBox()) {
|
||||
Date newEnd = getEndDateBox().getValue();
|
||||
task.resizeTo(LocalDate.fromDateFields(newEnd));
|
||||
if (StringUtils.isEmpty(getNameBox().getValue())) {
|
||||
getNameBox().setValue(task.getName());
|
||||
}
|
||||
} else if (updatedComponent == getStartDateTextBox()) {
|
||||
try {
|
||||
final Date begin = dateFormat.parse(getStartDateTextBox()
|
||||
.getValue());
|
||||
task.doPositionModifications(new IModifications() {
|
||||
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition position) {
|
||||
position.moveTo(GanttDate.createFrom(begin));
|
||||
}
|
||||
});
|
||||
} catch (ParseException e) {
|
||||
getStartDateTextBox().setValue(
|
||||
dateFormat.format(task.getBeginDate()
|
||||
.toDayRoundedDate()));
|
||||
}
|
||||
} else if (updatedComponent == getEndDateTextBox()) {
|
||||
try {
|
||||
Date newEnd = dateFormat.parse(getEndDateTextBox().getValue());
|
||||
task.resizeTo(LocalDate.fromDateFields(newEnd));
|
||||
} catch (ParseException e) {
|
||||
getEndDateTextBox().setValue(
|
||||
asString(task.getEndDate().toDayRoundedDate()));
|
||||
}
|
||||
}
|
||||
planner.updateTooltips();
|
||||
}
|
||||
|
||||
private void updateComponents() {
|
||||
|
|
@ -399,13 +410,7 @@ public class LeftTasksTreeRow extends GenericForwardComposer {
|
|||
getNameBox().setDisabled(!canRenameTask());
|
||||
getNameBox().setTooltiptext(task.getName());
|
||||
|
||||
getStartDateBox().setValue(
|
||||
task.getBeginDate().toDayRoundedDate());
|
||||
getStartDateBox().setDisabled(!canChangeStartDate());
|
||||
getStartDateTextBox().setDisabled(!canChangeStartDate());
|
||||
|
||||
getEndDateBox().setValue(task.getEndDate().toDayRoundedDate());
|
||||
getEndDateBox().setDisabled(!canChangeEndDate());
|
||||
getEndDateTextBox().setDisabled(!canChangeEndDate());
|
||||
|
||||
getStartDateTextBox().setValue(
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ import org.zkoss.zul.Button;
|
|||
import org.zkoss.zul.ListModel;
|
||||
import org.zkoss.zul.Listbox;
|
||||
import org.zkoss.zul.Listitem;
|
||||
import org.zkoss.zul.Separator;
|
||||
import org.zkoss.zul.SimpleListModel;
|
||||
import org.zkoss.zul.South;
|
||||
|
||||
|
|
@ -468,8 +467,7 @@ public class Planner extends HtmlMacroComponent {
|
|||
return true;
|
||||
}
|
||||
};
|
||||
this.leftPane = new LeftPane(disabilityConfiguration, this.diagramGraph
|
||||
.getTopLevelTasks(), predicate);
|
||||
this.leftPane = new LeftPane(disabilityConfiguration, this, predicate);
|
||||
this.ganttPanel = new GanttPanel(this,
|
||||
commandsOnTasksContextualized, doubleClickCommand,
|
||||
disabilityConfiguration, predicate);
|
||||
|
|
@ -478,11 +476,21 @@ public class Planner extends HtmlMacroComponent {
|
|||
button.setDisabled(!context.isPrintEnabled());
|
||||
}
|
||||
|
||||
public GanttZKDiagramGraph getDiagramGraph() {
|
||||
return this.diagramGraph;
|
||||
}
|
||||
|
||||
public void updateTooltips() {
|
||||
this.ganttPanel.updateTooltips();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void insertGlobalCommands() {
|
||||
Component commontoolbar = getCommonCommandsInsertionPoint();
|
||||
Component plannerToolbar = getSpecificCommandsInsertionPoint();
|
||||
commontoolbar.getChildren().removeAll(commontoolbar.getChildren());
|
||||
if (!contextualizedGlobalCommands.isEmpty()) {
|
||||
commontoolbar.getChildren().removeAll(commontoolbar.getChildren());
|
||||
}
|
||||
for (CommandContextualized<?> c : contextualizedGlobalCommands) {
|
||||
// Comparison through icon as name is internationalized
|
||||
if (c.getCommand().getImage()
|
||||
|
|
@ -865,7 +873,14 @@ public class Planner extends HtmlMacroComponent {
|
|||
}
|
||||
|
||||
public void updateCompletion(String progressType) {
|
||||
getTaskList().updateCompletion(progressType);
|
||||
TaskList taskList = getTaskList();
|
||||
if (taskList != null) {
|
||||
taskList.updateCompletion(progressType);
|
||||
// FIXME Bug #1270
|
||||
for (TaskComponent each : taskList.getTaskComponents()) {
|
||||
each.invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ import org.joda.time.DateTime;
|
|||
import org.joda.time.LocalDate;
|
||||
import org.zkoss.ganttz.adapters.IDisabilityConfiguration;
|
||||
import org.zkoss.ganttz.data.GanttDate;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IModifications;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IUpdatablePosition;
|
||||
import org.zkoss.ganttz.data.Milestone;
|
||||
import org.zkoss.ganttz.data.Task;
|
||||
import org.zkoss.ganttz.data.Task.IReloadResourcesTextRequested;
|
||||
|
|
@ -238,9 +240,7 @@ public class TaskComponent extends Div implements AfterCompose {
|
|||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (isInPage()) {
|
||||
updateProperties();
|
||||
}
|
||||
updateProperties();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -306,6 +306,9 @@ public class TaskComponent extends Div implements AfterCompose {
|
|||
private transient PropertyChangeListener propertiesListener;
|
||||
private IConstraintViolationListener<GanttDate> taskViolationListener;
|
||||
|
||||
// FIXME Bug #1270
|
||||
private String progressType;
|
||||
|
||||
public TaskRow getRow() {
|
||||
if (getParent() == null) {
|
||||
throw new IllegalStateException(
|
||||
|
|
@ -342,8 +345,14 @@ public class TaskComponent extends Div implements AfterCompose {
|
|||
|
||||
void doUpdatePosition(int leftX, int topY) {
|
||||
GanttDate startBeforeMoving = this.task.getBeginDate();
|
||||
LocalDate newPosition = getMapper().toDate(leftX);
|
||||
this.task.moveTo(GanttDate.createFrom(newPosition));
|
||||
final LocalDate newPosition = getMapper().toDate(leftX);
|
||||
this.task.doPositionModifications(new IModifications() {
|
||||
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition position) {
|
||||
position.moveTo(GanttDate.createFrom(newPosition));
|
||||
}
|
||||
});
|
||||
boolean remainsInOriginalPosition = this.task.getBeginDate().equals(
|
||||
startBeforeMoving);
|
||||
if (remainsInOriginalPosition) {
|
||||
|
|
@ -482,7 +491,7 @@ public class TaskComponent extends Div implements AfterCompose {
|
|||
updateCompletionAdvance();
|
||||
}
|
||||
|
||||
private void updateCompletionReportedHours() {
|
||||
public void updateCompletionReportedHours() {
|
||||
if (task.isShowingReportedHours()) {
|
||||
int startPixels = this.task.getBeginDate().toPixels(getMapper());
|
||||
String widthHoursAdvancePercentage = pixelsFromStartUntil(
|
||||
|
|
@ -529,11 +538,13 @@ public class TaskComponent extends Div implements AfterCompose {
|
|||
}
|
||||
|
||||
public void updateTooltipText() {
|
||||
smartUpdate("taskTooltipText", task.updateTooltipText());
|
||||
// FIXME Bug #1270
|
||||
this.progressType = null;
|
||||
}
|
||||
|
||||
public void updateTooltipText(String progressType) {
|
||||
smartUpdate("taskTooltipText", task.updateTooltipText(progressType));
|
||||
// FIXME Bug #1270
|
||||
this.progressType = progressType;
|
||||
}
|
||||
|
||||
private DependencyList getDependencyList() {
|
||||
|
|
@ -567,7 +578,12 @@ public class TaskComponent extends Div implements AfterCompose {
|
|||
}
|
||||
|
||||
public String getTooltipText() {
|
||||
return task.getTooltipText();
|
||||
// FIXME Bug #1270
|
||||
if (progressType == null) {
|
||||
return task.getTooltipText();
|
||||
} else {
|
||||
return task.updateTooltipText(progressType);
|
||||
}
|
||||
}
|
||||
|
||||
public String getLabelsText() {
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ import java.util.Date;
|
|||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.zkoss.ganttz.data.GanttDate;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IModifications;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IUpdatablePosition;
|
||||
import org.zkoss.ganttz.data.Task;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||
|
|
@ -120,12 +122,19 @@ public class TaskEditFormComposer extends GenericForwardComposer {
|
|||
return localDate.toDateTimeAtStartOfDay().toDate();
|
||||
}
|
||||
|
||||
private void copyFromDTO(TaskDTO taskDTO, Task currentTask,
|
||||
private void copyFromDTO(final TaskDTO taskDTO, Task currentTask,
|
||||
boolean copyDates) {
|
||||
currentTask.setName(taskDTO.name);
|
||||
if (copyDates) {
|
||||
currentTask.setBeginDate(GanttDate.createFrom(taskDTO.beginDate));
|
||||
currentTask.resizeTo(GanttDate.createFrom(taskDTO.endDate));
|
||||
currentTask.doPositionModifications(new IModifications() {
|
||||
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition position) {
|
||||
position.setBeginDate(GanttDate
|
||||
.createFrom(taskDTO.beginDate));
|
||||
position.resizeTo(GanttDate.createFrom(taskDTO.endDate));
|
||||
}
|
||||
});
|
||||
}
|
||||
currentTask.setNotes(taskDTO.notes);
|
||||
currentTask.setDeadline(taskDTO.deadlineDate);
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ public class TaskList extends XulElement implements AfterCompose {
|
|||
public void updateCompletion(String progressType) {
|
||||
for (TaskComponent task: getTaskComponents()) {
|
||||
task.updateCompletion(progressType);
|
||||
task.updateCompletionReportedHours();
|
||||
task.updateTooltipText(progressType);
|
||||
}
|
||||
}
|
||||
|
|
@ -198,7 +199,7 @@ public class TaskList extends XulElement implements AfterCompose {
|
|||
return getTimeTrackerComponent().getTimeTracker();
|
||||
}
|
||||
|
||||
private List<TaskComponent> getTaskComponents() {
|
||||
protected List<TaskComponent> getTaskComponents() {
|
||||
ArrayList<TaskComponent> result = new ArrayList<TaskComponent>();
|
||||
for (Object child : getChildren()) {
|
||||
if (child instanceof TaskRow) {
|
||||
|
|
|
|||
|
|
@ -59,6 +59,33 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties
|
|||
|
||||
private String resourcesText;
|
||||
|
||||
private IUpdatablePosition position = new IUpdatablePosition() {
|
||||
|
||||
private final DefaultFundamentalProperties parent = DefaultFundamentalProperties.this;
|
||||
|
||||
@Override
|
||||
public void setBeginDate(GanttDate beginDate) {
|
||||
parent.beginDate = toMilliseconds(beginDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEndDate(GanttDate endDate) {
|
||||
parent.beginDate = toMilliseconds(endDate)
|
||||
- parent.lengthMilliseconds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resizeTo(GanttDate endDate) {
|
||||
parent.lengthMilliseconds = toMilliseconds(endDate) - beginDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveTo(GanttDate date) {
|
||||
setBeginDate(date);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
public DefaultFundamentalProperties() {
|
||||
}
|
||||
|
||||
|
|
@ -80,6 +107,11 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties
|
|||
this.resourcesText = "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doPositionModifications(IModifications modifications) {
|
||||
modifications.doIt(position);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
|
@ -115,11 +147,6 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties
|
|||
return toGanttDate(beginDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBeginDate(GanttDate beginDate) {
|
||||
this.beginDate = toMilliseconds(beginDate);
|
||||
}
|
||||
|
||||
public long getLengthMilliseconds() {
|
||||
return lengthMilliseconds;
|
||||
}
|
||||
|
|
@ -129,16 +156,6 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties
|
|||
return toGanttDate(beginDate + getLengthMilliseconds());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEndDate(GanttDate endDate) {
|
||||
this.beginDate = toMilliseconds(endDate) - this.lengthMilliseconds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resizeTo(GanttDate endDate) {
|
||||
this.lengthMilliseconds = toMilliseconds(endDate) - beginDate;
|
||||
}
|
||||
|
||||
public String getNotes() {
|
||||
return notes;
|
||||
}
|
||||
|
|
@ -193,11 +210,6 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties
|
|||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveTo(GanttDate date) {
|
||||
setBeginDate(date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getDeadline() {
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -46,12 +46,16 @@ import org.apache.commons.logging.LogFactory;
|
|||
import org.jgrapht.DirectedGraph;
|
||||
import org.jgrapht.graph.SimpleDirectedGraph;
|
||||
import org.zkoss.ganttz.data.DependencyType.Point;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IModifications;
|
||||
import org.zkoss.ganttz.data.ITaskFundamentalProperties.IUpdatablePosition;
|
||||
import org.zkoss.ganttz.data.constraint.Constraint;
|
||||
import org.zkoss.ganttz.data.constraint.ConstraintOnComparableValues;
|
||||
import org.zkoss.ganttz.data.constraint.ConstraintOnComparableValues.ComparisonType;
|
||||
import org.zkoss.ganttz.data.criticalpath.ICriticalPathCalculable;
|
||||
import org.zkoss.ganttz.util.IAction;
|
||||
import org.zkoss.ganttz.util.PreAndPostNotReentrantActionsWrapper;
|
||||
import org.zkoss.ganttz.util.ReentranceGuard;
|
||||
import org.zkoss.ganttz.util.ReentranceGuard.IReentranceCases;
|
||||
|
||||
/**
|
||||
* This class contains a graph with the {@link Task tasks} as vertexes and the
|
||||
|
|
@ -87,6 +91,8 @@ public class GanttDiagramGraph<V, D extends IDependency<V>> implements
|
|||
public interface IAdapter<V, D extends IDependency<V>> {
|
||||
List<V> getChildren(V task);
|
||||
|
||||
V getOwner(V task);
|
||||
|
||||
boolean isContainer(V task);
|
||||
|
||||
void registerDependenciesEnforcerHookOn(V task,
|
||||
|
|
@ -131,6 +137,15 @@ public class GanttDiagramGraph<V, D extends IDependency<V>> implements
|
|||
return task.getTasks();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task getOwner(Task task) {
|
||||
if (task instanceof Milestone) {
|
||||
Milestone milestone = (Milestone) task;
|
||||
return milestone.getOwner();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task getDestination(Dependency dependency) {
|
||||
return dependency.getDestination();
|
||||
|
|
@ -180,8 +195,14 @@ public class GanttDiagramGraph<V, D extends IDependency<V>> implements
|
|||
|
||||
|
||||
@Override
|
||||
public void setEndDateFor(Task task, GanttDate newEnd) {
|
||||
task.setEndDate(newEnd);
|
||||
public void setEndDateFor(Task task, final GanttDate newEnd) {
|
||||
task.doPositionModifications(new IModifications() {
|
||||
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition position) {
|
||||
position.setEndDate(newEnd);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -190,8 +211,14 @@ public class GanttDiagramGraph<V, D extends IDependency<V>> implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setStartDateFor(Task task, GanttDate newStart) {
|
||||
task.setBeginDate(newStart);
|
||||
public void setStartDateFor(Task task, final GanttDate newStart) {
|
||||
task.doPositionModifications(new IModifications() {
|
||||
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition position) {
|
||||
position.setBeginDate(newStart);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -513,6 +540,14 @@ public class GanttDiagramGraph<V, D extends IDependency<V>> implements
|
|||
dependenciesToAdd.add(adapter.createInvisibleDependency(
|
||||
task, child, DependencyType.START_START));
|
||||
}
|
||||
} else {
|
||||
V owner = adapter.getOwner(task);
|
||||
if(owner != null) {
|
||||
dependenciesToAdd.add(adapter.createInvisibleDependency(
|
||||
task, owner, DependencyType.END_END));
|
||||
dependenciesToAdd.add(adapter.createInvisibleDependency(
|
||||
owner, task, DependencyType.START_START));
|
||||
}
|
||||
}
|
||||
}
|
||||
for (D each : dependenciesToAdd) {
|
||||
|
|
@ -1933,16 +1968,27 @@ public class GanttDiagramGraph<V, D extends IDependency<V>> implements
|
|||
}
|
||||
|
||||
public boolean hasVisibleIncomingDependencies(V task) {
|
||||
return isSomeVisible(graph.incomingEdgesOf(task));
|
||||
return isSomeVisibleAndNotEndEnd(graph.incomingEdgesOf(task));
|
||||
}
|
||||
|
||||
private boolean isSomeVisibleAndNotEndEnd(Set<D> dependencies) {
|
||||
for (D each : dependencies) {
|
||||
if (!each.getType().equals(DependencyType.END_END)
|
||||
&& adapter.isVisible(each)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean hasVisibleOutcomingDependencies(V task) {
|
||||
return isSomeVisible(graph.outgoingEdgesOf(task));
|
||||
return isSomeVisibleAndNotStartStart(graph.outgoingEdgesOf(task));
|
||||
}
|
||||
|
||||
private boolean isSomeVisible(Set<D> dependencies) {
|
||||
private boolean isSomeVisibleAndNotStartStart(Set<D> dependencies) {
|
||||
for (D each : dependencies) {
|
||||
if (adapter.isVisible(each)) {
|
||||
if (!each.getType().equals(DependencyType.START_START)
|
||||
&& adapter.isVisible(each)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -2273,31 +2319,4 @@ public class GanttDiagramGraph<V, D extends IDependency<V>> implements
|
|||
return adapter.getChildren(task);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interface IReentranceCases {
|
||||
public void ifNewEntrance();
|
||||
|
||||
public void ifAlreadyInside();
|
||||
}
|
||||
|
||||
class ReentranceGuard {
|
||||
private final ThreadLocal<Boolean> inside = new ThreadLocal<Boolean>() {
|
||||
protected Boolean initialValue() {
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
public void entranceRequested(IReentranceCases reentranceCases) {
|
||||
if (inside.get()) {
|
||||
reentranceCases.ifAlreadyInside();
|
||||
return;
|
||||
}
|
||||
inside.set(true);
|
||||
try {
|
||||
reentranceCases.ifNewEntrance();
|
||||
} finally {
|
||||
inside.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -32,15 +32,30 @@ import org.zkoss.ganttz.data.constraint.Constraint;
|
|||
*/
|
||||
public interface ITaskFundamentalProperties {
|
||||
|
||||
public interface IUpdatablePosition {
|
||||
|
||||
public void setBeginDate(GanttDate beginDate);
|
||||
|
||||
public void setEndDate(GanttDate endDate);
|
||||
|
||||
public void resizeTo(GanttDate endDate);
|
||||
|
||||
public void moveTo(GanttDate newStart);
|
||||
}
|
||||
|
||||
/**
|
||||
* The position modifications must be wrapped inside this
|
||||
*/
|
||||
public interface IModifications {
|
||||
public void doIt(IUpdatablePosition position);
|
||||
}
|
||||
|
||||
public void doPositionModifications(IModifications modifications);
|
||||
|
||||
public String getName();
|
||||
|
||||
public void setName(String name);
|
||||
|
||||
/**
|
||||
* Sets the beginDate.
|
||||
*/
|
||||
public void setBeginDate(GanttDate beginDate);
|
||||
|
||||
public GanttDate getBeginDate();
|
||||
|
||||
/**
|
||||
|
|
@ -55,10 +70,6 @@ public interface ITaskFundamentalProperties {
|
|||
|
||||
public GanttDate getEndDate();
|
||||
|
||||
public void setEndDate(GanttDate endDate);
|
||||
|
||||
public void resizeTo(GanttDate endDate);
|
||||
|
||||
public String getNotes();
|
||||
|
||||
public void setNotes(String notes);
|
||||
|
|
@ -81,8 +92,6 @@ public interface ITaskFundamentalProperties {
|
|||
|
||||
public List<Constraint<GanttDate>> getEndConstraints();
|
||||
|
||||
public void moveTo(GanttDate newStart);
|
||||
|
||||
public boolean isSubcontracted();
|
||||
|
||||
public boolean isLimiting();
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ public class Milestone extends Task {
|
|||
|
||||
private List<Task> tasks = new ArrayList<Task>();
|
||||
|
||||
private TaskContainer owner;
|
||||
|
||||
private boolean expanded = false;
|
||||
|
||||
@Override
|
||||
|
|
@ -73,4 +75,12 @@ public class Milestone extends Task {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void setOwner(TaskContainer owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public TaskContainer getOwner() {
|
||||
return this.owner;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ import java.util.Collections;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.ObjectUtils;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.joda.time.Duration;
|
||||
import org.joda.time.LocalDate;
|
||||
|
|
@ -96,7 +95,6 @@ public abstract class Task implements ITaskFundamentalProperties {
|
|||
fundamentalPropertiesListeners.firePropertyChange("beginDate",
|
||||
previousStart, fundamentalProperties.getBeginDate());
|
||||
fireEndDate(previousEnd);
|
||||
reloadResourcesTextIfChange(newStart, previousStart);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -125,6 +123,70 @@ public abstract class Task implements ITaskFundamentalProperties {
|
|||
.getEndConstraints());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doPositionModifications(final IModifications modifications) {
|
||||
fundamentalProperties.doPositionModifications(new IModifications() {
|
||||
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition p) {
|
||||
modifications.doIt(position);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private final IUpdatablePosition position = new IUpdatablePosition() {
|
||||
|
||||
@Override
|
||||
public void setEndDate(GanttDate value) {
|
||||
if (value == null) {
|
||||
return;
|
||||
}
|
||||
GanttDate previousEnd = fundamentalProperties.getEndDate();
|
||||
getFundamentalPropertiesPosition().setEndDate(value);
|
||||
dependenciesEnforcerHook.setNewEnd(previousEnd,
|
||||
fundamentalProperties.getEndDate());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBeginDate(GanttDate newStart) {
|
||||
GanttDate previousValue = fundamentalProperties.getBeginDate();
|
||||
GanttDate previousEnd = fundamentalProperties.getEndDate();
|
||||
getFundamentalPropertiesPosition().setBeginDate(newStart);
|
||||
dependenciesEnforcerHook.setStartDate(previousValue, previousEnd,
|
||||
newStart);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resizeTo(GanttDate newEnd) {
|
||||
GanttDate previousEnd = getEndDate();
|
||||
getFundamentalPropertiesPosition().resizeTo(newEnd);
|
||||
dependenciesEnforcerHook.setNewEnd(previousEnd, newEnd);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveTo(GanttDate date) {
|
||||
GanttDate previousStart = getBeginDate();
|
||||
GanttDate previousEnd = getEndDate();
|
||||
getFundamentalPropertiesPosition().moveTo(date);
|
||||
dependenciesEnforcerHook.setStartDate(previousStart, previousEnd,
|
||||
date);
|
||||
}
|
||||
|
||||
private IUpdatablePosition getFundamentalPropertiesPosition() {
|
||||
final IUpdatablePosition[] result = new IUpdatablePosition[1];
|
||||
fundamentalProperties.doPositionModifications(new IModifications() {
|
||||
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition position) {
|
||||
result[0] = position;
|
||||
}
|
||||
});
|
||||
assert result[0] != null;
|
||||
return result[0];
|
||||
}
|
||||
};
|
||||
|
||||
public abstract boolean isLeaf();
|
||||
|
||||
public abstract boolean isContainer();
|
||||
|
|
@ -196,21 +258,6 @@ public abstract class Task implements ITaskFundamentalProperties {
|
|||
Validate.notNull(dependenciesEnforcerHook);
|
||||
}
|
||||
|
||||
public void setBeginDate(GanttDate newStart) {
|
||||
GanttDate previousValue = fundamentalProperties.getBeginDate();
|
||||
GanttDate previousEnd = fundamentalProperties.getEndDate();
|
||||
fundamentalProperties.setBeginDate(newStart);
|
||||
dependenciesEnforcerHook.setStartDate(previousValue, previousEnd,
|
||||
newStart);
|
||||
}
|
||||
|
||||
private void reloadResourcesTextIfChange(GanttDate newDate,
|
||||
GanttDate previousDate) {
|
||||
if (!ObjectUtils.equals(newDate, previousDate)) {
|
||||
reloadResourcesText();
|
||||
}
|
||||
}
|
||||
|
||||
public void fireChangesForPreviousValues(GanttDate previousStart,
|
||||
GanttDate previousEnd) {
|
||||
dependenciesEnforcerHook.setStartDate(previousStart, previousStart,
|
||||
|
|
@ -292,28 +339,17 @@ public abstract class Task implements ITaskFundamentalProperties {
|
|||
previousValue, this.fundamentalProperties.getNotes());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEndDate(GanttDate value) {
|
||||
if (value == null) {
|
||||
return;
|
||||
}
|
||||
GanttDate previousEnd = fundamentalProperties.getEndDate();
|
||||
fundamentalProperties.setEndDate(value);
|
||||
dependenciesEnforcerHook.setNewEnd(previousEnd,
|
||||
fundamentalProperties.getEndDate());
|
||||
}
|
||||
|
||||
public void resizeTo(LocalDate date) {
|
||||
public void resizeTo(final LocalDate date) {
|
||||
if (date.compareTo(getBeginDateAsLocalDate()) < 0) {
|
||||
return;
|
||||
}
|
||||
resizeTo(GanttDate.createFrom(date));
|
||||
}
|
||||
doPositionModifications(new IModifications() {
|
||||
|
||||
public void resizeTo(GanttDate newEnd) {
|
||||
GanttDate previousEnd = getEndDate();
|
||||
fundamentalProperties.resizeTo(newEnd);
|
||||
dependenciesEnforcerHook.setNewEnd(previousEnd, newEnd);
|
||||
@Override
|
||||
public void doIt(IUpdatablePosition position) {
|
||||
position.resizeTo(GanttDate.createFrom(date));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void removed() {
|
||||
|
|
@ -364,13 +400,6 @@ public abstract class Task implements ITaskFundamentalProperties {
|
|||
return fundamentalProperties.getResourcesText();
|
||||
}
|
||||
|
||||
public void moveTo(GanttDate date) {
|
||||
GanttDate previousStart = getBeginDate();
|
||||
GanttDate previousEnd = getEndDate();
|
||||
fundamentalProperties.moveTo(date);
|
||||
dependenciesEnforcerHook.setStartDate(previousStart, previousEnd, date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getDeadline() {
|
||||
return fundamentalProperties.getDeadline();
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import org.joda.time.Years;
|
|||
public class DetailOneTimeTrackerState extends
|
||||
TimeTrackerStateWithSubintervalsFitting {
|
||||
|
||||
public static final Period MINIMUN_PERIOD = PeriodType.YEARS.amount(4);
|
||||
public static final Period MINIMUN_PERIOD = PeriodType.YEARS.amount(6);
|
||||
|
||||
private static final int FIRST_LEVEL_ITEM_SIZE = 200;
|
||||
private static final int SECOND_LEVEL_ITEM_SIZE = 100;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ import org.zkoss.util.Locales;
|
|||
public class DetailThreeTimeTrackerState extends
|
||||
TimeTrackerStateWithSubintervalsFitting {
|
||||
|
||||
private static final int NUMBER_OF_MONTHS_MINIMUM = 20;
|
||||
private static final int NUMBER_OF_MONTHS_MINIMUM = 30;
|
||||
|
||||
DetailThreeTimeTrackerState(IDetailItemModificator firstLevelModificator,
|
||||
IDetailItemModificator secondLevelModificator) {
|
||||
|
|
@ -125,4 +125,4 @@ public class DetailThreeTimeTrackerState extends
|
|||
return SECOND_LEVEL_SIZE;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* This file is part of LibrePlan
|
||||
*
|
||||
* Copyright (C) 2010-2011 Igalia, S.L.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.zkoss.ganttz.util;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogfernandez@gmail.com>
|
||||
*/
|
||||
public class ReentranceGuard {
|
||||
|
||||
public interface IReentranceCases {
|
||||
public void ifNewEntrance();
|
||||
|
||||
public void ifAlreadyInside();
|
||||
}
|
||||
|
||||
private final ThreadLocal<Boolean> inside = new ThreadLocal<Boolean>() {
|
||||
protected Boolean initialValue() {
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
public void entranceRequested(IReentranceCases reentranceCases) {
|
||||
if (inside.get()) {
|
||||
reentranceCases.ifAlreadyInside();
|
||||
return;
|
||||
}
|
||||
inside.set(true);
|
||||
try {
|
||||
reentranceCases.ifNewEntrance();
|
||||
} finally {
|
||||
inside.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
# Spanish translations for LibrePlan package
|
||||
# Traducciones al español para el paquete LibrePlan.
|
||||
# Spanish translations for LibrePlan - GanttZK module
|
||||
# Traducciones al español para LibrePlan - módulo GanttZK
|
||||
# Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
|
||||
# Desenvolvemento Tecnolóxico de Galicia
|
||||
# Copyright (C) 2010-2011 Igalia, S.L.
|
||||
|
|
@ -10,11 +10,11 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1.1.0\n"
|
||||
"Project-Id-Version: 1.2.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-09 16:17+0200\n"
|
||||
"PO-Revision-Date: 2011-08-09 16:29+0200\n"
|
||||
"Last-Translator: Manuel Rego Casasnovas <mrego@igalia.com>\n"
|
||||
"POT-Creation-Date: 2011-11-10 20:11+0100\n"
|
||||
"PO-Revision-Date: 2011-11-10 20:18+0100\n"
|
||||
"Last-Translator: Manuel Rego Casasnovas <rego@igalia.com>\n"
|
||||
"Language-Team: Spanish <>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -27,7 +27,7 @@ msgstr ""
|
|||
msgid "Erase"
|
||||
msgstr "Borrar"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java:319
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java:299
|
||||
msgid "Add Dependency"
|
||||
msgstr "Añadir dependencia"
|
||||
|
||||
|
|
@ -39,20 +39,20 @@ msgstr "Trabajador"
|
|||
msgid "Start"
|
||||
msgstr "Inicio"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:592
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:629
|
||||
msgid "Show reported hours"
|
||||
msgstr "Mostrar horas reportadas"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:92
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:90
|
||||
msgid "by criteria"
|
||||
msgstr "por criterios"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:72
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:85
|
||||
msgid "Show/Hide reported hours"
|
||||
msgstr "Mostrar/Ocultar horas reportardas"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:35
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:46
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:49
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ msgstr "Zoom"
|
|||
msgid "Limiting resources"
|
||||
msgstr "Recursos limitantes"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:68
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:67
|
||||
msgid "The specified dependency is not allowed"
|
||||
msgstr "La dependencia especificada no está permitida"
|
||||
|
||||
|
|
@ -68,15 +68,15 @@ msgstr "La dependencia especificada no está permitida"
|
|||
msgid "Set End-End"
|
||||
msgstr "Definir Fin-Fin"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:80
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:78
|
||||
msgid "Show/Hide progress"
|
||||
msgstr "Mostrar/Ocultar progreso"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:188
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:199
|
||||
msgid "available effort: {0}, assigned effort: {1}"
|
||||
msgstr "esfuerzo disponible: {0}, esfuerzo asignado: {1}"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:91
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:89
|
||||
msgid "by resources"
|
||||
msgstr "por recursos"
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ msgstr "Tarea"
|
|||
msgid "Criterion"
|
||||
msgstr "Criterio"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:41
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:44
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
|
|
@ -96,7 +96,7 @@ msgstr "Imprimir"
|
|||
msgid "Week"
|
||||
msgstr "Semana"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:489
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:501
|
||||
msgid "filtering by name"
|
||||
msgstr "filtrando por nombre"
|
||||
|
||||
|
|
@ -108,10 +108,6 @@ msgstr "Ver planificación"
|
|||
msgid "End"
|
||||
msgstr "Fin"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:37
|
||||
msgid "Choosing Template"
|
||||
msgstr "Selección de plantilla"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTracker.java:243
|
||||
msgid "changing zoom"
|
||||
msgstr "cambiando zoom"
|
||||
|
|
@ -124,7 +120,7 @@ msgstr "Trimestre"
|
|||
msgid "None"
|
||||
msgstr "Ninguno"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:69
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:71
|
||||
msgid "Flatten/Unflatten tree"
|
||||
msgstr "Aplanar/Expandir árbol"
|
||||
|
||||
|
|
@ -136,7 +132,7 @@ msgstr "Filtro"
|
|||
msgid "Project"
|
||||
msgstr "Proyecto"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:68
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:67
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/leftTasksTree.zul:28
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
|
@ -145,27 +141,23 @@ msgstr "Nombre"
|
|||
msgid "Name filter"
|
||||
msgstr "Filtro por nombres"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:572
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:609
|
||||
msgid "Show progress"
|
||||
msgstr "Mostrar progreso"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:66
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:67
|
||||
msgid "Expand/Collapse all"
|
||||
msgstr "Expandir/Plegar todo"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:56
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:58
|
||||
msgid "Show/Hide critical path"
|
||||
msgstr "Mostrar/Ocultar camino crítico"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:36
|
||||
msgid "Create Project"
|
||||
msgstr "Crear proyecto"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:32
|
||||
msgid "Year"
|
||||
msgstr "Año"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:145
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:150
|
||||
msgid "showing criteria"
|
||||
msgstr "mostrando criterios"
|
||||
|
||||
|
|
@ -173,7 +165,7 @@ msgstr "mostrando criterios"
|
|||
msgid "Month"
|
||||
msgstr "Mes"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:63
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:64
|
||||
msgid "Show/Hide resources"
|
||||
msgstr "Mostrar/Ocultar recursos"
|
||||
|
||||
|
|
@ -181,11 +173,11 @@ msgstr "Mostrar/Ocultar recursos"
|
|||
msgid "Set End-Start"
|
||||
msgstr "Definir Fin-Inicio"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:302
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:298
|
||||
msgid "decreasing zoom"
|
||||
msgstr "reduciendo zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:559
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:590
|
||||
msgid "Hide critical path"
|
||||
msgstr "Ocultar camino crítico"
|
||||
|
||||
|
|
@ -193,19 +185,19 @@ msgstr "Ocultar camino crítico"
|
|||
msgid "Day"
|
||||
msgstr "Día"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:599
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:636
|
||||
msgid "Hide reported hours"
|
||||
msgstr "Ocultar horas reportadas"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:182
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:193
|
||||
msgid "Load: {0}%"
|
||||
msgstr "Carga: {0}%"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:142
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:147
|
||||
msgid "showing resources"
|
||||
msgstr "mostrando recursos"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:60
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:61
|
||||
msgid "Show/Hide labels"
|
||||
msgstr "Mostrar/Ocultar etiquetas"
|
||||
|
||||
|
|
@ -213,8 +205,8 @@ msgstr "Mostrar/Ocultar etiquetas"
|
|||
msgid "Hour"
|
||||
msgstr "Hora"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:91
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:116
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:90
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:114
|
||||
msgid "Graphics"
|
||||
msgstr "Gráficas"
|
||||
|
||||
|
|
@ -222,30 +214,30 @@ msgstr "Gráficas"
|
|||
msgid "Set Start-Start"
|
||||
msgstr "Definir Inicio-Inicio"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:141
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:152
|
||||
msgid "See resource allocation"
|
||||
msgstr "Ver asignación de recursos"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:285
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:281
|
||||
msgid "increasing zoom"
|
||||
msgstr "aumentando zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:455
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:467
|
||||
msgid "Show all elements"
|
||||
msgstr "Mostrar todos los elementos"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:454
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:466
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:39
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:38
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:554
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:585
|
||||
msgid "Show critical path"
|
||||
msgstr "Mostrar camino crítico"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:577
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:614
|
||||
msgid "Hide progress"
|
||||
msgstr "Ocultar progreso"
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
# Galician translations for LibrePlan package
|
||||
# Traducciones al español para el paquete LibrePlan.
|
||||
# Galician translations for LibrePlan - GanttZK module
|
||||
# Traducciones al español para LibrePlan - módulo GanttZK
|
||||
# Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
|
||||
# Desenvolvemento Tecnolóxico de Galicia
|
||||
# Copyright (C) 2010-2011 Igalia, S.L.
|
||||
# This file is distributed under the same license as the LibrePlan package.
|
||||
# Igalia <dpino@igalia.com>, 2009.
|
||||
# Jacobo Aragunde Pérez <jaragunde@igalia.com>, 2010.
|
||||
# Manuel Rego Casasnovas <mrego@igalia.com>, 2010, 2011.
|
||||
# Manuel Rego Casasnovas <rego@igalia.com>, 2010, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1.1.0\n"
|
||||
"Project-Id-Version: 1.2.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-09 16:17+0200\n"
|
||||
"PO-Revision-Date: 2011-08-09 16:30+0200\n"
|
||||
"Last-Translator: Manuel Rego Casasnovas <mrego@igalia.com>\n"
|
||||
"POT-Creation-Date: 2011-11-10 20:11+0100\n"
|
||||
"PO-Revision-Date: 2011-11-10 20:20+0100\n"
|
||||
"Last-Translator: Manuel Rego Casasnovas <rego@igalia.com>\n"
|
||||
"Language-Team: Galician <>\n"
|
||||
"Language: gl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -27,7 +27,7 @@ msgstr ""
|
|||
msgid "Erase"
|
||||
msgstr "Borrar"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java:319
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java:299
|
||||
msgid "Add Dependency"
|
||||
msgstr "Engadir dependencia"
|
||||
|
||||
|
|
@ -39,20 +39,20 @@ msgstr "Traballador"
|
|||
msgid "Start"
|
||||
msgstr "Inicio"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:592
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:629
|
||||
msgid "Show reported hours"
|
||||
msgstr "Mostrar horas reportadas"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:92
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:90
|
||||
msgid "by criteria"
|
||||
msgstr "por criterios"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:72
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:85
|
||||
msgid "Show/Hide reported hours"
|
||||
msgstr "Mostrar/Ocultar horas reportadas"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:35
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:46
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:49
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ msgstr "Zoom"
|
|||
msgid "Limiting resources"
|
||||
msgstr "Recursos limitantes"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:68
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:67
|
||||
msgid "The specified dependency is not allowed"
|
||||
msgstr "A dependencia especificada non está permitida"
|
||||
|
||||
|
|
@ -68,15 +68,15 @@ msgstr "A dependencia especificada non está permitida"
|
|||
msgid "Set End-End"
|
||||
msgstr "Definir Fin-Fin"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:80
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:78
|
||||
msgid "Show/Hide progress"
|
||||
msgstr "Mostrar/Ocultar progreso"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:188
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:199
|
||||
msgid "available effort: {0}, assigned effort: {1}"
|
||||
msgstr "esforzo dispoñible: {0}, esforzo asignado: {1}"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:91
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:89
|
||||
msgid "by resources"
|
||||
msgstr "por recursos"
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ msgstr "Tarefa"
|
|||
msgid "Criterion"
|
||||
msgstr "Criterio"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:41
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:44
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
|
|
@ -96,7 +96,7 @@ msgstr "Imprimir"
|
|||
msgid "Week"
|
||||
msgstr "Semana"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:489
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:501
|
||||
msgid "filtering by name"
|
||||
msgstr "filtrando por nome"
|
||||
|
||||
|
|
@ -108,10 +108,6 @@ msgstr "Ver planificación"
|
|||
msgid "End"
|
||||
msgstr "Fin"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:37
|
||||
msgid "Choosing Template"
|
||||
msgstr "Selección de modelo"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTracker.java:243
|
||||
msgid "changing zoom"
|
||||
msgstr "cambiando zoom"
|
||||
|
|
@ -124,7 +120,7 @@ msgstr "Trimestre"
|
|||
msgid "None"
|
||||
msgstr "Ningún"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:69
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:71
|
||||
msgid "Flatten/Unflatten tree"
|
||||
msgstr "Aplanar/Expandir árbore"
|
||||
|
||||
|
|
@ -136,7 +132,7 @@ msgstr "Filtro"
|
|||
msgid "Project"
|
||||
msgstr "Proxecto"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:68
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:67
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/leftTasksTree.zul:28
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
|
@ -145,27 +141,23 @@ msgstr "Nome"
|
|||
msgid "Name filter"
|
||||
msgstr "Filtro por nomes"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:572
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:609
|
||||
msgid "Show progress"
|
||||
msgstr "Mostrar progreso"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:66
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:67
|
||||
msgid "Expand/Collapse all"
|
||||
msgstr "Expandir/Pregar todo"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:56
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:58
|
||||
msgid "Show/Hide critical path"
|
||||
msgstr "Mostrar/Ocultar camiño crítico"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:36
|
||||
msgid "Create Project"
|
||||
msgstr "Crear proxecto"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:32
|
||||
msgid "Year"
|
||||
msgstr "Ano"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:145
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:150
|
||||
msgid "showing criteria"
|
||||
msgstr "mostrando criterios"
|
||||
|
||||
|
|
@ -173,7 +165,7 @@ msgstr "mostrando criterios"
|
|||
msgid "Month"
|
||||
msgstr "Mes"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:63
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:64
|
||||
msgid "Show/Hide resources"
|
||||
msgstr "Mostrar/Ocultar recursos"
|
||||
|
||||
|
|
@ -181,11 +173,11 @@ msgstr "Mostrar/Ocultar recursos"
|
|||
msgid "Set End-Start"
|
||||
msgstr "Definir Fin-Inicio"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:302
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:298
|
||||
msgid "decreasing zoom"
|
||||
msgstr "reducindo zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:559
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:590
|
||||
msgid "Hide critical path"
|
||||
msgstr "Ocultar camiño crítico"
|
||||
|
||||
|
|
@ -193,19 +185,19 @@ msgstr "Ocultar camiño crítico"
|
|||
msgid "Day"
|
||||
msgstr "Día"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:599
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:636
|
||||
msgid "Hide reported hours"
|
||||
msgstr "Ocultar horas reportadas"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:182
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:193
|
||||
msgid "Load: {0}%"
|
||||
msgstr "Carga: {0}%"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:142
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:147
|
||||
msgid "showing resources"
|
||||
msgstr "mostrando recursos"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:60
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:61
|
||||
msgid "Show/Hide labels"
|
||||
msgstr "Mostrar/Ocultar etiquetas"
|
||||
|
||||
|
|
@ -213,8 +205,8 @@ msgstr "Mostrar/Ocultar etiquetas"
|
|||
msgid "Hour"
|
||||
msgstr "Hora"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:91
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:116
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:90
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:114
|
||||
msgid "Graphics"
|
||||
msgstr "Gráficas"
|
||||
|
||||
|
|
@ -222,30 +214,30 @@ msgstr "Gráficas"
|
|||
msgid "Set Start-Start"
|
||||
msgstr "Definir Inicio-Inicio"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:141
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:152
|
||||
msgid "See resource allocation"
|
||||
msgstr "Ver asignación de recursoss"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:285
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:281
|
||||
msgid "increasing zoom"
|
||||
msgstr "aumentando zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:455
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:467
|
||||
msgid "Show all elements"
|
||||
msgstr "Mostrar tódolos elementos"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:454
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:466
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:39
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:38
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:554
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:585
|
||||
msgid "Show critical path"
|
||||
msgstr "Mostrar camiño crítico"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:577
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:614
|
||||
msgid "Hide progress"
|
||||
msgstr "Ocultar progreso"
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@
|
|||
# This file is distributed under the same license as the LibrePlan package.
|
||||
# Diego Pino García <dpino@igalia.com>, 2009.
|
||||
# Jacobo Aragunde Pérez <jaragunde@igalia.com>, 2009, 2010.
|
||||
# Manuel Rego Casasnovas <mrego@igalia.com>, 2010, 2011.
|
||||
# Manuel Rego Casasnovas <rego@igalia.com>, 2010, 2011.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1.1.3\n"
|
||||
"Project-Id-Version: 1.2.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-09 16:17+0200\n"
|
||||
"POT-Creation-Date: 2011-11-10 20:11+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -26,7 +26,7 @@ msgstr ""
|
|||
msgid "Erase"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java:319
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java:299
|
||||
msgid "Add Dependency"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -38,20 +38,20 @@ msgstr ""
|
|||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:592
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:629
|
||||
msgid "Show reported hours"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:92
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:90
|
||||
msgid "by criteria"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:72
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:85
|
||||
msgid "Show/Hide reported hours"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:35
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:46
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:49
|
||||
msgid "Zoom"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ msgstr ""
|
|||
msgid "Limiting resources"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:68
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:67
|
||||
msgid "The specified dependency is not allowed"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -67,15 +67,15 @@ msgstr ""
|
|||
msgid "Set End-End"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:80
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:78
|
||||
msgid "Show/Hide progress"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:188
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:199
|
||||
msgid "available effort: {0}, assigned effort: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:91
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:89
|
||||
msgid "by resources"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ msgstr ""
|
|||
msgid "Criterion"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:41
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:44
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ msgstr ""
|
|||
msgid "Week"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:489
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:501
|
||||
msgid "filtering by name"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -107,10 +107,6 @@ msgstr ""
|
|||
msgid "End"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:37
|
||||
msgid "Choosing Template"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTracker.java:243
|
||||
msgid "changing zoom"
|
||||
msgstr ""
|
||||
|
|
@ -123,7 +119,7 @@ msgstr ""
|
|||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:69
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:71
|
||||
msgid "Flatten/Unflatten tree"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -135,7 +131,7 @@ msgstr ""
|
|||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:68
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:67
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/leftTasksTree.zul:28
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
|
@ -144,27 +140,23 @@ msgstr ""
|
|||
msgid "Name filter"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:572
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:609
|
||||
msgid "Show progress"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:66
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:67
|
||||
msgid "Expand/Collapse all"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:56
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:58
|
||||
msgid "Show/Hide critical path"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:36
|
||||
msgid "Create Project"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:32
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:145
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:150
|
||||
msgid "showing criteria"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -172,7 +164,7 @@ msgstr ""
|
|||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:63
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:64
|
||||
msgid "Show/Hide resources"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -180,11 +172,11 @@ msgstr ""
|
|||
msgid "Set End-Start"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:302
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:298
|
||||
msgid "decreasing zoom"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:559
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:590
|
||||
msgid "Hide critical path"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -192,19 +184,19 @@ msgstr ""
|
|||
msgid "Day"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:599
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:636
|
||||
msgid "Hide reported hours"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:182
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:193
|
||||
msgid "Load: {0}%"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:142
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:147
|
||||
msgid "showing resources"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:60
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:61
|
||||
msgid "Show/Hide labels"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -212,8 +204,8 @@ msgstr ""
|
|||
msgid "Hour"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:91
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:116
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:90
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:114
|
||||
msgid "Graphics"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -221,30 +213,30 @@ msgstr ""
|
|||
msgid "Set Start-Start"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:141
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:152
|
||||
msgid "See resource allocation"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:285
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:281
|
||||
msgid "increasing zoom"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:455
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:467
|
||||
msgid "Show all elements"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:454
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:466
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:39
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:38
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:554
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:585
|
||||
msgid "Show critical path"
|
||||
msgstr ""
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:577
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:614
|
||||
msgid "Hide progress"
|
||||
msgstr ""
|
||||
|
|
|
|||
246
ganttzk/src/main/resources/i18n/pt.po
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
# Portuguese translations for LibrePlan - GanttZK module
|
||||
# Copyright (C) 2011 Helena Grosso <lenagrosso@gmail.com>
|
||||
# This file is distributed under the same license as the NavalPlan package.
|
||||
# Helena Grosso <lenagrosso@gmail.com>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1.1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-09 16:17+0200\n"
|
||||
"PO-Revision-Date: 2011-11-14 10:53+0100\n"
|
||||
"Last-Translator: Helena Grosso <lenagrosso@gmail.com>\n"
|
||||
"Language-Team: Português <>\n"
|
||||
"Language: pt\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:215
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:234
|
||||
msgid "Erase"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java:319
|
||||
msgid "Add Dependency"
|
||||
msgstr "Adicionar Dependência"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/TimeLineRole.java:58
|
||||
msgid "Worker"
|
||||
msgstr "Trabalhador"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/leftTasksTree.zul:29
|
||||
msgid "Start"
|
||||
msgstr "Início"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:592
|
||||
msgid "Show reported hours"
|
||||
msgstr "Mostrar horas registadas"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:92
|
||||
msgid "by criteria"
|
||||
msgstr "por critérios"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:72
|
||||
msgid "Show/Hide reported hours"
|
||||
msgstr "Mostrar/Ocultar horas registadas"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:35
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:46
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java:121
|
||||
msgid "Limiting resources"
|
||||
msgstr "Recursos restringentes"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:68
|
||||
msgid "The specified dependency is not allowed"
|
||||
msgstr "A dependência especificada não está permitida"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:254
|
||||
msgid "Set End-End"
|
||||
msgstr "Definir Fim-Fim"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:80
|
||||
msgid "Show/Hide progress"
|
||||
msgstr "Mostrar/Ocultar progresso"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:188
|
||||
msgid "available effort: {0}, assigned effort: {1}"
|
||||
msgstr "esforço disponível: {0}, esforço atribuído: {1}"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:91
|
||||
msgid "by resources"
|
||||
msgstr "por recursos"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/TimeLineRole.java:58
|
||||
msgid "Task"
|
||||
msgstr "Tarefa"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/TimeLineRole.java:64
|
||||
msgid "Criterion"
|
||||
msgstr "Critério"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:41
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:71
|
||||
msgid "Week"
|
||||
msgstr "Semana"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:489
|
||||
msgid "filtering by name"
|
||||
msgstr "a filtrar por nome"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadLeftPane.java:111
|
||||
msgid "See scheduling"
|
||||
msgstr "Ver planificação"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/leftTasksTree.zul:30
|
||||
msgid "End"
|
||||
msgstr "Fim"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:37
|
||||
msgid "Choosing Template"
|
||||
msgstr "Seleção de modelo"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTracker.java:243
|
||||
msgid "changing zoom"
|
||||
msgstr "a alterar o zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:45
|
||||
msgid "Quarter"
|
||||
msgstr "Trimestre"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/TimeLineRole.java:58
|
||||
msgid "None"
|
||||
msgstr "Nenhum"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:69
|
||||
msgid "Flatten/Unflatten tree"
|
||||
msgstr "Nivelar/Expandir árvore"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:43
|
||||
msgid "Filter"
|
||||
msgstr "Filtro"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/TimeLineRole.java:58
|
||||
msgid "Project"
|
||||
msgstr "Projeto"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:68
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/leftTasksTree.zul:28
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:50
|
||||
msgid "Name filter"
|
||||
msgstr "Filtro de nomes"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:572
|
||||
msgid "Show progress"
|
||||
msgstr "Mostrar progresso"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:66
|
||||
msgid "Expand/Collapse all"
|
||||
msgstr "Expandir/Colapsar tudo"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:56
|
||||
msgid "Show/Hide critical path"
|
||||
msgstr "Mostrar/Ocultar caminho crítico"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:36
|
||||
msgid "Create Project"
|
||||
msgstr "Criar projeto"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:32
|
||||
msgid "Year"
|
||||
msgstr "Ano"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:145
|
||||
msgid "showing criteria"
|
||||
msgstr "a mostrar critérios"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:58
|
||||
msgid "Month"
|
||||
msgstr "Mês"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:63
|
||||
msgid "Show/Hide resources"
|
||||
msgstr "Mostrar/Ocultar recursos"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:246
|
||||
msgid "Set End-Start"
|
||||
msgstr "Definir Fim-Início"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:302
|
||||
msgid "decreasing zoom"
|
||||
msgstr "a reduzir o zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:559
|
||||
msgid "Hide critical path"
|
||||
msgstr "Ocultar caminho crítico"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:84
|
||||
msgid "Day"
|
||||
msgstr "Dia"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:599
|
||||
msgid "Hide reported hours"
|
||||
msgstr "Ocultar horas registadas"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:182
|
||||
msgid "Load: {0}%"
|
||||
msgstr "Carregamento: {0}%"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:142
|
||||
msgid "showing resources"
|
||||
msgstr "a mostrar recursos"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:60
|
||||
msgid "Show/Hide labels"
|
||||
msgstr "Mostrar/Ocultar etiquetas"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/ZoomLevel.java:97
|
||||
msgid "Hour"
|
||||
msgstr "Hora"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul:91
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:116
|
||||
msgid "Graphics"
|
||||
msgstr "Gráficos"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java:250
|
||||
msgid "Set Start-Start"
|
||||
msgstr "Definir Início-Início"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java:141
|
||||
msgid "See resource allocation"
|
||||
msgstr "Ver atribuição de recursoss"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:285
|
||||
msgid "increasing zoom"
|
||||
msgstr "a aumentar o zoom"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:455
|
||||
msgid "Show all elements"
|
||||
msgstr "Mostrar todos os elementos"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java:454
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul:39
|
||||
msgid "Refresh"
|
||||
msgstr "Atualizar"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:554
|
||||
msgid "Show critical path"
|
||||
msgstr "Mostrar caminho crítico"
|
||||
|
||||
#: ganttzk/src/main/java/org/zkoss/ganttz/Planner.java:577
|
||||
msgid "Hide progress"
|
||||
msgstr "Ocultar progresso"
|
||||
|
|
@ -24,14 +24,12 @@
|
|||
]]>
|
||||
</zscript>
|
||||
<treecell>
|
||||
<textbox ctrlKeys="#down#up#right#left" class="task_title"/>
|
||||
<textbox ctrlKeys="#down#up" hflex="1" sclass="task-name" />
|
||||
</treecell>
|
||||
<treecell>
|
||||
<textbox value="" ctrlKeys="#down#up#right#left" />
|
||||
<datebox compact="true" visible="${false}"/>
|
||||
<textbox value="" ctrlKeys="#down#up" />
|
||||
</treecell>
|
||||
<treecell>
|
||||
<textbox ctrlKeys="#down#up#right#left" />
|
||||
<datebox compact="true" visible ="${false}"/>
|
||||
<textbox value="" ctrlKeys="#down#up" />
|
||||
</treecell>
|
||||
</treerow>
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ planner = self;
|
|||
|
||||
<separator/>
|
||||
<!-- Commands -->
|
||||
<templateFinderPopup id="templateFinderPopup" acceptButtonLabel="${ganttzk_i18n:_('Create Project')}" caption="${i18n:_('Choosing Template')}" />
|
||||
|
||||
<button onClick="planner.invalidate()"
|
||||
image="/common/img/ico_refresh.png"
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ resourcesLoadPanel = self;
|
|||
<separator/>
|
||||
<hbox id="additionalFilterInsertionPoint1" />
|
||||
<separator/>
|
||||
${ganttzk_i18n:_('Filter')}:
|
||||
${ganttzk_i18n:_('Show')}:
|
||||
<listbox id="listFilters" mold="select" rows="1" width="100px"
|
||||
model="${resourcesLoadPanel.filters}"
|
||||
selectedIndex="0"
|
||||
|
|
@ -58,11 +58,11 @@ resourcesLoadPanel = self;
|
|||
<center border="0">
|
||||
<borderlayout sclass="resourcesload">
|
||||
<west size="250px" flex="true" collapsible="true"
|
||||
splittable="true" autoscroll="false">
|
||||
<borderlayout >
|
||||
splittable="true" autoscroll="false" border="0">
|
||||
<borderlayout>
|
||||
<north border="0" height="35px" flex="true" collapsible="true">
|
||||
<vbox pack="top" align="center">
|
||||
<tree fixedLayout="true" hflex="true">
|
||||
<tree fixedLayout="true" hflex="true" sclass="resourceloaddetailsContainer">
|
||||
<treecols>
|
||||
<treecol label="${ganttzk_i18n:_('Name')}" height="29px"/>
|
||||
</treecols>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,13 @@ ganttz.TaskComponent = zk.$extends(zul.Widget, {
|
|||
$define :{
|
||||
resourcesText : null,
|
||||
labelsText : null,
|
||||
tooltipText : null
|
||||
tooltipText : null,
|
||||
left: function() {
|
||||
this.$supers('setLeft', arguments);
|
||||
this._getRelatedDependencies().forEach(function(dependency) {
|
||||
dependency.draw();
|
||||
});
|
||||
}
|
||||
},
|
||||
$init : function(){
|
||||
this.$supers('$init', arguments);
|
||||
|
|
@ -114,6 +120,14 @@ ganttz.TaskComponent = zk.$extends(zul.Widget, {
|
|||
consolidateNewDependency : function(task){
|
||||
zAu.send(new zk.Event(this, 'onAddDependency', {dependencyId : task.id}));
|
||||
},
|
||||
_getRelatedDependencies: function() {
|
||||
return jq('.dependency[idtaskorig='+ this.uuid + ']')
|
||||
.add('.dependency[idtaskend='+ this.uuid + ']')
|
||||
.get()
|
||||
.map(function(dep) {
|
||||
return ganttz.DependencyComponentBase.$(dep);
|
||||
});
|
||||
},
|
||||
_addDragDrop : function(){
|
||||
var dragdropregion = this._getDragDropRegion();
|
||||
var thisTaskId = this.$n().id;
|
||||
|
|
@ -177,7 +191,7 @@ ganttz.TaskComponent = zk.$extends(zul.Widget, {
|
|||
this.mouseOverTask = true;
|
||||
this._tooltipTimeout = setTimeout(jq.proxy(function(offset) {
|
||||
var element = jq("#tasktooltip" + this.uuid);
|
||||
if (element!=null) {
|
||||
if (element.length > 0) {
|
||||
element.show();
|
||||
offset = ganttz.GanttPanel.getInstance().getXMouse()
|
||||
- element.parent().offset().left
|
||||
|
|
@ -202,10 +216,10 @@ ganttz.TaskComponent = zk.$extends(zul.Widget, {
|
|||
jq('#consolidatedline' + this.parent.uuid).css('left', width);
|
||||
},
|
||||
resizeCompletionAdvance : function(width){
|
||||
jq('#' + this.uuid + ' > .completion:first').css('width', width);
|
||||
jq('#' + this.uuid + ' .completion:first').css('width', width);
|
||||
},
|
||||
resizeCompletion2Advance : function(width){
|
||||
jq('#' + this.uuid + ' > .completion2:first').css('width', width);
|
||||
jq('#' + this.uuid + ' .completion2:first').css('width', width);
|
||||
},
|
||||
showResourceTooltip : function(){
|
||||
jq('#'+ this.uuid + ' .task-resources').show();
|
||||
|
|
@ -213,6 +227,12 @@ ganttz.TaskComponent = zk.$extends(zul.Widget, {
|
|||
hideResourceTooltip : function(){
|
||||
jq('#'+ this.uuid + ' .task-resources').hide();
|
||||
},
|
||||
showLabels : function(){
|
||||
jq('.task-labels',this.$n()).show();
|
||||
},
|
||||
hideLabels : function(){
|
||||
jq('.task-labels',this.$n()).hide();
|
||||
},
|
||||
setClass : function(cssClass){
|
||||
jq(this.$n()).addClass(cssClass);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ ganttz.TaskList = zk.$extends(zk.Widget, {
|
|||
this.$class.setInstance(this);
|
||||
},
|
||||
showAllTaskLabels : function(){
|
||||
jq('.task-labels').css('display','inline');
|
||||
for(var child = this.firstChild; child; child = child.nextSibling)
|
||||
child.showLabels();
|
||||
},
|
||||
hideAllTaskLabels : function(){
|
||||
jq('.task-labels').css('display','none');
|
||||
|
|
|
|||
|
|
@ -1,10 +1,22 @@
|
|||
zk.$package("ganttz");
|
||||
|
||||
ganttz.TaskRow = zk.$extends(zk.Widget, {
|
||||
_labelsHidden : true,
|
||||
showLabels : function(){
|
||||
this._labelsHidden = false;
|
||||
this.firstChild.showLabels();
|
||||
},
|
||||
hideLabels : function(){
|
||||
this._labelsHidden = true;
|
||||
this.firstChild.hideLabels();
|
||||
},
|
||||
_resourcesHidden : true,
|
||||
hideResourceTooltip : function(){
|
||||
this._resourcesHidden = true;
|
||||
this.firstChild.hideResourceTooltip();
|
||||
},
|
||||
showResourceTooltip : function(){
|
||||
this._resourcesHidden = false;
|
||||
this.firstChild.showResourceTooltip();
|
||||
}
|
||||
});
|
||||
|
|
@ -3,8 +3,11 @@ function(out){
|
|||
' z.type="ganttz.task.Task" idTask="', this.id,'"',
|
||||
' class="box" >');
|
||||
|
||||
out.push('<div class="task-labels">', this.getLabelsText(),'</div>');
|
||||
out.push('<div class="task-resources">');
|
||||
out.push('<div class="task-labels" ',
|
||||
this.parent._labelsHidden?'>':'style="display:block;">',
|
||||
this.getLabelsText(),'</div>');
|
||||
out.push('<div class="task-resources" ',
|
||||
this.parent._resourcesHidden?'>':'style="display:block;">');
|
||||
out.push('<div class="task-resources-inner">', this.getResourcesText(),'</div>');
|
||||
out.push('</div>');
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>org.libreplan</groupId>
|
||||
<artifactId>libreplan</artifactId>
|
||||
<version>1.1.3</version>
|
||||
<version>1.2.0</version>
|
||||
</parent>
|
||||
<artifactId>libreplan-business</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ public class AdvanceMeasurement extends BaseEntity {
|
|||
|
||||
@NotNull(message = "value not specified")
|
||||
public BigDecimal getValue() {
|
||||
return value != null ? value : BigDecimal.ZERO;
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setAdvanceAssignment(AdvanceAssignment advanceAssignment) {
|
||||
|
|
|
|||
|
|
@ -144,12 +144,6 @@ public class DirectAdvanceAssignment extends AdvanceAssignment {
|
|||
RoundingMode.DOWN);
|
||||
}
|
||||
|
||||
public void addAdvanceMeasurements(Set<AdvanceMeasurement> measurements) {
|
||||
for (AdvanceMeasurement each: measurements) {
|
||||
addAdvanceMeasurements(each);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addAdvanceMeasurements(AdvanceMeasurement advanceMeasurement) {
|
||||
boolean result = this.advanceMeasurements.add(advanceMeasurement);
|
||||
if (result) {
|
||||
|
|
@ -265,4 +259,8 @@ public class DirectAdvanceAssignment extends AdvanceAssignment {
|
|||
return copy;
|
||||
}
|
||||
|
||||
public boolean hasAnyConsolidationValue() {
|
||||
return !nonCalculatedConsolidations.isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -81,4 +81,8 @@ public class IndirectAdvanceAssignment extends AdvanceAssignment {
|
|||
return calculatedConsolidations;
|
||||
}
|
||||
|
||||
public boolean hasAnyConsolidationValue() {
|
||||
return !calculatedConsolidations.isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,12 +22,12 @@
|
|||
package org.libreplan.business.calendars.daos;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.hibernate.Criteria;
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
import org.libreplan.business.calendars.entities.BaseCalendar;
|
||||
import org.libreplan.business.calendars.entities.CalendarData;
|
||||
|
|
@ -60,6 +60,7 @@ public class BaseCalendarDAO extends IntegrationEntityDAO<BaseCalendar>
|
|||
public List<BaseCalendar> getBaseCalendars() {
|
||||
List<BaseCalendar> list = list(BaseCalendar.class);
|
||||
removeResourceCalendarInstances(list);
|
||||
Collections.sort(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ package org.libreplan.business.calendars.entities;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
|
@ -58,7 +57,7 @@ import org.libreplan.business.workingday.ResourcesPerDay;
|
|||
* @author Manuel Rego Casasnovas <mrego@igalia.com>
|
||||
*/
|
||||
public class BaseCalendar extends IntegrationEntity implements ICalendar,
|
||||
IHumanIdentifiable {
|
||||
IHumanIdentifiable, Comparable<BaseCalendar> {
|
||||
|
||||
private static final Capacity DEFAULT_VALUE = Capacity.zero()
|
||||
.overAssignableWithoutLimit();
|
||||
|
|
@ -83,23 +82,6 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar,
|
|||
return calendar;
|
||||
}
|
||||
|
||||
public static List<BaseCalendar> sortByName(List<BaseCalendar> baseCalendars) {
|
||||
Collections.sort(baseCalendars, new Comparator<BaseCalendar>() {
|
||||
|
||||
@Override
|
||||
public int compare(BaseCalendar o1, BaseCalendar o2) {
|
||||
if (o2.getName() == null) {
|
||||
return -1;
|
||||
}
|
||||
if (o1.getName() == null) {
|
||||
return 1;
|
||||
}
|
||||
return o1.getName().compareTo(o2.getName());
|
||||
}
|
||||
});
|
||||
return baseCalendars;
|
||||
}
|
||||
|
||||
private static void resetDefaultCapacities(BaseCalendar calendar) {
|
||||
CalendarData calendarData = calendar.getLastCalendarData();
|
||||
if (calendarData != null) {
|
||||
|
|
@ -1227,4 +1209,9 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar,
|
|||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(BaseCalendar calendar) {
|
||||
return this.getName().compareToIgnoreCase(calendar.getName());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,11 +47,11 @@ public class CalendarBootstrap implements ICalendarBootstrap {
|
|||
@Override
|
||||
@Transactional
|
||||
public void loadRequiredData() {
|
||||
for (PredefinedCalendarExceptionTypes type : PredefinedCalendarExceptionTypes
|
||||
.values()) {
|
||||
if (calendarExceptionTypeDAO.getAll().size() == 0) {
|
||||
for (PredefinedCalendarExceptionTypes type : PredefinedCalendarExceptionTypes
|
||||
.values()) {
|
||||
CalendarExceptionType calendarExceptionType = type
|
||||
.getCalendarExceptionType();
|
||||
if (!calendarExceptionTypeDAO.existsByName(calendarExceptionType)) {
|
||||
.getCalendarExceptionType();
|
||||
calendarExceptionType
|
||||
.setCode(entitySequenceDAO
|
||||
.getNextEntityCodeWithoutTransaction(EntityNameEnum.CALENDAR_EXCEPTION_TYPE));
|
||||
|
|
|
|||
|
|
@ -29,12 +29,11 @@ package org.libreplan.business.calendars.entities;
|
|||
*/
|
||||
public enum PredefinedCalendarExceptionTypes {
|
||||
|
||||
HOLIDAY("HOLIDAY", CalendarExceptionTypeColor.DEFAULT, true),
|
||||
SICK_LEAVE("SICK_LEAVE", CalendarExceptionTypeColor.DEFAULT, true),
|
||||
LEAVE("LEAVE", CalendarExceptionTypeColor.DEFAULT, true),
|
||||
STRIKE("STRIKE", CalendarExceptionTypeColor.DEFAULT, true),
|
||||
RESOURCE_HOLIDAY("RESOURCE_HOLIDAY", CalendarExceptionTypeColor.YELLOW, true),
|
||||
LEAVE("LEAVE", CalendarExceptionTypeColor.MAGENTA, true),
|
||||
STRIKE("STRIKE", CalendarExceptionTypeColor.PURPLE, true),
|
||||
BANK_HOLIDAY("BANK_HOLIDAY", CalendarExceptionTypeColor.DEFAULT, true),
|
||||
WORKABLE_BANK_HOLIDAY("WORKABLE_BANK_HOLIDAY", CalendarExceptionTypeColor.DEFAULT, false);
|
||||
HALF_DAY_HOLIDAY("HALF_DAY_HOLIDAY", CalendarExceptionTypeColor.ORANGE, false);
|
||||
|
||||
private CalendarExceptionType calendarExceptionType;
|
||||
|
||||
|
|
|
|||
|
|
@ -291,7 +291,8 @@ public class Configuration extends BaseEntity {
|
|||
}
|
||||
|
||||
public ProgressType getProgressType() {
|
||||
return progressType;
|
||||
return (progressType == null) ? ProgressType.SPREAD_PROGRESS
|
||||
: progressType;
|
||||
}
|
||||
|
||||
public void setCompanyLogoURL(String companyLogoURL) {
|
||||
|
|
|
|||
|
|
@ -71,6 +71,10 @@ public class LDAPConfiguration extends BaseEntity {
|
|||
// LDAP roles will be used or not
|
||||
private Boolean ldapSaveRolesDB = false;
|
||||
|
||||
// LDAP strategy if true means group strategy if false means property
|
||||
// strategy
|
||||
private Boolean ldapGroupStrategy = true;
|
||||
|
||||
/**
|
||||
* A list which stores the matching between LDAP roles and LibrePlan roles.
|
||||
* {@link ConfigurationRolesLDAP} is a component.
|
||||
|
|
@ -244,4 +248,12 @@ public class LDAPConfiguration extends BaseEntity {
|
|||
public void setLdapSearchQuery(String ldapSearchQuery) {
|
||||
this.ldapSearchQuery = ldapSearchQuery;
|
||||
}
|
||||
|
||||
public Boolean getLdapGroupStrategy() {
|
||||
return ldapGroupStrategy;
|
||||
}
|
||||
|
||||
public void setLdapGroupStrategy(Boolean ldapGroupStrategy) {
|
||||
this.ldapGroupStrategy = ldapGroupStrategy;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ public interface ITypeOfWorkHoursDAO extends
|
|||
|
||||
boolean existsByCode(TypeOfWorkHours typeOfWorkHours);
|
||||
|
||||
boolean existsByName(TypeOfWorkHours typeOfWorkHours);
|
||||
|
||||
boolean existsTypeWithCodeInAnotherTransaction(String code);
|
||||
|
||||
List<TypeOfWorkHours> findActive();
|
||||
|
|
|
|||
|
|
@ -167,4 +167,11 @@ public class TypeOfWorkHoursDAO extends IntegrationEntityDAO<TypeOfWorkHours>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsByName(TypeOfWorkHours typeOfWorkHours) {
|
||||
Criteria c = getSession().createCriteria(TypeOfWorkHours.class).add(
|
||||
Restrictions.eq("name", typeOfWorkHours.getName()));
|
||||
return c.uniqueResult() != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* This file is part of LibrePlan
|
||||
*
|
||||
* Copyright (C) 2011 CafédeRed Solutions, S.L.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.libreplan.business.costcategories.entities;
|
||||
|
||||
import org.libreplan.business.IDataBootstrap;
|
||||
|
||||
/**
|
||||
* Interface for {@link TypeOfWorkHoursBootstrap}.
|
||||
*
|
||||
* @author Ignacio Díaz Teijido <ignacio.diaz@cafedered.com>
|
||||
*/
|
||||
public interface ITypeOfWorkHoursBootstrap extends IDataBootstrap {
|
||||
|
||||
void loadRequiredData();
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* This file is part of LibrePlan
|
||||
*
|
||||
* Copyright (C) 2011 CafédeRed Solutions, S.L.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.libreplan.business.costcategories.entities;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* Defines the default {@link TypeOfWorkHours}.
|
||||
*
|
||||
* @author Ignacio Díaz Teijido <ignacio.diaz@cafedered.com>
|
||||
*/
|
||||
public enum PredefinedTypeOfWorkHours {
|
||||
|
||||
DEFAULT("Default", 30), OVERTIME("Overtime", 50);
|
||||
|
||||
private TypeOfWorkHours typeOfWorkHours;
|
||||
|
||||
|
||||
private PredefinedTypeOfWorkHours(String name, double price) {
|
||||
typeOfWorkHours = TypeOfWorkHours.create();
|
||||
typeOfWorkHours.setName(name);
|
||||
typeOfWorkHours.setDefaultPrice(new BigDecimal(price).setScale(2));
|
||||
}
|
||||
|
||||
public TypeOfWorkHours getTypeOfWorkHours() {
|
||||
return typeOfWorkHours;
|
||||
}
|
||||
|
||||
public static boolean contains(TypeOfWorkHours typeOfWorkHours) {
|
||||
PredefinedTypeOfWorkHours[] types = PredefinedTypeOfWorkHours.values();
|
||||
for (PredefinedTypeOfWorkHours each : types) {
|
||||
if (each.getTypeOfWorkHours().getName()
|
||||
.equals(typeOfWorkHours.getName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* This file is part of LibrePlan
|
||||
*
|
||||
* Copyright (C) 2011 CafédeRed Solutions, S.L.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.libreplan.business.costcategories.entities;
|
||||
|
||||
import org.libreplan.business.common.daos.IEntitySequenceDAO;
|
||||
import org.libreplan.business.common.entities.EntityNameEnum;
|
||||
import org.libreplan.business.costcategories.daos.ITypeOfWorkHoursDAO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* Creates the default {@link TypeOfWorkHours}.
|
||||
*
|
||||
* @author Ignacio Díaz Teijido <ignacio.diaz@cafedered.com>
|
||||
*/
|
||||
@Component
|
||||
@Scope("singleton")
|
||||
public class TypeOfWorkHoursBootstrap implements ITypeOfWorkHoursBootstrap {
|
||||
|
||||
@Autowired
|
||||
private ITypeOfWorkHoursDAO typeOfWorkHoursDAO;
|
||||
|
||||
@Autowired
|
||||
private IEntitySequenceDAO entitySequenceDAO;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void loadRequiredData() {
|
||||
if (typeOfWorkHoursDAO.findAll().size() == 0) {
|
||||
for (PredefinedTypeOfWorkHours predefinedTypeOfWorkHours : PredefinedTypeOfWorkHours
|
||||
.values()) {
|
||||
TypeOfWorkHours typeOfWorkHours = predefinedTypeOfWorkHours
|
||||
.getTypeOfWorkHours();
|
||||
typeOfWorkHours.setCodeAutogenerated(true);
|
||||
typeOfWorkHours
|
||||
.setCode(entitySequenceDAO
|
||||
.getNextEntityCodeWithoutTransaction(EntityNameEnum.WORK_HOURS_TYPE));
|
||||
typeOfWorkHoursDAO.save(typeOfWorkHours);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -36,7 +36,8 @@ import org.libreplan.business.users.entities.User;
|
|||
*
|
||||
* @author Jacobo Aragunde Perez <jaragunde@igalia.com>
|
||||
*/
|
||||
public class ExternalCompany extends BaseEntity implements IHumanIdentifiable{
|
||||
public class ExternalCompany extends BaseEntity implements IHumanIdentifiable,
|
||||
Comparable<ExternalCompany> {
|
||||
|
||||
private String name;
|
||||
|
||||
|
|
@ -195,4 +196,9 @@ public class ExternalCompany extends BaseEntity implements IHumanIdentifiable{
|
|||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(ExternalCompany company) {
|
||||
return this.getName().compareToIgnoreCase(company.getName());
|
||||
}
|
||||
|
||||
}
|
||||