Преглед на файлове

Add badges assign documents

stany.ferer преди 1 година
родител
ревизия
e65dc1af02

+ 84 - 0
core/class/document.class.php

@@ -359,6 +359,45 @@ class document
         }
     }
 
+    static public function getAssignMe(){
+
+        $tags = user::getIdTags(session::getId());
+
+        $where = NULL;
+        foreach ($tags AS $key => $value) {
+            if($key == 0){
+                $where = "WHERE " . DB_T_DOCUMENTS . ".id_user_done IS NULL AND " . DB_T_DOCUMENT_TAGS . ".id_tags = " . $value . "";
+            } else {
+                $where .= " OR " . DB_T_DOCUMENT_TAGS . ".id_tags = " . $value . "";
+            }
+        }
+
+        db::query("SELECT 
+        " . DB_T_DOCUMENTS . ".id, 
+        " . DB_T_DOCUMENTS . ".titre, 
+        " . DB_T_DOCUMENTS . ".date,        
+        " . DB_T_DOCUMENTS . ".deadline, 
+        " . DB_T_DOCUMENTS . ".description, 
+        " . DB_T_DOCUMENTS . ".montant, 
+          ( SELECT GROUP_CONCAT(" . DB_T_TAGS . ".label SEPARATOR ', ') 
+            FROM  " . DB_T_DOCUMENT_TAGS . " 
+            INNER JOIN " . DB_T_TAGS . " ON " . DB_T_TAGS . ".id = " . DB_T_DOCUMENT_TAGS . ".id_tags
+            WHERE id_documents = " . DB_T_DOCUMENTS . ".id AND " . DB_T_DOCUMENT_TAGS . ".id_type_tags = 2 
+            ORDER BY " . DB_T_DOCUMENT_TAGS . ".creer) AS tags, 
+           ( SELECT GROUP_CONCAT(" . DB_T_TAGS . ".label SEPARATOR ', ') 
+            FROM  " . DB_T_DOCUMENT_TAGS . " 
+            INNER JOIN " . DB_T_TAGS . " ON " . DB_T_TAGS . ".id = " . DB_T_DOCUMENT_TAGS . ".id_tags
+            WHERE id_documents = " . DB_T_DOCUMENTS . ".id AND " . DB_T_DOCUMENT_TAGS . ".id_type_tags = 1 
+            ORDER BY " . DB_T_DOCUMENT_TAGS . ".creer) AS assign, 
+        " . DB_T_TYPE_DOCUMENT . ".label 
+        FROM " . DB_T_DOCUMENT_TAGS . " 
+        INNER JOIN " . DB_T_DOCUMENTS . " ON " . DB_T_DOCUMENTS . ".id = " . DB_T_DOCUMENT_TAGS . ".id_documents
+        INNER JOIN " . DB_T_TYPE_DOCUMENT . " ON " . DB_T_TYPE_DOCUMENT . ".id = " . DB_T_DOCUMENTS . ".id_type
+        " . $where);
+
+        return db::resultset();
+    }
+
     static public function printAttachement(array $_attachs){
         echo '<ol class="list-group list-group-numbered">';
         foreach ($_attachs as $key => $attach) {
@@ -384,4 +423,49 @@ class document
         echo '</ol><br />';
     }
 
+    static public function myAssign(?array $_tags = NULL){
+
+        if($_tags == NULL){
+            return NULL;
+        } else {
+            $where = NULL;
+            foreach ($_tags AS $key => $value) {
+                if($key == 0){
+                    $where = "WHERE " . DB_T_DOCUMENTS . ".id_user_done IS NULL AND " . DB_T_DOCUMENT_TAGS . ".id_tags = " . $value . "";
+                } else {
+                    $where .= " OR " . DB_T_DOCUMENT_TAGS . ".id_tags = " . $value . "";
+                }
+            }
+        }
+
+        db::query("SELECT "
+            . "COUNT(" . DB_T_DOCUMENT_TAGS . ".id_tags) AS nb "
+            . "FROM " . DB_T_DOCUMENT_TAGS  . " "
+            . "INNER JOIN " . DB_T_DOCUMENTS . " ON " . DB_T_DOCUMENTS . ".id = " . DB_T_DOCUMENT_TAGS . ".id_documents "
+            . $where);
+        return db::single()["nb"];
+    }
+
+    static public function menu(){
+        $tags = user::getIdTags(session::getId());
+        $nb = document::myAssign($tags);
+        if($tags != NULL){
+            $badge = "";
+            if($nb > 0){ 
+                $badge = '<span class="position-absolute start-100 translate-middle badge rounded-pill bg-danger">' . $nb . '</span>';
+            }
+            echo '<a href="/documents-my-assign.html" class="dropdown-item">Vos assignations' . $badge . '</a>';
+        }
+    }
+
+    static public function badge(){
+        $tags = user::getIdTags(session::getId());
+        $nb = document::myAssign($tags);
+        if($tags != NULL){
+            if($nb > 0){ 
+                echo '<span class="position-absolute start-100 translate-middle p-1 bg-danger border border-light rounded-circle"></span>';
+            }
+        }
+    }
+
 }

+ 2 - 4
core/class/json.class.php

@@ -211,11 +211,9 @@ class json extends db
             WHERE id_documents = " . DB_T_DOCUMENTS . ".id AND " . DB_T_DOCUMENT_TAGS . ".id_type_tags = 1 
             ORDER BY " . DB_T_DOCUMENT_TAGS . ".creer) AS assign, 
         IF(" . DB_T_DOCUMENTS . ".id_user_done IS NOT NULL, 'Traité', 'Non traité') AS done, 
-        " . DB_T_TYPE_DOCUMENT . ".label, 
-        CONCAT (" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS 'user'
+        " . DB_T_TYPE_DOCUMENT . ".label
         FROM " . DB_T_DOCUMENTS . " 
-        INNER JOIN " . DB_T_TYPE_DOCUMENT . " ON " . DB_T_TYPE_DOCUMENT . ".id = " . DB_T_DOCUMENTS . ".id_type
-        INNER JOIN " . DB_T_USER . " ON " . DB_T_DOCUMENTS . ".id_user = " . DB_T_USER . ".id");
+        INNER JOIN " . DB_T_TYPE_DOCUMENT . " ON " . DB_T_TYPE_DOCUMENT . ".id = " . DB_T_DOCUMENTS . ".id_type");
 
         $row =  db::resultset();
 

+ 19 - 0
core/class/user.class.php

@@ -243,6 +243,25 @@ class user {
         }
     }  
 
+    static public function getIdTags(float $_idUser){
+        db::query("SELECT "
+            . "" . DB_T_USER_TAGS . ".id_tags "
+            . "FROM " . DB_T_USER_TAGS . " "
+            . "WHERE " . DB_T_USER_TAGS . ".id_user = :id "
+            . "ORDER BY " . DB_T_USER_TAGS . ".creer");
+        db::bind(':id', $_idUser);
+        $tmp = db::resultset();
+        if(isset($tmp[0])){
+            $return = [];
+            foreach ($tmp as $value) {
+                $return[] = $value["id_tags"];
+            }
+            return $return;
+        } else {
+            return NULL;
+        }
+    }
+
     private static function addTags(float $_idUser, string $_tags = NULL)
     {
         db::query("DELETE FROM " . DB_T_USER_TAGS . " WHERE id_user = :id_user");

+ 9 - 0
core/json/cms.documents-my-assign.php

@@ -0,0 +1,9 @@
+<?php 
+
+$row = document::getAssignMe();
+if (!empty($row)) {
+    echo json_encode($row);
+    exit();
+} else {
+    exit();
+}

+ 2 - 1
core/views/_cms.nav.php

@@ -30,9 +30,10 @@
         <div id="navbarCollapse" class="collapse navbar-collapse p-0">
             <ul class="nav navbar-nav ms-auto">
                 <li class="nav-item dropdown">
-                    <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown"><?php echo session::getName() ?></a>
+                    <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown"><?php echo session::getName(); document::badge(); ?></a>
                     <div class="dropdown-menu dropdown-menu-end">
                         <a href="/user.html" class="dropdown-item">Mon profil</a>
+                        <?php document::menu() ?>
                         <div class="dropdown-divider"></div>
                         <a href="/submit.php?from=logout" class="dropdown-item">Se déconnecter</a>
                     </div>

+ 75 - 0
core/views/pages/cms.documents-my-assign.php

@@ -0,0 +1,75 @@
+<?php
+    $jsonTarget = "/json.php?jsonData=documents-my-assign";
+    if(core::isDebug()){
+        debug::log(debug::getBadge($jsonTarget, "OUVRIR LE JSON : ".$jsonTarget), "JSON chargé en arrière plan");
+        json::create("documents");
+    } 
+?>
+
+<header class="d-flex flex-column flex-md-row align-items-md-center p-3 bg-light ">
+<h2 class="bd-title" id="content">
+    <span>Listes des documents à traiter</span>
+</h2>
+</header>
+<?php   
+        echo core::filAriane(array(
+            "current" => "Listes des documents à traiter", 
+            "arbo" => array( 
+                "Documents" => NULL,
+                "Listes des documents à traiter" => "/documents-my-assign.html")
+        )); 
+?>
+<div>
+    <table
+        id="table"
+        class="table-striped table-hover table-sm" 
+        data-page-size="25"
+        data-toggle="table"
+        data-show-columns="true"
+        data-search="true"
+        data-buttons-align="left"
+        data-show-footer="true"
+        data-pagination="true"
+        data-filter-control="true"
+        data-flat="true"
+        data-sort-name="date"
+        data-sort-order="desc"
+        data-url="<?php echo $jsonTarget ?>">
+        <thead>
+            <tr>
+                <th data-sortable="true" data-field="date" data-filter-control="input" data-width="100">Date</th>
+                <th data-sortable="true" data-field="titre" data-filter-control="input">Titre</th>
+                <th data-sortable="true" data-field="label" data-filter-control="select" data-width="180">Type</th>
+                <th data-sortable="true" data-field="deadline" data-filter-control="input" data-width="100">Echéance</th>
+                <th data-sortable="true" data-field="tags" data-filter-control="input" data-width="200">Tags</th>
+                <th data-sortable="true" data-field="assign" data-filter-control="input" data-width="200">Attribution</th>
+                <th data-sortable="true" data-field="montant" data-filter-control="input" data-width="110" data-formatter="dataFormatter" data-footer-formatter="montantFormatter">Montant</th>
+                <th data-field="id" data-formatter="selectFormatter" data-width="60"></th>
+            </tr>
+        </thead>
+    </table> 
+</div>
+
+<script>
+    function selectFormatter(value, row) { 
+        return '<a href="/document-' + row.id + '.html"><button type="submit" class="btn btn-outline-primary btn-sm">Traiter</button></a>';
+    }
+
+    let euro = Intl.NumberFormat('de-DE', {
+        style: 'currency',
+        currency: 'EUR',
+    });
+
+    function dataFormatter(value) { 
+        return euro.format(value);
+    }
+
+    function montantFormatter(data) {
+        var total = 0;
+        data.forEach(function (row) {
+            total += parseFloat(row.montant);
+        });
+        return parseFloat(total) === 0 ? euro.format(0.00) : euro.format(total.toFixed(2));
+    }
+    
+</script>