liaison lignes + possibilité saisir montant

This commit is contained in:
Jean-Christophe Engel 2026-04-29 12:02:07 +02:00
parent 87a1f31bb3
commit faccd71ef8

View file

@ -1,33 +1,93 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{* {{*
Enregistrer la liaison entre une écriture d'amortissement et Enregistrer la liaison entre une ligne d'écriture d'amortissement
l'écriture d'immobilisation correspondante et une ligne d'écriture d'immobilisation
@param immo_line_id : numéro de ligne de l'écriture d'immobilisation
@param amort_line_id : numéro de ligne de l'écriture d'amortissement
@param immo_doc_id : numéro du doc d'immo
*}} *}}
{{* chercher l'écriture d'immobilisation *}} {{* chercher l'écriture d'immobilisation *}}
{{#select {{#select
id_transaction line.id_transaction as immo_trans_id,
FROM acc_transactions_lines trans.label as trans_label,
WHERE id = :line_id; line.label as line_label
FROM acc_transactions_lines as line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE line.id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_line_id|intval
assign="ligne_immo"
}} }}
{{:assign immo_trans_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_line_id}} {{:error message="Immobilisation non trouvée"}}
{{/select}} {{/select}}
{{* chercher le doc associé à l'immo *}}
{{#load id=$_GET.immo_doc_id|intval}}
{{:assign label_immo=$label|or:$ligne_immo.trans_label}}
{{else}}
{{:error message="Immobilisation non trouvée"}}
{{/load}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{* chercher l'écriture d'amortissement *}} {{* chercher l'écriture d'amortissement *}}
{{#select {{#select
id_transaction line.credit as amount,
FROM acc_transactions_lines line.label as line_label,
WHERE id = :line_id; trans.date as amort_date,
trans.label as trans_label,
trans.id as trans_id,
acc.code as account_code,
acc.label as account_label
FROM acc_transactions_lines as line
INNER JOIN acc_transactions as trans on line.id_transaction = trans.id
INNER JOIN acc_accounts as acc on line.id_account = acc.id
WHERE line.id = :line_id;
:line_id = $_GET.amort_line_id|intval :line_id = $_GET.amort_line_id|intval
assign="amort_line"
}} }}
{{:assign amort_trans_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_line_id}} {{:error message="Amortissement non trouvé"}}
{{/select}} {{/select}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$amort_line.trans_id}}
{{* montant de l'écriture d'amortissement déjà affecté *}}
{{:assign montant_affecte=0}}
{{#load type="amort_link" assign="linked_amort."
where="$$.amort_line_id = :amort_line_id"
:amort_line_id = $_GET.amort_line_id|intval
}}
{{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}}
{{/load}}
{{:assign reste="%d-%d"|math:$amort_line.amount:$montant_affecte}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
{{* vérifier que le montant saisi est inférieur au reste *}}
{{if $_POST.montant == null}}
{{if $montant_affecte == 0}}
{{:assign saved_amount=null}}
{{else}}
{{:assign saved_amount=$reste}}
{{/if}}
{{else}}
{{:assign montant_amort=$_POST.montant|floatval}}
{{:assign montant_amort="%f*100"|math:$montant_amort}}
{{if $montant_amort > $reste}}
{{:assign reste_nb="%f"|math:$reste|money_currency:false}}
{{:error message="Le montant de l'amortissement ne peut être supérieur au reste (%s)"|args:$reste_nb}}
{{/if}}
{{if $montant_amort == $amort_line.amount}}
{{:assign saved_amount=null}}
{{else}}
{{:assign saved_amount=$montant_amort|intval}}
{{/if}}
{{/if}}
{{* chercher les liaisons de l'écriture d'immobilisation *}} {{* chercher les liaisons de l'écriture d'immobilisation *}}
{{#select {{#select
@ -37,38 +97,73 @@
END as linked_id END as linked_id
FROM acc_transactions_links as links FROM acc_transactions_links as links
WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id; WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id;
:immo_trans_id = $immo_trans_id :immo_trans_id = $ligne_immo.immo_trans_id
}} }}
{{:assign var="linked_transactions." value=$linked_id}} {{:assign var="linked_transactions." value=$linked_id}}
{{/select}} {{/select}}
{{* ajouter la nouvelle liaison *}} {{* ajouter la nouvelle liaison *}}
{{:assign var="linked_transactions." value=$amort_trans_id}} {{:assign var="linked_transactions." value=$amort_line.trans_id}}
{{:api {{:api
method="POST" method="POST"
path="accounting/transaction/%s/transactions"|args:$immo_trans_id path="accounting/transaction/%s/transactions"|args:$ligne_immo.immo_trans_id
assign="result" assign="result"
assign_code="result_code" assign_code="result_code"
transactions=$linked_transactions transactions=$linked_transactions
}} }}
{{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}} {{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}}
{{#load type="link" {{* TODO voir si nécessaire ? *}}
where="$$.immo_line_id = :immo_line_id AND {{#load type="amort_link"
$$.amort_trans_id = :amort_trans_id AND where="$$.immo_doc_id = :immo_doc_id AND $$.amort_line_id = :amort_line_id"
$$.amort_line_id = :amort_line_id" :immo_doc_id=$_GET.immo_doc_id|intval
:immo_line_id=$_GET.immo_line_id|intval
:amort_trans_id = $amort_trans_id
:amort_line_id = $_GET.amort_line_id|intval :amort_line_id = $_GET.amort_line_id|intval
limit=1 limit=1
}} }}
{{else}} {{else}}
{{:save {{:save
key=""|uuid key=""|uuid
type="link" type="amort_link"
immo_line_id=$_GET.immo_line_id|intval immo_doc_id=$_GET.immo_doc_id|intval
amort_line_id=$_GET.amort_line_id|intval amort_line_id=$_GET.amort_line_id|intval
amort_trans_id=$amort_trans_id amount=$saved_amount
}} }}
{{/load}} {{/load}}
{{:redirect force="amortization.html?immo_line_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_line_id:$amort_trans_id}}
{{: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}}
{{/form}}
{{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="_nav.html" current="config" subcurrent="init" subsubcurrent="parameter"}}
{{/if}}
{{:form_errors}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd>{{$label_immo}}</dd>
<dt>Amortissement</dt>
<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>
<dd>{{$amort_line.amount|money_currency_html:false|raw}}</dd>
<dt>Montant déjà affecté</dt>
<dd class="money strong">{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}</dd>
<dt>Montant restant à affecter</dt>
<dd class="money strong">{{"%f"|math:$reste|money_currency_html:false|raw}}</dd>
</dl>
</div>
<form method="post" action="" data-focus="1">
<fieldset>
<dl>
{{:input type="money" name="montant" label="Montant" default=$reste help="Montant de l'amortissement"}}
</dl>
</fieldset>
<p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>