Compare commits

...

4 Commits

2 changed files with 31 additions and 10 deletions

View File

@ -16,7 +16,7 @@
let warn_already_used = false;
let w = null;
let gradesP = null;
let mean = 0;
let stats = {"mean": 0, "min": 999, "max": 0};
$: w = data.work;
$: refresh_submission(data.work);
@ -34,8 +34,10 @@
let sum = 0;
for (const grade of grades) {
sum += grade.score;
if (stats.min > grade.score) stats.min = grade.score;
if (stats.max < grade.score) stats.max = grade.score;
}
mean = sum / grades.length;
stats.mean = sum / grades.length;
});
}
</script>
@ -52,8 +54,10 @@
<SurveyBadge class="ms-2" survey={w} />
</div>
{#if $user && $user.is_admin && edit}
<WorkAdmin work={w} on:saved={() => edit = false} />
{#if $user && $user.is_admin && (edit || w.endAvailability() < Date.now())}
{#if edit}
<WorkAdmin work={w} on:saved={() => edit = false} />
{/if}
{#if w.description}
<hr>
@ -62,7 +66,12 @@
<hr>
<div class="d-flex justify-content-between align-items-center">
<h3 class="mt-3">Notes</h3>
<h3 class="mt-3">
Notes
<small class="text-muted">
{#if stats.mean > 0}(moyenne&nbsp;: {Math.round(stats.mean*100)/100}, min&nbsp;: {stats.min}, max&nbsp;: {stats.max}){/if}
</small>
</h3>
<button
class="btn btn-light"
on:click={() => refresh_grades(w)}
@ -77,14 +86,13 @@
<span>Chargement des notes &hellip;</span>
</div>
{:then grades}
<p>
<table class="table table-hover table-striped table-sm mb-0">
<thead>
<tr>
<th>Login</th>
<th>
Note
{#if mean > 0}(moyenne&nbsp;: {Math.round(mean*100)/100}){/if}
</th>
<th>Note</th>
<th>Commentaire</th>
<th>Date de la note</th>
</tr>
@ -115,7 +123,7 @@
<button
class="btn btn-sm btn-danger mx-1"
title="Supprimer la note"
on:click={() => { grade.delete(); refresh_grades(w); }}
on:click={() => { grade.delete().then(() => refresh_grades(w)); }}
>
<i class="bi bi-trash"></i>
</button>

View File

@ -472,6 +472,19 @@ func (u *User) GetMyWorkGrade(w *Work) (g WorkGrade, err error) {
}
func (w *Work) AddGrade(grade WorkGrade) error {
u := User{Id: grade.IdUser}
// Search a previous record
g, err := u.GetMyWorkGrade(w)
if err != nil && err != sql.ErrNoRows {
return err
} else if err == nil {
_, err = g.Delete()
if err != nil {
return err
}
}
return w.AddGrades([]WorkGrade{grade})
}