package hu.sch.web.kp.valuation.request.point; import hu.sch.domain.user.User; import hu.sch.domain.*; import hu.sch.services.GroupManagerLocal; import hu.sch.services.MembershipManagerLocal; import hu.sch.services.ValuationManagerLocal; import hu.sch.services.exceptions.valuation.AlreadyModifiedException; 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.TinyMCEContainer; 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.form.TextField; 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.model.PropertyModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.IValidator; import org.apache.wicket.validation.ValidationError; import org.apache.wicket.validation.validator.RangeValidator; /** * * @author hege * @author messo */ public class PointRequestEditor extends Panel { @Inject ValuationManagerLocal valuationManager; @Inject private MembershipManagerLocal membershipManager; @Inject private GroupManagerLocal groupManager; public PointRequestEditor(String id, final Valuation val) { super(id); final List<PointRequest> requestList = prepareRequests(val); final Long valuationId = val.getId(); // Űrlap létrehozása Form<Valuation> pointRequestsForm = new Form<Valuation>("pointRequestsForm", new Model<Valuation>(val)) { @Override protected void onSubmit() { final Valuation valuation = getModelObject(); try { Valuation v = valuationManager.updateValuation(valuation); // pontok tárolása v = valuationManager.updatePointRequests(v, requestList); getSession().info(getLocalizer().getString("info.PontIgenylesMentve", this)); 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 pontokon is!"); setResponsePage(ValuationDetails.class, new PageParameters().add("id", valuation.getId())); } } }; pointRequestsForm.add(new KeepAliveBehavior()); // Bevitelhez táblázat létrehozása ListView<PointRequest> listView = new ListView<PointRequest>("requestList", requestList) { @Override protected void populateItem(ListItem<PointRequest> item) { final PointRequest pontIgeny = item.getModelObject(); item.setModel(new CompoundPropertyModel<PointRequest>(pontIgeny)); item.add(new Label("user.fullName")); item.add(new Label("user.nickName")); Membership ms = membershipManager.findMembership(val.getGroupId(), item.getModelObject().getUserId()); item.add(new SvieMembershipDetailsIcon("user.svie", ms)); TextField<Integer> pont = new TextField<Integer>("point"); //csoportfüggő validátor hozzácsatolása //itt muszáj engedni a nullát, mert lehet olyan ember a listában, aki nem kap pontot (0-át kap) if (val.getGroupId().longValue() == Group.SCH_QPA) { pont.add(RangeValidator.range(0, 100)); } else { pont.add(RangeValidator.range(0, 50)); } //olyan validátor, ami akkor dob hibát ha 0 és 5 pont között adott meg pont.add(new IValidator<Integer>() { @Override public void validate(IValidatable<Integer> arg0) { final Integer point = arg0.getValue(); if (0 < point && point < 5) { arg0.error(new ValidationError().addKey("err.MinimumPoint") .setVariable("user_name", pontIgeny.getUser().getFullName())); } } }); item.add(pont); } }; listView.setReuseItems(true); pointRequestsForm.add(listView); final TinyMCEContainer tinyMce = new TinyMCEContainer("principle", new PropertyModel<String>(val, "principle"), true); pointRequestsForm.add(tinyMce); add(pointRequestsForm); } private List<PointRequest> prepareRequests(final Valuation ert) { final List<User> members = groupManager.findActiveMembers(ert.getGroupId()); final List<PointRequest> pointRequests = valuationManager.findPontIgenyekForErtekeles(ert.getId()); if (pointRequests.isEmpty()) { for (User member : members) { pointRequests.add(new PointRequest(member, 0)); } } else { //in case of exitsing request, we need merge if group members are changed Requests.cleanOldBoysFromRequests(pointRequests, members); addMissingRequests(pointRequests, members); //requests.add(new PointRequest(member, 0)); } return pointRequests; } /** * Add missing pointrequest to new active members. (In case of members * changed between pointrequests) * * @param requests * @param actualMembers */ public void addMissingRequests(final List<PointRequest> requests, final List<User> actualMembers) { final Set<User> usersHasRequest = new HashSet<User>(requests.size()); for (PointRequest request : requests) { usersHasRequest.add(request.getUser()); } boolean needReorder = false; for (User member : actualMembers) { if (!usersHasRequest.contains(member)) { requests.add(new PointRequest(member, 0)); needReorder = true; } } if (needReorder) { Collections.sort(requests); } } }