COP - Retrait auto des points de permis
Incompatible avec les versions antérieures à 2.3.0
Sujet : Retrait automatiquement les points sur le permis en fonction du 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è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éfinir un nombre de points par délit. Ensuite, lorsque vous fermerez un délit du type routier, les points seront automatiquement retirés sur le permis du conducteur.
Une fois que vous aurez terminé les modifications. Vous pouvez soit définir le nombre de points par délit depuis la base de données ou alors avec le menu d'administration avec la section modification.
Modification dans la base de données
Nous allons ajouter une colonne dans la déclaration des 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ête permet de mettre la valeur de retrait des points de permis à 0 pour tous les délits routier.
UPDATE lspd_delit SET retrait = 0 WHERE `type_delit` = '0' AND `retrait` IS NULL;
Modification de l'ajout des délits depuis l'administration
Fichier : intranet-cop/page/administration/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élit :</label>
<select name="delit_type" id="type_delit">
<option value="0">Délit Routier</option>
<option value="1">Délit Léger</option>
<option value="2">Délit Moyen</option>
<option value="3">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élit :</label>
<select name="delit_type" id="type_delit" onchange="afficheRetraitPermis();">
<option value="0">Délit Routier</option>
<option value="1">Délit Léger</option>
<option value="2">Délit Moyen</option>
<option value="3">Délit Grave</option>
</select>
</div>
Fichier : intranet-cop/assets/script/event_saisie.js
À la fin du fichier, ajoutez la fonction suivante :
/* Afficher la 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é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è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¤" . ($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é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¤" . $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¤" . $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¤" . $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é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ées
const data = new FormData();
data.append('id_delit', value_this);
// On envoi le modèle
const requeteAjax = new XMLHttpRequest();
requeteAjax.open('POST', '/recherche/info_delit');
requeteAjax.send(data);
// On récupère le résultat de la 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élit
case '0¤3¤0':
return "ADMIN : Modification Délit n°" . $code[3] . " - Amende : " . $code[4] . " >>> " . $code[5];
break;
case '0¤3¤1':
return "ADMIN : Modification Délit n°" . $code[3] . " - Temps prison : " . $code[4] . " >>> " . $code[5];
break;
Par :
// Modification Délit
case '0¤3¤0':
return "ADMIN : Modification Délit n°" . $code[3] . " - Amende : " . $code[4] . " >>> " . $code[5];
break;
case '0¤3¤1':
return "ADMIN : Modification Délit n°" . $code[3] . " - Temps prison : " . $code[4] . " >>> " . $code[5];
break;
case '0¤3¤2':
return "ADMIN : Modification Délit n°" . $code[3] . " - Point 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ération du 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égatif
editCivil2($civil->id, $civil->phone, $diff, time());
}
addHistorique($agent->matricule, "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ée' => $total[2],
'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¤" . $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ération du 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égatif
editCivil2($civil->id, $civil->phone, $diff, time());
addHistorique($agent->matricule, "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ée }}</p>
Ajoutez :
{% if retrait < civil.permis %}
<p><strong>Retrait point : </strong>{{ retrait }} point(s)</p>
{% else %}
<p><strong>Retrait point : </strong>Permis 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é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é les modifications, supprimez le répertoire cache
de votre site intranet et vitrine.