From a4b2115249127b74562626cf9e4fe74716e91e4e Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Sat, 21 Feb 2026 11:19:48 +0100 Subject: [PATCH] Prise en compte amortissement multi-lignes --- _archives.html | 3 ++ _immobilisations.html | 77 ++++++++++++++++++++++---------------- amortization.html | 66 ++++++++++++++++++++++++++------- attach_amort.html | 22 ++++++++++- detach_amort.html | 13 +++++++ other_amortizations.html | 80 ++++++++++++++++++++++++++-------------- 6 files changed, 186 insertions(+), 75 deletions(-) diff --git a/_archives.html b/_archives.html index 37b5a13..671ceb4 100644 --- a/_archives.html +++ b/_archives.html @@ -161,6 +161,9 @@ {{if $total_immo != 0}} + + + {{#foreach from=$sommes_immo|ksort key="code" item="value"}} diff --git a/_immobilisations.html b/_immobilisations.html index d8a88f3..f26b23f 100644 --- a/_immobilisations.html +++ b/_immobilisations.html @@ -49,10 +49,10 @@ {{:assign nb_immo=0}} {{:assign total_immo = 0}} {{#select - trans.id as trans_id, + trans.id as immo_trans_id, trans.label as trans_label, trans.date as trans_date, - line.id as immo_id, + line.id as immo_line_id, line.debit AS debit, account.id as account_id, account.code as account_code, @@ -65,13 +65,13 @@ ORDER BY trans.date DESC; !condition=$condition }} - {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$trans_id}} + {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$immo_trans_id}} {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}} {{:assign duration=null}} {{:assign montant_immo=$debit}} {{* voir si l'immo est prise en charge *}} - {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}} + {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_line_id|intval}} {{:assign duration=$duration}} {{:assign status=$status}} {{else}} @@ -86,7 +86,7 @@ et déduire leur montant de celui de l'immo *}} {{#select - CASE links.id_related = :immo_id + CASE links.id_related = :immo_trans_id WHEN true THEN links.id_transaction WHEN false THEN links.id_related END as other_id, @@ -96,12 +96,11 @@ ON (trans.id = links.id_transaction OR trans.id = links.id_related) INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id INNER JOIN acc_accounts AS acc ON line.id_account = acc.id - WHERE trans.id = :immo_id AND line.credit > 0 AND acc.code = :account; - :immo_id=$trans_id + WHERE trans.id = :immo_trans_id AND line.credit > 0 AND acc.code = :account; + :immo_trans_id=$immo_trans_id :account=$account_code }} {{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}} - {{*:debug ligne=$ligne montant_immo=$montant_immo*}} {{/select}} {{if $montant_immo == 0}} {{:assign status="archived"}} @@ -111,39 +110,50 @@ {{/if}} {{* voir s'il existe des écritures d'amortissement associées *}} + {{:assign amort_lines=null}} {{#select - sum(l_amort.credit) as amort_amount, + (l_amort.credit) as amount, CASE links.id_related = t_immo.id WHEN true THEN links.id_transaction WHEN false THEN links.id_related - END as amort_trans_id + END as amort_trans_id, + l_amort.id AS amort_line_id 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 - ) + 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_accounts AS account ON l_amort.id_account = account.id - WHERE - l_immo.id = :line_id - AND - l_amort.credit <> 0 - AND - account.code LIKE '28%'; - :line_id = $immo_id|intval + WHERE l_immo.id = :line_id AND l_amort.credit <> 0 AND account.code LIKE '28%'; + :line_id = $immo_line_id|intval + assign="amort_lines." }} - {{if $amort_amount == null}} - {{:assign exist_amort=false}} - {{:assign amort_amount=0}} - {{else}} - {{:assign exist_amort=true}} - {{:assign amort_amount=$amort_amount}} - {{/if}} {{/select}} + {{:assign amort_amount=0}} + {{#foreach from=$amort_lines item="elem"}} + {{* voir s'il existe un doc associé *}} + {{#load type="link" + where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id" + :immo_line_id = $immo_line_id + :amort_trans_id = $elem.amort_trans_id + assign="link" + }} + {{if $link.amort_line_id == $elem.amort_line_id}} + {{:assign amort_amount="%d+%d"|math:$amort_amount:$amount}} + {{/if}} + {{else}} + {{:assign amort_amount="%d+%d"|math:$amort_amount:$amount}} + {{/load}} + {{/foreach}} + + {{if $amort_amount == 0}} + {{:assign exist_amort=false}} + {{else}} + {{:assign exist_amort=true}} + {{:assign amort_amount=$amort_amount}} + {{/if}} + {{* classement par onglet *}} {{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}} {{if $type_immo == "managed" && $status == "amortized"}}{{:continue}}{{/if}} @@ -155,7 +165,7 @@ {{:assign var="montant" from="sommes_immo.%s"|args:$account_code}} {{:assign var="sommes_immo.%s"|args:$account_code value="%d+%d"|math:$montant:$montant_immo}} - #{{$trans_id}} + #{{$immo_trans_id}} {{$trans_date|date_short}} {{$trans_label}} {{$montant_immo|money_html:false|raw}} @@ -166,13 +176,13 @@ {{:linkbutton label="Paramètres" - href="add_infos.html?immo_id=%s&type_immo=%s"|args:$immo_id:$type_immo + href="add_infos.html?immo_id=%s&type_immo=%s"|args:$immo_line_id:$type_immo shape="settings" target="_dialog" }} {{:linkbutton label="Amortissements" - href="amortization.html?immo_id=%s&type_immo=%s"|args:$immo_id:$type_immo + href="amortization.html?immo_id=%s&type_immo=%s"|args:$immo_line_id:$type_immo shape="table" }} @@ -181,6 +191,9 @@ {{if $total_immo != 0}} + + + {{#foreach from=$sommes_immo|ksort key="code" item="value"}} diff --git a/amortization.html b/amortization.html index ebdab64..23dc3f4 100644 --- a/amortization.html +++ b/amortization.html @@ -61,7 +61,7 @@ {{#select l_amort.credit as amort_amount, l_amort.label as amort_label, - l_amort.id as amort_line, + l_amort.id as amort_line_id, CASE WHEN links.id_related = t_immo.id THEN links.id_transaction ELSE links.id_related @@ -84,8 +84,20 @@ AND account.code LIKE '28%' ORDER BY trans.date; :line_id = $_GET.immo_id|intval - assign=linked_lines. + assign="amort_line" }} + + {{#load type="link" + where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id" + assign="line" + :immo_line_id=$_GET.immo_id|intval :amort_trans_id=$amort_line.amort_trans_id + }} + {{if $line.amort_line_id == $amort_line.amort_line_id}} + {{:assign var="linked_amort." value=$amort_line}} + {{/if}} + {{else}} + {{:assign var="linked_amort." value=$amort_line}} + {{/load}} {{if $date_debut == null}} {{:assign date_debut=$amort_date}} {{/if}} @@ -96,7 +108,7 @@ {{:assign valeur_residuelle=0}} {{else}} {{:assign valeur_residuelle=$ligne_immo.montant}} - {{#foreach from=$linked_lines}} + {{#foreach from=$linked_amort}} {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}} {{/foreach}} {{/if}} @@ -112,7 +124,7 @@ {{:assign autres_amortissements=false}} {{#select - line.id_transaction as t_id + line.id_transaction AS amort_trans_id FROM acc_transactions_lines AS line INNER JOIN acc_accounts AS account ON account.id = line.id_account INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction @@ -120,16 +132,44 @@ WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16) AND !filter_condition ORDER BY trans.date, trans.label; !filter_condition=$filter_condition + assign="amort" }} + {{* voir s'il existe des écritures liées avec un numéro de compte d'immobilisation *}} {{#select - id_transaction, - id_related - FROM acc_transactions_links - WHERE id_transaction = :id_amort OR id_related = :id_amort + links.id_transaction, + links.id_related, + trans.id AS trans_id + FROM acc_transactions_links AS links + INNER JOIN acc_transactions AS trans ON ( + CASE + WHEN links.id_transaction = :id_amort THEN links.id_related + WHEN links.id_related = :id_amort THEN links.id_transaction + END) = trans.id + INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE + links.id_transaction = :id_amort OR links.id_related = :id_amort + AND acc.code LIKE '21%' LIMIT 1 ; - :id_amort=$t_id + :id_amort=$amort.amort_trans_id }} + {{* voir s'il existe un doc associé à une ligne de l'amortissement *}} + {{:assign keep=true}} + {{#load type="link" + where="$$.amort_trans_id = :amort_trans_id" + :amort_trans_id = $amort.amort_trans_id + }} + {{if $amort_line_id == $amort.amort_line_id}} + {{:assign keep=false}} + {{:break}} + {{/if}} + {{else}} + {{:assign keep=false}} + {{/load}} + {{if $keep}} + {{:assign autres_amortissements=true}} + {{/if}} {{else}} {{:assign autres_amortissements=true}} {{/select}} @@ -220,7 +260,7 @@

Amortissements enregistrés

-{{if $linked_lines != null}} +{{if $linked_amort != null}}
@@ -236,7 +276,7 @@ - {{#foreach from=$linked_lines item="line"}} + {{#foreach from=$linked_amort item="line"}} {{* données de l'écriture *}} {{: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}} @@ -256,7 +296,7 @@ {{/foreach}} @@ -273,7 +313,7 @@ {{if $autres_amortissements}}

- Il existe des écritures d'amortissement qui ne sont pas rattachés à une immobilisation !
+ Il existe des écritures d'amortissement qui ne sont pas rattachées à une immobilisation !
Utilisez le bouton « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.

{{/if}} diff --git a/attach_amort.html b/attach_amort.html index 8680894..5d910cb 100644 --- a/attach_amort.html +++ b/attach_amort.html @@ -44,8 +44,6 @@ {{* ajouter la nouvelle liaison *}} {{:assign var="linked_transactions." value=$amort_id}} - -{{* Enregistrer les liaisons *}} {{:api method="POST" path="accounting/transaction/%s/transactions"|args:$immo_trans_id @@ -53,4 +51,24 @@ 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_id|intval + :amort_trans_id = $amort_id + :amort_line_id = $_GET.amort_id|intval + limit=1 +}} +{{else}} + {{:save + key=""|uuid + type="link" + immo_line_id=$_GET.immo_id|intval + amort_line_id=$_GET.amort_id|intval + amort_trans_id=$amort_id + }} +{{/load}} {{:redirect force="amortization.html?immo_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_id:$amort_id}} diff --git a/detach_amort.html b/detach_amort.html index b2ae4da..04495dc 100644 --- a/detach_amort.html +++ b/detach_amort.html @@ -55,4 +55,17 @@ assign_code="result_code" transactions=$linked_transactions }} + +{{* supprimer le doc de liaison entre les lignes *}} +{{#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_id|intval + :amort_trans_id = $amort_id|intval + :amort_line_id = $_GET.amort_id|intval +}} + {{:delete id=$id}} +{{/load}} + {{:redirect to="amortization.html?immo_id=%s&ok=1&msg=detach&trans_id=%s"|args:$_GET.immo_id:$amort_id}} diff --git a/other_amortizations.html b/other_amortizations.html index 5f2b493..ae3d6ae 100644 --- a/other_amortizations.html +++ b/other_amortizations.html @@ -8,11 +8,7 @@ {{* récupérer les infos de l'immobilisation *}} {{#select - line.id as immo_id, - line.debit as montant, - trans.id as trans_id, - trans.label as label, - trans.date + trans.label as label FROM acc_transactions_lines AS line INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id WHERE line.id = :line_id; @@ -31,13 +27,14 @@ {{/foreach}} {{:assign filter_condition=$filter_condition|cat:"0)"}} +{{* lister les écritures d'amortissement *}} {{#select - line.id as l_id, - line.id_transaction as t_id, + line.id as amort_line_id, + line.id_transaction as amort_trans_id, line.credit as amort_amount, - line.label as l_label, - trans.date as t_date, - trans.label as t_label, + line.label as line_label, + trans.date as trans_date, + trans.label as trans_label, trans.id_year as amort_year, account.id as account_id, account.code as account_code, @@ -49,17 +46,47 @@ WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16) AND !filter_condition ORDER BY trans.date, trans.label; !filter_condition=$filter_condition - assign=autre_amort -}} - {{#select - id_transaction, - id_related - FROM acc_transactions_links - WHERE id_transaction = :id_amort OR id_related = :id_amort; - :id_amort=$t_id + assign="amort" }} + + {{* voir s'il existe des écritures liées avec un numéro de compte d'immobilisation *}} + {{#select + links.id_transaction, + links.id_related, + trans.id AS trans_id + FROM acc_transactions_links AS links + INNER JOIN acc_transactions AS trans ON ( + CASE + WHEN links.id_transaction = :id_amort THEN links.id_related + WHEN links.id_related = :id_amort THEN links.id_transaction + END) = trans.id + INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE + links.id_transaction = :id_amort OR links.id_related = :id_amort + AND acc.code LIKE '21%' + LIMIT 1 + ; + :id_amort=$amort.amort_trans_id + }} + {{* voir s'il existe un doc associé à une ligne de l'amortissement *}} + {{:assign keep=true}} + {{#load type="link" + where="$$.amort_trans_id = :amort_trans_id" + :amort_trans_id = $amort.amort_trans_id + }} + {{if $amort_line_id == $amort.amort_line_id}} + {{:assign keep=false}} + {{:break}} + {{/if}} + {{else}} + {{:assign keep=false}} + {{/load}} + {{if $keep}} + {{:assign var="autres_amortissements." value=$amort}} + {{/if}} {{else}} - {{:assign var="autres_amortissements." value=$autre_amort}} + {{:assign var="autres_amortissements." value=$amort}} {{/select}} {{/select}} @@ -94,22 +121,19 @@ {{#foreach from=$autres_amortissements item="line"}} - {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.t_id}} + {{: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}} - - + + - {{/foreach}}
{{$line.account_code}} {{$line.account_label}} - {{:linkbutton label="Détacher" href="detach_amort.html?amort_id=%d&immo_id=%d"|args:$line.amort_line:$ligne_immo.immo_id shape="minus"}} + {{:linkbutton label="Détacher" href="detach_amort.html?amort_id=%d&immo_id=%d"|args:$line.amort_line_id:$ligne_immo.immo_id shape="minus"}}
#{{$line.t_id}}{{$line.t_date|date_short}}#{{$line.amort_trans_id}}{{$line.trans_date|date_short}} {{"%f"|math:$line.amort_amount|money_html:false|raw}}{{if $line.l_label == null}} - {{$line.t_label}} - {{else}} - {{$line.l_label}} - {{/if}} + {{$line.trans_label}} + {{if $line.line_label != null}} - {{$line.line_label}}{{/if}} {{$line.account_code}} {{$line.account_label}} - {{:linkbutton label="Attacher" href="attach_amort.html?amort_id=%d&immo_id=%d"|args:$line.l_id:$_GET.immo_id shape="plus"}} + {{:linkbutton label="Attacher" href="attach_amort.html?amort_id=%d&immo_id=%d"|args:$line.amort_line_id:$_GET.immo_id shape="plus"}}