/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package net.rrm.ehour.ui.manage.assignment;
import com.google.common.collect.Lists;
import net.rrm.ehour.domain.Customer;
import net.rrm.ehour.domain.Project;
import net.rrm.ehour.domain.ProjectAssignment;
import net.rrm.ehour.domain.User;
import net.rrm.ehour.ui.common.model.AdminBackingBeanImpl;
import net.rrm.ehour.util.EhourConstants;
import java.util.List;
/**
* Backing bean for project assignments
*/
public class AssignmentAdminBackingBean extends AdminBackingBeanImpl<ProjectAssignment> {
private static final long serialVersionUID = 487430742116953930L;
private ProjectAssignment projectAssignment;
private List<Project> selectedProjects;
private Customer customer;
private boolean infiniteStartDate;
private boolean infiniteEndDate;
public AssignmentAdminBackingBean() {
}
public AssignmentAdminBackingBean(ProjectAssignment assignment) {
projectAssignment = assignment;
this.customer = (assignment.getProject() != null) ? assignment.getProject().getCustomer() : null;
infiniteStartDate = assignment.getDateStart() == null;
infiniteEndDate = assignment.getDateEnd() == null;
}
public static AssignmentAdminBackingBean createAssignmentAdminBackingBean(User user) {
ProjectAssignment projectAssignment = new ProjectAssignment();
projectAssignment.setAssignmentType(EhourConstants.ASSIGNMENT_TYPE_DATE);
projectAssignment.setUser(user);
projectAssignment.setActive(true);
return new AssignmentAdminBackingBean(projectAssignment);
}
public static AssignmentAdminBackingBean createAssignmentAdminBackingBean(Project project) {
ProjectAssignment projectAssignment = new ProjectAssignment();
projectAssignment.setAssignmentType(EhourConstants.ASSIGNMENT_TYPE_DATE);
projectAssignment.setProject(project);
projectAssignment.setActive(true);
return new AssignmentAdminBackingBean(projectAssignment);
}
public void updateCustomerBasedOnSelectedProject() {
if (!isNewAssignment()) {
setCustomer(getProjectAssignment().getProject().getCustomer());
} else {
int selectedProjectsSize = selectedProjects.size();
if (selectedProjectsSize == 1) {
setCustomer(selectedProjects.get(0).getCustomer());
} else {
setCustomer(null);
}
}
}
public boolean isNewAssignment() {
return getProjectAssignment().isNew();
}
public List<ProjectAssignment> getProjectAssignmentsForSave() {
correctDatesInAssignment();
List<ProjectAssignment> assignments = Lists.newArrayList();
for (Project selectedProject : selectedProjects) {
assignments.add(ProjectAssignment.createProjectAssignment(projectAssignment, selectedProject));
}
return assignments;
}
public ProjectAssignment getProjectAssignmentForSave() {
correctDatesInAssignment();
return projectAssignment;
}
private void correctDatesInAssignment() {
if (isInfiniteStartDate()) {
projectAssignment.setDateStart(null);
}
if (isInfiniteEndDate()) {
projectAssignment.setDateEnd(null);
}
}
public User getUser() {
return projectAssignment.getUser();
}
public boolean isShowAllottedHours() {
return (projectAssignment.getAssignmentType() != null) && projectAssignment.getAssignmentType().isAllottedType();
}
public boolean isNotifyPmEnabled() {
return (projectAssignment.getProject() != null) && projectAssignment.getProject().getProjectManager() != null;
}
public boolean isShowOverrunHours() {
return (projectAssignment.getAssignmentType() != null) && projectAssignment.getAssignmentType().isFlexAllottedType();
}
public ProjectAssignment getProjectAssignment() {
return projectAssignment;
}
public void setProjectAssignment(ProjectAssignment projectAssignment) {
this.projectAssignment = projectAssignment;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public boolean isInfiniteStartDate() {
return infiniteStartDate;
}
public void setInfiniteStartDate(boolean infiniteStartDate) {
this.infiniteStartDate = infiniteStartDate;
}
public boolean isInfiniteEndDate() {
return infiniteEndDate;
}
public void setInfiniteEndDate(boolean infiniteEndDate) {
this.infiniteEndDate = infiniteEndDate;
}
public ProjectAssignment getDomainObject() {
return getProjectAssignment();
}
public List<Project> getSelectedProjects() {
return selectedProjects;
}
public void setSelectedProjects(List<Project> selectedProjects) {
this.selectedProjects = selectedProjects;
}
@Override
public boolean isDeletable() {
return projectAssignment != null && projectAssignment.isDeletable();
}
public boolean isBookable() {
return (projectAssignment != null && projectAssignment.isBookable()) || projectAssignment == null;
}
}