REST Service for POPCORN - ILIAS
alex
2025-11-17 3d646156c378c6182e55c673c118c23d53ff0a05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const _ = require("lodash")
 
/////////////////////////////////////////////////////////////////////////
 
module.exports = {
    alleAuswerten,
}
 
/////////////////////////////////////////////////////////////////////////
 
/**
 * Unterobjekte auswerten und LF kombinieren pro user
 * @param {[usr_id,login,firstname,lastname,obj_id,item_id,item_obj_id,status,status_changed]} data
 * @return {[usr_id,firstname,lastname,status,status_changed]}
 */
function alleAuswerten(data) {
    const grouped = _.groupBy(data, "usr_id")
    const ret = []
    for (const items of Object.values(grouped)) {
        // console.log(items)
        if (!items.length) continue
        const unterStatusse = items.map(it => it.status)
 
        const newStatus = auswerten(unterStatusse)
        const status_changed = _.max(items.map(u => u.status_changed))
 
        console.log({unterStatusse,newStatus,items})
 
        const {usr_id, login, firstname, lastname,} = items[0]
        const newItem = {
            usr_id, login, firstname, lastname, status: newStatus, status_changed
        }
        ret.push(newItem)
    }
    console.log(ret)
    return ret
}
 
function auswerten(unterStatusse) {
    // unter Status auswerten
    // 0 = noch nicht bearbeitet
    // 1 = in Bearbeitung
    // 2 = bestanden
    // 3 = nicht bestanden
 
    // Fall 1: keine Unterstatussse vorhanden -> 0
    if (!unterStatusse.length) {
        return 0
    }
 
    // Fall 2: eines nicht bestanden -> alles nicht bestanden // 0,1,2,3 -> 3
    if (unterStatusse.some(u => u === 3)) {
        return 3
    }
 
    // Fall 3: alle statusse gleich -> status // 0,0,0 1,1,1 2,2,2 3,3,3
    if (isAllSame(unterStatusse)) {
        return unterStatusse[0]
    }
 
    // Fall 4: wenn eines in Bearbeitung -> in Bearbeitung // 0,1,0 2,1,2
    if (unterStatusse.some(u => u === 1 || u === 2)) {
        return 1
    }
 
    // Fall 5: sonst 0
    return 0
}
 
function isAllSame(items) {
    if (!items.length) return false
    const first = items[0]
    return items.every(it => it === first)
}