Compare commits

..

1 commit

Author SHA1 Message Date
Jean-Christophe Engel
379f523eaa Modif pour rétro-compatibilité Paheko 1.3.15 (chgt value => key) 2026-02-06 09:49:35 +01:00
69 changed files with 1430 additions and 4573 deletions

View file

@ -4,14 +4,15 @@ Ce module permet de gérer les écritures d'amortissements pour les immobilisati
- lister les immobilisations - lister les immobilisations
- ajouter une nouvelle immobilisation - ajouter une nouvelle immobilisation
- lister les amortissements d'une immobilisation - lister les amortissements d'une immobilisation :
- amortissements déjà enregistrés
- amortissements à venir
- associer une écriture d'amortissement à une immobilisation
- enregistrer un nouvel amortissement - enregistrer un nouvel amortissement
- incorporer d'anciennes immobilisations et leurs amortisements
## Installation ## Installation
- télécharger [l'archive zip](https://link.infini.fr/amortissement) - télécharger [l'archive zip](https://link.infini.fr/amortissement)
- cliquer « Configuration » puis « Extensions » - cliquer « Configuration » puis « Extensions »
- en bas de la page, cliquer « Importer un module » - en bas de la page, cliquer « Importer un module »
- sélectionner l'archive téléchargée ci-dessus - sélectionner l'archive téléchargée ci-dessus
- activer le module - activer le module qui est maintenant présent dans la liste des extensions inactives

View file

@ -5,6 +5,7 @@
Cette page liste les immobilisations sorties du bilan Cette page liste les immobilisations sorties du bilan
</p> </p>
{{* Immobilisation avec une écriture de sortie de bilan *}}
{{:include file="_get_config.html" keep="module.config"}} {{:include file="_get_config.html" keep="module.config"}}
{{* lister les immobilisations *}} {{* lister les immobilisations *}}
@ -34,6 +35,7 @@
<th class="nombre">Montant</th> <th class="nombre">Montant</th>
<th>N° compte</th> <th>N° compte</th>
<th>Compte</th> <th>Compte</th>
<th>Projet</th>
<th class="actions"></th> <th class="actions"></th>
</tr> </tr>
</thead> </thead>
@ -48,70 +50,57 @@
trans.label as trans_label, trans.label as trans_label,
trans.date as trans_date, trans.date as trans_date,
trans.id_year as trans_id_year, trans.id_year as trans_id_year,
line.id as immo_line_id, line.id as immo_id,
line.label as line_label,
line.debit AS debit, line.debit AS debit,
account.id as account_id, account.id as account_id,
account.code as account_code, account.code as account_code,
account.label as account_label account.label as account_label,
project.label as project_label
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 acc_projects AS project ON line.id_project = project.id
WHERE !condition WHERE !condition
ORDER BY trans.date DESC; ORDER BY trans.date DESC;
!condition=$condition !condition=$condition
}} }}
{{:assign montant_immo=$debit}}
{{* voir si l'immo est prise en charge *}} {{* voir si l'immo est prise en charge *}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$immo_line_id assign="info_immo"}} {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}}
{{:assign status=$status}} {{:assign status=$status}}
{{if $amount != null}}
{{:assign montant_immo=$amount}}
{{/if}}
{{else}} {{else}}
{{:assign status=null}} {{:assign amortissable="nsp"}}
{{:assign status="unknown"}}
{{/load}} {{/load}}
{{if $status != "archived"}} {{if $status == "ignored"}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
{{:assign date_mes=$info_immo.date_mes|or:$trans_date}}
{{:assign montant_immo=$debit}}
{{* chercher le doc de sortie du bilan *}} {{* voir s'il existe une écriture liée qui solde l'immobilisation *}}
{{:assign exit_date=null}} {{#select
{{#load type="exit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id=$info_immo.id}} trans.date as exit_date
{{:assign exit_line_id=$exit_line_id}} FROM acc_transactions_links AS link
{{#select INNER JOIN acc_transactions AS trans ON
trans.date (CASE
FROM acc_transactions_lines AS line WHEN link.id_transaction = :trans_id THEN link.id_related
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id WHEN link.id_related = :trans_id THEN link.id_transaction
WHERE line.id = :exit_line_id; END) = trans.id
:exit_line_id=$exit_line_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
{{:assign exit_date=$date}} WHERE line.credit = :montant_immo
{{/select}} AND acc.code = :account_code
{{/load}} ;
:trans_id = $trans_id
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}} :montant_immo = $montant_immo
{{:assign credit_immo=null}} :account_code = $account_code
{{:assign total_credits=0}}
{{#load
type="credit_link"
where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $info_immo.id
}} }}
{{if $amount == null}}
{{#select credit FROM acc_transactions_lines WHERE id = :credit_line_id;
:credit_line_id=$credit_line_id
}}
{{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
{{/select}}
{{else}}
{{:assign total_credits="%d+%d"|math:$total_credits:$amount}}
{{/if}}
{{/load}}
{{:assign solde_immo="%d-%d"|math:$montant_immo:$total_credits}}
{{if $solde_immo == 0}}
{{:assign status="archived"}} {{:assign status="archived"}}
{{/if}} {{:assign exit_date=$exit_date}}
{{/select}}
{{if $status != "archived"}} {{if $status != "archived"}}
{{:continue}} {{:continue}}
@ -127,7 +116,12 @@
{{* voir s'il y a une écriture de cession associée à cette immo *}} {{* voir s'il y a une écriture de cession associée à cette immo *}}
{{#select {{#select
trans.id, trans.id,
line.debit trans.label,
trans.date,
line.id,
line.debit,
acc.code,
acc.label
FROM acc_transactions_links AS link FROM acc_transactions_links AS link
INNER JOIN acc_transactions AS trans ON (CASE INNER JOIN acc_transactions AS trans ON (CASE
WHEN link.id_transaction = :trans_id THEN link.id_related WHEN link.id_transaction = :trans_id THEN link.id_related
@ -145,24 +139,21 @@
{{/select}} {{/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>{{$date_mes|date_short}}</td> <td>{{$trans_date|date_short}}</td>
<td>{{$exit_date|date_short}}</td> <td>{{$exit_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:$montant_immo|money_html:false|raw}}</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 class="actions"> <td class="actions">
{{:linkbutton label="Modifier" href="exit_step1.html?immo_doc_id=%s&from=exit"|args:$info_immo.id shape="edit"}}
</td> </td>
</tr> </tr>
{{/select}} {{/select}}
</tbody> </tbody>
<tfoot> <tfoot>
{{if $total_immo != 0}} {{if $total_immo != 0}}
<tr>
<td colspan="9">
</tr>
{{#foreach from=$sommes_immo|ksort key="code" item="value"}} {{#foreach from=$sommes_immo|ksort key="code" item="value"}}
<tr> <tr>
<td></td> <td></td>
@ -172,6 +163,7 @@
<td class="money">{{$value|money_html:false|raw}}</td> <td class="money">{{$value|money_html:false|raw}}</td>
<td></td> <td></td>
<td></td> <td></td>
<td></td>
<td class="actions"></td> <td class="actions"></td>
</tr> </tr>
{{/foreach}} {{/foreach}}
@ -183,6 +175,7 @@
<td class="money strong">{{$total_immo|money_html:false|raw}}</td> <td class="money strong">{{$total_immo|money_html:false|raw}}</td>
<td></td> <td></td>
<td></td> <td></td>
<td></td>
<td class="actions"></td> <td class="actions"></td>
</tr> </tr>
{{/if}} {{/if}}
@ -199,6 +192,7 @@
<td class="money">{{$value|money_html:false|raw}}</td> <td class="money">{{$value|money_html:false|raw}}</td>
<td></td> <td></td>
<td></td> <td></td>
<td></td>
<td class="actions"></td> <td class="actions"></td>
</tr> </tr>
{{/foreach}} {{/foreach}}
@ -210,6 +204,7 @@
<td class="money strong">{{$total_cessions|money_html:false|raw}}</td> <td class="money strong">{{$total_cessions|money_html:false|raw}}</td>
<td></td> <td></td>
<td></td> <td></td>
<td></td>
<td class="actions"></td> <td class="actions"></td>
</tr> </tr>
{{/if}} {{/if}}

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

@ -1,37 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Enregistrer l'association entre une ligne d'immo et une autre ligne (amort, credit, cession, sortie)
@param immo_doc_id : id du doc associé à la ligne d'immobilisation
@param trans_id : id de l'écriture à attacher
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$immo_doc_id|intval keep="ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{* 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
FROM acc_transactions_links as links
WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id;
:immo_trans_id = $ligne_immo.trans_id
}}
{{:assign var="linked_transactions." value=$linked_id}}
{{/select}}
{{* ajouter la nouvelle liaison *}}
{{:assign var="linked_transactions." value=$trans_id}}
{{* Enregistrer les liaisons *}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$ligne_immo.trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}

View file

@ -1,52 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Supprimer l'association entre une ligne d'immo et une autre ligne (amort, credit, cession, sortie)
@param immo_doc_id : id du doc associé à la ligne d'immobilisation
@param line_id : id de la ligne à détacher
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{* chercher la deuxième écriture *}}
{{#select
id_transaction
FROM acc_transactions_lines
WHERE id = :line_id;
:line_id = $line_id|intval
}}
{{:assign trans_id=$id_transaction}}
{{else}}
{{:error message="Écriture non trouvée"}}
{{/select}}
{{*
chercher les liaisons de l'écriture d'immobilisation
et supprimer la liaison avec la deuxième écriture
*}}
{{#select
CASE links.id_related = :immo_trans_id
WHEN true THEN links.id_transaction
WHEN false THEN links.id_related
END as linked_id
FROM acc_transactions_links as links
WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id;
:immo_trans_id = $ligne_immo.trans_id
}}
{{if $linked_id != $trans_id}}
{{:assign var="linked_transactions." value=$linked_id}}
{{/if}}
{{/select}}
{{* Enregistrer les liaisons *}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$ligne_immo.trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}

View file

@ -1,34 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Comparer deux numéros de version n1.n2[.n3]
@param nv1
@param nv2
@result comp : -1 si nv1 < nv2, 0 si nv1 = nv2, 1 si nv1 > nv2
*}}
{{:assign nv1=$nv1|cat:"."}}
{{:assign nv2=$nv2|cat:"."}}
{{:assign var="tv1" value=$nv1|explode:"."}}
{{:assign var="tv2" value=$nv2|explode:"."}}
{{:assign comp=0}}
{{:assign i=0}}
{{#foreach from=$tv1 item="e1"}}
{{:assign var="e2" from="tv2.%d"|args:$i}}
{{if $e1 < $e2}}
{{:assign comp=-1}}
{{:break}}
{{elseif $e1 > $e2}}
{{:assign comp=1}}
{{:break}}
{{/if}}
{{:assign i="%d+1"|math:$i}}
{{/foreach}}
{{*
cas où le premier tableau a moins d'éléments que le 2ème
et où les éléments présents dans les deux tableaux sont identiques
*}}
{{if $comp == 0 && $tv1|count < $tv2|count}}
{{:assign comp = -1}}
{{/if}}

View file

@ -1,44 +0,0 @@
{{* -*- brindille -*- *}}
{{*
lister les lignes d'amortissement liées à la ligne d'immobilisation
@param immo_doc_id : id du doc associé à l'immobilisation
@result linked_amort : lignes d'amortissement liées à la ligne d'immobilisation
@result total_amort : montant total des amortissements de l'immobilisation
@result created_amort : vrai s'il y a au moins un amortissement créé par le module dans la liste
*}}
{{:assign total_amort=0}}
{{#load type="amort_link"
where="$$.immo_doc_id = :immo_doc_id"
:immo_doc_id = $immo_doc_id|intval
assign="amort_info"
}}
{{#select
line.id as line_id,
line.credit as amount,
line.label as line_label,
trans.id as trans_id,
trans.label as trans_label,
trans.date as date,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
INNER join acc_accounts AS account on line.id_account = account.id
WHERE line.id = :amort_line_id
;
:amort_line_id = $amort_line_id
assign="amort_line"
}}
{{:assign var="amort_line.amount" value=$amort_info.amount|or:$amort_line.amount}}
{{if $amort_info.created}}
{{:assign var="amort_line.created" value=true}}
{{:assign var="created_amort" value=true}}
{{/if}}
{{:assign var="linked_amort.%s_%d"|args:$amort_line.date:$amort_info.id value=$amort_line}}
{{:assign total_amort="%d+%d"|math:$total_amort:$amort_line.amount}}
{{/select}}
{{/load}}

View file

@ -7,8 +7,7 @@
la forme : code — libellé 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,36 +0,0 @@
{{* -*- brindille -*- *}}
{{*
chercher des écritures liées à l'immo paramètre au crédit du même compte
@param immo_doc_id : id du doc associé à l'immobilisation
@result linked_immos : liste des écritures liées
@result total_credits : montant total des écritures
*}}
{{:assign linked_immos=null}}
{{:assign total_credits=0}}
{{#load type="credit_link" where="$$.immo_doc_id=:immo_doc_id" :immo_doc_id=$immo_doc_id|intval}}
{{#select
line.credit,
line.id as line_id,
trans.id as trans_id,
trans.label,
trans.date,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
INNER join acc_accounts AS account on line.id_account = account.id
WHERE line.id = :credit_line_id;
:credit_line_id=$credit_line_id
}}
{{:assign credit=$credit}}
{{:assign var="linked_immos." doc=$id trans_id=$trans_id credit_line_id=$line_id label=$label amount=$credit date=$date account_id=$account_id account_code=$account_code account_label=$account_label year=$year}}
{{/select}}
{{if $amount == null}}
{{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
{{else}}
{{:assign total_credits="%d+%d"|math:$total_credits:$amount}}
{{/if}}
{{/load}}

View file

@ -1,47 +0,0 @@
{{* -*- brindille -*- *}}
{{*
lister les amortissement non rattachés à une immo
@param condition
*}}
{{#select
line.id as line_id,
line.id_transaction as trans_id,
line.credit as amount,
line.label as line_label,
trans.date as trans_date,
trans.label as trans_label,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON account.id = line.id_account
INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction
WHERE credit > 0 AND (NOT trans.status & 16) AND !condition
ORDER BY trans.date, trans.label;
!condition=$condition
assign="amort_line"
}}
{{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}}
{{:assign amort_amount=0}}
{{:assign keep_amort=true}}
{{#load type="amort_link"
where="$$.amort_line_id = :amort_line_id"
:amort_line_id=$amort_line.line_id|intval
assign="amort_link"
}}
{{if $amort_link.amount == null || $amort_link.amount == 0}}
{{:assign amort_amount=$amort_line.amount}}
{{:assign keep_amort=false}}
{{else}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}}
{{/if}}
{{else}}
{{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}}
{{/load}}
{{if $keep_amort && $amort_amount < $amort_line.amount}}
{{:assign var="amort_line.amount" value="%d-%d"|math:$amort_line.amount:$amort_amount}}
{{:assign var="free_amort_lines." value=$amort_line}}
{{/if}}
{{/select}}

View file

@ -1,39 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Récupérer les infos d'une immobilisation
@param immo_doc_id : id du document associé à l'immobilisation
@result info_immo : infos du document associé
@result ligne_immo : données de la base
@result message non null si une erreur s'est produite
*}}
{{#load id=$immo_doc_id|intval assign="info_immo"}}
{{else}}
{{:assign error=true}}
{{:assign message="Immobilisation non trouvée"}}
{{/load}}
{{if ! $error}}
{{#select
line.id as line_id,
line.debit as amount,
line.label as line_label,
line.id_project as id_project,
trans.id as trans_id,
trans.label as trans_label,
trans.date as date_achat,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
INNER JOIN acc_accounts AS account ON line.id_account = account.id
WHERE line.id = :line_id;
:line_id = $info_immo.line
assign="ligne_immo"
}}
{{else}}
{{:assign message="Immobilisation non trouvée"}}
{{/select}}
{{/if}}

View file

@ -1,18 +1,17 @@
{{* -*- 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">
<p class="help"> <p class="help">
{{if $type_immo == "managed"}} {{if $type_immo == "managed"}}
Cette page liste les immobilisations en cours d'amortissement Cette page liste les immobilisations en cours d'amortissement
{{elseif $type_immo == "amortized"}} {{elseif $type_immo == "amortized"}}
Cette page liste les immobilisations dont l'amortissement est terminé Cette page liste les immobilisations dont l'amortissement est terminé
{{/if}} {{/if}}
</p> </p>
{{if $module.table != null}}
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
@ -30,102 +29,145 @@
<tbody> <tbody>
{{* lister les immobilisations *}} {{* lister les immobilisations *}}
{{:include file="_get_config.html" keep="module.config"}}
{{:assign account_condition="("}} {{:assign account_condition="("}}
{{#foreach from=$module.config.prefixes item="code"}} {{#foreach from=$module.config.prefixes item="code"}}
{{:assign code=$code|cat:"%"|quote_sql}} {{:assign code=$code|cat:"%"|quote_sql}}
{{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}} {{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}} {{:assign account_condition=$account_condition|cat:"0)"}}
{{:assign status_condition="($$.status = 'managed' OR $$.status = 'amortized')"}}
{{:assign condition=$account_condition|cat:" AND line.debit > 0 AND "|cat:$status_condition}}
{{:assign filter_condition=" AND 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=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"|cat:$filter_condition}}
{{:assign nb_immo=0}} {{:assign nb_immo=0}}
{{:assign total_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.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,
info.id as immo_doc_id, trans.id_year as trans_id_year
$$.duration as duration,
$$.label as doc_label,
$$.amount as doc_amount,
$$.date_achat as doc_date_achat,
$$.date as doc_date_mes,
$$.status as status
FROM acc_transactions AS trans FROM acc_transactions AS trans
INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
INNER JOIN acc_accounts AS account ON line.id_account = account.id INNER JOIN acc_accounts AS account ON line.id_account = account.id
INNER JOIN acc_years AS years ON trans.id_year = years.id INNER JOIN acc_years AS years ON trans.id_year = years.id
INNER JOIN !table AS info ON $$.line = line.id
WHERE !condition WHERE !condition
ORDER BY COALESCE(doc_date_achat, trans_date) DESC; ORDER BY trans.date DESC;
!table=$module.table
!condition=$condition !condition=$condition
}} }}
{{if $status != "managed" && $status != "amortized"}} {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$trans_id}}
{{:continue}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$immo_trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}} {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}}
{{:assign montant_immo=$doc_amount|or:$debit}} {{:assign duration=null}}
{{:assign immo_date = $doc_date_achat|or:$trans_date}} {{:assign montant_immo=$debit}}
{{:assign label_immo=$doc_label|or:$trans_label}}
{{if $label_immo|strpos:$line_label === false}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$line_label}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}} {{* voir si l'immo est prise en charge *}}
{{#load {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}}
type="credit_link" {{:assign duration=$duration}}
where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $immo_doc_id {{:assign status=$status}}
}} {{if $amount != null}}
{{if $amount == null}} {{:assign montant_immo=$amount}}
{{#select credit FROM acc_transactions_lines WHERE id = :credit_line_id;
:credit_line_id=$credit_line_id
}}
{{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}}
{{/select}}
{{else}}
{{:assign montant_immo="%d-%d"|math:$montant_immo:$amount}}
{{/if}} {{/if}}
{{else}}
{{:assign amortissable="nsp"}}
{{:assign status="unknown"}}
{{/load}} {{/load}}
{{if $status == "ignored"}}
{{if $montant_immo == 0}}
{{* Immobilisation soldée *}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
{{* montant des amortissements liés à l'immobilisation *}} {{* voir s'il existe une écriture qui solde l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$immo_doc_id keep="total_amort"}} {{#select
{{:assign amort_amount=$total_amort}} line.id AS line
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 = :montant_immo;
:line_id = $immo_id|intval
:montant_immo = $montant_immo
}}
{{: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
WHEN true THEN links.id_transaction
WHEN false THEN links.id_related
END as amort_trans_id
FROM acc_transactions_lines as l_immo
INNER JOIN acc_transactions as t_immo on t_immo.id = l_immo.id_transaction
INNER JOIN acc_transactions_links as links
ON (
t_immo.id = links.id_transaction
OR
t_immo.id = links.id_related
)
INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction
INNER JOIN acc_accounts AS account ON l_amort.id_account = account.id
WHERE
l_immo.id = :line_id
AND
l_amort.credit <> 0
AND
account.code LIKE '28%';
:line_id = $immo_id|intval
}}
{{if $amort_amount == null}}
{{:assign exist_amort=false}}
{{:assign amort_amount=0}}
{{else}}
{{:assign exist_amort=true}}
{{:assign amort_amount=$amort_amount}}
{{/if}}
{{/select}}
{{* classement par onglet *}} {{* classement par onglet *}}
{{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}} {{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}}
{{if $type_immo == "amortized" && $amort_amount < $montant_immo}}{{:continue}}{{/if}} {{if $type_immo == "managed" && $status == "amortized"}}{{:continue}}{{/if}}
{{if $status == "unknown" && ! $exist_amort}}{{:continue}}{{/if}}
{{if $type_immo == "amortized" && $amort_amount < $montant_immo && $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 total_immo="%d+%d"|math:$total_immo:$montant_immo}}
{{:assign var="montant" from="sommes_immo.%s"|args:$account_code}} {{:assign var="montant" from="sommes_immo.%s"|args:$account_code}}
{{:assign var="sommes_immo.%s"|args:$account_code value="%d+%d"|math:$montant:$montant_immo}} {{:assign var="sommes_immo.%s"|args:$account_code value="%d+%d"|math:$montant:$montant_immo}}
<tr> <tr>
<td class="num"><a href="{{$trans_url}}">#{{$immo_trans_id}}</a></td> <td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td>
<td>{{$immo_date|date_short}}</td> <td>{{$trans_date|date_short}}</td>
<td>{{$label_immo}}</td> <td>{{$trans_label}}</td>
<td class="money">{{$montant_immo|money_html:false|raw}}</td> <td class="money">{{$montant_immo|money_html:false|raw}}</td>
<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">{{$amort_amount|money_html:false|raw}}</td>
<td class="money">{{"%d-%d"|math:$montant_immo:$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 class="actions"> <td class="actions">
{{:linkbutton {{:linkbutton
label="Détails" label="Paramètres"
href="amortization.html?immo_doc_id=%s&type_immo=%s"|args:$immo_doc_id:$type_immo shape="eye" href="add_infos.html?immo_id=%s&type_immo=%s"|args:$immo_id:$type_immo
shape="settings"
target="_dialog"
}}
{{:linkbutton
label="Amortissements"
href="amortization.html?immo_id=%s&type_immo=%s"|args:$immo_id:$type_immo
shape="table"
}} }}
</td> </td>
</tr> </tr>
@ -133,9 +175,6 @@
</tbody> </tbody>
<tfoot> <tfoot>
{{if $total_immo != 0}} {{if $total_immo != 0}}
<tr>
<td colspan="9">
</tr>
{{#foreach from=$sommes_immo|ksort key="code" item="value"}} {{#foreach from=$sommes_immo|ksort key="code" item="value"}}
<tr> <tr>
<td></td> <td></td>
@ -163,7 +202,7 @@
{{/if}} {{/if}}
</tfoot> </tfoot>
</table> </table>
{{/if}} {{if $nb_immo == 0}}
{{if $nb_immo == 0 || $module.table == null}} <p class="block alert">Aucune immobilisation</p>
<p class="block alert">Aucune immobilisation</p> {{/if}}
{{/if}} </section>

View file

@ -1,188 +1,179 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{* Liste des immobilisations non gérées ou non entièrement affectées *}} {{* Liste des immobilisations non amortissables ou non (encore) gérées *}}
{{:include file="_get_config.html" keep="module.config"}} <section class="immobilisation">
<p class="help">
Cette page liste les immobilisations pas encore prises en charge
par le module ou les écritures de la balance d'ouverture initiale
dont le montant n'est pas encore totalement affecté
</p>
{{:assign saved_hides=$module.config.hides}} <p class="help">
{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}} Cette page liste les écritures pas (encore) prises en charge par le module et sans écriture d'amortissement associée.
</p>
{{if $_POST|count == 0}} {{:include file="_get_config.html" keep="module.config"}}
{{:assign unhide=$user_hides.unhide_other}} {{if $_POST|count == 0}}
{{else}} {{:assign unhide=$module.config.unhide_other}}
{{if $_POST.unhide == null}}
{{:assign unhide=0}}
{{else}} {{else}}
{{:assign unhide=1}} {{if $_POST.unhide == null}}
{{/if}} {{:assign unhide=0}}
{{: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}}
{{* vérifier l'existence de la table du module *}}
{{if $module.table != null}}
{{:assign columns="$$.status as status, SUM($$.amount) as amount,"}}
{{:assign table_join="LEFT JOIN !table AS info ON $$.line = line.id"}}
{{:assign doc_condition="($$.status IS NULL OR $$.status == 'managed' OR $$.status == 'ignored')"}}
{{else}}
{{:assign columns=""}}
{{:assign table_join=""}}
{{:assign doc_condition="1"}}
{{/if}}
{{*
lister les immobilisations non prises en charge par le module
ou dont le montant n'a pas été totalement affecté
*}}
{{:assign account_condition="("}}
{{#foreach from=$module.config.prefixes item="code"}}
{{:assign code=$code|cat:"%"|quote_sql}}
{{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}}
{{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 condition=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:" AND "|cat:$doc_condition}}
{{:assign nb_managed=0}}
{{:assign nb_ignored=0}}
{{:assign nb_null=0}}
{{:assign nb_other=0}}
{{#select
trans.id as immo_trans_id,
trans.label as trans_label,
trans.date as trans_date,
line.id as immo_line_id,
line.debit AS debit,
line.label AS line_label,
account.id as account_id,
account.code as account_code,
account.label as account_label,
!columns
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
!table_join
WHERE !condition
GROUP BY immo_line_id
ORDER BY trans.date;
!columns=$columns
!table_join=$table_join
!table=$module.table
!condition=$condition
assign="immo_line"
}}
{{*
parmi les immos gérées, ne conserver que celles dont le montant dans le doc est non nul
et inférieur au montant de l'écriture d'immo
*}}
{{if $immo_line.status == 'managed'}}
{{if $immo_line.amount == null || $immo_line.amount == 0 || $immo_line.amount == $immo_line.debit}}
{{:continue}}
{{/if}}
{{/if}}
{{if $status == null}}
{{:assign nb_null="%d+1"|math:$nb_null}}
{{elseif $status == 'managed'}}
{{:assign nb_managed="%d+1"|math:$nb_managed}}
{{elseif $status == 'ignored'}}
{{:assign nb_ignored="%d+1"|math:$nb_ignored}}
{{else}}
{{:assign nb_other="%d+1"|math:$nb_other}}
{{/if}}
{{:assign var="immo_lines." value=$immo_line}}
{{/select}}
<form method="post" action="">
<fieldset>
{{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher les écritures ignorées" }}
</fieldset>
</form>
{{if $immo_lines|count > 0}}
<table class="list">
<thead>
<tr>
<th class="num"></th>
<th class="nombre">Ligne</th>
<th>Date</th>
<th>Libellé</th>
<th class="nombre">Montant</th>
<th class="nombre">Affecté</th>
<th class="nombre">Reste</th>
<th>N° compte</th>
<th>Compte</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{#foreach from=$immo_lines item="line"}}
{{if $unhide == null}}
{{if $status == "ignored"}}
{{:continue}}
{{/if}}
{{else}} {{else}}
{{* vérifier si le libellé aurait pu être filtré *}} {{:assign unhide=1}}
{{#foreach from=$module.config.filters item="filter"}}
{{if $trans_label|strpos:$filter !== false}}
{{:assign status="ignored"}}
{{else}}
{{:assign status=""}}
{{/if}}
{{/foreach}}
{{/if}} {{/if}}
{{:save key="config" unhide_other=$unhide}}
{{/if}}
{{if $unhide}}
{{:assign checked="checked"}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.immo_trans_id}} <form method="post" action="">
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.trans_id_year}} <fieldset>
{{:assign reste="%d-%d"|math:$line.debit:$line.amount}} {{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher les écritures marquées ignorées" }}
<tr {{if $status == "ignored"}}class="ignored"{{/if}}> </fieldset>
<td class="num"><a href="{{$trans_url}}">#{{$line.immo_trans_id}}</a></td> </form>
<td class="nombre">{{$line.immo_line_id}}</td>
<td>{{$trans_date|date_short}}</td> <table class="list">
<td>{{$line.trans_label}}{{if $line.line_label != null && $line.line_label != $line.trans_label}} — {{$line.line_label}}{{/if}}</td> <thead>
<td class="money">{{"%f"|math:$line.debit|money_html:false|raw}}</td> <tr>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</td> <th></th>
<td class="money">{{"%f"|math:$reste|money_html:false|raw}}</td> <th>Date</th>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td> <th>Libellé</th>
<td>{{$line.account_label}}</td> <th class="nombre">Montant</th>
<td class="actions"> <th>N° compte</th>
{{:linkbutton <th>Compte</th>
label="Paramètres" <th class="actions"></th>
href="add_infos.html?immo_line_id=%s"|args:$immo_line_id </tr>
shape="settings" </thead>
target="_dialog" <tbody>
{{* lister les immobilisations *}}
{{:assign condition="("}}
{{#foreach from=$module.config.prefixes item="code"}}
{{:assign code=$code|cat:"%"|quote_sql}}
{{:assign condition=$condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign condition=$condition|cat:"0)"}}
{{:assign condition=$condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"}}
{{if $unhide == null}}
{{*:assign condition=$condition|cat:" 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}}
{{/if}}
{{:assign nb_immo=0}}
{{#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,
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
ORDER BY trans.date DESC;
!condition=$condition
}}
{{: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}}
{{* 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"}}
{{/load}}
{{if $unhide == null}}
{{if $status != "unknown"}}
{{:continue}}
{{/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}}
{{* 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
WHEN true THEN links.id_transaction
WHEN false THEN links.id_related
END as amort_trans_id
FROM acc_transactions_lines as l_immo
INNER JOIN acc_transactions as t_immo on t_immo.id = l_immo.id_transaction
INNER JOIN acc_transactions_links as links
ON (
t_immo.id = links.id_transaction
OR
t_immo.id = links.id_related
)
INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction
INNER JOIN acc_accounts AS account ON l_amort.id_account = account.id
WHERE
l_immo.id = :line_id
AND
l_amort.credit <> 0
AND
account.code LIKE '28%';
:line_id = $immo_id|intval
}} }}
</td> {{if $amort_amount != null}}
</tr> {{:assign ignore=true}}
{{/foreach}} {{else}}
</tbody> {{:assign ignore=false}}
</table> {{/if}}
{{else}} {{/select}}
<p class="block alert">Aucune immobilisation</p>
{{/if}} {{if $ignore}}
{{:continue}}
{{/if}}
{{:assign nb_immo="%d+1"|math:$nb_immo}}
<tr {{if $status == "ignored"}}class="ignored"{{/if}}>
<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><a href={{$compte_url}}>{{$account_code}}</a></td>
<td>{{$account_label}}</td>
<td class="actions">
{{:linkbutton
label="Paramètres"
href="add_infos.html?immo_id=%s&type_immo=other"|args:$immo_id
shape="settings"
target="_dialog"
}}
{{:linkbutton
label="Amortissements"
href="amortization.html?immo_id=%s&type_immo=other"|args:$immo_id
shape="table"
}}
</td>
</tr>
{{/select}}
</tbody>
</table>
{{if $nb_immo == 0}}
<p class="block alert">Aucune immobilisation</p>
{{/if}}
</section>
<script type="text/javascript"> <script type="text/javascript">
function changeVisibility(evt, idcheck = 'f_unhide_1') { function changeVisibility(evt, idcheck = 'f_unhide_1') {

View file

@ -1,32 +1,37 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
<nav class="tabs"> <nav class="tabs">
{{if $subcurrent == null}} {{if $current == "index" && $subsubcurrent == null}}
{{if $current == "managed" || $current == "amortized" || $current == "archived"}} <aside>
<aside> {{:linkbutton label="Ajouter une immobilisation" shape="plus" href="add_asset.html" target="_dialog"}}
{{:linkbutton label="Ajouter une immobilisation" shape="plus" href="add_asset.html"}} </aside>
{{elseif $subsubcurrent == "amortization" && $type_immo == null || $type_immo == "managed" || $type_immo == "other"}}
<aside>
{{if $autres_amort != null}}
{{:linkbutton label="Rattacher une écriture" href="other_amortizations.html?immo_id=%s"|args:$_GET.immo_id shape="link" target="_dialog"}}
{{/if}}
{{:linkbutton label="Enregistrer un amortissement" shape="plus"
href="save_amort.html?immo_id=%s"|args:$_GET.immo_id target="_dialog"}}
</aside> </aside>
{{/if}}
{{/if}} {{/if}}
<ul> <ul>
<li {{if $current == "managed"}}class="current"{{/if}}><a href="index.html?type_immo=managed">Amortissables</a></li> <li {{if $subcurrent == "managed"}}class="current"{{/if}}><a href="index.html?type_immo=managed">Amortissables</a></li>
<li {{if $current == "amortized"}}class="current"{{/if}}><a href="index.html?type_immo=amortized">Amorties</a></li> <li {{if $subcurrent == "amortized"}}class="current"{{/if}}><a href="index.html?type_immo=amortized">Amorties</a></li>
<li {{if $current == "archived"}}class="current"{{/if}}><a href="index.html?type_immo=archived">Sorties du bilan</a></li> <li {{if $subcurrent == "archived"}}class="current"{{/if}}><a href="index.html?type_immo=archived">Sorties du bilan</a></li>
<li {{if $current == "unfinished"}}class="current"{{/if}}><a href="index.html?type_immo=unfinished">En cours</a></li> <li {{if $subcurrent == "unfinished"}}class="current"{{/if}}><a href="index.html?type_immo=unfinished">En cours</a></li>
<li {{if $current == "other"}}class="current"{{/if}}><a href="index.html?type_immo=other">À classer</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> <li {{if $current == "config"}} class="current"{{/if}}><a href="config.html">Configuration</a></li>
<li {{if $current == "aide"}} class="current"{{/if}}><a href="aide.html">Aide</a></li>
</ul> </ul>
{{if $subcurrent != null}} {{if $subsubcurrent != null}}
<ul class="sub"> <ul class="sub">
{{if $subcurrent == "transfer"}} {{if $subsubcurrent == "amortization"}}
<li class="title strong">Transfert d'immobilisations</li> <li class="title strong">Amortissements</li>
{{elseif $subcurrent == "balance_exit"}} {{elseif $subsubcurrent == "balance_exit"}}
<li class="title strong">Sortie de bilan</li> <li class="title strong">Sortie de bilan</li>
{{elseif $subcurrent == "details"}} {{elseif $subsubcurrent == "transfer"}}
<li class="title strong">Détails</li> <li class="title strong">Transfert d'immobilisations</li>
{{/if}} {{/if}}
</ul> </ul>
{{/if}} {{/if}}

View file

@ -1,45 +0,0 @@
{{* -*- brindille -*- *}}
{{if $module.table}}
{{* supprimer les documents sans écriture associée *}}
{{:assign var="docs." type="amort_link" field="amort_line_id"}}
{{:assign var="docs." type="credit_link" field="credit_line_id"}}
{{:assign var="docs." type="cession_link" field="cession_line_id"}}
{{:assign var="docs." type="exit_link" field="exit_line_id"}}
{{:assign var="docs." type="immo" field="line"}}
{{#foreach from=$docs}}
{{:assign join_field="$$."|cat:$field}}
{{:assign type_name=$type|quote_sql}}
{{:assign type_cond="$$.type"|cat:" = "|cat:$type_name}}
{{* vérifier existence écriture associée au doc *}}
{{#select
info.id as info_id,
$$.immo_doc_id as immo_doc_id,
line.id as line_id
FROM !table AS info
LEFT JOIN acc_transactions_lines as line ON !join_field = line.id
WHERE !type_cond
;
!table=$module.table
!type_cond = $type_cond
!join_field = $join_field
assign="line"
}}
{{if $line.line_id == null}}
{{:delete id=$line.info_id}}
{{/if}}
{{* vérifier existence doc immo *}}
{{if $type != "immo"}}
{{#load id=$immo_doc_id assign="immo_doc"}}
{{else}}
{{:delete id=$line.info_id}}
{{/load}}
{{/if}}
{{/select}}
{{/foreach}}
{{/if}}

View file

@ -9,20 +9,15 @@
</p> </p>
{{:include file="_get_config.html" keep="module.config"}} {{: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}} {{if $_POST|count == 0}}
{{:assign unhide=$user_hides.unhide_unfinished}} {{:assign unhide=$module.config.unhide_unfinished}}
{{else}} {{else}}
{{if $_POST.unhide == null}} {{if $_POST.unhide == null}}
{{:assign unhide=0}} {{:assign unhide=0}}
{{else}} {{else}}
{{:assign unhide=1}} {{:assign unhide=1}}
{{/if}} {{/if}}
{{:assign var="user_hides.unhide_unfinished" value=$unhide"}} {{:save key="config" unhide_unfinished=$unhide}}
{{:assign var="saved_hides.%s"|args:$logged_user.id value=$user_hides}}
{{:save key="config" hides=$saved_hides}}
{{/if}} {{/if}}
{{if $unhide}} {{if $unhide}}
{{:assign checked="checked"}} {{:assign checked="checked"}}
@ -32,7 +27,7 @@
<fieldset class="shortFormLeft"> <fieldset class="shortFormLeft">
<legend>Transférer une ou plusieurs lignes vers une immobilisation amortissable</legend> <legend>Transférer une ou plusieurs lignes vers une immobilisation amortissable</legend>
<p class="help"> <p class="help">
Cocher les lignes concernées Cocher les lignes concernées ; les montants seront additionnés par numéro de compte
</p> </p>
<div class="shortFormRight informations" id="total_amount"> <div class="shortFormRight informations" id="total_amount">
<legend>Montants sélectionnés</legend> <legend>Montants sélectionnés</legend>
@ -55,7 +50,7 @@
</div> </div>
</fieldset> </fieldset>
<fieldset> <fieldset>
{{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher toutes les écritures" }} {{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher les écritures marquées ignorées" }}
</fieldset> </fieldset>
</form> </form>
@ -102,7 +97,7 @@
trans.id as 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,
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,
@ -119,19 +114,14 @@
}} }}
{{* voir si l'écriture a été marquée ignorée *}} {{* voir si l'écriture a été marquée ignorée *}}
{{:assign ignore=false}} {{:assign ignore=false}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id AND $$.status = 'ignored'" :line_id=$immo_line_id|intval}} {{#load type="immo" assign="info_immo" where="$$.line = :line_id AND $$.status = 'ignored'" :line_id=$immo_id|intval}}
{{:assign ignore=true}} {{:assign ignore=true}}
{{/load}} {{/load}}
{{if $ignore && $unhide == null}} {{if $ignore && $unhide == null}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
{{* {{* voir s'il existe une écriture qui solde l'immobilisation *}}
TODO cas où :
- il y a (au moins) une écriture d'avoir
*}}
{{* voir s'il existe une écriture qui solde l'immobilisation (voir ci-dessus) *}}
{{#select {{#select
count(*) AS count count(*) AS count
FROM acc_transactions AS trans FROM acc_transactions AS trans
@ -159,16 +149,16 @@
<tr {{if $ignore}}class="checked"{{/if}}> <tr {{if $ignore}}class="checked"{{/if}}>
<td class="check">{{:input type="checkbox" name="selected[]" value=$trans_id}}</td> <td class="check">{{:input type="checkbox" name="selected[]" value=$trans_id}}</td>
<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>{{$trans_label}}</td> <td>{{$trans_label}}</td>
<td class="money">{{"%f"|math:$debit|money_html:false|raw}}</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 class="account_code"><a href={{$compte_url}}>{{$account_code}}</a></td>
<td>{{$account_label}}</td> <td>{{$account_label}}</td>
<td class="actions"> <td class="actions">
{{:linkbutton {{:linkbutton
label="Modifier" label="Modifier"
href="ignore.html?immo_line_id=%s"|args:$immo_line_id href="ignore.html?immo_id=%s"|args:$immo_id
shape="edit" shape="edit"
target="_dialog" target="_dialog"
}} }}

View file

@ -1,99 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Mettre à niveau vers v0.31
- créer un doc de liaison pour chaque amortissement lié à une immobilisation
mais uniquement pour les immo déjà gérées, sinon l'upgrade
vers 0.33 ne fonctionnera pas car on pourrait se retrouver avec
des liaisons immo <-> amort sans doc associé à l'immo donc la
transformation de link vers amort_link ne pourra se faire
- id ligne d'immobilisation
- id ligne d'amortissement
- id écriture d'amortissement
*}}
{{* lister les immobilisations *}}
{{:include file="_get_config.html" keep="module.config"}}
{{:assign account_condition="("}}
{{#foreach from=$module.config.prefixes item="code"}}
{{:assign code=$code|cat:"%"|quote_sql}}
{{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}}
{{:assign filter_condition=" AND 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=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"|cat:$filter_condition}}
{{#select
line.id as immo_line_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
INNER JOIN acc_years AS years ON trans.id_year = years.id
WHERE !condition
ORDER BY trans.date DESC;
!condition=$condition
}}
{{* 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 status="unknown"}}
{{/load}}
{{* ne pas faire la liaison si pas de doc *}}
{{if $status == "ignored" || $status == "unknown"}}
{{:continue}}
{{/if}}
{{* lister les écritures d'amortissement liées *}}
{{:assign amort_lines=null}}
{{#select
CASE links.id_related = t_immo.id
WHEN true THEN links.id_transaction
WHEN false THEN links.id_related
END as amort_trans_id,
l_amort.id AS amort_line_id
FROM acc_transactions_lines as l_immo
INNER JOIN acc_transactions as t_immo on t_immo.id = l_immo.id_transaction
INNER JOIN acc_transactions_links as links
ON (t_immo.id = links.id_transaction OR t_immo.id = links.id_related)
INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction
INNER JOIN acc_accounts AS account ON l_amort.id_account = account.id
WHERE l_immo.id = :line_id AND l_amort.credit <> 0 AND account.code LIKE '28%';
:line_id = $immo_line_id|intval
assign="amort_lines."
}}
{{/select}}
{{#foreach from=$amort_lines item="line"}}
{{* chercher un doc associé *}}
{{#load type="link"
where="$$.immo_line_id = :immo_line_id
AND $$.amort_line_id = :amort_line_id
AND $$.amort_trans_id = :amort_trans_id"
:immo_line_id = $immo_line_id
:amort_line_id = $line.amort_line_id
:amort_trans_id = $line.amort_trans_id
assign="link"
}}
{{else}}
{{* pas de doc => le créer *}}
{{:save
key=""|uuid
type="link"
immo_line_id=$immo_line_id
amort_line_id=$line.amort_line_id
amort_trans_id=$line.amort_trans_id
}}
{{/load}}
{{/foreach}}
{{/select}}

View file

@ -1,64 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Mettre à niveau vers v0.33, pour gérer les écritures du bilan d'ouverture
où le montant d'une ligne d'immo ou d'une ligne d'amort peut être
réparti entre plusieurs immo et plusieurs amort
- modifier le doc d'immo
- date => date_mes (date mise en service)
- modifier le doc de liaison d'amortissement
- id ligne d'immobilisation => id doc immobilisation
- id ligne d'amortissement
- id écriture d'amortissement
- ajouter montant amortissement
*}}
{{* doc immo *}}
{{#load type="immo" assign="elem"}}
{{if $elem.date != null}}
{{:assign var="elem.date_mes" value=$elem.date}}
{{:assign var="docs." value=$elem}}
{{:delete id=$elem.id}}
{{/if}}
{{/load}}
{{* créer les nouveaux documents *}}
{{#foreach from=$docs item="doc"}}
{{:save
key=""|uuid
type=$doc.type
line=$doc.line
duration=$doc.duration
label=$doc.label
amount=$doc.amount
date_achat=$doc.date_achat
date_mes=$doc.date_mes
status=$doc.status
}}
{{/foreach}}
{{* lister les liaisons actuelles ligne amort => ligne immo *}}
{{#load type="link" assign="link"}}
{{#load type="immo" where="$$.line = :immo_line_id" :immo_line_id=$link.immo_line_id assign="immo"}}
{{:assign link_doc=null}}
{{:assign var="link_doc.immo_doc_id" value=$immo.id}}
{{:assign var="link_doc.amort_line_id" value=$link.amort_line_id}}
{{:assign var="link_docs." value=$link_doc}}
{{else}}
{{* liaison orpheline : ignorer *}}
{{/load}}
{{:delete id=$link.id}}
{{/load}}
{{* créer les nouvelles liaisons *}}
{{#foreach from=$link_docs item="link"}}
{{:save
key=""|uuid
type="amort_link"
immo_doc_id=$link.immo_doc_id
amort_line_id=$link.amort_line_id
amount=null
}}
{{/foreach}}

View file

@ -75,11 +75,11 @@
{{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"|args:$compte:$selected_chart}} {{:redirect url="add_account.html?account=%s&chart=%s&immo_id=%s"|args:$compte:$selected_chart:$_GET.immo_id}}
{{/if}} {{/if}}
{{:assign debit_account=$debit_account|keys|value:0}} {{:assign debit_account=$debit_account|keys|key:0}}
{{:assign credit_account=$credit_account|keys|value:0}} {{:assign credit_account=$credit_account|keys|key:0}}
{{* déterminer si le compte d'immo est un compte d'immo en cours *}} {{* déterminer si le compte d'immo est un compte d'immo en cours *}}
{{#foreach from=$module.config.unfinished item="elem"}} {{#foreach from=$module.config.unfinished item="elem"}}
@ -93,7 +93,12 @@
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{if $status != "unfinished"}} {{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 *}} {{* 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}} {{:assign date_debut=$_POST.date_mes|or:$_POST.date_achat|parse_date}}
{{if $date_debut|strtotime < $_POST.date_achat|parse_date|strtotime}} {{if $date_debut|strtotime < $_POST.date_achat|parse_date|strtotime}}
@ -103,11 +108,6 @@
{{/if}} {{/if}}
{{:assign duration=$_POST.duree|intval}} {{:assign duration=$_POST.duree|intval}}
{{:assign status="managed"}} {{:assign status="managed"}}
{{if $_POST.date_mes == null || $_POST.date_mes == $_POST.date_achat}}
{{:assign date_mes=null}}
{{else}}
{{:assign date_mes=$_POST.date_mes|parse_date}}
{{/if}}
{{/if}} {{/if}}
{{* enregistrer l'écriture *}} {{* enregistrer l'écriture *}}
@ -127,8 +127,8 @@
{{if $status != "unfinished"}} {{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}}
@ -137,19 +137,18 @@
{{* enregistrer les infos de l'immobilisation *}} {{* enregistrer les infos de l'immobilisation *}}
{{:save {{:save
key=$key key=$key
validate_schema="asset.schema.json" validate_schema="schema.json"
type="immo" type="immo"
line=$immo_line_id line=$immo_id
duration=$duration duration=$duration
date_mes=$date_mes date=$date_debut
status=$status status=$status
created=true
}} }}
{{/if}} {{/if}}
{{if $status == "unfinished"}} {{if $status == "unfinished"}}
{{:assign type_immo="unfinished"}} {{:assign type_immo="unfinished"}}
{{elseif $status == "managed"}} {{elseif $_POST.amortir}}
{{:assign type_immo="managed"}} {{:assign type_immo="managed"}}
{{else}} {{else}}
{{:assign type_immo="other"}} {{:assign type_immo="other"}}
@ -161,7 +160,7 @@
{{:admin_header title="Ajout immobilisation" current="module_amortization"}} {{:admin_header title="Ajout immobilisation" current="module_amortization"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:linkbutton href="index.html" label="Retour" shape="left"}} {{:include file="_nav.html" current="index"}}
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
@ -202,7 +201,7 @@
name="credit_account" name="credit_account"
label="Compte de décaissement" label="Compte de décaissement"
required=true required=true
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"512*|530*|404*":$selected_year target="!acc/charts/accounts/selector.php?types=%s&id_year=%d"|args:"1|2|3":$selected_year
}} }}
{{:input {{:input
type="list" type="list"
@ -222,9 +221,10 @@
<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"}}
<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" default=$now|date_short help="C'est la date de première utilisation ; à modifier 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"}}
</div> </div>
</dl> </dl>
</fieldset> </fieldset>
@ -243,10 +243,12 @@ function changeYear(evt, f_accounts = ['credit_account', 'debit_account'], f_yea
setSelectorYear(f_accounts, f_years_select); setSelectorYear(f_accounts, f_years_select);
} }
function changeVisibility(evt, idcheck = 'f_amortir_1', fields = ['div_amort']) {
toggleVisibility(idcheck, fields);
}
(function () { (function () {
document.getElementById('f_id_year').onchange = changeYear; document.getElementById('f_id_year').onchange = changeYear;
document.getElementById('f_date_achat').addEventListener("change", (e) => { document.getElementById('f_amortir_1').onclick = changeVisibility;
document.getElementById('f_date_mes').value = document.getElementById('f_date_achat').value;
});
})(); })();
</script> </script>

View file

@ -1,221 +1,141 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{* {{*
Classer une immobilisation non prise en charge @param immo_id
@param immo_line_id @param type_immo : managed, amortized, archived, other
*}} *}}
{{* données de l'immobilisation *}} {{* données de l'immobilisaion *}}
{{:assign montant_affecte=0}} {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval assign="info_immo"}}
{{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}}
{{:assign choix_defaut=$info_immo.status}}
{{/load}} {{/load}}
{{#select {{#select
trans.id as immo_trans_id,
trans.label as trans_label,
trans.date as date_achat, trans.date as date_achat,
line.debit as montant, line.debit as montant
line.label as line_label,
acc.code,
acc.label as account_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 acc ON line.id_account = acc.id
WHERE line.id = :line_id; WHERE line.id = :line_id;
:line_id = $_GET.immo_line_id|intval :line_id = $_GET.immo_id
assign="ligne_immo" assign=ligne_immo
}} }}
{{else}}
{{:error message="Immobilisation non trouvée"}}
{{/select}} {{/select}}
{{:assign reste="%d-%d"|math:$ligne_immo.montant:$montant_affecte}}
{{:assign date_achat_defaut=$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign date_mes_defaut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign immo_label=$ligne_immo.trans_label}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $ligne_immo.trans_label}}
{{:assign immo_label=$immo_label|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{if $_POST.classify == null}} {{if $_POST.classify == null}}
{{:error message="Vous devez faire un choix de classement"}} {{:error message="Vous devez choisir une action"}}
{{/if}} {{/if}}
{{if $_POST.classify == "ignored"}} {{if $_POST.classify == "ignored"}}
{{* ne pas amortir *}} {{* ne pas amortir *}}
{{:assign duration=0}} {{:assign duration=0}}
{{:assign libelle=null}} {{:assign montant=0}}
{{:assign montant=null}} {{:assign date_debut=$ligne_immo.date_achat|parse_date}}
{{:assign date_achat=null}}
{{:assign date_mes=null}}
{{:assign status="ignored"}} {{:assign status="ignored"}}
{{elseif $_POST.classify == "archived"}}
{{* voir s'il y a déjà un doc associé à cette immo *}}
{{#load type="immo" where="$$.line = :immo_line_id" :immo_line_id=$_GET.immo_line_id|intval}}
{{:assign uuid=$key}}
{{:assign immo_doc_id=$id}}
{{else}}
{{:assign uuid=""|uuid}}
{{/load}}
{{* immobilisation sortie du bilan *}}
{{:save
key=$uuid
validate_schema="asset.schema.json"
type="immo"
line=$_GET.immo_line_id|intval
duration=0
status=null
assign_new_id="immo_doc_id"
}}
{{:redirect force="exit_step1.html?immo_doc_id=%s&from=exit"|args:$immo_doc_id}}
{{else}} {{else}}
{{* immobilisation amortissable *}} {{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}}
{{if $_POST.date_achat|parse_date > $ligne_immo.date_achat}} {{:assign date_debut=$_POST.date_mes|or:$ligne_immo.date_achat|parse_date}}
{{if $date_debut|strtotime < $ligne_immo.date_achat|strtotime}}
{{:assign dd=$date_debut|date_short}}
{{:assign da=$ligne_immo.date_achat|date_short}} {{:assign da=$ligne_immo.date_achat|date_short}}
{{:error message="Erreur : la date d'achat (%s) ne peut être postérieure à la date de l'écriture d'immobilisation (%s)"|args:$_POST.date_achat:$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}}
{{* vérifier que la date de mise en service est postérieure à la date d'acquisition *}} {{if $_POST.classify == "amortized"}}
{{:assign d1=$_POST.date_achat|or:$ligne_immo.date_achat|parse_date}} {{if $info_immo.duration == null}}
{{:assign d2=$_POST.date_mes|or:$d1|parse_date}} {{:assign duration=0}}
{{if $d2 < $d1}}
{{:assign da=$d1|date_short}}
{{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$_POST.date_mes:$da}}
{{/if}}
{{if $_POST.date_achat == null || $_POST.date_achat|parse_date == $ligne_immo.date_achat}}
{{:assign date_achat=null}}
{{else}}
{{:assign date_achat=$_POST.date_achat|parse_date}}
{{/if}}
{{if $_POST.date_mes == null || $_POST.date_mes == $_POST.date_achat}}
{{:assign date_mes=null}}
{{else}}
{{:assign date_mes=$_POST.date_mes|parse_date}}
{{/if}}
{{:assign duration=$_POST.duree|intval}}
{{if $duration <= 0}}
{{:error message="Erreur : la durée d'amortissement doit être strictement positive"}}
{{/if}}
{{if $_POST.libelle != $ligne_immo.line_label && $_POST.libelle != $ligne_immo.trans_label}}
{{:assign libelle=$_POST.libelle}}
{{/if}}
{{if $_POST.montant == null || $_POST.montant|money_int == 0 }}
{{if $montant_affecte > 0}}
{{:assign montant=$reste}}
{{else}} {{else}}
{{:assign montant=null}} {{:assign duration=$info_immo.duration}}
{{/if}} {{/if}}
{{: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 montant=$_POST.montant|money_int}} {{:assign duration=$_POST.duree|intval}}
{{if $montant == $ligne_immo.montant}} {{if $duration <= 0}}
{{:assign montant=null}} {{:error message="Erreur : la durée d'amortissement doit être strictement positive"}}
{{/if}} {{/if}}
{{:assign status="managed"}}
{{/if}} {{/if}}
{{if $montant > $reste}} {{:assign montant="%d*100"|math:$_POST.montant}}
{{:assign reste_nb="%f"|math:$reste|money_currency:false}}
{{:assign montant_nb="%f"|math:$montant|money_currency:false}}
{{:error message="Le montant (%s) ne peut être supérieur au reste (%s)"|args:$montant_nb:$reste_nb}}
{{/if}}
{{:assign status="managed"}}
{{/if}} {{/if}}
{{* enregistrer les infos de l'immobilisation *}} {{* enregistrer les infos de l'immobilisation *}}
{{if $info_immo == null || $montant_affecte > 0}} {{if $info_immo == null}}
{{:assign key=""|uuid}} {{:assign key=""|uuid}}
{{else}} {{else}}
{{:assign key=$info_immo.key}} {{:assign key=$info_immo.key}}
{{/if}} {{/if}}
{{:save {{:save
key=$key key=$key
validate_schema="asset.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
label=$libelle amount=$montant|intval
amount=$montant date=$date_debut
date_achat=$date_achat
date_mes=$date_mes
status=$status status=$status
}} }}
{{if $_POST.classify == "managed"}} {{if $_POST.classify == "managed" || $_POST.classify == "amortized"}}
{{:assign type_immo="managed"}} {{:assign type_immo=$_POST.classify}}
{{else}} {{elseif $_POST.classify == "ignored"}}
{{:assign type_immo="other"}} {{:assign type_immo="other"}}
{{else}}
{{: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}}
{{else}}
{{:form_errors}}
{{/form}} {{/form}}
{{:admin_header title="Classer l'immobilisation" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Classer l'immobilisation" custom_css=$custom_css current="module_amortization"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="other" subcurrent="parameter"}} {{:include file="_nav.html" current="index"}}
{{/if}} {{/if}}
{{:form_errors}}
{{* date de début du 1er exercice dans paheko *}} {{:assign choix_defaut=$_GET.type_immo}}
{{#years order="start_date" limit=1}}
{{:assign first_date=$start_date}} {{if $info_immo != null}}
{{/years}} {{:assign date_defaut=$info_immo.date}}
{{:assign duree_defaut=$info_immo.duration}}
{{:assign montant_defaut=$info_immo.amount}}
{{else}}
{{:assign duree_defaut=null}}
{{:assign montant_defaut=null}}
{{/if}}
{{* {{*
- classer l'immobilisation - classer l'immobilisation
- renseigner ou modifier la date de mise en service, les écritures associées ou la durée d'amortissement - renseigner ou modifier la date de mise en service, le montant de
l'immobilisation et 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</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>{{$immo_label}}
</dd>
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.montant|money_currency_html:false|raw}}</dd>
{{if $montant_affecte > 0}}
<dt>Montant déjà affecté</dt>
<dd class="money strong">{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}</dd>
<dt>Montant restant à affecter</dt>
<dd class="money strong">{{"%f"|math:$reste|money_currency_html:false|raw}}</dd>
{{/if}}
<dt>Date de l'écriture d'immobilisation</dt>
<dd>{{$ligne_immo.date_achat|date_short}}</dd>
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.code}} — {{$ligne_immo.account_label}}
</dl>
</div>
<form method="post" action=""> <form method="post" action="">
<fieldset> <fieldset>
<legend>Classement</legend> <legend>Classement</legend>
<dl id="classement_immo"> <dl id="classement_immo">
<dt><label>Faites un choix</label> <b>(obligatoire)</b></dt> <dt><label>Faites un choix</label> <b>(obligatoire)</b></dt>
{{:input type="radio-btn" name="classify" value="managed" label="Immobilisation à amortir" default=$choix_defaut}} {{:input type="radio-btn" name="classify" value="managed" label="Immobilisation à amortir" help="Cette immobilisation sera classée parmi les immobilisations amortissables" default=$choix_defaut}}
{{if $ligne_immo.date_achat > $first_date}} {{: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" 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}}
{{/if}} {{: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}}
{{:input type="radio-btn" name="classify" value="ignored" label="Immobilisation à ignorer" help="L'écriture n'apparaitra plus dans la liste des immobilisations" default=$choix_defaut}}
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="masquable"> <fieldset id="infos_immo">
<legend>Informations</legend> <legend>Informations</legend>
<dl> <dl>
{{:input type="date" name="date_achat" label="Date d'acquisition" default=$date_achat_defaut help="à modifier si nécessaire"}} {{:input type="number" name="duree" label="Durée d'amortissement" default=$duree_defaut required=true min=1}}
{{:input type="text" name="libelle" label="Libellé" default=$immo_label help="à modifier si nécessaire"}} {{:input type="money" name="montant" label="Montant" default=$montant_defaut help="à renseigner uniquement si différent du montant de l'acquisition"}}
{{:input type="money" name="montant" label="Montant de l'immobilisation" required=true default=$reste help="à modifier si différent du montant de l'écriture d'immobilisation"}} {{: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"}}
{{:input type="number" name="duree" label="Durée d'amortissement" required=true min=1 suffix="année(s)"}}
{{:input type="date" name="date_mes" label="Date de mise en service" default=$date_mes_defaut help="à modifier si différente de la date d'acquisition"}}
</dl> </dl>
</fieldset> </fieldset>
@ -227,17 +147,20 @@
{{:admin_footer}} {{:admin_footer}}
<script type="text/javascript" src="scripts.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var info_immo = {{$info_immo|json_encode|raw}};
// afficher/masquer les champs de saisie // afficher/masquer les champs de saisie
function toggleInputs(event) { function toggleInputs(event) {
const classement_immo = document.getElementById('classement_immo'); const classement_immo = document.getElementById('classement_immo');
const managed = classement_immo.querySelector('input[type=radio][value=managed]'); const managed = classement_immo.querySelector('input[type=radio][value=managed]');
const amortized = classement_immo.querySelector('input[type=radio][value=amortized]');
if (managed.checked) { if (managed.checked) {
g.toggle('.masquable', true); g.toggle('#infos_immo', true);
} else if (amortized.checked && info_immo != null && info_immo.duration != 0) {
g.toggle('#infos_immo', true);
} else { } else {
g.toggle('.masquable', false); g.toggle('#infos_immo', false);
} }
} }
toggleInputs(); toggleInputs();
@ -247,9 +170,6 @@ toggleInputs();
radios.forEach(radio => { radios.forEach(radio => {
radio.addEventListener("change", toggleInputs); radio.addEventListener("change", toggleInputs);
}); });
document.getElementById('f_date_achat').addEventListener("change", (e) => {
document.getElementById('f_date_mes').value = document.getElementById('f_date_achat').value;
});
})(); })();
</script> </script>

163
aide.html
View file

@ -1,12 +1,163 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{:admin_header title="Aide" custom_css="./style_aide.css" current="module_amortization"}} {{:admin_header title="Aide" custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{:include file="_nav.html" current="aide"}} {{:include file="_nav.html" current="aide"}}
<section class="page"> <p class="aide">
<article> Ce module gère l'amortissement linéaire des immobilisations.
{{:include file="doc/aide.html"}} </p>
</article>
</section> <h2 class="aide">Immobilisations</h2>
Elles sont classées dans plusieurs onglets :
<ul class="aide">
<li><strong>En cours</strong> : immobilisations en cours d'amortissement.</li>
<li><strong>Terminées</strong> : immobilisations dont l'amortissement est terminé.</li>
<li><strong>Archivées</strong> : immobilisations qui ont été sortie du bilan.</li>
<li><strong>Autres</strong> : immobilisations pour lesquelles le module n'a pas
d'information ou qui ont été marquées non amortissables.</li>
</ul>
<h3 class="aide">Ajouter une immobilisation</h3>
<div class="aide">
<p class="aide">
Il faut renseigner les informations de l'immobilisation.
On peut indiquer qu'il s'agit d'une immobilisation qui ne doit
pas être amortie ; dans le cas contraire, il faut renseigner
les différents paramètres de l'immobilisation
</p>
<!--
<ul class="aide">
<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>Libellé de l'immobilisation</li>
<li>Montant</li>
<li>Durée d'amortissement en années</li>
<li>Compte de décaissement : à choisir dans la liste</li>
<li>Compte d'immobilisation : doit débuter par <b>20</b>, <b>21</b> ou <b>27</b></li>
<li>Projet analytique (optionnel)</li>
</ul>
<p>
Après ajout, on se retrouve sur la page d'accueil des immobilisations.
</p>
-->
</div>
<h3 class="aide">Amortissements</h2>
<div class="infos">
<p class="aide">
Le calcul de l'amortissement se fait par la <em>méthode linéaire</em>.
</p>
<p class="aide">
La date de début du calcul est par défaut la <em>date d'achat</em> ; si la
date de mise en service est <em>postérieure</em> à la date d'achat, c'est
celle-ci qui est prise en compte.
</p>
</div>
<h3 class="aide">Liste des amortissements</h3>
<div class="aide">
On trouve ici de une à trois listes, selon la situation :
<ul class="aide">
<li>
<b>Amortissements enregistrés</b>
<p>
Ce sont des écritures d'amortissement déjà
enregistrées et liées à l'écriture de
l'immobilisation courante.
</p>
</li>
<li>
<b>Amortissements futurs</b>
<p>
Ce sont les écritures amortissement de
l'immobilisation courante qui n'ont pas encore été
enregistrées ; seuls les amortissements d'un
exercice ouvert peuvent être enregistrés ; les
autres sont présents pour information et pourront
être enregistrés quand l'exercice correspondant
aura été ouvert.
</p>
</li>
<li>
<b>Autres amortissement non rattachés</b>
<p>
Ce sont des écritures passées sur un compte
d'amortissement (<b>28xx</b>) qui ne sont
associées à aucune écriture d'immobilisation ; en
cliquant le bouton « Attacher », on peut rattacher
l'écriture d'amortissement sélectionnée à
l'immobilisation courante.
</p>
<p>
Si on a rattaché par erreur une écriture
d'amortissement à une immobilisation, le bouton «
Détacher » en face de l'écriture permettra de
défaire l'opération.
</p>
</li>
</ul>
</div>
<h3 class="aide">Créer une écriture d'amortissement</h3>
<div class="aide">
<p class=aide">
Il faut renseigner les différents paramètres de l'amortissement :
<ul class="aide">
<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>Montant : sa valeur est calculée par le module ; elle peut être modifiée</li>
<li>
Compte de débit : à choisir dans la liste ; par défaut
c'est le compte <em>6811 : Dotation aux amortissements
des immobilisations</em>
</li>
<li>
Compte d'amortissement : à choisir dans la liste ; par
défaut c'est le compte formé en intercalant un 8 après
le 2 initial du compte d'immobilisation (exemple :
2183 => 28183)
</li>
</ul>
<!--
<p class="aide">
Après enregistrement, on se retrouve sur la page des amortissements
</p>
-->
</p>
</div>
<h2 class="aide">Remarques</h2>
<ul class="aide">
<li>
Les écritures d'immobilisation et d'amortissement créées en
dehors du module ne peuvent être associées automatiquement que
si leurs écritures ont été liées ; dans le cas contraire, il
faudra renseigner manuellement les infos de l'immobilisation.
</li>
</ul>
<p class="aide">
Dans le deuxième cas, il faut cliquer sur le bouton « Ajouter
infos » puis :
<ul class="aide">
<li>soit indiquer que l'immobilisation ne doit pas être amortie</li>
<li>soit fournir la date de mise en service du bien (si différente de la date d'acquisition) ainsi
que la durée en années de l'amortissement</li>
</ul>
</p>
<p class="aide">
Tant qu'une immobilisation ne possède pas d'amortissement, il est
possible de modifier ses informations à l'aide du bouton «
Modifier infos ».
</p>

View file

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

View file

@ -1,174 +1,56 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{* {{*
Enregistrer la liaison entre une ligne d'écriture d'amortissement Enregistrer la liaison entre une écriture d'amortissement et
et une ligne d'écriture d'immobilisation l'écriture d'immobilisation correspondante
@param immo_doc_id : numéro du doc d'immo
@param amort_line_id : numéro de ligne de l'écriture d'amortissement
*}} *}}
{{* données de l'immobilisation *}} {{* chercher l'écriture d'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}} {{#select
{{if $message != null}} id_transaction
{{:error message=$message}} FROM acc_transactions_lines
{{/if}} WHERE id = :line_id;
:line_id = $_GET.immo_id|intval
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} }}
{{if $label_immo|strpos:$ligne_immo.line_label === false}} {{:assign immo_trans_id=$id_transaction}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} {{else}}
{{/if}} {{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}} {{/select}}
{{* chercher l'écriture d'amortissement *}} {{* chercher l'écriture d'amortissement *}}
{{#select {{#select
line.credit as amount, id_transaction
line.label as line_label, FROM acc_transactions_lines
trans.date as amort_date, WHERE id = :line_id;
trans.label as trans_label, :line_id = $_GET.amort_id|intval
trans.id as trans_id,
acc.code as account_code,
acc.label as account_label
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.amort_line_id|intval
assign="amort_line"
}} }}
{{:assign amort_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Amortissement non trouvé"}} {{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{/select}} {{/select}}
{{:assign amort_label=$amort_line.trans_label}}
{{if $amort_line.line_label != null && $amort_line.line_label != $amort_label}}
{{:assign amort_label=$amort_label|cat:"— "|cat:$amort_line.line_label}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$amort_line.trans_id}}
{{* montant de l'écriture d'amortissement déjà affecté *}} {{* chercher les liaisons de l'écriture d'immobilisation *}}
{{:assign montant_affecte=0}} {{#select
{{#load type="amort_link" CASE links.id_related = :immo_trans_id
where="$$.amort_line_id = :amort_line_id" WHEN true THEN links.id_transaction
:amort_line_id = $_GET.amort_line_id|intval WHEN false THEN links.id_related
END as linked_id
FROM acc_transactions_links as links
WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id;
:immo_trans_id = $immo_trans_id
}} }}
{{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}} {{:assign var="linked_transactions." value=$linked_id}}
{{/load}} {{/select}}
{{:assign reste="%d-%d"|math:$amort_line.amount:$montant_affecte}}
{{* Traiter l'envoi du formulaire *}} {{* ajouter la nouvelle liaison *}}
{{#form on="save"}} {{:assign var="linked_transactions." value=$amort_id}}
{{* vérifier que le montant saisi est inférieur au reste *}}
{{if $_POST.montant == null || $_POST.montant == 0}}
{{:assign montant_amort=$reste}}
{{if $montant_affecte == 0}}
{{:assign saved_amount=null}}
{{else}}
{{:assign saved_amount=$reste}}
{{/if}}
{{else}}
{{:assign montant_amort=$_POST.montant|money_int}}
{{if $montant_amort > $reste}}
{{:assign reste_nb="%f"|math:$reste|money_currency:false}}
{{:error message="Le montant de l'amortissement ne peut être supérieur au reste (%s)"|args:$reste_nb}}
{{/if}}
{{if $montant_amort == $amort_line.amount}}
{{:assign saved_amount=null}}
{{else}}
{{:assign saved_amount=$montant_amort}}
{{/if}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
{{:assign montant_immo="%d-%d"|math:$montant_immo:$total_credits}}
{{* montant des amortissements *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_amort"}}
{{* vérifier que le montant total des amortissements ne dépasse pas la valeur de l'immo *}}
{{:assign vnc="%d-%d"|math:$montant_immo:$total_amort}}
{{:assign total_amort="%d+%d"|math:$total_amort:$montant_amort}}
{{if $total_amort > $montant_immo}}
{{:assign ma="%f"|math:$montant_amort|money_currency:false}}
{{:assign vnc="%f"|math:$vnc|money_currency:false}}
{{:error message="Le montant de l'amortissement (%s) dépasse la valeur résiduelle de l'immobilisation (%s)"|args:$ma:$vnc}}
{{/if}}
{{*
supprimer les documents qui pointent sur une ligne d'amortissement absente
cas de la suppression manuelle d'un amortissement
*}}
{{:include file="_remove_orphan_docs.tpl"}}
{{* Lier l'écriture d'amortissement à l'écriture d'immobilisation *}}
{{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$amort_line.trans_id}}
{{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}}
{{* TODO voir si nécessaire ? *}}
{{#load type="amort_link"
where="$$.immo_doc_id = :immo_doc_id AND $$.amort_line_id = :amort_line_id"
:immo_doc_id=$_GET.immo_doc_id|intval
:amort_line_id = $_GET.amort_line_id|intval
limit=1
}}
{{else}}
{{:save
key=""|uuid
type="amort_link"
immo_doc_id=$_GET.immo_doc_id|intval
amort_line_id=$_GET.amort_line_id|intval
amount=$saved_amount
}}
{{/load}}
{{* immo soldée ? *}}
{{if $total_amort == $montant_immo && $_GET.from != "exit"}}
{{:assign status="amortized"}}
{{:save
key=$info_immo.key
status=$status
}}
{{/if}}
{{if $_GET.from == "exit"}}
{{:redirect force="exit_step2.html?immo_doc_id=%s&from=exit&ok=1&msg=attach_amort"|args:$_GET.immo_doc_id}}
{{else}}
{{:redirect force="amortization.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=attach_amort"|args:$_GET.immo_doc_id:$status}}
{{/if}}
{{/form}}
{{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="_nav.html" current="managed" subcurrent="attach_amort"}}
{{/if}}
{{:form_errors}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd>{{$label_immo}}</dd>
<dt>Amortissement</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$amort_line.trans_id}}</a></span> {{$amort_label}}</dd>
<dt>Montant de l'écriture d'amortissement</dt>
<dd>{{$amort_line.amount|money_currency_html:false|raw}}</dd>
{{if $montant_affecte > 0}}
<dt>Montant déjà affecté</dt>
<dd class="money strong">{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}</dd>
<dt>Montant restant à affecter</dt>
<dd class="money strong">{{"%f"|math:$reste|money_currency_html:false|raw}}</dd>
{{/if}}
</dl>
</div>
<form method="post" action="" data-focus="1">
<fieldset>
<dl>
{{:input type="money" name="montant" label="Montant" default=$reste required=true help="Montant de l'amortissement"}}
</dl>
</fieldset>
<p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>
{{* Enregistrer les liaisons *}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$immo_trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}
{{:redirect force="amortization.html?immo_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_id:$amort_id}}

View file

@ -1,39 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Enregistrer la liaison entre une écriture d'immobilisation et
une écriture de cession
@param immo_doc_id : id du document associé à l'immobilisation
@param cession_line_id : ligne de l'écriture de cession
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{* chercher l'écriture de cession de l'immobilisation *}}
{{#select
id_transaction
FROM acc_transactions_lines
WHERE id = :line_id;
:line_id = $_GET.cession_line_id|intval
}}
{{:assign cession_id=$id_transaction}}
{{else}}
{{:error message="Impossible de trouver l'écriture de cession de l'immobilisation"}}
{{/select}}
{{* Lier l'écriture de cession à l'écriture d'immobilisation *}}
{{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$cession_id}}
{{* enregistrer la liaison de l'écriture de cession *}}
{{:save
key=""|uuid
type="cession_link"
immo_doc_id=$info_immo.id
cession_line_id=$_GET.cession_line_id|intval
}}
{{:redirect force="exit_step3.html?immo_doc_id=%s&from=exit&ok=1&msg=attach_cession"|args:$_GET.immo_doc_id}}

View file

@ -1,148 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Enregistrer la liaison entre une ligne d'immobilisation et
une ligne d'écriture au crédit du compte de l'immobilisation
@param immo_doc_id : numéro du doc d'immo
@param credit_line_id : ligne d'écriture au crédit du compte de l'immobilisation
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label === false }}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
{{:assign valeur_residuelle="%d-%d"|math:$ligne_immo.amount:$total_credits}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort, created_amort"}}
{{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$total_amort}}
{{* chercher l'écriture au crédit du compte d'immobilisation *}}
{{#select
line.id_transaction as trans_id,
line.credit as amount,
trans.label as trans_label,
line.label as line_label
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.credit_line_id|intval
assign="credit_line"
}}
{{else}}
{{:error message="Écriture au crédit non trouvée"}}
{{/select}}
{{:assign credit_trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$credit_line.trans_id}}
{{* montant de l'écriture de crédit déjà affecté *}}
{{:assign montant_affecte=0}}
{{#load type="credit_link"
where="$$.credit_line_id = :credit_line_id"
:credit_line_id = $_GET.credit_line_id|intval
}}
{{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}}
{{/load}}
{{:assign reste="%d-%d"|math:$credit_line.amount:$montant_affecte}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
{{if $_POST.montant == null}}
{{if $montant_affecte == 0}}
{{:assign saved_credit=null}}
{{:assign montant_credit=$credit_line.amount}}
{{else}}
{{:assign saved_credit=$reste}}
{{:assign montant_credit=$reste}}
{{/if}}
{{else}}
{{:assign montant_credit=$_POST.montant|money_int}}
{{/if}}
{{* vérifier que le montant saisi est inférieur à la valeur nette de l'écriture d'immobilisation *}}
{{if $montant_credit > $valeur_residuelle}}
{{:assign solde_nb="%f"|math:$valeur_residuelle|money_currency:false}}
{{:error message="Le montant de l'avoir ne peut être supérieur à la valeur nette de l'immobilisation (%s)"|args:$solde_nb}}
{{/if}}
{{* vérifier que le montant saisi est inférieur au reste de l'écriture de crédit *}}
{{if $montant_credit > $reste}}
{{:assign reste_nb="%f"|math:$reste|money_currency:false}}
{{:error message="Le montant de l'avoir ne peut être supérieur au reste (%s)"|args:$reste_nb}}
{{/if}}
{{if $montant_credit == $credit_line.amount}}
{{:assign saved_credit=null}}
{{else}}
{{:assign saved_credit=$montant_credit}}
{{/if}}
{{* Lier l'écriture de crédit à l'écriture d'immobilisation *}}
{{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$credit_line.trans_id}}
{{* enregistrer la liaison des lignes d'immo *}}
{{:save
key=""|uuid
type="credit_link"
immo_doc_id=$_GET.immo_doc_id|intval
credit_line_id=$_GET.credit_line_id|intval
amount=$saved_credit
}}
{{if $_GET.from == "exit"}}
{{:redirect force="exit_step1.html?immo_doc_id=%s&from=%s&ok=1&msg=attach_avoir"|args:$_GET.immo_doc_id:$_GET.from}}
{{else}}
{{:redirect force="amortization.html?immo_doc_id=%s&ok=1&msg=attach_avoir"|args:$_GET.immo_doc_id}}
{{/if}}
{{/form}}
{{:admin_header title="Écritures au crédit du compte d'immobilisation" custom_css="./style.css" current="module_amortization"}}
{{if ! $dialog}}
{{:include
file="_nav.html"
current="managed"
subcurrent="attach_credit"
type_immo="other"
}}
{{/if}}
{{:form_errors}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd>{{$label_immo}}</dd>
<dt>Écriture au crédit du compte d'immobilisation</dt>
<dd><span class="num"><a href="{{$credit_trans_url}}">#{{$credit_line.trans_id}}</a></span> {{$credit_line.trans_label}}{{if $credit_line.line_label != null && $credit_line.line_label != $credit_line.trans_label}} — {{$credit_line.line_label}}{{/if}}</dd>
<dt>Montant de l'écriture</dt>
<dd>{{$credit_line.amount|money_currency_html:false|raw}}</dd>
<dt>Montant déjà affecté</dt>
<dd class="money strong">{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}</dd>
<dt>Montant restant à affecter</dt>
<dd class="money strong">{{"%f"|math:$reste|money_currency_html:false|raw}}</dd>
</dl>
</div>
<form method="post" action="" data-focus="1">
<fieldset>
<dl>
{{:input type="money" name="montant" label="Montant" default=$reste help="Montant de l'avoir"}}
</dl>
</fieldset>
<p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>

View file

@ -1,39 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Enregistrer la liaison entre une écriture d'immobilisation et
une écriture de sortie d'immobilisation
@param immo_doc_id : id du document associé à l'immobilisation
@param exit_line_id : ligne de l'écriture de sortie d'immobilisation
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{* chercher l'écriture de sortie d'immobilisation *}}
{{#select
id_transaction
FROM acc_transactions_lines
WHERE id = :line_id;
:line_id = $_GET.exit_line_id|intval
}}
{{:assign rebut_id=$id_transaction}}
{{else}}
{{:error message="Impossible de trouver l'écriture de sortie d'immobilisation"}}
{{/select}}
{{* Lier l'écriture de sortie à l'écriture d'immobilisation *}}
{{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$rebut_id}}
{{* enregistrer la liaison de l'écriture de sortie *}}
{{:save
key=""|uuid
type="exit_link"
immo_doc_id=$info_immo.id
exit_line_id=$_GET.exit_line_id|intval
}}
{{:redirect to="exit_step4.html?immo_doc_id=%s&from=exit&ok=1&msg=attach_exit"|args:$_GET.immo_doc_id}}

View file

@ -2,60 +2,76 @@
{{* {{*
Sortir une immobilisation du bilan Sortir une immobilisation du bilan
@param immo_doc_id : id du doc associé à l'immo @param immo_id : id de la ligne d'immobilisation
*}} *}}
{{* données de l'immobilisation *}} {{* Infos de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}} {{#select
{{if $message != null}} line.debit as montant,
{{:error message=$message}} trans.date as date_achat,
{{/if}} trans.label
FROM acc_transactions_lines AS line
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
{{if $label_immo|strpos:$ligne_immo.line_label === false}} WHERE line.id = :line_id;
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} :line_id = $_GET.immo_id|intval
{{/if}} assign="ligne_immo"
}}
{{:assign date_achat=$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{if $info_immo.date_mes != null && $info_immo.date_mes != $date_achat}}
{{:assign date_mes=$info_immo.date_mes}}
{{/if}}
{{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
{{:assign var="ligne_immo.amount" value="%d-%d"|math:$ligne_immo.amount:$total_credits}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort"}}
{{:assign amort_number=$linked_amort|count}}
{{#foreach from=$linked_amort|ksort item="line"}}
{{if $first_amort_date == null}}
{{:assign first_amort_date=$line.date}}
{{/if}}
{{if $last_amort_date == null}}
{{:assign last_amort_date=$line.date}}
{{elseif $line.date > $last_amort_date}}
{{:assign last_amort_date=$line.date}}
{{/if}}
{{/foreach}}
{{if $total_amort == 0}}
{{if $info_immo.status == "amortized"}}
{{:assign total_amort=$ligne_immo.amount}}
{{/if}}
{{else}} {{else}}
{{:assign date_debut=$last_amort_date}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}}
{{:assign date_debut=$ligne_immo.date_achat}}
{{:assign ts_mes=$ligne_immo.date_achat|strtotime}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{:assign ts_mes=$date|strtotime}}
{{:assign date_debut=$date}}
{{:assign duree_amort=$duration}}
{{if $amount != null}}
{{:assign var="ligne_immo.montant" value=$amount}}
{{/if}}
{{/load}}
{{* chercher des écritures d'amortissement liées à l'immobilisation *}}
{{#select
SUM(l_amort.credit) as amort_amount,
CASE
WHEN links.id_related = t_immo.id
THEN links.id_transaction
ELSE links.id_related
END as amort_trans_id,
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
INNER JOIN acc_transactions as t_immo on t_immo.id = l_immo.id_transaction
INNER JOIN acc_transactions_links as links
ON (t_immo.id = links.id_transaction
OR
t_immo.id = links.id_related)
INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction
INNER join acc_transactions as trans on l_amort.id_transaction = trans.id
INNER JOIN acc_accounts AS account ON l_amort.id_account = account.id
WHERE l_immo.id = :line_id AND account.code LIKE '28%'
LIMIT 1;
:line_id = $_GET.immo_id|intval
assign=amort_line
}}
{{/select}}
{{if $amort_line.amort_number == 0}}
{{if $info_immo.status == "amortized"}}
{{:assign amort_amount=$ligne_immo.montant}}
{{else}}
{{:assign amort_amount=0}}
{{/if}}
{{else}}
{{: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"}}
{{/if}} {{/if}}
{{:assign ts_debut=$date_debut|strtotime}} {{:assign ts_debut=$date_debut|strtotime}}
{{:assign ts_debut="%d+(60*60*24)"|math:$ts_debut}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$amort_amount}}
{{:assign date_debut=$ts_debut|date:"Y-m-d"}}
{{:assign valeur_nette="%f-%f"|math:$ligne_immo.amount:$total_amort}}
{{* {{*
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
@ -70,8 +86,7 @@
{{:assign fin=$end_date|date_short}} {{:assign fin=$end_date|date_short}}
{{:assign var="open_years.%d"|args:$id value=$label|cat:" (du "|cat:$debut|cat:" au "|cat:$fin|cat:")"}} {{:assign var="open_years.%d"|args:$id value=$label|cat:" (du "|cat:$debut|cat:" au "|cat:$fin|cat:")"}}
{{else}} {{else}}
{{:assign debut=$date_debut|date_short}} {{:error message="Aucun exercice ouvert pour enregistrer un amortissement"}}
{{:error message="Aucun exercice ouvert pour enregistrer la sortie de bilan à partir du %s"|args:$debut}}
{{/years}} {{/years}}
{{if $years|count == 1}} {{if $years|count == 1}}
{{:assign default_year=$years.0.id}} {{:assign default_year=$years.0.id}}
@ -86,89 +101,125 @@
{{:error message="Vous devez renseigner la date de sortie"}} {{:error message="Vous devez renseigner la date de sortie"}}
{{/if}} {{/if}}
{{* vérifier la validité de la date de mise en service *}}
{{if $_POST.date_mes != null}}
{{:assign ts_mes=$_POST.date_mes|parse_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 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}}
{{/if}}
{{/if}}
{{* vérifier la validité de la durée d'immobilisation *}}
{{if $valeur_nette > 0}}
{{if $info_immo.duration == null}}
{{if $_POST.duree == null}}
{{:error message="Vous devez renseigner la durée de l'immobilisation"}}
{{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_line.amort_number}}
{{else}}
{{:assign duree_amort=$_POST.duree}}
{{/if}}
{{/if}}
{{/if}}
{{* vérifier la validité de la date de sortie *}} {{* vérifier la validité de la date de sortie *}}
{{if $info_immo.date_mes != null}} {{if $info_immo.date != null}}
{{if $_POST.date_sortie|parse_date < $info_immo.date_mes}} {{if $_POST.date_sortie|parse_date < $info_immo.date}}
{{:assign immo_date=$info_immo.date_mes|date_short}} {{:assign immo_date=$info_immo.date|date_short}}
{{:error message="La date de sortie doit être postérieure à la date de mise en service de l'immobilisation (%s)"|args:$immo_date}} {{:error message="La date de sortie doit être postérieure à la date de mise en service de l'immobilisation (%s)"|args:$immo_date}}
{{/if}} {{/if}}
{{elseif $_POST.date_mes != null}}
{{if $_POST.date_sortie|parse_date < $_POST.date_mes|parse_date}}
{{:error message="La date de sortie doit être postérieure à la date de mise en service de l'immobilisation (%s)"|args:$_POST.date_mes}}
{{/if}}
{{elseif $_POST.date_sortie|parse_date < $ligne_immo.date_achat}} {{elseif $_POST.date_sortie|parse_date < $ligne_immo.date_achat}}
{{: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 *}}
{{:assign ts_exit = $_POST.date_sortie|parse_date|strtotime}} {{:assign ts_exit = $_POST.date_sortie|parse_date|strtotime}}
{{:assign exercice_ok=false}} {{:assign ok=false}}
{{* vérifier que la date de sortie est dans l'exercice choisi *}} {{:assign msg_amort=""}}
{{#foreach from=$years item="current_year"}} {{#foreach from=$years}}
{{if $current_year.id == $_POST.id_year}} {{if $id == $_POST.id_year}}
{{:assign selected_year=$current_year.id}} {{:assign selected_year=$id}}
{{if $start_date|strtotime <= $ts_exit && $ts_exit <= $end_date|strtotime}} {{if $start_date|strtotime <= $ts_exit && $ts_exit <= $end_date|strtotime}}
{{:assign current_year=$current_year}} {{:assign ok=true}}
{{:assign exercice_ok=true}}
{{:break}} {{:break}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{* voir si des amortissements ont été oubliés *}}
{{if $valeur_nette > 0 && $info_immo.status != "amortized" && $start_date|strtotime > $amort_line.last_amort_date|strtotime && $end_date|strtotime < $now}}
{{:assign debut=$start_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}}
{{/if}}
{{/foreach}} {{/foreach}}
{{if ! $exercice_ok}} {{if ! $ok}}
{{:error message="La date choisie n'est pas dans l'exercice sélectionné !"}} {{:error message="La date choisie n'est pas dans l'exercice sélectionné !"}}
{{/if}} {{/if}}
{{if $msg_amort != ""}}
{{* voir si des amortissements ont été oubliés *}} {{:error message="Vous devez d'abord enregistrer les amortissements des exercices suivants : %s"|args:$msg_amort}}
{{if $valeur_nette > 0 && $info_immo.status != "amortized"}}
{{if $current_year.start_date <= $date_debut && $date_debut <= $current_year.end_date}}
{{:assign amort_ok=true}}
{{else}}
{{:assign amort_ok=false}}
{{/if}}
{{if ! $amort_ok}}
{{:error message="Vous devez d'abord enregistrer les amortissements des exercices précédents"}}
{{/if}}
{{/if}} {{/if}}
{{:redirect to="compute_exit_data.html?immo_doc_id=%s&amort_amount=%s&year=%s&date_debut=%s&exit_date=%s"|args:$_GET.immo_doc_id:$total_amort:$selected_year:$ts_debut:$ts_exit}} {{: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_amortization"}}
{{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="%s"|args:$_GET.type_immo subcurrent="balance_exit"}} {{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="balance_exit"}}
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
{{* formulaire de sortie du bilan *}} {{* formulaire de sortie du bilan *}}
<h3>Sortir l'immobilisation « {{$label_immo}} » du bilan</h3> <h3>Sortir l'immobilisation « {{$ligne_immo.label}} » du bilan</h3>
<form method="post" action=""> <form method="post" action="">
<div class="informations"> <div class="informations">
<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.amount|money_currency_html:false|raw}}</dd> <dd id="montant_immo" class="money">{{$ligne_immo.montant|money_currency_html:false|raw}}</dd>
<dt>Date d'acquisition</dt> <dt>Date d'acquisition</dt>
<dd>{{$date_achat|date_short}} <dd >{{$ligne_immo.date_achat|date_short}}</dd>
{{if $date_mes != null}} {{if $info_immo.date != null && $info_immo.date != $ligne_immo.date_achat}}
<dt>Date de mise en service</dt> <dt>Date de mise en service</dt>
<dd>{{$date_mes|date_short}}</dd> <dd>{{$info_immo.date|date_short}}</dd>
{{/if}} {{/if}}
{{if $info_immo.duration != null}} {{if $info_immo.duration != null}}
<dt>Durée de l'amortissement</dt> <dt>Durée de l'amortissement</dt>
<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_html:false|raw}} <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_html:false|raw}} <span class="help">(à la date de début de l'exercice)</span></dd>
{{if $last_amort_date != null}}
<dt>Date du dernier amortissement</dt>
<dd>{{$last_amort_date|date_short}}</dd>
{{/if}}
</dl> </dl>
</div> </div>
{{if $valeur_nette > 0}}
{{if $info_immo.date == null || $info_immo.duration == null}}
<fieldset>
<legend>Informations sur l'immobilisation</legend>
<dl>
{{if $info_immo.date == null}}
{{: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"}}
{{/if}}
{{if $info_immo.duration == null}}
{{:input type="number" name="duree" label="Durée d'amortissement" required=true min=1 help="La durée est nécessaire pour calculer l'amortissement complémentaire"}}
{{/if}}
</dl>
</fieldset>
{{/if}}
{{/if}}
<fieldset> <fieldset>
<legend>Informations de sortie</legend> <legend>Informations de sortie</legend>
<dl> <dl>

View file

@ -3,44 +3,39 @@
{{* {{*
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 :
@param immo_doc_id : id du doc associé à l'immo - immo_id : numéro de ligne de l'écriture d'immobilisation
@param amort_amount : montant des amortissements - amort_amount : montant des amortissements
@param year : exercice de la date de sortie de l'immobilisation - year : exercice de la date de sortie de l'immobilisation
@param date_debut : date de début de la période d'amortissement complémentaire - date_mes : datede mise en service de l'immobilisation
@param exit_date : date de sortie de l'immobilisation - date_debut : date de début de la période d'amortissement complémentaire
- exit_date : date de sortie de l'immobilisation
- duree_amort : durée de l'amortiseement (optionnel)
*}} *}}
{{* TODO boutons de navigation avant-arrière*}} {{#select
line.debit as montant,
{{* données de l'immobilisation *}} trans.date as date_achat,
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}} trans.label
{{if $message != null}} FROM acc_transactions_lines AS line
{{:error message=$message}} INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
{{/if}} WHERE line.id = :line_id;
:line_id = $_GET.immo_id|intval
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} assign="ligne_immo"
{{if $label_immo|strpos:$ligne_immo.line_label === false}} }}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} {{else}}
{{/if}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}}
{{:assign date_achat=$info_immo.date_achat|or:$ligne_immo.date_achat}} {{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{if $info_immo.date_mes != null && $info_immo.date_mes != $date_achat}} {{if $amount != null}}
{{:assign date_mes=$info_immo.date_mes}} {{:assign var="ligne_immo.montant" value=$amount}}
{{/if}} {{/if}}
{{/load}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
{{:assign var="ligne_immo.amount" value="%d-%d"|math:$ligne_immo.amount:$total_credits}}
{{:assign valeur_nette="%f-%f"|math:$ligne_immo.amount:$_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}}
{{:assign nbjours="1+(%d-%d)/(60*60*24)"|math:$_GET.exit_date:$_GET.date_debut}} {{:assign nbjours="1+(%d-%d)/(60*60*24)"|math:$_GET.exit_date:$_GET.date_debut}}
{{:assign annuite="%f/%f"|math:$ligne_immo.amount:$info_immo.duration}} {{:assign annuite="%f/%f"|math:$ligne_immo.montant:$_GET.duree_amort}}
{{:assign amort_comp="round(%f/365*%f, 0)"|math:$annuite:$nbjours}} {{:assign amort_comp="round(%f/365*%f, 0)"|math:$annuite:$nbjours}}
{{:assign amort_comp="min(%f, %f)"|math:$valeur_nette:$amort_comp}} {{:assign amort_comp="min(%f, %f)"|math:$valeur_nette:$amort_comp}}
{{/if}} {{/if}}
@ -53,39 +48,36 @@
{{/if}} {{/if}}
{{/if}} {{/if}}
{{:redirect to="write_exit.html?immo_doc_id=%s&amort_amount=%s&year=%s&date_debut=%s&exit_date=%s&cession=%s"|args:$_GET.immo_doc_id:$_GET.amort_amount:$_GET.year:$_GET.date_debut:$_GET.exit_date:$_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_amortization"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{if $valeur_nette > 0}} {{:include file="_nav.html" current="index" subcurrent="balance_exit"}}
{{:assign type_immo="managed"}}
{{else}}
{{:assign type_immo="amortized"}}
{{/if}}
{{:include file="_nav.html" current="%s"|args:$type_immo subcurrent="balance_exit"}}
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
<h3>Sortir l'immobilisation « {{$label_immo}} » du bilan</h3> <h3>Sortir l'immobilisation « {{$ligne_immo.label}} » du bilan</h3>
<form method="post" action=""> <form method="post" action="">
<div class="informations"> <div class="informations">
<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.amount|money_currency_html:false|raw}}</dd> <dd id="montant_immo" class="money">{{$ligne_immo.montant|money_currency_html:false|raw}}</dd>
<dt>Date d'acquisition</dt> <dt>Date d'acquisition</dt>
<dd >{{$date_achat|date_short}}</dd> <dd >{{$ligne_immo.date_achat|date_short}}</dd>
{{if $date_mes != null}} {{if $_GET.date_mes != $ligne_immo.date_achat|strtotime}}
<dt>Date de mise en service</dt> <dt>Date de mise en service</dt>
<dd>{{$date_mes|date_short}}</dd> <dd>{{$_GET.date_mes|date:"d/m/Y"}}</dd>
{{/if}}
{{if $_GET.duree_amort != null && $_GET.duree_amort != 0}}
<dt>Durée de l'amortissement</dt>
<dd id="duree_amort" class="num">{{$_GET.duree_amort}} ans</dd>
{{/if}} {{/if}}
<dt>Durée de l'amortissement</dt>
<dd id="duree_amort" class="num">{{$info_immo.duration}} ans</dd>
<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_html:false|raw}} <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>

View file

@ -46,7 +46,6 @@
{{/form}} {{/form}}
{{:admin_header title="Configuration" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Configuration" custom_css="./style.css" current="module_amortization"}}
{{:include file="_nav.html" current="config"}} {{:include file="_nav.html" current="config"}}
{{if $_GET.ok == 1}} {{if $_GET.ok == 1}}
<p class="block confirm">Configuration enregistrée.</p> <p class="block confirm">Configuration enregistrée.</p>
@ -129,7 +128,6 @@
{{/if}} {{/if}}
<form method="post" action=""> <form method="post" action="">
<h3>Comptes d'immobilisation amortissables</h3> <h3>Comptes d'immobilisation amortissables</h3>
<p class="help"> <p class="help">
Les immobilisations amortissables sont cherchées dans les comptes sélectionnés et leurs sous-comptes. Les immobilisations amortissables sont cherchées dans les comptes sélectionnés et leurs sous-comptes.
@ -139,7 +137,7 @@
<thead> <thead>
<tr> <tr>
<th>Compte</th> <th>Compte</th>
<th class="actions"></th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -156,14 +154,13 @@
}} }}
</td> </td>
<td class="actions"> <td class="actions">
{{if ! $code|in:$config_defaut.prefixes}} {{:button
{{:button label="Enlever"
label="Enlever" title="Enlever une ligne"
shape="minus" shape="minus"
min="1" min="1"
name="remove_line" name="remove_line"
}} }}
{{/if}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
@ -185,12 +182,11 @@
<thead> <thead>
<tr> <tr>
<th>Compte</th> <th>Compte</th>
<th class="actions"></th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{:assign unfinished_lines=$config_defaut.unfinished|map:implode:"-"|implode:","}}
{{#foreach from=$unfinished_accounts key=code item=elem}} {{#foreach from=$unfinished_accounts key=code item=elem}}
<tr> <tr>
<td> <td>
@ -204,15 +200,13 @@
}} }}
</td> </td>
<td class="actions"> <td class="actions">
{{if $unfinished_lines|strpos:$code === false}} {{:button
{{:button label="Enlever"
label="Enlever" title="Enlever une ligne"
title="Enlever une ligne" shape="minus"
shape="minus" min="1"
min="1" name="remove_line"
name="remove_line" }}
}}
{{/if}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}

View file

@ -1,79 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Supprimer les infos d'une immo et les liaisons d'immo associées
@param immo_doc_id
*}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign immo_label=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $immo_label}}
{{:assign immo_label=$immo_label|cat::" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{#form on="delete"}}
{{#select
trans.id
FROM acc_transactions_lines AS line
INNER JOIN !table AS credit_link ON $$.credit_line_id = line.id
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE $$.type = "credit_link" AND $$.immo_doc_id = :immo_doc_id
;
!table = $module.table
:immo_doc_id = $_GET.immo_doc_id|intval
}}
{{:assign var="linked_trans." value=$id}}
{{/select}}
{{if $linked_trans != null}}
{{* chercher et supprimer les écritures liées *}}
{{#select
CASE links.id_related = trans.id
WHEN true THEN links.id_transaction
WHEN false THEN links.id_related
END as linked_id
FROM acc_transactions AS trans
INNER JOIN acc_transactions_links as links
ON (links.id_transaction = trans.id OR links.id_related = trans.id)
WHERE trans.id = :immo_trans_id
;
:immo_trans_id=$ligne_immo.trans_id
}}
{{if ! $linked_trans|has:$linked_id}}
{{:assign var="linked_transactions." value=$linked_id}}
{{/if}}
{{/select}}
{{* enregistrer les liaisons restantes *}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$ligne_immo.trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}
{{* supprimer les docs de liaison *}}
{{:delete type="credit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $_GET.immo_doc_id|intval}}
{{/if}}
{{* supprimer les infos de l'immobilisation *}}
{{:delete id=$_GET.immo_doc_id|intval}}
{{:redirect force="index.html?ok=1&msg=suppr_infos&type_immo=other"}}
{{/form}}
{{:admin_header title="Supprimer" current="module_amortization"}}
{{:form_errors}}
{{:delete_form
legend="Immobilisation « #%s %s »"|args:$ligne_immo.trans_id:$immo_label
warning="Supprimer les paramètres de l'immobilisation « #%s %s » ?"|args:$ligne_immo.trans_id:$immo_label
info="L'écriture d'immobilisation ne sera pas supprimée ; les nouveaux paramètres pourront être saisis depuis l'onglet « À classer »"
}}
{{:admin_footer}}

View file

@ -3,30 +3,56 @@
{{* {{*
Supprimer l'association entre une écriture d'amortissement et Supprimer l'association entre une écriture d'amortissement et
une écriture d'immobilisation une écriture d'immobilisation
@param immo_doc_id : id du doc associé à l'immo
@param amort_line_id : id de la ligne d'amortissement
*}} *}}
{{:include file="_common_detach.html" immo_doc_id=$_GET.immo_doc_id line_id=$_GET.amort_line_id keep="info_immo"}} {{* chercher l'écriture d'immobilisation *}}
{{* supprimer le doc de liaison entre les lignes *}} {{#select
{{#load type="amort_link" id_transaction
where="$$.immo_doc_id = :immo_doc_id AND $$.amort_line_id = :amort_line_id" FROM acc_transactions_lines
:immo_doc_id=$_GET.immo_doc_id|intval WHERE id = :line_id;
:amort_line_id = $_GET.amort_line_id|intval :line_id = $_GET.immo_id|intval
}} }}
{{:delete id=$id}} {{:assign immo_trans_id=$id_transaction}}
{{/load}}
{{* marquer immo non soldée *}}
{{if $info_immo.status == "amortized"}}
{{:save
key=$info_immo.key
status="managed"
}}
{{/if}}
{{if $_GET.from == "exit"}}
{{:redirect force="exit_step2.html?immo_doc_id=%s&from=exit&ok=1&msg=detach_amort"|args:$_GET.immo_doc_id}}
{{else}} {{else}}
{{:redirect force="amortization.html?immo_doc_id=%s&ok=1&msg=detach_amort"|args:$_GET.immo_doc_id:}} {{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
{{/if}} {{/select}}
{{* chercher l'écriture d'amortissement *}}
{{#select
id_transaction
FROM acc_transactions_lines
WHERE id = :line_id;
:line_id = $_GET.amort_id|intval
}}
{{:assign amort_id=$id_transaction}}
{{else}}
{{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{/select}}
{{*
chercher les liaisons de l'écriture d'immobilisation
et supprimer la liaison avec l'écriture d'amortissement
*}}
{{#select
CASE links.id_related = :immo_trans_id
WHEN true THEN links.id_transaction
WHEN false THEN links.id_related
END as linked_id
FROM acc_transactions_links as links
WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id;
:immo_trans_id = $immo_trans_id
}}
{{if $linked_id != $amort_id}}
{{:assign var="linked_transactions." value=$linked_id}}
{{/if}}
{{/select}}
{{* Enregistrer les liaisons *}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$immo_trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}
{{:redirect to="amortization.html?immo_id=%s&ok=1&msg=detach&trans_id=%s"|args:$_GET.immo_id:$amort_id}}

View file

@ -1,21 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Supprimer l'association entre une écriture d'immobilisation et
une écriture de cession
@param immo_doc_id : id du doc associé à l'immo
@param cession_line_id : id de la ligne de cession
*}}
{{:include file="_common_detach.html" immo_doc_id=$_GET.immo_doc_id line_id=$_GET.cession_line_id}}
{{* supprimer le doc de liaison entre les lignes *}}
{{#load type="cession_link"
where="$$.immo_doc_id = :immo_doc_id AND $$.cession_line_id = :cession_line_id"
:immo_doc_id=$_GET.immo_doc_id|intval
:cession_line_id = $_GET.cession_line_id|intval
}}
{{:delete id=$id}}
{{/load}}
{{:redirect to="exit_step3.html?immo_doc_id=%s&from=exit&ok=1&msg=detach_cession"|args:$_GET.immo_doc_id}}

View file

@ -1,25 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Supprimer l'association entre une écriture d'immobilisation et
une écriture au crédit du compte d'immobilisation
@param immo_doc_id : id du doc associé à l'immo
@param credit_line_id : id de la ligne de crédit
*}}
{{:include file="_common_detach.html" immo_doc_id=$_GET.immo_doc_id line_id=$_GET.credit_line_id}}
{{* supprimer le doc de liaison entre les lignes *}}
{{#load type="credit_link"
where="$$.immo_doc_id = :immo_doc_id AND $$.credit_line_id = :credit_line_id"
:immo_doc_id=$_GET.immo_doc_id|intval
:credit_line_id = $_GET.credit_line_id|intval
}}
{{:delete id=$id}}
{{/load}}
{{if $_GET.from == "exit"}}
{{:redirect force="exit_step1.html?immo_doc_id=%s&from=%s&ok=1&msg=detach_avoir"|args:$_GET.immo_doc_id:$_GET.from}}
{{else}}
{{:redirect force="amortization.html?immo_doc_id=%s&ok=1&msg=detach_avoir"|args:$_GET.immo_doc_id}}
{{/if}}

View file

@ -1,21 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Supprimer l'association entre une écriture d'immobilisation et
une écriture de sortie de bilan
@param immo_doc_id : id du doc associé à l'immo
@param exit_line_id : id de la ligne de sortie de bilan
*}}
{{:include file="_common_detach.html" immo_doc_id=$_GET.immo_doc_id line_id=$_GET.exit_line_id}}
{{* supprimer le doc de liaison entre les lignes *}}
{{#load type="exit_link"
where="$$.immo_doc_id = :immo_doc_id AND $$.exit_line_id = :exit_line_id"
:immo_doc_id=$_GET.immo_doc_id|intval
:exit_line_id = $_GET.exit_line_id|intval
}}
{{:delete id=$id}}
{{/load}}
{{:redirect to="exit_step4.html?immo_doc_id=%s&from=exit&ok=1&msg=detach_exit"|args:$_GET.immo_doc_id}}

View file

@ -1,472 +0,0 @@
<header>
<h1 id="module-immobilisations-et-amortissements-pour-paheko">Module
immobilisations et amortissements pour Paheko</h1>
</header>
<h2 id="préambule">Préambule</h2>
<p>Ce module permet de :</p>
<ul>
<li><a href="#créer-nouvelle_immobilisation">créer des
immobilisations</a></li>
<li><a href="#enregistrer-nouvel-amortissement">enregistrer</a> les
écritures damortissement en fin dexercice, calculés selon la méthode
linéaire.</li>
<li><a href="#sortir-immobilisation-bilan">sortir les immobilisations du
bilan</a> à la fin de leur période dutilisation.</li>
</ul>
<p>Il permet aussi de <a
href="#transformer-immobilisations-en-cours">transformer des
immobilisations</a> en cours de constitution en immobilisations
amortissables.</p>
<p>Les <a href="#immo-créées-hors-module">immobilisations créées avant
la mise en service du module</a> sont détectées par le module mais il
faut renseigner leurs paramètres (au minimum, la durée damortissement)
pour que le module puisse les gérer.</p>
<p>Les amortissements créés avant la mise en service du module sont
détectées par le module mais il faut les <a
href="#attacher-amortissement">attacher manuellement</a> aux
immobilisations correspondantes.</p>
<h2 id="créer-nouvelle_immobilisation">Créer une nouvelle
immobilisation</h2>
<p>Cliquer le bouton <em>Ajouter une immobilisation</em> qui est présent
sur plusieurs onglets ; dans la fenêtre de saisie qui saffiche il
suffit de saisir les données de limmobilisation puis de cliquer
<em>Ajouter</em> :</p>
<ul>
<li>Exercice : sélectionner lexercice dans lequel enregistrer
lécriture</li>
<li>Date dacquisition : doit être située dans lexercice
sélectionné</li>
<li>Libellé</li>
<li>Montant</li>
<li>Compte de décaissement : compte bancaire, de caisse ou fournisseurs
dimmobilisations (404) dans le cas où limmobilisation est réglée
ultérieurement</li>
<li>Compte dimmobilisation</li>
<li>Projet</li>
<li>Durée damortissement en années</li>
<li><em>Date de mise en service</em> : cest cette date qui est prise en
compte dans le calcul des amortissements. Il sagit de la date à partir
de laquelle limmobilisation peut commencer à être utilisée ; à modifier
uniquement si différente de la date dacquisition.</li>
</ul>
<p>Après création, limmobilisation est classée dans longlet
<em>Amortissables</em>.</p>
<h3 id="ristourne-avoir">Ristourne sur immobilisation</h3>
<p>Lorsquon acquiert une immobilisation, il se peut que par la suite on
obtienne une ristourne sous forme davoir ; cet avoir est enregistré
dans Paheko par une écriture dont le montant est au crédit du compte
dimmobilisation ; il est important dattacher cette écriture davoir à
lécriture dimmobilisation. En effet, le montant amortissable est égal
au montant dacquisition de limmobilisation moins la somme des
avoirs.</p>
<p>Tant quon na pas créé damortissement pour une immobilisation, il
est possible dattacher une écriture davoir à lécriture
dimmobilisation.</p>
<p>Pour cela, cliquer le bouton <em>Détails</em> en face de
limmobilisation concernée puis <em>Attacher une écriture davoir</em> ;
sil existe des écritures au crédit du compte de limmobilisation, on
pourra en sélectionner une pour lassocier à lécriture
dimmobilisation ; son montant sera ensuite déduit du montant de
limmobilisaiton pour calculer le montant des amortissements.</p>
<p>Si lavoir a été reçu après la création du premier amortissement, il
suffit de supprimer lécriture damortissement et de procéder comme
ci-dessus pour attacher lavoir ; il faudra ensuite recréer
lamortissement.</p>
<h2 id="enregistrer-nouvel-amortissement">Enregistrer un nouvel
amortissement</h2>
<p>Une écriture damortissement se fait à la date de clôture de
lexercice. Les amortissements sont calculés selon la méthode linéaire :
montant à amortir divisé par durée damortissement en années.</p>
<p>À partir de longlet <em>Amortissables</em>, cliquer le bouton
<em>Détails</em> en face de limmobilisation choisie.<br />
Avant denregistrer un nouvel amortissement, il peut être utile de
vérifier avec le bouton <em>Attacher un amortissement</em> sil existe
des écritures damortissement qui nont pas encore été attachées à
limmobilisation (cas des immobilisations et amortissements créés en
dehors du module) ; voir ci-dessous la rubrique <a
href="#attacher-amortissement">Attacher un amortissement à une
immobilisation</a>.</p>
<p>Cliquer le bouton <em>Enregistrer un amortissement</em> ; dans la
fenêtre de saisie, les informations sont calculées et pré-remplies par
le modules ; en général, il nest pas nécessaire de les modifier :</p>
<ul>
<li>Exercice : cest lexercice dans lequel enregistrer lécriture</li>
<li>Date de lécriture : doit être située dans lexercice
sélectionné</li>
<li>Libellé</li>
<li>Montant : calculé par le module ; il peut être modifié si
nécessaire, par exemple pour larrondir</li>
<li>Compte de débit : par défaut cest le compte <em>6811 : Dotation aux
amortissements des immobilisations</em></li>
<li>Compte damortissement : par défaut cest le compte qui correspond
au compte de limmobilisation, obtenu en intercalant le chiffre 8 après
le premier chiffre du compte dimmobilisation.</li>
</ul>
<p>Après enregistrement, le nouvel amortissement apparaît dans la liste
des amortissements de limmobilisation.</p>
<p>Lorsquune immobilisation est totalement amortie, elle est classée
dans longlet <em>Amorties</em>.</p>
<h2 id="immo-créées-hors-module">Incorporer une écriture
dimmobilisation créée hors du module</h2>
<p>Les immobilisations créées <em>avant</em> la mise en service du
module sont regroupées dans longlet <em>À classer</em>. On distingue
deux cas :</p>
<ul>
<li>immobilisation créée <a href="#immo-créée-dans-paheko">dans
Paheko</a></li>
<li>immobilisation créée dans une <a
href="#immo-créée-hors-paheko">comptabilité antérieure à Paheko</a></li>
</ul>
<h3 id="immo-créée-dans-paheko">Immobilisations créées dans Paheko</h3>
<p>Cliquer le bouton <em>Paramètres</em> en face de limmobilisation à
prendre en charge et choisir comment sera considérée
limmobilisation :</p>
<ul>
<li><a href="#immo-à-amortir">Immobilisation à amortir</a></li>
<li><a href="#immo-sortie-bilan">Immobilisation sortie du bilan</a></li>
<li>Immobilisation à ignorer</li>
</ul>
<h4 id="immo-à-amortir">Immobilisation à amortir</h4>
<p>Le seul paramètre obligatoire est la durée damortissement en
années ; les autres paramètres sont pré-remplis à partir de lécriture
dimmobilisation ; dans la majorité des cas, il nest pas nécessaire de
les modifier.</p>
<ul>
<li>Date dacquisition : (facultatif) à renseigner uniquement si elle
diffère de la date de lécriture dimmobilisation</li>
<li>Libellé : (facultatif) à renseigner uniquement sil diffère du
libellé de lécriture dimmobilisation</li>
<li>Montant de limmobilisation : (obligatoire) pré-rempli avec le
montant de lécriture dimmobilisation</li>
<li>Durée damortissement : (obligatoire) durée en années</li>
<li>Date de mise en service : (facultatif) voir <a
href="#créer-nouvelle_immobilisation">Créer une nouvelle
immobilisation</a>.</li>
</ul>
<p>Après enregistrement, limmobilisation est classée dans longlet
<em>Amortissables</em> ; on peut vérifier et éventuellement modifier ses
paramètres grâce au bouton <em>Détails</em></p>
<p>Si des amortissements ont été enregistrés pour cette immobilisation
avant la mise en service du module, on pourra les attacher à
limmobilisation : voir ci-dessous la rubrique <a
href="#attacher-amortissement">Attacher un amortissement à une
immobilisation</a></p>
<h4 id="immo-sortie-bilan">Immobilisation sortie du bilan</h4>
<p>Pour une immobilisation créée et sortie du bilan avant la mise en
service du module, un certain nombre décritures sont enregistrées dans
Paheko :</p>
<ul>
<li>écritures davoir (éventuellement)</li>
<li>écritures damortissement :
<ul>
<li>amortissement annuel : 0, 1 ou plusieurs</li>
<li>amortissement complémentaire à la date de sortie du bilan</li>
<li>amortissement exceptionnel ou écriture de cession, selon le cas</li>
</ul></li>
<li>écriture de sortie du bilan</li>
</ul>
<p>Le module donne la possibilité de les attacher à limmobilisation en
plusieurs étapes :</p>
<ol type="1">
<li>Attacher une ou plusieurs écritures davoir à limmobilisation, le
cas échéant</li>
<li>Attacher une ou plusieurs écritures damortissement à
limmobilisation</li>
<li>Attacher une écriture de cession à limmobilisation, le cas
échéant</li>
<li>Attacher une écriture de sortie du bilan à limmobilisation</li>
</ol>
<p>Une fois cette étape validée, limmobilisation sera classée dans
longlet <em>Sorties du bilan</em>.</p>
<h3 id="immo-créée-hors-paheko">Immobilisations créées dans une
comptabilité antérieure à Paheko</h3>
<p>Les immobilisations et amortissements créés dans une comptabilité
antérieure à Paheko peuvent aussi être pris en charge par le module ;
ces immobilisations et amortissements figurent <em>dans le bilan du
dernier exercice de lancienne comptabilité</em> et doivent
<em>obligatoirement se retrouver dans la balance douverture du premier
exercice créé dans Paheko</em> ; cette balance comporte, pour chaque
compte dimmobilisation, le <em>montant total</em> des immobilisations
de ce compte. Il va donc être nécessaire de répartir le montant dun
compte entre les différentes immobilisations dont il est composé. Il en
est de même pour les amortissements.</p>
<p>Il faut donc obligatoirement disposer des informations ci-dessous
pour chaque immobilisation à incorporer :</p>
<ul>
<li>montant amortissable de limmobilisation, cest-à-dire la différence
entre le montant dacquisition et le montant des éventuelles ristournes
sous forme décritures davoir au crédit du compte dimmobilisation</li>
<li>montant total des amortissements</li>
<li>durée damortissement</li>
<li>date dacquisition de limmobilisation<br />
ou</li>
<li>date de mise en service de limmobilisation ; voir <a
href="#créer-nouvelle_immobilisation">Créer une nouvelle
immobilisation</a>.</li>
</ul>
<p><strong>Remarque :</strong> les immobilisations créées et <em>sorties
du bilan</em> dans une comptabilité antérieure à Paheko ne figurent plus
au bilan (!) et napparaissent donc pas dans la balance douverture du
premier exercice créé dans Paheko ; on na donc pas à sen
(pré)occuper.</p>
<h4 id="exemple">Exemple</h4>
<p>Lexemple ci-dessous montre un extrait de la balance douverture du
premier exercice créé dans Paheko et reprend une partie du bilan du
dernier exercice dune comptabilité antérieure à Paheko.</p>
<figure>
<img src="./doc/exemple_balance-initiale.png"
title="Exemple de balance d&#39;ouverture"
alt="Extrait de balance douverture initiale dans Paheko" />
<figcaption aria-hidden="true">Extrait de balance douverture initiale
dans Paheko</figcaption>
</figure>
<ul>
<li>la ligne du compte <strong>2181</strong> correspond à deux
immobilisations de valeurs respectives <strong>5 500€</strong> et
<strong>13 590,33€</strong> pour un total de
<strong>19 090,33€</strong></li>
<li>la ligne du compte <strong>2185</strong> correspond à trois
immobilisations de valeurs respectives <strong>16 500€</strong>,
<strong>8 685€</strong> et <strong>3 500€</strong> pour un total de
<strong>28 695€</strong></li>
<li>la ligne du compte <strong>28181</strong> correspond à la somme des
amortissements des deux immobilisations du compte
<strong>2181</strong></li>
<li>la ligne du compte <strong>28185</strong> correspond à la somme des
amortissements des trois immobilisations du compte
<strong>2185</strong></li>
</ul>
<p>Dans longlet <em>À classer</em> on trouve les immobilisations de la
balance douverture :</p>
<figure>
<img src="./doc/exemple_immobilisations_a_classer-1.png"
title="Immobilisations de la balance initiale à incorporer dans Paheko"
alt="Immobilisations de la balance initiale à incorporer dans Paheko" />
<figcaption aria-hidden="true">Immobilisations de la balance initiale à
incorporer dans Paheko</figcaption>
</figure>
<ul>
<li>la colonne <em>Date</em> donne la date de la balance
douverture</li>
<li>la colonne <em>Montant</em> donne le total des immobilisations de
chaque compte</li>
<li>la colonne <em>Affecté</em> indique quel montant a déjà été attribué
à une ou plusieurs immobilisation(s)</li>
<li>la colonne <em>Reste</em> indique quel montant na pas encore été
attribué</li>
</ul>
<p>Pour saisir les paramètres de la première immobilisation du compte
2181, cliquer le bouton <em>Paramètres</em>, puis cocher le choix
« Immobilisation à amortir ».</p>
<p>Les paramètres sont pré-remplis à partir des données de lécriture de
la balance douverture et seront donc à modifier en fonction des données
de limmobilisation concernée.</p>
<figure>
<img src="./doc/exemple_parametres_immobilisation-1.png"
title="Paramètres a renseigner" alt="Paramètres a renseigner" />
<figcaption aria-hidden="true">Paramètres a renseigner</figcaption>
</figure>
<ul>
<li>Date dacquisition de limmobilisation</li>
<li>Libellé de limmobilisation</li>
<li>Montant de limmobilisation : (obligatoire) <em>à modifier
obligatoirement</em> en indiquant le <em>montant réel de
limmobilisation</em>.<br />
Si une immobilisation a fait lobjet dun avoir, il faut déduire ce
montant de celui de limmobilisation : le montant à indiquer est le
<em>montant à amortir</em>.</li>
<li>Durée damortissement : (obligatoire) durée en années</li>
<li>Date de mise en service : (facultatif) ; voir <a
href="#créer-nouvelle_immobilisation">Créer une nouvelle
immobilisation</a>.</li>
</ul>
<p>Après validation, cette immobilisation se retrouve classée dans les
immobilisations amortissables :</p>
<figure>
<img src="./doc/exemple_immobilisations_amortissables-1.png"
title="Immobilisations amortissables]"
alt="Immobilisations amortissables" />
<figcaption aria-hidden="true">Immobilisations
amortissables</figcaption>
</figure>
<p>et dans longlet <em>À classer</em> on trouve le montant affecté à la
première immobilisation.</p>
<figure>
<img src="./doc/exemple_immobilisations_a_classer-2.png"
title="Immobilisations à incorporer dans Paheko"
alt="Immobilisations à incorporer dans Paheko" />
<figcaption aria-hidden="true">Immobilisations à incorporer dans
Paheko</figcaption>
</figure>
<p>On fait de même pour la deuxième immobilisation du compte 2181 puis
pour les trois immobilisations du compte 2185 et on obtient :</p>
<figure>
<img src="./doc/exemple_immobilisations_amortissables-2.png"
title="Immobilisations amortissables"
alt="Immobilisations amortissables" />
<figcaption aria-hidden="true">Immobilisations
amortissables</figcaption>
</figure>
<p>et longlet <em>À classer</em> est vide.</p>
<p>Si des amortissements ont été enregistrés pour une ou plusieurs
immobilisations avant la mise en service du module, on pourra les
attacher à leur immobilisation : voir ci-dessous la rubrique <a
href="#attacher-amortissement">Attacher un amortissement à une
immobilisation</a>.</p>
<h2 id="attacher-amortissement">Attacher un amortissement à une
immobilisation</h2>
<p>Si des écritures damortissement ont été saisies avec Paheko
<em>avant</em> la mise en service du module <em>Amortissements</em>, on
peut les attacher à leur immobilisation :</p>
<ul>
<li>cliquer le bouton <em>Détails</em> en face de limmobilisation
concernée ; si la mention</li>
</ul>
<blockquote>
<p>« Il y a des écritures damortissement qui ne sont pas attachées à
une immobilisation ! Utilisez le bouton « Attacher un amortissement »
pour les afficher ; vous pourrez choisir den attacher certaines à cette
immobilisation. »</p>
</blockquote>
<p>est présente, cest quil existe des écritures damortissement
saisies avec Paheko <em>avant</em> la mise en service du module.</p>
<h3 id="cas-des-amortissements-créés-avec-paheko">Cas des amortissements
créés avec Paheko</h3>
<ul>
<li>cliquer le bouton <em>Attacher un amortissement</em> pour en
afficher la liste</li>
<li>le cas échéant, cliquer <em>Attacher</em> en face de lécriture à
attacher.</li>
</ul>
<p>Le montant affiché est celui de lécriture damortissement ; il
suffit de valider.</p>
<h3 id="cas-des-amortissements-créés-hors-paheko">Cas des amortissements
créés hors Paheko</h3>
<p><em>Rappel</em> : ces amortissements sont présents dans la balance
douverture du premier exercice créé dans Paheko ; cette balance inclut,
pour chaque compte damortissement, le <em>montant total des
amortissements</em> de ce compte à la date de fin du dernier exercice de
la comptabilité antérieure à Paheko ; ce montant devra donc <em>être
réparti entre les différentes immobilisations concernées</em>.</p>
<p><strong>Exemple :</strong> le montant qui figure dans la balance
douverture pour le compte 28185 est de 7058,06€ réparti ainsi :</p>
<ul>
<li>montant des amortissements du Saxophone : 1016,43€</li>
<li>montant des amortissements du Piano numérique : 4102,39€</li>
<li>montant des amortissements de la Batterie : 1939,24€</li>
</ul>
<p>Voici la page des détails du Saxophone avant lattachement des
amortissements de la balance douverture :</p>
<figure>
<img src="./doc/exemple_amortissement-saxo.png"
title="Page de détails du saxophone"
alt="Page de détails du saxophone" />
<figcaption aria-hidden="true">Page de détails du saxophone</figcaption>
</figure>
<p>Cliquer le bouton <em>Attacher un amortissement</em> ; la liste des
amortissements du compte 28185 saffiche :</p>
<figure>
<img src="./doc/exemple_amortissements_a_repartir.png"
title="Amortissements du compte 28185"
alt="Amortissements du compte 28185" />
<figcaption aria-hidden="true">Amortissements du compte
28185</figcaption>
</figure>
<p>Sur la page qui souvre quand on clique <em>Attacher</em>, il faut
modifier le montant affiché (7058,06) en indiquant le montant des
amortissements de limmobilisation (1016,43).</p>
<figure>
<img src="./doc/exemple_saisie-amortissement-saxo.png"
title="Saisie du montant de l&#39;amortissement"
alt="Saisie du montant de lamortissement" />
<figcaption aria-hidden="true">Saisie du montant de
lamortissement</figcaption>
</figure>
<p>De retour sur la page des amortissements, on constate la présence de
lécriture damortissement quon vient dattacher ; on peut détacher une
écriture si on sest trompé.</p>
<figure>
<img src="./doc/exemple_amortissement-saxo-2.png"
title="Page de détails du saxophone"
alt="Page de détails du saxophone" />
<figcaption aria-hidden="true">Page de détails du saxophone</figcaption>
</figure>
<p>On peut faire de même pour les amortissements des autres
immobilisations du compte 2185 (Batterie et Piano) puis pour celles du
compte 2181 et lon obtient :</p>
<figure>
<img src="./doc/exemple_immobilisations_amortissables-3.png"
title="Immobilisations et amortissements après incorporation"
alt="Immobilisations et amortissements après incorporation" />
<figcaption aria-hidden="true">Immobilisations et amortissements après
incorporation</figcaption>
</figure>
<p>Les immobilisations et amortissements de la balance douverture
initiale ont été incorporés en totalité dans le module.</p>
<p>Par la suite, pour créer de nouveaux amortissements, il suffit de
procéder comme <a href="#enregistrer-nouvel-amortissement">pour une
immobilisation standard</a>.</p>
<h2 id="sortir-immobilisation-bilan">Sortir une immobilisation du
bilan</h2>
<p>Tant quune immobilisation est utilisée dans lassociation, elle
reste au bilan, même si elle est totalement amortie.</p>
<p>On doit la sortir du bilan quand elle nest plus utilisée (vétusté,
hors service) ou quand elle est donnée ou vendue (dans ce cas, on parle
de cession).</p>
<p>Cliquer le bouton <em>Détails</em> en face de limmobilisation à
sortir du bilan, puis cliquer <em>Sortir du bilan</em>.</p>
<ul>
<li>dans la première étape, il faut indiquer lexercice et la date de
sortie du bilan</li>
<li>dans la deuxième étape, il faut indiquer si la sortie de bilan
saccompagne dune cession (vente) et dans ce cas, indiquer le montant
de la cession</li>
<li>la troisième étape indique lensemble des écritures avec :
<ul>
<li>un amortissement complémentaire pour lexercice à la date de sortie
si limmobilisation nest pas déjà totalement amortie</li>
<li>un amortissement exceptionnel sil ny a pas de cession et si
limmobilisation nest pas déjà totalement amortie</li>
<li>une écriture de cession, le cas échéant ; cette écriture est une
créance quil faudra solder lors de lenregistrement du règlement de la
cession</li>
<li>lécriture de sortie du bilan</li>
</ul></li>
</ul>
<p>Après validation, limmobilisation est classée dans longlet
<em>Sorties du bilan</em>.<br />
En cas de besoin, il est possible de parcourir les différentes étapes
pour vérifier les attachements et éventuellement en modifier certains en
cliquant le bouton <em>Modifier</em>.</p>
<h2 id="transformer-immobilisations-en-cours">Transformer des
« Immobilisations en cours » en « Immobilisation amortissable »</h2>
<p>Longlet <em>En cours</em> regroupe des immobilisations en cours de
constitution (classe 23 et sous-comptes) ; ces immobilisations ne sont
pas amortissables, mais sont destinées à être groupées pour former une
nouvelle immobilisation qui pourra être amortie.</p>
<p>Pour ce faire, cocher les lignes à grouper puis cliquer
<em>Transférer</em>.</p>
<figure>
<img src="./doc/exemple_immobilisations_en-cours-1.png"
title="Immobilisations en cours de constitutions"
alt="Immobilisations en cours de constitutions" />
<figcaption aria-hidden="true">Immobilisations en cours de
constitutions</figcaption>
</figure>
<p>Sur la page qui souvre, saisir les données de la nouvelle
immobilisation :</p>
<ul>
<li>Exercice</li>
<li>Date de mise en service ; voir <a
href="#créer-nouvelle_immobilisation">Créer une nouvelle
immobilisation</a>.</li>
<li>Libellé</li>
<li>Compte dans lequel enregistrer lécriture dimmobilisation</li>
<li>Durée damortissement</li>
</ul>
<p>Après validation, la nouvelle immobilisation sera classée dans
longlet <em>Amortissables</em>.</p>
<p>Si on dé-coche la case <em>Amortir…</em>, limmobilisation ne sera
pas amortie et sera marquée <em>ignorée</em>. On pourra la retrouver
dans longlet <em>À classer</em> en cochant la case <em>Afficher les
écritures ignorées</em>.</p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

View file

@ -1,218 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Associer des écritures de crédit à une immo créée et sortie du
bilan avant la mise en service du module
@param immo_doc_id : id du doc associé à l'immobilisation
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label === false}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$montant_immo:$total_credits}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort"}}
{{*
chercher des écritures au crédit du compte de l'immo sans doc associé
- line.credit < ligne_immo.amount => peut-être un avoir
- line.credit = ligne_immo.amount - avoirs => écriture de sortie du bilan
*}}
{{:assign account_code=$ligne_immo.account_code|cat:"%"}}
{{#select
trans.id as trans_id,
trans.label as trans_label,
trans.date as date,
trans.id_year as year,
line.id as credit_line_id,
line.label as line_label,
line.credit as amount,
account.id as account_id,
account.code as account_code,
account.label as account_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
LEFT JOIN module_data_amortization AS mda ON json_extract(mda.document, '$.amort_line_id') = line.id
WHERE
account.code LIKE :account_code
AND line.credit > 0
AND credit_line_id NOT IN (
SELECT json_extract(credit_link.document, '$.credit_line_id') AS line_id FROM !table as credit_link
WHERE json_extract(credit_link.document, '$.type') == "credit_link"
UNION
SELECT json_extract(exit_link.document, '$.exit_line_id') AS line_id FROM !table as exit_link
WHERE json_extract(exit_link.document, '$.type') == "exit_link"
)
;
:account_code=$account_code
!table =$module.table
assign="credit_line"
}}
{{if $credit_line.amount < $solde}}
{{:assign var="credit_lines." value=$credit_line}}
{{/if}}
{{/select}}
{{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}}
{{:include
file="./_get_amort_code.html"
code_immo=$ligne_immo.account_code
keep="code_amort"
}}
{{* chercher des écritures d'amortissement correspondant au compte d'une immo sans doc associé *}}
{{#select
line.id as amort_line_id,
line.credit as amort_amount,
line.label as line_label,
trans.id as amort_trans_id,
trans.date as date,
trans.label as trans_label,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON line.id_account = account.id
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE
account.code = :code_amort
AND line.credit > 0
AND (NOT trans.status & 16)
AND trans.date >= :immo_date
;
:code_amort = $code_amort
:immo_date=$date_immo
assign="amort_line"
}}
{{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}}
{{:assign amort_amount=0}}
{{:assign keep_amort=true}}
{{#load type="amort_link"
where="$$.amort_line_id = :amort_line_id"
:amort_line_id=$amort_line.amort_line_id
assign="amort_link"
}}
{{if $amort_link.amount == null || $amort_link.amount == 0}}
{{:assign amort_amount=$amort_line.amort_amount}}
{{:assign keep_amort=false}}
{{else}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}}
{{/if}}
{{else}}
{{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}}
{{/load}}
{{if $keep_amort && $amort_amount < $amort_line.amort_amount}}
{{:assign var="free_amort_lines." value=$amort_line}}
{{/if}}
{{/select}}
{{:admin_header title="Immobilisation sortie du bilan" custom_css="./style.css" current="module_amortization"}}
{{if $_GET.from == "exit"}}
{{:assign current="other"}}
{{else}}
{{:assign current="archived"}}
{{/if}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach_avoir"}}
{{:assign msg="Écriture d'avoir attachée"}}
{{elseif $_GET.msg|match:"detach_avoir"}}
{{:assign msg="Écriture d'avoir détachée"}}
{{/if}}
<p class="block confirm">{{$msg}}</p>
{{/if}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}</dd>
<dt>Montant de l'immobilisation</dt>
<dd><span class="money">{{$montant_immo|money_currency_html:false|raw}}</dd>
{{if $total_credits > 0}}
<dt>Montant des avoirs</dt>
<dd class="money">{{"%f"|math:$total_credits|money_currency_html:false|raw}}</dd>
<dt>Montant à amortir</dt>
<dd class="money">{{"%f"|math:$solde|money_currency_html:false|raw}}</dd>
{{/if}}
{{if $total_amort > 0}}
<dt>Montant des amortissements</dt>
<dd>{{$total_amort|money_currency_html:false|raw}}</dd>
<dt>Valeur nette résiduelle</dt>
<dd>{{"%d-%d"|math:$solde:$total_amort|money_currency_html:false|raw}}</dd>
{{/if}}
</dl>
</div>
{{if $credit_lines}}
<nav class="actions">
{{:linkbutton
label="Attacher une écriture d'avoir"
href="link_immo.html?immo_doc_id=%s&filter=true&from=%s"|args:$_GET.immo_doc_id:$_GET.from shape="link"
target="_dialog"}}
</nav>
{{/if}}
<h3 class="ruler">Écritures d'avoir attachées à l'immobilisation</h3>
{{if $linked_immos != null}}
<table class="list">
<thead>
<td class="num"></td>
<td>Date</td>
<td>Libellé</td>
<td class="nombre">Montant</td>
<td>N° compte</td>
<td>Compte</td>
<td class="actions"></td>
</thead>
<tbody>
{{#foreach from=$linked_immos item="line"}}
{{:assign url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}}
<tr>
<td class="num"><a href="{{$url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>{{$line.label}}</td>
<td class="money">{{"%f"|math:$line.amount|money_currency_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Détacher" href="detach_credit.html?immo_doc_id=%s&credit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.credit_line_id shape="minus"}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
{{elseif $credit_lines}}
<p class="block alert">
Vous pouvez attacher une ou plusieurs écritures d'avoir à votre immobilisation
</p>
{{else}}
<p class="block alert">
Aucune écriture au crédit du compte d'immobilisation ; vous pouvez passer à la suite
</p>
{{/if}}
<form method="post" action="exit_step2.html?immo_doc_id={{$_GET.immo_doc_id}}&from={{$_GET.from}}">
<p class="submit">
{{:button type="submit" name="proceed" label="Poursuivre" shape="right" class="main"}}
</p>
</form>

View file

@ -1,197 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Associer des écritures d'amortissement à une immo créée et sortie du
bilan avant la mise en service du module
@param immo_doc_id : id du doc associé à l'immobilisation
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{#form on="backward"}}
{{:redirect to="exit_step1.html?immo_doc_id=%s&from=%s"|args:$_GET.immo_doc_id:$_GET.from}}
{{/form}}
{{#form on="forward"}}
{{:redirect to="exit_step3.html?immo_doc_id=%s&from=%s"|args:$_GET.immo_doc_id:$_GET.from}}
{{/form}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label === false}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$montant_immo:$total_credits}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort"}}
{{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}}
{{:include
file="./_get_amort_code.html"
code_immo=$ligne_immo.account_code
keep="code_amort"
}}
{{* chercher des écritures d'amortissement correspondant au compte d'une immo sans doc associé *}}
{{#select
line.id as amort_line_id,
line.credit as amort_amount,
line.label as line_label,
trans.id as amort_trans_id,
trans.date as date,
trans.label as trans_label,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON line.id_account = account.id
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE
account.code = :code_amort
AND line.credit > 0
AND (NOT trans.status & 16)
AND trans.date >= :immo_date
;
:code_amort = $code_amort
:immo_date=$date_immo
assign="amort_line"
}}
{{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}}
{{:assign amort_amount=0}}
{{:assign keep_amort=true}}
{{#load type="amort_link"
where="$$.amort_line_id = :amort_line_id"
:amort_line_id=$amort_line.amort_line_id|intval
assign="amort_link"
}}
{{if $amort_link.amount == null || $amort_link.amount == 0}}
{{:assign amort_amount=$amort_line.amort_amount}}
{{:assign keep_amort=false}}
{{else}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}}
{{/if}}
{{else}}
{{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}}
{{/load}}
{{if $keep_amort && $amort_amount < $amort_line.amort_amount}}
{{:assign var="free_amort_lines." value=$amort_line}}
{{/if}}
{{/select}}
{{:admin_header title="Immobilisation sortie du bilan" custom_css="./style.css" current="module_amortization"}}
{{if $_GET.from == "exit"}}
{{:assign current="other"}}
{{else}}
{{:assign current="archived"}}
{{/if}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach_amort"}}
{{:assign msg="Écriture d'amortissement attachée"}}
{{elseif $_GET.msg|match:"detach_amort"}}
{{:assign msg="Écriture d'amortissement détachée"}}
{{/if}}
<p class="block confirm">{{$msg}}</p>
{{/if}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}</dd>
<dt>Montant de l'immobilisation</dt>
<dd><span class="money">{{$montant_immo|money_currency_html:false|raw}}</dd>
{{if $total_credits > 0}}
<dt>Montant des avoirs</dt>
<dd class="money">{{"%f"|math:$total_credits|money_currency_html:false|raw}}</dd>
<dt>Montant à amortir</dt>
<dd class="money">{{"%f"|math:$solde|money_currency_html:false|raw}}</dd>
{{/if}}
{{if $total_amort > 0}}
<dt>Montant des amortissements</dt>
<dd>{{$total_amort|money_currency_html:false|raw}}</dd>
<dt>Valeur nette résiduelle</dt>
<dd>{{"%d-%d"|math:$solde:$total_amort|money_currency_html:false|raw}}</dd>
{{/if}}
</dl>
</div>
{{if $free_amort_lines}}
<nav class="actions">
{{:linkbutton
label="Attacher une écriture d'amortissement"
href="other_amortizations.html?immo_doc_id=%s&filter=true&from=%s"|args:$_GET.immo_doc_id:$_GET.from shape="link"
target="_dialog"}}
</nav>
{{/if}}
<h3 class="ruler">Écritures d'amortissement attachées à l'immobilisation</h3>
{{if $linked_amort != null}}
<table class="list">
<thead>
<tr>
<td class="num"></td>
<td>Date</td>
<td>Libellé</td>
<td class="nombre">Montant</td>
<td>N° compte</td>
<td>Compte</td>
<td class="actions"></td>
</tr>
</thead>
<tbody>
{{#foreach from=$linked_amort|ksort item="line"}}
{{* données de l'écriture *}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}}
<tr>
<td class="num"><a href="{{$trans_url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>
{{if $line.line_label != null}}
{{$line.line_label}}
{{if $line.trans_label != $line.line_label}}
— {{$line.trans_label}}
{{/if}}
{{else}}
{{$line.trans_label}}
{{/if}}
</td>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Détacher" href="detach_amort.html?immo_doc_id=%s&amort_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.line_id shape="minus"}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
{{elseif $free_amort_lines}}
<p class="block alert">
Vous pouvez attacher une ou plusieurs écritures d'amortissement à l'immobilisation
</p>
{{else}}
<p class="block alert">
Aucune écriture d'amortissement à rattacher ; vous pouvez passer à la suite
</p>
{{/if}}
<form method="post" action="">
<p class="submit">
{{:button type="submit" name="backward" label="Revenir à l'étape précédente" shape="left" class="main"}}
{{:button type="submit" name="forward" label="Poursuivre" shape="right" class="main"}}
</p>
</form>

View file

@ -1,205 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Associer une écriture de cession à une immo créée et sortie du
bilan avant la mise en service du module
@param immo_doc_id : id du doc associé à l'immobilisation
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{#form on="backward"}}
{{:redirect to="exit_step2.html?immo_doc_id=%s&from=%s"|args:$_GET.immo_doc_id:$_GET.from}}
{{/form}}
{{#form on="forward"}}
{{:redirect to="exit_step4.html?immo_doc_id=%s&from=%s"|args:$_GET.immo_doc_id:$_GET.from}}
{{/form}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label === false}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$montant_immo:$total_credits}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort"}}
{{* chercher des écritures de cession *}}
{{:assign total_cession=0}}
{{#select
line.id as line_id,
line.credit as amount,
line.label as line_label,
trans.id as trans_id,
trans.date as date,
trans.label as trans_label,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON line.id_account = account.id
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE account.code LIKE :code_cession_new OR account.code LIKE :code_cession_old
;
:code_cession_new = "757%"
:code_cession_old = "775%"
assign="line"
}}
{{* voir si l'écriture de cession est déjà liée à une immo *}}
{{* TODO VOIR SI UTILE
{{#load type="cession_link"
where="$$.cession_line_id = :cession_line_id"
:cession_line_id = $line.line_id
assign="cession_link"
}}
{{:debug line=$line cession_link=$cession_link}}
{{:assign total_cession="%d+%d"|math:$total_cession:$line.amount}}
{{:assign var="line.linked_id" value=$linked_id}}
{{:assign var="linked_cessions." value=$line}}
{{else}}
{{:assign var="free_cessions." value=$line}}
{{/load}}
*}}
{{#select
CASE WHEN links.id_related = :trans_id
THEN links.id_transaction
ELSE links.id_related
END as linked_id
FROM acc_transactions_links as links
WHERE links.id_transaction = :trans_id OR links.id_related = :trans_id
;
:trans_id = $line.trans_id
}}
{{if $linked_id == $ligne_immo.trans_id}}
{{:assign total_cession="%d+%d"|math:$total_cession:$line.amount}}
{{:assign var="line.linked_id" value=$linked_id}}
{{:assign var="linked_cessions." value=$line}}
{{/if}}
{{else}}
{{:assign var="free_cessions." value=$line}}
{{/select}}
{{/select}}
{{:admin_header title="Immobilisation sortie du bilan" custom_css="./style.css" current="module_amortization"}}
{{if $_GET.from == "exit"}}
{{:assign current="other"}}
{{else}}
{{:assign current="archived"}}
{{/if}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach_cession"}}
{{:assign msg="Écriture de cession attachée"}}
{{elseif $_GET.msg|match:"detach_cession"}}
{{:assign msg="Écriture de cession détachée"}}
{{/if}}
<p class="block confirm">{{$msg}}</p>
{{/if}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}</dd>
<dt>Montant de l'immobilisation</dt>
<dd><span class="money">{{$montant_immo|money_currency_html:false|raw}}</dd>
{{if $total_credits > 0}}
<dt>Montant des avoirs</dt>
<dd class="money">{{"%f"|math:$total_credits|money_currency_html:false|raw}}</dd>
<dt>Montant à amortir</dt>
<dd class="money">{{"%f"|math:$solde|money_currency_html:false|raw}}</dd>
{{/if}}
{{if $total_amort > 0}}
<dt>Montant des amortissements</dt>
<dd>{{$total_amort|money_currency_html:false|raw}}</dd>
<dt>Valeur nette résiduelle</dt>
<dd>{{"%d-%d"|math:$solde:$total_amort|money_currency_html:false|raw}}</dd>
{{/if}}
{{if $total_cession > 0}}
<dt>Montant de la cession</dt>
<dd>{{$total_cession|money_currency_html:false|raw}}</dd>
{{/if}}
</dl>
</div>
{{if $linked_cessions == null && $free_cessions != null}}
<nav class="actions">
{{:linkbutton
label="Attacher une écriture de cession"
href="list_cessions.html?immo_doc_id=%s&filter=true&from=%s"|args:$_GET.immo_doc_id:$_GET.from shape="link"
target="_dialog"}}
</nav>
{{/if}}
<h3 class="ruler">Écriture de cession attachée à l'immobilisation</h3>
{{if $linked_cessions != null}}
<table class="list">
<thead>
<tr>
<td class="num"></td>
<td>Date</td>
<td>Libellé</td>
<td class="nombre">Montant</td>
<td>N° compte</td>
<td>Compte</td>
<td class="actions"></td>
</tr>
</thead>
<tbody>
{{#foreach from=$linked_cessions item="line"}}
{{* données de l'écriture *}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}}
<tr>
<td class="num"><a href="{{$trans_url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>
{{if $line.line_label != null}}
{{$line.line_label}}
{{if $line.trans_label != $line.line_label}}
— {{$line.trans_label}}
{{/if}}
{{else}}
{{$line.trans_label}}
{{/if}}
</td>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Détacher" href="detach_cession.html?immo_doc_id=%s&cession_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.line_id shape="minus"}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
{{elseif $free_cessions}}
<p class="block alert">
Vous pouvez attacher une écriture de cession à l'immobilisation
</p>
{{else}}
<p class="block alert">
Aucune écriture de cession
</p>
{{/if}}
<form method="post" action="">
<p class="submit">
{{:button type="submit" name="backward" label="Revenir à l'étape précédente" shape="left" class="main"}}
{{:button type="submit" name="forward" label="Poursuivre" shape="right" class="main"}}
</p>
</form>

View file

@ -1,417 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Associer les différentes écritures à une immo créée et sortie du
bilan avant la mise en service du module
@param immo_doc_id : id du doc associé à l'immobilisation
*}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label === false}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$montant_immo:$total_credits}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort"}}
{{* chercher une écriture de cession associée *}}
{{#load type="cession_link"
where="$$.immo_doc_id = :immo_doc_id"
:immo_doc_id = $_GET.immo_doc_id|intval
}}
{{if $amount == null || $amount == 0}}
{{#select credit
FROM acc_transactions_lines
WHERE id = :cession_line_id;
:cession_line_id = $cession_line_id
}}
{{:assign montant_cession=$credit}}
{{/select}}
{{else}}
{{:assign montant_cession=$amount}}
{{/if}}
{{:assign cession_doc_id=$id}}
{{/load}}
{{* chercher une écriture de sortie de bilan associée *}}
{{#load type="exit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id=$info_immo.id assign="exit_info"}}
{{/load}}
{{if $exit_info != null}}
{{#select
trans.id as trans_id,
trans.label as trans_label,
trans.date as date,
line.id as line_id,
line.label as line_label,
line.credit as amount,
acc.id as account_id,
acc.code as account_code,
acc.label as account_label
FROM acc_transactions AS trans
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 line.id = :exit_line_id;
:exit_line_id = $exit_info.exit_line_id
assign="exit_line"
}}
{{/select}}
{{* lignes de l'écriture de sortie *}}
{{#select
line.label as line_label,
line.credit,
line.debit,
acc.id as account_id,
acc.code as account_code,
acc.label as account_label
FROM acc_transactions AS trans
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 trans.id = :exit_trans_id;
:exit_trans_id = $exit_line.trans_id
assign="trans"
}}
{{:assign var="exit_trans.%s"|args:$account_code value=$trans}}
{{/select}}
{{:assign acc_codes=$exit_trans|keys}}
{{#foreach from=$linked_amort}}
{{if $account_code|in:$acc_codes}}
{{:assign var="exit_amort" from="exit_trans.%s.debit"|args:$account_code}}
{{:break}}
{{/if}}
{{/foreach}}
{{if $exit_amort != $total_amort}}
{{:assign exit_amort_display=$exit_amort|money_currency:false|replace:" ":" "}}
{{:assign total_amort_display=$total_amort|money_currency:false|replace:" ":" "}}
{{:assign erreur=1}}
{{:assign message="Le montant des amortissement dans l'écriture de sortie (%s) est différent du total des amortissements associés à l'immobilisation (%s)."|args:$exit_amort_display:$total_amort_display}}
{{/if}}
{{if $exit_line.amount != $solde}}
{{:assign erreur=2}}
{{:assign exit_line_amount=$exit_line.amount|money_currency:false|replace:" ":" "}}
{{:assign solde_immo=$solde|money_currency:false|replace:" ":" "}}
{{:assign message="Le montant de de l'immobilisation dans l'écriture de sortie (%s) est différent du montant à amortir (%s)."|args:$exit_line_amount:$solde_immo}}
{{/if}}
{{/if}}
{{*
chercher des écritures au crédit du compte de l'immo sans doc associé
- line.credit < ligne_immo.amount => peut-être un avoir
- line.credit = ligne_immo.amount - avoirs => écriture de sortie du bilan
*}}
{{#select
trans.id as trans_id,
trans.label as trans_label,
trans.date as date,
trans.id_year as year,
line.id as credit_line_id,
line.label as line_label,
line.credit as amount,
acc.id as account_id,
acc.code as account_code,
acc.label as account_label
FROM acc_transactions AS trans
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
LEFT JOIN module_data_amortization AS mda ON json_extract(mda.document, '$.amort_line_id') = line.id
WHERE
acc.code = :acc_code
AND line.credit > 0
AND credit_line_id NOT IN (
SELECT json_extract(credit_link.document, '$.credit_line_id') AS line_id FROM !table as credit_link
WHERE json_extract(credit_link.document, '$.type') == "credit_link"
UNION
SELECT json_extract(exit_link.document, '$.exit_line_id') AS line_id FROM !table as exit_link
WHERE json_extract(exit_link.document, '$.type') == "exit_link"
)
;
:acc_code=$ligne_immo.account_code
!table =$module.table
assign="credit_line"
}}
{{if $credit_line.amount == $solde}}
{{:assign var="exit_lines." value=$credit_line}}
{{/if}}
{{/select}}
{{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}}
{{:include
file="./_get_amort_code.html"
code_immo=$ligne_immo.account_code
keep="code_amort"
}}
{{* chercher des écritures d'amortissement correspondant au compte d'une immo sans doc associé *}}
{{#select
line.id as amort_line_id,
line.credit as amort_amount,
line.label as line_label,
trans.id as amort_trans_id,
trans.date as date,
trans.label as trans_label,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON line.id_account = account.id
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE
account.code = :code_amort
AND line.credit > 0
AND (NOT trans.status & 16)
AND trans.date >= :immo_date
;
:code_amort = $code_amort
:immo_date=$date_immo
assign="amort_line"
}}
{{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}}
{{:assign amort_amount=0}}
{{:assign keep_amort=true}}
{{#load type="amort_link"
where="$$.amort_line_id = :amort_line_id"
:amort_line_id=$amort_line.amort_line_id|intval
assign="amort_link"
}}
{{if $amort_link.amount == null || $amort_link.amount == 0}}
{{:assign amort_amount=$amort_line.amort_amount}}
{{:assign keep_amort=false}}
{{else}}
{{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}}
{{/if}}
{{else}}
{{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}}
{{/load}}
{{if $keep_amort && $amort_amount < $amort_line.amort_amount}}
{{:assign var="free_amort_lines." value=$amort_line}}
{{/if}}
{{/select}}
{{#form on="backward"}}
{{:redirect to="exit_step3.html?immo_doc_id=%s&from=%s"|args:$_GET.immo_doc_id:$_GET.from}}
{{/form}}
{{#form on="validate"}}
{{* mettre à jour l'état de l'immobilisation *}}
{{:save
key=$info_immo.key
status="archived"
}}
{{:redirect to="index.html?type_immo=archived"}}
{{/form}}
{{#form on="cancel"}}
{{* supprimer les docs de cession et de sortie *}}
{{if $cession_doc_id != null}}{{:delete id=$cession_doc_id}}{{/if}}
{{if $exit_info != null}}{{:delete id=$exit_info.id}}{{/if}}
{{:redirect to="index.html?type_immo=other"}}
{{/form}}
{{:admin_header title="Immobilisation sortie du bilan" custom_css="./style.css" current="module_amortization"}}
{{if $_GET.from == "exit"}}
{{:assign current="other"}}
{{else}}
{{:assign current="archived"}}
{{/if}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach_exit"}}
{{:assign msg="Écriture de sortie de bilan attachée"}}
{{elseif $_GET.msg|match:"detach_exit"}}
{{:assign msg="Écriture de sortie de bilan détachée"}}
{{/if}}
<p class="block confirm">{{$msg}}</p>
{{/if}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}</dd>
<dt>Montant de l'immobilisation</dt>
<dd><span class="money">{{$montant_immo|money_currency_html:false|raw}}</dd>
{{if $total_credits > 0}}
<dt>Montant des avoirs</dt>
<dd class="money">{{"%f"|math:$total_credits|money_currency_html:false|raw}}</dd>
<dt>Montant à amortir</dt>
<dd class="money">{{"%f"|math:$solde|money_currency_html:false|raw}}</dd>
{{/if}}
{{if $total_amort > 0}}
<dt>Montant des amortissements</dt>
<dd>{{$total_amort|money_currency_html:false|raw}}</dd>
<dt>Valeur nette résiduelle</dt>
<dd>{{"%d-%d"|math:$solde:$total_amort|money_currency_html:false|raw}}</dd>
{{/if}}
{{if $montant_cession > 0}}
<dt>Montant de la cession</dt>
<dd>{{$montant_cession|money_currency_html:false|raw}}</dd>
{{/if}}
</dl>
</div>
{{if $erreur}}
<p class="block error">{{$message}}<br />
{{if $erreur == 1}}
Vérifiez si vous avez correctement attaché les écritures d'amortissement.
{{elseif $erreur == 2}}
Vérifiez si vous avez correctement attaché les éventuelles écritures d'avoir.
{{/if}}
</p>
<table class="list error">
<caption>Détails de l'écriture de sortie de bilan</caption>
<thead class="error">
<tr>
<td class="num">Numéro</td>
<td>Compte</td>
<td class="nombre">Débit</td>
<td class="nombre">Crédit</td>
<td>Libellé</td>
</tr>
</thead>
<tbody>
{{#foreach from=$exit_trans key="account_code" item="line"}}
{{:assign account_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.id_year}}
<tr>
<td class="num"><a href="{{$account_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="money">{{$line.debit|money_currency:false}}</td>
<td class="money">{{$line.credit|money_currency:false}}</td>
<td>{{$line.line_label}}</td>
</tr>
{{/foreach}}
</tbody>
</table>
{{/if}}
{{if $exit_lines}}
<nav class="actions">
{{:linkbutton
label="Attacher une écriture sortie de bilan"
href="list_exit.html?immo_doc_id=%s&filter=true&from=%s"|args:$_GET.immo_doc_id:$_GET.from shape="link"
target="_dialog"}}
</nav>
{{/if}}
<h3 class="ruler">Écriture de sortie de bilan attachée à l'immobilisation</h3>
{{if $exit_line != null}}
{{:assign exit_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$exit_line.trans_id}}
<table class="list">
<thead>
<tr>
<td class="num"></td>
<td>Date</td>
<td>Libellé</td>
<td class="nombre">Montant</td>
<td>N° compte</td>
<td>Compte</td>
<td class="actions"></td>
</tr>
</thead>
<tbody>
<tr>
<td class="num"><a href="{{$exit_url}}">#{{$exit_line.trans_id}}</a></td>
<td>{{$exit_line.date|date_short}}</td>
<td>
{{if $exit_line.line_label != null}}
{{$exit_line.line_label}}
{{else}}
{{$exit_line.trans_label}}
{{/if}}
</td>
<td class="money">{{"%f"|math:$exit_line.amount|money_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$exit_line.account_code}}</a></td>
<td>{{$exit_line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Détacher" href="detach_exit.html?immo_doc_id=%s&exit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$exit_line.line_id shape="minus"}}
</td>
</tr>
</tbody>
</table>
{{elseif $exit_lines}}
<p class="block alert">
Vous pouvez attacher une écriture de sortie de bilan à l'immobilisation
</p>
{{/if}}
{{if $exit_lines}}
{{*
<h3 class="ruler">Écritures non rattachées</h3>
<table class="list">
<thead>
<tr>
<td class="num"></td>
<td>Date</td>
<td>Libellé</td>
<td class="nombre">Montant</td>
<td>N° compte</td>
<td>Compte</td>
<td class="actions"></td>
</tr>
</thead>
<tbody>
{{#foreach from=$exit_lines item="line"}}
{{:assign exit_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}}
<tr>
<td class="num"><a href="{{$exit_url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>{{$line.trans_label}}
{{if $line.line_label != null && $line.line_label != $line.trans_label}} — {{$line.line_label}}{{/if}}
</td>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Attacher" href="attach_exit.html?immo_doc_id=%s&exit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.credit_line_id shape="plus"}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
*}}
{{elseif $exit_line == null}}
<p class="block error">Aucune écriture de sortie de bilan avec un
montant de {{$solde|money_currency_html:false|raw}} au crédit du
compte {{$ligne_immo.account_code}} — {{$ligne_immo.account_label}} ;
<br />
Vérifiez si vous avez correctement attaché les éventuelles écritures d'avoir.
<br />
Si vous avez supprimé l'écriture de sortie de bilan, il faut
la recréer avant de pouvoir classer cette immobilisation
« Sortie du bilan » !
</p>
{{:save
key=$info_immo.key
status=null
}}
{{/if}}
<form method="post" action="">
<p class="submit">
{{:button type="submit" name="backward" label="Revenir à l'étape précédente" shape="left" class="main"}}
{{if $exit_line && ! $erreur}}
{{:button type="submit" name="validate" label="Terminer" shape="check" class="main"}}
{{else}}
{{:button type="submit" name="cancel" label="Annuler" shape="delete" class="main"}}
{{/if}}
</p>
</form>

View file

@ -31,7 +31,7 @@
<thead> <thead>
<tr> <tr>
<th>Libellé</th> <th>Libellé</th>
<th class="actions"></th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

View file

@ -2,7 +2,7 @@
{{* {{*
Marquer la ligne d'écriture « à ignorer » Marquer la ligne d'écriture « à ignorer »
@param immo_line_id : numéro de ligne @param immo_id : numéro de ligne
*}} *}}
{{#select {{#select
@ -14,14 +14,13 @@
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 :line_id = $_GET.immo_id
assign=ligne_immo assign=ligne_immo
}} }}
{{else}} {{else}}
{{:error message="Il n'y a aucune écriture avec le numéro de ligne %s !"|args:$_GET.immo_line_id}} {{:error message="Il n'y a aucune écriture avec le numéro de ligne %s !"|args:$_GET.immo_id}}
{{/select}} {{/select}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}}{{/load}} {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}{{/load}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="proceed"}} {{#form on="proceed"}}
@ -31,9 +30,9 @@
{{:assign status="ignored"}} {{:assign status="ignored"}}
{{:save {{:save
key=""|uuid key=""|uuid
validate_schema="asset.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=$ligne_immo.date date=$ligne_immo.date
status=$status status=$status
@ -63,7 +62,7 @@
<div class="informations"> <div class="informations">
<dl class="describe"> <dl class="describe">
<dt>Écriture</dt> <dt>Écriture</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$ligne_immo.label}}</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.amount|money_currency_html:false|raw}}</dd> <dd class="money strong">{{"%f"|math:$ligne_immo.amount|money_currency_html:false|raw}}</dd>
</dl> </dl>

View file

@ -7,39 +7,44 @@
{{:assign type_immo=$_GET.type_immo}} {{:assign type_immo=$_GET.type_immo}}
{{/if}} {{/if}}
{{if $type_immo == "managed"}} {{if $type_immo == "managed"}}
{{:admin_header title="Immobilisations en cours d'amortissement" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Immobilisations en cours d'amortissement" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "amortized"}} {{elseif $type_immo == "amortized"}}
{{:admin_header title="Immobilisations amorties" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Immobilisations amorties" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "archived"}} {{elseif $type_immo == "archived"}}
{{:admin_header title="Immobilisations archivées" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Immobilisations archivées" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "other"}} {{elseif $type_immo == "other"}}
{{:admin_header title="Immobilisations à classer" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Autres immobilisations" custom_css="./style.css" current="module_amortization"}}
{{elseif $type_immo == "unfinished"}} {{elseif $type_immo == "unfinished"}}
{{:admin_header title="Immobilisations en cours de constitution" custom_css="./style.css" current="module_amortization" subcurrent="unfinished"}} {{:admin_header title="Immobilisations en cours de constitution" custom_css="./style.css" current="module_amortization"}}
{{/if}} {{/if}}
{{:include file="_nav.html" current=$type_immo}}
{{* Mise à niveau *}} {{:include file="_nav.html" current="index" subcurrent="%s"|args:$type_immo}}
{{:assign module_version="0.40.0"}}
{{:include file="upgrade.html" module_version=$module_version}}
{{* supprimer les documents sans écriture associée *}}
{{:include file="_remove_orphan_docs.tpl"}}
{{if $_GET.ok}} {{if $_GET.ok}}
{{if $_GET.msg|match:"immobilisation"}} {{if $_GET.msg|match:"immobilisation"}}
{{:assign msg="Immobilisation enregistrée"}} {{:assign msg="Immobilisation enregistrée"}}
{{elseif $_GET.msg|match:"suppr_infos"}}
{{:assign msg="Paramètres supprimés"}}
{{elseif $_GET.msg|match:"infos"}} {{elseif $_GET.msg|match:"infos"}}
{{:assign msg="Paramètres enregistrés"}} {{:assign msg="Informations enregistrées"}}
{{/if}} {{/if}}
<p class="block confirm">{{$msg}}</p> <p class="block confirm">{{$msg}}</p>
{{elseif $_GET.err}} {{elseif $_GET.err}}
<p class="block error">Échec enregistrement immobilisation</p> <p class="block error">Échec enregistrement immobilisation</p>
{{/if}} {{/if}}
{{#load type="immo"}}
{{* supprimer les documents sans écriture associée *}}
{{#select
line.id as line_id
FROM acc_transactions_lines as line
WHERE line.id = :line_id;
:line_id = $line
}}
{{else}}
{{:delete key=$key}}
{{/select}}
{{/load}}
{{if $type_immo == "other"}} {{if $type_immo == "other"}}
{{:include file="_immobilisations_autres.html"}} {{:include file="_immobilisations_autres.html"}}
{{elseif $type_immo == "archived"}} {{elseif $type_immo == "archived"}}
@ -49,4 +54,5 @@
{{elseif $type_immo == "managed" || $type_immo == "amortized"}} {{elseif $type_immo == "managed" || $type_immo == "amortized"}}
{{:include file="_immobilisations.html"}} {{:include file="_immobilisations.html"}}
{{/if}} {{/if}}
{{:admin_footer}} {{:admin_footer}}

View file

@ -1,56 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Schéma des liens entre écritures",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["amort_link", "credit_link", "cession_link", "exit_link"]
},
"immo_doc_id" : {
"description": "identifiant du document d'immobilisation associé",
"type" : "integer",
"exclusiveMinimum": 0
},
"amort_line_id" : {
"description": "ligne d'amortissement associée à l'immobilisation",
"type": "integer",
"exclusiveMinimum": 0
},
"credit_line_id": {
"description": "ligne au crédit du compte de l'immobilisation",
"type": "integer",
"exclusiveMinimum": 0
},
"exit_line_id": {
"description": "ligne de sortie du bilan de l'immobilisation",
"type": "integer",
"exclusiveMinimum": 0
},
"cession_line_id": {
"description": "ligne de cession de l'immobilisation",
"type": "integer",
"exclusiveMinimum": 0
},
"amount": {
"description": "montant de la ligne d'amortissement ou de crédit",
"type": ["number", "null"]
},
"created" : {
"description" : "vrai si amortissement créé dans le module",
"type" : ["boolean", "null"]
}
},
"required": ["type", "immo_doc_id"],
"if": {"properties": {"type": {"const": "amort_link"}}, "required": ["type"]},
"then": {"required": ["amort_line_id"]},
"else":
"if": {"properties": {"type": {"const": "credit_link"}}, "required": ["type"]},
"then": {"required": ["credit_line_id"]},
"else":
"if": {"properties": {"type": {"const": "cession_link"}}, "required": ["type"]},
"then": {"required": ["cession_line_id"]},
"else":
"if": {"properties": {"type": {"const": "exit_link"}}, "required": ["type"]},
"then": {"required": ["exit_line_id"]},
}

View file

@ -1,153 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Lister les écritures au crédit du compte de l'immobilisation
paramètre et proposer de les attacher à l'immo paramètre
@param immo_doc_id : document associé à l'immo
*}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label ===false }}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$montant_immo:$total_credits}}
{{*
lister les écritures au crédit du compte de l'immobilisation
*}}
{{if $_GET.filter}}
{{:assign account_code=$ligne_immo.account_code|cat:"%"}}
{{else}}
{{:assign account_code=$ligne_immo.account_code|substr:0:2|cat:"%"}}
{{/if}}
{{:assign date_immo=$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{#select
line.id as credit_line_id,
line.id_transaction as credit_trans_id,
line.credit as credit_amount,
line.label as line_label,
trans.id as immo_trans_id,
trans.date as trans_date,
trans.label as trans_label,
trans.id_year as credit_year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction
INNER JOIN acc_accounts AS account ON account.id = line.id_account
INNER JOIN acc_years AS y ON y.id = trans.id_year
WHERE account.code LIKE :account_code AND credit > 0
AND trans.date >= :date_immo
AND credit_line_id NOT IN (
SELECT json_extract(link.document, '$.credit_line_id') AS credit_line_id FROM !table as link
WHERE json_extract(link.document, '$.type') == "credit_link"
UNION
SELECT json_extract(exit_link.document, '$.exit_line_id') AS line_id FROM !table as exit_link
WHERE json_extract(exit_link.document, '$.type') == "exit_link")
ORDER BY trans.date, trans.label;
:account_code = $account_code
!table = $module.table
:date_immo = $date_immo
assign="credit_line"
}}
{{if $credit_line.credit_amount < $solde}}
{{:assign var="other_immos." value=$credit_line}}
{{/if}}
{{/select}}
{{:admin_header title="Écritures au crédit du compte d'immobilisation" custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include
file="_nav.html"
current="managed"
subcurrent="link_immo"
type_immo="other"
}}
{{/if}}
<nav class="tabs">
<ul>
<li {{if $_GET.filter}}class="current"{{/if}}>
<a href="link_immo.html?immo_doc_id={{$_GET.immo_doc_id}}{{if $dialog}}&_dialog{{/if}}&filter=true&from={{$_GET.from}}">
Compte {{$ligne_immo.account_code}} et sous-comptes
</a>
</li>
<li {{if ! $_GET.filter}}class="current"{{/if}}>
<a href="link_immo.html?immo_doc_id={{$_GET.immo_doc_id}}{{if $dialog}}&_dialog{{/if}}&from={{$_GET.from}}">
Compte {{$ligne_immo.account_code|substr:0:2}} et sous-comptes
</a>
</li>
</ul>
</nav>
<section class="immobilisation">
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.amount|money_currency_html:false|raw}}</dd>
<dt>Date de l'immobilisation</dt>
<dd>{{$date_immo|date_short}}</dd>
</dl>
</div>
{{if $other_immos != null}}
<table class="list">
<thead>
<tr>
<th></th>
<th>Date</th>
<th class="nombre">Montant</th>
<th>Libellé</th>
<th>N° compte</th>
<th>Compte</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{#foreach from=$other_immos item="line"}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.credit_trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.credit_year}}
<tr>
<td class="num"><a href="{{$trans_url}}">#{{$line.credit_trans_id}}</a></td>
<td>{{$line.trans_date|date_short}}</td>
<td class="money">{{"%f"|math:$line.credit_amount|money_html:false|raw}}</td>
<td>{{$line.trans_label}}
{{if $line.line_label != null && $line.line_label != $line.trans_label}} - {{$line.line_label}}{{/if}}
</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Attacher" href="attach_credit.html?credit_line_id=%d&immo_doc_id=%s&from=%s"|args:$line.credit_line_id:$_GET.immo_doc_id:$_GET.from shape="plus"}}
</td>
</tr>
{{/foreach}}
</tbody>
<p class="help">Sélectionner une écriture d'avoir ou autre réduction du montant de l'acquisition pour l'associer à l'immobilisation</p>
</table>
{{else}}
<p class="block alert">Aucune écriture au crédit du compte « {{$ligne_immo.account_code}} »</p>
{{/if}}
</section>
{{:form_errors}}
{{:admin_footer}}

View file

@ -1,118 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Lister les écritures de cession du compte de l'immobilisation
paramètre et proposer de les attacher à l'immo paramètre
@param immo_doc_id : document associé à l'immo
*}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label ===false }}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{:assign total_cession=0}}
{{#select
line.id as line_id,
line.credit as amount,
line.label as line_label,
trans.id as trans_id,
trans.date as date,
trans.label as trans_label,
trans.id_year as year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON line.id_account = account.id
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
WHERE account.code LIKE :code_cession_new OR account.code LIKE :code_cession_old
;
:code_cession_new = "757%"
:code_cession_old = "775%"
assign="line"
}}
{{#select
CASE WHEN links.id_related = :trans_id
THEN links.id_transaction
ELSE links.id_related
END as linked_id
FROM acc_transactions_links as links
WHERE links.id_transaction = :trans_id OR links.id_related = :trans_id
;
:trans_id = $line.trans_id
}}
{{if $linked_id == $ligne_immo.trans_id}}
{{:assign total_cession="%d+%d"|math:$total_cession:$line.amount}}
{{:assign var="line.linked_id" value=$linked_id}}
{{:assign var="linked_cessions." value=$line}}
{{/if}}
{{else}}
{{:assign var="free_cessions." value=$line}}
{{/select}}
{{/select}}
{{:admin_header title="Écritures de cession du compte d'immobilisation" custom_css="./style.css" current="module_amortization"}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.amount|money_currency_html:false|raw}}</dd>
<dt>Date de l'immobilisation</dt>
<dd>{{$date_debut|date_short}}</dd>
</dl>
</div>
{{if $free_cessions}}
<table class="list">
<thead>
<tr>
<td class="num"></td>
<td>Date</td>
<td>Libellé</td>
<td class="nombre">Montant</td>
<td>N° compte</td>
<td>Compte</td>
<td class="actions"></td>
</tr>
</thead>
<tbody>
{{#foreach from=$free_cessions item="line"}}
{{:assign cession_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}}
<tr>
<td class="num"><a href="{{$cession_url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>
{{if $line.line_label != null}}
{{$line.line_label}}
{{if $line.trans_label != $line.line_label}}
— {{$line.trans_label}}
{{/if}}
{{else}}
{{$line.trans_label}}
{{/if}}
</td>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Attacher" href="attach_cession.html?immo_doc_id=%s&cession_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.line_id shape="plus"}}
</td>
</tr>
{{/foreach}}
</tbody>
<p class="help">Sélectionner une écriture de cession pour l'associer à l'immobilisation</p>
</table>
{{/if}}

View file

@ -1,108 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Lister les écritures de sortie de bilan du compte de l'immobilisation
paramètre et proposer de les attacher à l'immo paramètre
@param immo_doc_id : document associé à l'immo
*}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $label_immo|strpos:$ligne_immo.line_label ===false }}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$ligne_immo.amount:$total_credits}}
{{#select
trans.id as trans_id,
trans.label as trans_label,
trans.date as date,
trans.id_year as year,
line.id as credit_line_id,
line.label as line_label,
line.credit as amount,
acc.id as account_id,
acc.code as account_code,
acc.label as account_label
FROM acc_transactions AS trans
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
LEFT JOIN module_data_amortization AS mda ON json_extract(mda.document, '$.amort_line_id') = line.id
WHERE
acc.code = :acc_code
AND line.credit > 0
AND credit_line_id NOT IN (
SELECT json_extract(credit_link.document, '$.credit_line_id') AS line_id FROM !table as credit_link
WHERE json_extract(credit_link.document, '$.type') == "credit_link"
UNION
SELECT json_extract(exit_link.document, '$.exit_line_id') AS line_id FROM !table as exit_link
WHERE json_extract(exit_link.document, '$.type') == "exit_link"
)
;
:acc_code=$ligne_immo.account_code
!table =$module.table
assign="credit_line"
}}
{{if $credit_line.amount == $solde}}
{{:assign var="exit_lines." value=$credit_line}}
{{/if}}
{{/select}}
{{:admin_header title="Écritures de cession du compte d'immobilisation" custom_css="./style.css" current="module_amortization"}}
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$ligne_immo.amount|money_currency_html:false|raw}}</dd>
<dt>Date de l'immobilisation</dt>
<dd>{{$date_debut|date_short}}</dd>
</dl>
</div>
{{if $exit_lines}}
<table class="list">
<thead>
<tr>
<td class="num"></td>
<td>Date</td>
<td>Libellé</td>
<td class="nombre">Montant</td>
<td>N° compte</td>
<td>Compte</td>
<td class="actions"></td>
</tr>
</thead>
<tbody>
{{#foreach from=$exit_lines item="line"}}
{{:assign exit_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}}
<tr>
<td class="num"><a href="{{$exit_url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>{{$line.trans_label}}
{{if $line.line_label != null && $line.line_label != $line.trans_label}} — {{$line.line_label}}{{/if}}
</td>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</td>
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td>
<td class="actions">
{{:linkbutton label="Attacher" href="attach_exit.html?immo_doc_id=%s&exit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.credit_line_id shape="plus"}}
</td>
</tr>
{{/foreach}}
</tbody>
<p class="help">Sélectionner une écriture de sortie de bilan pour l'associer à l'immobilisation</p>
</table>
{{/if}}

View file

@ -1,169 +0,0 @@
{{* -*- brindille -*- *}}
{{*
@param immo_doc_id
*}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}}
{{:assign immo_label=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $immo_label}}
{{:assign immo_label=$immo_label|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}}
{{:assign date_achat_defaut=$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign date_mes_defaut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
{{:assign solde="%d-%d"|math:$montant_immo:$total_credits}}
{{:assign autres_amount=0}}
{{#load
type="immo"
where="$$.line = :line_id AND id != :doc_id"
:line_id = $info_immo.line
:doc_id = $info_immo.id
}}
{{:assign autres_amount="%d+%d"|math:$autres_amount:$amount}}
{{/load}}
{{:assign max_disponible="%d-%d"|math:$ligne_immo.amount:$autres_amount}}
{{* traiter la saisie *}}
{{#form on="save"}}
{{if $_POST.date_achat|parse_date > $ligne_immo.date_achat}}
{{:assign da=$ligne_immo.date_achat|date_short}}
{{:error message="Erreur : la date d'achat (%s) ne peut être postérieure à la date de l'écriture d'immobilisation (%s)"|args:$_POST.date_achat:$da}}
{{/if}}
{{if $_POST.date_achat == null || $_POST.date_achat|parse_date == $info_immo.date_achat}}
{{:assign date_achat=$info_immo.date_achat}}
{{elseif $_POST.date_achat|parse_date == $ligne_immo.date_achat}}
{{:assign date_achat=null}}
{{else}}
{{:assign date_achat=$_POST.date_achat|parse_date}}
{{/if}}
{{* TODO : simplifier ? *}}
{{if $_POST.date_mes == null || $_POST.date_mes|parse_date == $info_immo.date_mes}}
{{:assign date_mes=$info_immo.date_mes}}
{{elseif $_POST.date_mes|parse_date == $info_immo.date_achat}}
{{:assign date_mes=null}}
{{elseif $_POST.date_mes|parse_date == $ligne_immo.date_achat}}
{{if $info_immo.date_achat == null}}
{{:assign date_mes=null}}
{{else}}
{{:assign date_mes=$ligne_immo.date_achat}}
{{/if}}
{{else}}
{{:assign date_mes=$_POST.date_mes|parse_date}}
{{:assign date_achat_comp=$ligne_immo.date_achat}}
{{if $date_achat != null}}
{{:assign date_achat_comp=$date_achat}}
{{/if}}
{{if $date_mes < $date_achat_comp}}
{{:assign da=$date_achat_comp|date_short}}
{{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$_POST.date_mes:$da}}
{{/if}}
{{/if}}
{{:assign duration=$_POST.duree|intval}}
{{if $duration <= 0}}
{{:error message="Erreur : la durée d'amortissement doit être strictement positive"}}
{{/if}}
{{if $_POST.libelle != $ligne_immo.line_label && $_POST.libelle != $ligne_immo.trans_label}}
{{:assign libelle=$_POST.libelle}}
{{else}}
{{:assign libelle=null}}
{{/if}}
{{:assign montant=null}}
{{if $_POST.montant == null || $_POST.montant|money_int == 0 || $_POST.montant|money_int == $info_immo.amount}}
{{:assign montant=$info_immo.amount}}
{{else}}
{{:assign montant=$_POST.montant|money_int}}
{{if $montant < 0 || $montant > $max_disponible}}
{{:assign montant_aff="%f"|math:$montant|money_currency:false}}
{{:assign max_aff="%f"|math:$max_disponible|money_currency:false}}
{{:error message="Le montant (%s) doit être positif et ne peut être supérieur à %s"|args:$montant_aff:$max_aff}}
{{/if}}
{{/if}}
{{:assign status="managed"}}
{{* enregistrer les infos de l'immobilisation *}}
{{:save
key=$info_immo.key
validate_schema="asset.schema.json"
type="immo"
line=$info_immo.line
duration=$duration
label=$libelle
amount=$montant
date_achat=$date_achat
date_mes=$date_mes
status=$status
assign_new_id="new_id"
}}
{{:assign type_immo="managed"}}
{{:redirect force="amortization.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=modif"|args:$_GET.immo_doc_id:$type_immo}}
{{/form}}
{{:admin_header title="Modifier l'immobilisation" custom_css="./style.css" current="module_amortization"}}
{{if ! $dialog}}
{{:include file="_nav.html" current="managed" subcurrent="modify_infos"}}
{{/if}}
{{:form_errors}}
{{:assign choix_defaut=$_GET.type_immo}}
{{*
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.trans_id}}
<h3 class="ruler">Paramètres de l'immobilisation</h3>
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$immo_label}}</dd>
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$montant_immo|money_currency_html:false|raw}}</dd>
{{if $total_credits > 0}}
<dt>Montant des avoirs</dt>
<dd class="money">{{"%f"|math:$total_credits|money_currency_html:false|raw}}</dd>
<dt>Montant à amortir</dt>
<dd class="money strong">{{"%f"|math:$solde|money_currency_html:false|raw}}</dd>
{{/if}}
<dt>Date de l'écriture d'immobilisation</dt>
<dd>{{$ligne_immo.date_achat|date_short}}</dd>
</dl>
</div>
<form method="post" action="">
<fieldset>
<legend>Informations</legend>
<dl>
{{:input type="number" name="duree" label="Durée d'amortissement" min=1 default=$info_immo.duration suffix="année(s)"}}
{{if $info_immo.amount != null}}
{{:assign max_aff="%f"|math:$max_disponible|money_currency:false}}
{{:input type="money" name="montant" label="Montant de l'immobilisation" default=$montant_immo help="Montant maximum : %s"|args:$max_aff}}
{{/if}}
{{:input type="date" name="date_achat" label="Date d'acquisition" default=$date_achat_defaut help="si différente de la date de l'écriture d'immobilisation"}}
{{:input type="date" name="date_mes" label="Date de mise en service" default=$date_mes_defaut help="si différente de la date d'acquisition"}}
{{:input type="text" name="libelle" label="Libellé" default=$immo_label help="si différent du libellé de l'écriture d'immobilisation"}}
</dl>
</fieldset>
<p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>
{{:admin_footer}}

View file

@ -1,5 +1,5 @@
name="Amortissements" name="Amortissements"
description="Immobilisations et amortissements\nversion 0.40.0" description="Immobilisations et amortissements\nversion 0.28"
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,45 +3,65 @@
{{* {{*
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_doc_id id du doc d'immo associé @param immo_id = id de la ligne d'immo
*}} *}}
{{* données de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}}
{{:error message=$message}}
{{/if}}
{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}} {{* récupérer les infos de l'immobilisation *}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} {{#select
{{if $label_immo|strpos:$ligne_immo.line_label === false}} line.id as immo_id,
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} line.debit as montant,
{{/if}} trans.id as trans_id,
{{:assign date_mes=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}} trans.label as label,
trans.date
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}} FROM acc_transactions_lines AS line
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}} INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
{{:assign montant_immo="%d-%d"|math:$montant_immo:$total_credits}} WHERE line.id = :line_id;
:line_id = $_GET.immo_id|intval
{{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}} assign=ligne_immo
{{:include }}
file="./_get_amort_code.html"
code_immo=$ligne_immo.account_code
keep="code_amort"
}}
{{if $_GET.filter}}
{{:assign amort_account=$code_amort|quote_sql}}
{{:assign filter_condition="account.code = "|cat:$amort_account}}
{{else}} {{else}}
{{:assign account_filter="28%"|quote_sql}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{:assign filter_condition="account.code LIKE "|cat:$account_filter}} {{/select}}
{{/if}}
{{:assign date_amort=$date_mes|quote_sql}} {{:include file="_get_config.html" keep="module.config"}}
{{:assign date_condition="trans.date >= "|cat:$date_amort}} {{:assign filter_condition=" NOT ("}}
{{:assign condition=$date_condition|cat:" AND "|cat:$filter_condition}} {{#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)"}}
{{* lister les amortissements non rattachés à une immo *}} {{#select
{{:include file="./_get_free_amort.html" condition=$condition keep="free_amort_lines"}} 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
INNER JOIN acc_accounts AS account ON account.id = line.id_account
INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction
INNER JOIN acc_years AS y ON y.id = trans.id_year
WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16) AND !filter_condition
ORDER BY trans.date, trans.label;
!filter_condition=$filter_condition
assign=autre_amort
}}
{{#select
id_transaction,
id_related
FROM acc_transactions_links
WHERE id_transaction = :id_amort OR id_related = :id_amort;
:id_amort=$t_id
}}
{{else}}
{{:assign var="autres_amortissements." value=$autre_amort}}
{{/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_amortization"}}
@ -49,86 +69,53 @@
{{if ! $dialog}} {{if ! $dialog}}
{{:include {{:include
file="_nav.html" file="_nav.html"
current="managed" current="index"
subcurrent="amortization" subcurrent="other"
type_immo="managed" subsubcurrent="amortization"
autres_amort=$free_amort_lines type_immo="other"
autres_amort=$autres_amortissements
}} }}
{{/if}} {{/if}}
<nav class="tabs"> {{if $autres_amortissements != null}}
<ul> <section class="amortissement">
<li {{if $_GET.filter}}class="current"{{/if}}> <h3 class="ruler">Immobilisation « {{$ligne_immo.label}} »</h3>
<a href="other_amortizations.html?immo_doc_id={{$_GET.immo_doc_id}}{{if $dialog}}&_dialog{{/if}}&filter=true&from={{$_GET.from}}">
Amortissements du compte {{$code_amort}}
</a>
</li>
<li {{if ! $_GET.filter}}class="current"{{/if}}>
<a href="other_amortizations.html?immo_doc_id={{$_GET.immo_doc_id}}{{if $dialog}}&_dialog{{/if}}&from={{$_GET.from}}">
Tous les amortissements
</a>
</li>
</ul>
</nav>
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
<section class="amortissement">
<div class="informations">
<dl class="describe">
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span> {{$label_immo}}</dd>
<dt>Montant</dt>
<dd class="money strong">{{"%f"|math:$montant_immo|money_currency_html:false|raw}}</dd>
<dt>Début d'amortissement</dt>
<dd>{{$date_mes|date_short}}</dd>
</dl>
</div>
{{if $free_amort_lines != null}}
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
<th>Date</th> <th>Date</th>
<th>Libellé</th>
<th class="nombre">Montant</th> <th class="nombre">Montant</th>
<th>Libellé</th>
<th>N° compte</th> <th>N° compte</th>
<th>Compte</th> <th>Compte</th>
<th class="actions"></th> <th class="actions"></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#foreach from=$free_amort_lines item="line"}} {{#foreach from=$autres_amortissements item="line"}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.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.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.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> <td class="money">{{"%f"|math:$line.amort_amount|money_html:false|raw}}</td>
{{if $line.line_label != null}} <td>{{if $line.l_label == null}}
{{$line.line_label}} {{$line.t_label}}
{{if $line.trans_label != $line.line_label}} {{else}}
— {{$line.trans_label}} {{$line.l_label}}
{{/if}} {{/if}}
{{else}}
{{$line.trans_label}}
{{/if}}
</td> </td>
<td class="money">{{"%f"|math:$line.amount|money_html:false|raw}}</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 class="actions"> <td>
{{:linkbutton label="Attacher" href="attach_amort.html?immo_doc_id=%s&amort_line_id=%s&from=%s"|args:$_GET.immo_doc_id:$line.line_id:$_GET.from 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}}
</tbody> </tbody>
<p class="help">Sélectionner une écriture d'amortissement pour l'associer à l'immobilisation</p>
</table> </table>
{{else}} </section>
<p class="block alert">Aucun amortissement pour le compte {{$code_amort}}</p> {{/if}}
{{/if}}
</section>
{{:form_errors}} {{:form_errors}}
{{:admin_footer}} {{:admin_footer}}

View file

@ -2,46 +2,78 @@
{{* {{*
Créer une écriture d'amortissement Créer une écriture d'amortissement
@param immo_doc_id : id du doc associé à l'immo @param immo_id : id de la ligne d'immobilisation
*}} *}}
{{* données de l'immobilisation *}} {{* Infos de l'immobilisation *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}} {{#select
{{if $message != null}} line.id as immo_id,
{{:error message=$message}} line.id_account as account_id,
{{/if}} line.debit as montant,
line.id_project as project_id,
trans.id as trans_id,
trans.label,
trans.date,
y.id as year_id,
y.start_date,
y.end_date,
project.label as project_label
FROM acc_transactions_lines AS line
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.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
WHERE line.id = :line_id;
:line_id = $_GET.immo_id|intval
assign=ligne_immo
}}
{{else}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}}
{{:assign date_debut=$ligne_immo.date}}
{{if $info_immo.amount != null}} {{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}} {{:assign duree=$duration}}
{{/if}} {{:assign date_debut=$date}}
{{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}} {{if $amount != null}}
{{:assign amort_label=$info_immo.label|or:$ligne_immo.trans_label}} {{:assign var="ligne_immo.montant" value=$amount}}
{{/if}}
{{else}}
{{:error message="Vous devez renseigner la date de mise en service et la durée d'immobilisation"}}
{{/load}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $amort_label}} {{* chercher des écritures d'amortissement liées à l'immobilisation *}}
{{:assign amort_label=$amort_label|cat:" — "|cat:$ligne_immo.line_label}} {{#select
{{/if}} SUM(l_amort.credit) as amort_amount,
{{:assign var="amort_label" value="Amortissement %s"|args:$amort_label}} l_amort.label as amort_label,
l_amort.id as amort_line_id,
CASE WHEN links.id_related = t_immo.id
THEN links.id_transaction
ELSE links.id_related
END as amort_trans_id,
MAX(trans.date) as amort_date,
COUNT(trans.id) as amort_number,
trans.label as trans_label,
trans.id_year as amort_year,
account.id as account_id,
account.code as account_code,
account.label as account_label
FROM acc_transactions_lines as l_immo
INNER JOIN acc_transactions as t_immo on t_immo.id = l_immo.id_transaction
INNER JOIN acc_transactions_links as links
ON (t_immo.id = links.id_transaction
OR
t_immo.id = links.id_related)
INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction
INNER join acc_transactions as trans on l_amort.id_transaction = trans.id
INNER join acc_accounts as account on l_amort.id_account = account.id
WHERE l_immo.id = :line_id AND account.code LIKE '28%'
ORDER BY trans.date DESC LIMIT 1;
:line_id = $_GET.immo_id|intval
assign=amort_line
}}
{{/select}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}} {{if $amort_line.amort_number == 0}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
{{:assign var="ligne_immo.amount" value="%d-%d"|math:$ligne_immo.amount:$total_credits}}
{{* lister les amortissements liés à l'immobilisation *}}
{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort"}}
{{:assign valeur_residuelle="%d-%d"|math:$ligne_immo.amount:$total_amort}}
{{if $valeur_residuelle == 0}}
{{:error message="Cette immobilisation est complètement amortie ; il est impossible d'ajouter une écriture d'amortissement"}}
{{/if}}
{{#foreach from=$linked_amort|ksort item="line"}}
{{:assign date_debut=$line.date}}
{{:assign code_amort=$line.account_code}}
{{:assign amort_account_label=$line.account_label}}
{{:assign amort_label=$line_label|or:$trans_label}}
{{/foreach}}
{{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}}
@ -51,12 +83,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.trans_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}}
{{* {{*
@ -65,8 +100,8 @@
*}} *}}
{{: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}}
@ -78,9 +113,7 @@
{{:assign var="years_data.%d"|args:$id value=$ts_debut|cat:" "|cat:$ts_fin}} {{:assign var="years_data.%d"|args:$id value=$ts_debut|cat:" "|cat:$ts_fin}}
{{:assign msg_years=$msg_years|cat:"\n"|cat:" - "|cat:$label|cat:" : "|cat:$debut|cat:" à "|cat:$fin}} {{:assign msg_years=$msg_years|cat:"\n"|cat:" - "|cat:$label|cat:" : "|cat:$debut|cat:" à "|cat:$fin}}
{{else}} {{else}}
{{:assign date_debut=$date_debut|date_short}} {{:error message="Aucun exercice ouvert pour enregistrer un amortissement"}}
{{:assign msg="Pas d'exercice ouvert pour enregistrer un amortissement à partir du %s"|args:$date_debut}}
{{:error message=$msg}}
{{/years}} {{/years}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
@ -137,35 +170,30 @@
}} }}
{{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"|args:$compte:$selected_chart}} {{: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.amount:$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 montant=$_POST.montant|trim|money_int|money_raw}}
{{:assign solde=$solde|money_raw}} {{:assign solde=$solde|money_raw}}
{{:error message="Le montant indiqué « %s » dépasse le solde à amortir « %s »"|args:$montant:$solde}} {{:error message="Le montant indiqué « %s » dépasse le solde à amortir « %s »"|args:$_POST.montant:$solde}}
{{/if}} {{/if}}
{{*
supprimer les documents qui pointent sur une ligne d'amortissement absente
cas de la suppression manuelle d'un amortissement
*}}
{{:include file="_remove_orphan_docs.tpl"}}
{{* enregistrer l'écriture *}} {{* enregistrer l'écriture *}}
{{: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.id_project id_project=$_GET.project_id
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.id_project id_project=$_GET.project_id
label=$_POST.designation
}} }}
{{:api {{:api
method="POST" method="POST"
@ -180,54 +208,27 @@
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}}
{{#foreach from=$result.lines item="line"}}
{{if $line.account_code == $credit_account|keys|value:0}}
{{:save
key=""|uuid
type="amort_link"
immo_doc_id=$_GET.immo_doc_id|intval
amort_line_id=$line.id
created=true
}}
{{:break}}
{{/if}}
{{/foreach}}
{{* immo soldée ? *}}
{{if $_POST.montant|trim|money_int == $solde}}
{{:assign status="amortized"}}
{{:save
key=$info_immo.key
status=$status
}}
{{/if}}
{{:redirect force="amortization.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=amortissement"|args:$_GET.immo_doc_id:$status}}
{{/form}} {{/form}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} {{:admin_header title="Ajout amortissement" current="module_amortization"}}
{{:admin_header title="Amortissement pour « %s »"|args:$label_immo custom_css="./style.css" current="module_amortization"}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="managed" subcurrent="amortization"}} {{:include file="_nav.html" current="index" subcurrent="managed" subsubcurrent="amortization"}}
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
{{if $years|count == 1}} {{:assign var=selected_year value=$years.0.id}}
{{:assign var=selected_year value=$years.0.id}}
{{/if}}
{{:assign var=date_amort value=$years.0.end_date}} {{:assign var=date_amort value=$years.0.end_date}}
{{:include file="_calcul_dates.html" date_debut=$date_debut date_fin=$date_amort keep="nbjours"}} {{:include file="_calcul_dates.html" date_debut=$date_debut date_fin=$date_amort keep="nbjours"}}
{{* montant de l'amortissement *}} {{* montant de l'amortissement *}}
{{:assign montant_amort="%f/%f/365*%d"|math:$ligne_immo.amount:$info_immo.duration:$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.amount:$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}}
{{* -------------------------------------------------------------------------------- *}} {{* -------------------------------------------------------------------------------- *}}
@ -241,14 +242,13 @@
<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="Libellé" 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"
name="debit_account" name="debit_account"
label="Compte de débit" label="Compte de débit"
required=true required=true
readonly=true
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"68*":$selected_year target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"68*":$selected_year
default=$debit_account default=$debit_account
}} }}
@ -257,14 +257,13 @@
name="credit_account" name="credit_account"
label="Compte d'amortissement (28xx)" label="Compte d'amortissement (28xx)"
required=true required=true
readonly=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
}} }}
<div id="donnees" class="hidden"> <div id="donnees" class="hidden">
{{:input type="text" name="montant_immo" default=$ligne_immo.amount}} {{:input type="text" name="montant_immo" default=$ligne_immo.montant}}
{{:input type="text" name="duree_amort" default=$info_immo.duration}} {{: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>
@ -296,8 +295,8 @@ function redisplayData(evt,
) )
{ {
setDateEnd(f_years_select, f_date, f_years_data); setDateEnd(f_years_select, f_date, f_years_data);
displayAmort(f_immo, f_duree, f_amort, f_years_data, f_years_select, f_montant, f_erreur);
setSelectorYear(['credit_account', 'debit_account'], f_years_select); setSelectorYear(['credit_account', 'debit_account'], f_years_select);
displayAmort(f_immo, f_duree, f_amort, f_years_data, f_years_select, f_montant, f_erreur);
} }
function redisplayAmort(evt, function redisplayAmort(evt,

View file

@ -1,6 +1,5 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Donnée d'une immobilisation",
"type": "object", "type": "object",
"properties": { "properties": {
"type": { "type": {
@ -15,20 +14,11 @@
"description": "durée de l'amortissement en années", "description": "durée de l'amortissement en années",
"type": "integer" "type": "integer"
}, },
"label" : {
"description" : "libellé de l'immobilisation si besoin",
"type" : ["string", "null"]
},
"amount" : { "amount" : {
"description": "montant de l'immobilisation si besoin", "description": "montant de l'immobilisation si besoin",
"type": ["integer", "null"] "type": ["integer", "null"]
}, },
"date_achat" : { "date" : {
"description" : "date d'achat de l'immobilisation si besoin",
"type" : ["string", "null"],
"format" : "date"
},
"date_mes" : {
"description" : "date de mise en service de l'immobilisation", "description" : "date de mise en service de l'immobilisation",
"type" : ["string", "null"], "type" : ["string", "null"],
"format" : "date" "format" : "date"
@ -36,11 +26,7 @@
"status" : { "status" : {
"type" : ["string", "null"], "type" : ["string", "null"],
"enum" : ["managed", "amortized", "archived", "ignored"] "enum" : ["managed", "amortized", "archived", "ignored"]
},
"created" : {
"description" : "vrai si immobilisation créée dans le module",
"type" : ["boolean", "null"]
} }
}, },
"required": ["type", "line", "duration", "status"] "required": ["type", "line", "duration", "date"]
} }

View file

@ -12,27 +12,25 @@ function toggleInputs(idcb, idfields) {
} }
} }
function toggleVisibility(id_check, fields) { function toggleVisibility(idcheck, fields) {
const elem = document.getElementById(id_check); const elem = document.getElementById(idcheck);
fields.forEach(function (id_field) { for (let id of fields) {
const field = document.getElementById(id_field); const field = document.getElementById(id);
if (elem.checked) { if (elem.checked) {
field.classList.remove('hidden'); field.setAttribute('class', '');
} else { } else {
field.classList.add('hidden'); field.setAttribute('class', 'hidden');
} }
}); }
} }
// fixer l'exercice des sélecteurs de compte // fixer l'exercice des sélecteurs de compte
function setAccountYear(button_names, id_year) { function setAccountYear(button_names, id_year) {
for (const name of button_names) { for (const name of button_names) {
const button = document.querySelector("button[data-name=" + name + "]"); const button = document.querySelector("button[data-name=" + name + "]");
if (button != null) { const b_value = button.value;
const b_value = button.value; const new_value = b_value.replace(/id_year=\d+/, 'id_year=' + id_year);
const new_value = b_value.replace(/id_year=\d+/, 'id_year=' + id_year); button.setAttribute('value', new_value);
button.setAttribute('value', new_value);
}
} }
} }
@ -134,9 +132,7 @@ function displayAmort(id_immo, id_duree, id_amort, id_years, id_exercices, id_mo
case_montant.innerText = montant_amort; case_montant.innerText = montant_amort;
} }
function setSelectorYear(button_names, f_years_selector) function setSelectorYear(button_names, f_years_selector) {
{
const selector = document.getElementById(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);
} }
@ -145,21 +141,19 @@ function setSelectorYear(button_names, f_years_selector)
// Associer au bouton « Enlever » de chaque ligne l'action de suppression de la ligne // Associer au bouton « Enlever » de chaque ligne l'action de suppression de la ligne
function initLine(row) { function initLine(row) {
let removeBtn = row.querySelector('button[name="remove_line"]'); var removeBtn = row.querySelector('button[name="remove_line"]');
if (removeBtn != null) { removeBtn.onclick = () => {
removeBtn.onclick = () => { let count = removeBtn.closest("table").querySelectorAll('tbody tr').length;
let count = removeBtn.closest("table").querySelectorAll('tbody tr').length; var min = removeBtn.getAttribute('min');
var min = removeBtn.getAttribute('min');
if (count <= min) { if (count <= min) {
alert("Il n'est pas possible d'avoir moins de " + min + " ligne(s)."); alert("Il n'est pas possible d'avoir moins de " + min + " ligne(s).");
return false; return false;
} }
row.parentNode.removeChild(row); row.parentNode.removeChild(row);
return true; return true;
}; };
}
} }
// Associer au bouton « Ajouter » de chaque table l'action d'ajouter une ligne // Associer au bouton « Ajouter » de chaque table l'action d'ajouter une ligne
@ -187,28 +181,6 @@ function addLine(button, codes) {
let lib = newNode.querySelector('.input-list span.label'); let lib = newNode.querySelector('.input-list span.label');
lib.innerText = ''; lib.innerText = '';
// si besoin, ajouter le bouton de suppression
let action_cell = newNode.querySelector('td.actions');
let removeBtn = newNode.querySelector('button[name="remove_line"]');
if (removeBtn == null) {
const attributs = {
"title" : "Enlever une ligne",
"min": "1",
"name": "remove_line",
"data-icon": "",
"type": "button",
"class": "icn-btn",
"value": "1",
"aria-label": "Enlever une ligne"
};
let new_button = document.createElement("button");
new_button.appendChild(document.createTextNode("Enlever"));
for (let attr in attributs) {
new_button.setAttribute(attr, attributs[attr]);
}
action_cell.appendChild(new_button);
}
// ajouter la nouvelle ligne // ajouter la nouvelle ligne
line.parentNode.appendChild(newNode); line.parentNode.appendChild(newNode);
initLine(newNode); initLine(newNode);

View file

@ -35,15 +35,17 @@ h2[class="aide"], h3[class="aide"] {
} }
.informations dl.describe { .informations dl.describe {
grid-template-columns : 25rem 1fr; grid-template-columns : 20rem 1fr;
} }
.informations dl.describe > dt { .informations dl.describe > dt {
flex: 0 0 15rem;
margin-right: 0; margin-right: 0;
white-space: nowrap; white-space: nowrap;
} }
.informations dl.describe > dd { .informations dl.describe > dd {
flex: 0 0 calc(100% - 20rem);
margin-right: 0; margin-right: 0;
} }
@ -74,19 +76,3 @@ table.list tbody tr.ignored:nth-child(even) {
font-style: italic; font-style: italic;
background: rgba(255, 255, 200, 0.5); background: rgba(255, 255, 200, 0.5);
} }
table.error {
background-color: #fcc;
}
table.error tr, table.error td, table.error thead td {
background-image : none;
background-color: #fcc;
}
span.input-list.avoirs label {
padding : 0.4rem 0.6rem;
}
aside.right {
float: right;
}

View file

@ -1,69 +0,0 @@
section.page *
{
padding: 0.1em;
margin-top: 0.1em;
}
section.page ul {
list-style: inside;
margin-left: 1.5em;
}
section.page ol {
list-style: decimal;
margin-left: 1.5em;
}
section.page h1 {
font-size: 2em;
}
section.page h2 {
font-size: 1.5em;
margin-top : 1.5rem;
margin-bottom : 0.5rem;
}
section.page h3 {
font-size: 1.2em;
margin-top : 1.5rem;
margin-bottom : 0.5rem;
}
section.page h4 {
font-size: 1em;
margin-top : 1.5rem;
margin-bottom : 0.5rem;
}
section.page figure {
margin-top : 0.5rem;
margin-bottom : 1rem;
}
section.page figcaption {
font-weight : bold;
}
section.page blockquote {
width: 75%;
margin-left: 2em;
margin-right: 2em;
font-family: Arial, Helvetica, sans-serif;
font-size: 1.1em;
}
section.page article header {
text-align: center;
margin: 1rem 0;
padding-bottom: 0.5rem;
border-bottom: 2px solid #999;
}
a:link {
color: #0033aa;
}
a:link:visited {
color: #6600aa;
}

View file

@ -1,5 +1,6 @@
{{* -*- brindille -*- *}} {{* -*- brindille -*- *}}
{{:admin_header title="Transfert d'immobilisation en cours" custom_css="./style.css" current="module_amortization"}}
{{:include file="_get_config.html" keep="module.config.prefixes"}} {{:include file="_get_config.html" keep="module.config.prefixes"}}
{{#years closed=false order="start_date" assign=years.}} {{#years closed=false order="start_date" assign=years.}}
@ -36,6 +37,7 @@
{{:assign trans_list=$trans_list|implode:","}} {{:assign trans_list=$trans_list|implode:","}}
{{:assign trans_list="("|cat:$trans_list|cat:")"}} {{:assign trans_list="("|cat:$trans_list|cat:")"}}
{{:assign condition=$condition|cat:" AND trans.id IN "|cat:$trans_list}} {{:assign condition=$condition|cat:" AND trans.id IN "|cat:$trans_list}}
{{:assign condition=$condition|cat:" AND NOT (trans.status & 16)"}}
{{#select {{#select
trans.id as trans_id, trans.id as trans_id,
@ -55,7 +57,6 @@
}} }}
{{:assign var="transactions.%s"|args:$trans_id {{:assign var="transactions.%s"|args:$trans_id
amount=$line_debit amount=$line_debit
line_label=$trans_label
date=$trans_date date=$trans_date
code=$account_code code=$account_code
label=$account_label label=$account_label
@ -75,12 +76,12 @@
{{/if}} {{/if}}
{{* vérifier que la date de mise en service est située dans l'exercice sélectionné *}} {{* 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}} {{:assign ts_date = $_POST.date_mes|parse_date|strtotime}}
{{:assign ok=false}} {{:assign ok=false}}
{{#foreach from=$years}} {{#foreach from=$years}}
{{if $id == $_POST.id_year}} {{if $id == $_POST.id_year}}
{{:assign selected_chart=$id_chart}} {{:assign selected_chart=$id_chart}}
{{if $start_date <= $ts_date && $ts_date <= $end_date}} {{if $start_date|strtotime <= $ts_date && $ts_date <= $end_date|strtotime}}
{{:assign ok=true}} {{:assign ok=true}}
{{:break}} {{:break}}
{{/if}} {{/if}}
@ -93,8 +94,11 @@
{{if ! $_POST.amortir}} {{if ! $_POST.amortir}}
{{* ne pas amortir *}} {{* ne pas amortir *}}
{{:assign duration=0}} {{:assign duration=0}}
{{:assign date_debut=$_POST.date_achat|parse_date}}
{{:assign status="ignored"}} {{:assign status="ignored"}}
{{else}} {{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 duration=$_POST.duree|intval}}
{{:assign status="managed"}} {{:assign status="managed"}}
{{/if}} {{/if}}
@ -106,7 +110,7 @@
account=$elem account=$elem
keep="account_code" keep="account_code"
}} }}
{{:assign debit_account=$account_code|keys|value:0}} {{:assign debit_account=$account_code|keys|key:0}}
{{:assign var="amount" from="_POST.credit_lines.%s"|args:$rang}} {{:assign var="amount" from="_POST.credit_lines.%s"|args:$rang}}
{{:assign var="label" from="_POST.line_labels.%s"|args:$rang}} {{:assign var="label" from="_POST.line_labels.%s"|args:$rang}}
{{:assign {{:assign
@ -123,7 +127,7 @@
account=$_POST.debit_account account=$_POST.debit_account
keep="account_code" keep="account_code"
}} }}
{{:assign credit_account=$account_code|keys|value:0}} {{:assign credit_account=$account_code|keys|key:0}}
{{:assign var="amount" from="_POST.debit_lines.%s"|args:0}} {{:assign var="amount" from="_POST.debit_lines.%s"|args:0}}
{{:assign count=$_POST.line_labels|count}} {{:assign count=$_POST.line_labels|count}}
{{:assign count="%d-1"|math:$count}} {{:assign count="%d-1"|math:$count}}
@ -154,7 +158,7 @@
{{/if}} {{/if}}
{{* écritures liées *}} {{* écritures liées *}}
{{:assign var="linked_transactions" value=$transactions|keys}} {{:assign var="linked_transactions" value=$_GET.trans|explode:","}}
{{* enregistrer l'écriture *}} {{* enregistrer l'écriture *}}
{{:api {{:api
@ -171,17 +175,16 @@
{{:assign lines_count=$lines|count}} {{:assign lines_count=$lines|count}}
{{:assign lines_count="%d-1"|math:$lines_count}} {{:assign lines_count="%d-1"|math:$lines_count}}
{{:assign var="immo_line_id" from="result.lines.%s.id"|args:$lines_count}} {{:assign var="immo_id" from="result.lines.%s.id"|args:$lines_count}}
{{* enregistrer les infos de l'immobilisation *}} {{* enregistrer les infos de l'immobilisation *}}
{{:save {{:save
key=""|uuid key=""|uuid
validate_schema="asset.schema.json" validate_schema="schema.json"
type="immo" type="immo"
line=$immo_line_id line=$immo_id
duration=$duration duration=$duration
date_mes=null date=$date_debut
status=$status status=$status
created=true
}} }}
{{if $_POST.amortir}} {{if $_POST.amortir}}
{{:assign type_immo="managed"}} {{:assign type_immo="managed"}}
@ -191,9 +194,9 @@
{{: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="Transfert d'immobilisation en cours" custom_css="./style.css" current="module_amortization"}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="_nav.html" current="unfinished" subcurrent="transfer"}} {{:include file="_nav.html" current="index" subcurrent="unfinished" subsubcurrent="transfer"}}
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
@ -255,17 +258,16 @@
<tr> <tr>
<td> <td>
{{:input {{:input
type="list" type="list"
name="credit_accounts[]" name="credit_accounts[]"
required=true required=true
readonly=true target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:$code:$selected_year
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:$code:$selected_year default=$current_account
default=$current_account
}} }}
</td> </td>
<td>{{:input name="credit_lines[]" type="text" class="money" size="8" default=$amount|money}}</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 name="debit_lines[]" type="text" class="money" size="8" disabled=true}}</td>
<td>{{:input type="text" name="line_labels[]" size="40" default=$line_label}}</td> <td>{{:input type="text" name="line_labels[]" size="40"}}</td>
<td> <td>
{{if $projects != null}} {{if $projects != null}}
{{:input type="select" name="id_project" options=$projects default_empty="— Aucun —"}} {{:input type="select" name="id_project" options=$projects default_empty="— Aucun —"}}
@ -273,7 +275,6 @@
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
<tr><td colspan="5"></td></tr>
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>

View file

@ -1,42 +0,0 @@
{{* -*- brindille -*- *}}
{{*
mise à niveau des documents selon version
*}}
{{* version 0.31 *}}
{{:assign tag="0.31"}}
{{:include file="_compare_version.tpl" nv1=$module_version nv2=$tag keep="comp"}}
{{:assign module_comp=$comp}}
{{:include file="_compare_version.tpl" nv1=$module.config.version nv2=$tag keep="comp"}}
{{:assign config_comp=$comp}}
{{if $module_comp >= 0 && $config_comp < 0}}
{{* $module_version >= '0.31' && $module.config.version < '0.31' *}}
{{:include file="_upgrade_to031.tpl"}}
<p class="block info">Mise à jour vers version {{$tag}} terminée</p>
{{/if}}
{{* version 0.33 *}}
{{:assign tag="0.33"}}
{{:include file="_compare_version.tpl" nv1=$module_version nv2=$tag keep="comp"}}
{{:assign module_comp=$comp}}
{{:include file="_compare_version.tpl" nv1=$module.config.version nv2=$tag keep="comp"}}
{{:assign config_comp=$comp}}
{{if $module_comp >= 0 && $config_comp < 0}}
{{* $module_version >= '0.33' && $module.config.version < '0.33' *}}
{{:include file="_upgrade_to033.tpl"}}
<p class="block info">Mise à jour vers version {{$tag}} terminée</p>
{{/if}}
{{* enregistrer le nouveau numéro de version dans la config du module *}}
{{:include file="_compare_version.tpl" nv1=$module_version nv2=$module.config.version keep="comp"}}
{{if $comp > 0}}
{{:save key="config" version=$module_version}}
<p class="block alert">Nouvelle version enregistrée : {{$module_version}}</p>
{{/if}}

View file

@ -3,49 +3,50 @@
{{* {{*
Enregistrer les écritures de sortie du bilan Enregistrer les écritures de sortie du bilan
paramètres : paramètres :
- immo_doc_id : id du doc associé à l'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_debut : date de début de la période d'amortissement complémentaire - date_debut : date de début de la période d'amortissement complémentaire
- exit_date : date de sortie de l'immobilisation - exit_date : date de sortie de l'immobilisation
- duree_amort : durée de l'amortiseement (optionnel)
- cession : montant de la cession (optionnel) - cession : montant de la cession (optionnel)
*}} *}}
{{* données de l'immobilisation *}} {{#select
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}} line.debit as montant,
{{if $message != null}} line.id_transaction,
{{:error message=$message}} line.id_account,
{{/if}} trans.date as date_achat,
trans.label,
acc.code,
id_project
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 = :immo_id;
:immo_id = $_GET.immo_id|intval
assign="ligne_immo"
}}
{{/select}}
{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{if $label_immo|strpos:$ligne_immo.line_label === false}} {{if $amount != null}}
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} {{:assign var="ligne_immo.montant" value=$amount}}
{{/if}} {{/if}}
{{/load}}
{{:assign date_achat=$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{if $info_immo.date_mes != null && $info_immo.date_mes != $date_achat}}
{{:assign date_mes=$info_immo.date_mes}}
{{/if}}
{{if $info_immo.amount != null}}
{{:assign var="ligne_immo.amount" value=$info_immo.amount}}
{{/if}}
{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
{{:assign var="ligne_immo.amount" value="%d-%d"|math:$ligne_immo.amount:$total_credits}}
{{:assign valeur_nette="%f-%f"|math:$ligne_immo.amount:$_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 *}}
{{:assign amort_except=0}} {{* amortissement exceptionnel jqà date fin amortissement *}} {{:assign amort_except=0}} {{* amortissement exceptionnel jqà date fin amortissement *}}
{{if $valeur_nette > 0}} {{if $valeur_nette > 0}}
{{:assign nbjours="1+(%d-%d)/(60*60*24)"|math:$_GET.exit_date:$_GET.date_debut}} {{:assign nbjours="1+(%d-%d)/(60*60*24)"|math:$_GET.exit_date:$_GET.date_debut}}
{{:assign annuite="%f/%f"|math:$ligne_immo.amount:$info_immo.duration}} {{:assign annuite="%f/%f"|math:$ligne_immo.montant:$_GET.duree_amort}}
{{:assign amort_comp="round(%f/365*%f, 0)"|math:$annuite:$nbjours}} {{:assign amort_comp="round(%f/365*%f, 0)"|math:$annuite:$nbjours}}
{{:assign amort_comp="min(%f, %f)"|math:$valeur_nette:$amort_comp}} {{:assign amort_comp="min(%f, %f)"|math:$valeur_nette:$amort_comp}}
{{if $_GET.cession == null}} {{if $_GET.cession == null}}
{{:assign amort_except="%f-%f-%f"|math:$ligne_immo.amount:$_GET.amort_amount:$amort_comp}} {{:assign amort_except="%f-%f-%f"|math:$ligne_immo.montant:$_GET.amort_amount:$amort_comp}}
{{/if}} {{/if}}
{{/if}} {{/if}}
@ -55,12 +56,19 @@
{{:assign montant_cession="%f*100"|math:$_GET.cession}} {{:assign montant_cession="%f*100"|math:$_GET.cession}}
{{/if}} {{/if}}
{{* numéros de comptes ; voir info.org *}} {{* TODO : faut-il forcer les 3 sélecteurs de compte d'amortissement à avoir toujours la même valeur ? *}}
{{:assign vnc_code="652"}}
{{:assign cession_code="757"}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{*
{{if $_POST.amort_comp_account != null}
{{:assign account=$_POST.amort_comp_account}}
{{elseif $_POST.amort_except_account != null}
{{:assign account=$_POST.amort_except_account}}
{{elseif $_POST.amort_sortie_account != null}
{{:assign account=$_POST.amort_sortie_account}}
{{/if}}
*}}
{{:assign account=$_POST.amort_sortie_account}} {{:assign account=$_POST.amort_sortie_account}}
{{:include {{:include
@ -68,7 +76,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 *}}
@ -79,9 +87,9 @@
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:$label_immo}} {{:assign libelle="Amortissement complémentaire "|cat:$ligne_immo.label}}
{{:assign {{:assign
var="lines." var="lines."
debit="%f/100"|math:$amort_comp debit="%f/100"|math:$amort_comp
@ -105,8 +113,8 @@
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:$label_immo}} {{:assign libelle="Amortissement exceptionnel "|cat:$ligne_immo.label}}
{{:assign {{:assign
var="lines." var="lines."
debit="%f/100"|math:$amort_except debit="%f/100"|math:$amort_except
@ -132,23 +140,10 @@
id_year=$_GET.year id_year=$_GET.year
type="advanced" type="advanced"
date=$_GET.exit_date date=$_GET.exit_date
label="Amortissement final "|cat:$label_immo label="Amortissement final "|cat:$ligne_immo.label
lines=$lines lines=$lines
linked_transactions=$ligne_immo.trans_id linked_transactions=$ligne_immo.id_transaction
}} }}
{{* liaisons lignes d'amortissement *}}
{{#foreach from=$result.lines item="line"}}
{{if $line.account_code == $amort_account_code}}
{{:save
key=""|uuid
type="amort_link"
immo_doc_id=$info_immo.id
amort_line_id=$line.id
created=true
}}
{{/if}}
{{/foreach}}
{{/if}} {{/if}}
{{* écriture de sortie du bilan *}} {{* écriture de sortie du bilan *}}
@ -158,19 +153,19 @@
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:$label_immo}} {{:assign libelle="Sortie du bilan de "|cat:$ligne_immo.label}}
{{:assign {{:assign
var="lines." var="lines."
account=$immo_account_code account=$immo_account_code
credit="%f/100"|math:$ligne_immo.amount credit="%f/100"|math:$ligne_immo.montant
id_project=$ligne_immo.id_project id_project=$ligne_immo.id_project
label=$libelle label=$libelle
}} }}
{{:assign {{:assign
var="lines." var="lines."
account=$amort_account_code account=$amort_account_code
debit="(%f-%f)/100"|math:$ligne_immo.amount:$valeur_nette debit="(%f-%f)/100"|math:$ligne_immo.montant:$valeur_nette
id_project=$ligne_immo.id_project id_project=$ligne_immo.id_project
label=$libelle label=$libelle
}} }}
@ -180,7 +175,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
@ -200,38 +195,24 @@
date=$_GET.exit_date date=$_GET.exit_date
label=$libelle label=$libelle
lines=$lines lines=$lines
linked_transactions=$ligne_immo.trans_id linked_transactions=$ligne_immo.id_transaction
}} }}
{{* liaison écriture de sortie *}}
{{#foreach from=$result.lines item="line"}}
{{if $line.account_code == $immo_account_code}}
{{:save
key=""|uuid
type="exit_link"
immo_doc_id=$info_immo.id
exit_line_id=$line.id
created=true
}}
{{:break}}
{{/if}}
{{/foreach}}
{{if $montant_cession > 0}} {{if $montant_cession > 0}}
{{* Cession de l'immobilisation *}} {{* Cession de l'immobilisation *}}
{{:assign libelle="Cession "|cat:$label_immo}} {{:assign libelle="Produit cession "|cat:$ligne_immo.label}}
{{:include {{:include
file="_get_codes.html" file="_get_codes.html"
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"
@ -245,40 +226,36 @@
debit=$creance_account debit=$creance_account
credit=$cession_account credit=$cession_account
id_project=$ligne_immo.id_project id_project=$ligne_immo.id_project
linked_transactions=$ligne_immo.trans_id linked_transactions=$ligne_immo.id_transaction
}} }}
{{/if}} {{/if}}
{{* liaison écriture de cession *}} {{if $info_immo != null}}
{{#foreach from=$result.lines item="line"}} {{* mettre à jour l'état de l'immobilisation *}}
{{if $line.account_code == $cession_code}} {{:save
{{:save key=$info_immo.key
key=""|uuid status="archived"
type="cession_link" }}
immo_doc_id=$info_immo.id {{else}}
cession_line_id=$line.id {{:save
created=true key=""|uuid
}} validate_schema="schema.json"
{{:break}} type="immo"
{{/if}} line=$_GET.immo_id|intval
{{/foreach}} duration=$_GET.duree_amort|intval
date=$_GET.date_mes|date:"Y-m-d"
status="archived"
}}
{{/if}}
{{* mettre à jour l'état de l'immobilisation *}}
{{:save
key=$info_immo.key
status="archived"
}}
{{:redirect to="index.html?type_immo=archived"}} {{:redirect to="index.html?type_immo=archived"}}
{{/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_amortization"}}
{{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{if $valeur_nette > 0}} {{:include file="_nav.html" current="index" subcurrent="balance_exit"}}
{{:assign type_immo="managed"}}
{{else}}
{{:assign type_immo="amortized"}}
{{/if}}
{{:include file="_nav.html" current="%s"|args:$type_immo subcurrent="balance_exit"}}
{{/if}} {{/if}}
{{* {{*
@ -288,15 +265,22 @@
{{: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"
}} }}
{{*
Utilisation des « anciens » numéros de comptes because conflit
avec les nouveaux numéros ; 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:","}}
@ -336,22 +320,24 @@
{{/foreach}} {{/foreach}}
{{:assign patterns=$pattern_array|implode:"|"}} {{:assign patterns=$pattern_array|implode:"|"}}
<h3>Sortir l'immobilisation « {{$label_immo}} » du bilan</h3> <h3>Sortir l'immobilisation « {{$ligne_immo.label}} » du bilan</h3>
<form method="post" action=""> <form method="post" action="">
<div class="informations"> <div class="informations">
<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.amount|money_currency_html:false|raw}}</dd> <dd class="money">{{$ligne_immo.montant|money_currency_html:false|raw}}</dd>
<dt>Date d'acquisition</dt> <dt>Date d'acquisition</dt>
<dd >{{$date_achat|date_short}}</dd> <dd >{{$ligne_immo.date_achat|date_short}}</dd>
{{if $date_mes != null}} {{if $_GET.date_mes != $ligne_immo.date_achat|strtotime}}
<dt>Date de mise en service</dt> <dt>Date de mise en service</dt>
<dd>{{$date_mes|date_short}}</dd> <dd>{{$_GET.date_mes|date:"d/m/Y"}}</dd>
{{/if}}
{{if $_GET.duree_amort != null}}
<dt>Durée de l'amortissement</dt>
<dd class="num">{{$_GET.duree_amort}} ans</dd>
{{/if}} {{/if}}
<dt>Durée de l'amortissement</dt>
<dd class="num">{{$info_immo.duration}} ans</dd>
<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_html:false|raw}} <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>
@ -403,7 +389,6 @@
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&id_chart=%s"|args:"68*":$chart_id
readonly=true
default=$comp_account default=$comp_account
}} }}
</td> </td>
@ -416,7 +401,6 @@
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&id_chart=%s"|args:"28*":$chart_id
readonly=true
default=$amort_account default=$amort_account
}} }}
</td> </td>
@ -449,7 +433,6 @@
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&id_chart=%s"|args:"687*":$chart_id
readonly=true
default=$except_account default=$except_account
}} }}
</td> </td>
@ -462,7 +445,6 @@
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&id_chart=%s"|args:"28*":$chart_id
readonly=true
default=$amort_account default=$amort_account
}} }}
</td> </td>
@ -489,12 +471,11 @@
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&id_chart=%s"|args:"28*":$chart_id
readonly=true
default=$amort_account default=$amort_account
}} }}
</td> </td>
{{if $montant_cession == 0}} {{if $montant_cession == 0}}
{{:assign montant=$ligne_immo.amount}} {{:assign montant=$ligne_immo.montant}}
{{else}} {{else}}
{{:assign montant="%f+%f"|math:$_GET.amort_amount:$amort_comp}} {{:assign montant="%f+%f"|math:$_GET.amort_amount:$amort_comp}}
{{/if}} {{/if}}
@ -508,7 +489,6 @@
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*&id_chart=%s"|args:$vnc_code:$chart_id
readonly=true
default=$vnc_account default=$vnc_account
}} }}
</td> </td>
@ -522,12 +502,11 @@
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&id_chart=%s"|args:$patterns:$chart_id
readonly=true
default=$immo_account default=$immo_account
}} }}
</td> </td>
<td></td> <td></td>
<td>{{$ligne_immo.amount|money_currency_html:false|raw}}</td> <td>{{$ligne_immo.montant|money_currency_html:false|raw}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -549,7 +528,6 @@
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&id_chart=%s"|args:"462*":$chart_id
readonly=true
default=$creance_account default=$creance_account
}} }}
</td> </td>
@ -562,7 +540,6 @@
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*&id_chart=%s"|args:$cession_code:$chart_id
readonly=true
default=$cession_account default=$cession_account
}} }}
</td> </td>