From 480af1ce982527570c7c598798a466c86fcee6e7 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Tue, 10 Jan 2023 08:25:45 +0000
Subject: [PATCH] fix #1991

Closes #1991

Merge request studip/studip!1299
---
 lib/classes/JsonApi/Routes/Courseware/Authority.php           | 2 +-
 lib/classes/JsonApi/Schemas/Courseware/Task.php               | 2 +-
 .../vue/components/courseware/CoursewareDashboardStudents.vue | 1 +
 .../vue/components/courseware/CoursewareDashboardTasks.vue    | 4 ++--
 4 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/lib/classes/JsonApi/Routes/Courseware/Authority.php b/lib/classes/JsonApi/Routes/Courseware/Authority.php
index 1c7c9034192..da1724af36b 100644
--- a/lib/classes/JsonApi/Routes/Courseware/Authority.php
+++ b/lib/classes/JsonApi/Routes/Courseware/Authority.php
@@ -328,7 +328,7 @@ class Authority
 
     public static function canDeleteTask(User $user, Task $resource): bool
     {
-        return self::canCreateTasks($user, $resource->structural_element);
+        return self::canCreateTasks($user, $resource->structural_element) && !$resource->userIsASolver($user);
     }
 
     public static function canCreateTaskFeedback(User $user, Task $resource): bool
diff --git a/lib/classes/JsonApi/Schemas/Courseware/Task.php b/lib/classes/JsonApi/Schemas/Courseware/Task.php
index 32d4a187b4d..a87d335b64e 100644
--- a/lib/classes/JsonApi/Schemas/Courseware/Task.php
+++ b/lib/classes/JsonApi/Schemas/Courseware/Task.php
@@ -33,7 +33,7 @@ class Task extends SchemaProvider
             'submission-date' => date('c', $resource['submission_date']),
             'submitted' => (bool) $resource['submitted'],
             'renewal' => empty($resource['renewal']) ? null : (string) $resource['renewal'],
-            'renewal-date' => $resource['renewal_date'] ? date('c', $resource['renewal_date']) : null,
+            'renewal-date' => date('c', $resource['renewal_date']),
             'mkdate' => date('c', $resource['mkdate']),
             'chdate' => date('c', $resource['chdate']),
         ];
diff --git a/resources/vue/components/courseware/CoursewareDashboardStudents.vue b/resources/vue/components/courseware/CoursewareDashboardStudents.vue
index 6ad27bfa25d..025ad745700 100644
--- a/resources/vue/components/courseware/CoursewareDashboardStudents.vue
+++ b/resources/vue/components/courseware/CoursewareDashboardStudents.vue
@@ -355,6 +355,7 @@ export default {
         },
         solveRenewalRequest(task) {
             this.currentDialogTask = _.cloneDeep(task);
+            this.currentDialogTask.attributes['renewal-date'] = new Date().toISOString();
             this.showRenewalDialog = true;
         },
         updateRenewal() {
diff --git a/resources/vue/components/courseware/CoursewareDashboardTasks.vue b/resources/vue/components/courseware/CoursewareDashboardTasks.vue
index 501fc47a56e..e1329baebb6 100644
--- a/resources/vue/components/courseware/CoursewareDashboardTasks.vue
+++ b/resources/vue/components/courseware/CoursewareDashboardTasks.vue
@@ -39,7 +39,7 @@
                     <td>
                         <a :href="getLinkToElement(element.id)">{{ element.attributes.title }}</a>
                     </td>
-                    <td>{{ task.attributes.progress.toFixed(2) }}%</td>
+                    <td>{{ task.attributes?.progress?.toFixed(2) || '-'}}%</td>
                     <td>{{ getReadableDate(task.attributes['submission-date']) }}</td>
                     <td>
                         <studip-icon v-if="task.attributes.submitted" shape="accept" role="status-green" />
@@ -198,7 +198,7 @@ export default {
             return menuItems;
         },
         async renewalRequest(task) {
-            let attributes = {};
+            let attributes = task.attributes;
             attributes.renewal = 'pending';
             await this.updateTask({
                 attributes: attributes,
-- 
GitLab