diff --git a/amortization.html b/amortization.html
index 0caed6c..237ee0c 100644
--- a/amortization.html
+++ b/amortization.html
@@ -63,15 +63,14 @@
{{:assign total_credits="%d+%d"|math:$total_credits:$amount}}
{{/if}}
{{/load}}
-{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}}
-{{:assign solde=$ligne_immo.montant}}
+{{:assign solde="%d-%d"|math:$ligne_immo.montant:$total_credits}}
{{*:debug info_immo=$info_immo ligne_immo=$ligne_immo total_credits=$total_credits solde=$solde*}}
{{if $info_immo.status == "amortized"}}
- {{:assign amort_amount=$ligne_immo.montant}}
+ {{:assign amort_amount=$solde}}
{{:assign valeur_residuelle=0}}
{{else}}
- {{:assign valeur_residuelle=$ligne_immo.montant}}
+ {{:assign valeur_residuelle=$solde}}
{{/if}}
{{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
@@ -208,13 +207,13 @@
{{/if}}
{{if $valeur_residuelle > 0}}
Montant des amortissements
- {{"%d-%d"|math:$ligne_immo.montant:$valeur_residuelle|money_currency_html:false|raw}}
+ {{"%d-%d"|math:$solde:$valeur_residuelle|money_currency_html:false|raw}}
Valeur nette comptable
{{$valeur_residuelle|money_currency_html:false|raw}}
{{/if}}
{{if $info_immo.duration != null && $valeur_residuelle > 0}}
Annuité estimée
- {{"min(%d, %f/%d)"|math:$valeur_residuelle:$ligne_immo.montant:$info_immo.duration|money_currency_html:false|raw}}
+ {{"min(%d, %f/%d)"|math:$valeur_residuelle:solde:$info_immo.duration|money_currency_html:false|raw}}
{{/if}}
diff --git a/attach_amort.html b/attach_amort.html
index f643f9a..f369cd4 100644
--- a/attach_amort.html
+++ b/attach_amort.html
@@ -11,6 +11,7 @@
{{* chercher l'écriture d'immobilisation *}}
{{#select
line.id_transaction as immo_trans_id,
+ line.debit as montant,
trans.label as trans_label,
line.label as line_label
FROM acc_transactions_lines as line
@@ -24,11 +25,12 @@
{{/select}}
{{* chercher le doc associé à l'immo *}}
-{{#load id=$_GET.immo_doc_id|intval}}
+{{#load id=$_GET.immo_doc_id|intval assign="info_immo"}}
{{:assign label_immo=$label|or:$ligne_immo.trans_label}}
{{else}}
{{:error message="Immobilisation non trouvée"}}
{{/load}}
+{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.montant}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
@@ -67,9 +69,9 @@
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
-
{{* vérifier que le montant saisi est inférieur au reste *}}
- {{if $_POST.montant == null}}
+ {{if $_POST.montant == null || $_POST.montant == 0}}
+ {{:assign montant_amort=$reste}}
{{if $montant_affecte == 0}}
{{:assign saved_amount=null}}
{{else}}
@@ -88,6 +90,57 @@
{{/if}}
{{/if}}
+ {{* vérifier que le montant total des amortissements ne dépasse pas la valeur de l'immo *}}
+ {{* montant de l'immo *}}
+ {{:assign total_credits=0}}
+ {{#load
+ type="credit_link"
+ where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $_GET.immo_doc_id|intval
+ }}
+ {{if $amount == null}}
+ {{#select credit FROM acc_transactions_lines WHERE id = :credit_line_id;
+ :credit_line_id=$credit_line_id
+ }}
+ {{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
+ {{/select}}
+ {{else}}
+ {{:assign total_credits="%d+%d"|math:$total_credits:$amount}}
+ {{/if}}
+ {{/load}}
+ {{:assign montant_immo="%d-%d"|math:$montant_immo:$total_credits}}
+
+ {{* montant des amortissements *}}
+ {{:assign total_amort=0}}
+ {{#load
+ type="amort_link"
+ where="$$.immo_doc_id = :immo_doc_id"
+ :immo_doc_id=$_GET.immo_doc_id|intval
+ }}
+ {{if $amount == null || $amount == 0}}
+ {{#select
+ line.credit
+ FROM acc_transactions_lines AS line
+ INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
+ INNER join acc_accounts AS account on line.id_account = account.id
+ WHERE line.id = :amort_line_id
+ ;
+ :amort_line_id = $amort_line_id
+ }}
+ {{:assign total_amort="%d+%d"|math:$total_amort:$credit}}
+ {{/select}}
+ {{else}}
+ {{:assign total_amort="%d+%d"|math:$total_amort:$amount}}
+ {{/if}}
+ {{/load}}
+
+ {{:assign vnc="%d-%d"|math:$montant_immo:$total_amort}}
+ {{:assign total_amort="%d+%d"|math:$total_amort:$montant_amort}}
+ {{if $total_amort > $montant_immo}}
+ {{:assign ma="%f"|math:$montant_amort|money_currency:false}}
+ {{:assign vnc="%f"|math:$vnc|money_currency:false}}
+ {{:error message="Le montant de l'amortissement (%s) dépasse la valeur résiduelle de l'immobilisation (%s)"|args:$ma:$vnc}}
+ {{/if}}
+
{{* chercher les liaisons de l'écriture d'immobilisation *}}
{{#select
CASE links.id_related = :immo_trans_id
@@ -129,7 +182,16 @@
}}
{{/load}}
- {{:redirect force="amortization.html?immo_line_id=%s&immo_doc_id=%s&ok=1&msg=attach_amort"|args:$_GET.immo_line_id:$_GET.immo_doc_id}}
+ {{* immo soldée ? *}}
+ {{if $total_amort == $montant_immo}}
+ {{:assign status="amortized"}}
+ {{:save
+ key=$info_immo.key
+ status=$status
+ }}
+ {{/if}}
+
+ {{:redirect force="amortization.html?immo_line_id=%s&immo_doc_id=%s&type_immo=%s&ok=1&msg=attach_amort"|args:$_GET.immo_line_id:$_GET.immo_doc_id:$status}}
{{/form}}
{{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}}
@@ -148,10 +210,12 @@
#{{$amort_line.trans_id}} {{$label_immo}}
Montant de l'écriture d'amortissement
{{$amort_line.amount|money_currency_html:false|raw}}
- Montant déjà affecté
- {{"%f"|math:$montant_affecte|money_currency_html:false|raw}}
- Montant restant à affecter
- {{"%f"|math:$reste|money_currency_html:false|raw}}
+ {{if $montant_affecte > 0}}
+ Montant déjà affecté
+ {{"%f"|math:$montant_affecte|money_currency_html:false|raw}}
+ Montant restant à affecter
+ {{"%f"|math:$reste|money_currency_html:false|raw}}
+ {{/if}}
diff --git a/detach_amort.html b/detach_amort.html
index caae1a0..06b99ff 100644
--- a/detach_amort.html
+++ b/detach_amort.html
@@ -68,5 +68,12 @@
{{:delete id=$id}}
{{/load}}
+{{* marquer immo non soldée *}}
+{{#load id=$_GET.immo_doc_id|intval assign="info_immo"}}{{/load}}
+{{:save
+ key=$info_immo.key
+ status="managed"
+}}
+
{{:redirect
to="amortization.html?immo_line_id=%s&ok=1&msg=detach&immo_doc_id=%s"|args:$_GET.immo_line_id:$_GET.immo_doc_id}}
diff --git a/save_amort.html b/save_amort.html
index 5b852bc..1b199c0 100644
--- a/save_amort.html
+++ b/save_amort.html
@@ -29,7 +29,7 @@
{{/select}}
{{:assign date_debut=$ligne_immo.date}}
-{{#load id=$_GET.immo_doc_id|intval}}
+{{#load id=$_GET.immo_doc_id|intval assign="info_immo"}}
{{:assign duree=$duration}}
{{if $date_mes != null}}
{{:assign date_debut=$date_mes}}
@@ -222,15 +222,14 @@
debit=$_POST.montant
account=$debit_account|keys|value:0
id_project=$ligne_immo.project_id
- label=$_POST.designation
}}
{{:assign
var="lines."
credit=$_POST.montant
account=$credit_account|keys|value:0
id_project=$ligne_immo.project_id
- label=$_POST.designation
}}
+
{{:api
method="POST"
path="accounting/transaction"
@@ -245,28 +244,28 @@
}}
{{* enregistrer la liaison des lignes *}}
- {{#select
- trans.id AS trans_id,
- line.id AS line_id
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
- WHERE trans.id = :trans_id
- ;
- :trans_id = $result.id
- }}
- {{:assign amort_trans_id=$trans_id}}
- {{:assign amort_line_id=$line_id}}
- {{/select}}
- {{if $amort_trans_id != null}}
+ {{#foreach from=$result.lines item="line"}}
+ {{if $line.account_code == $credit_account|keys|value:0}}
+ {{:save
+ key=""|uuid
+ type="amort_link"
+ immo_doc_id=$_GET.immo_doc_id|intval
+ amort_line_id=$line.id
+ }}
+ {{:break}}
+ {{/if}}
+ {{/foreach}}
+
+ {{* immo soldée ? *}}
+ {{if $_POST.montant|trim|money_int == $solde}}
+ {{:assign status="amortized"}}
{{:save
- key=""|uuid
- type="amort_link"
- immo_doc_id=$_GET.immo_doc_id|intval
- amort_line_id=$amort_line_id|intval
+ key=$info_immo.key
+ status=$status
}}
{{/if}}
- {{:redirect force="amortization.html?immo_line_id=%s&immo_doc_id=%s&ok=1&msg=amortissement"|args:$_GET.immo_line_id:$_GET.immo_doc_id}}
+ {{:redirect force="amortization.html?immo_line_id=%s&immo_doc_id=%s&type_immo=%s&ok=1&msg=amortissement"|args:$_GET.immo_line_id:$_GET.immo_doc_id:$status}}
{{/form}}
{{:admin_header title="Ajout amortissement" custom_css="./style.css" current="module_amortization"}}