package hu.sch.web.kp.valuation.request.entrant; import hu.sch.domain.enums.EntrantType; import hu.sch.domain.user.User; import hu.sch.domain.*; import hu.sch.services.GroupManagerLocal; import hu.sch.services.MembershipManagerLocal; import hu.sch.services.UserManagerLocal; import hu.sch.services.ValuationManagerLocal; import hu.sch.services.exceptions.valuation.AlreadyModifiedException; import hu.sch.services.exceptions.valuation.NoExplanationException; import hu.sch.web.kp.valuation.ValuationDetails; import hu.sch.web.kp.valuation.request.Requests; import hu.sch.web.wicket.behaviors.KeepAliveBehavior; import hu.sch.web.wicket.components.SvieMembershipDetailsIcon; import hu.sch.web.wicket.components.choosers.EntrantTypeChooser; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; /** * * @author hege * @author messo */ public class EntrantRequestEditor extends Panel { @Inject ValuationManagerLocal valuationManager; @Inject UserManagerLocal userManager; @Inject private MembershipManagerLocal membershipManager; @Inject private GroupManagerLocal groupManager; public EntrantRequestEditor(String id, final Valuation ert) { super(id); final List<EntrantRequest> igenylista = igenyeketElokeszit(ert); Form<Valuation> igform = new Form<Valuation>("igenyekform", new Model<Valuation>(ert)) { @Override protected void onSubmit() { // Van-e olyan, amit indokolni kell final Valuation ert = getModelObject(); for (EntrantRequest belepoIgeny : igenylista) { if (belepoIgeny.getEntrantType() == EntrantType.AB || belepoIgeny.getEntrantType() == EntrantType.KB) { setResponsePage(new EntrantRequestExplanation(ert, igenylista)); return; } } try { Valuation v = valuationManager.updateEntrantRequests(ert, igenylista); getSession().info(getLocalizer().getString("info.BelepoIgenylesMentve", getParent())); setResponsePage(ValuationDetails.class, new PageParameters().add("id", v.getId())); } catch (AlreadyModifiedException ex) { getSession().error("Valaki már módosított az értékelésen, így lehet, hogy a belépőkön is!"); setResponsePage(ValuationDetails.class, new PageParameters().add("id", ert.getId())); } catch (NoExplanationException ex) { // ilyen elvileg itt nem köverkezhet be } } }; igform.add(new KeepAliveBehavior()); add(igform); igform.add(new ListView<EntrantRequest>("igenyek", igenylista) { @Override protected void populateItem(ListItem<EntrantRequest> item) { item.setDefaultModel(new CompoundPropertyModel<EntrantRequest>(item.getModelObject())); item.add(new Label("user.fullName")); item.add(new Label("user.nickName")); Membership ms = membershipManager.findMembership(ert.getGroupId(), item.getModelObject().getUserId()); item.add(new SvieMembershipDetailsIcon("user.svie", ms)); EntrantTypeChooser bt = new EntrantTypeChooser("entrantType"); bt.setRequired(true); item.add(bt); } }); } private List<EntrantRequest> igenyeketElokeszit(final Valuation ert) { final List<User> csoporttagok = groupManager.findActiveMembers(ert.getGroupId()); final List<EntrantRequest> igenyek = valuationManager.findBelepoIgenyekForErtekeles(ert.getId()); //tagok és igények összefésülése if (igenyek.isEmpty()) { for (User f : csoporttagok) { igenyek.add(new EntrantRequest(f, EntrantType.KDO)); } } else { //in case of exitsing request, we need merge if group members are changed Requests.cleanOldBoysFromRequests(igenyek, csoporttagok); addMissingRequests(igenyek, csoporttagok); } return igenyek; } /** * Add missing entrantrequest to new active members. (In case of members * changed between entrantrequests) * * @param requests * @param actualMembers */ public void addMissingRequests(final List<EntrantRequest> requests, final List<User> actualMembers) { final Set<User> usersHasRequest = new HashSet<User>(requests.size()); for (EntrantRequest request : requests) { usersHasRequest.add(request.getUser()); } boolean needReorder = false; for (User member : actualMembers) { if (!usersHasRequest.contains(member)) { requests.add(new EntrantRequest(member, EntrantType.KDO)); needReorder = true; } } if (needReorder) { Collections.sort(requests); } } }