Display number of items left to correct to admin on surveylist

This commit is contained in:
nemunaire 2022-11-19 17:22:50 +01:00
parent 1532ede587
commit 6a54315626
2 changed files with 59 additions and 4 deletions

View File

@ -80,7 +80,34 @@ func declareAPIAuthSurveysRoutes(router *gin.RouterGroup) {
} }
s := c.MustGet("survey").(*Survey) s := c.MustGet("survey").(*Survey)
if (s.Promo == u.Promo && s.Shown) || (u != nil && u.IsAdmin) { if u.IsAdmin {
questions, err := s.GetQuestions()
if err != nil {
log.Println("Unable to getQuestions:", err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to retrieve questions. Please try again later."})
return
}
itemCount := 0
itemCorrected := 0
for _, q := range questions {
res, err := q.GetResponses()
if err != nil {
log.Printf("Unable to GetResponses(qid=%d): %s", q.Id, err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during responses retrieval."})
return
}
for _, r := range res {
itemCount += 1
if r.TimeScored != nil && (r.TimeReported == nil || r.TimeScored.After(*r.TimeReported)) {
itemCorrected += 1
}
}
}
c.JSON(http.StatusOK, map[string]int{"count": itemCount, "corrected": itemCorrected})
} else if s.Promo == u.Promo && s.Shown {
score, err := s.GetScore(u) score, err := s.GetScore(u)
if err != nil { if err != nil {
log.Printf("Unable to GetScore(uid=%d;sid=%d): %s", u.Id, s.Id, err.Error()) log.Printf("Unable to GetScore(uid=%d;sid=%d): %s", u.Id, s.Id, err.Error())

View File

@ -40,7 +40,11 @@
<th>Intitulé</th> <th>Intitulé</th>
<th>Date</th> <th>Date</th>
{#if $user} {#if $user}
<th>Score</th> {#if $user.is_admin}
<th>À corriger</th>
{:else}
<th>Score</th>
{/if}
{/if} {/if}
</tr> </tr>
</thead> </thead>
@ -84,14 +88,38 @@
</td> </td>
{/if} {/if}
{#if $user} {#if $user}
{#if !survey.corrected} {#if !survey.corrected && !$user.is_admin}
<td>N/A</td> <td>N/A</td>
{:else} {:else}
<td> <td>
{#await getScore(survey)} {#await getScore(survey)}
<div class="spinner-border spinner-border-sm" role="status"></div> <div class="spinner-border spinner-border-sm" role="status"></div>
{:then score} {:then score}
{score.score} {#if score.count !== undefined}
<span
class:fw-bolder={score.count-score.corrected > 0}
class:badge={survey.corrected}
class:bg-danger={survey.corrected && score.count-score.corrected > 0}
class:bg-dark={survey.corrected && score.count-score.corrected <= 0}
title="{score.count-score.corrected}/{score.count}"
>
{#if score.count == 0 || survey.corrected}
{score.count-score.corrected}
{:else}
{Math.trunc((1-score.corrected/score.count)*100)}&nbsp;%
{/if}
</span>
{:else}
<span
class="badge"
class:bg-success={score.score >= 18}
class:bg-info={score.score < 18 && score.score >= 15}
class:bg-warning={score.score < 15 && score.score >= 9}
class:bg-danger={score.score < 9}
>
{score.score}
</span>
{/if}
{:catch error} {:catch error}
<i class="bi text-warning bi-exclamation-triangle-fill" title={error}></i> <i class="bi text-warning bi-exclamation-triangle-fill" title={error}></i>
{/await} {/await}