/*
* 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-2011 Igalia, S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.libreplan.web.orders;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.web.common.Util;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zkplus.spring.SpringUtil;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.Datebox;
import java.util.Date;
import static org.libreplan.web.I18nHelper._;
/**
* Controller for {@link OrderElement} details.
*
* @author Diego Pino García <dpino@igalia.com>
* @author Vova Perebykivskyi <vova@libreplan-enterprise.com>
*/
public class DetailsOrderElementController extends GenericForwardComposer {
private IOrderElementModel orderElementModel;
private Datebox initDate;
private Datebox deadline;
public DetailsOrderElementController() {
if ( orderElementModel == null ) {
orderElementModel = (IOrderElementModel) SpringUtil.getBean("orderElementModel");
}
}
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
comp.setAttribute("detailsController", this, true);
}
public void setOrderElementModel(IOrderElementModel orderElementModel) {
this.orderElementModel = orderElementModel;
}
public OrderElement getOrderElement() {
return orderElementModel.getOrderElement();
}
public void openWindow(IOrderElementModel model) {
setOrderElementModel(model);
deadline.setDisabled(isSubcontracted());
Util.reloadBindings(self);
}
public boolean isCodeAutogenerated() {
return orderElementModel.isCodeAutogenerated();
}
public boolean isContainer() {
return orderElementModel.getOrderElement() != null && !orderElementModel.getOrderElement().isLeaf();
}
private boolean isSubcontracted() {
return !(orderElementModel.getOrderElement() == null ||
orderElementModel.getOrderElement().getTaskSource() == null) &&
orderElementModel.getOrderElement().getTaskSource().getTask().isSubcontracted();
}
public String getMoneyFormat() {
return Util.getMoneyFormat();
}
public boolean isCodeDisabled() {
if ( isCodeAutogenerated() ) {
return true;
}
OrderElement orderElement = orderElementModel.getOrderElement();
return orderElement != null && orderElement.isJiraIssue();
}
/**
* Should be public!
* Used in _orderElementDetails.zul
*/
public Constraint checkConstraintStartDate() {
return new Constraint() {
@Override
public void validate(Component comp, Object value) throws WrongValueException {
Date startDate = (Date) value;
Date year2010 = new Date(1262296800000L);
boolean startBefore2010 = (startDate != null) && startDate.before(year2010);
if ( startBefore2010 ) {
initDate.setValue(null);
getOrderElement().setInitDate(null);
throw new WrongValueException(comp, _("Must be after 2010!"));
}
}
};
}
/**
* Should be public!
* Used in _orderElementDetails.zul
*/
public Constraint checkConstraintFinishDate() {
return new Constraint() {
@Override
public void validate(Component comp, Object value) throws WrongValueException {
Date finishDate = (Date) value;
boolean deadlineBeforeStart = (finishDate != null) &&
(initDate.getValue() != null) &&
(finishDate.compareTo(initDate.getValue()) < 0);
if ( deadlineBeforeStart ) {
deadline.setValue(null);
getOrderElement().setDeadline(null);
throw new WrongValueException(comp, _("must be after starting date"));
}
}
};
}
}