| | |
| | | const mysql = require("mysql2/promise") |
| | | const dayjs = require("dayjs") |
| | | const _ = require("lodash") |
| | | |
| | | const log = require("../logger") |
| | | const searchLib = require("./search") |
| | |
| | | getKursTeilnehmer, |
| | | getSingleKursTeilnehmer, |
| | | getKursTeilnehmerCount, |
| | | |
| | | getKursLp, |
| | | getKursUnterobjektLp, |
| | | |
| | | getKursOffline, |
| | | setKursOffline, |
| | |
| | | return results |
| | | } |
| | | |
| | | async function getKursLp(obj_id) { |
| | | const {ref_id} = await getRefIdFromObjId(obj_id) |
| | | console.log(ref_id) |
| | | const teilnehmer = await getKursTeilnehmer(ref_id) |
| | | const tnUnter = await getKursUnterobjektLp(obj_id) |
| | | console.table(teilnehmer) |
| | | console.table(tnUnter) |
| | | |
| | | /** |
| | | * Die beiden Datensätze mergen |
| | | * |
| | | * |
| | | */ |
| | | |
| | | const idx = _.groupBy(tnUnter, "usr_id") |
| | | for (const tn of teilnehmer) { |
| | | delete tn.parent_id |
| | | delete tn.type |
| | | delete tn.active |
| | | |
| | | /** @type Array */ |
| | | const unter = idx[tn.usr_id] |
| | | if (!unter) continue |
| | | |
| | | /** |
| | | * wenn unter.status_changed neuer, wird unter tn.status_changed vorgezogen |
| | | * wenn unter.status neuer, überscheibt es tn.status |
| | | * tn.passed muss zurückgesetzt werden wenn tn.status überschrieben wird |
| | | */ |
| | | tn.status_overwrite = false |
| | | |
| | | // max unter status_changed finden |
| | | const unterStatusChanged = _.max(unter.map(u => u.status_changed)) |
| | | |
| | | // es muss nur überschrieben werden wenn das Unterdatum größer ist |
| | | if (unterStatusChanged > tn.status_changed) { |
| | | // unter Status auswerten |
| | | // 0 = noch nicht bearbeitet |
| | | // 1 = in Bearbeitung |
| | | // 2 = bestanden |
| | | // 3 = nicht bestanden |
| | | |
| | | /** @type Array */ |
| | | const unterStatusse = unter.map(u => u.status) |
| | | let newStatus = tn.status |
| | | const allSame = function () { |
| | | if (!unterStatusse.length) return false |
| | | const first = unterStatusse[0] |
| | | return unterStatusse.every(it => it === first) |
| | | }() |
| | | console.log({unterStatusse}) |
| | | // Fall 1: keine Unterstatussse vorhanden -> status vom Kurs |
| | | if (!unterStatusse.length) { |
| | | newStatus = tn.status |
| | | } |
| | | // Fall 2: eines nicht bestanden -> nicht bestanden // 0,1,2,3 -> 3 |
| | | if (unterStatusse.some(u => u === 3)) { |
| | | newStatus = 3 |
| | | } |
| | | // Fall 3: alle statusse gleich -> status // 0,0,0 1,1,1 2,2,2 3,3,3 |
| | | else if (allSame) { |
| | | newStatus = unterStatusse[0] |
| | | } |
| | | // Fall 4: wenn eines in Bearbeitung -> in Bearbeitung // 0,1,0 2,1,2 |
| | | else if (unterStatusse.some(u => u === 1)) { |
| | | newStatus = 1 |
| | | } |
| | | // Fall 5: sonst in Bearbeitung |
| | | else { |
| | | // newStatus = Math.max.apply(this, unterStatusse) |
| | | newStatus = 1 |
| | | } |
| | | tn.status_changed = unterStatusChanged |
| | | tn.status = newStatus |
| | | tn.status_overwrite = true |
| | | } |
| | | } |
| | | return teilnehmer |
| | | } |
| | | |
| | | async function getKursUnterobjektLp(obj_id) { |
| | | const pool = await poolP |
| | | const q = `SELECT ulc.obj_id, |
| | | ulc.item_id, |
| | | ulc.lpmode, |
| | | t.obj_id as item_obj_id, |
| | | ulm.usr_id, |
| | | ulm.status, |
| | | ulm.status_changed, |
| | | ulm.percentage, |
| | | ulm.completed |
| | | FROM ${database}.ut_lp_collections ulc |
| | | INNER JOIN ${database}.object_reference t ON t.ref_id = ulc.item_id |
| | | INNER JOIN ${database}.ut_lp_marks ulm ON ulm.obj_id = t.obj_id |
| | | WHERE ulc.obj_id = ${obj_id} # obj_id Kurs |
| | | AND ulc.active = 1 |
| | | AND ulc.lpmode = 5 # nur mode 5 |
| | | ` |
| | | const [results] = await pool.query(q) |
| | | return results |
| | | } |
| | | |
| | | |
| | | async function getKursOffline(obj_id) { |
| | | const pool = await poolP |
| | | const q = `SELECT offline |
| | | FROM ${database}.object_data |
| | | const q = `SELECT offline |
| | | FROM ${database}.object_data |
| | | WHERE obj_id = ${obj_id} |
| | | ` |
| | | const [results] = await pool.query(q) |