package hu.sch.services; import hu.sch.domain.ConsideredValuation; import hu.sch.domain.EntrantRequest; import hu.sch.domain.enums.EntrantType; import hu.sch.domain.GivenPoint; import hu.sch.domain.Group; import hu.sch.domain.PointRequest; import hu.sch.domain.Semester; import hu.sch.domain.user.User; import hu.sch.domain.Valuation; import hu.sch.domain.ValuationData; import hu.sch.domain.ValuationMessage; import hu.sch.domain.ValuationStatistic; import hu.sch.domain.rest.ApprovedEntrant; import hu.sch.domain.rest.PointInfo; import hu.sch.services.exceptions.UserNotFoundException; import hu.sch.services.exceptions.valuation.AlreadyModifiedException; import hu.sch.services.exceptions.valuation.NoExplanationException; import hu.sch.services.exceptions.valuation.NothingChangedException; import java.util.Collection; import java.util.List; import javax.ejb.Local; /** * * @author hege * @author messo */ @Local public interface ValuationManagerLocal { /** * Új értékelés mentése * * @param ertekeles */ void createValuation(Valuation ertekeles); /** * Értékelés keresése csoporthoz, adott szemeszterben * @param csoport * @param szemeszter * @return Adott csoporthoz, szemeszterhez tartozó értékelés */ Valuation findLatestValuation(Group csoport, Semester szemeszter); /** * Értékelés keresés az ID-hez, úgy, hogy a kellő információkat is lekérjük mellé * @param valuationId * @return keresett értékelés */ Valuation findValuationForDetails(long valuationId); /** * Egy csoport összes értékelését keresi ki * * @param csoport * @return Csoporthoz tartozó értékelések listája */ List<Valuation> findLatestValuationsForGroup(Group csoport); List<Valuation> findApprovedValuations(Group group); /** * Az adott szemeszterben elbírálatlan értékelések megkeresése. * Elbírálatlan az értékelés, amiben vagy a pontigénylés vagy a * belépőigénylés elbírálatlan. * * @return Elbírálatlan értékelések statisztikája */ List<ValuationStatistic> findElbiralatlanErtekelesStatisztika(); /** * Megkeresi azokat a felhasználókat, akik kaptak a megadott belépőből az adott * szemeszterben és egy CSV-nek formázott Stringgel tér vissza * * @param semester * @param entrantType * @param minEntrantNum csak az ennyi vagy ennél több belépőt kapott emberek * szerepeljenek * @return azon felhasználókról export String, akik legalább <pre>mitEntrantNum</pre> * db adott belépőt kaptak a félévben */ String findApprovedEntrantsForExport(Semester semester, EntrantType entrantType, int mintEntrantNum); void considerValuations(Collection<ConsideredValuation> elbiralas) throws NoExplanationException, NothingChangedException, AlreadyModifiedException; void considerValuation(ConsideredValuation v) throws NoExplanationException, NothingChangedException, AlreadyModifiedException; Valuation updateValuation(Valuation valuation) throws AlreadyModifiedException; /** * Pontigényeket ment egy értékeléshez * Amennyiben a pontigények már léteztek, egyesével felülírja őket. * * @param valuation * @param igenyek * @return az értékelés, aminek a pontjait szerkesztettük, ha új verzió jött létre, akkor az */ Valuation updatePointRequests(Valuation valuation, List<PointRequest> igenyek) throws AlreadyModifiedException; /** * Új belépőigényeket ment egy értékeléshez * Amennyiben a belépőigények már léteztek, egyesével felülírja őket. * * @param valuation * @param igenyek * @return az értékelés, aminek a belépőit szerkesztettük, ha új verzió jött létre, akkor az */ Valuation updateEntrantRequests(Valuation valuation, List<EntrantRequest> igenyek) throws AlreadyModifiedException, NoExplanationException; /** * Üzenetek lekérése az adott csoport adott félévéhez tartozó értékeléséhez. * * @param group * @param semester * @return üzenetek listája */ List<ValuationMessage> getMessages(Group group, Semester semester); /** * Az előkészített üzenetet elmenti és értesítő emaileket küld ki. * * @param msg az üzenet, amit menteni szeretnénk */ void addNewMessage(ValuationMessage msg); /** * Új értékelés létrehozása az aktuális szemeszterben * * @param group Melyik csoporthoz adtak le értékelést * @param sender Az értékelés feladója * @param valuationText Szöveges értékelés * @param principle Pontozási elvek */ void addNewValuation(Group group, User sender, String valuationText, String principle); /** * Az aktuális szemeszterben leadhat-e új értékelést az adott csoport. * Leadhat, ha leadási időszak van és még nem adott le. * * @param group * @return Az adott kör leadhat-e értékelést */ boolean isErtekelesLeadhato(Group group); /** * Értékelést ad vissza ID alapján (de nem adja vissza az igényléseket és az üzeneteket) * * @param ertekelesId * @return ID-hoz tartozó értékelés */ Valuation findErtekelesById(Long ertekelesId); /** * Adott értékeléshez kapcsolódó belépőigényeket adja vissza * * @param ertekelesId * @return Értékeléshez tartozó belépőigények */ List<EntrantRequest> findBelepoIgenyekForErtekeles(Long ertekelesId); /** * Adott értékeléshez kapcsolódó pontigényeket adja vissza * * @param ertekelesId * @return Értékeléshez tartozó pontigények */ List<PointRequest> findPontIgenyekForErtekeles(Long ertekelesId); /** * Adott értékeléshez kapcsolódó pont és belépőigényeket adja vissza * * @param valuationId * @return Értékeléshez tartozó kombinált igények (pont és belépő) */ List<ValuationData> findRequestsForValuation(Long valuationId); List<ValuationData> findRequestsForUser(User u, Long groupId); /** * Az adott értékelésekhez kapcsolódó statisztikát adja vissza * (pontátlag, kiosztott belépők típusonként) * * @param ertekelesId * @return Értékelésekhez tartozó statisztika */ List<ValuationStatistic> getStatisztikaForErtekelesek(List<Long> ertekelesId); /** * Az adott értékeléshez kapcsolódó statisztikát adja vissza * (pontátlag, kiosztott belépők típusonként) * * @param valuationId az értékelés azonosítója * @return Értékeléshez tartozó statisztika */ ValuationStatistic getStatisticForValuation(Long valuationId); /** * Az adott szemeszterhez tartozó értékelésstatisztikát adja vissza * (pontátlag, összpontszám, belépők típusonként) * * @return értékelésekhez tartozó statisztikák listája */ List<ValuationStatistic> findValuationStatisticForSemester(); List<ValuationStatistic> findValuationStatisticForVersions(Group group, Semester semester); List<GivenPoint> getPointsForKfbExport(Semester semester); /** * Törli a csoporthoz és az adott félévhez tartozó értékeléseket (egy értékelés több verzióját). * Nem ajánlott csak teszteléshez használni, éles DB-n inkább találjunk ki erre valamit backupot. * * @param group * @param semester */ void deleteValuations(Group group, Semester semester); Long findLatestVersionsId(Group group, Semester semester); /** * Visszaadja egy adott uid-hez tartozó pontozásokat körre lebontva az aktuális * szemeszterre. * * @param uid A felhasználó azonosítója * @return A pontok listája */ List<PointInfo> getPointInfoForUid(String uid, Semester semester); /** * Visszaadja a neptunnal azonosított felhasználó adott félévben kapott belépőit. * * @param neptun * @param semester * @return * @throws UserNotFoundException */ List<ApprovedEntrant> getApprovedEntrants(final String neptun, final Semester semester) throws UserNotFoundException; }