Ajout immo : forcer choix exercice
This commit is contained in:
parent
91b75e77d4
commit
0f1f3ed56d
3 changed files with 119 additions and 44 deletions
|
@ -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}}
|
||||
|
|
|
@ -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'}}
|
||||
|
||||
<div id="erreur" class="hidden">
|
||||
<p class="block error">La date choisie n'est dans aucun exercice ouvert</p>
|
||||
</div>
|
||||
|
||||
<form method="post" action="">
|
||||
<fieldset>
|
||||
<legend>Ajouter une immobilisation</legend>
|
||||
<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 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}}
|
||||
<div id="donnees" class="hidden">
|
||||
{{:input type="select" name="years_data" options=$years_data}}
|
||||
</div>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
|
@ -172,33 +188,13 @@
|
|||
|
||||
</form>
|
||||
|
||||
<script type="text/javascript" src="scripts.js"></script>
|
||||
<script type="text/javascript">
|
||||
{{* 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 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);
|
||||
}
|
||||
}
|
||||
|
||||
(function () {
|
||||
setYears();
|
||||
let date_field = document.getElementById('f_date_achat');
|
||||
date_field.onchange = setYears;
|
||||
})();
|
||||
</script>
|
||||
|
||||
{{:admin_footer}}
|
||||
|
|
83
scripts.js
Normal file
83
scripts.js
Normal 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);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue