Browse Source

Add maj Bank

stany.ferer 4 months ago
parent
commit
f1c2a40010

+ 133 - 5
core/class/banque.class.php

@@ -11,13 +11,140 @@ class banque
             return db::resultset();
     }
 
-    public static function menu()
-    {
+    public static function update(){
+        
+        if(core::ifPost("solde")){
+                $sql = ", solde = :solde, solde_date = :solde_date, import = :import ";
+            } else {
+                $sql = "";
+            }
+        
+        db::query("UPDATE " . DB_T_BANQUE_COMPTES . " SET "
+                . "label = :label, "
+                . "compte = :compte, "
+                . "commentaire = :commentaire, "
+                . "icon = :icon "
+                . $sql
+                . "WHERE id = :id");
+        
+            db::bind(':label', core::getPost("label"));
+            db::bind(':compte', core::getPost("compte"));
+            db::bind(':commentaire', core::getPost("commentaire"));
+            db::bind(':icon', core::getPost("icon"));
+            db::bind(':id', core::getPost("id"));
+
+        if(!empty(core::getPost("solde"))){
+            db::bind(':solde', core::getPost("solde"));
+            db::bind(':solde_date', core::getPost("solde_date"));
+            db::bind(':import', core::getPost("import"));
+        }
+        
+        try {
+                db::execute();
+                alert::recSuccess("Compte mis à jour avec succès");
+                return TRUE;
+            } catch (Exception $ex) {
+                alert::recError("Erreur de mise à jour du Compte : " . $ex);
+                return FALSE;
+            }
+    }
+
+    public static function add(){
+        
+        db::query("INSERT INTO " . DB_T_BANQUE_COMPTES . " (label, compte, commentaire, solde, solde_date, icon, import) VALUES (:label, :compte, :commentaire, :solde, :solde_date, :icon, :import)");
+        db::bind(':label', core::getPost("label"));
+        db::bind(':compte', core::getPost("compte"));
+        db::bind(':commentaire', core::getPost("commentaire"));
+        db::bind(':solde', core::getPost("solde"));
+        db::bind(':solde_date', core::getPost("solde_date"));
+        db::bind(':icon', core::getPost("icon"));
+        db::bind(':import', core::getPost("import"));
+
+        try {
+                db::execute();
+                alert::recSuccess("Compte créé avec succès");
+                return db::lastInsertId();
+            } catch (Exception $ex) {
+                alert::recError("Erreur de création du Compte : " . $ex);
+                return FALSE;
+            }
+    }
+
+    public static function menu(){
         banque::getAll();
         foreach (self::getAll() as $value) {
             core::elementMenu("compte-" . $value["id"], "/compte-" . $value["id"] . ".html", $value["label"], NULL, $value["icon"]);
         }
     }
+
+    public static function printFormCompte(?array $_array = NULL) {
+        if($_array == NULL){
+            $_array = ["id" => "add", "label" => NULL, "compte" => NULL, "solde" => NULL, "solde_date" => NULL, "icon" => NULL, "commentaire" => NULL];
+            $txtSubmit = "Enregistrer un nouveau compte";
+        } else {
+            $txtSubmit = "Modifier ce compte";
+        }
+
+        $nbLines = self::countLines($_array["id"]);
+        $protected = ($_array["solde"] != NULL AND $nbLines > 0) ? 1 : 0;
+        if($protected == 1) { 
+            $txtProtected = ($nbLines > 1) ? "Vous ne pouvez pas modifier ces données car cela entraînerait une désynchronisation des " . $nbLines . " lignes associées à ce compte. Pour se faire vous devez supprimer toutes les lignes associées à ce compte." : "Vous ne pouvez pas modifier ces données car cela entraînerait une désynchronisation de la ligne associée à ce compte. Pour se faire vous devez supprimer la ligne associée à ce compte.";
+        }
+
+        echo "<form method=\"post\" action=\"/submit.php\">";
+        echo "<input type=\"hidden\" name=\"from\" value=\"parametres-compte-edit\">";
+        echo "<input type=\"hidden\" name=\"id\" value=\"" . $_array["id"] . "\">";
+        echo "<div class=\"form-group\"><label>Nom du compte</label><input type=\"text\" class=\"form-control form-control-sm\" name=\"label\" value=\"" . $_array["label"] . "\" required></div><br />";
+        echo "<div class=\"form-group\"><label>Numéro de compte</label><input type=\"text\" class=\"form-control form-control-sm\" name=\"compte\" value=\"" . $_array["compte"] . "\"></div><br />";
+        
+        if($protected == 1) { 
+            echo "<fieldset class=\"border\" style=\"border-color: orange!important; padding: 15px;\">";
+            echo "<legend class=\"float-none w-auto\" style=\"font-size: 0.9rem; color: orange!important; padding: 0 5px;\">Protégé</legend>"; 
+            echo "<div class=\"alert alert-warning\" role=\"alert\">" . $txtProtected . "</div>";
+        }
+
+        echo "<div class=\"form-group\"><label>Solde initial</label><input type=\"number\" class=\"form-control form-control-sm\" name=\"solde\" value=\"" . $_array["solde"] . "\"";
+        echo ($protected == 1) ? " disabled" : " required";
+        echo "></div><br />";
+
+        echo "<div class=\"form-group\"><label>Date du solde initial</label><input type=\"date\" class=\"form-control form-control-sm\" name=\"solde_date\" value=\"" . $_array["solde_date"] . "\"";
+        echo ($protected == 1) ? " disabled" : " required";
+        echo "></div><br />"; 
+
+        echo "<div class=\"form-group\"><label>Mode d'importation des données</label><select name=\"import\" class=\"form-select\"";
+        echo ($protected == 1) ? " disabled" : " required";
+        echo ">";
+        echo "<option value=\"csv\"" . (($_array["import"] == "csv") ? " selected" : NULL) . ">Importer des données depuis le CSV de Crédit Mutuel</option>";
+        echo "<option value=\"manuel\"" . (($_array["import"] == "manuel") ? " selected" : NULL) . ">Ajouter des lignes manuellement</option>";
+        echo "</select></div><br />";
+
+        if($protected == 1) { 
+            echo "</fieldset><br />";
+        }
+
+        echo "<div class=\"form-group\"><label>Icône</label><select name=\"icon\" class=\"form-select\">";
+        echo "<option value=\"courant\"" . (($_array["icon"] == "courant") ? " selected" : NULL) . ">Icône liée à un compte courant</option>";
+        echo "<option value=\"epargne\"" . (($_array["icon"] == "epargne") ? " selected" : NULL) . ">Icône liée à un compte d'épargne</option>";
+        echo "</select></div><br />";
+        echo "<div class=\"form-group\"><label>Commentaire</label><input type=\"text\" class=\"form-control form-control-sm\" name=\"commentaire\" value=\"" . $_array["commentaire"] . "\"></div><br />";
+        echo "<button class=\"btn btn-primary btn-lg\" style=\"width: 100%\" type=\"submit\">" . $txtSubmit . "</button>";
+        echo "</form>";
+    }
+
+    public static function countLines(int|string $_id)
+    {
+        if($_id == "add"){
+            return 0;
+        }
+
+        db::query("SELECT "
+            . "COUNT(id_compte) AS nb "
+            . "FROM " . DB_T_BANQUE_LIGNES . " "
+            . "WHERE " . DB_T_BANQUE_LIGNES . ".id_compte = :id");
+            db::bind(':id', $_id);
+            $nb = db::single()["nb"];
+            return (!empty($nb)) ? $nb : 0;
+    }
     
     public static function lastArrayRecord(int $_id)
     {
@@ -40,7 +167,8 @@ class banque
             . "ORDER BY creer DESC "
             . "LIMIT 1");
             db::bind(':id', $_id);
-            return db::single()["creer"];
+            $last = db::single();
+            return (!empty($last["creer"])) ? $last["creer"] : NULL;
     }
     
     public static function getInitial(int $_id)
@@ -49,6 +177,7 @@ class banque
         $return = array(
             "num" => 0,
             "id" => 0,
+            "import" => $tmp["import"],
             "date" => $tmp["solde_date"],
             "label" => "SOLDE CREDITEUR AU " . core::convertDate($tmp["solde_date"], FALSE),
             "debit" => 0,
@@ -260,7 +389,6 @@ class banque
     }
 
     public static function fileName(string $_compte){
-        $n = explode(" ", $_compte);
-        return $n[1].$n[2];
+        return str_replace(' ', '', $_compte);
     }
 }

+ 11 - 12
core/class/json.class.php

@@ -10,6 +10,10 @@ class json extends db
     public static function create(string $_target)
     {
         if (isset($_target)) {
+            if (preg_match('/^banque-lignes-(\d+)$/', $_target, $matches)) {    
+                return self::create_banque_lignes((int)$matches[1]);
+            }
+
             switch ($_target) {
                 case "salaries":
                     return self::create_salaries();
@@ -32,18 +36,6 @@ class json extends db
                 case "lotterys":
                     return self::create_lotterys();
                     break;
-                case "banque-lignes-1":
-                    return self::create_banque_lignes(1);
-                    break;
-                case "banque-lignes-2":
-                    return self::create_banque_lignes(2);
-                    break;
-                case "banque-lignes-3":
-                    return self::create_banque_lignes(3);
-                    break;
-                case "banque-lignes-4":
-                    return self::create_banque_lignes(4);
-                    break;
                 case "banque-csv":
                     return self::create_banque_csv();
                     break;
@@ -59,6 +51,13 @@ class json extends db
         }
     }
 
+    public static function createBanks()
+    {
+        foreach (banque::getAll() as $compte) {
+            self::create_banque_lignes($compte["id"]);
+        }
+    }
+
     private static function create_salaries()
     {
         $row = salaries::getSalaries();

+ 1 - 4
core/class/maj.class.php

@@ -140,10 +140,7 @@ class maj {
             json::create("users");
             json::create("salaries-proweb");
             json::create("lotterys");
-            json::create("banque-lignes-1");
-            json::create("banque-lignes-2");
-            json::create("banque-lignes-3");
-            json::create("banque-lignes-4");
+            json::createBanks();
             json::create("banque-csv");
             json::create("documents");
             json::create("documents-limited");

+ 2 - 2
core/submit/cms.compte-upload.php

@@ -67,9 +67,9 @@ if (core::ifPost("from") AND core::getPost("from") == "compte-upload") {
             if($nbLignes == 0){
                 $log = "Aucune ligne n'a été extraite du fichier : " . $_FILES[core::getPost("from")]['name'];
             } elseif($nbLignes == 1){
-                $log = "Une seule ligne n'a été extraite du fichier : " . $_FILES[core::getPost("from")]['name'];
+                $log = "Une seule ligne a été extraite du fichier : " . $_FILES[core::getPost("from")]['name'];
             } else {
-                $log = $nbLignes . " lignes n'ont été extraites du fichier : " . $_FILES[core::getPost("from")]['name'];
+                $log = $nbLignes . " lignes ont été extraites du fichier : " . $_FILES[core::getPost("from")]['name'];
             }
 
             historique::recRef("/compte-".core::getPost("add").".html");

+ 19 - 0
core/submit/cms.parametres-compte-edit.php

@@ -0,0 +1,19 @@
+<?php
+
+if (core::ifPost("from")) {
+
+    if(core::ifPost("id") AND core::getPost("id") != "add"){
+        banque::update();
+        header("Location: /parametres-comptes.html#parametres-compte-". core::getPost("id"));
+        exit();
+    } else {
+        $lastId = banque::add();
+        json::create("banque-lignes-" . $lastId);
+        header("Location: /parametres-comptes.html#parametres-compte-". $lastId);
+        exit();
+    }
+
+} else {
+    header('HTTP/1.0 401 Unauthorized');
+    exit();
+}

+ 1 - 4
core/submit/cms.parametres-json-refresh.php

@@ -7,10 +7,7 @@ json::create("events");
 json::create("users");
 json::create("salaries-proweb");
 json::create("lotterys");
-json::create("banque-lignes-1");
-json::create("banque-lignes-2");
-json::create("banque-lignes-3");
-json::create("banque-lignes-4");
+json::createBanks();
 json::create("banque-csv");
 json::create("documents");
 json::create("documents-limited");

+ 9 - 2
core/views/pages/cms.compte-insert.php

@@ -1,3 +1,12 @@
+<?php
+    $banque = banque::getInitialCompte(core::getGet("add"));
+    if($banque["import"] != "manuel"){ 
+        alert::recError("Vous ne pouvez pas ajouter des lignes manuellement sur ce compte.");
+        echo '<script>window.location.replace("/compte-' . core::getGet("add") . '.html");</script>';
+        exit();
+    }   
+?>
+
 <link rel="stylesheet" href="css/dragAndDrop.css">
 
 <header class="d-flex flex-column flex-md-row align-items-md-center p-3 bg-light ">
@@ -6,8 +15,6 @@
     </h2>
 </header>
 <?php   
-        $banque = banque::getInitialCompte(4); // ID du compte épargne    
-
         echo core::filAriane(array(
             "current" => "Importer un CSV", 
             "arbo" => array( 

+ 34 - 17
core/views/pages/cms.compte-upload.php

@@ -1,3 +1,12 @@
+<?php
+    $banque = banque::getInitialCompte(core::getGet("add"));
+    if($banque["import"] != "csv"){ 
+        alert::recError("Vous ne pouvez pas importer de CSV sur ce compte.");
+        echo '<script>window.location.replace("/compte-' . core::getGet("add") . '.html");</script>';
+        exit();
+    }   
+?>
+
 <link rel="stylesheet" href="css/dragAndDrop.css">
 
 <header class="d-flex flex-column flex-md-row align-items-md-center p-3 bg-light ">
@@ -6,8 +15,6 @@
     </h2>
 </header>
 <?php   
-        $banque = banque::getInitialCompte(core::getGet("add"));
-        
         if(!empty($banque["compte"])){
             $compte = " - N°". $banque["compte"];
         } else {
@@ -23,6 +30,11 @@
         )); 
 ?>
 <br />
+<?php if(empty($banque["compte"])){
+    echo "<div class=\"alert alert-danger\" role=\"alert\">Aucun numéro de compte n'a été défini sur ce compte. Vous ne pouvez donc pas importer de fichier CSV. Il vous faut renseigner le numéro du compte dans l'espace d'administration pour poursuivre.</div>";
+}
+else { ?>
+
 <form action="/submit.php" method="post" enctype="multipart/form-data" onsubmit="loading()">
     <input type="hidden" name="from" value="compte-upload">
     <input type="hidden" name="add" value="<?php echo core::getGet("add") ?>">
@@ -44,21 +56,26 @@
 
 <script>
     function dargAndDrop(){    
-        var fileName = $("#compte-upload").val().split('\\').pop();
-        var ext = fileName.split('.').pop();
-        var fileAttendu = "<?php echo banque::fileName($banque["compte"]) ?>";
-        if(ext!=="csv"){
-            $("#printToastErrorTxt").html("Seuls les fichiers CSV sont acceptés");
-            $("#printToastError").toast('show');
-            $('#attachement-document').val("");
+    var fileInput = $("#compte-upload");
+    var fileName = fileInput.val().split('\\').pop();
+    var ext = fileName.split('.').pop().toLowerCase();
+    var fileAttendu = "<?php echo banque::fileName($banque["compte"]) ?>";
+    
+    if(ext !== "csv"){
+        $("#printToastErrorTxt").html("Seuls les fichiers CSV sont acceptés");
+        $("#printToastError").toast('show');
+        fileInput.val("");
+    } else {
+        if(fileName.includes(fileAttendu)){
+            $(".file-message").text("Fichier prêt à être chargé : " + fileName);
         } else {
-            if(fileName.includes(fileAttendu)){
-                $(".file-message").text("Fichier prêt à être chargé : " + fileName);
-            } else {
-                $("#printToastErrorTxt").html("Le fichier "+ fileName +" ne semble pas être associé au bon compte.");
-                $("#printToastError").toast('show');
-                $('#attachement-document').val("");
-            }
+            $("#printToastErrorTxt").html("Le fichier "+ fileName +" ne semble pas être associé au bon compte.");
+            $("#printToastError").toast('show');
+            fileInput.val("");
         }
     }
-</script>
+}
+</script>
+<?php
+}
+?>

+ 17 - 12
core/views/pages/cms.compte.php

@@ -3,6 +3,10 @@ $jsonTarget = "/json.php?file=banque-lignes-" . core::getGet("id");
 if (debug::isFile("debug")) {
     debug::log(debug::getBadge($jsonTarget, "OUVRIR LE JSON : " . $jsonTarget), "JSON chargé en arrière plan");
 }
+
+$banque = banque::getInitialCompte(core::getGet("id"));
+$etatCompte = banque::getEtatCompte(core::getGet("id"));
+
 ?>
 <header class="d-flex flex-column flex-md-row align-items-md-center p-3 bg-light ">
     <h2 class="bd-title" id="content">
@@ -11,8 +15,8 @@ if (debug::isFile("debug")) {
     <?php
         if (access::ifAccesss("compte-upload")) { ?>
         <div class="fix-container-button-nav">
-            <?php if(core::getGet("id") == 4){ ?>
-                <a href="/?p=compte-insert"><button type="submit" class="btn btn-outline-success btn-sm"><?php icon::getFont(["icon" => "bi bi-file-earmark-plus"]) ?> Ajouter une ligne</button></a>
+            <?php if($banque["import"] == "manuel"){ ?>
+                <a href="/?p=compte-insert&add=<?php echo core::getGet("id") ?>"><button type="submit" class="btn btn-outline-success btn-sm"><?php icon::getFont(["icon" => "bi bi-file-earmark-plus"]) ?> Ajouter une ligne</button></a>
             <?php } else { ?>
                 <a href="/?p=compte-upload&add=<?php echo core::getGet("id") ?>"><button type="submit" class="btn btn-outline-success btn-sm"><?php icon::getFont(["icon" => "bi bi-file-earmark-plus"]) ?> Charger un CSV</button></a>
             <?php } ?>
@@ -20,23 +24,24 @@ if (debug::isFile("debug")) {
     <?php } ?>
 </header>
 <?php
-$banque = banque::getInitialCompte(core::getGet("id"));
-$etatCompte = banque::getEtatCompte(core::getGet("id"));
 
 echo core::filAriane(array(
-    "current" => $banque["label"],
+    "current" => $banque["label"] . ((!empty($banque["compte"])) ? " [" . $banque["compte"] . "]" : NULL),
     "arbo" => array(
         "Comptes bancaires" => NULL,
-        $banque["label"] => "/compte-" . core::getGet("id") . ".html"
+        $banque["label"] . ((!empty($banque["compte"])) ? " [" . $banque["compte"] . "]" : NULL) => "/compte-" . core::getGet("id") . ".html"
     )
 ));
 
-$callout = [
-    "type" => "info",
-    "h4" => "Note",
-    "p" => "La dernier import des données du compte a été réalisée le <span class=\"fw-bold\">" . core::convertDate(banque::lastRecord(core::getGet("id"))) . "</span> et à cette même date le solde était de <span class=\"fw-bold\">" . banque::getEuro($etatCompte["solde"]) . "</span>",
-];
-callout::print($callout);
+$lastRecord = banque::lastRecord(core::getGet("id"));
+if(!empty($lastRecord)){
+    $callout = [
+        "type" => "info",
+        "h4" => "Note",
+        "p" => "La dernier import des données du compte a été réalisée le <span class=\"fw-bold\">" . core::convertDate($lastRecord) . "</span> et à cette même date le solde était de <span class=\"fw-bold\">" . banque::getEuro($etatCompte["solde"]) . "</span>",
+    ];
+    callout::print($callout);
+}
 ?>
 <div class="card">
     <div class="card-body">

+ 61 - 1
core/views/pages/cms.parametres-comptes.php

@@ -12,4 +12,64 @@ echo core::filAriane(array(
     )
 ));
 
-?>
+$allBank = banque::getAll();
+
+$onglets = $form = [];
+foreach($allBank as $value){
+    $onglets[$value["id"]] = $value["label"];
+    $form[$value["id"]] = $value;
+}
+
+$onglets["add"] = "Nouveau compte";
+$form["add"] = NULL;
+
+?>
+
+<ul class="nav nav-tabs" id="tab-parametres-compte" role="tablist" style="margin-bottom:20px;">
+    <?php
+    $first = true;
+    foreach ($onglets as $id => $label) {
+        $activeClass = $first ? 'active' : '';
+        echo '<li class="nav-item">';
+        echo '<a class="nav-link ' . $activeClass . '" data-bs-toggle="tab" href="#parametres-compte-' . $id . '">' . $label . '</a>';
+        echo '</li>';
+        $first = false;
+    }
+    ?>
+</ul>
+
+<div class="tab-content">
+    <?php
+    $first = true;
+    foreach ($onglets as $id => $label) {
+        $activeClass = $first ? 'show active' : '';
+        echo '<div id="parametres-compte-' . $id . '" class="tab-pane fade ' . $activeClass . '">';
+        banque::printFormCompte($form[$id]);
+        echo '</div>';
+        $first = false;
+    }
+    ?>
+</div>
+
+<script>
+$(document).ready(function() {
+    var fragment = window.location.hash;
+    var tmpOnglet = fragment ? fragment.substring(1) : '';
+    var onglet = "#" + tmpOnglet;
+
+    if (tmpOnglet !== "" && $(onglet).length) {
+        $('#tab-parametres-compte a[href="' + onglet + '"]').tab('show');
+    }
+
+    $("#tab-parametres-compte a").click(function(e){
+        e.preventDefault();
+        $(this).tab('show');
+        history.replaceState(null, null, $(this).attr('href'));
+    });
+
+    $('#tab-parametres-compte a').on('shown.bs.tab', function(event){
+        var x = $(event.target).text();
+        var y = $(event.relatedTarget).text();
+    });
+});
+</script>

+ 7 - 1
maj/sql/maj.sql

@@ -3,4 +3,10 @@ ALTER TABLE `banque_comptes` ADD `icon` TINYTEXT NULL AFTER `solde_date`;
 UPDATE `banque_comptes` SET `icon` = 'courant' WHERE `banque_comptes`.`id` = 1; 
 UPDATE `banque_comptes` SET `icon` = 'courant' WHERE `banque_comptes`.`id` = 2; 
 UPDATE `banque_comptes` SET `icon` = 'epargne' WHERE `banque_comptes`.`id` = 3; 
-UPDATE `banque_comptes` SET `icon` = 'epargne' WHERE `banque_comptes`.`id` = 4; 
+UPDATE `banque_comptes` SET `icon` = 'epargne' WHERE `banque_comptes`.`id` = 4; 
+
+ALTER TABLE `banque_comptes` ADD `import` TINYTEXT NULL AFTER `icon`; 
+UPDATE `banque_comptes` SET `import` = 'csv' WHERE `banque_comptes`.`id` = 1; 
+UPDATE `banque_comptes` SET `import` = 'csv' WHERE `banque_comptes`.`id` = 2; 
+UPDATE `banque_comptes` SET `import` = 'csv' WHERE `banque_comptes`.`id` = 3; 
+UPDATE `banque_comptes` SET `import` = 'manuel' WHERE `banque_comptes`.`id` = 4;