From df46e7171c2dd42b3084dffb19e705a54d1731ba Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Fri, 24 Oct 2025 09:32:15 +0000
Subject: [PATCH] GS-2375

---
 lib/db.js |  168 ++++++++++++++++++++++++++++++-------------------------
 1 files changed, 92 insertions(+), 76 deletions(-)

diff --git a/lib/db.js b/lib/db.js
index 591b25f..a9a41a7 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -406,93 +406,106 @@
     return results
 }
 
-async function getKursLp(obj_id) {
+async function getKursLp(obj_id, raw = false) {
     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
-        }
+    if (raw) {
+        return tnUnter
+    } else { // LP aller Unterobjekte zusammenfassen
+        const libLp = require("../lib/libLp")
+        const data = libLp.alleAuswerten(tnUnter)
+        return data
     }
-    return teilnehmer
+
+    // const teilnehmer = await getKursTeilnehmer(ref_id)
+    // const tnUnter = await getKursUnterobjektLp(obj_id)
+    // console.table(teilnehmer)
+    // console.table(tnUnter)
+    //
+    // /**
+    //  * Die beiden Datensätze mergen
+    //  * NEIN - es reicht der
+    //  *
+    //  */
+    //
+    // 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,
+    const q = `SELECT ud.usr_id,
+                      ud.login,
+                      ud.firstname,
+                      ud.lastname,
+                      ulc.obj_id,
                       ulc.item_id,
                       ulc.lpmode,
                       t.obj_id as item_obj_id,
-                      ulm.usr_id,
+                      od.type,
                       ulm.status,
                       ulm.status_changed,
                       ulm.percentage,
@@ -500,9 +513,12 @@
                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
+                        INNER JOIN ${database}.usr_data ud ON ud.usr_id = ulm.usr_id
+                        INNER JOIN ${database}.object_data od ON od.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
+               ORDER BY ud.usr_id, ulc.item_id
     `
     const [results] = await pool.query(q)
     return results

--
Gitblit v1.8.0