Compare commits
4 Commits
6cd3907dc3
...
107b17c11f
Author | SHA1 | Date | |
---|---|---|---|
107b17c11f | |||
51a311f0b9 | |||
0b192e4783 | |||
cc729227ce |
@ -16,7 +16,7 @@
|
|||||||
let warn_already_used = false;
|
let warn_already_used = false;
|
||||||
let w = null;
|
let w = null;
|
||||||
let gradesP = null;
|
let gradesP = null;
|
||||||
let mean = 0;
|
let stats = {"mean": 0, "min": 999, "max": 0};
|
||||||
|
|
||||||
$: w = data.work;
|
$: w = data.work;
|
||||||
$: refresh_submission(data.work);
|
$: refresh_submission(data.work);
|
||||||
@ -34,8 +34,10 @@
|
|||||||
let sum = 0;
|
let sum = 0;
|
||||||
for (const grade of grades) {
|
for (const grade of grades) {
|
||||||
sum += grade.score;
|
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>
|
</script>
|
||||||
@ -52,8 +54,10 @@
|
|||||||
<SurveyBadge class="ms-2" survey={w} />
|
<SurveyBadge class="ms-2" survey={w} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if $user && $user.is_admin && edit}
|
{#if $user && $user.is_admin && (edit || w.endAvailability() < Date.now())}
|
||||||
<WorkAdmin work={w} on:saved={() => edit = false} />
|
{#if edit}
|
||||||
|
<WorkAdmin work={w} on:saved={() => edit = false} />
|
||||||
|
{/if}
|
||||||
|
|
||||||
{#if w.description}
|
{#if w.description}
|
||||||
<hr>
|
<hr>
|
||||||
@ -62,7 +66,12 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
<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 : {Math.round(stats.mean*100)/100}, min : {stats.min}, max : {stats.max}){/if}
|
||||||
|
</small>
|
||||||
|
</h3>
|
||||||
<button
|
<button
|
||||||
class="btn btn-light"
|
class="btn btn-light"
|
||||||
on:click={() => refresh_grades(w)}
|
on:click={() => refresh_grades(w)}
|
||||||
@ -77,14 +86,13 @@
|
|||||||
<span>Chargement des notes …</span>
|
<span>Chargement des notes …</span>
|
||||||
</div>
|
</div>
|
||||||
{:then grades}
|
{:then grades}
|
||||||
|
<p>
|
||||||
|
|
||||||
<table class="table table-hover table-striped table-sm mb-0">
|
<table class="table table-hover table-striped table-sm mb-0">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Login</th>
|
<th>Login</th>
|
||||||
<th>
|
<th>Note</th>
|
||||||
Note
|
|
||||||
{#if mean > 0}(moyenne : {Math.round(mean*100)/100}){/if}
|
|
||||||
</th>
|
|
||||||
<th>Commentaire</th>
|
<th>Commentaire</th>
|
||||||
<th>Date de la note</th>
|
<th>Date de la note</th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -115,7 +123,7 @@
|
|||||||
<button
|
<button
|
||||||
class="btn btn-sm btn-danger mx-1"
|
class="btn btn-sm btn-danger mx-1"
|
||||||
title="Supprimer la note"
|
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>
|
<i class="bi bi-trash"></i>
|
||||||
</button>
|
</button>
|
||||||
|
13
works.go
13
works.go
@ -472,6 +472,19 @@ func (u *User) GetMyWorkGrade(w *Work) (g WorkGrade, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *Work) AddGrade(grade WorkGrade) 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})
|
return w.AddGrades([]WorkGrade{grade})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user