Amélioration conditions sélection lignes immo et amortissement

This commit is contained in:
Jean-Christophe Engel 2026-03-24 11:53:34 +01:00
parent ac3b1e818d
commit f1ca740464
3 changed files with 101 additions and 71 deletions

View file

@ -2,6 +2,7 @@
{{* Liste des immobilisations en cours d'amortissement ou amorties *}} {{* Liste des immobilisations en cours d'amortissement ou amorties *}}
{{:include file="_get_config.html" keep="module.config"}}
<section class="immobilisation"> <section class="immobilisation">
<p class="help"> <p class="help">
@ -29,25 +30,24 @@
<tbody> <tbody>
{{* lister les immobilisations *}} {{* lister les immobilisations *}}
{{:include file="_get_config.html" keep="module.config"}}
{{:assign account_condition="("}} {{:assign account_condition="("}}
{{#foreach from=$module.config.prefixes item="code"}} {{#foreach from=$module.config.prefixes item="code"}}
{{:assign code=$code|cat:"%"|quote_sql}} {{:assign code=$code|cat:"%"|quote_sql}}
{{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}} {{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}} {{:assign account_condition=$account_condition|cat:"0)"}}
{{:assign doc_condition="($$.status <> 'ignored' AND $$.status <> 'archived')"}}
{{:assign filter_condition=" NOT ("}} {{:assign filter_condition="NOT ("}}
{{#foreach from=$module.config.filters item="filter"}} {{#foreach from=$module.config.filters item="filter"}}
{{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}} {{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}}
{{:assign filter_condition=$filter_condition|cat:" trans_label LIKE "|cat:$filter|cat:" OR "}} {{:assign filter_condition=$filter_condition|cat:" trans_label LIKE "|cat:$filter|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign filter_condition=$filter_condition|cat:"0)"}} {{:assign filter_condition=$filter_condition|cat:"0)"}}
{{:assign filter_condition="($$.status IS NULL AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:")"}} {{:assign filter_condition="($$.status IS NULL AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:")"}}
{{:assign doc_condition="($$.status <> 'ignored' AND $$.status <> 'archived')"}}
{{:assign condition=$account_condition|cat:" AND debit > 0 AND ("|cat:$filter_condition|cat:" OR "|cat:$doc_condition|cat:")"}} {{:assign condition=$account_condition|cat:" AND debit > 0 AND ("|cat:$filter_condition|cat:" OR "|cat:$doc_condition|cat:")"}}
{{:assign nb_immo=0}} {{:assign nb_immo=0}}
{{:assign total_immo = 0}} {{:assign total_immo = 0}}
{{#select {{#select
@ -100,12 +100,14 @@
}} }}
{{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}} {{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}}
{{/select}} {{/select}}
{{* Immobilisation soldée ? *}} {{* Immobilisation soldée ? *}}
{{* TODO marquer archivée *}}
{{if $montant_immo == 0}} {{if $montant_immo == 0}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
{{* voir s'il existe des écritures d'amortissement associées *}} {{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
{{:assign amort_lines=null}} {{:assign amort_lines=null}}
{{#select {{#select
l_amort.credit as amount, l_amort.credit as amount,
@ -122,25 +124,48 @@
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 l_immo.id = :line_id AND l_amort.credit <> 0 AND account.code LIKE '28%'; WHERE l_immo.id = :line_id AND l_amort.credit <> 0 AND account.code LIKE '28%';
:line_id = $immo_line_id|intval :line_id = $immo_line_id|intval
assign="amort_lines." assign="line"
}} }}
{{:assign var="amort_lines.%d."|args:$amort_trans_id value=$line}}
{{/select}} {{/select}}
{{:assign amort_amount=0}} {{:assign amort_amount=0}}
{{#foreach from=$amort_lines item="elem"}} {{#foreach from=$amort_lines key="amort_trans_id" item="lines"}}
{{* voir s'il existe un doc associé à l'écriture d'amortissement *}} {{:assign nb=$lines|count}}
{{* lister les docs de liaison de l'écriture d'amortissement *}}
{{:assign links=null}}
{{#load type="link" {{#load type="link"
where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id" where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id"
assign="link"
:immo_line_id = $immo_line_id :immo_line_id = $immo_line_id
:amort_trans_id = $elem.amort_trans_id :amort_trans_id = $amort_trans_id
assign="links."
}} }}
{{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}} {{/load}}
{{#foreach from=$lines item="line"}}
{{* voir s'il existe une ligne associée à l'écriture d'amortissement *}}
{{:assign line_link_exist=false}}
{{#foreach from=$links item="link"}}
{{if $link.amort_line_id == $line.amort_line_id}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
{{:assign line_link_exist=true}}
{{/if}}
{{/foreach}}
{{if ! $line_link_exist}}
{{if $nb == 1}}
{{* créer la liaison ligne immo <-> ligne amort *}}
{{*:debug lier_immo_line_id=$immo_line_id lier_amort_trans_id=$amort_trans_id avec_amort_line_id=$amort_line_id*}}
{{:save
key=""|uuid
type="link"
immo_line_id=$immo_line_id
amort_line_id=$amort_line_id
amort_trans_id=$amort_trans_id
}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
{{/if}}
{{/if}}
{{/foreach}}
{{/foreach}} {{/foreach}}
{{if $amort_amount == 0}} {{if $amort_amount == 0}}

View file

@ -2,13 +2,13 @@
{{* Liste des immobilisations non amortissables ou non (encore) gérées *}} {{* Liste des immobilisations non amortissables ou non (encore) gérées *}}
{{:include file="_get_config.html" keep="module.config"}}
<section class="immobilisation"> <section class="immobilisation">
<p class="help"> <p class="help">
Cette page liste les écritures pas (encore) prises en charge par le module et sans écriture d'amortissement associée. Cette page liste les écritures pas (encore) prises en charge par le module et sans écriture d'amortissement associée.
</p> </p>
{{:include file="_get_config.html" keep="module.config"}}
{{:assign saved_hides=$module.config.hides}} {{:assign saved_hides=$module.config.hides}}
{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}} {{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}}
@ -37,7 +37,7 @@
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
<th></th> <th class="num"></th>
<th>Date</th> <th>Date</th>
<th>Libellé</th> <th>Libellé</th>
<th class="nombre">Montant</th> <th class="nombre">Montant</th>
@ -49,53 +49,58 @@
<tbody> <tbody>
{{* lister les immobilisations *}} {{* lister les immobilisations *}}
{{:assign condition="("}} {{:assign account_condition="("}}
{{#foreach from=$module.config.prefixes item="code"}} {{#foreach from=$module.config.prefixes item="code"}}
{{:assign code=$code|cat:"%"|quote_sql}} {{:assign code=$code|cat:"%"|quote_sql}}
{{:assign condition=$condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}} {{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign condition=$condition|cat:"0)"}} {{:assign account_condition=$account_condition|cat:"0)"}}
{{:assign condition=$condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"}} {{:assign doc_condition="($$.status == 'ignored')" }}
{{if $unhide == null}} {{if $unhide == null}}
{{:assign filter_condition=" NOT ("}} {{:assign filter_condition="NOT ("}}
{{#foreach from=$module.config.filters item="filter"}} {{#foreach from=$module.config.filters item="filter"}}
{{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}} {{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}}
{{:assign filter_condition=$filter_condition|cat:" trans_label LIKE "|cat:$filter|cat:" OR "}} {{:assign filter_condition=$filter_condition|cat:" trans_label LIKE "|cat:$filter|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign filter_condition=$filter_condition|cat:"0)"}} {{:assign filter_condition=$filter_condition|cat:"0)"}}
{{:assign condition=$condition|cat:" AND "|cat:$filter_condition}} {{else}}
{{:assign filter_condition="1"}}
{{/if}} {{/if}}
{{:assign filter_condition="($$.status IS NULL AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:")"}}
{{:assign condition=$account_condition|cat:" AND debit > 0 AND ("|cat:$filter_condition|cat:" OR "|cat:$doc_condition|cat:")"}}
{{:assign nb_immo=0}} {{:assign nb_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_line_id, line.id as immo_line_id,
line.label as line_label, line.debit AS debit,
line.label AS line_label,
account.id as account_id, account.id as account_id,
account.code as account_code, account.code as account_code,
account.label as account_label, account.label as account_label,
line.debit AS debit, trans.id_year as trans_id_year,
trans.id_year as trans_id_year $$.duration as duration,
$$.status as status
FROM acc_transactions AS trans FROM acc_transactions AS trans
INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
INNER JOIN acc_accounts AS account ON line.id_account = account.id INNER JOIN acc_accounts AS account ON line.id_account = account.id
INNER JOIN acc_years AS years ON trans.id_year = years.id INNER JOIN acc_years AS years ON trans.id_year = years.id
LEFT JOIN !table AS info ON $$.line = line.id
WHERE !condition WHERE !condition
ORDER BY trans.date DESC; ORDER BY trans.date DESC;
!table=$module.table
!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}}
{{* voir si l'immo est prise en charge *}} {{if $status == null}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$immo_line_id|intval}}
{{:assign status=$status}}
{{else}}
{{:assign status="unknown"}} {{:assign status="unknown"}}
{{/load}} {{/if}}
{{if $unhide == null}} {{if $unhide == null}}
{{if $status != "unknown"}} {{if $status != "unknown"}}
@ -113,45 +118,48 @@
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{* voir s'il existe des écritures d'amortissement associées *}} {{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
{{:assign amort_lines=null}}
{{#select {{#select
sum(l_amort.credit) as amort_amount, l_amort.credit as amort_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
AND
l_amort.credit <> 0
AND
account.code LIKE '28%';
:line_id = $immo_line_id|intval :line_id = $immo_line_id|intval
assign="amort_lines."
}} }}
{{if $amort_amount != null}} {{/select}}
{{:assign ignore=true}} {{:assign amort_amount=0}}
{{else}} {{#foreach from=$amort_lines item="line"}}
{{:assign ignore=false}} {{* voir s'il existe un doc associé à l'écriture d'amortissement *}}
{{/if}} {{#load type="link"
{{/select}} where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id AND $$.amort_line_id = :amort_line_id"
:immo_line_id = $immo_line_id
{{if $ignore}} :amort_trans_id = $line.amort_trans_id
{{:continue}} :amort_line_id = $line.amort_line_id
{{/if}} }}
{{:assign nb_immo="%d+1"|math:$nb_immo}} {{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
{{else}}
{{* TODO À VÉRIFIER (cas multi-lignes) *}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
{{/load}}
{{/foreach}}
{{if $amort_amount != 0}}
{{:continue}}
{{/if}}
{{:assign nb_immo="%d+1"|math:$nb_immo}}
<tr {{if $status == "ignored"}}class="ignored"{{/if}}> <tr {{if $status == "ignored"}}class="ignored"{{/if}}>
<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}}{{if $line_label != null && $line_label != $trans_label}} — {{$line_label}}{{/if}}</td> <td>{{$trans_label}}{{if $line_label != null && $line_label != $trans_label}} — {{$line_label}}{{/if}}</td>
<td class="money">{{"%f"|math:$debit|money_html:false|raw}}</td> <td class="money">{{"%f"|math:$debit|money_html:false|raw}}</td>

View file

@ -65,14 +65,14 @@
{{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}} {{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
{{#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_line_label,
l_amort.id as amort_line_id, 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
END as amort_trans_id, END as amort_trans_id,
trans.date as amort_date, trans.date as amort_date,
trans.label as trans_label, trans.label as amort_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,
@ -89,17 +89,14 @@
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_line_id|intval
assign="amort_line" assign="amort_line"
}} }}
{{* lister les lignes d'amortissement liées à la ligne d'immobilisation *}}
{{#load type="link" {{#load type="link"
where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id" where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id AND $$.amort_line_id = :amort_line_id"
assign="line" assign="line"
:immo_line_id=$_GET.immo_line_id|intval :immo_line_id=$_GET.immo_line_id|intval
:amort_trans_id=$amort_line.amort_trans_id :amort_trans_id=$amort_line.amort_trans_id
:amort_line_id = $amort_line.amort_line_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}} {{:assign var="linked_amort." value=$amort_line}}
{{/load}} {{/load}}
{{if $date_debut == null}} {{if $date_debut == null}}
@ -269,7 +266,7 @@
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
<th></th> <th class="num"></th>
<th>Date</th> <th>Date</th>
<th class="nombre">Montant</th> <th class="nombre">Montant</th>
<th class="nombre">Valeur nette</th> <th class="nombre">Valeur nette</th>
@ -291,9 +288,9 @@
<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 class="money">{{"%f"|math:$solde|money_html:false|raw}}</td> <td class="money">{{"%f"|math:$solde|money_html:false|raw}}</td>
<td> <td>
{{$line.trans_label}} {{$line.amort_trans_label}}
{{if $line.amort_label != null && $line.amort_label != $line.trans_label}} {{if $line.amort_line_label != null && $line.amort_line_label != $line.amort_trans_label}}
— {{$line.amort_label}} — {{$line.amort_line_label}}
{{/if}} {{/if}}
</td> </td>
<td><a href={{$compte_url}}>{{$line.account_code}}</a></td> <td><a href={{$compte_url}}>{{$line.account_code}}</a></td>