From faccd71ef8bbe5dcf5b380829e845e0729c4d304 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Wed, 29 Apr 2026 12:02:07 +0200 Subject: [PATCH] =?UTF-8?q?liaison=20lignes=20+=20possibilit=C3=A9=20saisi?= =?UTF-8?q?r=20montant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- attach_amort.html | 199 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 147 insertions(+), 52 deletions(-) diff --git a/attach_amort.html b/attach_amort.html index 4770afa..b320848 100644 --- a/attach_amort.html +++ b/attach_amort.html @@ -1,74 +1,169 @@ {{* -*- brindille -*- *}} {{* - Enregistrer la liaison entre une écriture d'amortissement et - l'écriture d'immobilisation correspondante + Enregistrer la liaison entre une ligne d'écriture d'amortissement + 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 *}} {{#select - id_transaction - FROM acc_transactions_lines - WHERE id = :line_id; + line.id_transaction as immo_trans_id, + trans.label as trans_label, + 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 + assign="ligne_immo" }} - {{:assign immo_trans_id=$id_transaction}} {{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}} +{{* 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 *}} {{#select - id_transaction - FROM acc_transactions_lines - WHERE id = :line_id; + line.credit as amount, + line.label as line_label, + 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 + assign="amort_line" }} - {{:assign amort_trans_id=$id_transaction}} {{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}} +{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$amort_line.trans_id}} -{{* chercher les liaisons de l'écriture d'immobilisation *}} -{{#select - CASE links.id_related = :immo_trans_id - WHEN true THEN links.id_transaction - WHEN false THEN links.id_related - END as linked_id - FROM acc_transactions_links as links - WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id; - :immo_trans_id = $immo_trans_id -}} - {{:assign var="linked_transactions." value=$linked_id}} -{{/select}} - -{{* ajouter la nouvelle liaison *}} -{{:assign var="linked_transactions." value=$amort_trans_id}} -{{:api - method="POST" - path="accounting/transaction/%s/transactions"|args:$immo_trans_id - assign="result" - assign_code="result_code" - transactions=$linked_transactions -}} - -{{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}} -{{#load type="link" - where="$$.immo_line_id = :immo_line_id AND - $$.amort_trans_id = :amort_trans_id AND - $$.amort_line_id = :amort_line_id" - :immo_line_id=$_GET.immo_line_id|intval - :amort_trans_id = $amort_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 - limit=1 }} -{{else}} - {{:save - key=""|uuid - type="link" - immo_line_id=$_GET.immo_line_id|intval - amort_line_id=$_GET.amort_line_id|intval - amort_trans_id=$amort_trans_id - }} + {{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}} {{/load}} -{{:redirect force="amortization.html?immo_line_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_line_id:$amort_trans_id}} +{{: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 *}} + {{#select + CASE links.id_related = :immo_trans_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as linked_id + FROM acc_transactions_links as links + WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id; + :immo_trans_id = $ligne_immo.immo_trans_id + }} + {{:assign var="linked_transactions." value=$linked_id}} + {{/select}} + + {{* ajouter la nouvelle liaison *}} + {{:assign var="linked_transactions." value=$amort_line.trans_id}} + {{:api + method="POST" + path="accounting/transaction/%s/transactions"|args:$ligne_immo.immo_trans_id + assign="result" + assign_code="result_code" + transactions=$linked_transactions + }} + + {{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}} + {{* TODO voir si nécessaire ? *}} + {{#load type="amort_link" + where="$$.immo_doc_id = :immo_doc_id AND $$.amort_line_id = :amort_line_id" + :immo_doc_id=$_GET.immo_doc_id|intval + :amort_line_id = $_GET.amort_line_id|intval + limit=1 + }} + {{else}} + {{:save + key=""|uuid + type="amort_link" + immo_doc_id=$_GET.immo_doc_id|intval + amort_line_id=$_GET.amort_line_id|intval + amount=$saved_amount + }} + {{/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}} +{{/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}} + +
+
+
Immobilisation
+
{{$label_immo}}
+
Amortissement
+
#{{$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}}
+
+
+ +
+
+
+ {{:input type="money" name="montant" label="Montant" default=$reste help="Montant de l'amortissement"}} +
+
+

+ {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} +

+
+