COP - Délit 2.0
Nous rejoindre sur Discord : lien discord
Sujet : Ce plugin permet d'ajouter de définir une amende forfaitaire, une amende maximal ainsi que d'ajouter une description à l'amande
Avant :
Après :
(Ce plugin est compatible avec le retrait automatique des points sur le permis)
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 %}
Emplacement : intranet-cop/page/fiche/detail_casier.twig
En dessous de :
<p><strong>Nom :</strong>{{ delit.nom }}</p>
Ajoutez :
<p><strong>Description :</strong>{{ delit.description }}</p>
Et remplacez :
<p><strong>Amende :</strong>{{ delit.amende|number_format(2, ',', ' ') }} {{ _Devise }}</p>
Ajoutez :
<p><strong>Amende forfaitaire:</strong>{{ delit.amende|number_format(2, ',', ' ') }} {{ _Devise }}</p>
<p><strong>Amende maximal:</strong>{{ delit.amende_max|number_format(2, ',', ' ') }} {{ _Devise }}</p>
Emplacement : intranet-cop/page/fiche/detail_route.twig
En dessous de :
<p><strong>Nom Delit :</strong>{{ delit.nom }}</p>
Ajoutez :
<p><strong>Description :</strong>{{ delit.description }}</p>
Et remplacez :
<p><strong>Amende :</strong>{{ delit.amende|number_format(2, ',', ' ') }} {{ _Devise }}</p>
Ajoutez :
<p><strong>Amende forfaitaire:</strong>{{ delit.amende|number_format(2, ',', ' ') }} {{ _Devise }}</p>
<p><strong>Amende maximal:</strong>{{ delit.amende_max|number_format(2, ',', ' ') }} {{ _Devise }}</p>
Emplacement : intranet-cop/page/fiche/montant_amende.twig
Au niveau de la ligne ~31, remplacez :
<p><strong>Montant de l'amende : </strong>{{ amende|number_format(2, ',', ' ') }} {{ _Devise }}</p>
Par :
<p><strong>Montant total de l'amende forfaitaire :</strong> {{ amende|number_format(2, ',', ' ') }} {{ _Devise }}</p>
<p><strong>Montant maximal de l'amende : </strong>{{ amende_max|number_format(2, ',', ' ') }} {{ _Devise }}</p>
Et niveau de la ligne ~45, remplacez :
<p><strong>Montant de l'amende : </strong>{{ (amende / _divAmende)|number_format(2, ',', ' ') }} {{ _Devise }}</p>
Par :
<p><strong>Montant total de l'amende forfaitaire :</strong> {{ (amende / _divAmende)|number_format(2, ',', ' ') }} {{ _Devise }}</p>
<p><strong>Montant maximal de l'amende :</strong> {{ (amende_max / _divAmende)|number_format(2, ',', ' ') }} {{ _Devise }}</p>
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)
Emplacement : intranet-cop/routes/civil.php
Au niveau de la ligne ~38, dans la fonction Flight::route('/civil/@id_citoyen/calcul-amende', function($id_citoyen) {...}
, remplacez :
$total = traitement_amende($amendeCasier, $amendeRoute, $prisonCasier, $prisonRoute);
Par :
$amendeMaxCasier = Casier::getAmendeMax($id_citoyen);
$amendeMaxRoute = route::getAmendeMax($id_citoyen);
$total = traitement_amende($amendeCasier, $amendeRoute, $prisonCasier, $prisonRoute, $amendeMaxCasier, $amendeMaxRoute);
Au niveau de la ligne ~55, dans le tableau présent dans Flight::view()->display('fiche/montant_amende.twig', array(...));
, ajoutez :
'amende_max' => $total[4],
Exemple avant :
Flight::view()->display('fiche/montant_amende.twig', array(
'civil' => $civil,
'prison' => $total[1],
'amende' => $total[0],
'prisonAnnée' => $total[2],
'prisonAnnée2' => $total[3],
));
Exemple après :
Flight::view()->display('fiche/montant_amende.twig', array(
'civil' => $civil,
'prison' => $total[1],
'amende' => $total[0],
'amende_max' => $total[4],
'prisonAnnée' => $total[2],
'prisonAnnée2' => $total[3],
));
Emplacement : intranet-cop/src/functions.php
Au niveau de la ligne ~100, remplacez la fonction traitement_amende($ac, $ar, $pc, $pr) {...}
par :
function traitement_amende($ac, $ar, $pc, $pr, $amc, $amr) {
$info[0] = $ac + $ar; // Montant de l'amende totale
$info[1] = $pc + $pr; // Temps de prison total
$info[2] = ($info[1] - ($info[1]%12))/12 . " ans et " . $info[1]%12 . " mois"; // Temps de prison en années
$info[3] = ($info[1] - ($info[1]%12))/6 . " ans et " . ($info[1]%12)*serveurIni('PRISON', 'multiplicateur_prison') . " mois"; // Temps de prison en années
$info[4] = $amc + $amr; // Montant de l'amende totale maximale
return $info;
}
Emplacement : intranet-cop/entity/casier.php
En dessous de :
public static function getAmende($id) {
return Casier::where(array('id_personne' => $id, 'etat' => '0'))
->sum('amende');
}
Ajoutez la fonction suivante :
public static function getAmendeMax($id) {
return Casier::where(array('id_personne' => $id, 'etat' => '0'))
->sum('amende_max');
}
Emplacement : intranet-cop/entity/route.php
En dessous de :
public static function getAmende($id) {
return Route::where(array('conducteur_id' => $id, 'etat' => '0'))
->sum('amende');
}
Ajoutez la fonction suivante :
public static function getAmendeMax($id) { // Récuparatoin de l'ID d'une personne enfonction de son nom et prénom
return Route::where(array('conducteur_id' => $id, 'etat' => '0'))
->sum('amende_max');
}
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;
}
Vider le cache
Une fois que vous avez terminé les modifications, supprimez le répertoire cache
de votre site intranet.