Merge branch 'master' into project-dashboards
1
AUTHORS
|
|
@ -33,6 +33,7 @@ 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>
|
||||
|
||||
|
||||
|
|
|
|||
|
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 |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
|
@ -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 Alavariñ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.gif
|
||||
:scale: 100
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.6 KiB |
|
|
@ -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 Alavariñ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 |
|
|
@ -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 Alavariñ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 |
|
|
@ -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,10 +24,13 @@ package org.zkoss.ganttz;
|
|||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
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;
|
||||
|
|
@ -47,6 +50,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 +81,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 +121,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 +135,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 +216,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 +231,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 +251,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 +277,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 +311,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 +346,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 +353,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 +372,28 @@ 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 {
|
||||
Date begin = dateFormat.parse(getStartDateTextBox().getValue());
|
||||
task.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 +402,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,6 +476,14 @@ 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();
|
||||
|
|
@ -867,7 +873,12 @@ 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
|
||||
taskList.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
@ -529,11 +532,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 +572,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() {
|
||||
|
|
|
|||
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>
|
||||
|
|
|
|||
|
|
@ -191,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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,4 +292,9 @@ public class MaterialCategory extends IntegrationEntity {
|
|||
return lastMaterialSequenceCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + " :: " + getName();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,7 +210,6 @@ public class TaskSource extends BaseEntity {
|
|||
task.initializeDatesIfNeeded();
|
||||
}
|
||||
if (!hasSomeAllocationDone(task)) {
|
||||
task.setEndDate(null);
|
||||
task.initializeDatesIfNeeded();
|
||||
}
|
||||
task.updateDeadlineFromOrderElement();
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ public abstract class TaskElement extends BaseEntity {
|
|||
taskElement.taskSource = taskSource;
|
||||
taskElement.updateDeadlineFromOrderElement();
|
||||
taskElement.setName(taskElement.getOrderElement().getName());
|
||||
taskElement.updateAdvancePercentageFromOrderElement();
|
||||
Order order = taskElement.getOrderElement().getOrder();
|
||||
if (order.isScheduleBackwards()) {
|
||||
taskElement.setEndDate(order.getDeadline());
|
||||
|
|
@ -640,7 +641,8 @@ public abstract class TaskElement extends BaseEntity {
|
|||
* depending on parameter
|
||||
*/
|
||||
public BigDecimal getAdvancePercentage(ProgressType progressType) {
|
||||
if (progressType.equals(ProgressType.SPREAD_PROGRESS)) {
|
||||
if (progressType != null
|
||||
&& progressType.equals(ProgressType.SPREAD_PROGRESS)) {
|
||||
return advancePercentage;
|
||||
}
|
||||
return BigDecimal.ZERO;
|
||||
|
|
@ -723,4 +725,8 @@ public abstract class TaskElement extends BaseEntity {
|
|||
|
||||
public abstract void resetStatus();
|
||||
|
||||
public void updateAdvancePercentageFromOrderElement() {
|
||||
setAdvancePercentage(getOrderElement().getAdvancePercentage());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ public enum Language {
|
|||
GALICIAN_LANGUAGE(_("Galician"), new Locale("gl")),
|
||||
SPANISH_LANGUAGE(_("Spanish"), new Locale("es")),
|
||||
ENGLISH_LANGUAGE(_("English"), Locale.ENGLISH),
|
||||
RUSSIAN_LANGUAGE(_("Russian"), new Locale("ru"));
|
||||
RUSSIAN_LANGUAGE(_("Russian"), new Locale("ru")),
|
||||
PORTUGUESE_LANGUAGE(_("Portuguese"), new Locale("pt"));
|
||||
|
||||
private final String displayName;
|
||||
|
||||
|
|
|
|||
|
|
@ -286,4 +286,10 @@ public class User extends BaseEntity implements IHumanIdentifiable{
|
|||
return loginName;
|
||||
}
|
||||
|
||||
public String getAuthenticationType() {
|
||||
if (isLibrePlanUser())
|
||||
return "Database";
|
||||
return "LDAP";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -323,4 +323,18 @@
|
|||
newColumnName="libreplan_user" columnDataType="BOOLEAN" />
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="add-new-column-ldap-role-strategy" author="idiazt">
|
||||
<comment>Add new column to store ldap role strategy</comment>
|
||||
<addColumn tableName="configuration">
|
||||
<column name="ldap_group_strategy" type="BOOLEAN" />
|
||||
</addColumn>
|
||||
<addDefaultValue tableName="configuration"
|
||||
columnName="ldap_group_strategy"
|
||||
defaultValueBoolean="TRUE" />
|
||||
<addNotNullConstraint tableName="configuration"
|
||||
columnName="ldap_group_strategy"
|
||||
defaultNullValue="TRUE"
|
||||
columnDataType="BOOLEAN" />
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@
|
|||
<property name="ldapAuthEnabled" column="ldap_auth_enabled" not-null="true"/>
|
||||
<property name="ldapSaveRolesDB" column="ldap_save_roles_db" not-null="true"/>
|
||||
<property name="ldapSearchQuery" column="ldap_search_query"/>
|
||||
<property name="ldapGroupStrategy" column="ldap_group_strategy"/>
|
||||
|
||||
<set name="configurationRolesLdap" table="configuration_roles_ldap" lazy="false">
|
||||
<key column="id_configuration" />
|
||||
|
|
|
|||
|
|
@ -114,6 +114,9 @@
|
|||
<copy todir="src/main/webapp/help/ru" failonerror="false">
|
||||
<fileset dir="../doc/src/user/en/html"/>
|
||||
</copy>
|
||||
<copy todir="src/main/webapp/help/pt" failonerror="false">
|
||||
<fileset dir="../doc/src/user/en/html"/>
|
||||
</copy>
|
||||
</tasks>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ import org.zkoss.zul.Listitem;
|
|||
import org.zkoss.zul.ListitemRenderer;
|
||||
import org.zkoss.zul.Messagebox;
|
||||
import org.zkoss.zul.Radio;
|
||||
import org.zkoss.zul.Radiogroup;
|
||||
import org.zkoss.zul.Row;
|
||||
import org.zkoss.zul.RowRenderer;
|
||||
import org.zkoss.zul.Rows;
|
||||
|
|
@ -112,10 +113,16 @@ public class ConfigurationController extends GenericForwardComposer {
|
|||
|
||||
private Checkbox scenariosVisible;
|
||||
|
||||
private Component ldapRoles;
|
||||
|
||||
private UserRole roles;
|
||||
|
||||
private Textbox ldapGroupPath;
|
||||
|
||||
private Textbox ldapRoleProperty;
|
||||
|
||||
private Textbox ldapSearchQuery;
|
||||
|
||||
private Radiogroup strategy;
|
||||
|
||||
@Override
|
||||
public void doAfterCompose(Component comp) throws Exception {
|
||||
super.doAfterCompose(comp);
|
||||
|
|
@ -141,7 +148,27 @@ public class ConfigurationController extends GenericForwardComposer {
|
|||
scenariosVisible
|
||||
.setTooltiptext(_("Scenarios must be enabled as more elements than master exist"));
|
||||
}
|
||||
showLdapRoles();
|
||||
loadRoleStrategyRows();
|
||||
}
|
||||
|
||||
public void changeRoleStrategy() {
|
||||
this.getLdapConfiguration().setLdapGroupStrategy(
|
||||
strategy.getSelectedItem().getValue().equals("group"));
|
||||
loadRoleStrategyRows();
|
||||
}
|
||||
|
||||
private void loadRoleStrategyRows() {
|
||||
if (getLdapConfiguration().getLdapGroupStrategy()) {
|
||||
strategy.setSelectedIndex(0);
|
||||
ldapGroupPath.setDisabled(false);
|
||||
ldapSearchQuery.setDisabled(true);
|
||||
ldapRoleProperty.setDisabled(true);
|
||||
} else {
|
||||
strategy.setSelectedIndex(1);
|
||||
ldapGroupPath.setDisabled(true);
|
||||
ldapSearchQuery.setDisabled(false);
|
||||
ldapRoleProperty.setDisabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeProgressTypeList() {
|
||||
|
|
@ -765,11 +792,6 @@ public class ConfigurationController extends GenericForwardComposer {
|
|||
configurationModel.setLdapConfiguration(ldapConfiguration);
|
||||
}
|
||||
|
||||
public void showLdapRoles() {
|
||||
ldapRoles.setVisible(configurationModel.getLdapConfiguration()
|
||||
.getLdapSaveRolesDB());
|
||||
}
|
||||
|
||||
public RowRenderer getAllUserRolesRenderer() {
|
||||
return new RowRenderer() {
|
||||
@Override
|
||||
|
|
@ -817,4 +839,12 @@ public class ConfigurationController extends GenericForwardComposer {
|
|||
return configurationModel.isChangedDefaultPasswdAdmin();
|
||||
}
|
||||
|
||||
public boolean isLdapGroupStrategy() {
|
||||
return getLdapConfiguration().getLdapGroupStrategy();
|
||||
}
|
||||
|
||||
public boolean isLdapPropertyStrategy() {
|
||||
return !getLdapConfiguration().getLdapGroupStrategy();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,6 @@ import org.zkoss.zul.Treechildren;
|
|||
import org.zkoss.zul.Treeitem;
|
||||
import org.zkoss.zul.TreeitemRenderer;
|
||||
import org.zkoss.zul.Treerow;
|
||||
import org.zkoss.zul.api.Panel;
|
||||
|
||||
/**
|
||||
* Controller for {@link Material} materials
|
||||
|
|
@ -384,6 +383,7 @@ public class MaterialsController extends
|
|||
}
|
||||
|
||||
private void reloadCategoriesTree(Treeitem treeitem) {
|
||||
Util.reloadBindings(categoriesTree);
|
||||
if (treeitem != null) {
|
||||
final MaterialCategory materialCategory = (MaterialCategory) treeitem.getValue();
|
||||
categoriesTree.invalidate();
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import org.libreplan.business.orders.entities.OrderElement;
|
|||
import org.zkoss.ganttz.util.ComponentsFinder;
|
||||
import org.zkoss.util.Locales;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.HtmlMacroComponent;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||
|
|
@ -36,10 +37,16 @@ import org.zkoss.zul.Datebox;
|
|||
import org.zkoss.zul.Hbox;
|
||||
import org.zkoss.zul.Textbox;
|
||||
|
||||
/**
|
||||
* Textbox component which is transformed into a Datebox picker on demand <br />
|
||||
*
|
||||
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
* @author Lorenzo Tilve Álvaro <ltilve@igalia.com>
|
||||
* @author Manuel Rego Casasnovas <mrego@igalia.com>
|
||||
* @author Jacobo Aragunde Pérez <jaragunde@igalia.com>
|
||||
*/
|
||||
public class DynamicDatebox extends GenericForwardComposer {
|
||||
|
||||
private final OrderElement orderElement;
|
||||
|
||||
final Getter<Date> getter;
|
||||
|
||||
final Setter<Date> setter;
|
||||
|
|
@ -52,29 +59,29 @@ public class DynamicDatebox extends GenericForwardComposer {
|
|||
|
||||
private boolean disabled = false;
|
||||
|
||||
public DynamicDatebox(final OrderElement orderElement, Getter<Date> getter,
|
||||
public DynamicDatebox(Getter<Date> getter,
|
||||
Setter<Date> setter) {
|
||||
this.orderElement = orderElement;
|
||||
this.setter = setter;
|
||||
this.getter = getter;
|
||||
this.dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locales
|
||||
.getCurrent());
|
||||
}
|
||||
|
||||
public OrderElement getOrderElement() {
|
||||
return orderElement;
|
||||
public Datebox createDateBox() {
|
||||
dateBox = new Datebox();
|
||||
dateBox.setFormat("short");
|
||||
dateBox.setValue(getter.get());
|
||||
registerOnEnterOpenDateBox(dateBox);
|
||||
registerBlurListener(dateBox);
|
||||
registerOnChange(dateBox);
|
||||
dateTextBox.getParent().appendChild(dateBox);
|
||||
return dateBox;
|
||||
}
|
||||
|
||||
public Datebox getDateBox() {
|
||||
return dateBox;
|
||||
}
|
||||
|
||||
public void setDateBox(Datebox dateBox) {
|
||||
this.dateBox = dateBox;
|
||||
this.dateBox.setCompact(true);
|
||||
this.dateBox.setFormat("dd/MM/yyyy");
|
||||
}
|
||||
|
||||
/**
|
||||
* When a text box associated to a datebox is requested to show the datebox,
|
||||
* the corresponding datebox is shown
|
||||
|
|
@ -83,15 +90,16 @@ public class DynamicDatebox extends GenericForwardComposer {
|
|||
*/
|
||||
public void userWantsDateBox(Component component) {
|
||||
if (component == dateTextBox) {
|
||||
showDateBox(dateBox, dateTextBox);
|
||||
showDateBox(dateTextBox);
|
||||
}
|
||||
}
|
||||
|
||||
private void showDateBox(Datebox currentDateBox, Textbox associatedTextBox) {
|
||||
private void showDateBox(Textbox associatedTextBox) {
|
||||
associatedTextBox.setVisible(false);
|
||||
currentDateBox.setVisible(true);
|
||||
currentDateBox.setFocus(true);
|
||||
currentDateBox.setOpen(true);
|
||||
getDateBox();
|
||||
createDateBox();
|
||||
dateBox.setFocus(true);
|
||||
dateBox.setOpen(true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -101,19 +109,17 @@ public class DynamicDatebox extends GenericForwardComposer {
|
|||
*/
|
||||
public void dateBoxHasLostFocus(Datebox currentDateBox) {
|
||||
if (currentDateBox == dateBox) {
|
||||
hideDateBox(dateBox, dateTextBox);
|
||||
hideDateBox(dateTextBox);
|
||||
}
|
||||
}
|
||||
|
||||
private void hideDateBox(Datebox dateBoxToDissapear,
|
||||
Textbox associatedTextBox) {
|
||||
dateBoxToDissapear.setVisible(false);
|
||||
private void hideDateBox(Textbox associatedTextBox) {
|
||||
dateBox.detach();
|
||||
associatedTextBox.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
public void doAfterCompose(Component component) throws Exception {
|
||||
super.doAfterCompose(component);
|
||||
findComponents((Hbox) component);
|
||||
registerListeners();
|
||||
updateComponents();
|
||||
|
|
@ -122,22 +128,14 @@ public class DynamicDatebox extends GenericForwardComposer {
|
|||
|
||||
private void registerListeners() {
|
||||
registerOnEnterListener(dateTextBox);
|
||||
registerOnEnterOpenDateBox(dateBox);
|
||||
registerBlurListener(dateBox);
|
||||
registerOnChange(dateBox);
|
||||
}
|
||||
|
||||
private void findComponents(Hbox hbox) {
|
||||
List<Object> children = hbox.getChildren();
|
||||
assert children.size() == 2;
|
||||
assert children.size() == 1;
|
||||
|
||||
dateTextBox = findTextBoxOfCell(children);
|
||||
dateBox = findDateBoxOfCell(children);
|
||||
}
|
||||
|
||||
private static Datebox findDateBoxOfCell(List<Object> children) {
|
||||
return ComponentsFinder.findComponentsOfType(Datebox.class, children)
|
||||
.get(0);
|
||||
// dateBox = findDateBoxOfCell(children);
|
||||
}
|
||||
|
||||
private static Textbox findTextBoxOfCell(List<Object> children) {
|
||||
|
|
@ -206,11 +204,9 @@ public class DynamicDatebox extends GenericForwardComposer {
|
|||
public void updateBean() {
|
||||
Date date = getDateBox().getValue();
|
||||
setter.set(date);
|
||||
|
||||
}
|
||||
|
||||
private void updateComponents() {
|
||||
getDateBox().setValue(getter.get());
|
||||
getDateTextBox().setValue(asString(getter.get()));
|
||||
}
|
||||
|
||||
|
|
@ -239,9 +235,6 @@ public class DynamicDatebox extends GenericForwardComposer {
|
|||
}
|
||||
|
||||
private void applyDisabledToElements(boolean disabled) {
|
||||
if(dateBox != null) {
|
||||
dateBox.setDisabled(disabled);
|
||||
}
|
||||
if(dateTextBox != null) {
|
||||
dateTextBox.setDisabled(disabled);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,6 +116,4 @@ public interface IManageOrderElementAdvancesModel {
|
|||
|
||||
AdvanceAssignment getSpreadAdvance();
|
||||
|
||||
void cancel();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,10 +118,6 @@ public class ManageOrderElementAdvancesController extends
|
|||
return manageOrderElementAdvancesModel.getAdvanceAssignments();
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
manageOrderElementAdvancesModel.cancel();
|
||||
}
|
||||
|
||||
public boolean close() {
|
||||
return save();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,11 +29,9 @@ import java.math.RoundingMode;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
|
@ -97,8 +95,6 @@ public class ManageOrderElementAdvancesModel implements
|
|||
|
||||
private List<AdvanceType> listAdvanceTypes;
|
||||
|
||||
private CancelOperation cancelOperation = new CancelOperation();
|
||||
|
||||
@Autowired
|
||||
public ManageOrderElementAdvancesModel(
|
||||
IAdvanceMeasurementDAO advanceMeasurementDAO,
|
||||
|
|
@ -241,11 +237,6 @@ public class ManageOrderElementAdvancesModel implements
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
cancelOperation.restoreOriginalState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addNewLineAdvanceAssignment() {
|
||||
DirectAdvanceAssignment newAdvance = DirectAdvanceAssignment.create();
|
||||
|
|
@ -311,7 +302,6 @@ public class ManageOrderElementAdvancesModel implements
|
|||
measurement.setDate(null);
|
||||
advanceAssignment.addAdvanceMeasurements(measurement);
|
||||
}
|
||||
cancelOperation.markAsAdded(measurement);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -324,7 +314,6 @@ public class ManageOrderElementAdvancesModel implements
|
|||
|
||||
@Override
|
||||
public void removeLineAdvanceMeasurement(AdvanceMeasurement measurement) {
|
||||
cancelOperation.markAsRemoved(measurement);
|
||||
this.advanceAssignment.removeAdvanceMeasurement(measurement);
|
||||
}
|
||||
|
||||
|
|
@ -431,7 +420,6 @@ public class ManageOrderElementAdvancesModel implements
|
|||
reattachmentOrderElement();
|
||||
orderElement.updateAdvancePercentageTaskElement();
|
||||
validateBasicData();
|
||||
cancelOperation.clear();
|
||||
}
|
||||
|
||||
private void validateBasicData() throws InstanceNotFoundException,
|
||||
|
|
@ -801,78 +789,4 @@ public class ManageOrderElementAdvancesModel implements
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @author Diego Pino García <dpino@igalia.com>
|
||||
*
|
||||
* Keeps track of added and removed measurements. When the cancel button is
|
||||
* pressed, restores the original state of the advance assignments
|
||||
*
|
||||
*/
|
||||
private static class CancelOperation {
|
||||
|
||||
private Set<AdvanceMeasurement> addedMeasurements = new HashSet<AdvanceMeasurement>();
|
||||
|
||||
private Map<AdvanceAssignment, Set<AdvanceMeasurement>> removedMeasurements = new HashMap<AdvanceAssignment, Set<AdvanceMeasurement>>();
|
||||
|
||||
public void restoreOriginalState() {
|
||||
removeAddedMeasurements();
|
||||
addRemovedMeasurements();
|
||||
clear();
|
||||
}
|
||||
|
||||
private void clear() {
|
||||
addedMeasurements.clear();
|
||||
removedMeasurements.clear();
|
||||
}
|
||||
|
||||
private void removeAddedMeasurements() {
|
||||
for (AdvanceAssignment each : removedMeasurements.keySet()) {
|
||||
if (each instanceof DirectAdvanceAssignment) {
|
||||
DirectAdvanceAssignment directAdvanceAssignment = (DirectAdvanceAssignment) each;
|
||||
directAdvanceAssignment
|
||||
.addAdvanceMeasurements(removedMeasurements
|
||||
.get(each));
|
||||
}
|
||||
}
|
||||
removedMeasurements.clear();
|
||||
}
|
||||
|
||||
private void addRemovedMeasurements() {
|
||||
for (AdvanceMeasurement each : addedMeasurements) {
|
||||
AdvanceAssignment assignment = each.getAdvanceAssignment();
|
||||
if (assignment instanceof DirectAdvanceAssignment) {
|
||||
DirectAdvanceAssignment directAdvanceAssignment = (DirectAdvanceAssignment) assignment;
|
||||
directAdvanceAssignment.removeAdvanceMeasurement(each);
|
||||
}
|
||||
}
|
||||
addedMeasurements.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Keeps track of new measurement added to {@link AdvanceAssignment}. If
|
||||
* the user later clicks cancel these elements will be removed
|
||||
*
|
||||
* @param measurement
|
||||
*/
|
||||
public void markAsAdded(AdvanceMeasurement measurement) {
|
||||
addedMeasurements.add(measurement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Keeps track of measurement removed from {@link AdvanceAssignment}. If
|
||||
* the user later clicks cancel these elements will be added back again
|
||||
*
|
||||
* @param measurement
|
||||
*/
|
||||
public void markAsRemoved(AdvanceMeasurement measurement) {
|
||||
AdvanceAssignment assignment = measurement.getAdvanceAssignment();
|
||||
if (!removedMeasurements.containsKey(assignment)) {
|
||||
removedMeasurements.put(assignment, new HashSet<AdvanceMeasurement>());
|
||||
}
|
||||
Set<AdvanceMeasurement> measurements = removedMeasurements.get(assignment);
|
||||
measurements.add(measurement);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,8 +36,13 @@ import org.apache.commons.lang.StringUtils;
|
|||
import org.apache.commons.logging.LogFactory;
|
||||
import org.hibernate.validator.InvalidValue;
|
||||
import org.libreplan.business.calendars.entities.BaseCalendar;
|
||||
import org.libreplan.business.common.Registry;
|
||||
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.libreplan.business.common.exceptions.ValidationException;
|
||||
import org.libreplan.business.externalcompanies.entities.ExternalCompany;
|
||||
import org.libreplan.business.materials.daos.IMaterialCategoryDAO;
|
||||
import org.libreplan.business.materials.entities.MaterialCategory;
|
||||
import org.libreplan.business.orders.daos.IOrderDAO;
|
||||
import org.libreplan.business.orders.entities.HoursGroup;
|
||||
import org.libreplan.business.orders.entities.Order;
|
||||
import org.libreplan.business.orders.entities.Order.SchedulingMode;
|
||||
|
|
@ -217,6 +222,9 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
|
||||
private ProjectDetailsController projectDetailsController;
|
||||
|
||||
@Autowired
|
||||
private IOrderDAO orderDAO;
|
||||
|
||||
@Override
|
||||
public void doAfterCompose(Component comp) throws Exception {
|
||||
super.doAfterCompose(comp);
|
||||
|
|
@ -1473,4 +1481,51 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
}
|
||||
}
|
||||
|
||||
public Constraint chekValidProjectName() {
|
||||
return new Constraint() {
|
||||
@Override
|
||||
public void validate(Component comp, Object value)
|
||||
throws WrongValueException {
|
||||
|
||||
if (StringUtils.isBlank((String) value)) {
|
||||
throw new WrongValueException(comp,
|
||||
_("cannot be null or empty"));
|
||||
}
|
||||
try {
|
||||
Order found = orderDAO
|
||||
.findByNameAnotherTransaction((String) value);
|
||||
if (!found.getId().equals(getOrder().getId())) {
|
||||
throw new WrongValueException(comp,
|
||||
_("project name already being used"));
|
||||
}
|
||||
} catch (InstanceNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public Constraint chekValidProjectCode() {
|
||||
return new Constraint() {
|
||||
@Override
|
||||
public void validate(Component comp, Object value)
|
||||
throws WrongValueException {
|
||||
|
||||
if (StringUtils.isBlank((String) value)) {
|
||||
throw new WrongValueException(comp,
|
||||
_("cannot be null or empty"));
|
||||
}
|
||||
try {
|
||||
Order found = orderDAO
|
||||
.findByCodeAnotherTransaction((String) value);
|
||||
if (!found.getId().equals(getOrder().getId())) {
|
||||
throw new WrongValueException(comp,
|
||||
_("project code already being used"));
|
||||
}
|
||||
} catch (InstanceNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -429,7 +429,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
|
|||
|
||||
void addInitDateCell(final OrderElement currentOrderElement) {
|
||||
DynamicDatebox dinamicDatebox = new DynamicDatebox(
|
||||
currentOrderElement, new DynamicDatebox.Getter<Date>() {
|
||||
new DynamicDatebox.Getter<Date>() {
|
||||
|
||||
@Override
|
||||
public Date get() {
|
||||
|
|
@ -451,7 +451,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
|
|||
|
||||
void addEndDateCell(final OrderElement currentOrderElement) {
|
||||
DynamicDatebox dinamicDatebox = new DynamicDatebox(
|
||||
currentOrderElement, new DynamicDatebox.Getter<Date>() {
|
||||
new DynamicDatebox.Getter<Date>() {
|
||||
|
||||
@Override
|
||||
public Date get() {
|
||||
|
|
|
|||
|
|
@ -575,19 +575,7 @@ public class TaskElementAdapter {
|
|||
|
||||
@Override
|
||||
public GanttDate getAdvanceEndDate() {
|
||||
BigDecimal advancePercentage = BigDecimal.ZERO;
|
||||
|
||||
if (taskElement.getOrderElement() != null) {
|
||||
if (isTaskRoot(taskElement)) {
|
||||
ProgressType progressType = getProgressTypeFromConfiguration();
|
||||
advancePercentage = taskElement
|
||||
.getAdvancePercentage(progressType);
|
||||
|
||||
} else {
|
||||
advancePercentage = taskElement.getAdvancePercentage();
|
||||
}
|
||||
}
|
||||
return getAdvanceEndDate(advancePercentage);
|
||||
return getAdvanceEndDate(getAdvancePercentage());
|
||||
}
|
||||
|
||||
private boolean isTaskRoot(TaskElement taskElement) {
|
||||
|
|
@ -887,14 +875,21 @@ public class TaskElementAdapter {
|
|||
@Override
|
||||
public BigDecimal getAdvancePercentage() {
|
||||
if (taskElement != null) {
|
||||
return taskElement.getAdvancePercentage();
|
||||
BigDecimal advancePercentage;
|
||||
if (isTaskRoot(taskElement)) {
|
||||
ProgressType progressType = getProgressTypeFromConfiguration();
|
||||
advancePercentage = taskElement
|
||||
.getAdvancePercentage(progressType);
|
||||
} else {
|
||||
advancePercentage = taskElement.getAdvancePercentage();
|
||||
}
|
||||
return advancePercentage;
|
||||
}
|
||||
return new BigDecimal(0);
|
||||
}
|
||||
|
||||
private String buildTooltipText() {
|
||||
return buildTooltipText(asPercentage(taskElement
|
||||
.getAdvancePercentage()));
|
||||
return buildTooltipText(asPercentage(getAdvancePercentage()));
|
||||
}
|
||||
|
||||
private BigDecimal asPercentage(BigDecimal value) {
|
||||
|
|
|
|||
|
|
@ -104,16 +104,10 @@ public class AdvanceAssignmentPlanningController extends GenericForwardComposer
|
|||
}
|
||||
|
||||
public void onClose(Event event) {
|
||||
cancel();
|
||||
accept();
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
manageOrderElementAdvancesController.cancel();
|
||||
advanceAssignmentPlanningModel.cancel();
|
||||
close();
|
||||
}
|
||||
|
||||
public void accept() {
|
||||
boolean result = manageOrderElementAdvancesController.close();
|
||||
if (result) {
|
||||
|
|
@ -151,6 +145,7 @@ public class AdvanceAssignmentPlanningController extends GenericForwardComposer
|
|||
private void updateTaskComponent(TaskComponent taskComponent) {
|
||||
taskComponent.updateCompletionIfPossible();
|
||||
taskComponent.updateTooltipText();
|
||||
taskComponent.invalidate();
|
||||
}
|
||||
|
||||
private void close() {
|
||||
|
|
|
|||
|
|
@ -63,11 +63,6 @@ public class AdvanceAssignmentPlanningModel implements
|
|||
|
||||
private OrderElement orderElement;
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept() {
|
||||
getOrderElement().updateAdvancePercentageTaskElement();
|
||||
|
|
|
|||
|
|
@ -37,11 +37,6 @@ public interface IAdvanceAssignmentPlanningModel {
|
|||
public T doInsideTransaction();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel operation
|
||||
*/
|
||||
void cancel();
|
||||
|
||||
/**
|
||||
* Save task
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -379,6 +379,9 @@ public class AdvancedAllocationController extends GenericForwardComposer {
|
|||
private Listbox advancedAllocationHorizontalPagination;
|
||||
private Listbox advancedAllocationVerticalPagination;
|
||||
|
||||
private boolean fixedZoomByUser = false;
|
||||
private ZoomLevel zoomLevel;
|
||||
|
||||
public AdvancedAllocationController(IBack back,
|
||||
List<AllocationInput> allocationInputs) {
|
||||
setInputData(back, allocationInputs);
|
||||
|
|
@ -576,6 +579,9 @@ public class AdvancedAllocationController extends GenericForwardComposer {
|
|||
private void createComponents() {
|
||||
timeTracker = new TimeTracker(addMarginTointerval(), self);
|
||||
paginatorFilter = new PaginatorFilter();
|
||||
if (fixedZoomByUser && (zoomLevel != null)) {
|
||||
timeTracker.setZoomLevel(zoomLevel);
|
||||
}
|
||||
paginatorFilter.setZoomLevel(timeTracker.getDetailLevel());
|
||||
paginatorFilter.setInterval(timeTracker.getRealInterval());
|
||||
paginationUpButton.setDisabled(isLastPage());
|
||||
|
|
@ -585,6 +591,9 @@ public class AdvancedAllocationController extends GenericForwardComposer {
|
|||
timeTracker.addZoomListener(new IZoomLevelChangedListener() {
|
||||
@Override
|
||||
public void zoomLevelChanged(ZoomLevel detailLevel) {
|
||||
fixedZoomByUser = true;
|
||||
zoomLevel = detailLevel;
|
||||
|
||||
paginatorFilter.setZoomLevel(detailLevel);
|
||||
paginatorFilter.setInterval(timeTracker.getRealInterval());
|
||||
timeTracker.setFilter(paginatorFilter);
|
||||
|
|
|
|||
|
|
@ -216,6 +216,8 @@ public class ResourceAllocationController extends GenericForwardComposer {
|
|||
newAllocationSelector.setAllocationsAdder(resourceAllocationModel);
|
||||
newAllocationSelectorCombo
|
||||
.setAllocationsAdder(resourceAllocationModel);
|
||||
|
||||
Util.reloadBindings(allocationsGrid);
|
||||
} catch (WrongValueException e) {
|
||||
LOG.error("there was a WrongValueException initializing window", e);
|
||||
throw e;
|
||||
|
|
|
|||
|
|
@ -147,15 +147,13 @@ public class CompanyPlanningController implements Composer {
|
|||
cbProgressTypes.setModel(new ListModelList(ProgressType.getAll()));
|
||||
cbProgressTypes.setItemRenderer(new ProgressTypeRenderer());
|
||||
|
||||
// FIXME: Select default configuration option
|
||||
|
||||
// Update completion of tasks on selecting new progress type
|
||||
cbProgressTypes.addEventListener(Events.ON_SELECT, new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) {
|
||||
planner.updateCompletion(getSelectedProgressType().toString());
|
||||
planner.forcedShowAdvances();
|
||||
planner.updateCompletion(getSelectedProgressType().toString());
|
||||
}
|
||||
|
||||
private ProgressType getSelectedProgressType() {
|
||||
|
|
@ -166,33 +164,25 @@ public class CompanyPlanningController implements Composer {
|
|||
|
||||
cbProgressTypes.setVisible(true);
|
||||
|
||||
Comboitem item = findListitemValue(cbProgressTypes,
|
||||
getProgressTypeFromConfiguration());
|
||||
|
||||
if (item != null) {
|
||||
cbProgressTypes.setSelectedItem(item);
|
||||
ProgressType progressType = getProgressTypeFromConfiguration();
|
||||
if (progressType != null) {
|
||||
planner.updateCompletion(progressType.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class ProgressTypeRenderer implements ComboitemRenderer {
|
||||
private class ProgressTypeRenderer implements ComboitemRenderer {
|
||||
|
||||
@Override
|
||||
public void render(Comboitem item, Object data) {
|
||||
ProgressType progressType = (ProgressType) data;
|
||||
item.setValue(progressType);
|
||||
item.setLabel(_(progressType.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
private Comboitem findListitemValue(Combobox listbox, ProgressType value) {
|
||||
for (Object each : listbox.getChildren()) {
|
||||
final Comboitem item = (Comboitem) each;
|
||||
if (value.equals(item.getValue())) {
|
||||
return item;
|
||||
if (getProgressTypeFromConfiguration().equals(progressType)) {
|
||||
cbProgressTypes.setSelectedItem(item);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ProgressType getProgressTypeFromConfiguration() {
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ import org.libreplan.business.orders.entities.HoursGroup;
|
|||
import org.libreplan.business.orders.entities.Order;
|
||||
import org.libreplan.business.orders.entities.OrderElement;
|
||||
import org.libreplan.business.orders.entities.OrderLineGroup;
|
||||
import org.libreplan.business.orders.entities.TaskSource;
|
||||
import org.libreplan.business.planner.daos.IConsolidationDAO;
|
||||
import org.libreplan.business.planner.daos.IDependencyDAO;
|
||||
import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO;
|
||||
|
|
@ -568,7 +569,10 @@ public class SaveCommandBuilder {
|
|||
}
|
||||
|
||||
private void saveTaskSources(TaskElement taskElement) {
|
||||
taskSourceDAO.save(taskElement.getTaskSource());
|
||||
TaskSource taskSource = taskElement.getTaskSource();
|
||||
if (taskSource != null) {
|
||||
taskSourceDAO.save(taskSource);
|
||||
}
|
||||
if (taskElement.isLeaf()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -394,9 +394,11 @@ public class MultipleTabsPlannerController implements Composer,
|
|||
handler.registerBookmarkListener(this, comp.getPage());
|
||||
|
||||
if (SecurityUtils.isUserInRole(UserRole.ROLE_CREATE_ORDER)) {
|
||||
org.zkoss.zk.ui.Component createOrderButton = comp.getPage().getFellow(
|
||||
org.zkoss.zk.ui.Component createOrderButton = comp.getPage()
|
||||
.getFellowIfAny(
|
||||
"createOrderButton");
|
||||
createOrderButton.addEventListener(Events.ON_CLICK,
|
||||
if (createOrderButton != null) {
|
||||
createOrderButton.addEventListener(Events.ON_CLICK,
|
||||
new EventListener() {
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
|
|
@ -404,6 +406,7 @@ public class MultipleTabsPlannerController implements Composer,
|
|||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ import org.libreplan.web.common.Util.Setter;
|
|||
import org.libreplan.web.orders.DynamicDatebox;
|
||||
import org.libreplan.web.orders.SchedulingStateToggler;
|
||||
import org.libreplan.web.tree.TreeComponent.Column;
|
||||
import org.zkoss.zk.ui.AbstractComponent;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.Executions;
|
||||
import org.zkoss.zk.ui.WrongValueException;
|
||||
|
|
@ -764,7 +765,7 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
|
|||
}
|
||||
|
||||
private Intbox buildHoursIntboxFor(final T element) {
|
||||
Intbox result = new Intbox();
|
||||
Intbox result = new IntboxDirectValue();
|
||||
if (isLine(element)) {
|
||||
Util.bind(result, getHoursGetterFor(element),
|
||||
getHoursSetterFor(element));
|
||||
|
|
@ -795,10 +796,32 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
|
|||
// Order node, not an OrderElement
|
||||
parentNodes.remove(parentNodes.size() - 1);
|
||||
for (T node : parentNodes) {
|
||||
Intbox intbox = hoursIntBoxByElement.get(node);
|
||||
intbox.setValue(getHoursGroupHandler().getWorkHoursFor(node));
|
||||
IntboxDirectValue intbox = (IntboxDirectValue) hoursIntBoxByElement
|
||||
.get(node);
|
||||
Integer hours = getHoursGroupHandler()
|
||||
.getWorkHoursFor(node);
|
||||
if (isInCurrentPage(intbox)) {
|
||||
intbox.setValue(hours);
|
||||
} else {
|
||||
intbox.setValueDirectly(hours);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isInCurrentPage(IntboxDirectValue intbox) {
|
||||
Treeitem treeItem = (Treeitem) intbox.getParent().getParent().getParent();
|
||||
List<Treeitem> treeItems = new ArrayList<Treeitem>(
|
||||
tree.getItems());
|
||||
int position = treeItems.indexOf(treeItem);
|
||||
|
||||
if (position < 0) {
|
||||
throw new RuntimeException("Treeitem " + treeItem
|
||||
+ " has to belong to tree.getItems() list");
|
||||
}
|
||||
|
||||
return (position / tree.getPageSize()) == tree
|
||||
.getActivePage();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -1068,4 +1091,24 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
|
|||
this.orderElementTreeComponent = orderElementsTree;
|
||||
}
|
||||
|
||||
/**
|
||||
* This class is to give visibility to method
|
||||
* {@link Intbox#setValueDirectly} which is marked as protected in
|
||||
* {@link Intbox} class.
|
||||
*
|
||||
* <br />
|
||||
*
|
||||
* This is needed to prevent calling {@link AbstractComponent#smartUpdate}
|
||||
* when the {@link Intbox} is not in current page. <tt>smartUpdate</tt> is
|
||||
* called by {@link Intbox#setValue(Integer)}. This call causes a JavaScript
|
||||
* error when trying to update {@link Intbox} that are not in current page
|
||||
* in the tree.
|
||||
*/
|
||||
private class IntboxDirectValue extends Intbox {
|
||||
@Override
|
||||
public void setValueDirectly(Object value) {
|
||||
super.setValueDirectly(value);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ import org.libreplan.business.users.entities.Profile;
|
|||
import org.libreplan.business.users.entities.User;
|
||||
import org.libreplan.business.users.entities.UserRole;
|
||||
import org.libreplan.web.common.BaseCRUDController;
|
||||
import org.libreplan.web.common.Level;
|
||||
import org.libreplan.web.common.Util;
|
||||
import org.libreplan.web.common.components.Autocomplete;
|
||||
import org.libreplan.web.common.entrypoints.EntryPointsHandler;
|
||||
|
|
@ -216,4 +215,13 @@ public class UserCRUDController extends BaseCRUDController<User> implements
|
|||
protected void delete(User user) throws InstanceNotFoundException {
|
||||
userModel.confirmRemove(user);
|
||||
}
|
||||
|
||||
public boolean isLdapUser() {
|
||||
User user = userModel.getUser();
|
||||
if (user == null) {
|
||||
return false;
|
||||
}
|
||||
return !user.isLibrePlanUser();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
6879
libreplan-webapp/src/main/resources/i18n/pt.po
Normal file
|
|
@ -21,5 +21,4 @@
|
|||
|
||||
<hbox>
|
||||
<textbox value="" width="110px" />
|
||||
<datebox compact="true" visible="${false}"/>
|
||||
</hbox>
|
||||
|
|
|
|||
|
|
@ -239,8 +239,10 @@
|
|||
<!-- Activation -->
|
||||
<groupbox style="margin-top: 5px" closable="false">
|
||||
<caption label="${i18n:_('Activation')}" />
|
||||
<label value="${i18n:_('LDAP Authentication enabled')}" />
|
||||
<label value="${i18n:_('Enable LDAP authentication')}" />
|
||||
<checkbox id="ldapAuthEnabled" checked="@{configurationController.ldapConfiguration.ldapAuthEnabled}" />
|
||||
<label value="${i18n:_('Use LDAP roles')}" />
|
||||
<checkbox id="ldapSaveRolesDB" checked="@{configurationController.ldapConfiguration.ldapSaveRolesDB}" />
|
||||
</groupbox>
|
||||
|
||||
<!-- Configuration -->
|
||||
|
|
@ -329,27 +331,33 @@
|
|||
</columns>
|
||||
<rows>
|
||||
<row>
|
||||
<label value="${i18n:_('Import LDAP roles')}" />
|
||||
<checkbox id="ldapSaveRolesDB" checked="@{configurationController.ldapConfiguration.ldapSaveRolesDB}" onCheck="configurationController.showLdapRoles()"/>
|
||||
<label value="${i18n:_('Role search strategy')}" />
|
||||
<radiogroup id="strategy" onCheck="configurationController.changeRoleStrategy()">
|
||||
<radio label="${i18n:_('Group strategy')}" value="group" />
|
||||
<radio label="${i18n:_('Property strategy')}" value="property" />
|
||||
</radiogroup>
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('Group path')}" />
|
||||
<hbox>
|
||||
<textbox id="ldapGroupPath" value="@{configurationController.ldapConfiguration.ldapGroupPath}" width="300px"/>
|
||||
<textbox id="ldapGroupPath" value="@{configurationController.ldapConfiguration.ldapGroupPath}" width="300px"
|
||||
disabled="@{configurationController.ldapPropertyStrategy}" />
|
||||
<label value="${i18n:__('Example: {0}', 'ou=groups')}" /><label value="${i18n:_('(If it is empty, a node strategy is used)')}" />
|
||||
</hbox>
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('Role property')}" />
|
||||
<hbox>
|
||||
<textbox id="ldapRoleProperty" value="@{configurationController.ldapConfiguration.ldapRoleProperty}" width="300px"/>
|
||||
<textbox id="ldapRoleProperty" value="@{configurationController.ldapConfiguration.ldapRoleProperty}" width="300px"
|
||||
disabled="@{configurationController.ldapGroupStrategy}" />
|
||||
<label value="${i18n:__('Example: {0}', 'member')}" />
|
||||
</hbox>
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('Role search query')}" />
|
||||
<hbox>
|
||||
<textbox id="ldapSearchQuery" value="@{configurationController.ldapConfiguration.ldapSearchQuery}" width="300px"/>
|
||||
<textbox id="ldapSearchQuery" value="@{configurationController.ldapConfiguration.ldapSearchQuery}" width="300px"
|
||||
disabled="@{configurationController.ldapGroupStrategy}" />
|
||||
<label value="${i18n:__('Example: {0}', 'uid=[USER_ID],ou=people,dc=example,dc=org')}" />
|
||||
</hbox>
|
||||
</row>
|
||||
|
|
@ -357,7 +365,7 @@
|
|||
</grid>
|
||||
<separator />
|
||||
<separator />
|
||||
<vbox id="ldapRoles" visible="false">
|
||||
<vbox id="ldapRoles">
|
||||
<grid id="configurationRoles"
|
||||
model="@{configurationController.roles}"
|
||||
rowRenderer="@{configurationController.allUserRolesRenderer}"
|
||||
|
|
|
|||
|
|
@ -466,12 +466,18 @@ div.z-row-cnt {
|
|||
padding-left: 2px;
|
||||
}
|
||||
|
||||
.leftpanelgap .z-textbox,.leftpanelgap .z-decimalbox,.leftpanelgap .z-intbox,
|
||||
.leftpanelgap .z-longbox,.leftpanelgap .z-doublebox,.leftpanelgap .z-datebox,
|
||||
.leftpanelgap .z-datebox-inp,.leftpanelgap .z-datebox-focus .z-datebox-inp {
|
||||
.leftpanelgap .z-textbox, .leftpanelgap .z-decimalbox, .leftpanelgap .z-intbox,
|
||||
.leftpanelgap .z-longbox, .leftpanelgap .z-doublebox, .leftpanelgap .z-datebox,
|
||||
.leftpanelgap .z-datebox-inp, .leftpanelgap .z-datebox-focus .z-datebox-inp,
|
||||
.leftpanelgap .z-datebox-inp {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
|
||||
tr.z-treerow td.z-treerow-focus {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
div.z-footer-cnt,div.z-row-cnt,div.z-group-cnt,div.z-group-foot-cnt,div.z-column-cnt,div.z-tree-col-cnt {
|
||||
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||
font-size: 11px;
|
||||
|
|
@ -572,9 +578,14 @@ div.z-grid {
|
|||
|
||||
.listdetails .z-textbox, .listdetails .z-decimalbox,
|
||||
.listdetails .z-intbox, .listdetails .z-longbox,
|
||||
.listdetails .z-doublebox {
|
||||
.listdetails .z-doublebox, .listdetails .z-tree .z-datebox-inp {
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
.listdetails .z-tree .z-datebox-inp {
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.listdetails input {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
|
@ -1131,8 +1142,8 @@ span.perspective, span.perspective-active {
|
|||
overflow-x: auto;
|
||||
}
|
||||
|
||||
tr.z-tree-row-seld, tr.z-list-item-seld,
|
||||
.z-combobox-pp .z-combo-item-seld,
|
||||
tr.z-tree-row-seld, tr.z-listitem-seld,
|
||||
.z-combobox-pp .z-comboitem-seld,
|
||||
tr.z-treerow-seld {
|
||||
background-color: #fdd772; /* Dark orange */
|
||||
color: #000000;
|
||||
|
|
@ -1456,7 +1467,7 @@ display:none;
|
|||
}
|
||||
|
||||
.progress-types {
|
||||
margin-left:-10px;
|
||||
margin-left:-12px;
|
||||
}
|
||||
|
||||
.progress-types.z-combobox .z-combobox-inp {
|
||||
|
|
@ -1468,11 +1479,11 @@ display:none;
|
|||
border: 0;
|
||||
border-width: 0;
|
||||
outline: none;
|
||||
text-indent: -200px;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.progress-types.z-combobox input {
|
||||
display: none;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.show-advances img {
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
<groupbox closable="false">
|
||||
<caption id="materialsCaption" label="${i18n:_('List of materials for all categories (select one to filter)')}"/>
|
||||
<button id="btnAddMaterial"
|
||||
label="${i18n:_('Add')}"
|
||||
label="${i18n:_('New')}"
|
||||
onClick="materialsController.addMaterialToMaterialCategory(categoriesTree.selectedItem)" />
|
||||
<separator spacing="15px" orient="horizontal" />
|
||||
<newdatasortablegrid id="gridMaterials"
|
||||
|
|
|
|||
|
|
@ -20,24 +20,22 @@
|
|||
-->
|
||||
|
||||
<newdatasortablegrid id="gridMaterials"
|
||||
fixedLayout="false"
|
||||
model="@{assignedMaterialsController.assignedMaterials}" >
|
||||
<columns>
|
||||
<newdatasortablecolumn label="${i18n:_('Code')}" />
|
||||
sizedByContent="true"
|
||||
model="@{assignedMaterialsController.assignedMaterials}">
|
||||
<columns width="100%">
|
||||
<newdatasortablecolumn label="${i18n:_('Code')}" hflex="1" />
|
||||
<newdatasortablecolumn label="${i18n:_('Receipt date')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Units')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Unit type')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Unit price')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Total price')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Category')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Category')}" hflex="1"/>
|
||||
<newdatasortablecolumn label="${i18n:_('Status')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Op.')}" />
|
||||
</columns>
|
||||
<rows>
|
||||
<row self="@{each='assignedMaterial'}" value="@{assignedMaterial}">
|
||||
<textbox value="@{assignedMaterial.material.code}"
|
||||
constraint="no empty:${i18n:_('cannot be null or empty')}"
|
||||
readonly="true" />
|
||||
<label value="@{assignedMaterial.material.code}" hflex="true" />
|
||||
<datebox value="@{assignedMaterial.estimatedAvailability}" />
|
||||
<doublebox value="@{assignedMaterial.units}"
|
||||
onChange="assignedMaterialsController.updateTotalPrice(self.parent)" />
|
||||
|
|
@ -48,7 +46,7 @@
|
|||
<doublebox value="@{assignedMaterial.unitPrice}"
|
||||
onChange="assignedMaterialsController.updateTotalPrice(self.parent)" />
|
||||
<doublebox value="@{assignedMaterial.totalPrice}" disabled="${true}"/>
|
||||
<label value="@{assignedMaterial.material.category.name}" width="150px" />
|
||||
<label value="@{assignedMaterial.material.category.name}" />
|
||||
<listbox mold="select" model="@{materialStatus}"
|
||||
selectedItem="@{assignedMaterial.status}"
|
||||
itemRenderer="org.libreplan.web.common.EnumsListitemRenderer" />
|
||||
|
|
|
|||
|
|
@ -70,13 +70,15 @@
|
|||
<rows>
|
||||
<row>
|
||||
<label value="${i18n:_('Name')}" />
|
||||
<textbox value="@{controller.order.name}" width="500px"/>
|
||||
<textbox value="@{controller.order.name}" width="500px"
|
||||
constraint="@{controller.chekValidProjectName}" />
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('Code')}" />
|
||||
<hbox>
|
||||
<textbox value="@{controller.order.code}" width="250px"
|
||||
disabled="@{controller.codeAutogenerated}" />
|
||||
disabled="@{controller.codeAutogenerated}"
|
||||
constraint="@{controller.chekValidProjectCode}" />
|
||||
<checkbox label="${i18n:_('Generate code')}"
|
||||
checked="@{controller.codeAutogenerated}" />
|
||||
</hbox>
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@
|
|||
model="@{criterionRequirementsController.hoursGroups}"
|
||||
itemRenderer="@{criterionRequirementsController.renderer}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Criterion Requirements')}" width="500px"/>
|
||||
<listheader label="${i18n:_('Criterion Requirements')}" width="500px" hflex="1"/>
|
||||
<listheader label="${i18n:_('Type')}" align="center" width="150px" />
|
||||
<listheader label="${i18n:_('Hours')}" align="center" width="150px" />
|
||||
</listhead>
|
||||
|
|
@ -171,8 +171,7 @@
|
|||
<newdatasortablegrid id="listHoursGroups"
|
||||
model="@{criterionRequirementsController.hoursGroupWrappers}"
|
||||
mold="paging"
|
||||
pageSize="4"
|
||||
fixedLayout="true">
|
||||
pageSize="4">
|
||||
<columns>
|
||||
<newdatasortablecolumn width="25px" sort="auto"/>
|
||||
<newdatasortablecolumn label="Code" width="160px" sort="auto(code)" sortDirection="ascending" align="center"/>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<panelchildren>
|
||||
<grid
|
||||
model="@{assignedHoursToOrderElementController.workReportLines}"
|
||||
mold="paging" pageSize="10" fixedLayout="true">
|
||||
mold="paging" pageSize="10" >
|
||||
<columns>
|
||||
<column label="${i18n:_('Date')}" width="120px" />
|
||||
<column label="${i18n:_('Resource')}" />
|
||||
|
|
|
|||
|
|
@ -74,15 +74,14 @@
|
|||
|
||||
<tabpanel>
|
||||
<!-- Material search -->
|
||||
<hbox hflex="min">
|
||||
<hbox width="100%" hflex="1">
|
||||
<!-- Categories -->
|
||||
<vbox>
|
||||
<vbox hflex="1">
|
||||
<panel title="${i18n:_('Categories')}" border="normal">
|
||||
<panelchildren>
|
||||
<toolbarbutton style="text-decoration: none" label="${i18n:_('Unselect')}"
|
||||
onClick="assignedMaterialsController.clearSelectionAllCategoriesTree()" />
|
||||
<tree id="allCategoriesTree"
|
||||
width="280px" rows="10" vflex="true" multiple="false">
|
||||
<tree id="allCategoriesTree" rows="10" vflex="true" multiple="false">
|
||||
<treecols>
|
||||
<treecol label="Name" />
|
||||
</treecols>
|
||||
|
|
@ -91,7 +90,7 @@
|
|||
</panel>
|
||||
</vbox>
|
||||
|
||||
<vbox hflex="min">
|
||||
<vbox hflex="1">
|
||||
|
||||
<!-- Found materials -->
|
||||
<panel title="${i18n:_('Materials')}" border="normal">
|
||||
|
|
@ -111,10 +110,10 @@
|
|||
<listbox id="lbFoundMaterials"
|
||||
multiple="true"
|
||||
sizedByContent="true"
|
||||
model="@{assignedMaterialsController.matchingMaterials}">
|
||||
<listhead sizable="true">
|
||||
model="@{assignedMaterialsController.matchingMaterials}" >
|
||||
<listhead sizable="true" >
|
||||
<listheader label="${i18n:_('Code')}" />
|
||||
<listheader label="${i18n:_('Name')}" />
|
||||
<listheader label="${i18n:_('Name')}" hflex="1"/>
|
||||
<listheader label="${i18n:_('Unit type')}" />
|
||||
<listheader label="${i18n:_('Unit price')}" />
|
||||
<listheader label="${i18n:_('Category')}" />
|
||||
|
|
|
|||
|
|
@ -66,14 +66,14 @@
|
|||
font-size: 10px !important;
|
||||
border-bottom: 0px;
|
||||
border-right: 0px;
|
||||
border-top: 0px;
|
||||
border-left: 1px dotted #86A4BE;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
height: 16px;
|
||||
padding-left:2px;
|
||||
}
|
||||
|
||||
.listdetails input.task_title {
|
||||
width: auto;
|
||||
.listdetails input.task-name {
|
||||
border-left: dotted 1px #CCC;
|
||||
}
|
||||
|
||||
.listdetails div.z-tree-cell-cnt {
|
||||
|
|
@ -97,41 +97,6 @@
|
|||
height: 19px;
|
||||
}
|
||||
|
||||
.listdetails .depth_1 input.task_title {
|
||||
/*on change org.libreplan.web.print.CutyPrint.BASE_TASK_NAME_PIXEL must
|
||||
be changed too */
|
||||
width: 82%;
|
||||
}
|
||||
|
||||
.listdetails .depth_2 input.task_title {
|
||||
width: 78%;
|
||||
}
|
||||
|
||||
.listdetails .depth_3 .task_title {
|
||||
width: 74%;
|
||||
}
|
||||
|
||||
.listdetails .depth_4 .task_title {
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
.listdetails .depth_5 .task_title {
|
||||
width: 66%;
|
||||
}
|
||||
|
||||
.listdetails .depth_6 .task_title {
|
||||
width: 62%;
|
||||
}
|
||||
|
||||
.listdetails .depth_7 .task_title {
|
||||
width: 58%;
|
||||
}
|
||||
|
||||
.listdetails .depth_8 .task_title {
|
||||
width: 54%;
|
||||
}
|
||||
|
||||
|
||||
.listdetails {
|
||||
min-width:200px;
|
||||
}
|
||||
|
|
@ -831,6 +796,7 @@ div.z-tree {
|
|||
|
||||
.listdetails td {
|
||||
border-bottom: 1px dotted #CCC !important;
|
||||
border-right: 1px dotted #CCC;
|
||||
}
|
||||
|
||||
.plannerlayout, .resourcesloadlayout, .advancedallocationlayout {
|
||||
|
|
|
|||
|
|
@ -67,12 +67,9 @@
|
|||
|
||||
<!-- Control buttons -->
|
||||
<hbox>
|
||||
<button label="${i18n:_('Accept')}"
|
||||
sclass="save-button global-action"
|
||||
<button label="${i18n:_('Back')}"
|
||||
sclass="back-button global-action"
|
||||
onClick="advanceAssignmentController.accept();" />
|
||||
<button label="${i18n:_('Cancel')}"
|
||||
sclass="cancel-button global-action"
|
||||
onClick="advanceAssignmentController.cancel();" />
|
||||
</hbox>
|
||||
|
||||
</window>
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@
|
|||
<?taglib uri="/WEB-INF/tld/i18n.tld" prefix="i18n"?>
|
||||
<zk>
|
||||
|
||||
<window border="normal" title="${i18n:_('Print configuration')}"
|
||||
closable="true" id="printConfigurationWindow">
|
||||
<groupbox>
|
||||
<window border="none" title="${i18n:_('Print configuration')}"
|
||||
closable="true" id="printConfigurationWindow" width="300px">
|
||||
<groupbox style="padding:10px; margin:10px;">
|
||||
<caption label="${i18n:_('Export options')}" />
|
||||
<vbox>
|
||||
<checkbox id="print_labels" label="${i18n:_('Show labels')}" checked="true" />
|
||||
|
|
@ -41,6 +41,9 @@
|
|||
label="${i18n:_('Show all reported hours')}" checked="true"/>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
<hbox>
|
||||
<label style="color:#CCC;padding:5px;" value="${i18n:_('Please remember that only saved changes will be printed')}" />
|
||||
</hbox>
|
||||
<button id="printButton" label="${i18n:_('Print')}" sclass="save-button global-action"></button>
|
||||
<button id="cancelPrintButton" label="${i18n:_('Cancel')}" sclass="cancel-button global-action" onClick="printConfigurationWindow.detach()"/>
|
||||
</window>
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@
|
|||
<caption label="${i18n:_('Task Information')}" />
|
||||
|
||||
<!-- Task rows -->
|
||||
<grid id="gridTaskRows" width="100%">
|
||||
<grid id="gridTaskRows">
|
||||
<columns>
|
||||
<column label="${i18n:_('Criteria')}" width="300px" align="center"/>
|
||||
<column label="${i18n:_('Criteria')}" width="290px" hflex="1" align="center"/>
|
||||
<column label="${i18n:_('Type')}" width="140px" align="center"/>
|
||||
<column label="${i18n:_('Hours')}" width="80px" align="center"/>
|
||||
</columns>
|
||||
|
|
|
|||
|
|
@ -44,7 +44,8 @@
|
|||
<textbox id="loginName"
|
||||
value="@{controller.user.loginName}" width="300px"
|
||||
constraint="no empty:${i18n:_('cannot be null or empty')}"
|
||||
onBlur="controller.updateWindowTitle()"/>
|
||||
onBlur="controller.updateWindowTitle()"
|
||||
disabled="@{controller.ldapUser}" />
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('First name')}" />
|
||||
|
|
@ -70,7 +71,8 @@
|
|||
<row>
|
||||
<label value="${i18n:_('Disabled')}" />
|
||||
<checkbox id="disabled"
|
||||
checked="@{controller.user.disabled}" width="300px" />
|
||||
checked="@{controller.user.disabled}" width="300px"
|
||||
disabled="@{controller.ldapUser}" />
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('E-mail')}" />
|
||||
|
|
@ -78,8 +80,8 @@
|
|||
value="@{controller.user.email}" width="300px"/>
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('LibrePlan user')}" />
|
||||
<checkbox id="libreplanUser" checked="@{controller.user.librePlanUser}" />
|
||||
<label value="${i18n:_('Authentication type')}" />
|
||||
<label value="@{controller.user.authenticationType}" />
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
<newdatasortablecolumn label="${i18n:_('User login name')}" sort="auto(loginName)" />
|
||||
<newdatasortablecolumn label="${i18n:_('Disabled')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Administrator')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('LibrePlan user')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Authentication type')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Actions')}" />
|
||||
</columns>
|
||||
<rows>
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
<label value="@{user.loginName}" />
|
||||
<checkbox checked="@{user.disabled}" disabled="true" />
|
||||
<checkbox checked="@{user.administrator}" disabled="true" />
|
||||
<checkbox checked="@{user.librePlanUser}" disabled="true" />
|
||||
<label value="@{user.authenticationType}" />
|
||||
<hbox>
|
||||
<button sclass="icono" image="/common/img/ico_editar1.png"
|
||||
hoverImage="/common/img/ico_editar.png"
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ function unitMeasureAssign($UMeasure, $materialName){
|
|||
function materialFormCreate($material, $measure){
|
||||
_click(_link("Materials"));
|
||||
_click(_span("z-dottree-ico z-dottree-firstspacer"));
|
||||
_click(_cell("z-button-cm[3]"));
|
||||
_click(_cell("New"));
|
||||
_setValue(_textbox("z-textbox[2]"), $material);
|
||||
_setSelected(_select(0), $measure);
|
||||
_click(_cell("Save"));
|
||||
|
|
|
|||
|
|
@ -45,10 +45,11 @@ function templateProjectCreateTemplate($projectName, $template){
|
|||
|
||||
function templateProjectAssignTemplate($template){
|
||||
_click(_link("Projects List"));
|
||||
_click(_image("ico_copy.png"));
|
||||
_click(_image("ico_add.png"));
|
||||
_setValue(_textbox(0, _near(_span("Name"))), "ProjectTemplate");
|
||||
_click(_italic(0, _cell("z-caption-l")));
|
||||
_click(_div($template));
|
||||
_click(_cell("Create Project"));
|
||||
_click(_cell("Accept"));
|
||||
_click(_image("ico_save.png"));
|
||||
_click(_cell("OK"));
|
||||
_log("Assign the project template", "custom1")
|
||||
|
|
|
|||