package hu.sch.web.kp.admin; import hu.sch.domain.enums.EntrantType; import hu.sch.domain.Semester; import hu.sch.domain.enums.ValuationPeriod; import hu.sch.services.PointHistoryManagerLocal; import hu.sch.services.ValuationManagerLocal; import hu.sch.services.exceptions.NoSuchAttributeException; import hu.sch.web.PhoenixApplication; import hu.sch.web.kp.KorokPage; import hu.sch.web.kp.svie.SvieGroupMgmt; import hu.sch.web.kp.svie.SvieUserMgmt; import hu.sch.web.wicket.components.customlinks.CsvExportForKfbLink; import hu.sch.web.wicket.components.customlinks.CsvReportLink; import hu.sch.web.wicket.util.ByteArrayResourceStream; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import javax.inject.Inject; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.form.*; import org.apache.wicket.markup.html.form.validation.AbstractFormValidator; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.validation.validator.RangeValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author aldaris */ public class EditSettings extends KorokPage { private static Logger logger = LoggerFactory.getLogger(EditSettings.class); @Inject private PointHistoryManagerLocal pointHistoryManager; public EditSettings() { //Jogosultságellenőrzés if (!(isCurrentUserJETI() || isCurrentUserSVIE() || isCurrentUserAdmin())) { getSession().error("Nincs jogod a megadott művelethez"); throw new RestartResponseException(getApplication().getHomePage()); } setHeaderLabelText("Adminisztráció"); JetiFragment jetiFragment = new JetiFragment("jetifragment", "jetipanel"); SvieFragment svieFragment = new SvieFragment("sviefragment", "sviepanel"); KirDevFragment kirDevFragment = new KirDevFragment("kirdevfragment", "kirdevpanel"); jetiFragment.setVisible(false); svieFragment.setVisible(false); kirDevFragment.setVisible(false); add(jetiFragment, svieFragment, kirDevFragment); if (isCurrentUserJETI()) { jetiFragment.setVisible(true); } if (isCurrentUserSVIE()) { svieFragment.setVisible(true); } if (isCurrentUserAdmin()) { kirDevFragment.setVisible(true); } } private class JetiFragment extends Fragment { @Inject protected ValuationManagerLocal valuationManager; private Semester semester; private ValuationPeriod valuationPeriod; private ValuationPeriod oldValuationPeriod; public ValuationPeriod getValuationPeriod() { return valuationPeriod; } public final void setValuationPeriod(ValuationPeriod period) { this.valuationPeriod = period; } public Semester getSemester() { return semester; } /** * Összeállítja a letölthető export fájlnevét a következő mezőkkel: * <pre>vir_[entrant]-[sem1st]-[sem2nd]-[osz|tavasz]-[ev]-[honap]-[nap].csv</pre> * * @param entrant belépő típusa * @return */ private String getExportFileName(final EntrantType entrant) { StringBuilder sb = new StringBuilder("vir_"); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); sb.append(entrant.toString()).append("-"); sb.append(semester.getFirstYear().toString()).append("-"); sb.append(semester.getSecondYear().toString()).append("-"); if (semester.isAutumn()) { sb.append("osz"); } else { sb.append("tavasz"); } sb.append("-"); sb.append(sdf.format(date)); sb.append(".csv"); return sb.toString(); } public JetiFragment(String id, String markupId) { super(id, markupId, null, null); try { semester = systemManager.getSzemeszter(); } catch (NoSuchAttributeException e) { semester = new Semester(); } oldValuationPeriod = systemManager.getErtekelesIdoszak(); setValuationPeriod(oldValuationPeriod); Form<Semester> beallitasForm = new Form<Semester>("settingsForm") { @Override public void onSubmit() { try { systemManager.setSzemeszter(getSemester()); systemManager.setErtekelesIdoszak(getValuationPeriod()); if (hasValuationPeriodChanged() && getValuationPeriod() == ValuationPeriod.NINCSERTEKELES) { pointHistoryManager.generateForSemesterAsync(getSemester()); } getSession().info(getLocalizer().getString("info.BeallitasokMentve", this)); } catch (Exception e) { getSession().error(getLocalizer().getString("err.BeallitasokFailed", this)); logger.error("Error while saving settings.", e); } finally { oldValuationPeriod = getValuationPeriod(); } } }; beallitasForm.setModel(new CompoundPropertyModel<Semester>(semester)); final TextField<Integer> firstYear = new TextField<Integer>("firstYear"); beallitasForm.add(firstYear.add(new RangeValidator<Integer>(2000, 2030))); final TextField<Integer> secondYear = new TextField<Integer>("secondYear"); beallitasForm.add(secondYear.add(new RangeValidator<Integer>(2000, 2030))); beallitasForm.add(new CheckBox("isAutumn")); beallitasForm.add(new AbstractFormValidator() { @Override public FormComponent<?>[] getDependentFormComponents() { return new FormComponent[]{firstYear, secondYear}; } @Override public void validate(Form<?> form) { if (Integer.parseInt(firstYear.getValue()) + 1 != Integer.parseInt(secondYear.getValue())) { error(firstYear, "err.SzemeszterEvKulonbseg"); } } }); DropDownChoice<ValuationPeriod> ddc1 = new DropDownChoice<ValuationPeriod>("periodSelector", Arrays.asList(ValuationPeriod.values())); ddc1.setRequired(true); ddc1.setModel(new PropertyModel<ValuationPeriod>(this, "valuationPeriod")); ddc1.setChoiceRenderer(new IChoiceRenderer<ValuationPeriod>() { @Override public Object getDisplayValue(ValuationPeriod object) { return getLocalizer().getString("ertekelesidoszak." + object.toString(), getParent()); } @Override public String getIdValue(ValuationPeriod object, int index) { return object.toString(); } }); beallitasForm.add(ddc1); add(beallitasForm); // exportok kérése // ismétlődés nélkül, neptun kóddal, elsődleges körrel, indoklással, email címmel // x vagy annál több kb-t kapott emberek listája (x állítható) final RequiredTextField<Integer> howMuchKbInput = new RequiredTextField<Integer>("howMuchKbInput", Model.of(1), Integer.class); Form<Void> howMuchKbExportForm = new Form<Void>("howMuchKbExportForm") { @Override public void onSubmit() { exportEntrantsAsCSV(getExportFileName(EntrantType.KB), EntrantType.KB, howMuchKbInput.getConvertedInput()); } }; howMuchKbInput.add(new RangeValidator<Integer>(1, 30)); howMuchKbExportForm.add(howMuchKbInput); add(howMuchKbExportForm); // áb-s lista add(new Link<Void>("givenAbListExportLink") { @Override public void onClick() { exportEntrantsAsCSV(getExportFileName(EntrantType.AB), EntrantType.AB, 1); } }); } private void exportEntrantsAsCSV(final String fileName, final EntrantType entrantType, final Integer minEntrantNum) { try { String content = valuationManager.findApprovedEntrantsForExport( semester, entrantType, minEntrantNum); IResourceStream resourceStream = new ByteArrayResourceStream( content.getBytes("UTF-8"), "text/csv"); getRequestCycle().scheduleRequestHandlerAfterCurrent(new ResourceStreamRequestHandler(resourceStream, fileName)); } catch (Exception ex) { getSession().error(getLocalizer().getString("err.export", this)); logger.error("Error while generating CSV export about " + entrantType.toString() + "s with " + minEntrantNum + " min value", ex); } } private boolean hasValuationPeriodChanged() { return oldValuationPeriod != getValuationPeriod(); } } private static class SvieFragment extends Fragment { public SvieFragment(String id, String markupId) { super(id, markupId, null, null); add(new BookmarkablePageLink<SvieUserMgmt>("userMgmt", SvieUserMgmt.class)); add(new BookmarkablePageLink<SvieGroupMgmt>("groupMgmt", SvieGroupMgmt.class)); add(new CsvReportLink("csvReport")); } } private class KirDevFragment extends Fragment { private boolean newbieTime = systemManager.getNewbieTime(); public KirDevFragment(String id, String markupId) { super(id, markupId, null, null); add(new BookmarkablePageLink<CreateGroup>("createGroup", CreateGroup.class)); add(new BookmarkablePageLink<CreateNewPerson>("createPerson", CreateNewPerson.class)); add(new CsvExportForKfbLink("csvExport")); Form<Void> form = new Form<Void>("kirdevForm", new CompoundPropertyModel(this)) { @Override protected void onSubmit() { systemManager.setNewbieTime(newbieTime); ((PhoenixApplication) getApplication()).setNewbieTime(newbieTime); getSession().info(getLocalizer().getString("info.BeallitasokMentve", this)); } }; CheckBox newbieTimeCB = new CheckBox("newbieTime"); form.add(newbieTimeCB); add(form); } } }