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)
|
}
|