Marquer immo soldée après enregistrement dernier amortissement

This commit is contained in:
Jean-Christophe Engel 2026-05-06 10:32:09 +02:00
parent 4e131e1f5b
commit a1ce03a7b4
3 changed files with 99 additions and 27 deletions

View file

@ -11,6 +11,7 @@
{{* chercher l'écriture d'immobilisation *}} {{* chercher l'écriture d'immobilisation *}}
{{#select {{#select
line.id_transaction as immo_trans_id, line.id_transaction as immo_trans_id,
line.debit as montant,
trans.label as trans_label, trans.label as trans_label,
line.label as line_label line.label as line_label
FROM acc_transactions_lines as line FROM acc_transactions_lines as line
@ -24,11 +25,12 @@
{{/select}} {{/select}}
{{* chercher le doc associé à l'immo *}} {{* 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}} {{:assign label_immo=$label|or:$ligne_immo.trans_label}}
{{else}} {{else}}
{{:error message="Immobilisation non trouvée"}} {{:error message="Immobilisation non trouvée"}}
{{/load}} {{/load}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.montant}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}} {{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
@ -67,9 +69,9 @@
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* vérifier que le montant saisi est inférieur au reste *}} {{* 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}} {{if $montant_affecte == 0}}
{{:assign saved_amount=null}} {{:assign saved_amount=null}}
{{else}} {{else}}
@ -88,6 +90,57 @@
{{/if}} {{/if}}
{{/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 *}} {{* chercher les liaisons de l'écriture d'immobilisation *}}
{{#select {{#select
CASE links.id_related = :immo_trans_id CASE links.id_related = :immo_trans_id
@ -129,7 +182,16 @@
}} }}
{{/load}} {{/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}} {{/form}}
{{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}}
@ -148,10 +210,12 @@
<dd><span class="num"><a href="{{$trans_url}}">#{{$amort_line.trans_id}}</a></span> {{$label_immo}}</dd> <dd><span class="num"><a href="{{$trans_url}}">#{{$amort_line.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Montant de l'écriture d'amortissement</dt> <dt>Montant de l'écriture d'amortissement</dt>
<dd>{{$amort_line.amount|money_currency_html:false|raw}}</dd> <dd>{{$amort_line.amount|money_currency_html:false|raw}}</dd>
{{if $montant_affecte > 0}}
<dt>Montant déjà affecté</dt> <dt>Montant déjà affecté</dt>
<dd class="money strong">{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}</dd> <dd class="money strong">{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}</dd>
<dt>Montant restant à affecter</dt> <dt>Montant restant à affecter</dt>
<dd class="money strong">{{"%f"|math:$reste|money_currency_html:false|raw}}</dd> <dd class="money strong">{{"%f"|math:$reste|money_currency_html:false|raw}}</dd>
{{/if}}
</dl> </dl>
</div> </div>

View file

@ -68,5 +68,12 @@
{{:delete id=$id}} {{:delete id=$id}}
{{/load}} {{/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 {{: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}} to="amortization.html?immo_line_id=%s&ok=1&msg=detach&immo_doc_id=%s"|args:$_GET.immo_line_id:$_GET.immo_doc_id}}

View file

@ -29,7 +29,7 @@
{{/select}} {{/select}}
{{:assign date_debut=$ligne_immo.date}} {{: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}} {{:assign duree=$duration}}
{{if $date_mes != null}} {{if $date_mes != null}}
{{:assign date_debut=$date_mes}} {{:assign date_debut=$date_mes}}
@ -229,6 +229,7 @@
account=$credit_account|keys|value:0 account=$credit_account|keys|value:0
id_project=$ligne_immo.project_id id_project=$ligne_immo.project_id
}} }}
{{:api {{:api
method="POST" method="POST"
path="accounting/transaction" path="accounting/transaction"
@ -243,28 +244,28 @@
}} }}
{{* enregistrer la liaison des lignes *}} {{* enregistrer la liaison des lignes *}}
{{#select {{#foreach from=$result.lines item="line"}}
trans.id AS trans_id, {{if $line.account_code == $credit_account|keys|value:0}}
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}}
{{:save {{:save
key=""|uuid key=""|uuid
type="amort_link" type="amort_link"
immo_doc_id=$_GET.immo_doc_id|intval immo_doc_id=$_GET.immo_doc_id|intval
amort_line_id=$amort_line_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=$info_immo.key
status=$status
}} }}
{{/if}} {{/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}} {{/form}}
{{:admin_header title="Ajout amortissement" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Ajout amortissement" custom_css="./style.css" current="module_amortization"}}