COP - Retrait auto des points de permis
Nous rejoindre sur Discord : lien discord
Incompatible avec les versions antérieurantérieures à à 2.3.0
Sujet : Retrait automatiquement les points sur le permis en fonction du dédélit
- Liste des fichiers :
-
intranet-cop/routes/insert.php
-
intranet-cop/routes/edit.php
-
intranet-cop/routes/recherhe.php
-
intranet-cop/routes/delit-routier.php
-
intranet-cop/routes/civil.php
-
intranet-cop/assets/script/event_saisie.js
-
intranet-cop/page/administration/
ajout_systèajout_système.twig -
intranet-cop/page/administration/modification_systeme.twig
-
intranet-cop/page/fiche/detail_route.twig
-
intranet-cop/page/fiche/montant_amende.twig
-
intranet-cop/page/add/add_delit_route.php
-
intranet-cop/entity/route.php
-
intranet-cop/src/insertion.php
-
site-cop/views/liste-amendes.twig
-
Application des modifications
Cette mise à à jour va vous permettre dans un premier temps de dédéfinir un nombre de points par dédélit. EnsuiteEnsuite, lorsque vous fermerez un dédélit du type routier, les points seront automatiquement retiréretirés sur le permis du conducteur.
Une fois que vous aurez terminéterminé les modifications. Vous pouvez soit dédéfinir le nombre de points par dédélit depuis la base de donnédonnées ou alors en utilisantavec le menu d'administration avec la section modification.
Modification dans la base de donnédonnées
Nous allons ajouter une colonne dans la dédéclaration des dédélits :
ALTER TABLE lspd_delit ADD `retrait` INTEGER DEFAULT NULL;
Reconstruction de la view info_route
:
CREATE OR REPLACE VIEW info_route AS
SELECT
lspd_route.id AS delit_id, lspd_route.vehicule AS v_id, lspd_route.conducteur AS conducteur_id, lspd_delit.intitule AS nom, lspd_delit.amende AS amende,
lspd_delit.temps_prison AS prison, lspd_delit.retrait AS retrait, lspd_delit.id AS delit_ref, lspd_route.enregistrer_par AS enregistreur_id, lspd_route.enregistrer_name AS enregistreur_name, lspd_route.acquite AS etat,
lspd_route.enregistrer_le AS date_enregistre, lspd_route.acquite_par AS acquite_par, lspd_route.acquite_name AS acquite_name, lspd_route.acquite_le AS acquite_le, lspd_route.remarque AS remarque
FROM
lspd_route, lspd_delit
WHERE
lspd_route.numero_delit = lspd_delit.id;
Cette requêrequête permet de mettre la valeur de retrait des points de permis à à 0 pour tous les dédélits routier.
UPDATE lspd_delit SET retrait = 0 WHERE `type_delit` = '0' AND `retrait` IS NULL;
Modification de l'ajout des dédélits depuis l'administration
Fichier : intranet-cop/page/administration/
ajout_systèajout_système.twig
Remplacez (ligne ~64) :
<div>
<label for="delit_prison">Temps de prison (mois) :</label>
<input type="number" name="delit_prison" id="tps_delit" min="0" placeholder="Temps en mois">
</div>
<div>
<label>Type de dédélit :</label>
<select name="delit_type" id="type_delit">
<option value="0">DéDélit Routier</option>
<option value="1">DéDélit LéLéger</option>
<option value="2">DéDélit Moyen</option>
<option value="3">DéDélit Grave</option>
</select>
</div>
Par :
<div>
<label for="delit_prison">Temps de prison (mois) :</label>
<input type="number" name="delit_prison" id="tps_delit" min="0" placeholder="Temps en mois">
</div>
<div id="visibleRetrait">
<label for="retrait_point">Retrait des points :</label>
<input type="number" name="retrait_point" id="point_retrait" min="0" placeholder="Nombre de points à à retirer">
</div>
<div>
<label>Type de dédélit :</label>
<select name="delit_type" id="type_delit" onchange="afficheRetraitPermis();">
<option value="0">DéDélit Routier</option>
<option value="1">DéDélit LéLéger</option>
<option value="2">DéDélit Moyen</option>
<option value="3">DéDélit Grave</option>
</select>
</div>
Fichier : intranet-cop/assets/script/event_saisie.js
AÀ la fin du fichierfichier, ajoutez la fonction suivante :
/* Afficher la visibilitévisibilité des retraits de points */
function afficheRetraitPermis() {
var delit = document.getElementById("type_delit").value;
if (delit === "0") {
document.getElementById("visibleRetrait").style.display = "block";
}
else {
document.getElementById("visibleRetrait").style.display = "none";
}
}
Au niveau de la ligne 225, remplacez la fonction AddDelitAdmin() { ... }
par :
/* Ajouter un dédélit dans la BDD */
function AddDelitAdmin() {
event.preventDefault(); // Arret du formulaire
let var_tab = ['nom', 'amende', 'temps', 'retrait', 'type'];
let var_tab2 = ['name_delit', 'amd_delit', 'tps_delit', 'point_retrait', 'type_delit'];
const data = createData(var_tab, var_tab2);
// On envoi le modèmodèle
const requeteAjax = new XMLHttpRequest();
requeteAjax.open('POST', '/insert/delit');
requeteAjax.send(data);
document.getElementById("confirm_admin_delit").style.display = "block";
for (var i = 0; i < (var_tab2.length - 1); i++) {
document.getElementById(var_tab2[i]).value = "";
}
}
Fichier : intranet-cop/routes/insert.php
Au niveau de la ligne ~57, remplacez le Flight::route('/insert/delit', function() { ... });
par :
Flight::route('/insert/delit', function() {
verif_connecter();
verif_admin();
$nom = $_POST['nom'];
$montant = $_POST['amende'];
$prison = $_POST['temps'];
$type = $_POST['type'];
$retrait = $_POST['retrait'];
if ($retrait == 0) { $retrait = null; }
$agent = Agent::getInfoAgent();
addDelit($nom, $montant, $prison, $type, $retrait);
addHistorique($agent->matricule, "0¤1¤0¤1¤" . ($type+1) . "¤" . $nom);
});
Fichier : intranet-cop/src/insertion.php
Au niveau de la ligne ~33, remplacez la fonction addDelit($nom, $montant, $prison, $type) { ... }
par :
function addDelit($nom, $montant, $prison, $type, $retrait) {
$casier = Model::factory('Delit')->create();
$casier->set(array(
'intitule' => $nom,
'amende' => $montant,
'temps_prison' => $prison,
'type_delit' => $type,
'retrait' => $retrait
)
);
$casier->save();
}
Update pour la modification des dédélits depuis l'administration
Fichier : intranet-cop/routes/recherche.php
Au niveau de la ligne ~67 dans Flight::route('/recherche/info_delit', function()
, remplacez :
$data = [
'amende' => $info->amende,
'prison' => $info->temps_prison
];
Par :
$data = [
'amende' => $info->amende,
'prison' => $info->temps_prison,
'retrait' => $info->retrait
];
Fichier : intranet-cop/routes/edit.php
Au niveau de la ligne ~139, remplacez le Flight::route('/delit/edit/value', function() { ... });
par :
Flight::route('/delit/edit/value', function() {
verif_connecter();
verif_admin();
$id = $_POST['id_delit'];
$amd_delit = $_POST['amd_delit'];
$tps_delit = $_POST['tps_delit'];
$retrait = $_POST['retrait'];
if ($retrait == 0) { $retrait = null; }
$info = Delit::getinfoDelit($id);
if (($info->amende != $amd_delit) and ($amd_delit != '')) {
editDelitAmende($id, $amd_delit);
addHistorique(Agent::getInfoAgent()->matricule, "0¤3¤0¤0¤3¤0¤" . $id . "¤" . $info->amende . "¤" . $amd_delit);
}
if (($info->temps_prison != $tps_delit) and ($amd_delit != '')) {
editDelitPrison($id, $tps_delit);
addHistorique(Agent::getInfoAgent()->matricule, "0¤3¤1¤0¤3¤1¤" . $id . "¤" . $info->temps_prison . "¤" . $tps_delit);
}
if (($info->retrait != $retrait) and ($retrait != '')) {
editDelitRetrait($id, $retrait);
if ($info->retrait == null) { $info->retrait = 0; }
addHistorique(Agent::getInfoAgent()->matricule, "0¤3¤2¤0¤3¤2¤" . $id . "¤" . $info->retrait . "¤" . $retrait);
}
});
Fichier : intranet-cop/assets/script/event_saisie.js
Au niveau de la ligne ~288, dans la fonction AfficheMenuModDelit()
, Ã à la fin de :
document.getElementById("list_route").style.display = "none";
document.getElementById("list_leger").style.display = "none";
document.getElementById("list_moyen").style.display = "none";
document.getElementById("list_grave").style.display = "none";
document.getElementById("dtls_amende").style.display = "none";
document.getElementById("dtls_prison").style.display = "none";
document.getElementById("confirm_edit_delit").style.display = "none";
document.getElementById("button_delit").style.display = "none";
Ajoutez :
document.getElementById("visibleRetrait").style.display = "none";
Au niveau de la ligne ~322, remplacer la fonction EditMenuModDelit(value_this) { ... }
par :
/* Aficher les informations en fonction du dédélit */
function EditMenuModDelit(value_this) {
if (value_this == 0) {
document.getElementById("dtls_amende").style.display = "none";
document.getElementById("dtls_prison").style.display = "none";
document.getElementById("confirm_edit_delit").style.display = "none";
document.getElementById("amd_delit").value = '';
document.getElementById("tps_delit").value = '';
document.getElementById("button_delit").style.display = "none";
document.getElementById("visibleRetrait").style.display = "none";
return;
}
document.getElementById("dtls_amende").style.display = "block";
document.getElementById("dtls_prison").style.display = "block";
document.getElementById("confirm_edit_delit").style.display = "none";
document.getElementById("amd_delit").value = '';
document.getElementById("tps_delit").value = '';
document.getElementById("button_delit").setAttribute('value', value_this);
document.getElementById("button_delit").style.display = "initial";
if (document.getElementById("list_route").style.display != "none") {
document.getElementById("visibleRetrait").style.display = "block";
}
// On met en forme les donnédonnées
const data = new FormData();
data.append('id_delit', value_this);
// On envoi le modèmodèle
const requeteAjax = new XMLHttpRequest();
requeteAjax.open('POST', '/recherche/info_delit');
requeteAjax.send(data);
// On récupèrécupère le rérésultat de la requêrequête
requeteAjax.onload = function(){
const resultat = JSON.parse(requeteAjax.responseText);
document.getElementById("amd_delit").placeholder = resultat.amende;
document.getElementById("tps_delit").placeholder = resultat.prison;
if (resultat.retrait) {
document.getElementById("point_retrait").placeholder = resultat.retrait;
}
else {
document.getElementById("point_retrait").placeholder = 0;
}
}
}
Au niveau de la ligne ~372, dans la fonction updateDelitAdmin()
à à la fin de :
data.append('id_delit', document.getElementById('button_delit').value);
data.append('amd_delit', document.getElementById('amd_delit').value);
data.append('tps_delit', document.getElementById('tps_delit').value);
Ajoutez :
data.append('retrait', document.getElementById('point_retrait').value);
Fichier : intranet-cop/page/administration/modification_systeme.twig
Au niveau de la ligne ~151, Ã à la suite de :
<div id="dtls_amende">
<label for="delit_amende">Entrer le montant de l'amende :</label>
<input class="short" type="number" name="delit_amende" id="amd_delit" min="0" placeholder="Montant Amende" required>
</div>
<div id="dtls_prison">
<label for="delit_prison">Temps de prison (mois) :</label>
<input class="short" type="number" name="delit_prison" id="tps_delit" min="0" placeholder="Temps en mois">
</div>
Ajoutez :
<div id="visibleRetrait">
<label for="retrait_point">Retrait des points :</label>
<input type="number" name="retrait_point" id="point_retrait" min="0" placeholder="Nombre de points à à retirer">
</div>
ÀÀ la fin du fichier, à à la suite de :
document.getElementById("confirm_edit_mdp").style.display = "none";
document.getElementById("confirm_edit_delit").style.display = "none";
document.getElementById("list_route").style.display = "none";
document.getElementById("list_leger").style.display = "none";
document.getElementById("list_moyen").style.display = "none";
document.getElementById("list_grave").style.display = "none";
document.getElementById("dtls_amende").style.display = "none";
document.getElementById("dtls_prison").style.display = "none";
document.getElementById("button_delit").style.display = "none";
Ajoutez :
document.getElementById("visibleRetrait").style.display = "none";
Fichier : intranet-cop/src/edit.php
Au niveau de la ligne ~88, en dessous de la fonction editDelitPrison($id, $tps_delit)
, ajoutez :
function editDelitRetrait($id, $retrait) {
$delit = Model::factory('Delit')->where('id', $id)->find_one();
$delit->set('retrait', $retrait);
$delit->save();
}
Fichier : intranet-cop/src/historique.php
:
Au niveau de la ligne ~73, remplacez :
// Modification DéDélit
case '0¤3¤0¤3¤0':
return "ADMIN : Modification DéDélit n°n°" . $code[3] . " - Amende : " . $code[4] . " >>> " . $code[5];
break;
case '0¤3¤0¤3¤1':
return "ADMIN : Modification DéDélit n°n°" . $code[3] . " - Temps prison : " . $code[4] . " >>> " . $code[5];
break;
Par :
// Modification DéDélit
case '0¤3¤0¤3¤0':
return "ADMIN : Modification DéDélit n°n°" . $code[3] . " - Amende : " . $code[4] . " >>> " . $code[5];
break;
case '0¤3¤0¤3¤1':
return "ADMIN : Modification DéDélit n°n°" . $code[3] . " - Temps prison : " . $code[4] . " >>> " . $code[5];
break;
case '0¤3¤0¤3¤2':
return "ADMIN : Modification DéDélit n°n°" . $code[3] . " - Point retiréretiré : " . $code[4] . " >>> " . $code[5];
break;
Affichage du nombre de point sur la fiche
Fichier : intranet-cop/page/fiche/detail_route.twig
En dessous de (ligne ~38) :
<p><strong>Amende :</strong>{{ delit.amende|number_format(2, ',', ' ') }} $</p>
Ajoutez :
<p><strong>Point(s) :</strong>{{ delit.retrait }} point(s)</p>
Protocole de retrait de permis
Fichier : intranet-cop/route/delit-routier.php
Au niveau de la ligne ~95, remplacez Flight::route('/delit-routier/@id_delit/@etat', function($id_delit, $etat) { ... });
par :
Flight::route('/delit-routier/@id_delit/@etat', function($id_delit, $etat) {
verif_connecter();
$agent = Agent::getInfoAgent();
if ($agent->editer == 0) {
Flight::redirect("/delit-routier/$id_delit");
exit();
}
closeRoute($id_delit, $etat, $agent->lspd_id);
/* Protocole de perte de point pour le civil */
if ($etat == 2) {
/* Action sur le permis */
$MyDelit = Route::getRoute($id_delit); // RécupéRécupération du dédélit
$civil = Personne::getinfoPersonne($MyDelit->conducteur_id);
$diff = $civil->permis - $MyDelit->retrait;
if ($diff < 0) { $diff = 0; } // On ne va pas dans le nénégatif
editCivil2($civil->id, $civil->phone, $diff, time());
}
addHistorique($agent->matricule, "5¤0¤1¤5¤0¤1¤" . $id_delit . "¤" . $etat);
Flight::redirect("/delit-routier/$id_delit");
});
Protocole Calculer l'amende
Fichier : intranet-cop/routes/civil.php
Au niveau de la ligne ~37 remplacez Flight::route('/civil/@id_citoyen/calcul-amende', function($id_citoyen) { ... });
par :
Flight::route('/civil/@id_citoyen/calcul-amende', function($id_citoyen) {
verif_connecter();
$civil = Personne::getinfoPersonne($id_citoyen);
$amendeCasier = Casier::getAmende($id_citoyen);
$amendeRoute = route::getAmende($id_citoyen);
$retraitRoute = route::getRetrait($id_citoyen);
$prisonCasier = Casier::getPrison($id_citoyen);
$prisonRoute = route::getPrison($id_citoyen);
$total = traitement_amende($amendeCasier, $amendeRoute, $prisonCasier, $prisonRoute);
// Traitement de l'information date
if ($civil->permis == 0) {
$value = traitementDate($civil->date_permis);
$civil->date_permis = $value[0]; // On modifie la valeur de date permis
$civil->date_trad = $value[1];
}
Flight::view()->display('fiche/montant_amende.twig', array(
'civil' => $civil,
'prison' => $total[1],
'amende' => $total[0],
'prisonAnnéprisonAnnée' => $total[2],
'prisonAnnéprisonAnnée2' => $total[3],
'retrait' => $retraitRoute
));
});
Au niveau de la ligne ~64 remplacez Flight::route('/civil/@id_citoyen/close-casiers', function($id_citoyen) { ... });
par :
Flight::route('/civil/@id_citoyen/close-casiers', function($id_citoyen) {
verif_connecter();
$agent = Agent::getInfoAgent();
if ($agent->editer == 0) {
Flight::redirect("/civil/$id_citoyen/calcul-amende");
exit();
}
$Casier = Casier::getCasierEnCours($id_citoyen);
$Route = Route::getRouteEnCours($id_citoyen);
foreach ($Casier as $variable) {
closeCasier($variable->id_delit, 3, $agent->lspd_id);
addHistorique($agent->matricule, "5¤0¤0¤5¤0¤0¤" . $variable->id_delit . "¤" . 2);
}
foreach ($Route as $variable) {
closeRoute($variable->delit_id, 3, $agent->lspd_id);
/* Protocole de perte de point pour le civil */
$MyDelit = Route::getRoute($variable->delit_id); // RécupéRécupération du dédélit
$civil = Personne::getinfoPersonne($MyDelit->conducteur_id);
$diff = $civil->permis - $MyDelit->retrait;
if ($diff < 0) { $diff = 0; } // On ne va pas dans le nénégatif
editCivil2($civil->id, $civil->phone, $diff, time());
addHistorique($agent->matricule, "5¤0¤1¤5¤0¤1¤" . $variable->delit_id . "¤" . 2);
}
Flight::redirect("/civil/$id_citoyen");
});
Fichier : intranet-cop/page/fiche/montant_amende.twig
En dessous de (ligne ~33) :
<p><strong>Temps de prison : </strong>{{ prisonAnnéprisonAnnée }}</p>
Ajoutez :
{% if retrait < civil.permis %}
<p><strong>Retrait point : </strong>{{ retrait }} point(s)</p>
{% else %}
<p><strong>Retrait point : </strong>Permis RetiréRetiré</p>
{% endif %}
Fichier : intranet-cop/entity/route.php
Dans la class Route
(ligne ~42) en dessous :
public static function getAmende($id) {
return Route::where(array('conducteur_id' => $id, 'etat' => '0'))
->sum('amende');
}
Ajoutez :
public static function getRetrait($id) {
return Route::where(array('conducteur_id' => $id, 'etat' => '0'))
->sum('retrait');
}
Modification de l'affichage lors de la saisie d'un dédélit routier
Fichier : intranet-cop/page/add/add_delit_route.php
Au niveau de la ligne ~39, remplacez :
<option value="{{ personne.id }}">{{ personne.nom|capitalize }} {{ personne.prenom|capitalize }}</option>
Par :
<option value="{{ personne.id }}">{{ personne.nom|capitalize }} {{ personne.prenom|capitalize }} - {{ personne.permis }} point(s)</option>
Au niveau de la ligne ~52, remplacez :
<option value="{{ route.id }}">{{ route.intitule|capitalize }} - {{ route.amende|number_format(2, ',', ' ') }} $</option>
Par :
<option value="{{ route.id }}">{{ route.intitule|capitalize }} - {{ route.amende|number_format(2, ',', ' ') }} $ - {{ route.retrait}} point(s)</option>
Modification sur le site vitrine
Pour afficher le nombre de points dans la liste des amendes vous devez modifier le fichier site-cop/views/liste_amendes.twig
au niveau de la ligne ~30, remplacez :
<p><stong>{{ delit.intitule }} : </strong>{{ delit.amende }}$ - {{delit.temps_prison}} mois</p>
Par :
<p><stong>{{ delit.intitule }} : </strong>{{ delit.amende }}$ - {{delit.temps_prison}} mois - {{delit.retrait}} point(s)</p>
Vider le cache
Une fois que vous avez terminéterminé les modifications, supprimez le rérépertoire cache
de votre site intranet et vitrine.