|
91 | 91 | import org.sakaiproject.assignment.api.model.AssignmentSubmissionSubmitter;
|
92 | 92 | import org.sakaiproject.assignment.api.model.AssignmentSupplementItemAttachment;
|
93 | 93 | import org.sakaiproject.assignment.api.model.AssignmentSupplementItemService;
|
94 |
| -import org.sakaiproject.assignment.api.model.TimeSheetEntry; |
95 | 94 | import org.sakaiproject.assignment.api.persistence.AssignmentRepository;
|
96 | 95 | import org.sakaiproject.assignment.api.reminder.AssignmentDueReminderService;
|
97 | 96 | import org.sakaiproject.assignment.api.taggable.AssignmentActivityProducer;
|
|
167 | 166 | import org.sakaiproject.tasks.api.TaskService;
|
168 | 167 | import org.sakaiproject.time.api.TimeService;
|
169 | 168 | import org.sakaiproject.time.api.UserTimeService;
|
| 169 | +import org.sakaiproject.timesheet.api.TimeSheetEntry; |
| 170 | +import org.sakaiproject.timesheet.api.TimeSheetService; |
170 | 171 | import org.sakaiproject.tool.api.SessionManager;
|
171 | 172 | import org.sakaiproject.tool.api.Tool;
|
172 | 173 | import org.sakaiproject.tool.api.ToolManager;
|
@@ -245,13 +246,12 @@ public class AssignmentServiceImpl implements AssignmentService, EntityTransferr
|
245 | 246 | @Setter private UserDirectoryService userDirectoryService;
|
246 | 247 | @Resource private UserMessagingService userMessagingService;
|
247 | 248 | @Setter private UserTimeService userTimeService;
|
| 249 | + @Setter private TimeSheetService timeSheetService; |
248 | 250 |
|
249 | 251 | private boolean allowSubmitByInstructor;
|
250 | 252 | private boolean exposeContentReviewErrorsToUI;
|
251 | 253 | private boolean createGroupsOnImport;
|
252 | 254 |
|
253 |
| - private Pattern timesheetTimePattern; |
254 |
| - |
255 | 255 | private static ResourceLoader rb = new ResourceLoader("assignment");
|
256 | 256 |
|
257 | 257 | public void init() {
|
@@ -286,16 +286,11 @@ public void init() {
|
286 | 286 | userMessagingService.importTemplateFromResourceXmlFile("templates/releaseResubmission.xml", AssignmentConstants.TOOL_ID + ".releaseresubmission");
|
287 | 287 | userMessagingService.importTemplateFromResourceXmlFile("templates/submission.xml", AssignmentConstants.TOOL_ID + ".submission");
|
288 | 288 | userMessagingService.importTemplateFromResourceXmlFile("templates/dueReminder.xml", AssignmentConstants.TOOL_ID + ".duereminder");
|
289 |
| - |
290 |
| - timesheetTimePattern = Pattern.compile(serverConfigurationService.getString("assignment.timesheet.timePattern", SAK_PROP_ASSIGNMENT_TIMESHEET_TIME_PATTERN_DEFAULT)); |
291 | 289 | }
|
292 | 290 |
|
293 | 291 | @Override
|
294 | 292 | public boolean isTimeSheetEnabled(String siteId) {
|
295 |
| - List<String> timesheetConfig = serverConfigurationService.getStringList(SAK_PROP_ASSIGNMENT_TIMESHEET_SITES_ALLOWED, Collections.singletonList("none")); |
296 |
| - |
297 |
| - // TODO logic for determining whether this feature is enabled in the current site |
298 |
| - return Stream.of("all", siteId).filter(Objects::nonNull).anyMatch(timesheetConfig::contains); |
| 293 | + return timeSheetService.isTimeSheetEnabled(siteId); |
299 | 294 | }
|
300 | 295 |
|
301 | 296 | @Override
|
@@ -856,35 +851,48 @@ public Assignment addAssignment(String context) throws PermissionException {
|
856 | 851 | return assignment;
|
857 | 852 | }
|
858 | 853 |
|
859 |
| - @Override |
860 | 854 | @Transactional
|
861 |
| - public void newTimeSheetEntry(AssignmentSubmissionSubmitter submissionSubmitter, TimeSheetEntry timeSheetEntry) throws PermissionException { |
| 855 | + @Override |
| 856 | + public void saveTimeSheetEntry(AssignmentSubmissionSubmitter submissionSubmitter, TimeSheetEntry timeSheetEntry) throws PermissionException { |
862 | 857 | if (submissionSubmitter != null && timeSheetEntry != null) {
|
863 | 858 | AssignmentSubmission submission = submissionSubmitter.getSubmission();
|
864 | 859 | String siteId = AssignmentReferenceReckoner.reckoner().submission(submission).reckon().getContext();
|
865 | 860 | if (!allowAddSubmission(siteId)) {
|
866 | 861 | throw new PermissionException(sessionManager.getCurrentSessionUserId(), SECURE_ADD_ASSIGNMENT_SUBMISSION, null);
|
867 | 862 | }
|
868 |
| - assignmentRepository.newTimeSheetEntry(submissionSubmitter, timeSheetEntry); |
| 863 | + timeSheetEntry.setReference(AssignmentReferenceReckoner.reckoner().submission(submission).reckon().getReference()); |
| 864 | + timeSheetService.create(timeSheetEntry); |
869 | 865 | log.debug("Add time sheet entry for submitter: {}", submissionSubmitter);
|
870 | 866 | }
|
871 | 867 | }
|
872 | 868 |
|
873 |
| - @Override |
874 | 869 | @Transactional
|
| 870 | + @Override |
875 | 871 | public void deleteTimeSheetEntry(Long timeSheetEntryId) throws PermissionException {
|
876 |
| - TimeSheetEntry timeSheetEntry = getTimeSheetEntry(timeSheetEntryId); |
877 |
| - if (timeSheetEntry != null) { |
878 |
| - String siteId = AssignmentReferenceReckoner.reckoner().submission(timeSheetEntry.getAssignmentSubmissionSubmitter().getSubmission()).reckon().getContext(); |
879 |
| - if (!allowAddSubmission(siteId)) { |
880 |
| - throw new PermissionException(sessionManager.getCurrentSessionUserId(), SECURE_UPDATE_ASSIGNMENT_SUBMISSION, null); |
881 |
| - } |
882 |
| - assignmentRepository.deleteTimeSheetEntry(timeSheetEntryId); |
883 |
| - log.debug("Deleting time sheet entry: {}", timeSheetEntryId); |
| 872 | + String timeSheetEntryReference = getTimeSheetEntryReference(timeSheetEntryId); |
| 873 | + if (StringUtils.isNotBlank(timeSheetEntryReference)) { |
| 874 | + String siteId = AssignmentReferenceReckoner.reckoner().reference(timeSheetEntryReference).reckon().getContext(); |
| 875 | + if (!allowAddSubmission(siteId)) { |
| 876 | + throw new PermissionException(sessionManager.getCurrentSessionUserId(), SECURE_UPDATE_ASSIGNMENT_SUBMISSION, null); |
| 877 | + } |
| 878 | + timeSheetService.delete(timeSheetEntryId); |
| 879 | + log.debug("Deleting time sheet entry: {}", timeSheetEntryId); |
| 880 | + } else { |
| 881 | + log.warn("Attempted to delete time sheet entry: {} however it does not exist.", timeSheetEntryId); |
| 882 | + } |
| 883 | + } |
| 884 | + |
| 885 | + @Override |
| 886 | + public List<TimeSheetEntry> getTimeSheetEntries(AssignmentSubmissionSubmitter submissionSubmitter) { |
| 887 | + if (submissionSubmitter != null) { |
| 888 | + String reference = AssignmentReferenceReckoner.reckoner().submission(submissionSubmitter.getSubmission()).reckon().getReference(); |
| 889 | + return timeSheetService.getByReference(reference); |
884 | 890 | } else {
|
885 |
| - log.warn("Attempted to delete time sheet entry: {} however it does not exist.", timeSheetEntryId); |
| 891 | + // submission is null |
| 892 | + log.debug("SubmissionSubmitter is null"); |
| 893 | + return null; |
886 | 894 | }
|
887 |
| - } |
| 895 | + } |
888 | 896 |
|
889 | 897 | public String getTimeSpent(AssignmentSubmission submission) {
|
890 | 898 | return submission.getSubmitters().stream().findAny().get().getTimeSpent();
|
@@ -1725,23 +1733,9 @@ public AssignmentSubmission getSubmission(String submissionId) throws Permission
|
1725 | 1733 | return null;
|
1726 | 1734 | }
|
1727 | 1735 |
|
1728 |
| - @Override |
1729 |
| - public TimeSheetEntry getTimeSheetEntry(Long timeSheetId) throws PermissionException { |
1730 |
| - if (timeSheetId != null) { |
1731 |
| - TimeSheetEntry timeSheet = assignmentRepository.findTimeSheetEntry(timeSheetId); |
1732 |
| - if (timeSheet != null) { |
1733 |
| - String reference = AssignmentReferenceReckoner.reckoner().submission(timeSheet.getAssignmentSubmissionSubmitter().getSubmission()).reckon().getReference(); |
1734 |
| - if (allowGetSubmission(reference)) { |
1735 |
| - return timeSheet; |
1736 |
| - } else { |
1737 |
| - throw new PermissionException(sessionManager.getCurrentSessionUserId(), SECURE_ACCESS_ASSIGNMENT_SUBMISSION, reference); |
1738 |
| - } |
1739 |
| - } else { |
1740 |
| - // timesheet not found |
1741 |
| - log.debug("TimeSheet does not exist {}", timeSheetId); |
1742 |
| - } |
1743 |
| - } |
1744 |
| - return null; |
| 1736 | + private String getTimeSheetEntryReference(Long timeSheetId) { |
| 1737 | + return timeSheetService.getTimeSheetEntryReference(timeSheetId); |
| 1738 | + |
1745 | 1739 | }
|
1746 | 1740 |
|
1747 | 1741 | @Override
|
@@ -5002,7 +4996,33 @@ private List<MultiGroupRecord> usersInMultipleGroups(String siteId, Collection<S
|
5002 | 4996 | return dupes;
|
5003 | 4997 | }
|
5004 | 4998 |
|
5005 |
| - public boolean isValidTimesheetTime(String time) { |
5006 |
| - return timesheetTimePattern.matcher(time).matches(); |
| 4999 | + @Override |
| 5000 | + public boolean existsTimeSheetEntries(AssignmentSubmissionSubmitter asnSubmissionSubmitter) { |
| 5001 | + AssignmentSubmission submission = asnSubmissionSubmitter.getSubmission(); |
| 5002 | + String reference = AssignmentReferenceReckoner.reckoner().submission(submission).reckon().getReference(); |
| 5003 | + return timeSheetService.existsAny(reference); |
| 5004 | + } |
| 5005 | + |
| 5006 | + @Override |
| 5007 | + public boolean isValidTimeSheetTime(String time) { |
| 5008 | + return timeSheetService.isValidTimeSheetTime(time); |
| 5009 | + } |
| 5010 | + |
| 5011 | + @Override |
| 5012 | + public String getTotalTimeSheet(AssignmentSubmissionSubmitter asnSubmissionSubmitter) { |
| 5013 | + AssignmentSubmission submission = asnSubmissionSubmitter.getSubmission(); |
| 5014 | + String reference = AssignmentReferenceReckoner.reckoner().submission(submission).reckon().getReference(); |
| 5015 | + return timeSheetService.getTotalTimeSheet(reference); |
| 5016 | + } |
| 5017 | + |
| 5018 | + @Override |
| 5019 | + public Integer timeToInt(String time) { |
| 5020 | + return timeSheetService.timeToInt(time); |
5007 | 5021 | }
|
| 5022 | + |
| 5023 | + @Override |
| 5024 | + public String intToTime(int time) { |
| 5025 | + return timeSheetService.intToTime(time); |
| 5026 | + } |
| 5027 | + |
5008 | 5028 | }
|
0 commit comments