Merge branch 'classification_initiale'

This commit is contained in:
Jean-Christophe Engel 2026-06-15 09:43:27 +02:00
commit a99bcc1753
42 changed files with 3215 additions and 1513 deletions

View file

@ -2,180 +2,46 @@
{{*
Lister les écritures d'amortissement associées à une immobilisation
@param immo_line_id : id de la ligne d'immo
@param immo_doc_id : id du doc associé à l'immo
@param type_immo : managed, amortized, archived, others
*}}
{{* récupérer les infos de l'immobilisation *}}
{{#select
line.id as immo_line_id,
line.debit as montant,
line.label as line_label,
trans.id as immo_trans_id,
trans.label as label,
trans.date,
account.code as account_code
FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
INNER JOIN acc_accounts AS account ON line.id_account = account.id
WHERE line.id = :line_id;
:line_id = $_GET.immo_line_id|intval
assign=ligne_immo
}}
{{else}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_line_id}}
{{/select}}
{{:assign date_debut=$ligne_immo.date}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.immo_trans_id}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}}
{{:assign duree=$duration}}
{{:assign date_debut=$date}}
{{:assign status=$status}}
{{/load}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{if $status == 'ignored'}}
{{if $info_immo.status == 'ignored'}}
{{:error message="Cette immobilisation ne doit pas être amortie"}}
{{/if}}
{{* chercher des écritures liées à l'immo courante au crédit du même compte
et déduire leur montant de celui de l'immo
*}}
{{:assign total_credits=0}}
{{#select
CASE links.id_related = :immo_trans_id
WHEN true THEN links.id_transaction
WHEN false THEN links.id_related
END as other_id,
line.credit
FROM acc_transactions AS trans
INNER JOIN acc_transactions_links as links
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_trans_id AND line.credit > 0 AND acc.code = :account;
:immo_trans_id=$ligne_immo.immo_trans_id
:account=$ligne_immo.account_code
}}
{{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
{{/select}}
{{:assign montant_amortissable="%d-%d"|math:$ligne_immo.montant:$total_credits}}
{{:assign solde=$montant_amortissable}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$ligne_immo.amount:$total_credits}}
{{:assign valeur_residuelle=$solde}}
{{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
{{#select
l_amort.credit as amort_amount,
l_amort.label as amort_line_label,
l_amort.id as amort_line_id,
CASE WHEN links.id_related = t_immo.id
THEN links.id_transaction
ELSE links.id_related
END as amort_trans_id,
trans.date as amort_date,
trans.label as amort_trans_label,
trans.id_year as amort_year,
account.id as account_id,
account.code as account_code,
account.label as account_label
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)
INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction
INNER join acc_transactions as trans on l_amort.id_transaction = trans.id
INNER join acc_accounts as account on l_amort.id_account = account.id
WHERE l_immo.id = :line_id AND account.code LIKE '28%'
ORDER BY trans.date;
:line_id = $_GET.immo_line_id|intval
assign="amort_line"
}}
{{* lister les lignes d'amortissement liées à la ligne d'immobilisation *}}
{{#load type="link"
where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id AND $$.amort_line_id = :amort_line_id"
assign="line"
:immo_line_id=$_GET.immo_line_id|intval
:amort_trans_id=$amort_line.amort_trans_id
:amort_line_id = $amort_line.amort_line_id
}}
{{:assign var="linked_amort." value=$amort_line}}
{{/load}}
{{if $date_debut == null}}
{{:assign date_debut=$amort_date}}
{{/if}}
{{/select}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort, created_amort"}}
{{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$total_amort}}
{{if $status == "amortized"}}
{{:assign amort_amount=$montant_amortissable}}
{{:assign valeur_residuelle=0}}
{{else}}
{{:assign valeur_residuelle=$montant_amortissable}}
{{#foreach from=$linked_amort}}
{{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}}
{{/foreach}}
{{if $valeur_residuelle > 0}}
{{* lister les amortissements non attachés à une immo *}}
{{:assign account_filter="28%"|quote_sql}}
{{:assign filter_condition="account.code LIKE "|cat:$account_filter}}
{{:include file="./_get_free_amort.html" filter_condition=$filter_condition keep="free_amort_lines"}}
{{/if}}
{{* Autres amortissements non rattachés *}}
{{:include file="_get_config.html" keep="module.config"}}
{{:assign filter_condition=" NOT ("}}
{{#foreach from=$module.config.filters item="filter"}}
{{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}}
{{:assign filter_condition=$filter_condition|cat:" trans.label LIKE "|cat:$filter|cat:" OR "}}
{{/foreach}}
{{:assign filter_condition=$filter_condition|cat:"0)"}}
{{:assign autres_amortissements=false}}
{{#select
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
INNER JOIN acc_years AS y ON y.id = trans.id_year
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
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 autres_amortissements=true}}
{{/if}}
{{else}}
{{:assign autres_amortissements=true}}
{{/select}}
{{/select}}
{{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}}
@ -195,21 +61,27 @@
subcurrent="%s"|args:$subcurrent
subsubcurrent="amortization"
type_immo=$_GET.type_immo
autres_amort=$autres_amortissements
autres_amort=$free_amort_lines
}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach"}}
{{:assign msg="Attachement écriture %s effectué"|args:$_GET.trans_id}}
{{elseif $_GET.msg|match:"detach"}}
{{:assign msg="Détachement écriture %s affectué"|args:$_GET.trans_id}}
{{if $_GET.msg|match:"attach_amort"}}
{{:assign msg="Attachement amortissement effectué"}}
{{elseif $_GET.msg|match:"detach_amort"}}
{{:assign msg="Détachement amortissement affectué"}}
{{elseif $_GET.msg|match:"attach_avoir"}}
{{:assign msg="Attachement avoir affectué"}}
{{elseif $_GET.msg|match:"detach_avoir"}}
{{:assign msg="Détachement avoir affectué"}}
{{elseif $_GET.msg|match:"amortissement"}}
{{:assign msg="Amortissement enregistré"}}
{{elseif $_GET.msg|match:"modif"}}
{{:assign msg="Modifications enregistrées"}}
{{/if}}
<p class="block confirm">{{$msg}}</p>
{{elseif $_GET.err}}
{{if $_GET.msg|match:"attach"}}
{{:assign msg="Échec attachement"}}
{{:assign msg="Échec attachement amortissement"}}
{{elseif $_GET.msg|match:"amortissement"}}
{{:assign msg="Échec enregistrement amortissement"}}
{{/if}}
@ -222,28 +94,47 @@
<p class="submit">
{{:linkbutton
label="Sortir du bilan"
href="balance_sheet_exit.html?immo_line_id=%s&type_immo=%s"|args:$_GET.immo_line_id:$_GET.type_immo
href="balance_sheet_exit.html?immo_doc_id=%s&type_immo=%s"|args:$_GET.immo_doc_id:$_GET.type_immo
shape="export"
class="main"
}}
</p>
<p class="help">
Il sera possible de choisir la date de sortie, d'indiquer
le montant de la cession le cas échéant et de modifier les
comptes associés.
Il sera possible de choisir la date de sortie et d'indiquer
le montant de la cession le cas échéant.
</p>
</fieldset>
</form>
<h3 class="ruler">Immobilisation</h3>
<nav class="actions">
{{if $total_amort == 0}}
{{:linkbutton label="Modifier les paramètres" href="modify_infos.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="edit" target="_dialog"}}
{{if ! $info_immo.created}}
{{:linkbutton label="Supprimer les paramètres" href="delete_infos.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="delete" target="_dialog"}}
{{/if}}
{{/if}}
</nav>
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.immo_trans_id}}</a></span> {{$ligne_immo.label}}{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $ligne_immo.label}} — {{$ligne_immo.line_label}}{{/if}}</dd>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}</dd>
<dt>Début d'amortissement</dt>
<dd>{{$date_debut|date_short}}</dd>
{{if $duree != null}}
{{if $info_immo.duration != null}}
<dt>Durée</dt>
<dd>{{$duree}} ans</dd>
<dd>{{$info_immo.duration}} ans</dd>
{{/if}}
<dt>Montant de l'immobilisation</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.amount|money_currency_html:false|raw}}</dd>
{{if $total_credits > 0}}
<dt>Montant des avoirs</dt>
<dd class="money">{{"%f"|math:$total_credits|money_currency_html:false|raw}}</dd>
<dt>Montant à amortir</dt>
<dd class="money strong">{{"%f"|math:$solde|money_currency_html:false|raw}}</dd>
{{/if}}
<dt>Montant de l'immobilisation</dt>
<dd class="money">{{"%f"|math:$ligne_immo.montant|money_currency_html:false|raw}}</dd>
@ -255,18 +146,70 @@
{{/if}}
{{if $valeur_residuelle > 0}}
<dt>Montant des amortissements</dt>
<dd>{{"%d-%d"|math:$montant_amortissable:$valeur_residuelle|money_currency_html:false|raw}}</dd>
<dt>Valeur nette comptable</dt>
<dd>{{$total_amort|money_currency_html:false|raw}}</dd>
<dt>Valeur nette résiduelle</dt>
<dd>{{$valeur_residuelle|money_currency_html:false|raw}}</dd>
{{/if}}
{{if $duree != null && $valeur_residuelle > 0}}
{{if $info_immo.duration != null && $valeur_residuelle > 0}}
<dt>Annuité estimée</dt>
<dd>{{"min(%d, %f/%d)"|math:$valeur_residuelle:$montant_amortissable:$duree|money_currency_html:false|raw}}</dd>
<dd>{{"min(%d, %f/%d)"|math:$valeur_residuelle:$solde:$info_immo.duration|money_currency_html:false|raw}}</dd>
{{/if}}
</dl>
</div>
<h3 class="ruler">Amortissements enregistrés</h3>
<h3 class="ruler">Avoirs</h3>
<nav class="actions">
{{if $total_amort == 0}}
{{:linkbutton label="Attacher une écriture d'avoir" href="link_immo.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="link" target="_dialog"}}
{{/if}}
</nav>
{{if $linked_immos != null}}
<table class="list">
<thead>
<th class="num"></th>
<th>Date</th>
<th>Libellé</th>
<th class="nombre">Montant</th>
<th class="actions"></th>
</thead>
<tbody>
{{#foreach from=$linked_immos item="line"}}
{{:assign url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
<tr>
<td class="num"><a href="{{$url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>{{$line.label}}</td>
<td class="money">{{"%f"|math:$line.amount|money_currency_html:false|raw}}</td>
<td>
{{if $total_amort == 0}}
{{:linkbutton label="Détacher" href="detach_credit.html?immo_doc_id=%s&credit_line_id=%s"|args:$_GET.immo_doc_id:$line.credit_line_id shape="minus"}}
{{/if}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
{{/if}}
<h3 class="ruler">Amortissements</h3>
<nav class="actions">
{{if $free_amort_lines && ! $created_amort}}
{{:linkbutton
label="Attacher un amortissement"
title="Attacher un amortissement existant"
href="other_amortizations.html?immo_doc_id=%s&filter=true"|args:$_GET.immo_doc_id
shape="link"
target="_dialog"}}
{{/if}}
{{:linkbutton
label="Enregistrer un amortissement"
title="Enregistrer un nouvel amortissement"
href="save_amort.html?immo_doc_id=%s"|args:$_GET.immo_doc_id target="_dialog"
shape="plus"
}}
</nav>
{{if $linked_amort != null}}
<section class="amortissement">
<table class="list">
@ -274,55 +217,55 @@
<tr>
<th class="num"></th>
<th>Date</th>
<th>Libellé</th>
<th class="nombre">Montant</th>
<th class="nombre">Valeur nette</th>
<th>Libellé</th>
<th>N° compte</th>
<th>Compte</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{#foreach from=$linked_amort item="line"}}
{{#foreach from=$linked_amort|ksort 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}}
{{:assign solde="%f-%d"|math:$solde:$line.amort_amount}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}}
{{:assign solde="%f-%d"|math:$solde:$line.amount}}
<tr>
<td class="num"><a href="{{$trans_url}}">#{{$line.amort_trans_id}}</a></td>
<td>{{$line.amort_date|date_short}}</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="num"><a href="{{$trans_url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>
{{$line.amort_trans_label}}
{{if $line.amort_line_label != null && $line.amort_line_label != $line.amort_trans_label}}
— {{$line.amort_line_label}}
{{$line.trans_label}}
{{if $line.line_label != null && $line.line_label != $line.trans_label}}
— {{$line.line_label}}
{{/if}}
</td>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</td>
<td class="money">{{"%f"|math:$solde|money_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td>
{{:linkbutton label="Détacher" href="detach_amort.html?amort_line_id=%d&immo_line_id=%d"|args:$line.amort_line_id:$ligne_immo.immo_line_id shape="minus"}}
{{if ! $created_amort}}
{{:linkbutton label="Détacher" href="detach_amort.html?immo_doc_id=%s&amort_line_id=%s"|args:$_GET.immo_doc_id:$line.line_id shape="minus"}}
{{/if}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
</section>
{{else}}
<p class="block alert">Aucun amortissement enregistré pour cette immobilisation</p>
{{/if}}
{{if $_GET.type_immo == null || $_GET.type_immo != "amortized"}}
{{* Autres amortissements non rattachés *}}
{{if $autres_amortissements}}
<p class="block alert">
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.
</p>
{{/if}}
{{if $free_amort_lines && ! $created_amort}}
<p class="block alert">
Il y a des écritures d'amortissement qui ne sont pas attachées à une immobilisation ! <br />
Utilisez le bouton « Attacher un amortissement » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
</p>
{{/if}}
{{if $linked_amort == null}}
<p class="block alert">Aucun amortissement enregistré pour cette immobilisation ; utilisez le bouton « Enregistrer un amortissement » pour enregistrer un nouvel amortissement</p>
{{/if}}
{{:form_errors}}
{{:admin_footer}}