From 0f1f3ed56d5ea9304fec709f21ab73f03471ad4a Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Fri, 25 Apr 2025 12:34:44 +0200 Subject: [PATCH] Ajout immo : forcer choix exercice --- _check_date.html | 8 ++--- add_asset.html | 72 ++++++++++++++++++++--------------------- scripts.js | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+), 44 deletions(-) create mode 100644 scripts.js diff --git a/_check_date.html b/_check_date.html index 3dc1362..f68ec49 100644 --- a/_check_date.html +++ b/_check_date.html @@ -8,15 +8,11 @@ *}} {{:assign open_years=""}} -{{#years status=false order="start_date"}} - {{:assign open_years=$open_years|cat:"\n"|cat:" - "|cat:$label|cat:" : "}} - {{:assign debut=$start_date|date_short}} - {{:assign fin=$end_date|date_short}} - {{:assign open_years=$open_years|cat:$debut|cat:" à "|cat:$fin}} +{{#years closed=false order="start_date" assign="open_years."}} {{if $start_date|strtotime <= $date|parse_date|strtotime && $end_date|strtotime >= $date|parse_date|strtotime - }} + }} {{:assign selected_year=$id}} {{:assign selected_chart=$id_chart}} {{/if}} diff --git a/add_asset.html b/add_asset.html index ba960df..bf97a82 100644 --- a/add_asset.html +++ b/add_asset.html @@ -14,7 +14,13 @@ keep="open_years, selected_year, selected_chart" }} {{if $selected_year == null}} - {{:error message="La date choisie n'est dans aucun exercice ouvert !!\nExercices ouverts : %s"|args:$open_years}} + {{:assign msg_years=""}} + {{#foreach from=$open_years}} + {{:assign debut=$start_date|date_short}} + {{:assign fin=$end_date|date_short}} + {{:assign msg_years=$msg_years|cat:"\n"|cat:" - "|cat:$label|cat:" : "|cat:$debut|cat:" à "|cat:$fin}} + {{/foreach}} + {{:error message="La date choisie n'est dans aucun exercice ouvert !!\nExercices ouverts : %s"|args:$msg_years}} {{/if}} {{if $_POST.no_amort}} @@ -116,13 +122,17 @@ {{:form_errors}} {{* formulaire d'ajout d'immobilisation *}} -{{:assign var="bank_account.512" value="512 — Banques"}} -{{:assign var="immo_account.2" value="2 — Classe 2 — Comptes d'immobilisations"}} +{{#years closed=false order="start_date"}} + {{:assign debut=$start_date|strtotime}} + {{:assign fin=$end_date|strtotime}} + {{:assign var="years_data.%d"|args:$id value=$debut|cat:" "|cat:$fin}} + {{:assign var="open_years.%d"|args:$id value=$label}} + {{if $start_date|strtotime <= $now && $end_date|strtotime >= $now}} + {{:assign selected_year=$id}} + {{/if}} +{{/years}} -{{* À TESTER : remplacer code compte par identifiant ? -{{:assign var="bank_account.553" value="512A — Compte courant"}} -{{:assign var="immo_account.2" value="Comptes d'immobilisations"}} -*}} +{{:assign var="immo_account.2" value="2 — Classe 2 — Comptes d'immobilisations"}} {{#select id,label FROM acc_projects WHERE archived = 0;}} {{:assign var="projects.%d"|args:$id value=$label}} @@ -132,14 +142,18 @@ {{:assign var="pattern_array." value="%s*"|args:$code}} {{/foreach}} {{:assign patterns=$pattern_array|implode:"|"}} -{{:assign date=$now|date:'Y-m-d'}} + +
Ajouter une immobilisation
{{:input id="no_amort" type="checkbox" value=1 name="no_amort" label="Ne pas amortir" help="Cocher pour ne pas amortir" onclick="toggleInputs('f_no_amort_1', ['f_date_mes','f_duree'])"}} - {{:input type="date" name="date_achat" label="Date d'acquisition" required=true default=$now|date_short onchange="setDate('date_achat', ['credit_account', 'debit_account'])"}} + {{:input type="date" name="date_achat" label="Date d'acquisition" required=true default=$now|date_short}} + {{:input type="select" default=$selected_year name="id_year" label="Exercice" required=true default_empty="— Faire un choix —" options=$open_years}} {{:input type="date" name="date_mes" label="Date de mise en service" help="à renseigner uniquement si différente de la date d'acquisition"}} {{:input type="text" name="designation" label="Désignation" required=true}} {{:input type="money" name="montant" label="Montant" required=true}} @@ -149,20 +163,22 @@ name="credit_account" label="Compte de décaissement" required=true - target="!acc/charts/accounts/selector.php?types=%s&date=%s"|args:"1|2|3":$date - default=$bank_account + target="!acc/charts/accounts/selector.php?types=%s&id_year=%d"|args:"1|2|3":$selected_year }} {{:input type="list" name="debit_account" label="Compte d'immobilisation (20xx, 21xx, ...)" required=true - target="!acc/charts/accounts/selector.php?date=%s&codes=%s"|args:$date:$patterns + target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:$patterns:$selected_year default=$immo_account }} {{if $projects != null}} {{:input type="select" name="id_project" label="Projet (analytique)" options=$projects default_empty="— Aucun —"}} {{/if}} +
@@ -172,33 +188,13 @@
+ {{:admin_footer}} diff --git a/scripts.js b/scripts.js new file mode 100644 index 0000000..8dcde5f --- /dev/null +++ b/scripts.js @@ -0,0 +1,83 @@ +// activer/désactiver les champs passés en paramètres +function toggleInputs(idcb, idfields) { + const noamort = document.getElementById(idcb); + for (let id of idfields) { + const field = document.getElementById(id); + if (noamort.checked) { + field.setAttribute("disabled","disabled"); + } + else { + field.removeAttribute("disabled"); + } + } +} + +// fixer l'exercice des sélecteurs de compte +function setAccountYear(button_names, id_year) { + for (const name of button_names) { + const button = document.querySelector("button[data-name=" + name + "]"); + const b_value = button.value; + const new_value = b_value.replace(/id_year=\d+/, 'id_year=' + id_year); + button.setAttribute('value', new_value); + } +} + +// renvoyer la valeur en millisecondes d'un champ date +function getDate(idelem) { + const elem = document.getElementById(idelem).value; + const jma = elem.split('/'); + const dd = new Date(jma[2], jma[1]-1, jma[0]); + return dd.getTime(); +} + +// désactiver les options du sélecteur qui ne sont pas dans un tableau de valeurs +function disableOptions(idSelect, init, values) { + for (let i = init; i < idSelect.options.length; ++i) { + const choix = idSelect.options[i]; + if (! values.includes(choix.value)) { + choix.setAttribute('disabled', 'true'); + choix.removeAttribute('selected'); + } + } +} + +// choisir les exercices affichés selon la date d'acquisition +function setYears(evt, id_date = 'f_date_achat', id_exercices = 'f_id_year', id_years = 'f_years_data') +{ + // masquer le message d'erreur + document.getElementById('erreur').setAttribute('class', 'hidden'); + // activer toutes les options + const select_field = document.getElementById(id_exercices); + for (const choix of select_field.options) { + choix.removeAttribute('disabled'); + choix.removeAttribute('selected'); + } + + // voir dans quels exercices ouverts se situe la date d'acquisition + const date_achat = getDate(id_date)/1000; + const years_data = document.getElementById(id_years); + let array_years = []; + for (const choix of years_data.options) { + if (choix.value != '') { + const epox = choix.text.split(' '); + if (epox[0] <= date_achat && date_achat <= epox[1]) { + array_years.push(choix.value); + } + } + } + + if (array_years.length == 0) { + document.getElementById('erreur').setAttribute('class', ''); + disableOptions(select_field, 1, array_years); + select_field.value = ''; + setAccountYear(['credit_account', 'debit_account'], 0); + } else if (array_years.length == 1) { + disableOptions(select_field, 0, array_years); + select_field.value = array_years[0]; + setAccountYear(['credit_account', 'debit_account'], array_years[0]); + } else { + disableOptions(select_field, 1, array_years); + select_field.value = ''; + setAccountYear(['credit_account', 'debit_account'], 0); + } +}