COP - Amende 2.0
Nous rejoindre sur Discord : lien discord
Sujet : Ajouter à vos amendes un montant forfaitaire, un montant maximal ainsi qu'une description
(Ce plugin est compatible avec le retrait automatique des points sur le permis)
-
Liste des fichiers concernés :
-
intranet-cop/page/administration/ajout_systeme.twig
-
intranet-cop/page/administration/modification_systeme.twig
-
intranet-cop/page/add/add_delit_route.twig
-
intranet-cop/page/add/add_casier.twig
-
intranet-cop/routes/insert.php
-
intranet-cop/src/insertion.php
-
intranet-cop/routes/recherche.php
-
intranet-cop/routes/edit.php
-
intranet-cop/src/edit.php
-
intranet-cop/src/historique.php
-
intranet-cop/assets/script/event_saisie.js
-
intranet-cop/assets/styles/global/contenu.css
-
Update de la base de données
Dans votre base de données, exécutez la requêtes sql suivante :
ALTER TABLE lspd_delit ADD amende_max INT;
ALTER TABLE lspd_delit ADD description TEXT;
CREATE OR REPLACE VIEW info_casier AS
SELECT
lspd_casier.id AS id_delit, lspd_casier.personne AS id_personne, lspd_delit.intitule AS nom, lspd_delit.type_delit AS type_d, lspd_delit.amende AS amende, lspd_delit.amende_max AS amende_max, lspd_delit.temps_prison AS prison, lspd_delit.description AS description, lspd_casier.enregistrer_par AS enregistrer_par, lspd_casier.enregistrer_name AS enregistrer_name, lspd_casier.enregistrer_le AS enregistrer_le, lspd_casier.acquite AS etat, lspd_casier.acquite_par AS acquite_par, lspd_casier.acquite_name AS acquite_name, lspd_casier.acquite_le AS acquite_le, lspd_casier.remarque AS remarque
FROM
lspd_casier, lspd_delit
WHERE
lspd_casier.numero_delit = lspd_delit.id;
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.amende_max AS amende_max, lspd_delit.temps_prison AS prison, lspd_delit.description AS description, 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;
Attention, si vous utilisez le plugin des points de permis, exécutez cette requête en plus :
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.amende_max AS amende_max, lspd_delit.temps_prison AS prison, lspd_delit.retrait AS retrait, lspd_delit.description AS description, 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;
Modification fichier twig
Emplacement : intranet-cop/page/administration/ajout_systeme.twig
Au niveau de la ligne ~54, remplacez :
<div>
<label for="delit_amende">Entrer le montant de l'amende :</label>
<input type="number" name="delit_amende" id="amd_delit" min="0" placeholder="Montant Amende">
</div>
Par :
<div>
<label for="delit_description">Entrer une description au delit :</label>
<textarea type="text" name="delit_description" id="description_delit" placeholder="Description du délit"></textarea>
</div>
<div>
<label for="delit_amende">Entrer le montant de l'amende forfaitaire :</label>
<input class="short" type="number" name="delit_amende" id="amd_delit" min="0" placeholder="Montant Amende" required>
</div>
<div>
<label for="delit_amende_max">Entrer le montant de l'amende maximal :</label>
<input class="short" type="number" name="delit_amende_max" id="amd_delit_max" min="0" placeholder="Montant Amende Maximum">
</div>
Emplacement : intranet-cop/page/administration/modification_systeme.twig
Au niveau de la ligne ~151, remplacez :
<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>
Par :
<div id="dtls_description">
<label for="delit_description">Entrer une description au delit :</label>
<textarea type="text" name="delit_description" id="description_delit" placeholder="Description du délit"></textarea>
</div>
<div id="dtls_amende">
<label for="delit_amende">Entrer le montant de l'amende forfaitaire :</label>
<input class="short" type="number" name="delit_amende" id="amd_delit" min="0" placeholder="Montant Amende" required>
</div>
<div id="dtls_amende_max">
<label for="delit_amende_max">Entrer le montant de l'amende maximal :</label>
<input class="short" type="number" name="delit_amende_max" id="amd_delit_max" min="0" placeholder="Montant Amende Maximum">
</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("dtls_description").style.display = "none";
document.getElementById("dtls_amende_max").style.display = "none";
Emplacement : intranet-cop/page/add/add_delit_route.twig
Au niveau de la ligne ~65, remplacez la ligne :
{% for i in 1..50 %}
<div id="saisie_route_{{ i }}">
<label>Délit :</label>
<select id="route_value_{{ i }}" name="delit_name" onchange="affiche_suite('saisie_route_{{ i }}', 'route_value_{{ i }}', 'saisie_route_{{ i + 1 }}');">
<option value="NULL">Sélectionner un délit</option>
{% for route in routes %}
<option value="{{ route.id }}">{{ route.intitule }} - {{ route.amende|number_format(2, ',', ' ') }} {{ _Devise }}</option>
{% else %}
{% set __nbdelit = false %}
<option>Aucun délit déclaré</option>
{% endfor %}
</select>
</div>
{% endfor %}
Par :
{% for i in 1..50 %}
<div id="saisie_route_{{ i }}">
<label>Délit :</label>
<select id="route_value_{{ i }}" name="delit_name" onchange="affiche_suite('{{ i }}', 'saisie_route_{{ i }}', 'route_value_{{ i }}', 'saisie_route_{{ i + 1 }}', '{{ _Devise }}');">
<option value="NULL">Sélectionner un délit</option>
{% for route in routes %}
<option value="{{ route.id }}">{{ route.intitule }} - {{ route.amende|number_format(2, ',', ' ') }} {{ _Devise }}/{{ route.amende_max|number_format(2, ',', ' ') }} {{ _Devise }} - {{ route.retrait}} point{% if route.retrait > 1 %}s{% endif %}</option>
{% else %}
{% set __nbdelit = false %}
<option>Aucun délit déclaré</option>
{% endfor %}
</select>
<span class="description" id="route_description_{{ i }}"></span>
</div>
{% endfor %}
Emplacement : intranet-cop/page/add/add_casier.twig
Au niveau de la ligne ~57, remplacez la ligne :
{% for i in 1..50 %}
<div id="saisie_casier_{{ i }}">
<label>Délit :</label>
<select id="casier_value_{{ i }}" name="delit_name_{{ i }}" onchange="affiche_suite('saisie_casier_{{ i }}', 'casier_value_{{ i }}', 'saisie_casier_{{ i + 1 }}');">
<option value="NULL">Sélectionner un délit</option>
{% for __superItem in __superVar %}
<option value="NULL">{{ __superItem.name }}</option>
{% for delit in __superItem.content %}
{% set __nbdelit = true %}
<option value="{{ delit.id }}">{{ delit.intitule|capitalize }} - {{ delit.amende|number_format(2, ',', ' ') }} {{ _Devise }}</option>
{% endfor %}
{% endfor %}
</select>
</div>
{% endfor %}
Par :
{% for i in 1..50 %}
<div id="saisie_casier_{{ i }}">
<label>Délit :</label>
<select id="casier_value_{{ i }}" name="delit_name_{{ i }}" onchange="affiche_suite('{{ i }}', 'saisie_casier_{{ i }}', 'casier_value_{{ i }}', 'saisie_casier_{{ i + 1 }}', '{{ _Devise }}');">
<option value="NULL">Sélectionner un délit</option>
{% for __superItem in __superVar %}
<option value="NULL">{{ __superItem.name }}</option>
{% for delit in __superItem.content %}
{% set __nbdelit = true %}
<option value="{{ delit.id }}">{{ delit.intitule }} - {{ delit.amende|number_format(2, ',', ' ') }} {{ _Devise }}/{{ delit.amende_max|number_format(2, ',', ' ') }} {{ _Devise }}</option>
{% endfor %}
{% endfor %}
</select>
<span class="description" id="description_{{ i }}"></span>
</div>
{% endfor %}
Modification fichiers php
Emplacement : intranet-cop/routes/insert.php
Au niveau de la ligne ~61, dans la fonction Flight::route('/insert/delit', function() {...}
, Ã la suite de :
$nom = $_POST['nom'];
$montant = $_POST['amende'];
$prison = $_POST['temps'];
$type = $_POST['type'];
Ajoutez :
$montantMax = $_POST['amende_max'];
$description = $_POST['description'];
if ($montantMax < $montant) {
$montantMax = $montant;
}
Dans l'appel de la fonction addDelit(...);
, ajoutez les paramètres : , $montantMax, $description
.
addDelit($nom, $montant, $prison, $type); // Avant
addDelit($nom, $montant, $prison, $type, $montantMax, $description); // Après
Emplacement : intranet-cop/src/insertion.php
Au niveau de la ligne ~33, dans l'appel de la fonction function addDelit(...) {...}
, ajoutez les paramètres : , $montantMax, $description
.
function addDelit($nom, $montant, $prison, $type) {...} // Avant
function addDelit($nom, $montant, $prison, $type, $montantMax, $description) {...} // Après
Dans le tableau présent dans $casier->set(array(...));
, ajoutez :
'amende_max' => $montantMax,
'description' => $description,
Exemple avant :
$casier->set(array(
'intitule' => $nom,
'amende' => $montant,
'temps_prison' => $prison,
'type_delit' => $type,
));
Exemple après :
$casier->set(array(
'intitule' => $nom,
'amende' => $montant,
'temps_prison' => $prison,
'type_delit' => $type,
'amende_max' => $montantMax,
'description' => $description,
));
Emplacement : intranet-cop/routes/recherche.php
Au niveau de la ligne ~74, dans la fonction Flight::route('/recherche/info_delit', function() {...}
, dans le tableau présent dans $data = [...];
, ajoutez :
'amende_max' => $info->amende_max,
'description' => $info->description,
Exemple avant :
$data = [
'amende' => $info->amende,
'prison' => $info->temps_prison,
];
Exemple après :
$data = [
'amende' => $info->amende,
'prison' => $info->temps_prison,
'amende_max' => $info->amende_max,
'description' => $info->description,
];
Emplacement : intranet-cop/routes/edit.php
Au niveau de la ligne ~146, dans la fonction Flight::route('/delit/edit/value', function() {...}
, Ã la suite de :
$id = $_POST['id_delit'];
$amd_delit = $_POST['amd_delit'];
$tps_delit = $_POST['tps_delit'];
Ajoutez :
$description_delit = $_POST['description_delit'];
$amd_delit_max = $_POST['amd_delit_max'];
À la suite de (~161) :
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);
}
Ajoutez :
if (($info->description != $description_delit) and ($description_delit != '')) {
editDelitDescription($id, $description_delit);
if ($info->retrait == null) { $info->retrait = 0; }
addHistorique(Agent::getInfoAgent()->matricule, "0¤3¤3¤" . $id . "¤" . $info->description . "¤" . $description_delit);
}
if (($info->amende_max != $amd_delit_max) and ($amd_delit_max != '')) {
editDelitAmendeMax($id, $amd_delit_max);
if ($info->retrait == null) { $info->retrait = 0; }
addHistorique(Agent::getInfoAgent()->matricule, "0¤3¤4¤" . $id . "¤" . $info->amende_max . "¤" . $amd_delit_max);
}
Emplacement : intranet-cop/src/edit.php
À la fin du fichier, avant ?>
, ajoutez le code suivant :
function editDelitDescription($id, $description) {
$delit = Model::factory('Delit')->where('id', $id)->find_one();
$delit->set('description', $description);
$delit->save();
}
function editDelitAmendeMax($id, $amendeMax) {
$delit = Model::factory('Delit')->where('id', $id)->find_one();
$delit->set('amende_max', $amendeMax);
$delit->save();
}
Emplacement : intranet-cop/src/historique.php
Au niveau de la ligne ~73, Ã la suite de :
// 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;
Ajoutez :
case '0¤3¤3':
return "ADMIN : Modification Délit n°" . $code[3] . " - Description : " . $code[4] . " >>> " . $code[5];
break;
case '0¤3¤4':
return "ADMIN : Modification Délit n°" . $code[3] . " - Amende Max : " . $code[4] . " >>> " . $code[5];
break;
(L'indicatif 0¤3¤2 étant déjà utilisé par le retrait de point)
Modification fichiers event_saisie.js
Emplacement : intranet-cop/assets/script/event_saisie.js
Au niveau de la ligne ~226, dans la fonction function AddDelitAdmin() {...}
:
- À la fin du tableau de la variable var_tab, ajoutez :
, 'amende_max', 'description'
. - À la fin du tableau de la variable var_tab2, ajoutez :
, 'amd_delit_max', 'description_delit'
.
Exemple avant :
let var_tab = ['nom', 'amende', 'temps', 'type'];
let var_tab2 = ['name_delit', 'amd_delit', 'tps_delit', 'type_delit'];
Exemple après :
let var_tab = ['nom', 'amende', 'temps', 'type', 'amende_max', 'description'];
let var_tab2 = ['name_delit', 'amd_delit', 'tps_delit', 'type_delit', 'amd_delit_max', 'description_delit'];
Au niveau de la ligne ~288 dans la fonction function AfficheMenuModDelit() {...}
:
À la suite :
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("dtls_description").style.display = "none";
document.getElementById("dtls_amende_max").style.display = "none";
Au niveau de la ligne ~322 dans la fonction function AfficheMenuModDelit() {...}
:
Dans la première condition if (value_this == 0) {...}
avant le return;
, ajoutez :
document.getElementById("dtls_description").style.display = "none";
document.getElementById("dtls_amende_max").style.display = "none";
À la suite de (~333) :
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";
document.getElementById("dtls_description").style.display = "block";
document.getElementById("dtls_amende_max").style.display = "block";
Ajoutez :
document.getElementById("dtls_description").style.display = "block";
document.getElementById("dtls_amende_max").style.display = "block";
À la suite de (~354) :
document.getElementById("amd_delit").placeholder = resultat.amende;
document.getElementById("tps_delit").placeholder = resultat.prison;
Ajoutez :
document.getElementById("amd_delit_max").placeholder = resultat.amende_max;
if (resultat.description != "") {
document.getElementById("description_delit").placeholder = resultat.description;
}
Au niveau de la ligne ~360 dans la fonction function updateDelitAdmin() {...}
:
À la suite de (~364) :
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('description_delit', document.getElementById('description_delit').value);
data.append('amd_delit_max', document.getElementById('amd_delit_max').value);
Modification fichier css
Emplacement : intranet-cop/assets/styles/global/contenu.css
À la fin du fichier, ajoutez :
.contenu div .description {
display: block;
margin-left: 20%;
width: 100%;
text-align: justify;
color: var(--profilDescription);
font-style: italic;
}
Au niveau de la ligne ~433, remplacez la fonction affiche_suite(actuel, contentValue, suivant) {...}
par :
function affiche_suite(id, actuel, contentValue, suivant, devise) {
getDescription(id, contentValue, devise);
var act = document.getElementById(actuel);
var actValue = document.getElementById(contentValue);
if (act && actValue) {
if (actValue.value) {
var next = document.getElementById(suivant);
if (next) {
next.style.display = "block";
}
}
}
}
À la fin du fichier, ajoutez :
/* Récupérer la description d'un délit */
function getDescription(id, contentValue, devise) {
// On met en forme les données
const data = new FormData();
data.append('id_delit', document.getElementById(contentValue).value);
// 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);
console.log(resultat);
document.getElementById(`description_${id}`).innerHTML = `Amende forfaitaire : ${resultat.amende} ${devise}<br/>Amende maximale : ${resultat.amende_max} ${devise}<br/>Note(s) : ${resultat.description}`;
}
}
Modification fichier css
Emplacement : intranet-cop/assets/styles/global/contenu.css
À la fin du fichier, ajoutez :
.contenu div .description {
display: block;
margin-left: 20%;
width: 100%;
text-align: justify;
color: var(--profilDescription);
font-style: italic;
}