Prise en compte amortissement multi-lignes

This commit is contained in:
Jean-Christophe Engel 2026-02-21 11:19:48 +01:00
parent 8cf313502e
commit fb9cb32a44
6 changed files with 152 additions and 69 deletions

View file

@ -161,6 +161,9 @@
</tbody> </tbody>
<tfoot> <tfoot>
{{if $total_immo != 0}} {{if $total_immo != 0}}
<tr>
<td colspan="9">
</tr>
{{#foreach from=$sommes_immo|ksort key="code" item="value"}} {{#foreach from=$sommes_immo|ksort key="code" item="value"}}
<tr> <tr>
<td></td> <td></td>

View file

@ -49,10 +49,10 @@
{{:assign nb_immo=0}} {{:assign nb_immo=0}}
{{:assign total_immo = 0}} {{:assign total_immo = 0}}
{{#select {{#select
trans.id as trans_id, trans.id as immo_trans_id,
trans.label as trans_label, trans.label as trans_label,
trans.date as trans_date, trans.date as trans_date,
line.id as immo_id, line.id as immo_line_id,
line.debit AS debit, line.debit AS debit,
account.id as account_id, account.id as account_id,
account.code as account_code, account.code as account_code,
@ -65,13 +65,13 @@
ORDER BY trans.date DESC; ORDER BY trans.date DESC;
!condition=$condition !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 compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}}
{{:assign duration=null}} {{:assign duration=null}}
{{:assign montant_immo=$debit}} {{:assign montant_immo=$debit}}
{{* voir si l'immo est prise en charge *}} {{* 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 duration=$duration}}
{{:assign status=$status}} {{:assign status=$status}}
{{else}} {{else}}
@ -86,7 +86,7 @@
et déduire leur montant de celui de l'immo et déduire leur montant de celui de l'immo
*}} *}}
{{#select {{#select
CASE links.id_related = :immo_id CASE links.id_related = :immo_trans_id
WHEN true THEN links.id_transaction WHEN true THEN links.id_transaction
WHEN false THEN links.id_related WHEN false THEN links.id_related
END as other_id, END as other_id,
@ -96,12 +96,11 @@
ON (trans.id = links.id_transaction OR trans.id = links.id_related) 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_transactions_lines AS line on line.id_transaction = other_id
INNER JOIN acc_accounts AS acc ON line.id_account = acc.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; WHERE trans.id = :immo_trans_id AND line.credit > 0 AND acc.code = :account;
:immo_id=$trans_id :immo_trans_id=$immo_trans_id
:account=$account_code :account=$account_code
}} }}
{{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}} {{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}}
{{*:debug ligne=$ligne montant_immo=$montant_immo*}}
{{/select}} {{/select}}
{{if $montant_immo == 0}} {{if $montant_immo == 0}}
{{:assign status="archived"}} {{:assign status="archived"}}
@ -111,38 +110,49 @@
{{/if}} {{/if}}
{{* voir s'il existe des écritures d'amortissement associées *}} {{* voir s'il existe des écritures d'amortissement associées *}}
{{:assign amort_lines=null}}
{{#select {{#select
sum(l_amort.credit) as amort_amount, (l_amort.credit) as amount,
CASE links.id_related = t_immo.id CASE links.id_related = t_immo.id
WHEN true THEN links.id_transaction WHEN true THEN links.id_transaction
WHEN false THEN links.id_related 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 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 as t_immo on t_immo.id = l_immo.id_transaction
INNER JOIN acc_transactions_links as links INNER JOIN acc_transactions_links as links
ON ( ON (t_immo.id = links.id_transaction OR t_immo.id = links.id_related)
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_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 INNER JOIN acc_accounts AS account ON l_amort.id_account = account.id
WHERE WHERE l_immo.id = :line_id AND l_amort.credit <> 0 AND account.code LIKE '28%';
l_immo.id = :line_id :line_id = $immo_line_id|intval
AND assign="amort_lines."
l_amort.credit <> 0
AND
account.code LIKE '28%';
:line_id = $immo_id|intval
}} }}
{{if $amort_amount == null}} {{/select}}
{{:assign exist_amort=false}}
{{:assign amort_amount=0}} {{: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}} {{else}}
{{:assign exist_amort=true}} {{:assign exist_amort=true}}
{{:assign amort_amount=$amort_amount}} {{:assign amort_amount=$amort_amount}}
{{/if}} {{/if}}
{{/select}}
{{* classement par onglet *}} {{* classement par onglet *}}
{{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}} {{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}}
@ -155,7 +165,7 @@
{{:assign var="montant" from="sommes_immo.%s"|args:$account_code}} {{: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}} {{:assign var="sommes_immo.%s"|args:$account_code value="%d+%d"|math:$montant:$montant_immo}}
<tr> <tr>
<td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td> <td class="num"><a href={{$trans_url}}>#{{$immo_trans_id}}</a></td>
<td>{{$trans_date|date_short}}</td> <td>{{$trans_date|date_short}}</td>
<td>{{$trans_label}}</td> <td>{{$trans_label}}</td>
<td class="money">{{$montant_immo|money_html:false|raw}}</td> <td class="money">{{$montant_immo|money_html:false|raw}}</td>
@ -166,13 +176,13 @@
<td class="actions"> <td class="actions">
{{:linkbutton {{:linkbutton
label="Paramètres" 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" shape="settings"
target="_dialog" target="_dialog"
}} }}
{{:linkbutton {{:linkbutton
label="Amortissements" 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" shape="table"
}} }}
</td> </td>
@ -181,6 +191,9 @@
</tbody> </tbody>
<tfoot> <tfoot>
{{if $total_immo != 0}} {{if $total_immo != 0}}
<tr>
<td colspan="9">
</tr>
{{#foreach from=$sommes_immo|ksort key="code" item="value"}} {{#foreach from=$sommes_immo|ksort key="code" item="value"}}
<tr> <tr>
<td></td> <td></td>

View file

@ -61,7 +61,7 @@
{{#select {{#select
l_amort.credit as amort_amount, l_amort.credit as amort_amount,
l_amort.label as amort_label, 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 CASE WHEN links.id_related = t_immo.id
THEN links.id_transaction THEN links.id_transaction
ELSE links.id_related ELSE links.id_related
@ -84,8 +84,20 @@
AND account.code LIKE '28%' AND account.code LIKE '28%'
ORDER BY trans.date; ORDER BY trans.date;
:line_id = $_GET.immo_id|intval :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}} {{if $date_debut == null}}
{{:assign date_debut=$amort_date}} {{:assign date_debut=$amort_date}}
{{/if}} {{/if}}
@ -96,7 +108,7 @@
{{:assign valeur_residuelle=0}} {{:assign valeur_residuelle=0}}
{{else}} {{else}}
{{:assign valeur_residuelle=$ligne_immo.montant}} {{:assign valeur_residuelle=$ligne_immo.montant}}
{{#foreach from=$linked_lines}} {{#foreach from=$linked_amort}}
{{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}} {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
@ -220,7 +232,7 @@
</div> </div>
<h3 class="ruler">Amortissements enregistrés</h3> <h3 class="ruler">Amortissements enregistrés</h3>
{{if $linked_lines != null}} {{if $linked_amort != null}}
<section class="amortissement"> <section class="amortissement">
<table class="list"> <table class="list">
<thead> <thead>
@ -236,7 +248,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#foreach from=$linked_lines item="line"}} {{#foreach from=$linked_amort item="line"}}
{{* données de l'écriture *}} {{* données de l'écriture *}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.amort_trans_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}} {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.amort_year}}
@ -256,7 +268,7 @@
<td><a href={{$compte_url}}>{{$line.account_code}}</a></td> <td><a href={{$compte_url}}>{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td> <td>{{$line.account_label}}</td>
<td> <td>
{{: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"}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
@ -273,7 +285,7 @@
{{if $autres_amortissements}} {{if $autres_amortissements}}
<p class="block alert"> <p class="block alert">
Il existe des écritures d'amortissement qui ne sont pas rattachés à une immobilisation ! <br /> Il existe des écritures d'amortissement qui ne sont pas rattachées à une immobilisation ! <br />
Utilisez le bouton « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation. Utilisez le bouton « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
</p> </p>
{{/if}} {{/if}}

View file

@ -44,8 +44,6 @@
{{* ajouter la nouvelle liaison *}} {{* ajouter la nouvelle liaison *}}
{{:assign var="linked_transactions." value=$amort_id}} {{:assign var="linked_transactions." value=$amort_id}}
{{* Enregistrer les liaisons *}}
{{:api {{:api
method="POST" method="POST"
path="accounting/transaction/%s/transactions"|args:$immo_trans_id path="accounting/transaction/%s/transactions"|args:$immo_trans_id
@ -53,4 +51,24 @@
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 *}}
{{#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}} {{:redirect force="amortization.html?immo_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_id:$amort_id}}

View file

@ -55,4 +55,17 @@
assign_code="result_code" assign_code="result_code"
transactions=$linked_transactions 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}} {{:redirect to="amortization.html?immo_id=%s&ok=1&msg=detach&trans_id=%s"|args:$_GET.immo_id:$amort_id}}

View file

@ -8,11 +8,7 @@
{{* récupérer les infos de l'immobilisation *}} {{* récupérer les infos de l'immobilisation *}}
{{#select {{#select
line.id as immo_id, trans.label as label
line.debit as montant,
trans.id as trans_id,
trans.label as label,
trans.date
FROM acc_transactions_lines AS line FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE line.id = :line_id; WHERE line.id = :line_id;
@ -31,13 +27,14 @@
{{/foreach}} {{/foreach}}
{{:assign filter_condition=$filter_condition|cat:"0)"}} {{:assign filter_condition=$filter_condition|cat:"0)"}}
{{* lister les écritures d'amortissement *}}
{{#select {{#select
line.id as l_id, line.id as amort_line_id,
line.id_transaction as t_id, line.id_transaction as amort_trans_id,
line.credit as amort_amount, line.credit as amort_amount,
line.label as l_label, line.label as line_label,
trans.date as t_date, trans.date as trans_date,
trans.label as t_label, trans.label as trans_label,
trans.id_year as amort_year, trans.id_year as amort_year,
account.id as account_id, account.id as account_id,
account.code as account_code, 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 WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16) AND !filter_condition
ORDER BY trans.date, trans.label; ORDER BY trans.date, trans.label;
!filter_condition=$filter_condition !filter_condition=$filter_condition
assign=autre_amort assign="amort"
}}
{{#select
id_transaction,
id_related
FROM acc_transactions_links
WHERE id_transaction = :id_amort OR id_related = :id_amort;
:id_amort=$t_id
}} }}
{{* 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}} {{else}}
{{:assign var="autres_amortissements." value=$autre_amort}} {{:assign keep=false}}
{{/load}}
{{if $keep}}
{{:assign var="autres_amortissements." value=$amort}}
{{/if}}
{{else}}
{{:assign var="autres_amortissements." value=$amort}}
{{/select}} {{/select}}
{{/select}} {{/select}}
@ -94,22 +121,19 @@
</thead> </thead>
<tbody> <tbody>
{{#foreach from=$autres_amortissements item="line"}} {{#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}} {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.amort_year}}
<tr> <tr>
<td class="num"><a href={{$trans_url}}>#{{$line.t_id}}</a></td> <td class="num"><a href={{$trans_url}}>#{{$line.amort_trans_id}}</a></td>
<td>{{$line.t_date|date_short}}</td> <td>{{$line.trans_date|date_short}}</td>
<td class="money">{{"%f"|math:$line.amort_amount|money_html:false|raw}}</td> <td class="money">{{"%f"|math:$line.amort_amount|money_html:false|raw}}</td>
<td>{{if $line.l_label == null}} <td>{{$line.trans_label}}
{{$line.t_label}} {{if $line.line_label != null}} - {{$line.line_label}}{{/if}}
{{else}}
{{$line.l_label}}
{{/if}}
</td> </td>
<td><a href={{$compte_url}}>{{$line.account_code}}</a></td> <td><a href={{$compte_url}}>{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td> <td>{{$line.account_label}}</td>
<td> <td>
{{: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"}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}