diff --git a/amortization.html b/amortization.html
index eb150a6..f4d51fe 100644
--- a/amortization.html
+++ b/amortization.html
@@ -35,19 +35,12 @@
{{* récupérer les infos de l'immobilisation *}}
{{#select
line.id as immo_id,
- line.id_account as account_id,
- line.id_project as project_id,
line.debit as montant,
trans.id as trans_id,
trans.label as label,
- trans.date,
- y.id as year_id,
- y.end_date as date_amort,
- project.label as project_label
+ trans.date
FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
- INNER JOIN acc_years AS y ON trans.id_year = y.id
- LEFT JOIN acc_projects AS project ON line.id_project = project.id
WHERE line.id = :line_id;
:line_id = $_GET.immo_id|intval
assign=ligne_immo
@@ -56,6 +49,7 @@
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}}
{{:assign date_debut=$ligne_immo.date}}
+{{:assign solde=$ligne_immo.montant}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{:assign duree=$duration}}
@@ -98,6 +92,19 @@
{{/if}}
{{/select}}
+{{:assign valeur_residuelle=$ligne_immo.montant}}
+{{#foreach from=$linked_lines}}
+ {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}}
+{{/foreach}}
+
+{{if $valeur_residuelle > 0}}
+
+{{/if}}
+
Amortissement de «
#{{$ligne_immo.trans_id}}
@@ -106,25 +113,6 @@
en date du {{$date_debut|date_short}}{{if $duree != null}} sur {{$duree}} ans{{/if}}
-{{if $duree != null}}
- {{* montant de l'annuité théorique *}}
- {{:assign montant="%f"|math:$ligne_immo.montant}}
- {{:assign annuite="%f/%f"|math:$montant:$duree}}
- {{* première annuité *}}
- {{:assign date_amort=$ligne_immo.date_amort}}
- {{if $date_amort|strtotime < $date_debut|strtotime}}
- {{* changer d'exercice *}}
- {{:include file="_next_year.html" date=$date_amort keep="date_amort"}}
- {{:assign date_amort=$date_amort|parse_date}}
- {{/if}}
- {{:include file="_calcul_dates.html" date_debut=$date_debut date_fin=$date_amort keep="nbjours"}}
- {{:assign annuite_1="%f/360*%d"|math:$annuite:$nbjours|intval}}
- {{:assign annuite_courante=$annuite_1}}
- {{:assign current_year=$ligne_immo.year_id}}
- {{:assign nbamort=0}}
-{{/if}}
-
-{{:assign solde=$ligne_immo.montant}}
{{if $linked_lines != null}}
Amortissements rattachés
@@ -147,8 +135,6 @@
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.amort_trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.amort_year}}
{{:assign solde="%f-%d"|math:$solde:$line.amort_amount}}
- {{:assign date_amort=$line.amort_date}}
- {{:assign current_year=$line.amort_year}}
#{{$line.amort_trans_id}} |
{{$line.amort_date|date_short}} |
@@ -167,83 +153,6 @@
{{:linkbutton label="Détacher" href="detach_amort.html?amort_id=%d&immo_id=%d"|args:$line.amort_line:$ligne_immo.immo_id shape="minus"}}
- {{:assign annuite_courante=$annuite}}
- {{:include file="_next_year.html" date=$date_amort keep="date_amort"}}
- {{:assign nbamort="%d+1"|math:$nbamort}}
- {{/foreach}}
-
-
-
-{{/if}}
-
-{{if $duree != null && $solde > 0}}
- {{:assign project_id=$ligne_immo.project_id}}
- {{:assign project_label=$ligne_immo.project_label}}
- {{:assign nbamort="%d-%d"|math:$duree:$nbamort}}
- {{:assign annuite_courante="min(%f,%f)"|math:$annuite_courante:$solde}}
- {{:assign libelle="Amortissement "|cat:$ligne_immo.label}}
-
- {{* infos des comptes d'immo et d'amortissement *}}
- {{#sql select="code, id_chart" tables="acc_accounts" where="id = :id" :id=$ligne_immo.account_id assign="immo_account"}}
- {{/sql}}
- {{:include
- file="./_get_amort_code.html"
- code_immo=$immo_account.code
- keep="code_amort"
- }}
- {{#sql select="id,label" tables="acc_accounts" where="code = :code AND id_chart = :id_chart"
- :code=$code_amort :id_chart=$immo_account.id_chart assign="amort_account"}}
- {{/sql}}
-
-
- Amortissements à enregistrer
-
-
-
- N° |
- Date |
- Montant |
- Solde |
- Libellé |
- N° compte |
- Compte |
- |
-
-
-
- {{#foreach count="%d+1"|math:$nbamort key="num"}}
- {{:assign solde_prec=$solde}}
- {{:assign solde="%f-%d"|math:$solde:$annuite_courante}}
- {{#select id FROM acc_years
- WHERE :amort_date >= start_date AND :amort_date <= end_date AND status == 0 LIMIT 1;
- :amort_date=$date_amort|parse_date}}
- {{:assign enregistrer=1}}
- {{:assign current_year=$id}}
- {{else}}
- {{:assign enregistrer=0}}
- {{/select}}
-
- {{"%d+1"|math:$num}} |
- {{$date_amort|date_short}} |
- {{"%f"|math:$annuite_courante|money}} |
- {{$solde|money:false}} |
- {{$libelle}} |
- {{$code_amort}} |
- {{$amort_account.label}} |
-
- {{if $enregistrer == 1}}
- {{:linkbutton
- label="Créer l'écriture"
- href="save_amort.html?amount=%d&account=%s&year=%s&trans_id=%d&immo_id=%s&project_id=%d&label=%s&solde=%d"|args:$annuite_courante:$ligne_immo.account_id:$current_year:$ligne_immo.trans_id:$_GET.immo_id:$project_id:$libelle:$solde_prec
- shape="right"
- target="_dialog"
- }}
- {{/if}}
- |
-
- {{:include file="_next_year.html" date=$date_amort keep="date_amort"}}
- {{:assign annuite_courante="min(%f,%f)"|math:$annuite:$solde}}
- {{if $solde == 0}}{{:break}}{{/if}}
{{/foreach}}
diff --git a/save_amort.html b/save_amort.html
index 54bc596..55921c4 100644
--- a/save_amort.html
+++ b/save_amort.html
@@ -1,24 +1,128 @@
{{* -*- brindille -*- *}}
-{{:admin_header title="Ajout amortissement" current="module_amortissement"}}
+{{*
+ créer une écriture d'amortissement
+ paramètres
+ - immo_id : id de la ligne d'immobilisation
+*}}
-{{* barre de navigation *}}
-{{if ! $dialog}}
- {{:include file="_nav.html" current="amortization"}}
+{{* Infos de l'immobilisation *}}
+{{#select
+ line.id as immo_id,
+ line.id_account as account_id,
+ line.debit as montant,
+ line.id_project as project_id,
+ trans.id as trans_id,
+ trans.label,
+ trans.date,
+ y.id as year_id,
+ y.start_date,
+ y.end_date,
+ project.label as project_label
+ FROM acc_transactions_lines AS line
+ INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
+ INNER JOIN acc_years AS y ON trans.id_year = y.id
+ LEFT JOIN acc_projects AS project ON line.id_project = project.id
+ WHERE line.id = :line_id;
+ :line_id = $_GET.immo_id|intval
+ assign=ligne_immo
+ }}
+{{else}}
+ {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
+{{/select}}
+{{:assign date_debut=$ligne_immo.date}}
+
+{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
+ {{:assign duree=$duration}}
+ {{:assign date_debut=$date}}
+{{else}}
+ {{:error message="Vous devez renseigner la date de mise en service et la durée d'immobilisation"}}
+{{/load}}
+
+{{* chercher des écritures d'amortissement liées à l'immobilisation *}}
+{{#select
+ SUM(l_amort.credit) as amort_amount,
+ l_amort.label as amort_label,
+ l_amort.id as amort_line_id,
+ CASE WHEN links.id_related = t_immo.id
+ THEN links.id_transaction
+ ELSE links.id_related
+ END as amort_trans_id,
+ MAX(trans.date) as amort_date,
+ trans.label as trans_label,
+ trans.id_year as amort_year,
+ account.id as account_id,
+ account.code as account_code,
+ account.label as account_label
+ FROM acc_transactions_lines as l_immo
+ INNER JOIN acc_transactions as t_immo on t_immo.id = l_immo.id_transaction
+ INNER JOIN acc_transactions_links as links
+ ON (t_immo.id = links.id_transaction
+ OR
+ t_immo.id = links.id_related)
+ INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction
+ INNER join acc_transactions as trans on l_amort.id_transaction = trans.id
+ INNER join acc_accounts as account on l_amort.id_account = account.id
+ WHERE l_immo.id = :line_id AND account.code LIKE '28%'
+ ORDER BY trans.date DESC LIMIT 1;
+ :line_id = $_GET.immo_id|intval
+ assign=amort_line
+}}
+{{/select}}
+
+{{if $amort_line.amort_amount == null}}
+ {{* 1er amortissement *}}
+ {{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}}
+ {{#select code, label from acc_accounts where id = :id; :id=$ligne_immo.account_id assign=amort_account}}
+ {{/select}}
+ {{:include
+ file="./_get_amort_code.html"
+ code_immo=$amort_account.code
+ keep="code_amort"
+ }}
+ {{:assign var=amort_label value="Amortissement %s"|args:$amort_account.label}}
+ {{:assign var=libelle value="Amortissement %s"|args:$ligne_immo.label}}
+{{else}}
+ {{* amortissements suivants *}}
+ {{:assign date_debut=$amort_line.amort_date|strtotime}}
+ {{:assign date_debut="%d+(60*60*24)"|math:$date_debut|date:"Y-m-d"}}
+ {{:assign var=code_amort value=$amort_line.account_code}}
+ {{:assign var=amort_label value=$amort_line.account_label}}
+ {{:assign var=libelle value=$amort_line.amort_label}}
{{/if}}
+{{*
+ lister les exercices dont la date de fin est postérieure à la date
+ de mise en service de l'immo ou à la date du dernier amortissement
+*}}
+{{:assign msg_years=""}}
+{{#years closed=false order="start_date" where="end_date > :debut" :debut=$date_debut assign=years.}}
+ {{:assign ts_debut=$start_date|strtotime}}
+ {{:assign ts_fin=$end_date|strtotime}}
+ {{:assign var="years_data.%d"|args:$id value=$ts_debut|cat:" "|cat:$ts_fin}}
+ {{:assign debut=$start_date|date_short}}
+ {{:assign fin=$end_date|date_short}}
+ {{:assign var="open_years.%d"|args:$id value=$label|cat:" (du "|cat:$debut|cat:" au "|cat:$fin|cat:")"}}
+ {{:assign msg_years=$msg_years|cat:"\n"|cat:" - "|cat:$label|cat:" : "|cat:$debut|cat:" à "|cat:$fin}}
+{{else}}
+ {{:error message="Aucun exercice ouvert pour enregistrer un amortissement"}}
+{{/years}}
+
+
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
+ {{* UTILE ? vérifier que la date est située dans un exercice compatible *}}
- {{* vérifier que la date est située dans un exercice ouvert *}}
- {{:include
- file="_check_date.html"
- date=$_POST.date
- 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 ts_date = $_POST.date_amort|parse_date|strtotime}}
+ {{:assign ok=false}}
+ {{#foreach from=$years}}
+ {{if $start_date|strtotime <= $ts_date && $ts_date <= $end_date|strtotime}}
+ {{:assign ok=true}}
+ {{:break}}
+ {{/if}}
+ {{/foreach}}
+ {{if ! $ok}}
+ {{:error message="La date choisie n'est dans aucun exercice compatible !!\nExercices compatibles : %s"|args:$msg_years}}
{{/if}}
{{* déterminer le numéro des comptes au cas où la clé serait un identifiant *}}
@@ -34,7 +138,6 @@
keep="account_code"
}}
{{:assign credit_account=$account_code}}
-
{{* vérifier :
- que le compte d'amortissement débute par un préfixe correct (280, 281, ...)
- est présent dans le PC de l'exercice correspondant à la date
@@ -51,6 +154,9 @@
}}
{{:assign var="amort_array." value=$code_amort|intval}}
{{/foreach}}
+ {{#years closed=false where="id = :year_id" :year_id=$_POST.id_year}}
+ {{:assign selected_chart=$id_chart}}
+ {{/years}}
{{:include
file="_check_account.html"
@@ -59,21 +165,19 @@
prefix_array=$amort_array
keep="account_ok"
}}
-
{{if $account_ok == null}}
{{:assign compte=$credit_account|implode:""}}
{{:redirect url="add_account.html?account=%s&chart=%s&immo_id=%s"|args:$compte:$selected_chart:$_GET.immo_id}}
{{/if}}
{{* vérifier que le montant ne dépasse pas le solde restant *}}
- {{if $_POST.montant|trim|money_int > $_GET.solde|intval}}
- {{:assign solde=$_GET.solde|money_raw}}
+ {{:assign solde="%d-%d"|math:$ligne_immo.montant:$amort_line.amort_amount}}
+ {{if $_POST.montant|trim|money_int > $solde|intval}}
+ {{:assign solde=$solde|money_raw}}
{{:error message="Le montant indiqué « %s » dépasse le solde à amortir « %s »"|args:$_POST.montant:$solde}}
{{/if}}
{{* enregistrer l'écriture *}}
- {{:assign var="linked_transactions." value=$_GET.trans_id}}
-
{{:assign
var="lines."
debit=$_POST.montant
@@ -88,66 +192,61 @@
id_project=$_GET.project_id
label=$_POST.designation
}}
-
{{:api
method="POST"
path="accounting/transaction"
assign="result"
assign_code="result_code"
- id_year=$selected_year
+ id_year=$_POST.id_year
type="advanced"
- date=$_POST.date
+ date=$_POST.date_amort
label=$_POST.designation
lines=$lines
- linked_transactions=$_GET.trans_id|intval
+ linked_transactions=$ligne_immo.trans_id|intval
}}
{{:redirect force="amortization.html?immo_id=%s&ok=1&msg=amortissement"|args:$_GET.immo_id}}
{{/form}}
+{{:admin_header title="Ajout amortissement" current="module_amortissement"}}
+
+{{* barre de navigation *}}
+{{if ! $dialog}}
+ {{:include file="_nav.html" current="index" subcurrent="encours" subsubcurrent="amortization"}}
+{{/if}}
+
{{:form_errors}}
-{{* Préparer les infos pour le formulaire *}}
+{{:assign var=selected_year value=$years.0.id}}
+{{:assign var=date_amort value=$years.0.end_date}}
+{{:include file="_calcul_dates.html" date_debut=$date_debut date_fin=$date_amort keep="nbjours"}}
+
+{{* montant de l'amortissement *}}
+{{:assign montant_amort="%f/%f/365*%d"|math:$ligne_immo.montant:$duree:$nbjours|intval}}
+{{:assign montant_amort="min(%f, %d-%d)"|math:$montant_amort:$ligne_immo.montant:$amort_line.amort_amount}}
{{:assign var="debit_account.6811" value="6811 — Dot. aux amortissements des immobilisations"}}
+{{:assign var="credit_account.%s"|args:$code_amort value="%s — "|args:$code_amort|cat:$amort_label}}
-{{*
- déterminer le compte d'amortissement en fonction du compte
- d'immobilisation => ajouter un 8 après le 2 de tête
-*}}
-{{#select code, label from acc_accounts where id = :id; :id=$_GET.account assign=amort_account}}{{/select}}
-{{:include
- file="./_get_amort_code.html"
- code_immo=$amort_account.code
- keep="code_amort"
-}}
-{{:assign var="credit_account.%s"|args:$code_amort value="%s — Amortissements "|args:$code_amort|cat:$amort_account.label}}
+{{* -------------------------------------------------------------------------------- *}}
-{{#select
- id,
- label,
- end_date as date_amort
- from acc_years where id=:id;
- :id=$_GET.year assign=year
- }}
-{{/select}}
-
-{{#years status=false}}
- {{:assign var="open_years.%d"|args:$id value=$label}}
-{{/years}}
+
+
La date choisie n'est dans aucun exercice ouvert
+
{{:admin_footer}}
+
+
+
diff --git a/scripts.js b/scripts.js
index e530523..693e518 100644
--- a/scripts.js
+++ b/scripts.js
@@ -81,3 +81,19 @@ function chooseYears(id_date, id_exercices, id_years)
setAccountYear(['credit_account', 'debit_account'], 0);
}
}
+
+// afficher la date de fin de l'exercice choisi
+function setDateEnd(id_exercices, id_date, id_years) {
+ const selected_year = document.getElementById(id_exercices).value;
+ const years_data = document.getElementById(id_years);
+ for (const choix of years_data.options) {
+ if (choix.value == '') {
+ document.getElementById(id_date).value = '';
+ } else if (choix.value == selected_year) {
+ const epox = choix.text.split(' ');
+ const date_fin = new Date(epox[1] * 1000);
+ document.getElementById(id_date).value = date_fin.toLocaleDateString();
+ break;
+ }
+ }
+}
diff --git a/style.css b/style.css
index d8e1dfe..c9c23f9 100644
--- a/style.css
+++ b/style.css
@@ -37,3 +37,7 @@ h2[class="aide"], h3[class="aide"] {
.informations dl.describe > dt {
margin-right: 0;
}
+
+nav.amort aside {
+ margin-top : 0;
+}