Merging with main fork
This commit is contained in:
parent
0094d6bcf2
commit
b58c4e4c17
43 changed files with 3346 additions and 3 deletions
|
|
@ -40,6 +40,8 @@ import org.libreplan.business.expensesheet.daos.IExpenseSheetLineDAO;
|
||||||
import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO;
|
import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO;
|
||||||
import org.libreplan.business.labels.daos.ILabelDAO;
|
import org.libreplan.business.labels.daos.ILabelDAO;
|
||||||
import org.libreplan.business.labels.daos.ILabelTypeDAO;
|
import org.libreplan.business.labels.daos.ILabelTypeDAO;
|
||||||
|
import org.libreplan.business.logs.daos.IIssueLogDAO;
|
||||||
|
import org.libreplan.business.logs.daos.IRiskLogDAO;
|
||||||
import org.libreplan.business.materials.daos.IMaterialCategoryDAO;
|
import org.libreplan.business.materials.daos.IMaterialCategoryDAO;
|
||||||
import org.libreplan.business.materials.daos.IMaterialDAO;
|
import org.libreplan.business.materials.daos.IMaterialDAO;
|
||||||
import org.libreplan.business.materials.daos.IUnitTypeDAO;
|
import org.libreplan.business.materials.daos.IUnitTypeDAO;
|
||||||
|
|
@ -200,6 +202,12 @@ public class Registry {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IExpenseSheetDAO expenseSheetDAO;
|
private IExpenseSheetDAO expenseSheetDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IIssueLogDAO issueLogDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IRiskLogDAO riskLogDAO;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IExpenseSheetLineDAO expenseSheetLineDAO;
|
private IExpenseSheetLineDAO expenseSheetLineDAO;
|
||||||
|
|
||||||
|
|
@ -383,6 +391,12 @@ public class Registry {
|
||||||
return getInstance().expenseSheetDAO;
|
return getInstance().expenseSheetDAO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IIssueLogDAO getIssueLogDAO() {
|
||||||
|
return getInstance().issueLogDAO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IRiskLogDAO getRiskLogDAO() {return getInstance().riskLogDAO;}
|
||||||
|
|
||||||
public static IExpenseSheetLineDAO getExpenseSheetLineDAO() {
|
public static IExpenseSheetLineDAO getExpenseSheetLineDAO() {
|
||||||
return getInstance().expenseSheetLineDAO;
|
return getInstance().expenseSheetLineDAO;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,8 @@ public class Configuration extends BaseEntity {
|
||||||
|
|
||||||
private String companyCode;
|
private String companyCode;
|
||||||
|
|
||||||
|
private Boolean generateCodeForProjectLog = true;
|
||||||
|
|
||||||
private Boolean generateCodeForCriterion = true;
|
private Boolean generateCodeForCriterion = true;
|
||||||
|
|
||||||
private Boolean generateCodeForLabel = true;
|
private Boolean generateCodeForLabel = true;
|
||||||
|
|
@ -202,6 +204,12 @@ public class Configuration extends BaseEntity {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO 2 added methods follow below
|
||||||
|
public void setGeneratedCodeForProjectLog(Boolean generateCodeForProjectLog) {
|
||||||
|
this.generateCodeForProjectLog = generateCodeForProjectLog;
|
||||||
|
}
|
||||||
|
public Boolean getGenerateCodeForProjectLog(){ return generateCodeForProjectLog;}
|
||||||
|
|
||||||
public void setGenerateCodeForCriterion(Boolean generateCodeForCriterion) {
|
public void setGenerateCodeForCriterion(Boolean generateCodeForCriterion) {
|
||||||
this.generateCodeForCriterion = generateCodeForCriterion;
|
this.generateCodeForCriterion = generateCodeForCriterion;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ import org.libreplan.business.costcategories.entities.ResourcesCostCategoryAssig
|
||||||
import org.libreplan.business.costcategories.entities.TypeOfWorkHours;
|
import org.libreplan.business.costcategories.entities.TypeOfWorkHours;
|
||||||
import org.libreplan.business.expensesheet.entities.ExpenseSheet;
|
import org.libreplan.business.expensesheet.entities.ExpenseSheet;
|
||||||
import org.libreplan.business.labels.entities.LabelType;
|
import org.libreplan.business.labels.entities.LabelType;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
import org.libreplan.business.materials.entities.MaterialCategory;
|
import org.libreplan.business.materials.entities.MaterialCategory;
|
||||||
import org.libreplan.business.materials.entities.UnitType;
|
import org.libreplan.business.materials.entities.UnitType;
|
||||||
import org.libreplan.business.orders.entities.Order;
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
|
@ -56,7 +58,7 @@ public enum EntityNameEnum {
|
||||||
"Calendar exception day", true), COST_CATEGORY("Cost category",
|
"Calendar exception day", true), COST_CATEGORY("Cost category",
|
||||||
true), RESOURCE_CALENDAR("Resource calendar", true), CRITERION_SATISFACTION(
|
true), RESOURCE_CALENDAR("Resource calendar", true), CRITERION_SATISFACTION(
|
||||||
"Criterion satisfaction", true), RESOURCE_COST_CATEGORY_ASSIGNMENT(
|
"Criterion satisfaction", true), RESOURCE_COST_CATEGORY_ASSIGNMENT(
|
||||||
"Resource cost category assignment", true), EXPENSE_SHEET("Expense sheet", true);
|
"Resource cost category assignment", true), EXPENSE_SHEET("Expense sheet", true), ISSUE_LOG("Issue log", true), RISK_LOG("Risk log", true);
|
||||||
|
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
|
|
@ -121,6 +123,13 @@ public enum EntityNameEnum {
|
||||||
.getResourcesCostCategoryAssignmentDAO();
|
.getResourcesCostCategoryAssignmentDAO();
|
||||||
case EXPENSE_SHEET:
|
case EXPENSE_SHEET:
|
||||||
return (IIntegrationEntityDAO<ExpenseSheet>) Registry.getExpenseSheetDAO();
|
return (IIntegrationEntityDAO<ExpenseSheet>) Registry.getExpenseSheetDAO();
|
||||||
|
|
||||||
|
case ISSUE_LOG:
|
||||||
|
return (IIntegrationEntityDAO<IssueLog>) Registry.getIssueLogDAO();
|
||||||
|
|
||||||
|
case RISK_LOG:
|
||||||
|
return (IIntegrationEntityDAO<RiskLog>) Registry.getRiskLogDAO();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("can't handle the code sequence of the "
|
throw new RuntimeException("can't handle the code sequence of the "
|
||||||
+ description);
|
+ description);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.daos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contract for {@link IssueLogDAO}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
public interface IIssueLogDAO extends IIntegrationEntityDAO<IssueLog> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all the issue-logs
|
||||||
|
*
|
||||||
|
* @return a list of {@link IssueLog} objects
|
||||||
|
*/
|
||||||
|
List<IssueLog> getIssueLogs();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.daos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
import org.libreplan.business.logs.entities.ProjectLog;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contract for {@link ProjectLogDAO}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
public interface IProjectLogDAO extends IIntegrationEntityDAO<ProjectLog> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all the issue-logs
|
||||||
|
*
|
||||||
|
* @return a list of {@link IssueLog} objects
|
||||||
|
*/
|
||||||
|
List<IssueLog> getIssueLogs();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all the risk logs
|
||||||
|
*
|
||||||
|
* @return a list of {@link RiskLog} objects
|
||||||
|
*/
|
||||||
|
List<RiskLog> getRiskLogs();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.daos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
|
|
||||||
|
public interface IRiskLogDAO extends IIntegrationEntityDAO<RiskLog> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all the risk-logs
|
||||||
|
*
|
||||||
|
* @return a list of {@link RiskLog} objects
|
||||||
|
*/
|
||||||
|
List<RiskLog> getRiskLogs();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.daos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.daos.IntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DAO for {@link IssueLog}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
@Scope(BeanDefinition.SCOPE_SINGLETON)
|
||||||
|
public class IssueLogDAO extends IntegrationEntityDAO<IssueLog> implements
|
||||||
|
IIssueLogDAO {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IssueLog> getIssueLogs() {
|
||||||
|
return list(IssueLog.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.daos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.daos.IntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
import org.libreplan.business.logs.entities.ProjectLog;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DAO for {@link ProjectLog}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
@Scope(BeanDefinition.SCOPE_SINGLETON)
|
||||||
|
@Transactional
|
||||||
|
public class ProjectLogDAO extends IntegrationEntityDAO<ProjectLog> implements
|
||||||
|
IProjectLogDAO {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IssueLog> getIssueLogs() {
|
||||||
|
return list(IssueLog.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RiskLog> getRiskLogs() {
|
||||||
|
return list(RiskLog.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.daos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.daos.IntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DAO for {@link RiskLog}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
@Scope(BeanDefinition.SCOPE_SINGLETON)
|
||||||
|
public class RiskLogDAO extends IntegrationEntityDAO<RiskLog> implements
|
||||||
|
IRiskLogDAO {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RiskLog> getRiskLogs() {
|
||||||
|
return list(RiskLog.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,158 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.entities;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.IntegrationEntity;
|
||||||
|
import org.libreplan.business.common.Registry;
|
||||||
|
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IssueLog entity, represents parameters to be able to administrate issues that
|
||||||
|
* come up in the project
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public class IssueLog extends ProjectLog {
|
||||||
|
|
||||||
|
private IssueTypeEnum type = IssueTypeEnum.getDefault();
|
||||||
|
private IssueStatusEnum status = IssueStatusEnum.getDefault();
|
||||||
|
private LowMediumHighEnum priority = LowMediumHighEnum.getDefault();
|
||||||
|
private LowMediumHighEnum severity = LowMediumHighEnum.getDefault();
|
||||||
|
private Date dateRaised;
|
||||||
|
private User createdBy;
|
||||||
|
private String assignedTo;
|
||||||
|
private Date dateResolved;
|
||||||
|
private Date deadline;
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
|
||||||
|
public static IssueLog create() {
|
||||||
|
return create(new IssueLog(new Date()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for Hibernate. Do not use!
|
||||||
|
*/
|
||||||
|
protected IssueLog() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private IssueLog(Date date) {
|
||||||
|
this.dateRaised = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IssueTypeEnum getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(IssueTypeEnum type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IssueStatusEnum getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(IssueStatusEnum status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull(message = "priority is not specified")
|
||||||
|
public LowMediumHighEnum getPriority() {
|
||||||
|
return priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPriority(LowMediumHighEnum priority) {
|
||||||
|
this.priority = priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LowMediumHighEnum getSeverity() {
|
||||||
|
return severity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSeverity(LowMediumHighEnum severity) {
|
||||||
|
this.severity = severity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull(message = "date raised is not specified")
|
||||||
|
public Date getDateRaised() {
|
||||||
|
return dateRaised;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateRaised(Date dateEntered) {
|
||||||
|
this.dateRaised = dateEntered;
|
||||||
|
}
|
||||||
|
|
||||||
|
public User getCreatedBy() {
|
||||||
|
return createdBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatedBy(User user) {
|
||||||
|
this.createdBy = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAssignedTo() {
|
||||||
|
return assignedTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssignedTo(String assignedTo) {
|
||||||
|
this.assignedTo = assignedTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDateResolved() {
|
||||||
|
return dateResolved;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateResolved(Date dateResolved) {
|
||||||
|
this.dateResolved = dateResolved;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Date getDeadline() {
|
||||||
|
return deadline;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeadline(Date decisionDate) {
|
||||||
|
this.deadline = decisionDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHumanId() {
|
||||||
|
return getCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected IIntegrationEntityDAO<? extends IntegrationEntity> getIntegrationEntityDAO() {
|
||||||
|
return (IIntegrationEntityDAO<? extends IntegrationEntity>) Registry
|
||||||
|
.getIssueLogDAO();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.libreplan.business.logs.entities;
|
||||||
|
import static org.libreplan.business.i18n.I18nHelper._;
|
||||||
|
/**
|
||||||
|
* Defines INVESTIGATING, ESCALATED, RESOLVED enums
|
||||||
|
* to be used as data type in
|
||||||
|
* {@link IssueLog}
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public enum IssueStatusEnum {
|
||||||
|
INVESTIGATING(_("INVESTIGATING")), ESCALATED(_("ESCALATED")), RESOLVED(_("RESOLVED"));
|
||||||
|
|
||||||
|
private final String issueStatusEnum;
|
||||||
|
|
||||||
|
IssueStatusEnum(String issueStatusEnum) {
|
||||||
|
this.issueStatusEnum = issueStatusEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return issueStatusEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IssueStatusEnum getDefault() {
|
||||||
|
return IssueStatusEnum.INVESTIGATING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
package org.libreplan.business.logs.entities;
|
||||||
|
|
||||||
|
import static org.libreplan.business.i18n.I18nHelper._;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines PROBLEM_OR_CONCERN, REQUEST_FOR_CHANGE, OFF_SPECIFICATION enums
|
||||||
|
* to be used as data type in
|
||||||
|
* {@link IssueLog}
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public enum IssueTypeEnum {
|
||||||
|
PROBLEM_OR_CONCERN(_("PROBLEM OR CONCERN")), REQUEST_FOR_CHANGE(_("REQUEST FOR CHANGE")), OFF_SPECIFICATION(_("OFF SPECIFICATON"));
|
||||||
|
|
||||||
|
private final String issueTypeEnum;
|
||||||
|
|
||||||
|
IssueTypeEnum(String issueTypeEnum) {
|
||||||
|
this.issueTypeEnum = issueTypeEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return issueTypeEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IssueTypeEnum getDefault() {
|
||||||
|
return IssueTypeEnum.OFF_SPECIFICATION;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.libreplan.business.logs.entities;
|
||||||
|
|
||||||
|
import static org.libreplan.business.i18n.I18nHelper._;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the low, medium and high enums to be used as data type in
|
||||||
|
* {@link IssueLog} and {@link RiskLog}
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public enum LowMediumHighEnum {
|
||||||
|
|
||||||
|
LOW(_("LOW")), MEDIUM(_("MEDIUM")), HIGH(_("HIGH"));
|
||||||
|
|
||||||
|
private final String lowMediumHighEnum;
|
||||||
|
|
||||||
|
LowMediumHighEnum(String lowMediumHighEnum) {
|
||||||
|
this.lowMediumHighEnum = lowMediumHighEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return lowMediumHighEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LowMediumHighEnum getDefault() {
|
||||||
|
return LowMediumHighEnum.LOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.entities;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.IHumanIdentifiable;
|
||||||
|
import org.libreplan.business.common.IntegrationEntity;
|
||||||
|
import org.libreplan.business.common.Registry;
|
||||||
|
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is the base class for all logs like issue-log, risk-log etc.
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public abstract class ProjectLog extends IntegrationEntity implements
|
||||||
|
IHumanIdentifiable {
|
||||||
|
|
||||||
|
protected Order project;
|
||||||
|
protected String description;
|
||||||
|
|
||||||
|
public Order getOrder() {
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrder(Order order) {
|
||||||
|
this.project = order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,172 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.business.logs.entities;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.IntegrationEntity;
|
||||||
|
import org.libreplan.business.common.Registry;
|
||||||
|
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RiskLog entity, represents parameters to be able to administrate risks that
|
||||||
|
* come up in the project
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public class RiskLog extends ProjectLog {
|
||||||
|
|
||||||
|
private String projectName;
|
||||||
|
private String status;
|
||||||
|
private LowMediumHighEnum probability = LowMediumHighEnum.getDefault();
|
||||||
|
private LowMediumHighEnum impact = LowMediumHighEnum.getDefault();
|
||||||
|
private Date dateCreated;
|
||||||
|
private User createdBy;
|
||||||
|
private String counterMeasures;
|
||||||
|
private String contingency;
|
||||||
|
private String responsible;
|
||||||
|
private Date actionWhen;
|
||||||
|
private String notes;
|
||||||
|
private RiskScoreStatesEnum score = RiskScoreStatesEnum.getDefault();
|
||||||
|
|
||||||
|
public static RiskLog create() {
|
||||||
|
return create(new RiskLog());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for Hibernate. Do not use!
|
||||||
|
*/
|
||||||
|
protected RiskLog() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProjectName() {
|
||||||
|
return projectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProjectName (String projectName) {
|
||||||
|
this.projectName = projectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LowMediumHighEnum getProbability() {
|
||||||
|
return probability;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProbability(LowMediumHighEnum probability) {
|
||||||
|
this.probability = probability;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LowMediumHighEnum getImpact() {
|
||||||
|
return impact;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setImpact(LowMediumHighEnum impact) {
|
||||||
|
this.impact = impact;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDateCreated() {
|
||||||
|
return dateCreated;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateCreated(Date dateCreated) {
|
||||||
|
this.dateCreated = dateCreated;
|
||||||
|
}
|
||||||
|
|
||||||
|
public User getCreatedBy() {
|
||||||
|
return createdBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatedBy(User createdBy) {
|
||||||
|
this.createdBy = createdBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCounterMeasures() {
|
||||||
|
return counterMeasures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCounterMeasures(String counterMeasures) {
|
||||||
|
this.counterMeasures = counterMeasures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContingency() {
|
||||||
|
return contingency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContingency(String contingency) {
|
||||||
|
this.contingency = contingency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResponsible(String responsible) {
|
||||||
|
this.responsible = responsible;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getResponsible() {
|
||||||
|
return responsible;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getActionWhen() {
|
||||||
|
return actionWhen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActionWhen(Date actionWhen) {
|
||||||
|
this.actionWhen = actionWhen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScoreAfterCM(RiskScoreStatesEnum scoreAfterCM) {
|
||||||
|
this.score = scoreAfterCM;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RiskScoreStatesEnum getScoreAfterCM() {
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRiskScore() {
|
||||||
|
return (probability.ordinal() + 1) * (impact.ordinal() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHumanId() {
|
||||||
|
return getCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected IIntegrationEntityDAO<? extends IntegrationEntity> getIntegrationEntityDAO() {
|
||||||
|
return (IIntegrationEntityDAO<? extends IntegrationEntity>) Registry
|
||||||
|
.getRiskLogDAO();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.libreplan.business.logs.entities;
|
||||||
|
import static org.libreplan.business.i18n.I18nHelper._;
|
||||||
|
/**
|
||||||
|
* Defines ZERO, ONE, TWO, THREE, FOUR, SIX, NINE
|
||||||
|
* to be used as data type in
|
||||||
|
* {@link RiskLog}
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public enum RiskScoreStatesEnum {
|
||||||
|
ZERO(_("0")), ONE(_("1")), TWO(_("2")), THREE(_("3")), FOUR(_("4")), SIX(_("6")), NINE(_("9")) ;
|
||||||
|
|
||||||
|
private final String riskScoreStateEnum;
|
||||||
|
|
||||||
|
RiskScoreStatesEnum(String riskScoreStateEnum) {
|
||||||
|
this.riskScoreStateEnum = riskScoreStateEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return riskScoreStateEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RiskScoreStatesEnum getDefault() {
|
||||||
|
return RiskScoreStatesEnum.ZERO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -97,6 +97,9 @@
|
||||||
<value>
|
<value>
|
||||||
org/libreplan/business/email/entities/Email.hbm.xml
|
org/libreplan/business/email/entities/Email.hbm.xml
|
||||||
</value>
|
</value>
|
||||||
|
<value>
|
||||||
|
org/libreplan/business/logs/entities/Logs.hbm.xml
|
||||||
|
</value>
|
||||||
</list>
|
</list>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||||
|
<hibernate-mapping package="org.libreplan.business.logs.entities" default-access="field">
|
||||||
|
<class name="IssueLog" table="issue_log">
|
||||||
|
<id name="id" column="id" type="long" access="property">
|
||||||
|
<generator class="hilo">
|
||||||
|
<param name="max_lo">100</param>
|
||||||
|
</generator>
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property name="code" access="property" not-null="true" unique="true"/>
|
||||||
|
|
||||||
|
<many-to-one name="project" class="org.libreplan.business.orders.entities.Order" lazy="false">
|
||||||
|
<column name="project" not-null="true"/>
|
||||||
|
</many-to-one>
|
||||||
|
|
||||||
|
<property name="type" access="field" not-null="true" >
|
||||||
|
<type name="org.hibernate.type.EnumType" >
|
||||||
|
<param name="enumClass">org.libreplan.business.logs.entities.IssueTypeEnum</param>
|
||||||
|
</type>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name="description" column="description" access="field"/>
|
||||||
|
|
||||||
|
<property name="priority" access="field" not-null="true">
|
||||||
|
<type name="org.hibernate.type.EnumType">
|
||||||
|
<param name="enumClass">org.libreplan.business.logs.entities.LowMediumHighEnum</param>
|
||||||
|
</type>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name="severity" access="field" not-null="true">
|
||||||
|
<type name="org.hibernate.type.EnumType">
|
||||||
|
<param name="enumClass">org.libreplan.business.logs.entities.LowMediumHighEnum</param>
|
||||||
|
</type>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name="dateRaised" column="date_raised" access="field" not-null="true">
|
||||||
|
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name="assignedTo" column="assigned_to" access="field"/>
|
||||||
|
|
||||||
|
<many-to-one name="createdBy" class="org.libreplan.business.users.entities.User" lazy="false">
|
||||||
|
<column name="created_by" not-null="true"/>
|
||||||
|
</many-to-one>
|
||||||
|
|
||||||
|
<property name="deadline" column="deadline" />
|
||||||
|
|
||||||
|
<property name="dateResolved" column="date_resolved"/>
|
||||||
|
|
||||||
|
<property name="notes" column="notes" access="field"/>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="RiskLog" table="risk_log">
|
||||||
|
<id name="id" column="id" type="long" access="property">
|
||||||
|
<generator class="hilo">
|
||||||
|
<param name="max_lo">100</param>
|
||||||
|
</generator>
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property name="code" access="property" not-null="true" unique="true"/>
|
||||||
|
|
||||||
|
<many-to-one name="project" class="org.libreplan.business.orders.entities.Order" lazy="false">
|
||||||
|
<column name="project" not-null="true"/>
|
||||||
|
</many-to-one>
|
||||||
|
|
||||||
|
<property name="probability" access="field" not-null="true">
|
||||||
|
<type name="org.hibernate.type.EnumType">
|
||||||
|
<param name="enumClass">org.libreplan.business.logs.entities.LowMediumHighEnum</param>
|
||||||
|
</type>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name="impact" access="field" not-null="true">
|
||||||
|
<type name="org.hibernate.type.EnumType">
|
||||||
|
<param name="enumClass">org.libreplan.business.logs.entities.LowMediumHighEnum</param>
|
||||||
|
</type>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name="dateCreated" column="date_created" access="field" not-null="true"/>
|
||||||
|
|
||||||
|
<many-to-one name="createdBy" class="org.libreplan.business.users.entities.User" lazy="false">
|
||||||
|
<column name="created_by" />
|
||||||
|
</many-to-one>
|
||||||
|
|
||||||
|
<property name="counterMeasures" column="counter_measures" access="field"/>
|
||||||
|
|
||||||
|
<property name="contingency" column="contingency" access="field"/>
|
||||||
|
|
||||||
|
<property name="responsible" column="responsible" access="field"/>
|
||||||
|
|
||||||
|
<property name="actionWhen" column="action_when" access="field"/>
|
||||||
|
|
||||||
|
<property name="notes" column="notes" access="field"/>
|
||||||
|
|
||||||
|
<property name="description" column="description" access="field"/>
|
||||||
|
|
||||||
|
<property name="status" column="status" access="field"/>
|
||||||
|
|
||||||
|
<property name="score" access="field" not-null="true">
|
||||||
|
<type name="org.hibernate.type.EnumType">
|
||||||
|
<param name="enumClass">org.libreplan.business.logs.entities.RiskScoreStatesEnum</param>
|
||||||
|
</type>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>
|
||||||
|
|
@ -275,6 +275,12 @@ public class CustomMenuController extends Div implements IMenuItemsRegister {
|
||||||
}
|
}
|
||||||
}, "01-introducion.html#id2"));
|
}, "01-introducion.html#id2"));
|
||||||
}
|
}
|
||||||
|
/* planningItems.add(subItem(_("RiskLog"), new ICapture() {
|
||||||
|
@Override
|
||||||
|
public void capture() {
|
||||||
|
globalView.g
|
||||||
|
}
|
||||||
|
}*/
|
||||||
if (SecurityUtils.isSuperuserOrUserInRoles(UserRole.ROLE_PLANNING)) {
|
if (SecurityUtils.isSuperuserOrUserInRoles(UserRole.ROLE_PLANNING)) {
|
||||||
planningItems.add(subItem(_("Resources Load"), new ICapture() {
|
planningItems.add(subItem(_("Resources Load"), new ICapture() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -298,6 +304,13 @@ public class CustomMenuController extends Div implements IMenuItemsRegister {
|
||||||
planningItems.add(subItem(_("Import project"),
|
planningItems.add(subItem(_("Import project"),
|
||||||
"/orders/imports/projectImport.zul", ""));
|
"/orders/imports/projectImport.zul", ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SecurityUtils.isSuperuserOrUserInRoles(UserRole.ROLE_CRITERIA)) {
|
||||||
|
planningItems.add(subItem(_("RiskLog"),
|
||||||
|
"/logs/issue_log.zul",
|
||||||
|
"02-criterios.html#id1"));
|
||||||
|
}
|
||||||
|
|
||||||
if (!planningItems.isEmpty()) {
|
if (!planningItems.isEmpty()) {
|
||||||
topItem(_("Planning"), "/planner/index.zul", "", planningItems);
|
topItem(_("Planning"), "/planner/index.zul", "", planningItems);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.web.logs;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.exceptions.ValidationException;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contract for {@link IssueLogModel}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
public interface IIssueLogModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all {@link IssueLog}
|
||||||
|
*/
|
||||||
|
List<IssueLog> getIssueLogs();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all {@link Order}
|
||||||
|
*/
|
||||||
|
List<Order> getOrders();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns current {@link Order}
|
||||||
|
*/
|
||||||
|
Order getOrder();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the order
|
||||||
|
*
|
||||||
|
* @param order
|
||||||
|
* the order to be set
|
||||||
|
*/
|
||||||
|
void setOrder(Order order);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all {@link User}
|
||||||
|
*/
|
||||||
|
List<User> getUsers();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link User}
|
||||||
|
*/
|
||||||
|
User getCreatedBy();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the user
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
* the user to be set
|
||||||
|
*/
|
||||||
|
void setCreatedBy(User user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares for create a new {@link IssueLog}.
|
||||||
|
*/
|
||||||
|
void initCreate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares for edit {@link IssueLog}
|
||||||
|
*
|
||||||
|
* @param issueLog
|
||||||
|
* an object to be edited
|
||||||
|
*/
|
||||||
|
void initEdit(IssueLog issueLog);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current {@link IssueLog}.
|
||||||
|
*
|
||||||
|
* @return A {@link IssueLog}
|
||||||
|
*/
|
||||||
|
IssueLog getIssueLog();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the current {@link IssueLog}
|
||||||
|
*
|
||||||
|
* @throws ValidationException
|
||||||
|
* if validation fails
|
||||||
|
*/
|
||||||
|
void confirmSave() throws ValidationException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels the current {@link IssueLog}
|
||||||
|
*/
|
||||||
|
void cancel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the current {@link IssueLog}
|
||||||
|
*
|
||||||
|
* @param issueLog
|
||||||
|
* an object to be removed
|
||||||
|
*/
|
||||||
|
void remove(IssueLog issueLog);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.web.logs;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.exceptions.ValidationException;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contract for {@link RiskLogModel}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
public interface IRiskLogModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all {@link RiskLog}
|
||||||
|
*/
|
||||||
|
List<RiskLog> getRiskLogs();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all {@link Order}
|
||||||
|
*/
|
||||||
|
List<Order> getOrders();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns current {@link Order}
|
||||||
|
*/
|
||||||
|
Order getOrder();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the order
|
||||||
|
*
|
||||||
|
* @param order
|
||||||
|
* the order to set
|
||||||
|
*/
|
||||||
|
void setOrder(Order order);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all {@link User}
|
||||||
|
*/
|
||||||
|
List<User> getUsers();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@link User}
|
||||||
|
*/
|
||||||
|
User getCreatedBy();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the user
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
* the user to be set
|
||||||
|
*/
|
||||||
|
void setCreatedBy(User user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares for create a new {@link RiskLog}.
|
||||||
|
*/
|
||||||
|
void initCreate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares for edit {@link RiskLog}
|
||||||
|
*
|
||||||
|
* @param riskLog
|
||||||
|
* an object to be edited
|
||||||
|
*/
|
||||||
|
void initEdit(RiskLog riskLog);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current {@link RiskLog}.
|
||||||
|
*
|
||||||
|
* @return A {@link RiskLog}
|
||||||
|
*/
|
||||||
|
RiskLog getRiskLog();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the current {@link RiskLog}
|
||||||
|
*
|
||||||
|
* @throws ValidationException
|
||||||
|
* if validation fails
|
||||||
|
*/
|
||||||
|
void confirmSave() throws ValidationException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels the current {@link RiskLog}
|
||||||
|
*/
|
||||||
|
void cancel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the current {@link RiskLog}
|
||||||
|
*
|
||||||
|
* @param riskLog
|
||||||
|
* an object to be removed
|
||||||
|
*/
|
||||||
|
void remove(RiskLog riskLog);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,420 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.web.logs;
|
||||||
|
|
||||||
|
import static org.libreplan.web.I18nHelper._;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||||
|
import org.libreplan.business.common.exceptions.ValidationException;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
import org.libreplan.business.logs.entities.IssueStatusEnum;
|
||||||
|
import org.libreplan.business.logs.entities.IssueTypeEnum;
|
||||||
|
import org.libreplan.business.logs.entities.LowMediumHighEnum;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
import org.libreplan.web.common.BaseCRUDController;
|
||||||
|
import org.libreplan.web.common.Util;
|
||||||
|
import org.libreplan.web.common.components.bandboxsearch.BandboxSearch;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.zkoss.zk.ui.Component;
|
||||||
|
import org.zkoss.zk.ui.WrongValueException;
|
||||||
|
import org.zkoss.zk.ui.event.Event;
|
||||||
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
|
import org.zkoss.zk.ui.event.Events;
|
||||||
|
import org.zkoss.zul.*;
|
||||||
|
import org.zkoss.zk.ui.Executions;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller for IssueLog CRUD actions
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
@org.springframework.stereotype.Component
|
||||||
|
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||||
|
public class IssueLogCRUDController extends BaseCRUDController<IssueLog> {
|
||||||
|
|
||||||
|
private static final org.apache.commons.logging.Log LOG = LogFactory
|
||||||
|
.getLog(IssueLogCRUDController.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IIssueLogModel issueLogModel;
|
||||||
|
|
||||||
|
private BandboxSearch bdProjectIssueLog;
|
||||||
|
|
||||||
|
private BandboxSearch bdUserIssueLog;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAfterCompose(Component comp) throws Exception {
|
||||||
|
super.doAfterCompose(comp);
|
||||||
|
comp.setVariable("issueLogController", this, true);
|
||||||
|
showListWindow();
|
||||||
|
initializeOrderComponent();
|
||||||
|
initializeUserComponent();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes order component
|
||||||
|
*/
|
||||||
|
private void initializeOrderComponent() {
|
||||||
|
bdProjectIssueLog = (BandboxSearch) editWindow
|
||||||
|
.getFellow("bdProjectIssueLog");
|
||||||
|
Util.createBindingsFor(bdProjectIssueLog);
|
||||||
|
bdProjectIssueLog.setListboxEventListener(Events.ON_SELECT,
|
||||||
|
new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdProjectIssueLog
|
||||||
|
.getSelectedElement();
|
||||||
|
issueLogModel.setOrder((Order) object);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
bdProjectIssueLog.setListboxEventListener(Events.ON_OK,
|
||||||
|
new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdProjectIssueLog
|
||||||
|
.getSelectedElement();
|
||||||
|
issueLogModel.setOrder((Order) object);
|
||||||
|
bdProjectIssueLog.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes user component
|
||||||
|
*/
|
||||||
|
private void initializeUserComponent() {
|
||||||
|
bdUserIssueLog = (BandboxSearch) editWindow.getFellow("bdUserIssueLog");
|
||||||
|
Util.createBindingsFor(bdUserIssueLog);
|
||||||
|
|
||||||
|
bdUserIssueLog.setListboxEventListener(Events.ON_SELECT, new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdUserIssueLog.getSelectedElement();
|
||||||
|
issueLogModel.setCreatedBy((User) object);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
bdUserIssueLog.setListboxEventListener(Events.ON_OK, new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdUserIssueLog.getSelectedElement();
|
||||||
|
issueLogModel.setCreatedBy((User) object);
|
||||||
|
bdUserIssueLog.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enumerations rendering
|
||||||
|
*/
|
||||||
|
public static ListitemRenderer issueTypeRenderer = new ListitemRenderer() {
|
||||||
|
@Override
|
||||||
|
public void render(org.zkoss.zul.Listitem item, Object data)
|
||||||
|
throws Exception {
|
||||||
|
IssueTypeEnum issueTypeEnum = (IssueTypeEnum) data;
|
||||||
|
String displayName = issueTypeEnum.getDisplayName();
|
||||||
|
item.setLabel(displayName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
public static ListitemRenderer issueStatusRenderer = new ListitemRenderer() {
|
||||||
|
@Override
|
||||||
|
public void render(org.zkoss.zul.Listitem item, Object data)
|
||||||
|
throws Exception {
|
||||||
|
IssueStatusEnum issueStatusEnum = (IssueStatusEnum) data;
|
||||||
|
String displayName = issueStatusEnum.getDisplayName();
|
||||||
|
item.setLabel(displayName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static ListitemRenderer lowMediumHighEnumRenderer = new ListitemRenderer() {
|
||||||
|
@Override
|
||||||
|
public void render(org.zkoss.zul.Listitem item, Object data)
|
||||||
|
throws Exception {
|
||||||
|
LowMediumHighEnum lowMediumHighEnum = (LowMediumHighEnum) data;
|
||||||
|
String displayName = lowMediumHighEnum.getDisplayName();
|
||||||
|
item.setLabel(displayName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders issue logs
|
||||||
|
*
|
||||||
|
* @return {@link RowRenderer}
|
||||||
|
*/
|
||||||
|
public RowRenderer getIssueLogsRowRenderer() {
|
||||||
|
return new RowRenderer() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(Row row, Object data) throws Exception {
|
||||||
|
final IssueLog issueLog = (IssueLog) data;
|
||||||
|
row.setValue(issueLog);
|
||||||
|
appendObject(row, issueLog.getCode());
|
||||||
|
appendLabel(row, issueLog.getOrder().getName());
|
||||||
|
appendObject(row, issueLog.getType());
|
||||||
|
appendObject(row, issueLog.getStatus());
|
||||||
|
appendLabel(row, issueLog.getDescription());
|
||||||
|
appendObject(row, issueLog.getPriority());
|
||||||
|
appendObject(row, issueLog.getSeverity());
|
||||||
|
appendDate(row, issueLog.getDateRaised());
|
||||||
|
appendLabel(row, issueLog.getCreatedBy().getLoginName());
|
||||||
|
appendLabel(row, issueLog.getAssignedTo());
|
||||||
|
appendDate(row, issueLog.getDeadline());
|
||||||
|
appendDate(row, issueLog.getDateResolved());
|
||||||
|
appendLabel(row, issueLog.getNotes());
|
||||||
|
appendOperations(row, issueLog);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the specified <code>object</code> to the specified
|
||||||
|
* <code>row</code>
|
||||||
|
*
|
||||||
|
* @param row
|
||||||
|
* @param object
|
||||||
|
*/
|
||||||
|
private void appendObject(final Row row, Object object) {
|
||||||
|
String text = new String("");
|
||||||
|
if (object != null) {
|
||||||
|
text = object.toString();
|
||||||
|
}
|
||||||
|
appendLabel(row, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates {@link Label} bases on the specified <code>value</code> and
|
||||||
|
* appends to the specified <code>row</code>
|
||||||
|
*
|
||||||
|
* @param row
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
private void appendLabel(final Row row, String value) {
|
||||||
|
Label label = new Label(value);
|
||||||
|
row.appendChild(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the specified <code>date</code> to the specified <code>row</code>
|
||||||
|
* @param row
|
||||||
|
* @param date*/
|
||||||
|
private void appendDate(final Row row, Date date) {
|
||||||
|
String labelDate = new String("");
|
||||||
|
if (date != null) {
|
||||||
|
labelDate = Util.formatDate(date);
|
||||||
|
}
|
||||||
|
appendLabel(row, labelDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends operation(edit and remove) to the specified <code>row</code>
|
||||||
|
*
|
||||||
|
* @param row
|
||||||
|
* @param issueLog
|
||||||
|
*/
|
||||||
|
private void appendOperations(final Row row, final IssueLog issueLog) {
|
||||||
|
Hbox hbox = new Hbox();
|
||||||
|
hbox.appendChild(Util.createEditButton(new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
goToEditForm(issueLog);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
hbox.appendChild(Util.createRemoveButton(new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
confirmDelete(issueLog);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
row.appendChild(hbox);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@link LowMediumHighEnum} values
|
||||||
|
*/
|
||||||
|
public LowMediumHighEnum[] getLowMediumHighEnum() {
|
||||||
|
return LowMediumHighEnum.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@link IssueTypeEnum} values
|
||||||
|
*/
|
||||||
|
public IssueTypeEnum[] getIssueTypeEnum() {
|
||||||
|
return IssueTypeEnum.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@link IssueStatusEnum} values
|
||||||
|
*/
|
||||||
|
public IssueStatusEnum[] getIssueStatusEnum() {
|
||||||
|
return IssueStatusEnum.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of {@link Order} objects
|
||||||
|
*/
|
||||||
|
public List<Order> getOrders() {
|
||||||
|
return issueLogModel.getOrders();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of {@link User} objects
|
||||||
|
*/
|
||||||
|
public List<User> getUsers() {
|
||||||
|
return issueLogModel.getUsers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns date entered
|
||||||
|
*/
|
||||||
|
public Date getDateRaised() {
|
||||||
|
if (issueLogModel.getIssueLog() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (issueLogModel.getIssueLog().getDateRaised() != null) ? issueLogModel
|
||||||
|
.getIssueLog().getDateRaised()
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the date entered
|
||||||
|
*
|
||||||
|
* @param date
|
||||||
|
* date eneted
|
||||||
|
*/
|
||||||
|
public void setDateRaised(Date date) {
|
||||||
|
issueLogModel.getIssueLog().setDateRaised(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns date resolved
|
||||||
|
*/
|
||||||
|
public Date getDateResolved() {
|
||||||
|
if (issueLogModel.getIssueLog() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (issueLogModel.getIssueLog().getDateResolved() != null) ? issueLogModel
|
||||||
|
.getIssueLog().getDateResolved()
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the date resolved
|
||||||
|
*
|
||||||
|
* @param date
|
||||||
|
* the date resolved
|
||||||
|
*/
|
||||||
|
public void setDateResolved(Date date) {
|
||||||
|
issueLogModel.getIssueLog().setDateResolved(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDeadline() {
|
||||||
|
if (issueLogModel.getIssueLog() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (issueLogModel.getIssueLog().getDeadline() != null) ? issueLogModel
|
||||||
|
.getIssueLog().getDeadline() // this is a getIntegrationEntityDAO method
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeadline(Date date) {
|
||||||
|
issueLogModel.getIssueLog().setDeadline(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link IssueLog} object
|
||||||
|
*/
|
||||||
|
public IssueLog getIssueLog() {
|
||||||
|
return issueLogModel.getIssueLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of {@link IssueLog} objects
|
||||||
|
*/
|
||||||
|
public List<IssueLog> getIssueLogs() {
|
||||||
|
if (LogsController.getProjectNameVisibility() == true)
|
||||||
|
return issueLogModel.getIssueLogs();
|
||||||
|
else{
|
||||||
|
List<IssueLog> issueLogs = new ArrayList<IssueLog>();
|
||||||
|
Order order = LogsController.getOrder();
|
||||||
|
for (IssueLog issueLog : issueLogModel.getIssueLogs()) {
|
||||||
|
if (issueLog.getOrder().equals(order))
|
||||||
|
issueLogs.add(issueLog);
|
||||||
|
}
|
||||||
|
return issueLogs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getEntityType() {
|
||||||
|
return _("issuelog-number");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getPluralEntityType() {
|
||||||
|
return _("Issue logs");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initCreate() {
|
||||||
|
issueLogModel.initCreate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initEdit(IssueLog entity) {
|
||||||
|
issueLogModel.initEdit(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void save() throws ValidationException {
|
||||||
|
if (getIssueLog().getOrder() == null) {
|
||||||
|
throw new WrongValueException(bdProjectIssueLog,
|
||||||
|
_("please select a project"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getIssueLog().getCreatedBy() == null) {
|
||||||
|
throw new WrongValueException(bdUserIssueLog,
|
||||||
|
_("please select an author"));
|
||||||
|
}
|
||||||
|
issueLogModel.confirmSave();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected IssueLog getEntityBeingEdited() {
|
||||||
|
return issueLogModel.getIssueLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void delete(IssueLog entity) throws InstanceNotFoundException {
|
||||||
|
issueLogModel.remove(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,183 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.web.logs;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.IntegrationEntity;
|
||||||
|
import org.libreplan.business.common.daos.IConfigurationDAO;
|
||||||
|
import org.libreplan.business.common.entities.EntityNameEnum;
|
||||||
|
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||||
|
import org.libreplan.business.common.exceptions.ValidationException;
|
||||||
|
import org.libreplan.business.logs.daos.IIssueLogDAO;
|
||||||
|
import org.libreplan.business.logs.daos.IProjectLogDAO;
|
||||||
|
import org.libreplan.business.logs.entities.IssueLog;
|
||||||
|
import org.libreplan.business.orders.daos.IOrderDAO;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
import org.libreplan.business.scenarios.IScenarioManager;
|
||||||
|
import org.libreplan.business.users.daos.IUserDAO;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
import org.libreplan.web.common.IntegrationEntityModel;
|
||||||
|
import org.libreplan.web.common.concurrentdetection.OnConcurrentModification;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model for UI operations related to {@link IssueLog}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||||
|
@OnConcurrentModification(goToPage = "/logs/_logs.zul")
|
||||||
|
public class IssueLogModel extends IntegrationEntityModel implements
|
||||||
|
IIssueLogModel {
|
||||||
|
|
||||||
|
private IssueLog issueLog;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IIssueLogDAO issueLogDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IProjectLogDAO projectLogDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IUserDAO userDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IOrderDAO orderDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IScenarioManager scenarioManager;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IConfigurationDAO configurationDAO;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<IssueLog> getIssueLogs() {
|
||||||
|
return projectLogDAO.getIssueLogs();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<Order> getOrders() {
|
||||||
|
return orderDAO.getOrders();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<User> getUsers() {
|
||||||
|
List<User> users = new ArrayList<User>();
|
||||||
|
users.addAll(userDAO.findAll());
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public void initCreate() {
|
||||||
|
boolean codeGenerated = configurationDAO.getConfiguration()
|
||||||
|
.getGenerateCodeForProjectLog();
|
||||||
|
this.issueLog = IssueLog.create();
|
||||||
|
if (codeGenerated) {
|
||||||
|
issueLog.setCodeAutogenerated(codeGenerated);
|
||||||
|
setDefaultCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initEdit(IssueLog issueLog) {
|
||||||
|
this.issueLog = issueLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IssueLog getIssueLog() {
|
||||||
|
return this.issueLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void confirmSave() throws ValidationException {
|
||||||
|
issueLogDAO.save(issueLog);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel() {
|
||||||
|
issueLog = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void remove(IssueLog issueLog) {
|
||||||
|
try {
|
||||||
|
issueLogDAO.remove(issueLog.getId());
|
||||||
|
} catch (InstanceNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityNameEnum getEntityName() {
|
||||||
|
return EntityNameEnum.ISSUE_LOG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntegrationEntity getCurrentEntity() {
|
||||||
|
return this.issueLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Set<IntegrationEntity> getChildren() {
|
||||||
|
return new HashSet<IntegrationEntity>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Order getOrder() {
|
||||||
|
return issueLog.getOrder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOrder(Order order) {
|
||||||
|
if (this.issueLog != null) {
|
||||||
|
IssueLog issueLog = getIssueLog();
|
||||||
|
issueLog.setOrder(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User getCreatedBy() {
|
||||||
|
return issueLog.getCreatedBy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCreatedBy(User user) {
|
||||||
|
if (this.issueLog != null) {
|
||||||
|
IssueLog issueLog = getIssueLog();
|
||||||
|
issueLog.setCreatedBy(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.web.logs;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
import org.libreplan.web.common.Util;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.zkoss.zk.ui.Component;
|
||||||
|
import org.zkoss.zk.ui.Executions;
|
||||||
|
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||||
|
import org.zkoss.zul.api.Hbox;
|
||||||
|
import org.zkoss.zul.api.Window;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller for Logs(issue and risk logs)
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
@org.springframework.stereotype.Component
|
||||||
|
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||||
|
public class LogsController extends GenericForwardComposer {
|
||||||
|
|
||||||
|
private static final Log LOG = LogFactory.getLog(LogsController.class);
|
||||||
|
|
||||||
|
private Window issueLogWindow;
|
||||||
|
private Window riskLogWindow;
|
||||||
|
private Window logWindow;
|
||||||
|
|
||||||
|
private Hbox logsFilter;
|
||||||
|
|
||||||
|
private IssueLogCRUDController issueLogController;
|
||||||
|
private RiskLogCRUDController riskLogController;
|
||||||
|
private static boolean projectNameVisibility = true;
|
||||||
|
private static Order order = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAfterCompose(Component comp) throws Exception {
|
||||||
|
super.doAfterCompose(comp);
|
||||||
|
comp.setVariable("logsController", this, true);
|
||||||
|
Component filterComponent = Executions.createComponents(
|
||||||
|
"/logs/_logsFilter.zul", logsFilter,
|
||||||
|
new HashMap<String, String>());
|
||||||
|
filterComponent.setVariable("logsFilterController", this, true);
|
||||||
|
logsFilter.setVisible(true);
|
||||||
|
logWindow = (Window) comp.getFellowIfAny("logWindow");
|
||||||
|
Util.createBindingsFor(logWindow);
|
||||||
|
setupIssueLogController();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onApplyFilter() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setupIssueLogController() {
|
||||||
|
issueLogWindow = (Window) self.getFellowIfAny("issueLogWindow");
|
||||||
|
|
||||||
|
if (issueLogController == null) {
|
||||||
|
issueLogController = new IssueLogCRUDController();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
issueLogController.doAfterCompose(issueLogWindow);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setupRiskLogController() {
|
||||||
|
riskLogWindow = (Window) self.getFellowIfAny("riskLogWindow");
|
||||||
|
|
||||||
|
if (riskLogController == null) {
|
||||||
|
riskLogController = new RiskLogCRUDController();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
riskLogController.doAfterCompose(riskLogWindow);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void goToOrderMode(Order order) {
|
||||||
|
LogsController.projectNameVisibility =false;
|
||||||
|
LogsController.order = order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void goToGlobalMode(){
|
||||||
|
projectNameVisibility = true;
|
||||||
|
order = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean getProjectNameVisibility() {
|
||||||
|
return projectNameVisibility;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Order getOrder() {
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,366 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.web.logs;
|
||||||
|
|
||||||
|
import static org.libreplan.web.I18nHelper._;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||||
|
import org.libreplan.business.common.exceptions.ValidationException;
|
||||||
|
import org.libreplan.business.logs.entities.LowMediumHighEnum;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
|
import org.libreplan.business.logs.entities.RiskScoreStatesEnum;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
import org.libreplan.web.common.BaseCRUDController;
|
||||||
|
import org.libreplan.web.common.Util;
|
||||||
|
import org.libreplan.web.common.components.bandboxsearch.BandboxSearch;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.zkoss.zk.ui.Component;
|
||||||
|
import org.zkoss.zk.ui.WrongValueException;
|
||||||
|
import org.zkoss.zk.ui.event.Event;
|
||||||
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
|
import org.zkoss.zk.ui.event.Events;
|
||||||
|
import org.zkoss.zul.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller for RiskLog CRUD actions
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
@org.springframework.stereotype.Component
|
||||||
|
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||||
|
public class RiskLogCRUDController extends BaseCRUDController<RiskLog> {
|
||||||
|
|
||||||
|
private static final org.apache.commons.logging.Log LOG = LogFactory
|
||||||
|
.getLog(RiskLogCRUDController.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IRiskLogModel riskLogModel;
|
||||||
|
|
||||||
|
private BandboxSearch bdProjectRiskLog;
|
||||||
|
|
||||||
|
private BandboxSearch bdUserRiskLog;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAfterCompose(Component comp) throws Exception {
|
||||||
|
super.doAfterCompose(comp);
|
||||||
|
comp.setVariable("riskLogController", this, true);
|
||||||
|
showListWindow();
|
||||||
|
initializeOrderComponent();
|
||||||
|
initializeUserComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes order component
|
||||||
|
*/
|
||||||
|
private void initializeOrderComponent() {
|
||||||
|
bdProjectRiskLog = (BandboxSearch) editWindow
|
||||||
|
.getFellow("bdProjectRiskLog");
|
||||||
|
Util.createBindingsFor(bdProjectRiskLog);
|
||||||
|
bdProjectRiskLog.setListboxEventListener(Events.ON_SELECT,
|
||||||
|
new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdProjectRiskLog.getSelectedElement();
|
||||||
|
riskLogModel.setOrder((Order) object);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
bdProjectRiskLog.setListboxEventListener(Events.ON_OK, new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdProjectRiskLog.getSelectedElement();
|
||||||
|
riskLogModel.setOrder((Order) object);
|
||||||
|
bdProjectRiskLog.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes user component
|
||||||
|
*/
|
||||||
|
private void initializeUserComponent() {
|
||||||
|
bdUserRiskLog = (BandboxSearch) editWindow.getFellow("bdUserRiskLog");
|
||||||
|
Util.createBindingsFor(bdUserRiskLog);
|
||||||
|
bdUserRiskLog.setListboxEventListener(Events.ON_SELECT,
|
||||||
|
new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdUserRiskLog
|
||||||
|
.getSelectedElement();
|
||||||
|
riskLogModel.setCreatedBy((User) object);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
bdUserRiskLog.setListboxEventListener(Events.ON_OK,
|
||||||
|
new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
final Object object = bdUserRiskLog
|
||||||
|
.getSelectedElement();
|
||||||
|
riskLogModel.setCreatedBy((User) object);
|
||||||
|
bdUserRiskLog.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders risk logs
|
||||||
|
*
|
||||||
|
* @return {@link RowRenderer}
|
||||||
|
*/
|
||||||
|
public RowRenderer getRiskLogsRowRenderer() {
|
||||||
|
return new RowRenderer() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(Row row, Object data) throws Exception {
|
||||||
|
final RiskLog riskLog = (RiskLog) data;
|
||||||
|
row.setValue(riskLog);
|
||||||
|
appendObject(row, riskLog.getCode());
|
||||||
|
appendLabel(row, riskLog.getOrder().getName());
|
||||||
|
appendObject(row, riskLog.getProbability());
|
||||||
|
appendObject(row, riskLog.getImpact());
|
||||||
|
appendObject(row, riskLog.getRiskScore());
|
||||||
|
appendLabel(row, riskLog.getStatus());
|
||||||
|
appendLabel(row, riskLog.getDescription());
|
||||||
|
appendDate(row, riskLog.getDateCreated());
|
||||||
|
appendLabel(row, riskLog.getCreatedBy().getFullName() + riskLog.getCreatedBy().getLoginName());
|
||||||
|
appendLabel(row, riskLog.getCounterMeasures());
|
||||||
|
appendLabel(row, "4");
|
||||||
|
appendLabel(row, riskLog.getContingency());
|
||||||
|
appendLabel(row, riskLog.getResponsible());
|
||||||
|
appendDate(row, riskLog.getActionWhen());
|
||||||
|
appendLabel(row, riskLog.getNotes());
|
||||||
|
appendOperations(row, riskLog);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ListitemRenderer lowMediumHighEnumRenderer = new ListitemRenderer() {
|
||||||
|
@Override
|
||||||
|
public void render(org.zkoss.zul.Listitem item, Object data)
|
||||||
|
throws Exception {
|
||||||
|
LowMediumHighEnum lowMediumHighEnum = (LowMediumHighEnum) data;
|
||||||
|
String displayName = lowMediumHighEnum.getDisplayName();
|
||||||
|
item.setLabel(displayName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
public static ListitemRenderer riskScoreStatesEnumRenderer = new ListitemRenderer() {
|
||||||
|
@Override
|
||||||
|
public void render(org.zkoss.zul.Listitem item, Object data)
|
||||||
|
throws Exception {
|
||||||
|
RiskScoreStatesEnum riskScoreStatesEnum = (RiskScoreStatesEnum) data;
|
||||||
|
String displayName = riskScoreStatesEnum.getDisplayName();
|
||||||
|
item.setLabel(displayName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the specified <code>object</code> to the specified
|
||||||
|
* <code>row</code>
|
||||||
|
*
|
||||||
|
* @param row
|
||||||
|
* @param object
|
||||||
|
*/
|
||||||
|
private void appendObject(final Row row, Object object) {
|
||||||
|
String text = new String("");
|
||||||
|
if (object != null) {
|
||||||
|
text = object.toString();
|
||||||
|
}
|
||||||
|
appendLabel(row, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates {@link Label} bases on the specified <code>value</code> and
|
||||||
|
* appends to the specified <code>row</code>
|
||||||
|
*
|
||||||
|
* @param row
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
private void appendLabel(final Row row, String value) {
|
||||||
|
Label label = new Label(value);
|
||||||
|
row.appendChild(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the specified <code>date</code> to the specified <code>row</code>
|
||||||
|
*
|
||||||
|
* @param row
|
||||||
|
* @param date
|
||||||
|
*/
|
||||||
|
private void appendDate(final Row row, Date date) {
|
||||||
|
String labelDate = new String("");
|
||||||
|
if (date != null) {
|
||||||
|
labelDate = Util.formatDate(date);
|
||||||
|
}
|
||||||
|
appendLabel(row, labelDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends operation(edit and remove) to the specified <code>row</code>
|
||||||
|
*
|
||||||
|
* @param row
|
||||||
|
* @param riskLog
|
||||||
|
*/
|
||||||
|
private void appendOperations(final Row row, final RiskLog riskLog) {
|
||||||
|
Hbox hbox = new Hbox();
|
||||||
|
hbox.appendChild(Util.createEditButton(new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
goToEditForm(riskLog);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
hbox.appendChild(Util.createRemoveButton(new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
confirmDelete(riskLog);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
row.appendChild(hbox);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@link LowMediumHighEnum} values
|
||||||
|
*/
|
||||||
|
public LowMediumHighEnum[] getLowMediumHighEnums() {
|
||||||
|
return LowMediumHighEnum.values();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns {@link org.libreplan.business.logs.entities.RiskScoreStatesEnum} values
|
||||||
|
*/
|
||||||
|
public RiskScoreStatesEnum[] getRiskScoreStatesEnums() {
|
||||||
|
return RiskScoreStatesEnum.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of {@link Order} objects
|
||||||
|
*/
|
||||||
|
public List<Order> getOrders() {
|
||||||
|
return riskLogModel.getOrders();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of {@link User} objects
|
||||||
|
*/
|
||||||
|
public List<User> getUsers() {
|
||||||
|
return riskLogModel.getUsers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns registration date
|
||||||
|
*/
|
||||||
|
public Date getDateCreated() {
|
||||||
|
if (riskLogModel.getRiskLog() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (riskLogModel.getRiskLog().getDateCreated() != null) ? riskLogModel
|
||||||
|
.getRiskLog().getDateCreated()
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the registration date
|
||||||
|
*
|
||||||
|
* @param date
|
||||||
|
* registration date
|
||||||
|
*/
|
||||||
|
public void setDateCreated(Date date) {
|
||||||
|
riskLogModel.getRiskLog().setDateCreated(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActionWhen(Date date) {
|
||||||
|
riskLogModel.getRiskLog().setActionWhen(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getActionWhen() {
|
||||||
|
if (riskLogModel.getRiskLog() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (riskLogModel.getRiskLog().getActionWhen() != null) ? riskLogModel
|
||||||
|
.getRiskLog().getActionWhen()
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link RiskLog} object
|
||||||
|
*/
|
||||||
|
public RiskLog getRiskLog() {
|
||||||
|
return riskLogModel.getRiskLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of {@link RiskLog} objects
|
||||||
|
*/
|
||||||
|
public List<RiskLog> getRiskLogs() {
|
||||||
|
return riskLogModel.getRiskLogs();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getEntityType() {
|
||||||
|
return _("Issue log");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getPluralEntityType() {
|
||||||
|
return _("Issue logs");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initCreate() {
|
||||||
|
riskLogModel.initCreate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initEdit(RiskLog entity) {
|
||||||
|
riskLogModel.initEdit(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void save() throws ValidationException {
|
||||||
|
if (getRiskLog().getOrder() == null) {
|
||||||
|
throw new WrongValueException(bdProjectRiskLog,
|
||||||
|
_("please select a project"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getRiskLog().getCreatedBy() == null) {
|
||||||
|
throw new WrongValueException(bdUserRiskLog,
|
||||||
|
_("please select an author"));
|
||||||
|
}
|
||||||
|
|
||||||
|
riskLogModel.confirmSave();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected RiskLog getEntityBeingEdited() {
|
||||||
|
return riskLogModel.getRiskLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void delete(RiskLog entity) throws InstanceNotFoundException {
|
||||||
|
riskLogModel.remove(entity);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,183 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libreplan.web.logs;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.IntegrationEntity;
|
||||||
|
import org.libreplan.business.common.daos.IConfigurationDAO;
|
||||||
|
import org.libreplan.business.common.entities.EntityNameEnum;
|
||||||
|
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||||
|
import org.libreplan.business.common.exceptions.ValidationException;
|
||||||
|
import org.libreplan.business.logs.daos.IProjectLogDAO;
|
||||||
|
import org.libreplan.business.logs.daos.IRiskLogDAO;
|
||||||
|
import org.libreplan.business.logs.entities.RiskLog;
|
||||||
|
import org.libreplan.business.orders.daos.IOrderDAO;
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
import org.libreplan.business.scenarios.IScenarioManager;
|
||||||
|
import org.libreplan.business.users.daos.IUserDAO;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
import org.libreplan.web.common.IntegrationEntityModel;
|
||||||
|
import org.libreplan.web.common.concurrentdetection.OnConcurrentModification;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model for UI operations related to {@link RiskLog}
|
||||||
|
*
|
||||||
|
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||||
|
@OnConcurrentModification(goToPage = "/logs/_logs.zul")
|
||||||
|
public class RiskLogModel extends IntegrationEntityModel implements
|
||||||
|
IRiskLogModel {
|
||||||
|
|
||||||
|
private RiskLog riskLog;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IRiskLogDAO riskLogDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IProjectLogDAO projectLogDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IUserDAO userDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IOrderDAO orderDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IScenarioManager scenarioManager;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IConfigurationDAO configurationDAO;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<RiskLog> getRiskLogs() {
|
||||||
|
return projectLogDAO.getRiskLogs();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<Order> getOrders() {
|
||||||
|
return orderDAO.getOrders();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<User> getUsers() {
|
||||||
|
List<User> users = new ArrayList<User>();
|
||||||
|
users.addAll(userDAO.findAll());
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public void initCreate() {
|
||||||
|
boolean codeGenerated = configurationDAO.getConfiguration()
|
||||||
|
.getGenerateCodeForProjectLog();
|
||||||
|
this.riskLog = RiskLog.create();
|
||||||
|
if (codeGenerated) {
|
||||||
|
riskLog.setCodeAutogenerated(codeGenerated);
|
||||||
|
setDefaultCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initEdit(RiskLog riskLog) {
|
||||||
|
this.riskLog = riskLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RiskLog getRiskLog() {
|
||||||
|
return this.riskLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void confirmSave() throws ValidationException {
|
||||||
|
riskLogDAO.save(riskLog);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel() {
|
||||||
|
riskLog = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void remove(RiskLog riskLog) {
|
||||||
|
try {
|
||||||
|
riskLogDAO.remove(riskLog.getId());
|
||||||
|
} catch (InstanceNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityNameEnum getEntityName() {
|
||||||
|
return EntityNameEnum.RISK_LOG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntegrationEntity getCurrentEntity() {
|
||||||
|
return this.riskLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Set<IntegrationEntity> getChildren() {
|
||||||
|
return new HashSet<IntegrationEntity>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Order getOrder() {
|
||||||
|
return riskLog.getOrder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOrder(Order order) {
|
||||||
|
if (this.riskLog != null) {
|
||||||
|
RiskLog riskLog = getRiskLog();
|
||||||
|
riskLog.setOrder(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User getCreatedBy() {
|
||||||
|
return riskLog.getCreatedBy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCreatedBy(User user) {
|
||||||
|
if (this.riskLog != null) {
|
||||||
|
RiskLog riskLog = getRiskLog();
|
||||||
|
riskLog.setCreatedBy(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,160 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.libreplan.web.planner.tabs;
|
||||||
|
|
||||||
|
import static org.libreplan.web.I18nHelper._;
|
||||||
|
import static org.libreplan.web.planner.tabs.MultipleTabsPlannerController.BREADCRUMBS_SEPARATOR;
|
||||||
|
import static org.libreplan.web.planner.tabs.MultipleTabsPlannerController.getSchedulingLabel;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.libreplan.business.users.entities.UserRole;
|
||||||
|
import org.libreplan.web.common.Util;
|
||||||
|
import org.libreplan.web.logs.LogsController;
|
||||||
|
import org.libreplan.web.planner.order.IOrderPlanningGate;
|
||||||
|
import org.libreplan.web.planner.tabs.CreatedOnDemandTab.IComponentCreator;
|
||||||
|
import org.libreplan.web.security.SecurityUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.zkoss.ganttz.extensions.ITab;
|
||||||
|
import org.zkoss.zk.ui.Component;
|
||||||
|
import org.zkoss.zk.ui.Executions;
|
||||||
|
import org.zkoss.zul.Image;
|
||||||
|
import org.zkoss.zul.Label;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates global Tab for Logs(issue and risk logs)
|
||||||
|
*
|
||||||
|
* @author Misha Gozhda <misha@libreplan-enterprise.com>
|
||||||
|
*/
|
||||||
|
public class LogsTabCreator {
|
||||||
|
|
||||||
|
public static ITab create(Mode mode, LogsController logsController, LogsController logsControllerGlobal,
|
||||||
|
Component breadcrumbs, IOrderPlanningGate orderPlanningGate,
|
||||||
|
Map<String, String[]> parameters) {
|
||||||
|
return new LogsTabCreator(mode, logsController, logsControllerGlobal, breadcrumbs,
|
||||||
|
orderPlanningGate, parameters)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Mode mode;
|
||||||
|
|
||||||
|
private final LogsController logsControllerGlobal;
|
||||||
|
|
||||||
|
private final LogsController logsController;
|
||||||
|
|
||||||
|
private final Component breadcrumbs;
|
||||||
|
|
||||||
|
private final IOrderPlanningGate orderPlanningGate;
|
||||||
|
|
||||||
|
private LogsTabCreator(Mode mode, LogsController logsController, LogsController logsControllerGlobal,
|
||||||
|
Component breadcrumbs, IOrderPlanningGate orderPlanningGate,
|
||||||
|
Map<String, String[]> parameters) {
|
||||||
|
this.mode = mode;
|
||||||
|
this.logsController = logsController;
|
||||||
|
this.logsControllerGlobal = logsControllerGlobal;
|
||||||
|
this.breadcrumbs = breadcrumbs;
|
||||||
|
this.orderPlanningGate = orderPlanningGate;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ITab build() {
|
||||||
|
return TabOnModeType.forMode(mode)
|
||||||
|
.forType(ModeType.GLOBAL, createGlobalLogsTab())
|
||||||
|
.forType(ModeType.ORDER, createOrderLogsTab())
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private ITab createGlobalLogsTab() {
|
||||||
|
IComponentCreator componentCreator = new IComponentCreator() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.zkoss.zk.ui.Component create(
|
||||||
|
org.zkoss.zk.ui.Component parent) {
|
||||||
|
Map<String, Object> arguments = new HashMap<String, Object>();
|
||||||
|
arguments.put("logsController", logsControllerGlobal);
|
||||||
|
return Executions.createComponents("/logs/_logs.zul",
|
||||||
|
parent, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return new CreatedOnDemandTab(_("Logs"), "logs-global",
|
||||||
|
componentCreator) {
|
||||||
|
@Override
|
||||||
|
protected void beforeShowAction() {
|
||||||
|
if (!SecurityUtils
|
||||||
|
.isSuperuserOrUserInRoles(UserRole.ROLE_PLANNING)) {
|
||||||
|
Util.sendForbiddenStatusCodeInHttpServletResponse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void afterShowAction() {
|
||||||
|
if (breadcrumbs.getChildren() != null) {
|
||||||
|
breadcrumbs.getChildren().clear();
|
||||||
|
}
|
||||||
|
breadcrumbs.appendChild(new Image(BREADCRUMBS_SEPARATOR));
|
||||||
|
breadcrumbs.appendChild(new Label(getSchedulingLabel()));
|
||||||
|
breadcrumbs.appendChild(new Image(BREADCRUMBS_SEPARATOR));
|
||||||
|
breadcrumbs.appendChild(new Label(_("Logs")));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private ITab createOrderLogsTab() {
|
||||||
|
IComponentCreator componentCreator = new IComponentCreator() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.zkoss.zk.ui.Component create(
|
||||||
|
org.zkoss.zk.ui.Component parent) {
|
||||||
|
Map<String, Object> arguments = new HashMap<String, Object>();
|
||||||
|
arguments.put("logsController", logsController);
|
||||||
|
return Executions.createComponents("/logs/_logs.zul",
|
||||||
|
parent, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return new CreatedOnDemandTab(_("Logs"), "logs-order",
|
||||||
|
componentCreator) {
|
||||||
|
@Override
|
||||||
|
protected void beforeShowAction() {
|
||||||
|
if (!SecurityUtils
|
||||||
|
.isSuperuserOrUserInRoles(UserRole.ROLE_PLANNING)) {
|
||||||
|
Util.sendForbiddenStatusCodeInHttpServletResponse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void afterShowAction() {
|
||||||
|
if (breadcrumbs.getChildren() != null) {
|
||||||
|
breadcrumbs.getChildren().clear();
|
||||||
|
}
|
||||||
|
breadcrumbs.appendChild(new Image(BREADCRUMBS_SEPARATOR));
|
||||||
|
breadcrumbs.appendChild(new Label(getSchedulingLabel()));
|
||||||
|
breadcrumbs.appendChild(new Image(BREADCRUMBS_SEPARATOR));
|
||||||
|
breadcrumbs.appendChild(new Label(_("Logs")));
|
||||||
|
breadcrumbs.appendChild(new Image(BREADCRUMBS_SEPARATOR));
|
||||||
|
breadcrumbs.appendChild(new Label(mode.getOrder().getName()));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -42,6 +42,7 @@ import org.libreplan.web.common.entrypoints.URLHandlerRegistry;
|
||||||
import org.libreplan.web.dashboard.DashboardController;
|
import org.libreplan.web.dashboard.DashboardController;
|
||||||
import org.libreplan.web.dashboard.DashboardControllerGlobal;
|
import org.libreplan.web.dashboard.DashboardControllerGlobal;
|
||||||
import org.libreplan.web.limitingresources.LimitingResourcesController;
|
import org.libreplan.web.limitingresources.LimitingResourcesController;
|
||||||
|
import org.libreplan.web.logs.LogsController;
|
||||||
import org.libreplan.web.montecarlo.MonteCarloController;
|
import org.libreplan.web.montecarlo.MonteCarloController;
|
||||||
import org.libreplan.web.orders.OrderCRUDController;
|
import org.libreplan.web.orders.OrderCRUDController;
|
||||||
import org.libreplan.web.planner.allocation.AdvancedAllocationController.IBack;
|
import org.libreplan.web.planner.allocation.AdvancedAllocationController.IBack;
|
||||||
|
|
@ -75,6 +76,8 @@ import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
import org.zkoss.zk.ui.util.Composer;
|
import org.zkoss.zk.ui.util.Composer;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates and handles several tabs
|
* Creates and handles several tabs
|
||||||
*
|
*
|
||||||
|
|
@ -83,7 +86,8 @@ import org.zkoss.zk.ui.util.Composer;
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||||
public class MultipleTabsPlannerController implements Composer,
|
public class
|
||||||
|
MultipleTabsPlannerController implements Composer,
|
||||||
IGlobalViewEntryPoints {
|
IGlobalViewEntryPoints {
|
||||||
|
|
||||||
public static String WELCOME_URL = "-- no URL provided --";
|
public static String WELCOME_URL = "-- no URL provided --";
|
||||||
|
|
@ -164,6 +168,8 @@ public class MultipleTabsPlannerController implements Composer,
|
||||||
|
|
||||||
private ITab dashboardTab;
|
private ITab dashboardTab;
|
||||||
|
|
||||||
|
private ITab logsTab;
|
||||||
|
|
||||||
private TabSwitcher tabsSwitcher;
|
private TabSwitcher tabsSwitcher;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -190,6 +196,12 @@ public class MultipleTabsPlannerController implements Composer,
|
||||||
@Autowired
|
@Autowired
|
||||||
private DashboardControllerGlobal dashboardControllerGlobal;
|
private DashboardControllerGlobal dashboardControllerGlobal;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LogsController logsController;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LogsController logsControllerGlobal;
|
||||||
|
|
||||||
private org.zkoss.zk.ui.Component breadcrumbs;
|
private org.zkoss.zk.ui.Component breadcrumbs;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -254,7 +266,7 @@ public class MultipleTabsPlannerController implements Composer,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void goToTaskResourceAllocation(Order order,
|
public void goToTaskResourceAllocation(Order order,
|
||||||
TaskElement task) {
|
TaskElement task) {
|
||||||
orderPlanningController.setShowedTask(task);
|
orderPlanningController.setShowedTask(task);
|
||||||
orderPlanningController.setCurrentControllerToShow(orderPlanningController.getEditTaskController());
|
orderPlanningController.setCurrentControllerToShow(orderPlanningController.getEditTaskController());
|
||||||
getTabsRegistry()
|
getTabsRegistry()
|
||||||
|
|
@ -303,6 +315,32 @@ public class MultipleTabsPlannerController implements Composer,
|
||||||
dashboardController, dashboardControllerGlobal, orderPlanningController, breadcrumbs,
|
dashboardController, dashboardControllerGlobal, orderPlanningController, breadcrumbs,
|
||||||
resourcesSearcher);
|
resourcesSearcher);
|
||||||
|
|
||||||
|
logsTab = LogsTabCreator.create(mode, logsController, logsControllerGlobal, breadcrumbs, new IOrderPlanningGate() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void goToScheduleOf(Order order) {
|
||||||
|
getTabsRegistry()
|
||||||
|
.show(planningTab, changeModeTo(order));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void goToOrderDetails(Order order) {
|
||||||
|
getTabsRegistry().show(ordersTab, changeModeTo(order));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void goToTaskResourceAllocation(Order order,
|
||||||
|
TaskElement task) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void goToDashboard(Order order) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
}, parameters);
|
||||||
|
|
||||||
final boolean isMontecarloVisible = isMonteCarloVisible();
|
final boolean isMontecarloVisible = isMonteCarloVisible();
|
||||||
if (isMontecarloVisible) {
|
if (isMontecarloVisible) {
|
||||||
monteCarloTab = MonteCarloTabCreator.create(mode,
|
monteCarloTab = MonteCarloTabCreator.create(mode,
|
||||||
|
|
@ -334,6 +372,8 @@ public class MultipleTabsPlannerController implements Composer,
|
||||||
tabsConfiguration.add(visibleOnlyAtOrderMode(monteCarloTab));
|
tabsConfiguration.add(visibleOnlyAtOrderMode(monteCarloTab));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tabsConfiguration.add(tabWithNameReloading(logsTab, typeChanged));
|
||||||
|
|
||||||
return tabsConfiguration;
|
return tabsConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -467,6 +507,7 @@ public class MultipleTabsPlannerController implements Composer,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void goToCompanyScheduling() {
|
public void goToCompanyScheduling() {
|
||||||
|
LogsController.goToGlobalMode();
|
||||||
getTabsRegistry().show(planningTab);
|
getTabsRegistry().show(planningTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -541,6 +582,7 @@ public class MultipleTabsPlannerController implements Composer,
|
||||||
}
|
}
|
||||||
|
|
||||||
private IBeforeShowAction changeModeTo(final Order order) {
|
private IBeforeShowAction changeModeTo(final Order order) {
|
||||||
|
logsController.goToOrderMode(order);
|
||||||
return new IBeforeShowAction() {
|
return new IBeforeShowAction() {
|
||||||
@Override
|
@Override
|
||||||
public void doAction() {
|
public void doAction() {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* This file is part of LibrePlan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 Igalia, S.L.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*//*
|
||||||
|
|
||||||
|
|
||||||
|
package org.libreplan.web.users.services;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.libreplan.business.common.IAdHocTransactionService;
|
||||||
|
import org.libreplan.business.common.IOnTransaction;
|
||||||
|
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||||
|
import org.libreplan.business.users.daos.IOrderAuthorizationDAO;
|
||||||
|
import org.libreplan.business.users.daos.IUserDAO;
|
||||||
|
import org.libreplan.business.users.entities.User;
|
||||||
|
import org.libreplan.business.users.entities.UserRole;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.Authentication;
|
||||||
|
import org.springframework.security.ui.TargetUrlResolverImpl;
|
||||||
|
import org.springframework.security.ui.savedrequest.SavedRequest;
|
||||||
|
import org.springframework.security.userdetails.UserDetails;
|
||||||
|
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Determines the URL for authenticated users depending on if user is bound or
|
||||||
|
* not to any resource.<br />
|
||||||
|
*
|
||||||
|
* If the user is bound to a resource then the target URL will be the user
|
||||||
|
* dashboard.
|
||||||
|
*
|
||||||
|
* @author Manuel Rego Casasnovas <mrego@igalia.com>
|
||||||
|
*//*
|
||||||
|
|
||||||
|
public class CustomTargetUrlResolver extends TargetUrlResolverImpl {
|
||||||
|
|
||||||
|
public final static String USER_DASHBOARD_URL = "/myaccount/userDashboard.zul";
|
||||||
|
|
||||||
|
public static final String PLANNING_URL = "/planner/index.zul";
|
||||||
|
|
||||||
|
public static final String SETTINGS_URL = "/myaccount/settings.zul";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IUserDAO userDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IOrderAuthorizationDAO orderAuthorizationDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAdHocTransactionService transactionServiceDAO;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String determineTargetUrl(SavedRequest savedRequest,
|
||||||
|
HttpServletRequest currentRequest, final Authentication auth) {
|
||||||
|
if (isUserInRole(auth, UserRole.ROLE_SUPERUSER.name())) {
|
||||||
|
return super.determineTargetUrl(savedRequest, currentRequest, auth);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUserInRole(auth, UserRole.ROLE_BOUND_USER.name())) {
|
||||||
|
return USER_DASHBOARD_URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUserInRole(auth, UserRole.ROLE_PLANNING.name())) {
|
||||||
|
return PLANNING_URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean userOrItsProfilesHaveAnyAuthorization = transactionServiceDAO
|
||||||
|
.runOnReadOnlyTransaction(new IOnTransaction<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean execute() {
|
||||||
|
try {
|
||||||
|
UserDetails userDetails = (UserDetails) auth.getPrincipal();
|
||||||
|
User user = userDAO.findByLoginName(userDetails.getUsername());
|
||||||
|
user.getProfiles().size();
|
||||||
|
return orderAuthorizationDAO
|
||||||
|
.userOrItsProfilesHaveAnyAuthorization(user);
|
||||||
|
} catch (InstanceNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (userOrItsProfilesHaveAnyAuthorization) {
|
||||||
|
return PLANNING_URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SETTINGS_URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isUserInRole(Authentication auth, String role) {
|
||||||
|
if ((auth == null) || (auth.getPrincipal() == null)
|
||||||
|
|| (auth.getAuthorities() == null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < auth.getAuthorities().length; i++) {
|
||||||
|
if (role.equals(auth.getAuthorities()[i].getAuthority())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
@ -1077,6 +1077,19 @@ span.perspective, span.perspective-active {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.perspective.logs-global .z-button-cm {
|
||||||
|
background-image: url(../img/ico_logs-global.png);
|
||||||
|
}
|
||||||
|
.perspective-active.logs-global .z-button-cm {
|
||||||
|
background-image: url(../img/ico_logs-global.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.perspective.logs-order .z-button-cm {
|
||||||
|
background-image: url(../img/ico_logs-order.png);
|
||||||
|
}
|
||||||
|
.perspective-active.logs-order .z-button-cm {
|
||||||
|
background-image: url(../img/ico_logs-order.png);
|
||||||
|
}
|
||||||
|
|
||||||
.perspectives-column {
|
.perspectives-column {
|
||||||
display:none;
|
display:none;
|
||||||
|
|
|
||||||
BIN
libreplan-webapp/src/main/webapp/common/img/cabecera.jpg
Normal file
BIN
libreplan-webapp/src/main/webapp/common/img/cabecera.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.7 KiB |
BIN
libreplan-webapp/src/main/webapp/common/img/ico_logs-global.png
Normal file
BIN
libreplan-webapp/src/main/webapp/common/img/ico_logs-global.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
BIN
libreplan-webapp/src/main/webapp/common/img/ico_logs-order.png
Normal file
BIN
libreplan-webapp/src/main/webapp/common/img/ico_logs-order.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
BIN
libreplan-webapp/src/main/webapp/common/img/logo.gif
Normal file
BIN
libreplan-webapp/src/main/webapp/common/img/logo.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.3 KiB |
BIN
libreplan-webapp/src/main/webapp/common/img/logo2.gif
Normal file
BIN
libreplan-webapp/src/main/webapp/common/img/logo2.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.1 KiB |
169
libreplan-webapp/src/main/webapp/logs/_editIssueLog.zul
Normal file
169
libreplan-webapp/src/main/webapp/logs/_editIssueLog.zul
Normal file
|
|
@ -0,0 +1,169 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<window id="editWindow">
|
||||||
|
<caption id="caption" sclass="caption-title" />
|
||||||
|
<grid id="issueLogGrid">
|
||||||
|
<columns>
|
||||||
|
<column width="160px" />
|
||||||
|
<column/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Issue number')}" />
|
||||||
|
<textbox id="issueNumberTextBox" width="605px"
|
||||||
|
value="@{issueLogController.issueLog.code}" disabled="true"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Project')}" />
|
||||||
|
<bandboxSearch id="bdProjectIssueLog" widthBandbox="610px" widthListbox="610px"
|
||||||
|
constraint="no empty:${i18n:_('cannot be empty')}"
|
||||||
|
finder="OrderBandboxFinder"
|
||||||
|
model="@{issueLogController.orders}"
|
||||||
|
selectedElement="@{issueLogController.issueLog.order}"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Type and status')}" />
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column width="80px"/>
|
||||||
|
<column width="235px"/>
|
||||||
|
<column width="60px"/>
|
||||||
|
<column width="235px"/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Type')}" />
|
||||||
|
<listbox id="listIssueLogType" mold="select" rows="1" width="230px"
|
||||||
|
model="@{issueLogController.issueTypeEnum}"
|
||||||
|
selectedItem="@{issueLogController.issueLog.type}"
|
||||||
|
itemRenderer="@{issueLogController.issueTypeRenderer}" />
|
||||||
|
|
||||||
|
<label value="${i18n:_('Status')}" />
|
||||||
|
<listbox id="listIssueLogStatus" mold="select" rows="1" width="230px"
|
||||||
|
model="@{issueLogController.issueStatusEnum}"
|
||||||
|
selectedItem="@{issueLogController.issueLog.status}"
|
||||||
|
itemRenderer="@{issueLogController.issueStatusRenderer}" />
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Creation info')}" />
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column width="80px"/>
|
||||||
|
<column width="120px"/>
|
||||||
|
<column width="80px"/>
|
||||||
|
<column width="330px"/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Date raised')}" />
|
||||||
|
<datebox id="dateRaisedBox" width="110px"
|
||||||
|
constraint="no empty:${i18n:_('cannot be empty')}"
|
||||||
|
value="@{issueLogController.dateRaised}" />
|
||||||
|
|
||||||
|
<label value="${i18n:_('Created by')}" />
|
||||||
|
<bandboxSearch id="bdUserIssueLog" widthBandbox="320px" widthListbox="340px"
|
||||||
|
finder="UserBandboxFinder"
|
||||||
|
model="@{issueLogController.users}"
|
||||||
|
selectedElement="@{issueLogController.issueLog.createdBy}"/>
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Description')}" />
|
||||||
|
<textbox id="descriptionNameTextBox" width="605px" rows="4"
|
||||||
|
value="@{issueLogController.issueLog.description}"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Categories')}" />
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column width="150px"/>
|
||||||
|
<column width="155px"/>
|
||||||
|
<column width="150px"/>
|
||||||
|
<column width="155px"/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Priority')}" />
|
||||||
|
<listbox id="listIssueLogPriority" mold="select" rows="1" width="150px"
|
||||||
|
model="@{issueLogController.lowMediumHighEnum}"
|
||||||
|
selectedItem="@{issueLogController.issueLog.priority}"
|
||||||
|
itemRenderer="@{issueLogController.lowMediumHighEnumRenderer}" />
|
||||||
|
|
||||||
|
<label value="${i18n:_('Severity')}"/>
|
||||||
|
<listbox id="listIssueLogSeverity" mold="select" rows="1" width="150px"
|
||||||
|
model="@{issueLogController.lowMediumHighEnum}"
|
||||||
|
selectedItem="@{issueLogController.issueLog.severity}"
|
||||||
|
itemRenderer="@{issueLogController.lowMediumHighEnumRenderer}" />
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Assigned to')}" />
|
||||||
|
<textbox id="assignedToTextBox" width="605px"
|
||||||
|
value="@{issueLogController.issueLog.assignedTo}"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Timing')}" />
|
||||||
|
<hbox>
|
||||||
|
<grid id="timing">
|
||||||
|
<columns>
|
||||||
|
<column width="150px"/>
|
||||||
|
<column width="155px"/>
|
||||||
|
<column width="150px"/>
|
||||||
|
<column width="155px"/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Deadline')}"/>
|
||||||
|
<datebox id="deadline" width="145px"
|
||||||
|
value="@{issueLogController.deadline}" />
|
||||||
|
|
||||||
|
<label value="${i18n:_('Date resolved')}" />
|
||||||
|
<datebox id="dateResolved" width="145px"
|
||||||
|
value="@{issueLogController.dateResolved}" />
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</hbox>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Notes')}" />
|
||||||
|
<textbox value="@{issueLogController.issueLog.notes}" width="605px" rows="8" multiline="true" />
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
<!-- Control buttons -->
|
||||||
|
<button onClick="issueLogController.saveAndExit()"
|
||||||
|
label="${i18n:_('Save')}"
|
||||||
|
sclass="save-button global-action" />
|
||||||
|
<button onClick="issueLogController.saveAndContinue()"
|
||||||
|
label="${i18n:_('Save and Continue')}"
|
||||||
|
sclass="save-button global-action" />
|
||||||
|
<button onClick="issueLogController.cancelForm()"
|
||||||
|
label="${i18n:_('Cancel')}"
|
||||||
|
sclass="cancel-button global-action" />
|
||||||
|
</window>
|
||||||
153
libreplan-webapp/src/main/webapp/logs/_editRiskLog.zul
Normal file
153
libreplan-webapp/src/main/webapp/logs/_editRiskLog.zul
Normal file
|
|
@ -0,0 +1,153 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<window id="editWindow" height="100%">
|
||||||
|
<caption id="caption" sclass="caption-title" />
|
||||||
|
<grid id="riskLogGrid" >
|
||||||
|
<columns>
|
||||||
|
<column width="160px" />
|
||||||
|
<column/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Code')}" />
|
||||||
|
<textbox id="riskNumberTextBox" width="605px"
|
||||||
|
value="@{riskLogController.riskLog.code}" disabled="true"/>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Project')}" />
|
||||||
|
<bandboxSearch id="bdProjectRiskLog" widthBandbox="610px" widthListbox="610px"
|
||||||
|
constraint="no empty:${i18n:_('cannot be empty')}"
|
||||||
|
finder="OrderBandboxFinder"
|
||||||
|
model="@{riskLogController.orders}"
|
||||||
|
selectedElement="@{riskLogController.riskLog.order}"/>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Status')}" />
|
||||||
|
<textbox value="@{riskLogController.riskLog.status}" width="605px" rows="1" multiline="false" />
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Estimations')}" />
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column width="80px"/>
|
||||||
|
<column width="140px"/>
|
||||||
|
<column width="60px"/>
|
||||||
|
<column width="140px"/>
|
||||||
|
<column width="80px"/>
|
||||||
|
<column width="110px"/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Probability')}" />
|
||||||
|
<listbox id="listRiskLogProbability" mold="select" rows="1" width="135px"
|
||||||
|
model="@{riskLogController.lowMediumHighEnums}"
|
||||||
|
selectedItem="@{riskLogController.riskLog.probability}"
|
||||||
|
itemRenderer="@{riskLogController.lowMediumHighEnumRenderer}" />
|
||||||
|
|
||||||
|
<label value="${i18n:_('Impact')}" />
|
||||||
|
<listbox id="listRiskLogImpact" mold="select" rows="1" width="135px"
|
||||||
|
model="@{riskLogController.lowMediumHighEnums}"
|
||||||
|
selectedItem="@{riskLogController.riskLog.impact}"
|
||||||
|
itemRenderer="@{riskLogController.lowMediumHighEnumRenderer}" />
|
||||||
|
|
||||||
|
<label value="${i18n:_('Risk score')}" />
|
||||||
|
<textbox value="@{riskLogController.riskLog.riskScore}" width="95px" rows="1" disabled="true" />
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Creation info')}" />
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column width="80px"/>
|
||||||
|
<column width="120px"/>
|
||||||
|
<column width="80px"/>
|
||||||
|
<column width="330px"/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Date created')}" />
|
||||||
|
<datebox id="dateCreatedBox" width="110px"
|
||||||
|
constraint="no empty:${i18n:_('cannot be empty')}"
|
||||||
|
value="@{riskLogController.dateCreated}" />
|
||||||
|
|
||||||
|
<label value="${i18n:_('Created by')}" />
|
||||||
|
<bandboxSearch id="bdUserRiskLog" widthBandbox="320px" widthListbox="340px"
|
||||||
|
finder="UserBandboxFinder"
|
||||||
|
model="@{riskLogController.users}"
|
||||||
|
selectedElement="@{riskLogController.riskLog.createdBy}"/>
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Description')}" />
|
||||||
|
<textbox id="descriptionNameTextBox" width="605px" rows="3"
|
||||||
|
value="@{riskLogController.riskLog.description}"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Counter measures (CM)')}" />
|
||||||
|
<textbox id="counterMeasuresTextbox" width="605px" rows="1"
|
||||||
|
value="@{riskLogController.riskLog.counterMeasures}"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Risk Score After CM')}" />
|
||||||
|
<listbox id="listRiskScores" mold="select" rows="1" width="135px"
|
||||||
|
model="@{riskLogController.riskScoreStatesEnums}"
|
||||||
|
selectedItem="@{riskLogController.riskLog.scoreAfterCM}"
|
||||||
|
itemRenderer="@{riskLogController.riskScoreStatesEnumRenderer}" />/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Contingency')}" />
|
||||||
|
<textbox id="contingencyBox" width="605px" rows="3"
|
||||||
|
value="@{riskLogController.riskLog.contingency}"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Responsible')}" />
|
||||||
|
<textbox id="responsibleBox" width="605px" rows="1"
|
||||||
|
value="@{riskLogController.riskLog.responsible}"/>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Action When')}" />
|
||||||
|
<datebox id="ActionWhenDateBox" width="110px"
|
||||||
|
constraint="no empty:${i18n:_('cannot be empty')}"
|
||||||
|
value="@{riskLogController.actionWhen}" />
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<label value="${i18n:_('Notes')}" />
|
||||||
|
<textbox value="@{riskLogController.riskLog.notes}" width="605px" rows="3" multiline="true" />
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
<!-- Control buttons -->
|
||||||
|
<button onClick="riskLogController.saveAndExit()"
|
||||||
|
label="${i18n:_('Save')}"
|
||||||
|
sclass="save-button global-action" />
|
||||||
|
<button onClick="riskLogController.saveAndContinue()"
|
||||||
|
label="${i18n:_('Save and Continue')}"
|
||||||
|
sclass="save-button global-action" />
|
||||||
|
<button onClick="riskLogController.cancelForm()"
|
||||||
|
label="${i18n:_('Cancel')}"
|
||||||
|
sclass="cancel-button global-action" />
|
||||||
|
</window>
|
||||||
42
libreplan-webapp/src/main/webapp/logs/_listIssueLog.zul
Normal file
42
libreplan-webapp/src/main/webapp/logs/_listIssueLog.zul
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
<window id="listWindow">
|
||||||
|
<grid id="listIssueLog" model="@{issueLogController.issueLogs}" mold="paging"
|
||||||
|
pageSize="15" span="0" sizedByContent="false"
|
||||||
|
rowRenderer="@{issueLogController.issueLogsRowRenderer}">
|
||||||
|
<columns sizable="true">
|
||||||
|
<column label="${i18n:_('Code')}" sort="auto(lower(code))" />
|
||||||
|
<column label="${i18n:_('Projectname')}" visible="@{logsController.projectNameVisibility}" sort="auto(lower(order))" />
|
||||||
|
<column label="${i18n:_('Type')}" sort="auto(lower(type))"/>
|
||||||
|
<column label="${i18n:_('Status')}" sort="auto(lower(status))"/>
|
||||||
|
<column label="${i18n:_('Description')}" sort="auto(lower(description))"/>
|
||||||
|
<column label="${i18n:_('Priority')}" sort="auto(lower(priority))"/>
|
||||||
|
<column label="${i18n:_('Severity')}" sort="auto(lower(severity))"/>
|
||||||
|
<column label="${i18n:_('Date raised')}" sort="auto(lower(dateRaised))"/>
|
||||||
|
<column label="${i18n:_('Created By')}" sort="auto(lower(createdBy))" hflex="min" />
|
||||||
|
<column label="${i18n:_('Assigned To')}" sort="auto(lower(assignedTo))"/>
|
||||||
|
<column label="${i18n:_('Deadline')}" sort="auto(lower(deadline))"/>
|
||||||
|
<column label="${i18n:_('Date Resolved')}" sort="auto(lower(dateResolved))"/>
|
||||||
|
<column label="${i18n:_('Notes')}" sort="auto(lower(notes))"/>
|
||||||
|
<column label="${i18n:_('Operations')}" sclass="operations" hflex="min"/>
|
||||||
|
</columns>
|
||||||
|
</grid>
|
||||||
|
<button id="show_create_form" onClick='issueLogController.goToCreateForm()'
|
||||||
|
label="${i18n:_('Create')}" sclass="create-button global-action"/>
|
||||||
|
</window>
|
||||||
44
libreplan-webapp/src/main/webapp/logs/_listRiskLog.zul
Normal file
44
libreplan-webapp/src/main/webapp/logs/_listRiskLog.zul
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
<window id="listWindow">
|
||||||
|
<grid id="listRiskLog" model="@{riskLogController.riskLogs}" mold="paging"
|
||||||
|
pageSize="15" span="0" sizedByContent="false"
|
||||||
|
rowRenderer="@{riskLogController.riskLogsRowRenderer}">
|
||||||
|
<columns sizable="true">
|
||||||
|
<column label="${i18n:_('Code')}" sort="auto(lower(code))" />
|
||||||
|
<column label="${i18n:_('Projectname')}" visible="@{logsController.projectNameVisibility}" sort="auto(lower(order))" />
|
||||||
|
<column label="${i18n:_('Probability')}" sort="auto(lower(probability))"/>
|
||||||
|
<column label="${i18n:_('Impact')}" sort="auto(lower(impact))"/>
|
||||||
|
<column label="${i18n:_('Risk score')}" sort="auto"/>
|
||||||
|
<column label="${i18n:_('Status')}" sort="auto(lower(status))"/>
|
||||||
|
<column label="${i18n:_('Description')}" sort="auto(lower(code))"/>
|
||||||
|
<column label="${i18n:_('Date created')}" sclass="date" hflex="min" sort="auto(lower(dateCreated))"/>
|
||||||
|
<column label="${i18n:_('CreatedBy')}" sort="auto(lower(createdBy))"/>
|
||||||
|
<column label="${i18n:_('Counter measures')}" sort="auto(lower(counterMeasures))"/>
|
||||||
|
<column label="${i18n:_('New risk score')}" sort="auto"/>
|
||||||
|
<column label="${i18n:_('Contingency')}" sort="auto"/>
|
||||||
|
<column label="${i18n:_('Responsible')}" sort="auto"/>
|
||||||
|
<column label="${i18n:_('ActionWhen')}" sclass="date" hflex="min" sort="auto(lower(actionWhen))"/>
|
||||||
|
<column label="${i18n:_('Notes')}" hflex="min" sort="auto"/>
|
||||||
|
<column label="${i18n:_('Operations')}" sclass="operations" hflex="min"/>
|
||||||
|
</columns>
|
||||||
|
</grid>
|
||||||
|
<button id="show_create_form" onClick='riskLogController.goToCreateForm()'
|
||||||
|
label="${i18n:_('Create')}" sclass="create-button global-action"/>
|
||||||
|
</window>
|
||||||
62
libreplan-webapp/src/main/webapp/logs/_logs.zul
Normal file
62
libreplan-webapp/src/main/webapp/logs/_logs.zul
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<?taglib uri="/WEB-INF/tld/i18n.tld" prefix="i18n"?>
|
||||||
|
<?component name="listIssueLogs" inline="true" macroURI="issue_log.zul"?>
|
||||||
|
<?component name="listRiskLogs" inline="true" macroURI="risk_log.zul"?>
|
||||||
|
|
||||||
|
<zk>
|
||||||
|
<zscript><![CDATA[
|
||||||
|
logsController = arg.get("logsController");
|
||||||
|
]]>
|
||||||
|
</zscript>
|
||||||
|
|
||||||
|
<div self="@{define(content)}" height="100%" style="overflow:visible">
|
||||||
|
<style src="/dashboard/css/dashboard.css" dynamic="true" />
|
||||||
|
|
||||||
|
<div height="30px" sclass="toolbar-box">
|
||||||
|
<hbox id="logsFilter" visible="false" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<window self="@{define(content)}" id="logWindow" apply="${logsController}" vflex="1">
|
||||||
|
<borderlayout sclass="orderslayout" height="100%">
|
||||||
|
<center border="0" class="orderslayout-area">
|
||||||
|
<tabbox id="tabboxLog">
|
||||||
|
<tabs>
|
||||||
|
<tab id="tabIssueLogs" label="${i18n:_('Issue logs')}" selected="true"
|
||||||
|
onSelect = "logsController.setupIssueLogController();"/>
|
||||||
|
<tab id="tabRiskLogs" label="${i18n:_('Risk logs')}"
|
||||||
|
onSelect = "logsController.setupRiskLogController();"/>
|
||||||
|
</tabs>
|
||||||
|
<tabpanels>
|
||||||
|
<tabpanel sclass="orderelements-tab" id="tabpanelLog">
|
||||||
|
<listIssueLogs id="issueLogs" fulfill="tabIssueLogs.onSelect"/>
|
||||||
|
</tabpanel>
|
||||||
|
<tabpanel sclass="orderelements-tab" id="tabpanelLog2">
|
||||||
|
<listRiskLogs id="riskLogs" fulfill="tabRiskLogs.onSelect"/>
|
||||||
|
</tabpanel>
|
||||||
|
</tabpanels>
|
||||||
|
</tabbox>
|
||||||
|
</center>
|
||||||
|
</borderlayout>
|
||||||
|
</window>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</zk>
|
||||||
28
libreplan-webapp/src/main/webapp/logs/_logsFilter.zul
Normal file
28
libreplan-webapp/src/main/webapp/logs/_logsFilter.zul
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<hbox align="center" sclass="filtering-area">
|
||||||
|
<label value="${i18n:_('Name')}"
|
||||||
|
tooltiptext="${i18n:_('Select required issue/risk name and press filter button')}"/>
|
||||||
|
<textbox id="filterName" width="100px" onChange="logsFilterController.onApplyFilter()" />
|
||||||
|
|
||||||
|
<button mold="trendy" image="/common/img/ico_filter.png" style="margin-top: -4px"
|
||||||
|
tooltiptext="${i18n:_('Apply filtering to issues')}"
|
||||||
|
onClick="logsFilterController.onApplyFilter()"/>
|
||||||
|
</hbox>
|
||||||
33
libreplan-webapp/src/main/webapp/logs/issue_log.zul
Normal file
33
libreplan-webapp/src/main/webapp/logs/issue_log.zul
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
<?link rel="stylesheet" type="text/css" href="/common/css/libreplan.css"?>
|
||||||
|
<?link rel="stylesheet" type="text/css" href="/common/css/libreplan_zk.css"?>
|
||||||
|
<?taglib uri="/WEB-INF/tld/i18n.tld" prefix="i18n"?>
|
||||||
|
|
||||||
|
<?component name="list" inline="true" macroURI="_listIssueLog.zul"?>
|
||||||
|
<?component name="edit" inline="true" macroURI="_editIssueLog.zul"?>
|
||||||
|
|
||||||
|
<zk>
|
||||||
|
<window self="@{define(content)}" id="issueLogWindow" apply="org.libreplan.web.logs.IssueLogCRUDController">
|
||||||
|
<vbox id="messagesContainer" />
|
||||||
|
<list id="listWindow" />
|
||||||
|
<edit id="editWindow" />
|
||||||
|
</window>
|
||||||
|
</zk>
|
||||||
|
|
||||||
33
libreplan-webapp/src/main/webapp/logs/risk_log.zul
Normal file
33
libreplan-webapp/src/main/webapp/logs/risk_log.zul
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
<!--
|
||||||
|
This file is part of LibrePlan
|
||||||
|
|
||||||
|
Copyright (C) 2013 St. Antoniusziekenhuis
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
-->
|
||||||
|
<?link rel="stylesheet" type="text/css" href="/common/css/libreplan.css"?>
|
||||||
|
<?link rel="stylesheet" type="text/css" href="/common/css/libreplan_zk.css"?>
|
||||||
|
<?taglib uri="/WEB-INF/tld/i18n.tld" prefix="i18n"?>
|
||||||
|
|
||||||
|
<?component name="list" inline="true" macroURI="_listRiskLog.zul"?>
|
||||||
|
<?component name="edit" inline="true" macroURI="_editRiskLog.zul"?>
|
||||||
|
|
||||||
|
<zk>
|
||||||
|
<window self="@{define(content)}" id="riskLogWindow" apply="${org.libreplan.web.logs.riskLogCRUDController}" >
|
||||||
|
<vbox id="messagesContainer" />
|
||||||
|
<list id="listWindow" />
|
||||||
|
<edit id="editWindow" />
|
||||||
|
</window>
|
||||||
|
</zk>
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue