package hu.sch.web.kp.consider;
import hu.sch.domain.enums.ValuationPeriod;
import hu.sch.domain.enums.ValuationStatus;
import hu.sch.domain.user.User;
import hu.sch.domain.*;
import hu.sch.services.ValuationManagerLocal;
import hu.sch.web.kp.KorokPage;
import hu.sch.web.kp.group.GroupHierarchy;
import hu.sch.web.kp.valuation.ValuationDetails;
import hu.sch.web.kp.valuation.message.ValuationMessages;
import hu.sch.web.kp.valuation.request.entrant.EntrantRequests;
import hu.sch.web.kp.valuation.request.point.PointRequests;
import hu.sch.web.wicket.behaviors.KeepAliveBehavior;
import hu.sch.web.wicket.components.choosers.ValuationStatusChooser;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
/**
*
* @author hege
*/
//TODO
public class ConsiderPage extends KorokPage {
@Inject
private ValuationManagerLocal valuationManager;
Map<Long, ConsideredValuation> underConsidering = new HashMap<Long, ConsideredValuation>();
public Map<Long, ConsideredValuation> getUnderConsidering() {
return underConsidering;
}
public void setUnderConsidering(Map<Long, ConsideredValuation> underConsidering) {
this.underConsidering = underConsidering;
}
public ConsiderPage() {
// jogosultság ellenőrzés
if (!isCurrentUserJETI()) {
getSession().error("Nincs jogod a megadott művelethez");
throw new RestartResponseException(GroupHierarchy.class);
}
// időszak ellenőrzés
if (systemManager.getErtekelesIdoszak() != ValuationPeriod.ERTEKELESELBIRALAS) {
getSession().error("Nincs elbírálási időszak!");
throw new RestartResponseException(GroupHierarchy.class);
}
setHeaderLabelText("Leadott értékelések elbírálása");
add(new Label("semester", getSemester().toString()));
IDataProvider<ValuationStatistic> dp = new ValuationStatisticDataProvider(
valuationManager.findValuationStatisticForSemester());
final User user = getUser();
Form form = new Form("considerForm") {
@Override
protected void onSubmit() {
List<ConsideredValuation> list = new ArrayList<ConsideredValuation>();
for (ConsideredValuation consideredValuation : getUnderConsidering().values()) {
//if ((elbiraltertekeles.getPointStatus().equals(ValuationStatus.ELBIRALATLAN) && (elbiraltertekele)
// Ha valtozott valamelyik belepokerelemhez vagy pontkerelemhez tartozo legordulo,
if ((consideredValuation.getPointStatus() != consideredValuation.getValuation().getPointStatus())
|| (consideredValuation.getEntrantStatus() != consideredValuation.getValuation().getEntrantStatus())) {
list.add(consideredValuation);
}
}
if (!hasError() && list.isEmpty()) {
error("Nem bíráltál el egy értékelést sem!");
}
if (!hasError()) {
setResponsePage(new ConsiderExplainPage(list));
}
}
};
form.add(new KeepAliveBehavior());
add(form);
form.add(new DataView<ValuationStatistic>("valuationList", dp) {
@Override
protected void populateItem(Item<ValuationStatistic> item) {
final Valuation val = item.getModelObject().getValuation();
ConsideredValuation cv = null;
if (!getUnderConsidering().containsKey(val.getId())) {
cv = new ConsideredValuation(val, val.getPointStatus(), val.getEntrantStatus(), user);
getUnderConsidering().put(val.getId(), cv);
} else {
cv = getUnderConsidering().get(val.getId());
}
Link valuationLink = new BookmarkablePageLink("valuationLink", ValuationDetails.class, new PageParameters().add("id", val.getId()));
valuationLink.add(new Label("valuation.group.name"));
item.add(valuationLink);
PageParameters params = new PageParameters().add("vid", val.getId());
Link givenKDOLink = new BookmarkablePageLink("givenKDOLink", EntrantRequests.class, params);
givenKDOLink.add(new Label("givenKDO"));
item.add(givenKDOLink);
Link givenKBLink = new BookmarkablePageLink("givenKBLink", EntrantRequests.class, params);
givenKBLink.add(new Label("givenKB"));
item.add(givenKBLink);
Link givenABLink = new BookmarkablePageLink("givenABLink", EntrantRequests.class, params);
givenABLink.add(new Label("givenAB"));
item.add(givenABLink);
Link pointLink = new BookmarkablePageLink("pointLink", PointRequests.class, params);
pointLink.add(new Label("averagePoint"));
item.add(pointLink);
Link summaPointLink = new BookmarkablePageLink("summaPointLink", PointRequests.class, params);
summaPointLink.add(new Label("summaPoint"));
item.add(summaPointLink);
item.add(ValuationMessages.getLink("messagesLink", val));
Component pointStatus = new ValuationStatusChooser("pointStatus");
Component entrantStatus = new ValuationStatusChooser("entrantStatus");
pointStatus.setVisible(!val.getPointStatus().equals(ValuationStatus.NINCS));
//if (belepoStatusz != null && ert != null && ert.getEntrantStatus() != null) { // null check always false
if (val.getEntrantStatus() != null) {
entrantStatus.setVisible(!val.getEntrantStatus().equals(ValuationStatus.NINCS));
}
pointStatus.setDefaultModel(new PropertyModel<ConsideredValuation>(cv, "pointStatus"));
entrantStatus.setDefaultModel(new PropertyModel<ConsideredValuation>(cv, "entrantStatus"));
item.add(pointStatus);
item.add(entrantStatus);
}
});
}
@SuppressWarnings("unused")
private class OrderByBorderImpl extends OrderByBorder {
public OrderByBorderImpl(String id, String property, ISortStateLocator stateLocator) {
super(id, property, stateLocator);
}
@Override
protected void onSortChanged() {
getUnderConsidering().clear();
}
}
}