Ajout immo : forcer choix exercice

This commit is contained in:
Jean-Christophe Engel 2025-04-25 12:34:44 +02:00
parent 91b75e77d4
commit 0f1f3ed56d
3 changed files with 119 additions and 44 deletions

View file

@ -8,11 +8,7 @@
*}} *}}
{{:assign open_years=""}} {{:assign open_years=""}}
{{#years status=false order="start_date"}} {{#years closed=false order="start_date" assign="open_years."}}
{{: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}}
{{if {{if
$start_date|strtotime <= $date|parse_date|strtotime && $start_date|strtotime <= $date|parse_date|strtotime &&
$end_date|strtotime >= $date|parse_date|strtotime $end_date|strtotime >= $date|parse_date|strtotime

View file

@ -14,7 +14,13 @@
keep="open_years, selected_year, selected_chart" keep="open_years, selected_year, selected_chart"
}} }}
{{if $selected_year == null}} {{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}}
{{if $_POST.no_amort}} {{if $_POST.no_amort}}
@ -116,13 +122,17 @@
{{:form_errors}} {{:form_errors}}
{{* formulaire d'ajout d'immobilisation *}} {{* formulaire d'ajout d'immobilisation *}}
{{:assign var="bank_account.512" value="512 — Banques"}} {{#years closed=false order="start_date"}}
{{:assign var="immo_account.2" value="2 — Classe 2 — Comptes d'immobilisations"}} {{: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="immo_account.2" value="2 — Classe 2 — Comptes d'immobilisations"}}
{{:assign var="bank_account.553" value="512A — Compte courant"}}
{{:assign var="immo_account.2" value="Comptes d'immobilisations"}}
*}}
{{#select id,label FROM acc_projects WHERE archived = 0;}} {{#select id,label FROM acc_projects WHERE archived = 0;}}
{{:assign var="projects.%d"|args:$id value=$label}} {{:assign var="projects.%d"|args:$id value=$label}}
@ -132,14 +142,18 @@
{{:assign var="pattern_array." value="%s*"|args:$code}} {{:assign var="pattern_array." value="%s*"|args:$code}}
{{/foreach}} {{/foreach}}
{{:assign patterns=$pattern_array|implode:"|"}} {{:assign patterns=$pattern_array|implode:"|"}}
{{:assign date=$now|date:'Y-m-d'}}
<div id="erreur" class="hidden">
<p class="block error">La date choisie n'est dans aucun exercice ouvert</p>
</div>
<form method="post" action=""> <form method="post" action="">
<fieldset> <fieldset>
<legend>Ajouter une immobilisation</legend> <legend>Ajouter une immobilisation</legend>
<dl> <dl>
{{: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 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="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="text" name="designation" label="Désignation" required=true}}
{{:input type="money" name="montant" label="Montant" required=true}} {{:input type="money" name="montant" label="Montant" required=true}}
@ -149,20 +163,22 @@
name="credit_account" name="credit_account"
label="Compte de décaissement" label="Compte de décaissement"
required=true required=true
target="!acc/charts/accounts/selector.php?types=%s&date=%s"|args:"1|2|3":$date target="!acc/charts/accounts/selector.php?types=%s&id_year=%d"|args:"1|2|3":$selected_year
default=$bank_account
}} }}
{{:input {{:input
type="list" type="list"
name="debit_account" name="debit_account"
label="Compte d'immobilisation (20xx, 21xx, ...)" label="Compte d'immobilisation (20xx, 21xx, ...)"
required=true 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 default=$immo_account
}} }}
{{if $projects != null}} {{if $projects != null}}
{{:input type="select" name="id_project" label="Projet (analytique)" options=$projects default_empty="— Aucun —"}} {{:input type="select" name="id_project" label="Projet (analytique)" options=$projects default_empty="— Aucun —"}}
{{/if}} {{/if}}
<div id="donnees" class="hidden">
{{:input type="select" name="years_data" options=$years_data}}
</div>
</dl> </dl>
</fieldset> </fieldset>
@ -172,33 +188,13 @@
</form> </form>
<script type="text/javascript" src="scripts.js"></script>
<script type="text/javascript"> <script type="text/javascript">
{{* activer/désactiver les champs passés en paramètres *}} (function () {
function toggleInputs(idcb, idfields) { setYears();
const noamort = document.getElementById(idcb); let date_field = document.getElementById('f_date_achat');
for (let id of idfields) { date_field.onchange = setYears;
const field = document.getElementById(id); })();
if (noamort.checked) {
field.setAttribute("disabled","disabled");
}
else {
field.removeAttribute("disabled");
}
}
}
{{* fixer la date des sélecteurs *}}
function setDate(b_date, button_names) {
const elem_date = document.querySelector("input[name=" + b_date + "]");
const date_fr = elem_date.value;
const new_date = date_fr.replace(/([0-9]+)\/([0-9]+)\/([0-9]+)/, "$3-$2-$1");
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(/date=[0-9]+-[0-9]+-[0-9]+/, 'date=' + new_date);
button.setAttribute('value', new_value);
}
}
</script> </script>
{{:admin_footer}} {{:admin_footer}}

83
scripts.js Normal file
View file

@ -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);
}
}