diff --git a/src/main/java/ru/ulstu/aspirant/repository/AspirantRepository.java b/src/main/java/ru/ulstu/aspirant/repository/AspirantRepository.java index 4c3f55b..d29b562 100644 --- a/src/main/java/ru/ulstu/aspirant/repository/AspirantRepository.java +++ b/src/main/java/ru/ulstu/aspirant/repository/AspirantRepository.java @@ -2,6 +2,8 @@ package ru.ulstu.aspirant.repository; import org.springframework.data.jpa.repository.JpaRepository; import ru.ulstu.aspirant.model.Aspirant; +import ru.ulstu.model.User; public interface AspirantRepository extends JpaRepository { + Aspirant findByUser(User user); } diff --git a/src/main/java/ru/ulstu/aspirant/service/AspirantService.java b/src/main/java/ru/ulstu/aspirant/service/AspirantService.java index 2b6014a..7e6d5eb 100644 --- a/src/main/java/ru/ulstu/aspirant/service/AspirantService.java +++ b/src/main/java/ru/ulstu/aspirant/service/AspirantService.java @@ -6,10 +6,10 @@ import org.springframework.stereotype.Service; import ru.ulstu.admin.model.AspirantForm; import ru.ulstu.aspirant.model.Aspirant; import ru.ulstu.aspirant.repository.AspirantRepository; -import ru.ulstu.indicator.model.Course; import ru.ulstu.indicator.model.Indicator; import ru.ulstu.indicator.service.IndicatorService; -import ru.ulstu.user.UserUtils; +import ru.ulstu.model.User; +import ru.ulstu.user.UserService; import java.util.List; @@ -17,11 +17,14 @@ import java.util.List; public class AspirantService { private final AspirantRepository aspirantRepository; private final IndicatorService indicatorService; + private final UserService userService; public AspirantService(AspirantRepository aspirantRepository, - IndicatorService indicatorService) { + IndicatorService indicatorService, + UserService userService) { this.aspirantRepository = aspirantRepository; this.indicatorService = indicatorService; + this.userService = userService; } public List getAspirants() { @@ -40,14 +43,12 @@ public class AspirantService { aspirantRepository.deleteById(aspirantForm.getId()); } - public Aspirant getAspirantByUser(String currentUserLogin) { - //return aspirantRepository.getAspirantByLogin(); - //TODO: read aspirant - return aspirantRepository.findAll().stream().findAny().orElse(new Aspirant("default", Course.FIRST)); + public Aspirant getAspirantByUser(User user) { + return aspirantRepository.findByUser(user); } public List getIndicatorsByCourse() { - Aspirant aspirant = getAspirantByUser(UserUtils.getCurrentUserLogin()); + Aspirant aspirant = getAspirantByUser(userService.getCurrentUser()); return indicatorService.getIndicatorsByCourse(aspirant.getCourse()); } diff --git a/src/main/java/ru/ulstu/report/controller/ReportController.java b/src/main/java/ru/ulstu/report/controller/ReportController.java new file mode 100644 index 0000000..9a977c2 --- /dev/null +++ b/src/main/java/ru/ulstu/report/controller/ReportController.java @@ -0,0 +1,40 @@ +package ru.ulstu.report.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import ru.ulstu.report.model.ReportListForm; +import ru.ulstu.report.service.ReportPeriodService; +import ru.ulstu.report.service.ReportService; + +@Controller +@RequestMapping("report") +public class ReportController { + private final ReportService reportService; + private final ReportPeriodService reportPeriodService; + + public ReportController(ReportService reportService, + ReportPeriodService reportPeriodService) { + this.reportService = reportService; + this.reportPeriodService = reportPeriodService; + } + + @GetMapping("reportList") + public String getReportPeriods(Model model) { + model.addAttribute("reportListForm", new ReportListForm()); + model.addAttribute("reportPeriods", reportPeriodService.getReportPeriods()); + model.addAttribute("canCreate", false); + return "report/reportList"; + } + + @PostMapping("reportList") + public String getReportPeriods(ReportListForm reportListForm, Model model) { + model.addAttribute("reportListForm", reportListForm); + model.addAttribute("reportPeriods", reportPeriodService.getReportPeriods()); + model.addAttribute("reports", reportService.getReports(reportListForm.getReportPeriod())); + model.addAttribute("canCreate", reportService.canCreateReport(reportListForm.getReportPeriod())); + return "report/reportList"; + } +} diff --git a/src/main/java/ru/ulstu/report/model/ReportListForm.java b/src/main/java/ru/ulstu/report/model/ReportListForm.java new file mode 100644 index 0000000..3dcde9e --- /dev/null +++ b/src/main/java/ru/ulstu/report/model/ReportListForm.java @@ -0,0 +1,13 @@ +package ru.ulstu.report.model; + +public class ReportListForm { + private ReportPeriod reportPeriod; + + public ReportPeriod getReportPeriod() { + return reportPeriod; + } + + public void setReportPeriod(ReportPeriod reportPeriod) { + this.reportPeriod = reportPeriod; + } +} diff --git a/src/main/java/ru/ulstu/report/repository/ReportRepository.java b/src/main/java/ru/ulstu/report/repository/ReportRepository.java index d66abf3..d28615f 100644 --- a/src/main/java/ru/ulstu/report/repository/ReportRepository.java +++ b/src/main/java/ru/ulstu/report/repository/ReportRepository.java @@ -3,13 +3,19 @@ package ru.ulstu.report.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import ru.ulstu.aspirant.model.Aspirant; import ru.ulstu.report.model.Report; +import ru.ulstu.report.model.ReportPeriod; import ru.ulstu.statistic.model.RatingItem; import java.util.List; public interface ReportRepository extends JpaRepository { + List findAllByReportPeriod(ReportPeriod reportPeriod); + + Report findByReportPeriodAndAspirant(ReportPeriod reportPeriod, Aspirant aspirant); + @Query("SELECT new ru.ulstu.statistic.model.RatingItem(r.aspirant, (SELECT cast(sum(rv.indicatorValue) AS Integer) FROM ReportValue rv WHERE rv MEMBER OF r.values)) FROM Report r JOIN r.reportPeriod rp WHERE rp.id = :reportPeriodId") List getRating(@Param("reportPeriodId") Integer reportPeriodId); } diff --git a/src/main/java/ru/ulstu/report/service/ReportService.java b/src/main/java/ru/ulstu/report/service/ReportService.java new file mode 100644 index 0000000..567b86c --- /dev/null +++ b/src/main/java/ru/ulstu/report/service/ReportService.java @@ -0,0 +1,35 @@ +package ru.ulstu.report.service; + +import org.springframework.stereotype.Service; +import ru.ulstu.aspirant.model.Aspirant; +import ru.ulstu.aspirant.service.AspirantService; +import ru.ulstu.report.model.Report; +import ru.ulstu.report.model.ReportPeriod; +import ru.ulstu.report.repository.ReportRepository; +import ru.ulstu.user.UserService; + +import java.util.List; + +@Service +public class ReportService { + private final ReportRepository reportRepository; + private final UserService userService; + private final AspirantService aspirantService; + + public ReportService(ReportRepository reportRepository, + UserService userService, + AspirantService aspirantService) { + this.reportRepository = reportRepository; + this.userService = userService; + this.aspirantService = aspirantService; + } + + public List getReports(ReportPeriod reportPeriod) { + return reportRepository.findAllByReportPeriod(reportPeriod); + } + + public boolean canCreateReport(ReportPeriod reportPeriod) { + Aspirant currentAspirant = aspirantService.getAspirantByUser(userService.getCurrentUser()); + return reportRepository.findByReportPeriodAndAspirant(reportPeriod, currentAspirant) == null; + } +} diff --git a/src/main/java/ru/ulstu/user/UserService.java b/src/main/java/ru/ulstu/user/UserService.java index 9634e54..98b419a 100644 --- a/src/main/java/ru/ulstu/user/UserService.java +++ b/src/main/java/ru/ulstu/user/UserService.java @@ -94,4 +94,8 @@ public class UserService implements UserDetailsService { public void initDefaultHead() { createDefaultUser("head", UserRoleConstants.HEAD); } + + public User getCurrentUser() { + return getUserByLogin(UserUtils.getCurrentUserLogin()); + } } diff --git a/src/main/resources/templates/default.html b/src/main/resources/templates/default.html index 0d3bae7..7f93ab9 100644 --- a/src/main/resources/templates/default.html +++ b/src/main/resources/templates/default.html @@ -37,7 +37,7 @@ aria-haspopup="true" aria-expanded="false">Аспиранту @@ -65,9 +65,9 @@ Список научных руководителей Список аспирантов Список периодов отчетности - Отчетность аспирантов Правила БРС Подтверждение БРС + Список отчетов Статистика по баллам Новости и заседания diff --git a/src/main/resources/templates/report/reportList.html b/src/main/resources/templates/report/reportList.html new file mode 100644 index 0000000..39f4f43 --- /dev/null +++ b/src/main/resources/templates/report/reportList.html @@ -0,0 +1,62 @@ + + +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Период отчетаАспирантДата созданияСтатус
+ + + Редактировать + +
+
+ \ No newline at end of file