/*
* This file is part of LibrePlan
*
* Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
* Desenvolvemento Tecnolóxico de Galicia
* Copyright (C) 2010-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.orders;
import org.libreplan.business.expensesheet.entities.ExpenseSheetLine;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.business.reports.dtos.WorkReportLineDTO;
import org.libreplan.web.common.Util;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zkplus.spring.SpringUtil;
import org.zkoss.zul.Progressmeter;
import org.zkoss.zul.Vbox;
import java.math.BigDecimal;
import java.util.List;
/**
* Controller for show the assigned hours of the selected order element.
* <br />
*
* @author Susana Montes Pedreria <smontes@wirelessgalicia.com>
* @author Manuel Rego Casasnovas <rego@igalia.com>
*/
public class AssignedHoursToOrderElementController extends GenericForwardComposer {
private IAssignedHoursToOrderElementModel assignedHoursToOrderElementModel;
private IOrderElementModel orderElementModel;
private Vbox orderElementHours;
private Progressmeter hoursProgressBar;
private Progressmeter exceedHoursProgressBar;
private Progressmeter moneyCostProgressBar;
private Progressmeter exceedMoneyCostProgressBar;
public AssignedHoursToOrderElementController() {
if ( assignedHoursToOrderElementModel == null ) {
assignedHoursToOrderElementModel =
(IAssignedHoursToOrderElementModel) SpringUtil.getBean("assignedHoursToOrderElementModel");
}
if ( orderElementModel == null ) {
orderElementModel = (IOrderElementModel) SpringUtil.getBean("orderElementModel");
}
}
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
comp.setAttribute("assignedHoursToOrderElementController", this, true);
}
public List<WorkReportLineDTO> getWorkReportLines() {
return assignedHoursToOrderElementModel.getWorkReportLines();
}
public String getTotalAssignedDirectEffort() {
return assignedHoursToOrderElementModel.getAssignedDirectEffort().toFormattedString();
}
public String getTotalAssignedEffort() {
return assignedHoursToOrderElementModel.getTotalAssignedEffort().toFormattedString();
}
public String getTotalDirectExpenses() {
return assignedHoursToOrderElementModel.getTotalDirectExpenses();
}
public String getTotalIndirectExpenses() {
return assignedHoursToOrderElementModel.getTotalIndirectExpenses();
}
public String getTotalExpenses() {
return assignedHoursToOrderElementModel.getTotalExpenses();
}
public String getEffortChildren() {
return assignedHoursToOrderElementModel.getAssignedDirectEffortChildren().toFormattedString();
}
public String getEstimatedEffort() {
return assignedHoursToOrderElementModel.getEstimatedEffort().toFormattedString();
}
public int getProgressWork() {
return assignedHoursToOrderElementModel.getProgressWork();
}
public BigDecimal getBudget() {
return assignedHoursToOrderElementModel.getBudget();
}
public BigDecimal getResourcesBudget() {
return assignedHoursToOrderElementModel.getResourcesBudget();
}
public BigDecimal getCalculatedBudget() {
return assignedHoursToOrderElementModel.getCalculatedBudget();
}
public BigDecimal getMoneyCost() {
return assignedHoursToOrderElementModel.getMoneyCost();
}
public BigDecimal getCostOfHours() {
return assignedHoursToOrderElementModel.getCostOfHours();
}
public BigDecimal getCostOfExpenses() {
return assignedHoursToOrderElementModel.getCostOfExpenses();
}
public BigDecimal getMoneyCostPercentage() {
return assignedHoursToOrderElementModel.getMoneyCostPercentage();
}
public void openWindow(IOrderElementModel orderElementModel) {
setOrderElementModel(orderElementModel);
assignedHoursToOrderElementModel.initOrderElement(getOrderElement());
if (orderElementHours != null) {
Util.createBindingsFor(orderElementHours);
Util.reloadBindings(orderElementHours);
}
paintProgressBars();
}
void paintProgressBars() {
viewPercentage();
showMoneyCostPercentageBars();
}
public void setOrderElementModel(IOrderElementModel orderElementModel) {
this.orderElementModel = orderElementModel;
}
private OrderElement getOrderElement() {
return orderElementModel.getOrderElement();
}
/**
* This method shows the percentage of the imputed hours with respect to the estimated hours.
* If the hours imputed is greater that the hours estimated then show the exceed percentage of hours.
*/
private void viewPercentage() {
if (this.getProgressWork() > 100) {
hoursProgressBar.setValue(100);
exceedHoursProgressBar.setVisible(true);
String exceedValue = String.valueOf(getProgressWork() - 100);
exceedHoursProgressBar.setWidth(exceedValue + "px");
} else {
hoursProgressBar.setValue(getProgressWork());
exceedHoursProgressBar.setVisible(false);
}
}
private void showMoneyCostPercentageBars() {
BigDecimal moneyCostPercentage = getMoneyCostPercentage();
if (moneyCostPercentage.compareTo(new BigDecimal(100)) > 0) {
moneyCostProgressBar.setValue(100);
exceedMoneyCostProgressBar.setVisible(true);
exceedMoneyCostProgressBar.setWidth(moneyCostPercentage.subtract(new BigDecimal(100)).intValue() + "px");
} else {
moneyCostProgressBar.setValue(moneyCostPercentage.intValue());
exceedMoneyCostProgressBar.setVisible(false);
}
}
public List<ExpenseSheetLine> getExpenseSheetLines() {
return assignedHoursToOrderElementModel.getExpenseSheetLines();
}
public String getCurrencySymbol() {
return Util.getCurrencySymbol();
}
}