Compare commits

..

1 commit

Author SHA1 Message Date
Jean-Christophe Engel
bb7cbc9d3b Classification des immobilisations par lot 2025-07-01 13:21:07 +02:00
31 changed files with 806 additions and 2646 deletions

View file

@ -1,36 +1,92 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{* Liste des immobilisations sorties du bilan *}} {{* Liste des immobilisations archivées *}}
<p class="help">
Cette page liste les immobilisations sorties du bilan {{* Immobilisation archivées prises en charge *}}
</p> {{#load type="immo" where="$$.status = 'archived'"}}
{{:assign var="lines." value="'%s'"|args:$line}}
{{/load}}
{{:assign lines=$lines|implode:","}}
{{:assign lines="("|cat:$lines|cat:")"}}
{{:assign condition="line.id IN %s"|args:$lines}}
{{#select
trans.id as trans_id,
trans.label as trans_label,
trans.date as trans_date,
line.id as immo_id,
account.id as account_id,
account.code as account_code,
account.label as account_label,
line.debit AS debit,
project.label as project_label,
trans.id_year as trans_id_year
FROM acc_transactions AS trans
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_years AS years ON trans.id_year = years.id
LEFT JOIN acc_projects AS project ON line.id_project = project.id
WHERE !condition
ORDER BY trans.date DESC;
!condition=$condition
assign="immo_archivee"
}}
{{:assign var="immo_archivees.%s"|args:$trans_id value=$immo_archivee}}
{{/select}}
{{* Immobilisation avec une écriture de sortie de bilan *}} {{* Immobilisation avec une écriture de sortie de bilan *}}
{{:include file="_get_config.html" keep="module.config"}} {{:read file="./defaut.json" assign="config_json"}}
{{:assign config_defaut=$config_json|json_decode}}
{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
{{* lister les immobilisations *}} {{:assign condition="("}}
{{:assign account_condition="("}} {{#foreach from=$prefix_array 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 condition=$condition|cat:"account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}} {{:assign condition=$condition|cat:"0)"}}
{{:assign cond2=$condition|replace:"account.":"acc2."}}
{{:assign condition=$condition|cat:" AND "|cat:$cond2}}
{{:assign condition=$condition|cat:" AND line.debit > 0 AND NOT (trans.status & 16)"}}
{{:assign filter_condition=" AND NOT ("}} {{#select
{{#foreach from=$module.config.filters item="filter"}} trans.id as trans_id,
{{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}} trans.label as trans_label,
{{:assign filter_condition=$filter_condition|cat:" trans_label LIKE "|cat:$filter|cat:" OR "}} trans.date as trans_date,
{{/foreach}} line.id as immo_id,
{{:assign filter_condition=$filter_condition|cat:"0)"}} account.id as account_id,
{{:assign condition=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"|cat:$filter_condition}} account.code as account_code,
account.label as account_label,
line.debit AS debit,
project.label as project_label,
trans.id_year as trans_id_year
FROM acc_transactions AS trans
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_years AS years ON trans.id_year = years.id
INNER JOIN acc_transactions_lines AS line2 ON line.debit = line2.credit
INNER JOIN acc_transactions AS trans2 ON trans2.id = line2.id_transaction
INNER JOIN acc_accounts AS acc2 ON acc2.id = line2.id_account
LEFT JOIN acc_projects AS project ON line.id_project = project.id
WHERE !condition
ORDER BY trans.date DESC;
!condition=$condition
assign="immo_archivee"
}}
{{if ! $trans_id|key_in:$immo_archivees}}
{{:assign var="immo_archivees.%s"|args:$trans_id value=$immo_archivee}}
{{/if}}
{{/select}}
<section class="immobilisation"> <section class="immobilisation">
<h2 class="ruler">Immobilisations archivées</h2>
{{:assign nb_immo=0}}
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
<th>Mise en service</th> <th>Date</th>
<th>Date sortie</th>
<th>Libellé</th> <th>Libellé</th>
<th class="nombre">Montant</th> <th class="nombre">Montant</th>
<th>N° compte</th> <th>N° compte</th>
@ -40,188 +96,23 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#foreach from=$immo_archivees}}
{{:assign nb_immo=0}}
{{:assign total_immo = 0}}
{{:assign total_cessions = 0}}
{{#select
trans.id as trans_id,
trans.label as trans_label,
trans.date as trans_date,
trans.id_year as trans_id_year,
line.id as immo_line_id,
line.label as line_label,
line.debit AS debit,
account.id as account_id,
account.code as account_code,
account.label as account_label,
project.label as project_label
FROM acc_transactions AS trans
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_years AS years ON trans.id_year = years.id
LEFT JOIN acc_projects AS project ON line.id_project = project.id
WHERE !condition
ORDER BY trans.date DESC;
!condition=$condition
}}
{{:assign montant_immo=$debit}}
{{* voir si l'immo est prise en charge *}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$immo_line_id|intval}}
{{:assign status=$status}}
{{else}}
{{:assign amortissable="nsp"}}
{{:assign status="unknown"}}
{{/load}}
{{if $status == "ignored"}}
{{:continue}}
{{/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 solde_immo=$montant_immo}}
{{:assign credit_immo=null}}
{{#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,
MAX(trans2.date) as exit_date
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
INNER JOIN acc_transactions AS trans2 ON trans2.id = other_id
WHERE trans.id = :immo_trans_id AND line.credit > 0 AND acc.code = :account
ORDER BY trans2.date, trans2.id
;
:immo_trans_id=$trans_id
:account=$account_code
assign="credit_immo."
}}
{{:assign solde_immo="%d-%d"|math:$solde_immo:$credit}}
{{:assign exit_date=$exit_date}}
{{/select}}
{{if $solde_immo == 0}}
{{:assign status="archived"}}
{{/if}}
{{if $status != "archived"}}
{{:continue}}
{{/if}}
{{:assign nb=$credit_immo|count}}
{{:assign nb="%d-1"|math:$nb}}
{{:assign var="last_credit" from="credit_immo.%d"|args:$nb}}
{{:assign montant_immo=$last_credit.credit}}
{{: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:$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 nb_immo="%d+1"|math:$nb_immo}} {{:assign nb_immo="%d+1"|math:$nb_immo}}
{{:assign total_immo="%d+%d"|math:$total_immo:$montant_immo}}
{{: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}}
{{* voir s'il y a une écriture de cession associée à cette immo *}}
{{#select
trans.id,
line.debit
FROM acc_transactions_links AS link
INNER JOIN acc_transactions AS trans ON (CASE
WHEN link.id_transaction = :trans_id THEN link.id_related
WHEN link.id_related = :trans_id THEN link.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 (link.id_transaction = :trans_id OR link.id_related = :trans_id) AND acc.code = 462
;
:trans_id = $trans_id
}}
{{:assign var="montant" from="montant_cessions.%d"|args:$account_code}}
{{:assign var="montant_cessions.%d"|args:$account_code value="%d+%d"|math:$montant:$debit}}
{{:assign total_cessions="%d+%d"|math:$total_cessions:$debit}}
{{/select}}
<tr> <tr>
<td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td> <td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td>
<td>{{$trans_date|date_short}}</td> <td>{{$trans_date|date_short}}</td>
<td>{{$exit_date|date_short}}</td> <td>{{$trans_label}}</td>
<td>{{$trans_label}}{{if $line_label != null && $line_label != $trans_label}} — {{$line_label}}{{/if}}</td> <td class="money">{{"%f"|math:$debit|money:false}}</td>
<td class="money">{{"%f"|math:$montant_immo|money_html:false|raw}}</td>
<td><a href={{$compte_url}}>{{$account_code}}</a></td> <td><a href={{$compte_url}}>{{$account_code}}</a></td>
<td>{{$account_label}}</td> <td>{{$account_label}}</td>
<td>{{$project_label}}</td> <td>{{$project_label}}</td>
<td class="actions"> <td class="actions">
</td> </td>
</tr> </tr>
{{/select}} {{/foreach}}
</tbody> </tbody>
<tfoot>
{{if $total_immo != 0}}
<tr>
<td colspan="9">
</tr>
{{#foreach from=$sommes_immo|ksort key="code" item="value"}}
<tr>
<td></td>
<td></td>
<td></td>
<td>Total du compte {{$code}}</td>
<td class="money">{{$value|money_html:false|raw}}</td>
<td></td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/foreach}}
<tr>
<td></td>
<td></td>
<td></td>
<td class="strong">Total des immobilisations</td>
<td class="money strong">{{$total_immo|money_html:false|raw}}</td>
<td></td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/if}}
{{if $total_cessions != 0}}
<tr>
<td colspan="9">
</tr>
{{#foreach from=$montant_cessions|ksort key="code" item="value"}}
<tr>
<td></td>
<td></td>
<td></td>
<td>Cessions du compte {{$code}}</td>
<td class="money">{{$value|money_html:false|raw}}</td>
<td></td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/foreach}}
<tr>
<td></td>
<td></td>
<td></td>
<td class="strong">Total des cessions</td>
<td class="money strong">{{$total_cessions|money_html:false|raw}}</td>
<td></td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/if}}
</tfoot>
</table> </table>
{{if $nb_immo == 0}} {{if $nb_immo == 0}}
<p class="block alert">Aucune immobilisation</p> <p class="block alert">Aucune immobilisation</p>

View file

@ -19,7 +19,7 @@
{{/foreach}} {{/foreach}}
{{:assign condition=$condition|cat:"0)"}} {{:assign condition=$condition|cat:"0)"}}
{{:assign account_code=$account|keys|value:0}} {{:assign account_code=$account|keys|key:0}}
{{#sql {{#sql
select="code" select="code"
tables="acc_accounts" tables="acc_accounts"

View file

@ -2,13 +2,9 @@
{{* {{*
déterminer le numéro du compte passé en paramètre dans un tableau déterminer le numéro du compte passé en paramètre dans un tableau
la clé est parfois l'identifiant du compte, parfois son code...
d'où l'obligation d'extraire le code de la valeur qui a toujours
la forme : code — libellé
*}} *}}
{{:assign values=$account|values}} {{:assign label=$account|values|key:0}}
{{:assign label=$values.0}}
{{:assign pos=$label|strpos:" "}} {{:assign pos=$label|strpos:" "}}
{{:assign account_code=$label|substr:0:$pos}} {{:assign account_code=$label|substr:0:$pos}}
{{:assign var="account_code.%s"|args:$account_code value=$label}} {{:assign var="account_code.%s"|args:$account_code value=$label}}

View file

@ -1,23 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Récupérer la config
*}}
{{* config par défaut *}}
{{:read file="./defaut.json" assign="config_defaut"}}
{{:assign config_defaut=$config_defaut|json_decode}}
{{if $module.config.prefixes == null}}
{{:assign var="module.config.prefixes" value=$config_defaut.prefixes}}
{{/if}}
{{if $module.config.unfinished == null}}
{{:assign var="module.config.unfinished" value=$config_defaut.unfinished}}
{{/if}}
{{*
{{if $module.config.tva == null}}
{{:assign var="module.config.tva" value=$config_defaut.tva}}
{{/if}}
*}}

View file

@ -1,258 +1,178 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{* Liste des immobilisations en cours d'amortissement ou amorties *}} {{* Liste des immobilisations en cours ou amorties *}}
{{:include file="_get_config.html" keep="module.config"}}
<section class="immobilisation"> <section class="immobilisation">
{{if $type_immo == "encours"}}
<p class="help"> <h2 class="ruler">Immobilisations en cours</h2>
{{if $type_immo == "managed"}} {{elseif $type_immo == "amortie"}}
Cette page liste les immobilisations en cours d'amortissement <h2 class="ruler">Immobilisations amorties</h2>
{{elseif $type_immo == "amortized"}}
Cette page liste les immobilisations dont l'amortissement est terminé
{{/if}} {{/if}}
</p> {{:assign nb_immo=0}}
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
<th class="num"></th> <th></th>
<th>Date</th> <th>Date</th>
<th>Libellé</th> <th>Libellé</th>
<th class="nombre">Montant</th> <th class="nombre">Montant</th>
<th class="nombre">Durée</th> <th class="nombre">Durée</th>
<th class="nombre">Amortissements</th>
<th class="nombre">Valeur nette</th>
<th>N° compte</th> <th>N° compte</th>
<th>Compte</th>
<th class="actions"></th> <th class="actions"></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{* vérifier l'existence de la table du module *}}
{{#load limit="1"}}
{{:assign table_presente=true}}
{{else}}
{{:assign table_presente=false}}
{{/load}}
{{if $table_presente}}
{{* lister les immobilisations *}} {{* lister les immobilisations *}}
{{:assign account_condition="("}} {{:read file="./defaut.json" assign="config_json"}}
{{#foreach from=$module.config.prefixes item="code"}} {{:assign config_defaut=$config_json|json_decode}}
{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
{{:assign condition="("}}
{{#foreach from=$prefix_array 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 condition=$condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}} {{:assign condition=$condition|cat:"0)"}}
{{:assign doc_condition="($$.status <> 'ignored' AND $$.status <> 'archived')"}} {{:assign condition=$condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"}}
{{: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 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 total_immo = 0}}
{{#select {{#select
trans.id as immo_trans_id, trans.id as 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_id,
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,
trans.id_year as trans_id_year, account.label as account_label,
$$.duration as duration, line.debit AS debit,
$$.status as status trans.id_year as trans_id_year
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:$immo_trans_id}} {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$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}}
{{* voir si l'immo est prise en charge *}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}}
{{:assign duration=$duration}} {{:assign duration=$duration}}
{{:assign montant_immo=$debit}} {{:assign status=$status}}
{{if $status == null}} {{else}}
{{:assign amortissable="nsp"}}
{{:assign status="unknown"}} {{:assign status="unknown"}}
{{/if}} {{/load}}
{{if $status == "ignored"}}
{{* 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
*}}
{{#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=$immo_trans_id
:account=$account_code
}}
{{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}}
{{/select}}
{{* Immobilisation soldée ? *}}
{{* TODO marquer archivée *}}
{{if $montant_immo == 0}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
{{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}} {{* voir s'il existe une écriture qui solde l'immobilisation *}}
{{:assign amort_lines=null}} {{:assign ignore=false}}
{{#select {{#select
l_amort.credit as amount, line.id AS line,
line.id_transaction AS trans,
line.debit,
line.label,
line2.id AS line2,
line2.id_transaction AS trans2,
line2.credit,
line2.label
FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS acc ON acc.id = line.id_account
INNER JOIN acc_transactions_lines AS line2 ON line2.id_account = acc.id
WHERE
line.id = :line_id
AND line2.credit = line.debit;
:line_id = $immo_id|intval
}}
{{:assign ignore=true}}
{{:assign status="archived"}}
{{/select}}
{{if $status == "archived"}}
{{:continue}}
{{/if}}
{{* voir s'il existe des écritures d'amortissement associées *}}
{{#select
sum(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 (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_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 l_immo.id = :line_id AND l_amort.credit <> 0 AND account.code LIKE '28%'; WHERE
:line_id = $immo_line_id|intval l_immo.id = :line_id
assign="line" AND
l_amort.credit <> 0
AND
account.code LIKE '28%';
:line_id = $immo_id|intval
}} }}
{{:assign var="amort_lines.%d."|args:$amort_trans_id value=$line}} {{if $amort_amount == null}}
{{:assign exist_amort=false}}
{{:assign amort_amount=0}}
{{else}}
{{:assign amort_amount=$amort_amount}}
{{:assign exist_amort=true}}
{{/if}}
{{/select}} {{/select}}
{{:assign amort_amount=0}}
{{#foreach from=$amort_lines key="amort_trans_id" item="lines"}}
{{:assign nb=$lines|count}}
{{* lister les docs de liaison de l'écriture d'amortissement *}}
{{:assign links=null}}
{{#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 = $amort_trans_id
assign="links."
}}
{{/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}}
{{if $amort_amount == 0}}
{{:assign exist_amort=false}}
{{else}}
{{:assign exist_amort=true}}
{{:assign amort_amount=$amort_amount}}
{{/if}}
{{* classement par onglet *}} {{* classement par onglet *}}
{{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}} {{if $type_immo == "encours" && $amort_amount >= $debit}}{{:continue}}{{/if}}
{{if $type_immo == "encours" && $status == "amortized"}}{{:continue}}{{/if}}
{{if $status == "unknown" && ! $exist_amort}}{{:continue}}{{/if}} {{if $status == "unknown" && ! $exist_amort}}{{:continue}}{{/if}}
{{if $type_immo == "amortized" && $amort_amount < $montant_immo}}{{:continue}}{{/if}} {{* ?? *}} {{if $type_immo == "amortie" && $amort_amount < $debit && $status != "amortized"}}{{:continue}}{{/if}}
{{:assign nb_immo="%d+1"|math:$nb_immo}} {{:assign nb_immo="%d+1"|math:$nb_immo}}
{{:assign total_immo="%d+%d"|math:$total_immo:$montant_immo}}
{{: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}}
<tr> <tr>
<td class="num"><a href={{$trans_url}}>#{{$immo_trans_id}}</a></td> <td class="num"><a href={{$trans_url}}>#{{$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}}</td>
<td class="money">{{$montant_immo|money_html:false|raw}}</td> <td class="money">{{"%f"|math:$debit|money}}</td>
<td class="money">{{if $duration != null}}{{$duration}}{{/if}}</td> <td class="money">{{if $duration != null}}{{$duration}}{{/if}}</td>
<td class="money">{{$amort_amount|money_html:false|raw}}</td>
<td class="money">{{"%d-%d"|math:$montant_immo:$amort_amount|money_html:false|raw}}</td>
<td><a href={{$compte_url}}>{{$account_code}}</a></td> <td><a href={{$compte_url}}>{{$account_code}}</a></td>
<td>{{$account_label}}</td>
<td class="actions"> <td class="actions">
{{if ! $exist_amort || $status == "unknown"}} {{if ! $exist_amort}}
{{:linkbutton {{:linkbutton
label="Paramètres" label="Paramètres"
href="add_infos.html?immo_line_id=%s&type_immo=%s"|args:$immo_line_id:$type_immo href="add_infos.html?immo_id=%s&amort=1&op=modif&type_immo=%s"|args:$immo_id:$type_immo
shape="settings" shape="settings"
target="_dialog"
}}
{{elseif $status == "unknown"}}
{{:linkbutton
label="Paramètres"
href="add_infos.html?immo_id=%s&amort=1&op=new&type_immo=%s"|args:$immo_id:$type_immo
shape="settings"
target="_dialog"
}} }}
{{* target="_dialog"*}}
{{/if}} {{/if}}
{{:linkbutton {{:linkbutton
label="Amortissements" label="Amortissements"
href="amortization.html?immo_line_id=%s&type_immo=%s"|args:$immo_line_id:$type_immo href="amortization.html?immo_id=%s&type_immo=%s"|args:$immo_id:$type_immo
shape="table" shape="table"
}} }}
</td> </td>
</tr> </tr>
{{/select}} {{/select}}
</tbody> </tbody>
<tfoot>
{{if $total_immo != 0}}
<tr>
<td colspan="9">
</tr>
{{#foreach from=$sommes_immo|ksort key="code" item="value"}}
<tr>
<td></td>
<td></td>
<td>Total du compte {{$code}}</td>
<td class="money">{{$value|money_html:false|raw}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/foreach}}
<tr>
<td></td>
<td></td>
<td class="strong">Total des immobilisations</td>
<td class="money strong">{{$total_immo|money_html|raw}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/if}}
</tfoot>
{{/if}}
</table> </table>
{{if $nb_immo == 0 || ! $table_presente}} {{if $nb_immo == 0}}
<p class="block alert">Aucune immobilisation</p> <p class="block alert">Aucune immobilisation</p>
{{/if}} {{/if}}
</section> </section>

View file

@ -2,42 +2,19 @@
{{* 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">
<h2 class="ruler">Autres immobilisations</h2>
{{:assign nb_immo=0}}
<p class="help"> <form method="post" action="confirm_action.html?target=_dialog" target="_dialog">
Cette page liste les écritures pas (encore) prises en charge par le module et sans écriture d'amortissement associée.
</p>
{{:assign saved_hides=$module.config.hides}}
{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}}
{{if $_POST|count == 0}}
{{:assign unhide=$user_hides.unhide_other}}
{{else}}
{{if $_POST.unhide == null}}
{{:assign unhide=0}}
{{else}}
{{:assign unhide=1}}
{{/if}}
{{:assign var="user_hides.unhide_other" value=$unhide"}}
{{:assign var="saved_hides.%s"|args:$logged_user.id value=$user_hides}}
{{:save key="config" hides=$saved_hides}}
{{/if}}
{{if $unhide}}
{{:assign checked="checked"}}
{{/if}}
<form method="post" action="">
<fieldset>
{{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher toutes les écritures" }}
</fieldset>
</form>
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
<th class="num"></th> <td class="check">
<input type="checkbox" title="Tout cocher / décocher" id="f_all" />
<label for="f_all" title="Tout cocher / décocher"></label>
</td>
<th></th>
<th>Date</th> <th>Date</th>
<th>Libellé</th> <th>Libellé</th>
<th class="nombre">Montant</th> <th class="nombre">Montant</th>
@ -48,161 +25,148 @@
</thead> </thead>
<tbody> <tbody>
{{* vérifier l'existence de la table du module *}}
{{#load limit="1"}}
{{:assign columns="$$.duration as duration, $$.status as status,"}}
{{:assign table_join="LEFT JOIN !table AS info ON $$.line = line.id"}}
{{:assign doc_condition1="($$.status == 'ignored')"}}
{{:assign doc_condition2="$$.status IS NULL"}}
{{else}}
{{:assign columns=""}}
{{:assign table_join=""}}
{{:assign doc_condition1="0"}}
{{:assign doc_condition2="1"}}
{{/load}}
{{* lister les immobilisations *}} {{* lister les immobilisations *}}
{{:assign account_condition="("}} {{:read file="./defaut.json" assign="config_json"}}
{{#foreach from=$module.config.prefixes item="code"}} {{:assign config_defaut=$config_json|json_decode}}
{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
{{:assign condition="("}}
{{#foreach from=$prefix_array 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 condition=$condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}} {{:assign condition=$condition|cat:"0)"}}
{{:assign condition=$condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"}}
{{if $unhide == null}}
{{: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)"}}
{{else}}
{{:assign filter_condition="1"}}
{{/if}}
{{:assign filter_condition="("|cat:$doc_condition2|cat:" 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_condition1|cat:")"}}
{{:assign nb_immo=0}}
{{#select {{#select
trans.id as immo_trans_id, trans.id as 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_id,
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,
!columns line.debit AS debit,
trans.id_year as trans_id_year trans.id_year as trans_id_year
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
!table_join
WHERE !condition WHERE !condition
ORDER BY trans.date DESC; ORDER BY trans.date DESC;
!columns=$columns
!table_join=$table_join
!table=$module.table
!condition=$condition !condition=$condition
}} }}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$immo_trans_id}} {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$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}}
{{if $status == null}} {{* voir si l'immo est prise en charge *}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}}
{{:assign status=$status}}
{{else}}
{{:assign status="unknown"}} {{:assign status="unknown"}}
{{/if}} {{/load}}
{{if $unhide == null}}
{{if $status != "unknown"}} {{if $status != "unknown"}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
{{else}}
{{if $status != "ignored" && $status != "unknown"}}
{{:continue}}
{{/if}}
{{* vérifier si le libellé aurait pu être filtré *}}
{{#foreach from=$module.config.filters item="filter"}}
{{if $filter|strpos:$trans_label !== false}}
{{:assign status="ignored"}}
{{/if}}
{{/foreach}}
{{/if}}
{{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}} {{* voir s'il existe des écritures d'amortissement associées *}}
{{:assign amort_lines=null}}
{{#select {{#select
l_amort.credit as amort_amount, sum(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 (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_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 l_immo.id = :line_id AND l_amort.credit <> 0 AND account.code LIKE '28%'; WHERE
:line_id = $immo_line_id|intval l_immo.id = :line_id
assign="amort_lines." AND
l_amort.credit <> 0
AND
account.code LIKE '28%';
:line_id = $immo_id|intval
}} }}
{{/select}} {{if $status == "unknown" && $amort_amount != null}}
{{:assign amort_amount=0}} {{:assign ignore=true}}
{{#foreach from=$amort_lines item="line"}}
{{* voir s'il existe un doc associé à l'écriture d'amortissement *}}
{{#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 = $immo_line_id
:amort_trans_id = $line.amort_trans_id
:amort_line_id = $line.amort_line_id
}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
{{else}} {{else}}
{{* TODO À VÉRIFIER (cas multi-lignes) *}} {{:assign ignore=false}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}} {{/if}}
{{/load}} {{/select}}
{{/foreach}}
{{if $amort_amount != 0}} {{if $ignore}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
{{:assign nb_immo="%d+1"|math:$nb_immo}} {{:assign nb_immo="%d+1"|math:$nb_immo}}
<tr {{if $status == "ignored"}}class="ignored"{{/if}}>
<td class="num"><a href={{$trans_url}}>#{{$immo_trans_id}}</a></td> <tr>
<td>
{{:input type="checkbox" name="check[%s]"|args:$immo_id value=$immo_id default=0}}
<input type="hidden" name="label[{{$immo_id}}]" value="{{$trans_label}}">
<input type="hidden" name="trans[{{$immo_id}}]" value="{{$trans_id}}">
</td>
<td class="num"><a href={{$trans_url}}>#{{$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}}</td>
<td class="money">{{"%f"|math:$debit|money_html:false|raw}}</td> <td class="money">{{"%f"|math:$debit|money:false}}</td>
<td><a href={{$compte_url}}>{{$account_code}}</a></td> <td><a href={{$compte_url}}>{{$account_code}}</a></td>
<td>{{$account_label}}</td> <td>{{$account_label}}</td>
<td class="actions"> <td class="actions">
{{if $status == "unknown"}}
{{:linkbutton {{:linkbutton
label="Paramètres" label="Paramètres"
href="add_infos.html?immo_line_id=%s&type_immo=other"|args:$immo_line_id href="add_infos.html?immo_id=%s&amort=0&op=new&type_immo=autre"|args:$immo_id
shape="settings" shape="settings"
target="_dialog" target="_dialog"
}} }}
{{else}}
{{:linkbutton
label="Paramètres"
href="add_infos.html?immo_id=%s&amort=0&op=modif&type_immo=autre"|args:$immo_id
shape="settings"
target="_dialog"
}}
{{/if}}
{{:linkbutton
label="Amortissements"
href="amortization.html?immo_id=%s&type_immo=autre"|args:$immo_id
shape="table"
}}
</td> </td>
</tr> </tr>
{{/select}} {{/select}}
</tbody> </tbody>
{{:assign var="actions.amortize" value="Marquer l'immobilisation amortie"}}
{{:assign var="actions.ignore" value="Ignorer l'écriture"}}
<tfoot>
<tr>
<td class="check"><input type="checkbox" value="Tout cocher / décocher" id="f_all2" />
<label for="f_all2"></label>
</td>
<td class="actions" colspan="10">
<em>Pour les écritures cochées :</em>
{{*
<input type="hidden" name="from" value="{$self_url}" />
<input type="hidden" name="year" value="{$year.id}" />
{csrf_field key="projects_action"}
*}}
{{:input type="select" name="actions" options=$actions default_empty="— Choisir une action à effectuer —"}}
</td>
</tr>
</tfoot>
</table> </table>
</form>
{{if $nb_immo == 0}} {{if $nb_immo == 0}}
<p class="block alert">Aucune immobilisation</p> <p class="block alert">Aucune immobilisation</p>
{{/if}} {{/if}}
</section> </section>
<script type="text/javascript">
function changeVisibility(evt, idcheck = 'f_unhide_1') {
this.form.dispatchEvent(new Event('submit'));
this.form.submit();
}
(function () {
document.getElementById('f_unhide_1').onclick = changeVisibility;
})();
</script>

View file

@ -1,45 +1,36 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
<nav class="tabs"> <nav class="tabs">
{{if $current == "index" && $subsubcurrent == null}} {{if $current == 'index' && $subsubcurrent == null}}
<aside> <aside>
{{:linkbutton label="Ajouter une immobilisation" shape="plus" href="add_asset.html"}} {{:linkbutton label="Ajouter une immobilisation" shape="plus" href="add_asset.html" target="_dialog"}}
</aside> </aside>
{{elseif $subsubcurrent == "amortization" && $type_immo == null || $type_immo == "managed" || $type_immo == "other"}} {{elseif $subsubcurrent == "amortization" && $type_immo == null || $type_immo == "encours" || $type_immo == "autre"}}
<aside> <aside>
{{if $autres_amort}} {{if $autres_amort != null}}
{{:linkbutton label="Rattacher une écriture" href="other_amortizations.html?immo_line_id=%s"|args:$_GET.immo_line_id shape="link" target="_dialog"}} {{:linkbutton label="Attacher un amortissement" href="other_amortizations.html?immo_id=%s"|args:$_GET.immo_id shape="plus" target="_dialog"}}
{{/if}} {{/if}}
{{:linkbutton label="Enregistrer un amortissement" shape="plus" {{:linkbutton label="Enregistrer un amortissement" shape="plus"
href="save_amort.html?immo_line_id=%s"|args:$_GET.immo_line_id}} href="save_amort.html?immo_id=%s"|args:$_GET.immo_id target="_dialog"}}
</aside> </aside>
{{/if}} {{/if}}
{{if $current == 'index'}} {{* && $subsubcurrent != 'balance_exit' *}}
<ul> <ul>
<li {{if $subcurrent == "managed"}}class="current"{{/if}}><a href="index.html?type_immo=managed">Amortissables</a></li> <li {{if $subcurrent == 'encours'}}class="current"{{/if}}><a href="index.html?type_immo=encours">En cours</a></li>
<li {{if $subcurrent == "amortized"}}class="current"{{/if}}><a href="index.html?type_immo=amortized">Amorties</a></li> <li {{if $subcurrent == 'amortie'}}class="current"{{/if}}><a href="index.html?type_immo=amortie">Amorties</a></li>
<li {{if $subcurrent == "archived"}}class="current"{{/if}}><a href="index.html?type_immo=archived">Sorties du bilan</a></li> <li {{if $subcurrent == 'sortie'}}class="current"{{/if}}><a href="index.html?type_immo=sortie">Sorties du bilan</a></li>
<li {{if $subcurrent == "unfinished"}}class="current"{{/if}}><a href="index.html?type_immo=unfinished">En cours</a></li> <li {{if $subcurrent == 'autre'}}class="current"{{/if}}><a href="index.html?type_immo=autre">Autres</a></li>
<li {{if $subcurrent == "other"}}class="current"{{/if}}><a href="index.html?type_immo=other">Autres</a></li>
<li {{if $current == "config"}} class="current"{{/if}}><a href="config.html">Configuration</a></li>
</ul>
{{if $subsubcurrent != null}}
<ul class="sub">
{{if $subsubcurrent == "amortization"}}
<li class="title strong">Amortissements</li>
{{elseif $subsubcurrent == "balance_exit"}}
<li class="title strong">Sortie de bilan</li>
{{elseif $subsubcurrent == "transfer"}}
<li class="title strong">Transfert d'immobilisations</li>
{{/if}}
</ul> </ul>
{{/if}} {{/if}}
{{if $current == "config"}} {{if $subsubcurrent == 'amortization'}}
<ul class="sub"> <ul class="sub">
<li {{if $subcurrent == null}} class="current"{{/if}}><a href="config.html">Comptes d'immobilisation</a></li> <li class="title"><strong>Amortissements</strong></li>
<li {{if $subcurrent == "filters"}} class="current"{{/if}}><a href="filters.html">Filtres de libellés</a></li> </ul>
{{elseif $subsubcurrent == 'balance_exit'}}
<ul class="sub">
<li class="title"><strong>Sortie de bilan</strong></li>
</ul> </ul>
{{/if}} {{/if}}
</nav> </nav>

View file

@ -1,226 +0,0 @@
{{* -*- brindille -*- *}}
{{* Liste des immobilisations en cours de constitution *}}
<section class="immobilisation">
<p class="help">
Cette page liste les immobilisations en cours de constitution, donc non amortissables
</p>
{{:include file="_get_config.html" keep="module.config"}}
{{:assign saved_hides=$module.config.hides}}
{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}}
{{if $_POST|count == 0}}
{{:assign unhide=$user_hides.unhide_unfinished}}
{{else}}
{{if $_POST.unhide == null}}
{{:assign unhide=0}}
{{else}}
{{:assign unhide=1}}
{{/if}}
{{:assign var="user_hides.unhide_unfinished" value=$unhide"}}
{{:assign var="saved_hides.%s"|args:$logged_user.id value=$user_hides}}
{{:save key="config" hides=$saved_hides}}
{{/if}}
{{if $unhide}}
{{:assign checked="checked"}}
{{/if}}
<form method="post" action="">
<fieldset class="shortFormLeft">
<legend>Transférer une ou plusieurs lignes vers une immobilisation amortissable</legend>
<p class="help">
Cocher les lignes concernées
</p>
<div class="shortFormRight informations" id="total_amount">
<legend>Montants sélectionnés</legend>
<table class="montant">
<tbody>
</tbody>
<tfoot>
</tfoot>
</table>
</div>
<div>
<p class="submit">
{{:linkbutton
label="Transférer"
href="transfer.html?trans="
shape="right"
id="transfer"
}}
</p>
</div>
</fieldset>
<fieldset>
{{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher toutes les écritures" }}
</fieldset>
</form>
<table class="list">
<thead>
<tr>
<th class="check"></th>
<th class="num"></th>
<th>Date</th>
<th>Libellé</th>
<th class="nombre">Montant</th>
<th>N° compte</th>
<th>Compte</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{* lister les immobilisations en cours de constitution *}}
{{:assign accounts_condition="("}}
{{#foreach from=$module.config.unfinished item="elem"}}
{{if $elem.code != null}}
{{:assign code=$elem.code}}
{{else}}
{{:assign code=$elem}}
{{/if}}
{{:assign code=$code|cat:"%"|quote_sql}}
{{:assign accounts_condition=$accounts_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign accounts_condition=$accounts_condition|cat:"0)"}}
{{:assign condition=$accounts_condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"}}
{{: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 condition=$condition|cat:" AND "|cat:$filter_condition}}
{{:assign nb_immo=0}}
{{:assign total_immo = 0}}
{{#select
trans.id as trans_id,
trans.label as trans_label,
trans.date as trans_date,
line.id as immo_line_id,
account.id as account_id,
account.code as account_code,
account.label as account_label,
sum(line.debit) AS debit,
trans.id_year as trans_id_year
FROM acc_transactions AS trans
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_years AS years ON trans.id_year = years.id
WHERE !condition
GROUP BY trans.id
ORDER BY trans.date DESC;
!condition=$condition
}}
{{* voir si l'écriture a été marquée ignorée *}}
{{:assign ignore=false}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id AND $$.status = 'ignored'" :line_id=$immo_line_id|intval}}
{{:assign ignore=true}}
{{/load}}
{{if $ignore && $unhide == null}}
{{:continue}}
{{/if}}
{{* voir s'il existe une écriture qui solde l'immobilisation *}}
{{#select
count(*) AS count
FROM acc_transactions AS trans
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
WHERE line.credit = :amount AND code = :account_code
;
:amount = $debit
:account_code = $account_code
}}
{{:assign count=$count}}
{{/select}}
{{* S'il y a plus d'une écriture de même montant on ne peut pas décider *}}
{{if $count == 1}}
{{:continue}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}}
{{:assign nb_immo="%d+1"|math:$nb_immo}}
{{:assign total_immo="%d+%d"|math:$total_immo:$debit}}
{{:assign var="montant" from="sommes_immo.%s"|args:$account_code}}
{{:assign var="sommes_immo.%s"|args:$account_code value="%d+%d"|math:$montant:$debit}}
<tr {{if $ignore}}class="checked"{{/if}}>
<td class="check">{{:input type="checkbox" name="selected[]" value=$trans_id}}</td>
<td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td>
<td>{{$trans_date|date_short}}</td>
<td>{{$trans_label}}</td>
<td class="money">{{"%f"|math:$debit|money_html:false|raw}}</td>
<td class="account_code"><a href={{$compte_url}}>{{$account_code}}</a></td>
<td>{{$account_label}}</td>
<td class="actions">
{{:linkbutton
label="Modifier"
href="ignore.html?immo_line_id=%s"|args:$immo_line_id
shape="edit"
target="_dialog"
}}
</td>
</tr>
{{/select}}
</tbody>
<tfoot>
{{if $total_immo != 0}}
{{#foreach from=$sommes_immo|ksort key="code" item="value"}}
<tr>
<td></td>
<td></td>
<td></td>
<td>Total du compte {{$code}}</td>
<td class="money">{{$value|money_html|raw}}</td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/foreach}}
<tr>
<td></td>
<td></td>
<td></td>
<td class="strong">Total des immobilisations</td>
<td class="money strong">{{$total_immo|money_html|raw}}</td>
<td></td>
<td></td>
<td class="actions"></td>
</tr>
{{/if}}
</tfoot>
</table>
{{if $nb_immo == 0}}
<p class="block alert">Aucune immobilisation</p>
{{/if}}
</section>
<script type="text/javascript" src="scripts.js"></script>
<script type="text/javascript" async="async">
let lines = document.querySelectorAll('.list tbody tr');
for (const line of lines) {
let button = line.querySelector('input[type=checkbox]');
button.onchange = () => {
computeTotal('total_amount', 'transfer');
};
}
function changeVisibility(evt, idcheck = 'f_unhide_1') {
this.form.dispatchEvent(new Event('submit'));
this.form.submit();
}
(function () {
document.getElementById('f_unhide_1').onclick = changeVisibility;
})();
</script>

View file

@ -1,5 +1,5 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{:admin_header title="Ajout immobilisation" current="module_amortization"}} {{:admin_header title="Ajout immobilisation" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}

View file

@ -1,6 +1,8 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{:include file="_get_config.html" keep="module.config"}} {{:read file="./defaut.json" assign="config_json"}}
{{:assign config_defaut=$config_json|json_decode}}
{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
{{#years closed=false order="start_date" assign=years.}} {{#years closed=false order="start_date" assign=years.}}
{{:assign ts_debut=$start_date|strtotime}} {{:assign ts_debut=$start_date|strtotime}}
@ -12,8 +14,6 @@
{{if $ts_debut <= $now && $now <= $ts_fin}} {{if $ts_debut <= $now && $now <= $ts_fin}}
{{:assign selected_year=$id}} {{:assign selected_year=$id}}
{{/if}} {{/if}}
{{else}}
{{:error message="Aucun exercice ouvert"}}
{{/years}} {{/years}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
@ -34,6 +34,23 @@
{{:error message="La date saisie n'est pas dans l'exercice choisi !"}} {{:error message="La date saisie n'est pas dans l'exercice choisi !"}}
{{/if}} {{/if}}
{{if ! $_POST.amortir}}
{{* ne pas amortir *}}
{{:assign duration=0}}
{{:assign date_debut=$_POST.date_achat|parse_date}}
{{:assign status="ignored"}}
{{else}}
{{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}}
{{:assign date_debut=$_POST.date_mes|or:$_POST.date_achat|parse_date}}
{{if $date_debut|strtotime < $_POST.date_achat|parse_date|strtotime}}
{{:assign dd=$date_debut|date_short}}
{{:assign da=$_POST.date_achat|date_short}}
{{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}}
{{/if}}
{{:assign duration=$_POST.duree|intval}}
{{:assign status="managed"}}
{{/if}}
{{* déterminer le numéro des comptes au cas où la clé serait un identifiant *}} {{* déterminer le numéro des comptes au cas où la clé serait un identifiant *}}
{{:include {{:include
file="_get_codes.html" file="_get_codes.html"
@ -53,18 +70,6 @@
- est présent dans le PC de l'exercice correspondant à la date - est présent dans le PC de l'exercice correspondant à la date
*}} *}}
{{#foreach from=$module.config.prefixes item="code"}}
{{:assign var="prefix_array." value=$code}}
{{/foreach}}
{{#foreach from=$module.config.unfinished item="elem"}}
{{if $elem.code != null}}
{{:assign code=$elem.code}}
{{else}}
{{:assign code=$elem}}
{{/if}}
{{:assign var="prefix_array." value=$code}}
{{/foreach}}
{{:include {{:include
file="_check_account.html" file="_check_account.html"
account=$debit_account account=$debit_account
@ -75,39 +80,7 @@
{{if $account_ok == null}} {{if $account_ok == null}}
{{:assign compte=$debit_account|implode:""}} {{:assign compte=$debit_account|implode:""}}
{{:redirect url="add_account.html?account=%s&chart=%s&immo_line_id=%s"|args:$compte:$selected_chart:$_GET.immo_line_id}} {{:error message="Le compte « %s » n'est pas un compte d'immobilisation ou n'est pas dans le plan comptable de l'exercice choisi"|args:$compte}}
{{/if}}
{{:assign debit_account=$debit_account|keys|value:0}}
{{:assign credit_account=$credit_account|keys|value:0}}
{{* déterminer si le compte d'immo est un compte d'immo en cours *}}
{{#foreach from=$module.config.unfinished item="elem"}}
{{if $elem.code != null}}
{{:assign code=$elem.code}}
{{else}}
{{:assign code=$elem}}
{{/if}}
{{if $debit_account|strpos:$code === 0}}
{{:assign status="unfinished"}}
{{/if}}
{{/foreach}}
{{if $status != "unfinished" && ! $_POST.amortir}}
{{* ne pas amortir *}}
{{:assign duration=0}}
{{:assign date_debut=$_POST.date_achat|parse_date}}
{{:assign status="ignored"}}
{{elseif $status != "unfinished"}}
{{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}}
{{:assign date_debut=$_POST.date_mes|or:$_POST.date_achat|parse_date}}
{{if $date_debut|strtotime < $_POST.date_achat|parse_date|strtotime}}
{{:assign dd=$date_debut|date_short}}
{{:assign da=$_POST.date_achat|date_short}}
{{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}}
{{/if}}
{{:assign duration=$_POST.duree|intval}}
{{:assign status="managed"}}
{{/if}} {{/if}}
{{* enregistrer l'écriture *}} {{* enregistrer l'écriture *}}
@ -120,15 +93,14 @@
date=$_POST.date_achat date=$_POST.date_achat
label=$_POST.designation label=$_POST.designation
amount=$_POST.montant amount=$_POST.montant
debit=$debit_account debit=$debit_account|keys|key:0
credit=$credit_account credit=$credit_account|keys|key:0
id_project=$_POST.id_project id_project=$_POST.id_project
}} }}
{{if $status != "unfinished"}}
{{* vérifier s'il y a déjà un document avec le même numéro de ligne *}} {{* vérifier s'il y a déjà un document avec le même numéro de ligne *}}
{{:assign var="immo_line_id" value=$result.lines.1.id}} {{:assign var="immo_id" value=$result.lines.1.id}}
{{#load where="$$.line = :line_id" :line_id=$immo_line_id}} {{#load where="$$.line = :line_id" :line_id=$immo_id}}
{{:assign key=$key}} {{:assign key=$key}}
{{else}} {{else}}
{{:assign key=""|uuid}} {{:assign key=""|uuid}}
@ -139,50 +111,39 @@
key=$key key=$key
validate_schema="schema.json" validate_schema="schema.json"
type="immo" type="immo"
line=$immo_line_id line=$immo_id
duration=$duration duration=$duration
date=$date_debut date=$date_debut
status=$status status=$status
}} }}
{{/if}} {{if $_POST.amortir}}
{{:assign type_immo="encours"}}
{{if $status == "unfinished"}}
{{:assign type_immo="unfinished"}}
{{elseif $_POST.amortir}}
{{:assign type_immo="managed"}}
{{else}} {{else}}
{{:assign type_immo="other"}} {{:assign type_immo="autre"}}
{{/if}} {{/if}}
{{:redirect force="index.html?ok=1&msg=immobilisation&type_immo=%s"|args:$type_immo}} {{:redirect force="index.html?ok=1&msg=immobilisation&type_immo=%s"|args:$type_immo}}
{{/form}} {{/form}}
{{:admin_header title="Ajout immobilisation" current="module_amortization"}} {{:admin_header title="Ajout immobilisation" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="index" subcurrent="managed"}} {{:include file="_nav.html" current="index"}}
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
{{* formulaire d'ajout d'immobilisation *}} {{* formulaire d'ajout d'immobilisation *}}
{{:assign var="immo_account.2" value="2 — Classe 2 — Comptes d'immobilisations"}}
{{#select id,label FROM acc_projects WHERE archived = 0;}} {{#select id,label FROM acc_projects WHERE archived = 0;}}
{{:assign var="projects.%d"|args:$id value=$label}} {{:assign var="projects.%d"|args:$id value=$label}}
{{/select}} {{/select}}
{{#foreach from=$module.config.prefixes item="code"}} {{#foreach from=$prefix_array item="code"}}
{{:assign var="pattern_array." value="%s*"|args:$code}} {{:assign var="pattern_array." value="%s*"|args:$code}}
{{/foreach}} {{/foreach}}
{{#foreach from=$module.config.unfinished item="elem"}} {{:assign patterns=$pattern_array|implode:"|"}}
{{if $elem.code != null}}
{{:assign code=$elem.code}}
{{else}}
{{:assign code=$elem}}
{{/if}}
{{:assign var="pattern_array." value="%s*"|args:$code}}
{{/foreach}}
{{:assign var="patterns" value=$pattern_array|implode:"|"}}
<div id="erreur" class="hidden"> <div id="erreur" class="hidden">
<p class="block error">La date choisie n'est dans aucun exercice ouvert !</p> <p class="block error">La date choisie n'est dans aucun exercice ouvert !</p>
@ -194,7 +155,7 @@
<dl> <dl>
{{:input type="select" name="id_year" label="Exercice" default=$selected_year required=true default_empty="— Faire un choix —" options=$open_years}} {{:input type="select" name="id_year" label="Exercice" default=$selected_year required=true default_empty="— Faire un choix —" options=$open_years}}
{{:input type="date" name="date_achat" label="Date d'acquisition" required=true default=$now|date_short}} {{:input type="date" name="date_achat" label="Date d'acquisition" required=true default=$now|date_short}}
{{:input type="text" name="designation" label="Libellé" required=true}} {{:input type="text" name="designation" label="Désignation" required=true}}
{{:input type="money" name="montant" label="Montant" required=true}} {{:input type="money" name="montant" label="Montant" required=true}}
{{:input {{:input
type="list" type="list"
@ -221,7 +182,7 @@
<fieldset> <fieldset>
<legend>Amortissement</legend> <legend>Amortissement</legend>
<dl> <dl>
{{:input id="amortir" type="checkbox" value=1 name="amortir" label="Amortir cette immobilisation sur une ou plusieurs années" checked="checked" help="Dé-cocher pour ne pas amortir"}} {{:input id="amortir" type="checkbox" value=1 name="amortir" label="Amortir cette immobilisation sur plusieurs années" checked="cheched" help="Dé-cocher pour ne pas amortir"}}
<div id="div_amort"> <div id="div_amort">
{{:input type="number" name="duree" label="Durée d'amortissement" required=true min=0 default=1 suffix="année(s)"}} {{:input type="number" name="duree" label="Durée d'amortissement" required=true min=0 default=1 suffix="année(s)"}}
{{:input type="date" name="date_mes" label="Date de mise en service" help="C'est la date de première utilisation ; à renseigner uniquement si différente de la date d'acquisition"}} {{:input type="date" name="date_mes" label="Date de mise en service" help="C'est la date de première utilisation ; à renseigner uniquement si différente de la date d'acquisition"}}

View file

@ -1,56 +1,35 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{* {{*
@param immo_line_id @param immo_id
@param type_immo : managed, amortized, archived, other @param amort = 1 si immo amortissable, 0 si non
@param op = new ou modif
@param type_immo : encours, amortie, sortie, autre
*}} *}}
{{* données de l'immobilisaion *}} {{if $_GET.op == "modif"}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}} {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{/load}} {{/load}}
{{#select {{/if}}
trans.id as immo_trans_id,
trans.label,
trans.date as date_achat,
line.debit as montant,
line.label as line_label,
acc.code
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.immo_line_id
assign=ligne_immo
}}
{{else}}
{{:error message="Aucune immobilisation trouvée"}}
{{/select}}
{{* 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,
acc.code
FROM acc_transactions_links as links
INNER JOIN acc_transactions_lines AS line on line.id_transaction = linked_id
INNER JOIN acc_accounts AS acc ON line.id_account = acc.id
WHERE (links.id_transaction = :immo_trans_id or links.id_related = :immo_trans_id)
AND line.credit > 0
;
:immo_trans_id = $ligne_immo.immo_trans_id
}}
{{:assign var="linked_transactions.%d."|args:$code value=$linked_id}}
{{/select}}
{{:assign var="immo_transactions" from="linked_transactions.%d"|args:$ligne_immo.code}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{:debug post=$_POST}}
{{if $_POST.classify == null}} {{if $_POST.classify == null}}
{{:error message="Vous devez choisir une action"}} {{:error message="Vous devez choisir une action"}}
{{/if}} {{/if}}
{{* chercher la date d'acquisition de l'immobilisation *}}
{{#select
trans.date as date_achat
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_id
assign=ligne_immo
}}
{{/select}}
{{if $_POST.classify == "ignored"}} {{if $_POST.classify == "ignored"}}
{{* ne pas amortir *}} {{* ne pas amortir *}}
{{:assign duration=0}} {{:assign duration=0}}
@ -64,21 +43,9 @@
{{:assign da=$ligne_immo.date_achat|date_short}} {{:assign da=$ligne_immo.date_achat|date_short}}
{{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}} {{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}}
{{/if}} {{/if}}
{{if $_POST.classify == "amortized"}} {{if $_POST.classify == "amortized"}}
{{if $info_immo.duration == null}}
{{:assign duration=0}} {{:assign duration=0}}
{{else}}
{{:assign duration=$info_immo.duration}}
{{/if}}
{{:assign status="amortized"}} {{:assign status="amortized"}}
{{elseif $_POST.classify == "archived"}}
{{if $info_immo.duration == null}}
{{:assign duration=0}}
{{else}}
{{:assign duration=$info_immo.duration}}
{{/if}}
{{:assign status="archived"}}
{{else}} {{else}}
{{:assign duration=$_POST.duree|intval}} {{:assign duration=$_POST.duree|intval}}
{{if $duration <= 0}} {{if $duration <= 0}}
@ -89,115 +56,70 @@
{{/if}} {{/if}}
{{* enregistrer les infos de l'immobilisation *}} {{* enregistrer les infos de l'immobilisation *}}
{{if $info_immo == null}} {{if $_GET.op == "new"}}
{{:assign key=""|uuid}} {{:assign key=""|uuid}}
{{else}} {{else}}
{{:assign key=$info_immo.key}} {{:assign key=$info_immo.key}}
{{/if}} {{/if}}
{{:debug duree=$duration date=$date_debut classif=$_POST.classify status=$status}}
{{:save {{:save
key=$key key=$key
validate_schema="schema.json" validate_schema="schema.json"
type="immo" type="immo"
line=$_GET.immo_line_id|intval line=$_GET.immo_id|intval
duration=$duration duration=$duration
date=$date_debut date=$date_debut
status=$status status=$status
}} }}
{{* copier les autres liaisons *}} {{if $_POST.classify == "managed"}}
{{#foreach from=$linked_transactions key="code" item="liaisons"}} {{:assign type_immo="encours"}}
{{if $code != $ligne_immo.code}} {{elseif $_POST.classify == "amortized"}}
{{:debug code=$code liaisons=$liaisons}} {{:assign type_immo="amortie"}}
{{#foreach from=$liaisons item="elem"}}
{{:assign var="new_transactions." value=$elem}}
{{/foreach}}
{{/if}}
{{/foreach}}
{{* nouvelles liaisons *}}
{{#foreach from=$_POST.transactions key="key" item="elem"}}
{{:assign var="new_transactions." value=$elem|intval}}
{{/foreach}}
{{* Enregistrer les liaisons *}}
{{if $new_transactions != null}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$ligne_immo.immo_trans_id
assign="result"
assign_code="result_code"
transactions=$new_transactions
}}
{{/if}}
{{if $_POST.classify == "managed" || $_POST.classify == "amortized"}}
{{:assign type_immo=$_POST.classify}}
{{elseif $_POST.classify == "ignored"}}
{{:assign type_immo="other"}}
{{else}} {{else}}
{{:assign type_immo=$_GET.type_immo}} {{:assign type_immo=$_GET.type_immo}}
{{/if}} {{/if}}
{{:redirect force="index.html?ok=1&msg=infos&type_immo=%s"|args:$type_immo}} {{:redirect force="index.html?ok=1&msg=infos&type_immo=%s"|args:$type_immo}}
{{/form}} {{else}}
{{:form_errors}} {{:form_errors}}
{{/form}}
{{:admin_header title="Classer l'immobilisation" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Renseigner informations amortissement" custom_css=$custom_css current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="parameter"}} {{:include file="_nav.html" current="index"}}
{{/if}} {{/if}}
{{:assign choix_defaut=$_GET.type_immo}} {{* renseigner ou modifier la date de mise en service et la durée d'amortissement *}}
{{if $_GET.amort == 0}}
{{:assign disabled=1}}
{{:assign default=""}}
{{else}}
{{:assign disabled=0}}
{{:assign default="managed"}}
{{/if}}
<form method="post" action="">
<fieldset id="infos_immo">
<legend></legend>
<dl>
<dt><label>Faites un choix</label> <b>(obligatoire)</b></dt>
{{:input type="radio" name="classify" value="managed" label="Amortir" help="Amortir cette immobilisation" default=$default onclick="toggleInputs('div_inputs','f_classify_managed', 'f_classify_amortized')"}}
{{:input type="radio" name="classify" value="amortized" label="Marquer amortie" help="Cette immobilisation sera classée parmi les immobilisations amorties" onclick="toggleInputs('div_inputs','f_classify_managed', 'f_classify_amortized')"}}
{{:input type="radio" name="classify" value="ignored" label="Ignorer l'écriture" help="Cette écriture n'apparaitra plus dans la liste des immobilisations" onclick="toggleInputs('div_inputs','f_classify_managed', 'f_classify_amortized')"}}
{{if $info_immo != null}} {{if $info_immo != null}}
{{:assign date_defaut=$info_immo.date}} {{:assign date_defaut=$info_immo.date}}
{{:assign duree_defaut=$info_immo.duration}} {{:assign duree_defaut=$info_immo.duration}}
{{:assign choix_defaut=$info_immo.status}}
{{else}} {{else}}
{{:assign duree_defaut=null}} {{:assign duree_defaut=null}}
{{/if}} {{/if}}
<div id="div_inputs">
{{* {{:input type="number" name="duree" label="Durée d'amortissement" default=$duree_defaut required=true min=1 disabled=$disabled}}
- classer l'immobilisation {{:input type="date" name="date_mes" label="Date de mise en service" default=$date_defaut disabled=$disabled help="à renseigner uniquement si différente de la date d'acquisition"}}
- renseigner ou modifier la date de mise en service, les écritures associées ou la durée d'amortissement
*}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.immo_trans_id}}
<h3 class="ruler">
Paramètres de l'immobilisation
<span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.immo_trans_id}}</a></span>
</h3>
<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>
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.montant|money_currency_html:false|raw}}</dd>
<dt>Date de l'écriture d'immobilisation</dt>
<dd>{{$ligne_immo.date_achat|date_short}}</dd>
</dl>
</div> </div>
<form method="post" action="">
<fieldset>
<legend>Classement</legend>
<dl id="classement_immo">
<dt><label>Faites un choix</label> <b>(obligatoire)</b></dt>
{{:input type="radio-btn" name="classify" value="managed" label="Immobilisation à amortir" help="Cette immobilisation sera classée parmi les immobilisations amortissables" default=$choix_defaut}}
{{:input type="radio-btn" name="classify" value="amortized" label="Amortissement terminé" help="Cette immobilisation sera classée parmi les immobilisations amorties" default=$choix_defaut}}
{{:input type="radio-btn" name="classify" value="archived" label="Immobilisation sortie du bilan" help="Cette immobilisation sera classée parmi les immobilisations sorties du bilan" default=$choix_defaut}}
{{:input type="radio-btn" name="classify" value="ignored" label="Immobilisation à ignorer" help="Cette écriture n'apparaitra plus dans la liste des immobilisations" default=$choix_defaut}}
</dl>
</fieldset>
<fieldset id="infos_immo">
<legend>Informations</legend>
<dl>
{{:input type="number" name="duree" label="Durée d'amortissement" default=$duree_defaut required=true min=1}}
{{:input type="list" name="transactions" default=$immo_transactions label="Écritures liées au crédit du compte d'immobilisation" target="!acc/transactions/selector.php" multiple=true help="par exemple écriture d'avoir ou autre réduction du montant de l'acquisition"}}
{{:input type="date" name="date_mes" label="Date de mise en service" default=$date_defaut help="à renseigner uniquement si différente de la date d'acquisition"}}
</dl> </dl>
</fieldset> </fieldset>
@ -207,31 +129,21 @@
</form> </form>
{{:admin_footer}} {{* activer/désactiver les champs de saisie *}}
<script type="text/javascript"> <script type="text/javascript">
var info_immo = {{$info_immo|json_encode|raw}}; function toggleInputs(idiv, idrb1, idrb2) {
const rb1 = document.getElementById(idrb1);
// afficher/masquer les champs de saisie const rb2 = document.getElementById(idrb2);
function toggleInputs(event) { const fs = document.getElementById(idiv);
const classement_immo = document.getElementById('classement_immo'); for (let field of fs.querySelectorAll("input")) {
const managed = classement_immo.querySelector('input[type=radio][value=managed]'); if (! rb1.checked) {
const amortized = classement_immo.querySelector('input[type=radio][value=amortized]'); field.setAttribute("disabled","disabled");
if (managed.checked) { }
g.toggle('#infos_immo', true); else {
} else if (amortized.checked && info_immo != null && info_immo.duration != 0) { field.removeAttribute("disabled");
g.toggle('#infos_immo', true); }
} else {
g.toggle('#infos_immo', false);
} }
} }
toggleInputs();
(function () {
const radios = document.querySelectorAll('input[name="classify"]');
radios.forEach(radio => {
radio.addEventListener("change", toggleInputs);
});
})();
</script> </script>
{{:admin_footer}}

View file

@ -1,6 +1,6 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{:admin_header title="Aide" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Aide" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{:include file="_nav.html" current="aide"}} {{:include file="_nav.html" current="aide"}}
@ -34,7 +34,7 @@ Elles sont classées dans plusieurs onglets :
<li>Date d'acquisition du bien</li> <li>Date d'acquisition du bien</li>
<li>Date d'acquisition du bien</li> <li>Date d'acquisition du bien</li>
<li>Date de mise en service du bien : uniquement si différente de la précédente</li> <li>Date de mise en service du bien : uniquement si différente de la précédente</li>
<li>Libellé de l'immobilisation</li> <li>Désignation : c'est le libellé de l'immobilisation</li>
<li>Montant</li> <li>Montant</li>
<li>Durée d'amortissement en années</li> <li>Durée d'amortissement en années</li>
<li>Compte de décaissement : à choisir dans la liste</li> <li>Compte de décaissement : à choisir dans la liste</li>
@ -112,7 +112,7 @@ Elles sont classées dans plusieurs onglets :
Il faut renseigner les différents paramètres de l'amortissement : Il faut renseigner les différents paramètres de l'amortissement :
<ul class="aide"> <ul class="aide">
<li>Date ; par défaut, il s'agit de la date de fin d'exercice</li> <li>Date ; par défaut, il s'agit de la date de fin d'exercice</li>
<li>Libellé : déterminé à partir du libellé de l'immobilisation< ; il peut être modifié/li> <li>Désignation : déterminée à partir du libellé de l'immobilisation< ; elle peut être modifiée/li>
<li>Montant : sa valeur est calculée par le module ; elle peut être modifiée</li> <li>Montant : sa valeur est calculée par le module ; elle peut être modifiée</li>
<li> <li>
Compte de débit : à choisir dans la liste ; par défaut Compte de débit : à choisir dans la liste ; par défaut

View file

@ -2,77 +2,47 @@
{{* {{*
Lister les écritures d'amortissement associées à une immobilisation Lister les écritures d'amortissement associées à une immobilisation
@param immo_line_id : id de la ligne d'immo @param immo_id : id de la ligne d'immo
@param type_immo : managed, amortized, archived, others @param type_immo : encours, amortie, sortie, autres
*}} *}}
{{* récupérer les infos de l'immobilisation *}} {{* récupérer les infos de l'immobilisation *}}
{{#select {{#select
line.id as immo_line_id, line.id as immo_id,
line.debit as montant, line.debit as montant,
line.label as line_label, trans.id as trans_id,
trans.id as immo_trans_id,
trans.label as label, trans.label as label,
trans.date, trans.date
account.code as account_code
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
INNER JOIN acc_accounts AS account ON line.id_account = account.id
WHERE line.id = :line_id; WHERE line.id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
assign=ligne_immo assign=ligne_immo
}} }}
{{else}} {{else}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_line_id}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{:assign date_debut=$ligne_immo.date}} {{:assign date_debut=$ligne_immo.date}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.immo_trans_id}} {{:assign solde=$ligne_immo.montant}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}} {{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{:assign duree=$duration}} {{:assign duree=$duration}}
{{:assign date_debut=$date}} {{:assign date_debut=$date}}
{{:assign status=$status}} {{:assign status=$status}}
{{/load}} {{/load}}
{{if $status == 'ignored'}} {{* chercher des écritures d'amortissement liées à l'immobilisation *}}
{{: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 var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}}
{{:assign solde=$ligne_immo.montant}}
{{* 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_line_label, l_amort.label as amort_label,
l_amort.id as amort_line_id, l_amort.id as amort_line,
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 amort_trans_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,
@ -80,25 +50,19 @@
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 (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_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_transactions as trans on l_amort.id_transaction = trans.id
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 account.code LIKE '28%' WHERE
l_immo.id = :line_id
AND account.code LIKE '28%'
ORDER BY trans.date; ORDER BY trans.date;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
assign="amort_line" assign=linked_lines.
}} }}
{{* 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}} {{if $date_debut == null}}
{{:assign date_debut=$amort_date}} {{:assign date_debut=$amort_date}}
{{/if}} {{/if}}
@ -109,84 +73,55 @@
{{: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_amort}} {{#foreach from=$linked_lines}}
{{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}} {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{* Autres amortissements non rattachés *}} {{* 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 {{#select
line.id_transaction AS amort_trans_id line.id as l_id,
line.id_transaction as t_id,
line.credit as amort_amount,
line.label as l_label,
trans.date as t_date,
trans.label as t_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 line FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON account.id = line.id_account 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_transactions AS trans ON trans.id = line.id_transaction
INNER JOIN acc_years AS y ON y.id = trans.id_year 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 WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16)
ORDER BY trans.date, trans.label; ORDER BY trans.date, trans.label;
!filter_condition=$filter_condition assign=autre_amort
assign="amort"
}} }}
{{* voir s'il existe des écritures liées avec un numéro de compte d'immobilisation *}}
{{#select {{#select
links.id_transaction, id_transaction,
links.id_related, id_related
trans.id AS trans_id FROM acc_transactions_links
FROM acc_transactions_links AS links WHERE id_transaction = :id_amort OR id_related = :id_amort;
INNER JOIN acc_transactions AS trans ON ( :id_amort=$t_id
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 keep=false}} {{:assign var="autres_amortissements." value=$autre_amort}}
{{/load}}
{{if $keep}}
{{:assign autres_amortissements=true}}
{{/if}}
{{else}}
{{:assign autres_amortissements=true}}
{{/select}} {{/select}}
{{/select}} {{/select}}
{{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortization"}}
{{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if $_GET.type_immo == "amortized" || $valeur_residuelle== 0 }} {{if $_GET.type_immo == "amortie" || $valeur_residuelle== 0 }}
{{:assign subcurrent="amortized"}} {{:assign subcurrent="amortie"}}
{{elseif $_GET.type_immo == "archived"}} {{elseif $_GET.type_immo == "sortie"}}
{{:assign subcurrent="archived"}} {{:assign subcurrent="sortie"}}
{{elseif $_GET.type_immo == null || $_GET.type_immo == "managed"}} {{elseif $_GET.type_immo == null || $_GET.type_immo == "encours"}}
{{:assign subcurrent="managed"}} {{:assign subcurrent="encours"}}
{{else}} {{else}}
{{:assign subcurrent="other"}} {{:assign subcurrent="autre"}}
{{/if}} {{/if}}
{{:include {{:include
@ -222,7 +157,7 @@
<p class="submit"> <p class="submit">
{{:linkbutton {{:linkbutton
label="Sortir du bilan" 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_id=%s&type_immo=%s"|args:$_GET.immo_id:$_GET.type_immo
shape="export" shape="export"
class="main" class="main"
}} }}
@ -235,12 +170,11 @@
</fieldset> </fieldset>
</form> </form>
<div class="informations">
<dl class="describe"> <dl class="describe">
<dt>Immobilisation</dt> <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> {{$ligne_immo.label}}</dd>
<dt>Montant</dt> <dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.montant|money_currency_html:false|raw}}</dd> <dd><strong class="money">{{"%f"|math:$ligne_immo.montant|money_currency}}</strong></dd>
<dt>Début d'amortissement</dt> <dt>Début d'amortissement</dt>
<dd>{{$date_debut|date_short}}</dd> <dd>{{$date_debut|date_short}}</dd>
{{if $duree != null}} {{if $duree != null}}
@ -248,28 +182,27 @@
<dd>{{$duree}} ans</dd> <dd>{{$duree}} ans</dd>
{{/if}} {{/if}}
{{if $valeur_residuelle > 0}} {{if $valeur_residuelle > 0}}
<dt>Montant des amortissements</dt> <dt>Montant déjà amorti</dt>
<dd>{{"%d-%d"|math:$ligne_immo.montant:$valeur_residuelle|money_currency_html:false|raw}}</dd> <dd>{{"%d-%d"|math:$ligne_immo.montant:$valeur_residuelle|money_currency:false}}</dd>
<dt>Valeur nette comptable</dt> <dt>Valeur résiduelle</dt>
<dd>{{$valeur_residuelle|money_currency_html:false|raw}}</dd> <dd>{{$valeur_residuelle|money_currency}}</dd>
{{/if}} {{/if}}
{{if $duree != null && $valeur_residuelle > 0}} {{if $duree != null && $valeur_residuelle > 0}}
<dt>Annuité estimée</dt> <dt>Annuité estimée</dt>
<dd>{{"min(%d, %f/%d)"|math:$valeur_residuelle:$ligne_immo.montant:$duree|money_currency_html:false|raw}}</dd> <dd>{{"%f/%d"|math:$ligne_immo.montant:$duree|money_currency}}</dd>
{{/if}} {{/if}}
</dl> </dl>
</div>
<h3 class="ruler">Amortissements enregistrés</h3> <h3 class="center-block ruler">Amortissements enregistrés</h3>
{{if $linked_amort != null}} {{if $linked_lines != null}}
<section class="amortissement"> <section class="amortissement">
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
<th class="num"></th> <th></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">Solde</th>
<th>Libellé</th> <th>Libellé</th>
<th>N° compte</th> <th>N° compte</th>
<th>Compte</th> <th>Compte</th>
@ -277,7 +210,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#foreach from=$linked_amort item="line"}} {{#foreach from=$linked_lines 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}}
@ -285,18 +218,19 @@
<tr> <tr>
<td class="num"><a href={{$trans_url}}>#{{$line.amort_trans_id}}</a></td> <td class="num"><a href={{$trans_url}}>#{{$line.amort_trans_id}}</a></td>
<td>{{$line.amort_date|date_short}}</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:$line.amort_amount|money}}</td>
<td class="money">{{"%f"|math:$solde|money_html:false|raw}}</td> <td class="money">{{"%f"|math:$solde|money:false}}</td>
<td> <td>
{{$line.amort_trans_label}} {{if $line.amort_label == null}}
{{if $line.amort_line_label != null && $line.amort_line_label != $line.amort_trans_label}} {{$line.trans_label}}
— {{$line.amort_line_label}} {{else}}
{{$line.amort_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>
<td>{{$line.account_label}}</td> <td>{{$line.account_label}}</td>
<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"}} {{:linkbutton label="Détacher" href="detach_amort.html?amort_id=%d&immo_id=%d"|args:$line.amort_line:$ligne_immo.immo_id shape="minus"}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
@ -307,14 +241,14 @@
<p class="block alert">Aucun amortissement enregistré pour cette immobilisation</p> <p class="block alert">Aucun amortissement enregistré pour cette immobilisation</p>
{{/if}} {{/if}}
{{if $_GET.type_immo == null || $_GET.type_immo != "amortized"}} {{if $_GET.type_immo == null || $_GET.type_immo != "amortie"}}
{{* Autres amortissements non rattachés *}} {{* Autres amortissements non rattachés *}}
{{if $autres_amortissements}} {{if $autres_amortissements != null}}
<p class="block alert"> <p class="block alert">
Il existe des écritures d'amortissement qui ne sont pas rattachées à une immobilisation ! <br /> Il existe des écritures d'amortissement qui ne sont pas rattachés à une immobilisation ! <br />
Utilisez le bouton « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation. Utilisez le bouton « Attacher un amortissement » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
</p> </p>
{{/if}} {{/if}}
{{/if}} {{/if}}

View file

@ -10,11 +10,11 @@
id_transaction id_transaction
FROM acc_transactions_lines FROM acc_transactions_lines
WHERE id = :line_id; WHERE id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
}} }}
{{:assign immo_trans_id=$id_transaction}} {{:assign immo_trans_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_line_id}} {{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{* chercher l'écriture d'amortissement *}} {{* chercher l'écriture d'amortissement *}}
@ -22,11 +22,11 @@
id_transaction id_transaction
FROM acc_transactions_lines FROM acc_transactions_lines
WHERE id = :line_id; WHERE id = :line_id;
:line_id = $_GET.amort_line_id|intval :line_id = $_GET.amort_id|intval
}} }}
{{:assign amort_trans_id=$id_transaction}} {{:assign amort_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_line_id}} {{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{/select}} {{/select}}
{{* chercher les liaisons de l'écriture d'immobilisation *}} {{* chercher les liaisons de l'écriture d'immobilisation *}}
@ -43,7 +43,9 @@
{{/select}} {{/select}}
{{* ajouter la nouvelle liaison *}} {{* ajouter la nouvelle liaison *}}
{{:assign var="linked_transactions." value=$amort_trans_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
@ -51,24 +53,4 @@
assign_code="result_code" assign_code="result_code"
transactions=$linked_transactions transactions=$linked_transactions
}} }}
{{:redirect force="amortization.html?immo_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_id:$amort_id}}
{{* 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
: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
}}
{{/load}}
{{:redirect force="amortization.html?immo_line_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_line_id:$amort_trans_id}}

View file

@ -2,138 +2,87 @@
{{* {{*
Sortir une immobilisation du bilan Sortir une immobilisation du bilan
@param immo_line_id : id de la ligne d'immobilisation @param immo_id : id de la ligne d'immobilisation
*}} *}}
{{* Infos de l'immobilisation *}} {{* Infos de l'immobilisation *}}
{{#select {{#select
line.debit as montant, line.debit as montant,
trans.id AS trans_id,
trans.date as date_achat, trans.date as date_achat,
trans.label, trans.label
account.code as account_code
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
INNER JOIN acc_accounts AS account ON line.id_account = account.id
WHERE line.id = :line_id; WHERE line.id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
assign="ligne_immo" assign="ligne_immo"
}} }}
{{else}} {{else}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_line_id}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{:assign date_debut=$ligne_immo.date_achat}} {{:assign date_debut=$ligne_immo.date_achat}}
{{:assign ts_mes=$ligne_immo.date_achat|strtotime}} {{:assign ts_mes=$ligne_immo.date_achat|strtotime}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}} {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{:assign ts_mes=$date|strtotime}} {{:assign ts_mes=$date|strtotime}}
{{:assign date_debut=$date}} {{:assign date_debut=$date}}
{{:assign duree_amort=$duration}} {{:assign duree_amort=$duration}}
{{/load}} {{/load}}
{{* 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.trans_id
:account=$ligne_immo.account_code
}}
{{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
{{/select}}
{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}}
{{* chercher des écritures d'amortissement liées à l'immobilisation *}} {{* chercher des écritures d'amortissement liées à l'immobilisation *}}
{{:assign total_amort=0}}
{{:assign amort_number=0}}
{{#select {{#select
l_amort.credit as amort_amount, SUM(l_amort.credit) as amort_amount,
l_amort.id as amort_line_id,
CASE CASE
WHEN links.id_related = t_immo.id 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 MAX(trans.date) as last_amort_date,
MIN(trans.date) as first_amort_date,
COUNT(trans.id) as amort_number
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 (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_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_transactions as trans on l_amort.id_transaction = trans.id
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 account.code LIKE '28%' WHERE l_immo.id = :line_id AND account.code LIKE '28%'
; LIMIT 1;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
assign="amort_line" 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_line_id|intval :amort_trans_id=$amort_line.amort_trans_id
}}
{{if $line.amort_line_id == $amort_line.amort_line_id}}
{{:assign amort_number="%d+1"|math:$amort_number}}
{{:assign total_amort="%d+%d"|math:$total_amort:$amort_line.amort_amount}}
{{if $first_amort_date == null}}
{{:assign first_amort_date=$amort_line.date}}
{{elseif $amort_line.date < $first_amort_date}}
{{:assign first_amort_date=$amort_line.date}}
{{/if}}
{{if $last_amort_date == null}}
{{:assign last_amort_date=$amort_line.date}}
{{elseif $amort_line.date > $last_amort_date}}
{{:assign last_amort_date=$amort_line.date}}
{{/if}}
{{/if}}
{{else}}
{{:assign amort_number="%d+1"|math:$amort_number}}
{{:assign total_amort="%d+%d"|math:$total_amort:$amort_line.amort_amount}}
{{if $first_amort_date == null}}
{{:assign first_amort_date=$amort_line.date}}
{{elseif $amort_line.date < $first_amort_date}}
{{:assign first_amort_date=$amort_line.date}}
{{/if}}
{{if $last_amort_date == null}}
{{:assign last_amort_date=$amort_line.date}}
{{elseif $amort_line.date > $last_amort_date}}
{{:assign last_amort_date=$amort_line.date}}
{{/if}}
{{/load}}
{{/select}} {{/select}}
{{if $total_amort == 0}} {{if $amort_line.amort_number == 0}}
{{if $info_immo.status == "amortized"}} {{if $info_immo.status == "amortized"}}
{{:assign total_amort=$ligne_immo.montant}} {{:assign amort_amount=$ligne_immo.montant}}
{{else}}
{{:assign amort_amount=0}}
{{/if}} {{/if}}
{{else}} {{else}}
{{:assign date_debut=$last_amort_date|strtotime}} {{:assign amort_amount=$amort_line.amort_amount}}
{{:assign date_debut=$amort_line.last_amort_date|strtotime}}
{{:assign date_debut="%d+(60*60*24)"|math:$date_debut|date:"Y-m-d"}} {{:assign date_debut="%d+(60*60*24)"|math:$date_debut|date:"Y-m-d"}}
{{/if}} {{/if}}
{{:assign ts_debut=$date_debut|strtotime}} {{:assign ts_debut=$date_debut|strtotime}}
{{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$total_amort}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$amort_amount}}
{{* {{*
lister les exercices ouverts dont la date de fin est postérieure à la date du dernier amortissment lister les exercices ouverts :
- dont la date de fin est postérieure à la date du dernier amortissment
- dont la date de début est antérieure ou égale à la date du jour
*}} *}}
{{:assign default_exit_date=""}} {{:assign default_exit_date=""}}
{{#years closed=false order="start_date" where=":debut <= end_date" :debut=$date_debut}} {{#years closed=false order="start_date" where=":debut <= end_date" :debut=$date_debut}}
{{if $start_date|strtotime <= $now && $now <= $end_date|strtotime}} {{if $start_date|strtotime <= $now && $now <= $end_date|strtotime}}
{{:assign default_exit_date=$now|date_short}} {{:assign default_exit_date=$now|date_short}}
{{/if}} {{/if}}
{{if $start_date|strtotime > $now}}
{{:break}}
{{/if}}
{{:assign var="years." id=$id label=$label start_date=$start_date end_date=$end_date}} {{:assign var="years." id=$id label=$label start_date=$start_date end_date=$end_date}}
{{:assign debut=$start_date|date_short}} {{:assign debut=$start_date|date_short}}
{{:assign fin=$end_date|date_short}} {{:assign fin=$end_date|date_short}}
@ -157,9 +106,9 @@
{{* vérifier la validité de la date de mise en service *}} {{* vérifier la validité de la date de mise en service *}}
{{if $_POST.date_mes != null}} {{if $_POST.date_mes != null}}
{{:assign ts_mes=$_POST.date_mes|parse_date|strtotime}} {{:assign ts_mes=$_POST.date_mes|parse_date|strtotime}}
{{if $ts_mes < $ligne_immo.date_achat|strtotime || $ts_mes > $first_amort_date|strtotime}} {{if $ts_mes < $ligne_immo.date_achat|strtotime || $ts_mes > $amort_line.first_amort_date|strtotime}}
{{:assign immo_date=$ligne_immo.date_achat|date_short}} {{:assign immo_date=$ligne_immo.date_achat|date_short}}
{{:assign amort_date=$first_amort_date|date_short}} {{:assign amort_date=$amort_line.first_amort_date|date_short}}
{{:error message="La date de mise en service doit être postérieure à la date d'acquisition de l'immobilisation (%s) et antérieure à la date du premier amortissement (%s)"|args:$immo_date:$amort_date}} {{:error message="La date de mise en service doit être postérieure à la date d'acquisition de l'immobilisation (%s) et antérieure à la date du premier amortissement (%s)"|args:$immo_date:$amort_date}}
{{/if}} {{/if}}
{{/if}} {{/if}}
@ -169,8 +118,8 @@
{{if $info_immo.duration == null}} {{if $info_immo.duration == null}}
{{if $_POST.duree == null}} {{if $_POST.duree == null}}
{{:error message="Vous devez renseigner la durée de l'immobilisation"}} {{:error message="Vous devez renseigner la durée de l'immobilisation"}}
{{elseif $_POST.duree < $amort_number}} {{elseif $_POST.duree < $amort_line.amort_number}}
{{:error message="La durée de l'amortissement ne peut être inférieure au nombre d'écritures d'amortissement (%d)"|args:$amort_number}} {{:error message="La durée de l'amortissement ne peut être inférieure au nombre d'écritures d'amortissement (%d)"|args:$amort_line.amort_number}}
{{else}} {{else}}
{{:assign duree_amort=$_POST.duree}} {{:assign duree_amort=$_POST.duree}}
{{/if}} {{/if}}
@ -191,9 +140,9 @@
{{:assign immo_date=$ligne_immo.date_achat|date_short}} {{:assign immo_date=$ligne_immo.date_achat|date_short}}
{{:error message="La date de sortie doit être postérieure à la date d'acquisition de l'immobilisation (%s)"|args:$immo_date}} {{:error message="La date de sortie doit être postérieure à la date d'acquisition de l'immobilisation (%s)"|args:$immo_date}}
{{/if}} {{/if}}
{{if $amort_number != 0 && $_POST.date_sortie|parse_date <= $last_amort_date}} {{if $amort_line.amort_number != 0 && $_POST.date_sortie|parse_date <= $amort_line.last_amort_date}}
{{:assign last_amort_date=$last_amort_date|date_short}} {{:assign last_amort_date=$amort_line.last_amort_date|date_short}}
{{:error message="La date de sortie doit être postérieure à la date du dernier amortissement (%s)"|args:$last_amort_date}} {{:error message="La date de sortie doit être postérieure à la date de la dernière immobilisation (%s)"|args:$last_amort_date}}
{{/if}} {{/if}}
{{* vérifier que la date de sortie est située dans un exercice ouvert *}} {{* vérifier que la date de sortie est située dans un exercice ouvert *}}
@ -210,7 +159,7 @@
{{/if}} {{/if}}
{{* voir si des amortissements ont été oubliés *}} {{* voir si des amortissements ont été oubliés *}}
{{if $valeur_nette > 0 && $info_immo.status != "amortized" && $start_date|strtotime > $last_amort_date|strtotime && $end_date|strtotime < $now}} {{if $info_immo.status != "amortized" && $start_date|strtotime > $amort_line.last_amort_date|strtotime && $end_date|strtotime < $now}}
{{:assign debut=$start_date|date_short}} {{:assign debut=$start_date|date_short}}
{{:assign fin=$end_date|date_short}} {{:assign fin=$end_date|date_short}}
{{:assign msg_amort=$msg_amort|cat:"\n"|cat:" - "|cat:$label|cat:" : du "|cat:$debut|cat:" au "|cat:$fin}} {{:assign msg_amort=$msg_amort|cat:"\n"|cat:" - "|cat:$label|cat:" : du "|cat:$debut|cat:" au "|cat:$fin}}
@ -223,10 +172,10 @@
{{:error message="Vous devez d'abord enregistrer les amortissements des exercices suivants : %s"|args:$msg_amort}} {{:error message="Vous devez d'abord enregistrer les amortissements des exercices suivants : %s"|args:$msg_amort}}
{{/if}} {{/if}}
{{:redirect to="compute_exit_data.html?immo_line_id=%s&amort_amount=%s&year=%s&date_mes=%s&date_debut=%s&exit_date=%s&duree_amort=%s"|args:$_GET.immo_line_id:$total_amort:$selected_year:$ts_mes:$ts_debut:$ts_exit:$duree_amort}} {{:redirect to="compute_exit_data.html?immo_id=%s&amort_amount=%s&year=%s&date_mes=%s&date_debut=%s&exit_date=%s&duree_amort=%s"|args:$_GET.immo_id:$amort_amount:$selected_year:$ts_mes:$ts_debut:$ts_exit:$duree_amort}}
{{/form}} {{/form}}
{{:admin_header title="Sortie de bilan" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Sortie de bilan" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="balance_exit"}} {{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="balance_exit"}}
@ -241,7 +190,7 @@
<legend>Données de l'imobilisation</legend> <legend>Données de l'imobilisation</legend>
<dl class="describe"> <dl class="describe">
<dt>Montant</dt> <dt>Montant</dt>
<dd id="montant_immo" class="money">{{$ligne_immo.montant|money_currency_html:false|raw}}</dd> <dd id="montant_immo" class="money">{{$ligne_immo.montant|money_currency:false}}</dd>
<dt>Date d'acquisition</dt> <dt>Date d'acquisition</dt>
<dd >{{$ligne_immo.date_achat|date_short}}</dd> <dd >{{$ligne_immo.date_achat|date_short}}</dd>
{{if $info_immo.date != null && $info_immo.date != $ligne_immo.date_achat}} {{if $info_immo.date != null && $info_immo.date != $ligne_immo.date_achat}}
@ -253,9 +202,9 @@
<dd id="duree_amort" class="num">{{$info_immo.duration}} ans</dd> <dd id="duree_amort" class="num">{{$info_immo.duration}} ans</dd>
{{/if}} {{/if}}
<dt>Montant des amortissements</dt> <dt>Montant des amortissements</dt>
<dd id="montant_amort" class="money">{{$total_amort|money_currency_html:false|raw}} <span class="help">(à la date de début de l'exercice)</span></dd> <dd id="montant_amort" class="money">{{$amort_amount|money_currency:false}} <span class="help">(à la date de début de l'exercice)</span></dd>
<dt>Valeur nette résiduelle</dt> <dt>Valeur nette résiduelle</dt>
<dd class="money">{{$valeur_nette|money_currency_html:false|raw}} <span class="help">(à la date de début de l'exercice)</span></dd> <dd class="money">{{$valeur_nette|money_currency:false}} <span class="help">(à la date de début de l'exercice)</span></dd>
</dl> </dl>
</div> </div>
{{if $valeur_nette > 0}} {{if $valeur_nette > 0}}

View file

@ -3,7 +3,7 @@
{{* {{*
Calculer les valeurs de la sortie et saisir le montant de la cession (optionnel) Calculer les valeurs de la sortie et saisir le montant de la cession (optionnel)
paramètres : paramètres :
- immo_line_id : numéro de ligne de l'écriture d'immobilisation - immo_id : numéro de ligne de l'écriture d'immobilisation
- amort_amount : montant des amortissements - amort_amount : montant des amortissements
- year : exercice de la date de sortie de l'immobilisation - year : exercice de la date de sortie de l'immobilisation
- date_mes : datede mise en service de l'immobilisation - date_mes : datede mise en service de l'immobilisation
@ -14,44 +14,18 @@
{{#select {{#select
line.debit as montant, line.debit as montant,
trans.id AS trans_id,
trans.date as date_achat, trans.date as date_achat,
trans.label, trans.label
account.code as account_code
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
INNER JOIN acc_accounts AS account ON line.id_account = account.id
WHERE line.id = :line_id; WHERE line.id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
assign="ligne_immo" assign="ligne_immo"
}} }}
{{else}} {{else}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_line_id}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{* 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.trans_id
:account=$ligne_immo.account_code
}}
{{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
{{/select}}
{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}}
{{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$_GET.amort_amount}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$_GET.amort_amount}}
{{:assign amort_comp=0}} {{* amortissement complémentaire jqà date sortie *}} {{:assign amort_comp=0}} {{* amortissement complémentaire jqà date sortie *}}
{{if $valeur_nette > 0}} {{if $valeur_nette > 0}}
@ -69,10 +43,10 @@
{{/if}} {{/if}}
{{/if}} {{/if}}
{{:redirect to="write_exit.html?immo_line_id=%s&amort_amount=%s&year=%s&date_mes=%s&date_debut=%s&exit_date=%s&duree_amort=%s&cession=%s"|args:$_GET.immo_line_id:$_GET.amort_amount:$_GET.year:$_GET.date_mes:$_GET.date_debut:$_GET.exit_date:$_GET.duree_amort:$_POST.montant_cession}} {{:redirect to="write_exit.html?immo_id=%s&amort_amount=%s&year=%s&date_mes=%s&date_debut=%s&exit_date=%s&duree_amort=%s&cession=%s"|args:$_GET.immo_id:$_GET.amort_amount:$_GET.year:$_GET.date_mes:$_GET.date_debut:$_GET.exit_date:$_GET.duree_amort:$_POST.montant_cession}}
{{/form}} {{/form}}
{{:admin_header title="Sortie du bilan" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Sortie du bilan" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
@ -88,7 +62,7 @@
<legend>Données de l'imobilisation</legend> <legend>Données de l'imobilisation</legend>
<dl class="describe"> <dl class="describe">
<dt>Montant</dt> <dt>Montant</dt>
<dd id="montant_immo" class="money">{{$ligne_immo.montant|money_currency_html:false|raw}}</dd> <dd id="montant_immo" class="money">{{$ligne_immo.montant|money_currency:false}}</dd>
<dt>Date d'acquisition</dt> <dt>Date d'acquisition</dt>
<dd >{{$ligne_immo.date_achat|date_short}}</dd> <dd >{{$ligne_immo.date_achat|date_short}}</dd>
{{if $_GET.date_mes != $ligne_immo.date_achat|strtotime}} {{if $_GET.date_mes != $ligne_immo.date_achat|strtotime}}
@ -100,18 +74,18 @@
<dd id="duree_amort" class="num">{{$_GET.duree_amort}} ans</dd> <dd id="duree_amort" class="num">{{$_GET.duree_amort}} ans</dd>
{{/if}} {{/if}}
<dt>Montant des amortissements</dt> <dt>Montant des amortissements</dt>
<dd id="montant_amort" class="money">{{$_GET.amort_amount|money_currency_html:false|raw}} <span class="help">(à la date de début de l'exercice)</span></dd> <dd id="montant_amort" class="money">{{$_GET.amort_amount|money_currency:false}} <span class="help">(à la date de début de l'exercice)</span></dd>
<dt>Valeur nette résiduelle</dt> <dt>Valeur nette résiduelle</dt>
<dd class="money">{{$valeur_nette|money_currency_html:false|raw}} <span class="help">(à la date de début de l'exercice)</span></dd> <dd class="money">{{$valeur_nette|money_currency:false}} <span class="help">(à la date de début de l'exercice)</span></dd>
<dt>Date de sortie</dt> <dt>Date de sortie</dt>
<dd>{{$_GET.exit_date|date:"d/m/Y"}}</dd> <dd>{{$_GET.exit_date|date:"d/m/Y"}}</dd>
{{if $amort_comp > 0}} {{if $amort_comp > 0}}
<dt>Amortissement complémentaire</dt> <dt>Amortissement complémentaire</dt>
<dd class="money">{{$amort_comp|money_currency_html:false|raw}} <span class="help">(jusqu'à la date de sortie)</span></dd> <dd class="money">{{$amort_comp|money_currency:false}} <span class="help">(jusqu'à la date de sortie)</span></dd>
<dt>Total des amortissements</dt> <dt>Total des amortissements</dt>
<dd class="money">{{"%f+%f"|math:$_GET.amort_amount:$amort_comp|money_currency_html:false|raw}} <span class="help">(à la date de sortie)</span></dd> <dd class="money">{{"%f+%f"|math:$_GET.amort_amount:$amort_comp|money_currency:false}} <span class="help">(à la date de sortie)</span></dd>
<dt>Valeur nette résiduelle</dt> <dt>Valeur nette résiduelle</dt>
<dd class="money">{{"%f-%f"|math:$valeur_nette:$amort_comp|money_currency_html:false|raw}} <span class="help">(à la date de sortie)</span></dd> <dd class="money">{{"%f-%f"|math:$valeur_nette:$amort_comp|money_currency:false}} <span class="help">(à la date de sortie)</span></dd>
{{/if}} {{/if}}
</dl> </dl>
</div> </div>

View file

@ -1,245 +0,0 @@
{{* -*- brindille -*- *}}
{{* lecture config (défaut ou enregistrée) *}}
{{:include file="./_get_config.html" keep="module.config, config_defaut"}}
{{#form on="save"}}
{{:assign ok=0}}
{{#foreach from=$_POST.immo_accounts item="line"}}
{{:assign elem=$line|values}}
{{:assign elem=$elem.0}}
{{:assign var="fields" value=$elem|explode:" — "}}
{{if $fields.0|strpos:$config_defaut.unfinished.0.code === 0}}
{{:error message="Le compte « %s » n'est pas un compte d'immobilisation amortissable"|args:$fields.0}}
{{/if}}
{{:assign var="account_codes." value=$fields.0}}
{{/foreach}}
{{#foreach from=$_POST.unfinished_accounts item="line"}}
{{:assign elem=$line|values}}
{{:assign elem=$elem.0}}
{{:assign var="fields" value=$elem|explode:" — "}}
{{:assign var="unfinished_codes." value=$fields.0}}
{{/foreach}}
{{* vérifier qu'il n'y a pas d'intersection entre les deux listes de codes *}}
{{#foreach from=$account_codes item="i_code"}}
{{#foreach from=$unfinished_codes item="u_code"}}
{{if $i_code|strpos:$u_code === 0}}
{{:error message="Le compte d'immobilisation amortissable « %s » est incompatible avec le compte d'immobilisation en cours « %s »"|args:$i_code:$u_code}}
{{/if}}
{{if $u_code|strpos:$i_code === 0}}
{{:error message="Le compte d'immobilisation amortissable « %s » est incompatible avec le compte d'immobilisation en cours « %s »"|args:$i_code:$u_code}}
{{/if}}
{{/foreach}}
{{/foreach}}
{{:save
key="config"
prefixes=$account_codes|sort
unfinished=$unfinished_codes|sort
}}
{{:assign ok=1}}
{{:redirect to="./config.html?ok=%d"|args:$ok}}
{{else}}
{{:form_errors}}
{{/form}}
{{:admin_header title="Configuration" custom_css="./style.css" current="module_amortization"}}
{{:include file="_nav.html" current="config"}}
{{if $_GET.ok == 1}}
<p class="block confirm">Configuration enregistrée.</p>
{{/if}}
{{* récupérer l'exercice courant ou sinon le plus récent *}}
{{:assign var="selected_year" from="logged_user.preferences.accounting_year"}}
{{if $selected_year == null}}
{{* sélectionner l'exercice le plus probable *}}
{{#years}}
{{if $start_date|strtotime <= $now && $end_date|strtotime >= $now}}
{{:assign selected_year=$id}}
{{:break}}
{{/if}}
{{:assign last_year=$id}}
{{/years}}
{{/if}}
{{if $selected_year == null}}
{{if $last_year == null}}
<p class="block alert">Aucun exercice</p>
{{else}}
{{:assign selected_year=$last_year}}
{{/if}}
{{/if}}
{{if $selected_year != null}}
{{* libellés des comptes d'immobilisation amortissables *}}
{{:assign condition="("}}
{{#foreach from=$module.config.prefixes item="code"}}
{{:assign code=$code|quote_sql}}
{{:assign condition=$condition|cat:" account.code = "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign condition=$condition|cat:"0)"}}
{{:assign condition=$condition|cat:" AND year.id = %s"|args:$selected_year}}
{{#select
account.id as account_id,
account.code,
account.label
FROM acc_accounts AS account
INNER JOIN acc_charts AS chart ON chart.id = account.id_chart
INNER JOIN acc_years AS year ON year.id_chart = chart.id
WHERE !condition
;
!condition=$condition
}}
{{:assign var="immo_accounts.%s"|args:$code label=$label}}
{{/select}}
{{* libellés des comptes d'immobilisation en cours de constitution *}}
{{:assign condition="("}}
{{#foreach from=$module.config.unfinished item="elem"}}
{{if $elem.code != null}}
{{:assign code=$elem.code}}
{{else}}
{{:assign code=$elem}}
{{/if}}
{{:assign code=$code|quote_sql}}
{{:assign condition=$condition|cat:" account.code = "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign condition=$condition|cat:"0)"}}
{{:assign condition=$condition|cat:" AND year.id = %s"|args:$selected_year}}
{{#select
account.id as account_id,
account.code,
account.label
FROM acc_accounts AS account
INNER JOIN acc_charts AS chart ON chart.id = account.id_chart
INNER JOIN acc_years AS year ON year.id_chart = chart.id
WHERE !condition
;
!condition=$condition
}}
{{:assign var="unfinished_accounts.%s"|args:$code label=$label}}
{{/select}}
{{if $unfinished_accounts|count == 0}}
{{:assign var="unfinished_accounts.%s"|args:$config_defaut.unfinished.0.code label=$config_defaut.unfinished.0.label}}
{{/if}}
<form method="post" action="">
<h3>Comptes d'immobilisation amortissables</h3>
<p class="help">
Les immobilisations amortissables sont cherchées dans les comptes sélectionnés et leurs sous-comptes.
</p>
<table class="list transaction-lines" id="asset_prefixes">
<thead>
<tr>
<th>Compte</th>
<th></th>
</tr>
</thead>
<tbody>
{{#foreach from=$immo_accounts key=code item=elem}}
<tr>
<td>
{{:assign var="immo_account.%s.%s"|args:$code:$code value="%s — "|args:$code|cat:$elem.label}}
{{:assign var="current_account" from="immo_account.%s"|args:$code}}
{{:input
type="list"
name="immo_accounts[]"
target="!acc/charts/accounts/selector.php?codes=%s*&id_year=%d"|args:$code:$selected_year
default=$current_account
}}
</td>
<td class="actions">
{{:button
label="Enlever"
title="Enlever une ligne"
shape="minus"
min="1"
name="remove_line"
}}
</td>
</tr>
{{/foreach}}
</tbody>
<tfoot>
<tr>
<td></td>
<td class="actions">{{:button shape="plus" label="Ajouter" title="Ajouter un compte"}}</td>
</tr>
</tfoot>
</table>
<h3>Comptes d'immobilisation en cours de constitution</h3>
<p class="help">
Ces immobilisations ne sont pas amortissables ; elles sont cherchées dans les comptes sélectionnés et leurs sous-comptes.
</p>
<table class="list transaction-lines" id="unfinished_accounts">
<thead>
<tr>
<th>Compte</th>
<th></th>
</tr>
</thead>
<tbody>
{{#foreach from=$unfinished_accounts key=code item=elem}}
<tr>
<td>
{{:assign var="unfinished_account.%s.%s"|args:$code:$code value="%s — "|args:$code|cat:$elem.label}}
{{:assign var="current_account" from="unfinished_account.%s"|args:$code}}
{{:input
type="list"
name="unfinished_accounts[]"
target="!acc/charts/accounts/selector.php?codes=%s*&id_year=%d"|args:$code:$selected_year
default=$current_account
}}
</td>
<td class="actions">
{{:button
label="Enlever"
title="Enlever une ligne"
shape="minus"
min="1"
name="remove_line"
}}
</td>
</tr>
{{/foreach}}
</tbody>
<tfoot>
<tr>
<td></td>
<td class="actions">{{:button shape="plus" label="Ajouter" title="Ajouter un compte"}}</td>
</tr>
</tfoot>
</table>
<p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>
{{/if}}
<script type="text/javascript" src="scripts.js"></script>
<script type="text/javascript" async="async">
// bouton - : supprimer une ligne
let lines = $('.transaction-lines tbody tr');
lines.forEach(initLine);
// bouton + : dupliquer une ligne de la 1ère table
for (const b of $('#asset_prefixes tfoot button')) {
addLine(b, "2*");
}
// bouton + : dupliquer une ligne de la 2ème table
for (const b of $('#unfinished_accounts tfoot button')) {
addLine(b, "23*");
}
</script>

50
confirm_action.html Normal file
View file

@ -0,0 +1,50 @@
{{* -*- brindille -*- *}}
{{#form on="validate"}}
{{:debug get=$_GET post=$_POST}}
{{/form}}
{{:admin_header title="Confirmer"}}
{{:assign .="infos"}}
{{*:debug post=$_POST*}}
{{if $_POST.actions == "amortize"}}
{{:assign action="Marquer l'immobilisation amortie"}}
{{elseif $_POST.actions == "ignore"}}
{{:assign action="Ignorer l'écriture"}}
{{/if}}
{{:assign msg_titre="Appliquer l'opération « %s » sur les écritures : "|args:$action}}
{{:assign msg_lines=""}}
{{:admin_header title="Confirmer l'opération" custom_css="./style.css" current="module_amortissement"*}}
<form method="post" action="">
<div class="block alert">
<p>Appliquer l'opération « {{$action}} » sur les écritures :</p>
</div>
<table class="list">
<thead>
<tr>
<td class="num"></td>
<td>Libellé</td>
</tr>
</thead>
<tbody>
{{#foreach from=$_POST.check item="line"}}
<tr>
{{:assign var="label" from="_POST.label.%s"|args:$line}}
{{:assign var="trans_id" from="_POST.trans.%s"|args:$line}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$trans_id}}
<td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td>
<td>{{$label}}</td>
</tr>
<input type="hidden" name="trans[{{$trans_id}}]" value="{{$line}}">
{{/foreach}}
</tbody>
</table>
<p class="submit">
{{:button type="submit" name="validate" label="Confirmer" shape="right" class="main"}}
</p>
</form>
{{:admin_footer}}

View file

@ -1,14 +1,8 @@
{ {
"tva": false, "tva": false,
"prefixes": [ "prefixes": {
"20", "20": "Immobilisations incorporelles",
"21", "21": "Immobilisations corporelles",
"27" "27": "Immobilisations financières"
],
"unfinished": [
{
"code" : "23",
"label" : "Immobilisations en cours"
} }
]
} }

View file

@ -10,11 +10,11 @@
id_transaction id_transaction
FROM acc_transactions_lines FROM acc_transactions_lines
WHERE id = :line_id; WHERE id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
}} }}
{{:assign immo_trans_id=$id_transaction}} {{:assign immo_trans_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_line_id}} {{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{* chercher l'écriture d'amortissement *}} {{* chercher l'écriture d'amortissement *}}
@ -22,11 +22,11 @@
id_transaction id_transaction
FROM acc_transactions_lines FROM acc_transactions_lines
WHERE id = :line_id; WHERE id = :line_id;
:line_id = $_GET.amort_line_id|intval :line_id = $_GET.amort_id|intval
}} }}
{{:assign amort_id=$id_transaction}} {{:assign amort_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_line_id}} {{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{/select}} {{/select}}
{{* {{*
@ -55,17 +55,4 @@
assign_code="result_code" assign_code="result_code"
transactions=$linked_transactions transactions=$linked_transactions
}} }}
{{:redirect to="amortization.html?immo_id=%s&ok=1&msg=detach&trans_id=%s"|args:$_GET.immo_id:$amort_id}}
{{* 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_line_id|intval
:amort_trans_id = $amort_id|intval
:amort_line_id = $_GET.amort_line_id|intval
}}
{{:delete id=$id}}
{{/load}}
{{:redirect to="amortization.html?immo_line_id=%s&ok=1&msg=detach&trans_id=%s"|args:$_GET.immo_line_id:$amort_id}}

View file

@ -1,94 +0,0 @@
{{* -*- brindille -*- *}}
{{:admin_header title="Configuration" custom_css="./style.css" current="module_amortization"}}
{{:include file="_nav.html" current="config" subcurrent="filters"}}
{{if $_GET.ok == 1}}
<p class="block confirm">Configuration enregistrée.</p>
{{/if}}
{{* lecture config *}}
{{:include file="./_get_config.html" keep="module.config"}}
{{#form on="save"}}
{{* enregistrer les filtres dans la config *}}
{{#foreach from=$_POST.filters item="filter"}}
{{if $filter != ""}}
{{:assign var="filters." value=$filter}}
{{/if}}
{{/foreach}}
{{:save key="config" filters=$filters}}
{{:redirect to="./filters.html"}}
{{/form}}
<form method="post" action="">
<h3>Liste de libellés à ignorer</h3>
<p class="help">
Les écritures dont le libellé contient un des textes ci-dessous seront ignorées
</p>
<table class="list" id="filter_list">
<thead>
<tr>
<th>Libellé</th>
<th></th>
</tr>
</thead>
<tbody>
{{if $module.config.filters == null}}
<tr>
<td>
{{:input type="text" name="filters[]" required=false}}
</td>
<td class="actions">
{{:button
label="Enlever"
title="Enlever une ligne"
shape="minus"
name="remove_line"
}}
</td>
</tr>
{{else}}
{{#foreach from=$module.config.filters item="filter"}}
<tr>
<td>
{{:input type="text" name="filters[]" default=$filter required=false}}
</td>
<td class="actions">
{{:button
label="Enlever"
title="Enlever une ligne"
shape="minus"
name="remove_line"
}}
</td>
</tr>
{{/foreach}}
{{/if}}
</tbody>
<tfoot>
<tr>
<td></td>
<td class="actions">{{:button shape="plus" label="Ajouter" title="Ajouter un libellé"}}</td>
</tr>
</tfoot>
</table>
<p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>
<script type="text/javascript" src="scripts.js"></script>
<script type="text/javascript" async="async">
// bouton - : supprimer une ligne
let lines = $('#filter_list tbody tr');
lines.forEach(initLine);
// bouton + : dupliquer une ligne de la 1ère table
for (const b of $('#filter_list tfoot button')) {
copyLine(b);
}
</script>

View file

@ -1,85 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Marquer la ligne d'écriture « à ignorer »
@param immo_line_id : numéro de ligne
*}}
{{#select
trans.id AS trans_id,
trans.date AS date,
trans.label AS label,
line.debit AS amount
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
assign=ligne_immo
}}
{{else}}
{{:error message="Il n'y a aucune écriture avec le numéro de ligne %s !"|args:$_GET.immo_line_id}}
{{/select}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}}{{/load}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="proceed"}}
{{if $_POST.ignore != null && $info_immo == null}}
{{* ignorer l'écriture *}}
{{:assign duration=0}}
{{:assign status="ignored"}}
{{:save
key=""|uuid
validate_schema="schema.json"
type="immo"
line=$_GET.immo_line_id|intval
duration=$duration
date=$ligne_immo.date
status=$status
}}
{{:redirect force="index.html?ok=1&msg=infos&type_immo=unfinished"}}
{{elseif $_POST.ignore == null && $info_immo != null}}
{{* dés-ignorer l'écriture *}}
{{:delete id=$info_immo.id}}
{{:redirect force="index.html?ok=1&msg=infos&type_immo=unfinished"}}
{{else}}
{{:redirect force="index.html?type_immo=unfinished"}}
{{/if}}
{{else}}
{{:form_errors}}
{{/form}}
{{:admin_header title="Ignorer l'écriture" custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="_nav.html" current="index"}}
{{/if}}
<form method="post" action="">
<fieldset id="classement_immo">
<legend>Ignorer</legend>
<div class="informations">
<dl class="describe">
<dt>Écriture</dt>
<dd><span class="num"><a href={{$trans_url}}>#{{$ligne_immo.trans_id}}</a></span> {{$ligne_immo.label}}</dd>
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.amount|money_currency_html:false|raw}}</dd>
</dl>
</div>
<dl>
{{if $info_immo != null && $info_immo.status == "ignored"}}
{{:input type="checkbox" name="ignore" checked="checked" value="1" label="Ignoré" help="Décocher pour ne plus ignorer l'écriture"}}
{{else}}
{{:input type="checkbox" name="ignore" value="1" label="Ignoré" help="Cocher pour ignorer l'écriture ; elle n'apparaitra plus dans la liste des immobilisations"}}
{{/if}}
</dl>
</fieldset>
<p class="submit">
{{:button type="submit" name="proceed" label="Confirmer" shape="right" class="main"}}
</p>
</form>
{{:admin_footer}}

View file

@ -1,24 +1,13 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{:admin_header title="Immobilisations et amortissements" custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if $_GET.type_immo == null}} {{if $_GET.type_immo == null}}
{{:assign type_immo="managed"}} {{:assign type_immo="encours"}}
{{else}} {{else}}
{{:assign type_immo=$_GET.type_immo}} {{:assign type_immo=$_GET.type_immo}}
{{/if}} {{/if}}
{{if $type_immo == "managed"}}
{{:admin_header title="Immobilisations en cours d'amortissement" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "amortized"}}
{{:admin_header title="Immobilisations amorties" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "archived"}}
{{:admin_header title="Immobilisations archivées" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "other"}}
{{:admin_header title="Autres immobilisations" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "unfinished"}}
{{:admin_header title="Immobilisations en cours de constitution" custom_css="./style.css" current="module_amortization"}}
{{/if}}
{{:include file="_nav.html" current="index" subcurrent="%s"|args:$type_immo}} {{:include file="_nav.html" current="index" subcurrent="%s"|args:$type_immo}}
{{if $_GET.ok}} {{if $_GET.ok}}
@ -45,13 +34,11 @@
{{/select}} {{/select}}
{{/load}} {{/load}}
{{if $type_immo == "other"}} {{if $type_immo == "autre"}}
{{:include file="_immobilisations_autres.html"}} {{:include file="_immobilisations_autres.html"}}
{{elseif $type_immo == "archived"}} {{elseif $type_immo == "sortie"}}
{{:include file="_archives.html"}} {{:include file="_archives.html"}}
{{elseif $type_immo == "unfinished"}} {{elseif $type_immo == "encours" || $type_immo == "amortie"}}
{{:include file="_unfinished.html"}}
{{elseif $type_immo == "managed" || $type_immo == "amortized"}}
{{:include file="_immobilisations.html"}} {{:include file="_immobilisations.html"}}
{{/if}} {{/if}}

View file

@ -1,5 +1,5 @@
name="Amortissements" name="Amortissements"
description="Immobilisations et amortissements\nversion 0.32" description="Gestion des amortissements pour le logiciel de comptabilité Paheko"
author="Jean-Christophe Engel" author="Jean-Christophe Engel"
author_url="https://gitea.zaclys.com/lesanges" author_url="https://gitea.zaclys.com/lesanges"
home_button=false home_button=false

View file

@ -3,44 +3,33 @@
{{* {{*
Lister les écritures d'amortissement indépendantes Lister les écritures d'amortissement indépendantes
et proposer des les attacher à l'immo sélectionnée et proposer des les attacher à l'immo sélectionnée
@param immo_line_id = id de la ligne d'immo @param immo_id = id de la ligne d'immo
*}} *}}
{{* récupérer les infos de l'immobilisation *}} {{* récupérer les infos de l'immobilisation *}}
{{#select {{#select
line.id as immo_id,
line.debit as montant,
trans.id as trans_id,
trans.label as label, trans.label as label,
line.label as line_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;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
assign=ligne_immo assign=ligne_immo
}} }}
{{else}} {{else}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_line_id}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{:include file="_get_config.html" keep="module.config"}}
{{if $_POST.unhide == null}}
{{: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)"}}
{{else}}
{{:assign filter_condition="1"}}
{{/if}}
{{* lister les écritures d'amortissement *}}
{{#select {{#select
line.id as amort_line_id, line.id as l_id,
line.id_transaction as amort_trans_id, line.id_transaction as t_id,
line.credit as amort_amount, line.credit as amort_amount,
line.label as line_label, line.label as l_label,
trans.date as trans_date, trans.date as t_date,
trans.label as trans_label, trans.label as t_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,80 +38,39 @@
INNER JOIN acc_accounts AS account ON account.id = line.id_account 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_transactions AS trans ON trans.id = line.id_transaction
INNER JOIN acc_years AS y ON y.id = trans.id_year 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 WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16)
ORDER BY trans.date, trans.label; ORDER BY trans.date, trans.label;
!filter_condition=$filter_condition assign=autre_amort
assign="amort"
}} }}
{{* voir s'il existe des écritures liées avec un numéro de compte d'immobilisation *}}
{{#select {{#select
links.id_transaction, id_transaction,
links.id_related, id_related
trans.id AS trans_id FROM acc_transactions_links
FROM acc_transactions_links AS links WHERE id_transaction = :id_amort OR id_related = :id_amort;
INNER JOIN acc_transactions AS trans ON ( :id_amort=$t_id
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 keep=false}} {{:assign var="autres_amortissements." value=$autre_amort}}
{{/load}}
{{if $keep}}
{{:assign var="autres_amortissements." value=$amort}}
{{/if}}
{{else}}
{{:assign var="autres_amortissements." value=$amort}}
{{/select}} {{/select}}
{{/select}} {{/select}}
{{:admin_header title="Amortissements non rattachés" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Amortissements non rattachés" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include {{:include
file="_nav.html" file="_nav.html"
current="index" current="index"
subcurrent="other" subcurrent="autre"
subsubcurrent="amortization" subsubcurrent="amortization"
type_immo="other" type_immo="autre"
autres_amort=$autres_amortissements autres_amort=$autres_amortissements
}} }}
{{/if}} {{/if}}
{{if $_POST.unhide != null}}
{{:assign checked="checked"}}
{{/if}}
<form method="post" action="">
<fieldset>
{{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher toutes les écritures" }}
</fieldset>
</form>
{{if $autres_amortissements != null}} {{if $autres_amortissements != null}}
<section class="amortissement"> <section class="amortissement">
<h3 class="ruler">Immobilisation « {{$ligne_immo.label}}{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $ligne_immo.label}} — {{$ligne_immo.line_label}}{{/if}} »</h3> <h3 class="center-block ruler">Immobilisation « {{$ligne_immo.label}} »</h3>
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
@ -137,19 +85,22 @@
</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.amort_trans_id}} {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.t_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.amort_trans_id}}</a></td> <td class="num"><a href={{$trans_url}}>#{{$line.t_id}}</a></td>
<td>{{$line.trans_date|date_short}}</td> <td>{{$line.t_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}}</td>
<td>{{$line.trans_label}} <td>{{if $line.l_label == null}}
{{if $line.line_label != null && $line.line_label != $line.trans_label}} - {{$line.line_label}}{{/if}} {{$line.t_label}}
{{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_line_id=%d&immo_line_id=%d"|args:$line.amort_line_id:$_GET.immo_line_id shape="plus"}} {{:linkbutton label="Attacher" href="attach_amort.html?amort_id=%d&immo_id=%d"|args:$line.l_id:$_GET.immo_id shape="plus"}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
@ -159,15 +110,3 @@
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
{{:admin_footer}} {{:admin_footer}}
<script type="text/javascript">
function changeVisibility(evt, idcheck = 'f_unhide_1') {
this.form.dispatchEvent(new Event('submit'));
this.form.submit();
}
(function () {
document.getElementById('f_unhide_1').onclick = changeVisibility;
})();
</script>

View file

@ -2,82 +2,53 @@
{{* {{*
Créer une écriture d'amortissement Créer une écriture d'amortissement
@param immo_line_id : id de la ligne d'immobilisation @param immo_id : id de la ligne d'immobilisation
*}} *}}
{{* Infos de l'immobilisation *}} {{* Infos de l'immobilisation *}}
{{#select {{#select
line.id as immo_id,
line.id_account as account_id, line.id_account as account_id,
line.debit as montant, line.debit as montant,
line.id_project as project_id, line.id_project as project_id,
line.label as line_label,
trans.id as trans_id, trans.id as trans_id,
trans.label, trans.label,
trans.date, trans.date,
account.code as account_code y.id as year_id,
y.start_date,
y.end_date,
project.label as project_label
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
INNER JOIN acc_accounts AS account ON line.id_account = account.id INNER JOIN acc_years AS y ON trans.id_year = y.id
LEFT JOIN acc_projects AS project ON line.id_project = project.id LEFT JOIN acc_projects AS project ON line.id_project = project.id
WHERE line.id = :line_id; WHERE line.id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id|intval
assign=ligne_immo assign=ligne_immo
}} }}
{{else}} {{else}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_line_id}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{:assign date_debut=$ligne_immo.date}} {{:assign date_debut=$ligne_immo.date}}
{{:assign var="amort_label" value="Amortissement %s"|args:$ligne_immo.label}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $ligne_immo.label}}
{{:assign amort_label=$amort_label|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}} {{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{:assign duree=$duration}} {{:assign duree=$duration}}
{{:assign date_debut=$date}} {{:assign date_debut=$date}}
{{:assign status=$status}}
{{else}} {{else}}
{{:error message="Vous devez renseigner la date de mise en service et la durée d'immobilisation"}} {{:error message="Vous devez renseigner la date de mise en service et la durée d'immobilisation"}}
{{/load}} {{/load}}
{{if $status == "amortized" || $status == "archived"}}
{{:error message="Cette immobilisation est complètement amortie ; il est impossible d'ajouter une écriture d'amortissement"}}
{{/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.trans_id
:account=$ligne_immo.account_code
}}
{{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
{{/select}}
{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}}
{{:assign solde=$ligne_immo.montant}}
{{* chercher des écritures d'amortissement liées à l'immobilisation *}} {{* chercher des écritures d'amortissement liées à l'immobilisation *}}
{{#select {{#select
l_amort.credit as amort_amount, SUM(l_amort.credit) as amort_amount,
l_amort.label as amort_label, l_amort.label as amort_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, MAX(trans.date) as amort_date,
COUNT(trans.id) as amort_number,
trans.label as trans_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,
@ -86,48 +57,20 @@
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 (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_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_transactions as trans on l_amort.id_transaction = trans.id
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 account.code LIKE '28%'
l_immo.id = :line_id ORDER BY trans.date DESC LIMIT 1;
AND account.code LIKE '28%' :line_id = $_GET.immo_id|intval
ORDER BY trans.date; assign=amort_line
:line_id = $_GET.immo_line_id|intval
assign="amort_line"
}} }}
{{#load type="link"
where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id"
order="$$.date"
assign="line"
:immo_line_id=$_GET.immo_line_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}}
{{/select}} {{/select}}
{{if $amort_line.amort_number == 0}}
{{:assign total_amort=0}}
{{:assign valeur_residuelle=$ligne_immo.montant}}
{{#foreach from=$linked_amort}}
{{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}}
{{:assign total_amort="%d+%d"|math:$total_amort:$amort_amount}}
{{:assign date_debut=$amort_date}}
{{:assign code_amort=$account_code}}
{{:assign amort_account_label=$account_label}}
{{:assign amort_label=$amort_label}}
{{/foreach}}
{{if $valeur_residuelle == 0}}
{{:error message="Cette immobilisation est complètement amortie ; il est impossible d'ajouter une écriture d'amortissement"}}
{{/if}}
{{if $total_amort == 0}}
{{* 1er amortissement *}} {{* 1er amortissement *}}
{{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}} {{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}}
{{#select code, label from acc_accounts where id = :id; :id=$ligne_immo.account_id assign=amort_account}} {{#select code, label from acc_accounts where id = :id; :id=$ligne_immo.account_id assign=amort_account}}
@ -137,12 +80,15 @@
code_immo=$amort_account.code code_immo=$amort_account.code
keep="code_amort" keep="code_amort"
}} }}
{{:assign var="amort_account_label" value="Amortissement %s"|args:$amort_account.label}} {{:assign var=amort_label value="Amortissement %s"|args:$amort_account.label}}
{{:assign var=libelle value="Amortissement %s"|args:$ligne_immo.label}} {{:assign var=libelle value="Amortissement %s"|args:$ligne_immo.label}}
{{else}} {{else}}
{{* amortissements suivants *}} {{* amortissements suivants *}}
{{:assign date_debut=$date_debut|strtotime}} {{:assign date_debut=$amort_line.amort_date|strtotime}}
{{:assign date_debut="%d+(60*60*24)"|math:$date_debut|date:"Y-m-d"}} {{:assign date_debut="%d+(60*60*24)"|math:$date_debut|date:"Y-m-d"}}
{{:assign var=code_amort value=$amort_line.account_code}}
{{:assign var=amort_label value=$amort_line.account_label}}
{{:assign var=libelle value=$amort_line.amort_label}}
{{/if}} {{/if}}
{{* {{*
@ -152,7 +98,7 @@
{{:assign msg_years=""}} {{:assign msg_years=""}}
{{#years closed=false order="start_date" where="start_date <= :debut AND :debut <= end_date" {{#years closed=false order="start_date" where="start_date <= :debut AND :debut <= end_date"
:debut=$date_debut assign=years.}} :debut=$date_debut assign=years.}}
{{if $total_amort == 0}} {{if $amort_line.amort_number == 0}}
{{:assign ts_debut=$date_debut|strtotime}} {{:assign ts_debut=$date_debut|strtotime}}
{{else}} {{else}}
{{:assign ts_debut=$start_date|strtotime}} {{:assign ts_debut=$start_date|strtotime}}
@ -201,8 +147,10 @@
- que le compte d'amortissement débute par un préfixe correct (280, 281, ...) - que le compte d'amortissement débute par un préfixe correct (280, 281, ...)
- est présent dans le PC de l'exercice correspondant à la date - est présent dans le PC de l'exercice correspondant à la date
*}} *}}
{{:include file="_get_config.html" keep="module.config.prefixes"}} {{:read file="./defaut.json" assign="config_json"}}
{{#foreach from=$module.config.prefixes item="code"}} {{:assign config_defaut=$config_json|json_decode}}
{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
{{#foreach from=$prefix_array item="code"}}
{{* déterminer le numéro du compte d'amortissement associé au compte d'immobilisation *}} {{* déterminer le numéro du compte d'amortissement associé au compte d'immobilisation *}}
{{:include {{:include
file="./_get_amort_code.html" file="./_get_amort_code.html"
@ -221,11 +169,11 @@
}} }}
{{if $account_ok == null}} {{if $account_ok == null}}
{{:assign compte=$credit_account|implode:""}} {{:assign compte=$credit_account|implode:""}}
{{:redirect url="add_account.html?account=%s&chart=%s&immo_line_id=%s"|args:$compte:$selected_chart:$_GET.immo_line_id}} {{:redirect url="add_account.html?account=%s&chart=%s&immo_id=%s"|args:$compte:$selected_chart:$_GET.immo_id}}
{{/if}} {{/if}}
{{* vérifier que le montant ne dépasse pas le solde restant *}} {{* vérifier que le montant ne dépasse pas le solde restant *}}
{{:assign solde="%d-%d"|math:$ligne_immo.montant:$total_amort}} {{:assign solde="%d-%d"|math:$ligne_immo.montant:$amort_line.amort_amount}}
{{if $_POST.montant|trim|money_int > $solde|intval}} {{if $_POST.montant|trim|money_int > $solde|intval}}
{{:assign solde=$solde|money_raw}} {{:assign solde=$solde|money_raw}}
{{:error message="Le montant indiqué « %s » dépasse le solde à amortir « %s »"|args:$_POST.montant:$solde}} {{:error message="Le montant indiqué « %s » dépasse le solde à amortir « %s »"|args:$_POST.montant:$solde}}
@ -235,15 +183,15 @@
{{:assign {{:assign
var="lines." var="lines."
debit=$_POST.montant debit=$_POST.montant
account=$debit_account|keys|value:0 account=$debit_account|keys|key:0
id_project=$ligne_immo.project_id id_project=$_GET.project_id
label=$_POST.designation label=$_POST.designation
}} }}
{{:assign {{:assign
var="lines." var="lines."
credit=$_POST.montant credit=$_POST.montant
account=$credit_account|keys|value:0 account=$credit_account|keys|key:0
id_project=$ligne_immo.project_id id_project=$_GET.project_id
label=$_POST.designation label=$_POST.designation
}} }}
{{:api {{:api
@ -259,37 +207,14 @@
linked_transactions=$ligne_immo.trans_id|intval linked_transactions=$ligne_immo.trans_id|intval
}} }}
{{* enregistrer la liaison des lignes *}} {{:redirect force="amortization.html?immo_id=%s&ok=1&msg=amortissement"|args:$_GET.immo_id}}
{{#select
trans.id AS trans_id,
line.id AS line_id
FROM acc_transactions AS trans
INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
WHERE trans.id = :trans_id
;
:trans_id = $result.id
}}
{{:assign amort_trans_id=$trans_id}}
{{:assign amort_line_id=$line_id}}
{{/select}}
{{if $amort_trans_id != null}}
{{:save
key=""|uuid
type="link"
immo_line_id=$_GET.immo_line_id|intval
amort_line_id=$amort_line_id|intval
amort_trans_id=$result.id
}}
{{/if}}
{{:redirect force="amortization.html?immo_line_id=%s&ok=1&msg=amortissement"|args:$_GET.immo_line_id}}
{{/form}} {{/form}}
{{:admin_header title="Ajout amortissement" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Ajout amortissement" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="index" subcurrent="managed" subsubcurrent="amortization"}} {{:include file="_nav.html" current="index" subcurrent="encours" subsubcurrent="amortization"}}
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
@ -300,9 +225,9 @@
{{* montant de l'amortissement *}} {{* montant de l'amortissement *}}
{{:assign montant_amort="%f/%f/365*%d"|math:$ligne_immo.montant:$duree:$nbjours|intval}} {{:assign montant_amort="%f/%f/365*%d"|math:$ligne_immo.montant:$duree:$nbjours|intval}}
{{:assign montant_amort="min(%f, %d-%d)"|math:$montant_amort:$ligne_immo.montant:$total_amort}} {{:assign montant_amort="min(%f, %d-%d)"|math:$montant_amort:$ligne_immo.montant:$amort_line.amort_amount}}
{{:assign var="debit_account.6811" value="6811 — Dot. aux amortissements des immobilisations"}} {{:assign var="debit_account.6811" value="6811 — Dot. aux amortissements des immobilisations"}}
{{:assign var="credit_account.%s"|args:$code_amort value="%s — "|args:$code_amort|cat:$amort_account_label}} {{:assign var="credit_account.%s"|args:$code_amort value="%s — "|args:$code_amort|cat:$amort_label}}
{{* -------------------------------------------------------------------------------- *}} {{* -------------------------------------------------------------------------------- *}}
@ -316,7 +241,7 @@
<dl> <dl>
{{:input type="select" default=$selected_year name="id_year" label="Exercice" required=true default_empty="— Faire un choix —" options=$open_years}} {{:input type="select" default=$selected_year name="id_year" label="Exercice" required=true default_empty="— Faire un choix —" options=$open_years}}
{{:input type="date" name="date_amort" label="Date" required=true default=$date_amort|date_short}} {{:input type="date" name="date_amort" label="Date" required=true default=$date_amort|date_short}}
{{:input type="text" name="designation" label="Libellé" required=true default=$amort_label size="50"}} {{:input type="text" name="designation" label="Désignation" required=true default=$libelle}}
{{:input type="money" name="montant" label="Montant" required=true default=$montant_amort}} {{:input type="money" name="montant" label="Montant" required=true default=$montant_amort}}
{{:input {{:input
type="list" type="list"
@ -329,7 +254,7 @@
{{:input {{:input
type="list" type="list"
name="credit_account" name="credit_account"
label="Compte d'amortissement (28xx)" label="Compte d'amortissement (280xx ou 281xx)"
required=true required=true
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"28*":$selected_year target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"28*":$selected_year
default=$credit_account default=$credit_account
@ -337,7 +262,7 @@
<div id="donnees" class="hidden"> <div id="donnees" class="hidden">
{{:input type="text" name="montant_immo" default=$ligne_immo.montant}} {{:input type="text" name="montant_immo" default=$ligne_immo.montant}}
{{:input type="text" name="duree_amort" default=$duree}} {{:input type="text" name="duree_amort" default=$duree}}
{{:input type="text" name="somme_amort" default=$total_amort}} {{:input type="text" name="somme_amort" default=$amort_line.amort_amount}}
{{:input type="select" name="years_data" options=$years_data}} {{:input type="select" name="years_data" options=$years_data}}
</div> </div>
</dl> </dl>

View file

@ -14,10 +14,6 @@
"description": "durée de l'amortissement en années", "description": "durée de l'amortissement en années",
"type": "integer" "type": "integer"
}, },
"amount" : {
"description": "montant de l'immobilisation si besoin",
"type": ["integer", "null"]
},
"date" : { "date" : {
"description" : "date de mise en service de l'immobilisation", "description" : "date de mise en service de l'immobilisation",
"type" : ["string", "null"], "type" : ["string", "null"],

View file

@ -80,7 +80,7 @@ function setDateEnd(id_exercices, id_date, id_years) {
// renvoyer la valeur numérique d'un montant formaté en € // renvoyer la valeur numérique d'un montant formaté en €
function getNumber(text) { function getNumber(text) {
return Number(text.replace(/[^0-9,]/g, '').replace(/,/, '.')); return Number(text.replace(/ /g, '').replace(/,/, '.').replace(/€/, ''));
} }
// calculer le montant d'un amortissement // calculer le montant d'un amortissement
@ -100,6 +100,7 @@ function displayAmort(id_immo, id_duree, id_amort, id_years, id_exercices, id_mo
{ {
const div_erreur = document.getElementById(id_erreur); const div_erreur = document.getElementById(id_erreur);
div_erreur.setAttribute('class', 'hidden'); div_erreur.setAttribute('class', 'hidden');
// document.getElementById(id_erreur).setAttribute('class', 'hidden');
let case_montant = document.getElementById(id_montant); let case_montant = document.getElementById(id_montant);
const selected_year = document.getElementById(id_exercices).value; const selected_year = document.getElementById(id_exercices).value;
if (selected_year == '') { if (selected_year == '') {
@ -118,10 +119,12 @@ function displayAmort(id_immo, id_duree, id_amort, id_years, id_exercices, id_mo
} }
if (id_date != null) { if (id_date != null) {
const date_choisie = str2sec(document.getElementById(id_date).value); const date_choisie = str2sec(document.getElementById(id_date).value);
console.log("date_choisie = " + date_choisie + ", date_debut=" + date_debut + ", date_fin = " + date_fin);
if (date_debut <= date_choisie && date_choisie <= date_fin) { if (date_debut <= date_choisie && date_choisie <= date_fin) {
date_fin = date_choisie; date_fin = date_choisie;
} else { } else {
div_erreur.setAttribute('class', ''); div_erreur.setAttribute('class', '');
// document.getElementById(id_erreur).setAttribute('class', '');
} }
} }
const montant_immo = Number(document.getElementById(id_immo).value); const montant_immo = Number(document.getElementById(id_immo).value);
@ -136,134 +139,3 @@ function setSelectorYear(button_names, f_years_selector) {
const selected_year = document.getElementById(f_years_selector).value; const selected_year = document.getElementById(f_years_selector).value;
setAccountYear(button_names, selected_year); setAccountYear(button_names, selected_year);
} }
// config : gestion des ajouts/suppression comptes immo
// Associer au bouton « Enlever » de chaque ligne l'action de suppression de la ligne
function initLine(row) {
var removeBtn = row.querySelector('button[name="remove_line"]');
removeBtn.onclick = () => {
let count = removeBtn.closest("table").querySelectorAll('tbody tr').length;
var min = removeBtn.getAttribute('min');
if (count <= min) {
alert("Il n'est pas possible d'avoir moins de " + min + " ligne(s).");
return false;
}
row.parentNode.removeChild(row);
return true;
};
}
// Associer au bouton « Ajouter » de chaque table l'action d'ajouter une ligne
function addLine(button, codes) {
button.onclick = () => {
let lines = button.closest("table").querySelectorAll('tbody tr');
let line = lines[lines.length - 1];
let newNode = line.cloneNode(true);
// Réinitialiser le sélecteur de compte
let selectButton = newNode.querySelector('.input-list button');
let url = selectButton.value;
let new_url = url.replace(/codes=[0-9]+\*?/, "codes=" + codes);
selectButton.value = new_url;
// gestionnaire d'événement du sélecteur
selectButton.onclick = () => {
g.current_list_input = selectButton.parentNode;
let url = selectButton.value + (selectButton.value.indexOf('?') > 0 ? '&' : '?') + '_dialog';
g.openFrameDialog(url);
return false;
};
// réinitialiser le libellé associé au sélecteur
let lib = newNode.querySelector('.input-list span.label');
lib.innerText = '';
// ajouter la nouvelle ligne
line.parentNode.appendChild(newNode);
initLine(newNode);
};
}
// afficher le montant
function addAmountLine(amount, label, parent) {
const node = document.createElement("tr");
const col_compte = document.createElement("td");
col_compte.classList.add("label");
const col_montant = document.createElement("td");
col_montant.classList.add("money");
const montant = document.createTextNode(new Intl.NumberFormat("fr-FR", { style: "currency", currency: "EUR" }).format(amount / 100., ));
col_compte.appendChild(document.createTextNode(label));
col_montant.appendChild(montant);
node.appendChild(col_compte);
node.appendChild(col_montant);
parent.appendChild(node);
}
// calculer et afficher le total des lignes sélectionnées
function computeTotal(id_total, id_url) {
// calculer le total par compte et le total général
let total = new Object;
let total_general = 0;
const transactions = [];
let lines = document.querySelectorAll('.list tbody tr');
for (const line of lines) {
let button = line.querySelector('input[type=checkbox]');
if (button.checked) {
let money = line.querySelector('.money');
let code = line.querySelector('.account_code a').innerText;
if (code in total) {
total[code] += getNumber(money.innerText) * 100;
} else {
total[code] = getNumber(money.innerText) * 100;
}
total_general += getNumber(money.innerText) * 100;
const number = line.querySelector('.num a').innerText.slice(1);
transactions.push(number);
}
}
// afficher les totaux
const body = document.getElementById(id_total).querySelector('table tbody');
const new_body = document.createElement('tbody');
for (const code in total) {
addAmountLine(total[code], "Compte " + code + " : ", new_body);
}
body.parentNode.replaceChild(new_body, body);
// et le total général
const foot = document.getElementById(id_total).querySelector('table tfoot');
if (Object.keys(total).length > 1) {
const new_foot = document.createElement('tfoot');
addAmountLine(total_general, "Total : ", new_foot);
foot.parentNode.replaceChild(new_foot, foot);
} else {
// pas besoin de total général si moins de 2 comptes
for (const e of foot.children) {
foot.removeChild(e);
}
}
// mettre à jour les paramètres de l'url
let url = document.getElementById(id_url);
let new_href = url.href.replace(/trans=.*/, 'trans=' + Object.values(transactions));
url.href = new_href;
}
// dupliquer la dernière ligne d'une table
function copyLine(button) {
button.onclick = () => {
let lines = button.closest("table").querySelectorAll('tbody tr');
let line = lines[lines.length - 1];
let newNode = line.cloneNode(true);
let libelle = newNode.querySelector('input');
libelle.value = '';
// ajouter la nouvelle ligne
line.parentNode.appendChild(newNode);
initLine(newNode);
};
}

View file

@ -34,18 +34,7 @@ h2[class="aide"], h3[class="aide"] {
content: ' :'; content: ' :';
} }
.informations dl.describe {
grid-template-columns : 20rem 1fr;
}
.informations dl.describe > dt { .informations dl.describe > dt {
flex: 0 0 15rem;
margin-right: 0;
white-space: nowrap;
}
.informations dl.describe > dd {
flex: 0 0 calc(100% - 20rem);
margin-right: 0; margin-right: 0;
} }
@ -53,30 +42,6 @@ nav.amort aside {
margin-top : 0; margin-top : 0;
} }
fieldset.shortFormLeft div.informations { .describe dt::after {
border: 1px solid var(--gLightBorderColor); content: ' :';
background: rgba(var(--gSecondColor), 0.2);
border-radius: .5em;
}
.strong {
font-weight: bold;
}
table.montant td.label {
text-align : right;
padding-right : 1em;
}
table.list tbody tr.ignored:nth-child(odd) {
font-style: italic;
background: rgba(255, 255, 200, 0.2);
}
table.list tbody tr.ignored:nth-child(even) {
font-style: italic;
background: rgba(255, 255, 200, 0.5);
}
html.dialog.dark {
filter: none !important;
} }

View file

@ -1,339 +0,0 @@
{{* -*- brindille -*- *}}
{{:include file="_get_config.html" keep="module.config.prefixes"}}
{{#years closed=false order="start_date" assign=years.}}
{{:assign ts_debut=$start_date|strtotime}}
{{:assign ts_fin=$end_date|strtotime}}
{{:assign debut=$start_date|date_short}}
{{:assign fin=$end_date|date_short}}
{{:assign var="years_data.%d"|args:$id value=$ts_debut|cat:" "|cat:$ts_fin}}
{{:assign var="open_years.%d"|args:$id value=$label|cat:" ("|cat:$debut|cat:" - "|cat:$fin|cat:")"}}
{{if $ts_debut <= $now && $now <= $ts_fin}}
{{:assign selected_year=$id}}
{{/if}}
{{else}}
{{:error message="Aucun exercice ouvert"}}
{{/years}}
{{* déterminer les comptes d'immo en cours *}}
{{:include file="_get_config.html" keep="module.config.unfinished"}}
{{:assign condition="("}}
{{#foreach from=$module.config.unfinished item="elem"}}
{{if $elem.code != null}}
{{:assign code=$elem.code}}
{{else}}
{{:assign code=$elem}}
{{/if}}
{{:assign code=$code|cat:"%"|quote_sql}}
{{:assign condition=$condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign condition=$condition|cat:"0)"}}
{{* détails des écritures paramètres *}}
{{:assign trans=$_GET.trans|explode:","}}
{{:assign var="trans_list" value=$trans|map:quote_sql}}
{{:assign trans_list=$trans_list|implode:","}}
{{:assign trans_list="("|cat:$trans_list|cat:")"}}
{{:assign condition=$condition|cat:" AND trans.id IN "|cat:$trans_list}}
{{:assign condition=$condition|cat:" AND NOT (trans.status & 16)"}}
{{#select
trans.id as trans_id,
trans.label AS trans_label,
trans.date AS trans_date,
SUM(line.debit) AS line_debit,
account.code AS account_code,
account.label AS account_label,
line.id_project as project_id
FROM acc_transactions AS trans
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
WHERE !condition
GROUP BY trans.id
;
!condition=$condition
}}
{{:assign var="transactions.%s"|args:$trans_id
amount=$line_debit
date=$trans_date
code=$account_code
label=$account_label
project=$project_id
}}
{{if $max_date == null || $trans_date > $max_date}}
{{:assign max_date=$trans_date}}
{{/if}}
{{/select}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="transfer"}}
{{* vérifier que la date de mise en service est postérieure aux dates d'acquisition *}}
{{if $_POST.date_mes|parse_date < $max_date}}
{{:assign dacq=$max_date|date_short}}
{{:error message="La date de mise en service (%s) doit être postérieure à la date d'acquisition d'immobilisation la plus récente (%s) !"|args:$_POST.date_mes:$dacq}}
{{/if}}
{{* vérifier que la date de mise en service est située dans l'exercice sélectionné *}}
{{:assign ts_date = $_POST.date_mes|parse_date|strtotime}}
{{:assign ok=false}}
{{#foreach from=$years}}
{{if $id == $_POST.id_year}}
{{:assign selected_chart=$id_chart}}
{{if $start_date|strtotime <= $ts_date && $ts_date <= $end_date|strtotime}}
{{:assign ok=true}}
{{:break}}
{{/if}}
{{/if}}
{{/foreach}}
{{if ! $ok}}
{{:error message="La date saisie n'est pas dans l'exercice choisi !"}}
{{/if}}
{{if ! $_POST.amortir}}
{{* ne pas amortir *}}
{{:assign duration=0}}
{{:assign date_debut=$_POST.date_achat|parse_date}}
{{:assign status="ignored"}}
{{else}}
{{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}}
{{:assign date_debut=$_POST.date_mes|parse_date}}
{{:assign duration=$_POST.duree|intval}}
{{:assign status="managed"}}
{{/if}}
{{* comptes de débit *}}
{{#foreach from=$_POST.credit_accounts key="rang" item="elem"}}
{{:include
file="_get_codes.html"
account=$elem
keep="account_code"
}}
{{:assign debit_account=$account_code|keys|value:0}}
{{:assign var="amount" from="_POST.credit_lines.%s"|args:$rang}}
{{:assign var="label" from="_POST.line_labels.%s"|args:$rang}}
{{:assign
var="lines."
account=$debit_account
credit=$amount
label=$label
}}
{{/foreach}}
{{* compte de crédit *}}
{{:include
file="_get_codes.html"
account=$_POST.debit_account
keep="account_code"
}}
{{:assign credit_account=$account_code|keys|value:0}}
{{:assign var="amount" from="_POST.debit_lines.%s"|args:0}}
{{:assign count=$_POST.line_labels|count}}
{{:assign count="%d-1"|math:$count}}
{{:assign var="label" from="_POST.line_labels.%s"|args:$count}}
{{:assign
var="lines."
account=$credit_account
debit=$amount
label=$label
}}
{{* vérifier :
- que le compte d'immo débute par un préfixe correct (20, 21, ...)
- est présent dans le PC de l'exercice correspondant à la date
*}}
{{:include
file="_check_account.html"
account=$account_code
chart_id=$selected_chart
prefix_array=$module.config.prefixes
keep="account_ok"
}}
{{if $account_ok == null}}
{{:assign compte=$credit_account|implode:""}}
{{:error message="Le compte « %s » n'est pas un compte d'immobilisation ou n'est pas dans le plan comptable de l'exercice choisi"|args:$compte}}
{{/if}}
{{* écritures liées *}}
{{:assign var="linked_transactions" value=$transactions|keys}}
{{* enregistrer l'écriture *}}
{{:api
method="POST"
path="accounting/transaction"
assign="result"
id_year=$_POST.id_year
type="advanced"
date=$_POST.date_mes
label=$_POST.designation|trim
lines=$lines
linked_transactions=$linked_transactions
}}
{{:assign lines_count=$lines|count}}
{{:assign lines_count="%d-1"|math:$lines_count}}
{{:assign var="immo_line_id" from="result.lines.%s.id"|args:$lines_count}}
{{* enregistrer les infos de l'immobilisation *}}
{{:save
key=""|uuid
validate_schema="schema.json"
type="immo"
line=$immo_line_id
duration=$duration
date=$date_debut
status=$status
}}
{{if $_POST.amortir}}
{{:assign type_immo="managed"}}
{{else}}
{{:assign type_immo="other"}}
{{/if}}
{{:redirect force="index.html?ok=1&msg=immobilisation&type_immo=%s"|args:$type_immo}}
{{/form}}
{{:admin_header title="Transfert d'immobilisation en cours" custom_css="./style.css" current="module_amortization"}}
{{if ! $dialog}}
{{:include file="_nav.html" current="index" subcurrent="unfinished" subsubcurrent="transfer"}}
{{/if}}
{{:form_errors}}
{{* formulaire d'ajout d'immobilisation *}}
{{if $_GET.trans == null}}
{{:error message="Vous n'avez sélectionné aucune écriture !"}}
{{/if}}
{{if $max_date|strtotime > $now}}
{{:assign default_date=$max_date}}
{{else}}
{{:assign default_date=$now|date_short}}
{{/if}}
{{#select id,label FROM acc_projects WHERE archived = 0;}}
{{:assign var="projects.%d"|args:$id value=$label}}
{{/select}}
{{#foreach from=$module.config.prefixes item="code"}}
{{:assign var="pattern_array." value="%s*"|args:$code}}
{{/foreach}}
{{:assign var="patterns" value=$pattern_array|implode:"|"}}
<div id="erreur" class="hidden">
<p class="block error">La date choisie n'est dans aucun exercice ouvert !</p>
</div>
<form method="post" action="">
<fieldset>
<legend>Données de l'immobilisation</legend>
<dl>
{{:input type="select" name="id_year" label="Exercice" default=$selected_year required=true
default_empty="— Faire un choix —" options=$open_years}}
{{:input type="date" name="date_mes" label="Date de mise en service" required=true default=$default_date}}
{{:input type="text" name="designation" label="Libellé" required=true}}
</dl>
</fieldset>
<fieldset>
<legend>Comptes</legend>
<dl>
<table class="list transaction-lines">
<thead>
<tr>
<th>Compte</th>
<th>Débit</th>
<th>Crédit</th>
<th>Libellé ligne</th>
<th>Projet</th>
</tr>
</thead>
<tbody>
{{:assign total=0}}
{{#foreach from=$transactions key="id"}}
{{:assign total="%f+%f"|math:$total:$amount}}
{{:assign current_account=null}}
{{:assign var="current_account.%s"|args:$code value="%s — %s"|args:$code:$label}}
<tr>
<td>
{{:input
type="list"
name="credit_accounts[]"
required=true
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:$code:$selected_year
default=$current_account
}}
</td>
<td>{{:input name="credit_lines[]" type="text" class="money" size="8" default=$amount|money}}</td>
<td>{{:input name="debit_lines[]" type="text" class="money" size="8" disabled=true}}</td>
<td>{{:input type="text" name="line_labels[]" size="40"}}</td>
<td>
{{if $projects != null}}
{{:input type="select" name="id_project" options=$projects default_empty="— Aucun —"}}
{{/if}}
</td>
</tr>
{{/foreach}}
</tbody>
<tfoot>
<tr>
<td>
{{:input
type="list"
name="debit_account"
label="Compte d'immobilisation amortissable"
required=true
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:$patterns:$selected_year
}}
</td>
<td>{{:input name="credit_lines[]" type="text" class="money" size="8" disabled=true}}</td>
<td>{{:input name="debit_lines[]" type="text" class="money" size="8" default=$total|money}}</td>
<td>{{:input type="text" name="line_labels[]" size="40"}}</td>
<td>
{{if $projects != null}}
{{:input type="select" name="id_project" options=$projects default_empty="— Aucun —"}}
{{/if}}
</td>
</tr>
</tfoot>
</table>
<div id="donnees" class="hidden">
{{:input type="select" name="years_data" options=$years_data}}
</div>
</dl>
</fieldset>
<fieldset>
<legend>Amortissement</legend>
<dl>
{{:input id="amortir" type="checkbox" value=1 name="amortir" label="Amortir cette immobilisation sur une ou plusieurs années" checked="checked" help="Dé-cocher pour ne pas amortir"}}
<div id="div_amort">
{{:input type="number" name="duree" label="Durée d'amortissement" required=true min=0 default=1 suffix="année(s)"}}
</div>
</dl>
</fieldset>
<p class="submit">
{{:button type="submit" name="transfer" label="Transférer" shape="right" class="main"}}
</p>
</form>
{{:admin_footer}}
<script type="text/javascript" src="scripts.js"></script>
<script type="text/javascript">
function changeYear(evt, f_accounts = ['credit_accounts', 'debit_account'], f_years_select = 'f_id_year') {
setSelectorYear(f_accounts, f_years_select);
}
function changeVisibility(evt, idcheck = 'f_amortir_1', fields = ['div_amort']) {
toggleVisibility(idcheck, fields);
}
(function () {
document.getElementById('f_id_year').onchange = changeYear;
document.getElementById('f_amortir_1').onclick = changeVisibility;
})();
</script>

View file

@ -3,7 +3,7 @@
{{* {{*
Enregistrer les écritures de sortie du bilan Enregistrer les écritures de sortie du bilan
paramètres : paramètres :
- immo_line_id : numéro de ligne de l'écriture d'immobilisation - immo_id : numéro de ligne de l'écriture d'immobilisation
- amort_amount : montant des amortissements - amort_amount : montant des amortissements
- year : exercice de la date de sortie de l'immobilisation - year : exercice de la date de sortie de l'immobilisation
- date_mes : date de mise en service de l'immobilisation - date_mes : date de mise en service de l'immobilisation
@ -16,42 +16,37 @@
{{#select {{#select
line.debit as montant, line.debit as montant,
line.id_transaction, line.id_transaction,
trans.id AS trans_id, line.id_account,
trans.date as date_achat, trans.date as date_achat,
trans.label, trans.label,
acc.code as account_code, acc.code,
id_project id_project
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
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 line.id = :immo_line_id; WHERE line.id = :immo_id;
:immo_line_id = $_GET.immo_line_id|intval :immo_id = $_GET.immo_id|intval
assign="ligne_immo" assign="ligne_immo"
}} }}
{{/select}} {{/select}}
{{* chercher des écritures liées à l'immo courante au crédit du même compte {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
et déduire leur montant de celui de l'immo {{/load}}
{{* date de début de l'exercice *}}
{{#select start_date FROM acc_years WHERE id = :year_id; :year_id = $_GET.year}}
{{*
{{if $start_date < "2025-01-01"
*}}
{{:assign vnc_code="675"}}
{{:assign cession_code="775"}}
{{*
{{else}}
{{:assign vnc_code="657"}}
{{:assign cession_code="757"}}
{{/if}}
*}} *}}
{{: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.trans_id
:account=$ligne_immo.account_code
}}
{{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
{{/select}} {{/select}}
{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}}
{{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$_GET.amort_amount}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$_GET.amort_amount}}
{{:assign amort_comp=0}} {{* amortissement complémentaire jqà date sortie *}} {{:assign amort_comp=0}} {{* amortissement complémentaire jqà date sortie *}}
@ -93,7 +88,7 @@
account=$account account=$account
keep="account_code" keep="account_code"
}} }}
{{:assign amort_account_code=$account_code|keys|value:0}} {{:assign amort_account_code=$account_code|keys|key:0}}
{{if $valeur_nette > 0}} {{if $valeur_nette > 0}}
{{* immo non totalement amortie *}} {{* immo non totalement amortie *}}
@ -104,7 +99,7 @@
account=$_POST.comp_account account=$_POST.comp_account
keep="account_code" keep="account_code"
}} }}
{{:assign comp_account_code=$account_code|keys|value:0}} {{:assign comp_account_code=$account_code|keys|key:0}}
{{:assign libelle="Amortissement complémentaire "|cat:$ligne_immo.label}} {{:assign libelle="Amortissement complémentaire "|cat:$ligne_immo.label}}
{{:assign {{:assign
@ -130,7 +125,7 @@
account=$_POST.except_account account=$_POST.except_account
keep="account_code" keep="account_code"
}} }}
{{:assign except_account_code=$account_code|keys|value:0}} {{:assign except_account_code=$account_code|keys|key:0}}
{{:assign libelle="Amortissement exceptionnel "|cat:$ligne_immo.label}} {{:assign libelle="Amortissement exceptionnel "|cat:$ligne_immo.label}}
{{:assign {{:assign
var="lines." var="lines."
@ -170,7 +165,7 @@
account=$_POST.immo_account account=$_POST.immo_account
keep="account_code" keep="account_code"
}} }}
{{:assign immo_account_code=$account_code|keys|value:0}} {{:assign immo_account_code=$account_code|keys|key:0}}
{{:assign libelle="Sortie du bilan de "|cat:$ligne_immo.label}} {{:assign libelle="Sortie du bilan de "|cat:$ligne_immo.label}}
{{:assign {{:assign
var="lines." var="lines."
@ -192,7 +187,7 @@
account=$_POST.vnc_account account=$_POST.vnc_account
keep="account_code" keep="account_code"
}} }}
{{:assign vnc_account_code=$account_code|keys|value:0}} {{:assign vnc_account_code=$account_code|keys|key:0}}
{{:assign {{:assign
var="lines." var="lines."
account=$vnc_account_code account=$vnc_account_code
@ -223,13 +218,13 @@
account=$_POST.creance_account account=$_POST.creance_account
keep="account_code" keep="account_code"
}} }}
{{:assign creance_account=$account_code|keys|value:0}} {{:assign creance_account=$account_code|keys|key:0}}
{{:include {{:include
file="_get_codes.html" file="_get_codes.html"
account=$_POST.cession_account account=$_POST.cession_account
keep="account_code" keep="account_code"
}} }}
{{:assign cession_account=$account_code|keys|value:0}} {{:assign cession_account=$account_code|keys|key:0}}
{{:api {{:api
method="POST" method="POST"
path="accounting/transaction" path="accounting/transaction"
@ -258,78 +253,67 @@
key=""|uuid key=""|uuid
validate_schema="schema.json" validate_schema="schema.json"
type="immo" type="immo"
line=$_GET.immo_line_id|intval line=$_GET.immo_id|intval
duration=$_GET.duree_amort|intval duration=$_GET.duree_amort|intval
date=$_GET.date_mes|date:"Y-m-d" date=$_GET.date_mes|date:"Y-m-d"
status="archived" status="archived"
}} }}
{{/if}} {{/if}}
{{:redirect to="index.html?type_immo=archived"}} {{:redirect to="index.html?type_immo=sortie"}}
{{/form}} {{/form}}
{{:admin_header title="Sortie du bilan" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Sortie du bilan" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="index" subcurrent="balance_exit"}} {{:include file="_nav.html" current="index" subcurrent="balance_exit"}}
{{/if}} {{/if}}
{{:form_errors}}
{{* {{* Préparer les infos pour le formulaire *}}
Préparer les infos pour le formulaire
déterminer les comptes pour les différentes écritures
*}}
{{* déterminer les comptes pour les différentes écritures *}}
{{:include {{:include
file="./_get_amort_code.html" file="./_get_amort_code.html"
code_immo=$ligne_immo.account_code code_immo=$ligne_immo.code
keep="code_amort" keep="code_amort"
}} }}
{{* numéros de comptes ; voir info.org *}}
{{:assign vnc_code="652"}}
{{:assign cession_code="757"}}
{{:assign var="liste_codes.6811" name="comp_account"}} {{:assign var="liste_codes.6811" name="comp_account"}}
{{:assign var="liste_codes.687" name="except_account"}} {{:assign var="liste_codes.687" name="except_account"}}
{{:assign var="liste_codes.462" name="creance_account"}} {{:assign var="liste_codes.462" name="creance_account"}}
{{:assign var="liste_codes.%s"|args:$code_amort name="amort_account"}} {{:assign var="liste_codes.%s"|args:$code_amort name="amort_account"}}
{{:assign var="liste_codes.%s"|args:$ligne_immo.account_code name="immo_account"}} {{:assign var="liste_codes.%s"|args:$ligne_immo.code name="immo_account"}}
{{:assign var="liste_codes.%s"|args:$vnc_code name="vnc_account"}} {{:assign var="liste_codes.%s"|args:$vnc_code name="vnc_account"}}
{{:assign var="liste_codes.%s"|args:$cession_code name="cession_account"}} {{:assign var="liste_codes.%s"|args:$cession_code name="cession_account"}}
{{:assign condition=$liste_codes|keys|implode:","}} {{:assign condition=$liste_codes|keys|implode:","}}
{{:assign condition="acc.code IN ("|cat:$condition|cat:")"}} {{:assign condition="acc.code IN ("|cat:$condition|cat:")"}}
{{#select
chart.id
FROM acc_charts AS chart
INNER JOIN acc_years AS year ON chart.id = year.id_chart
WHERE year.id = :year_id;
:year_id = $_GET.year
}}
{{:assign chart_id=$id}}
{{/select}}
{{#select {{#select
acc.id, acc.id,
acc.code as acc_code, acc.code as acc_code,
acc.label as acc_label acc.label as acc_label,
year.label as year_label
FROM acc_accounts as acc FROM acc_accounts as acc
INNER JOIN acc_charts as chart ON chart.id = acc.id_chart INNER JOIN acc_charts as chart ON chart.id = acc.id_chart
WHERE chart.id = :chart_id AND !condition; INNER JOIN acc_years as year ON chart.id = year.id_chart
:chart_id = $chart_id WHERE year.id = 1 AND !condition;
!condition=$condition !condition=$condition
}} }}
{{:assign var="liste_codes.%s.id"|args:$acc_code value=$id}} {{:assign var="liste_codes.%s.id"|args:$acc_code value=$id}}
{{:assign var="liste_codes.%s.acc_label"|args:$acc_code value=$acc_label}} {{:assign var="liste_codes.%s.acc_label"|args:$acc_code value=$acc_label}}
{{:assign var="liste_codes.%s.year_label"|args:$acc_code value=$year_label}}
{{/select}} {{/select}}
{{#foreach from=$liste_codes key=code}} {{#foreach from=$liste_codes key=code}}
{{:assign var="%s.%s"|args:$name:$code value="%s — %s"|args:$code:$acc_label}} {{:assign var="%s.%s"|args:$name:$code value="%s — %s"|args:$code:$acc_label}}
{{/foreach}} {{/foreach}}
{{:include file="_get_config.html" keep="module.config.prefixes"}} {{:read file="./defaut.json" assign="config_json"}}
{{#foreach from=$module.config.prefixes item="code"}} {{:assign config_defaut=$config_json|json_decode}}
{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
{{#foreach from=$prefix_array item="code"}}
{{:assign var="pattern_array." value="%s*"|args:$code}} {{:assign var="pattern_array." value="%s*"|args:$code}}
{{/foreach}} {{/foreach}}
{{:assign patterns=$pattern_array|implode:"|"}} {{:assign patterns=$pattern_array|implode:"|"}}
@ -341,7 +325,7 @@
<legend>Données de l'imobilisation</legend> <legend>Données de l'imobilisation</legend>
<dl class="describe"> <dl class="describe">
<dt>Montant</dt> <dt>Montant</dt>
<dd class="money">{{$ligne_immo.montant|money_currency_html:false|raw}}</dd> <dd class="money">{{$ligne_immo.montant|money_currency:false}}</dd>
<dt>Date d'acquisition</dt> <dt>Date d'acquisition</dt>
<dd >{{$ligne_immo.date_achat|date_short}}</dd> <dd >{{$ligne_immo.date_achat|date_short}}</dd>
{{if $_GET.date_mes != $ligne_immo.date_achat|strtotime}} {{if $_GET.date_mes != $ligne_immo.date_achat|strtotime}}
@ -353,28 +337,28 @@
<dd class="num">{{$_GET.duree_amort}} ans</dd> <dd class="num">{{$_GET.duree_amort}} ans</dd>
{{/if}} {{/if}}
<dt>Montant des amortissements</dt> <dt>Montant des amortissements</dt>
<dd class="money">{{$_GET.amort_amount|money_currency_html:false|raw}} <span class="help">(à la date de début de l'exercice)</span></dd> <dd class="money">{{$_GET.amort_amount|money_currency:false}} <span class="help">(à la date de début de l'exercice)</span></dd>
<dt>Valeur nette résiduelle</dt> <dt>Valeur nette résiduelle</dt>
<dd class="money">{{$valeur_nette|money_currency_html:false|raw}} <span class="help">(à la date de début de l'exercice)</span></dd> <dd class="money">{{$valeur_nette|money_currency:false}} <span class="help">(à la date de début de l'exercice)</span></dd>
<dt>Date de sortie</dt> <dt>Date de sortie</dt>
<dd>{{$_GET.exit_date|date:"d/m/Y"}}</dd> <dd>{{$_GET.exit_date|date:"d/m/Y"}}</dd>
{{if $amort_comp > 0}} {{if $amort_comp > 0}}
{{:assign valeur_nette="%f-%f"|math:$valeur_nette:$amort_comp}} {{:assign valeur_nette="%f-%f"|math:$valeur_nette:$amort_comp}}
<dt>Amortissement complémentaire</dt> <dt>Amortissement complémentaire</dt>
<dd class="money">{{$amort_comp|money_currency_html:false|raw}} <span class="help">(jusqu'à la date de sortie)</span></dd> <dd class="money">{{$amort_comp|money_currency:false}} <span class="help">(jusqu'à la date de sortie)</span></dd>
<dt>Total des amortissements</dt> <dt>Total des amortissements</dt>
<dd class="money">{{"%f+%f"|math:$_GET.amort_amount:$amort_comp|money_currency_html:false|raw}} <span class="help">(à la date de sortie)</span></dd> <dd class="money">{{"%f+%f"|math:$_GET.amort_amount:$amort_comp|money_currency:false}} <span class="help">(à la date de sortie)</span></dd>
<dt>Valeur nette résiduelle</dt> <dt>Valeur nette résiduelle</dt>
<dd class="money">{{$valeur_nette|money_currency_html:false|raw}} <span class="help">(à la date de sortie)</span></dd> <dd class="money">{{$valeur_nette|money_currency:false}} <span class="help">(à la date de sortie)</span></dd>
{{/if}} {{/if}}
{{if $montant_cession == 0}} {{if $montant_cession == 0}}
{{if $amort_except > 0}} {{if $amort_except > 0}}
<dt>Amortissement exceptionnel</dt> <dt>Amortissement exceptionnel</dt>
<dd class="money">{{$amort_except|money_currency_html:false|raw}}</dd> <dd class="money">{{$amort_except|money_currency:false}}</dd>
{{/if}} {{/if}}
{{else}} {{else}}
<dt>Montant de la cession</dt> <dt>Montant de la cession</dt>
<dd class="money">{{$montant_cession|money_currency_html:false|raw}}</dd> <dd class="money">{{$montant_cession|money_currency:false}}</dd>
{{/if}} {{/if}}
</dl> </dl>
</div> </div>
@ -402,11 +386,11 @@
{{:input {{:input
type="list" type="list"
name="comp_account" name="comp_account"
target="!acc/charts/accounts/selector.php?codes=%s&id_chart=%s"|args:"68*":$chart_id target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"68*":$_GET.year
default=$comp_account default=$comp_account
}} }}
</td> </td>
<td>{{$amort_comp|money_currency_html:false|raw}}</td> <td>{{$amort_comp|money_currency:false}}</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
@ -414,12 +398,12 @@
{{:input {{:input
type="list" type="list"
name="amort_comp_account" name="amort_comp_account"
target="!acc/charts/accounts/selector.php?codes=%s&id_chart=%s"|args:"28*":$chart_id target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"28*":$_GET.year
default=$amort_account default=$amort_account
}} }}
</td> </td>
<td></td> <td></td>
<td>{{$amort_comp|money_currency_html:false|raw}}</td> <td>{{$amort_comp|money_currency:false}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -446,11 +430,11 @@
{{:input {{:input
type="list" type="list"
name="except_account" name="except_account"
target="!acc/charts/accounts/selector.php?codes=%s&id_chart=%s"|args:"687*":$chart_id target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"687*":$_GET.year
default=$except_account default=$except_account
}} }}
</td> </td>
<td>{{$amort_except|money_currency_html:false|raw}}</td> <td>{{$amort_except|money_currency:false}}</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
@ -458,12 +442,12 @@
{{:input {{:input
type="list" type="list"
name="amort_except_account" name="amort_except_account"
target="!acc/charts/accounts/selector.php?codes=%s&id_chart=%s"|args:"28*":$chart_id target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"28*":$_GET.year
default=$amort_account default=$amort_account
}} }}
</td> </td>
<td></td> <td></td>
<td>{{$amort_except|money_currency_html:false|raw}}</td> <td>{{$amort_except|money_currency:false}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -484,7 +468,7 @@
{{:input {{:input
type="list" type="list"
name="amort_sortie_account" name="amort_sortie_account"
target="!acc/charts/accounts/selector.php?codes=%s&id_chart=%s"|args:"28*":$chart_id target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"28*":$_GET.year
default=$amort_account default=$amort_account
}} }}
</td> </td>
@ -493,7 +477,7 @@
{{else}} {{else}}
{{:assign montant="%f+%f"|math:$_GET.amort_amount:$amort_comp}} {{:assign montant="%f+%f"|math:$_GET.amort_amount:$amort_comp}}
{{/if}} {{/if}}
<td>{{$montant|money_currency_html:false|raw}}</td> <td>{{$montant|money_currency:false}}</td>
<td></td> <td></td>
</tr> </tr>
{{if $montant_cession > 0 && $valeur_nette > 0}} {{if $montant_cession > 0 && $valeur_nette > 0}}
@ -502,25 +486,25 @@
{{:input {{:input
type="list" type="list"
name="vnc_account" name="vnc_account"
target="!acc/charts/accounts/selector.php?codes=%s*&id_chart=%s"|args:$vnc_code:$chart_id target="!acc/charts/accounts/selector.php?codes=%s*&year=%d"|args:$vnc_code:$_GET.year
default=$vnc_account default=$vnc_account
}} }}
</td> </td>
<td>{{$valeur_nette|money_currency_html:false|raw}}</td> <td>{{$valeur_nette|money_currency:false}}</td>
<td></td> <td></td>
</tr> </tr>
{{/if}} {{/if}}
<tr> <tr>
<td> <td> {{* style="pointer-events: none; opacity: 0.6;">*}}
{{:input {{:input
type="list" type="list"
name="immo_account" name="immo_account"
target="!acc/charts/accounts/selector.php?codes=%s&id_chart=%s"|args:$patterns:$chart_id target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:$patterns:$_GET.year
default=$immo_account default=$immo_account
}} }}
</td> </td>
<td></td> <td></td>
<td>{{$ligne_immo.montant|money_currency_html:false|raw}}</td> <td>{{$ligne_immo.montant|money_currency:false}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -541,11 +525,11 @@
{{:input {{:input
type="list" type="list"
name="creance_account" name="creance_account"
target="!acc/charts/accounts/selector.php?codes=%s&id_chart=%s"|args:"462*":$chart_id target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"462*":$_GET.year
default=$creance_account default=$creance_account
}} }}
</td> </td>
<td>{{$montant_cession|money_currency_html:false|raw}}</td> <td>{{$montant_cession|money_currency:false}}</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
@ -553,12 +537,12 @@
{{:input {{:input
type="list" type="list"
name="cession_account" name="cession_account"
target="!acc/charts/accounts/selector.php?codes=%s*&id_chart=%s"|args:$cession_code:$chart_id target="!acc/charts/accounts/selector.php?codes=%s*&year=%d"|args:$cession_code:$_GET.year
default=$cession_account default=$cession_account
}} }}
</td> </td>
<td></td> <td></td>
<td>{{$montant_cession|money_currency_html:false|raw}}</td> <td>{{$montant_cession|money_currency:false}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -569,5 +553,4 @@
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p> </p>
</form> </form>
{{:form_errors}}
{{:admin_footer}} {{:admin_footer}}