Compare commits

..

10 commits

Author SHA1 Message Date
Jean-Christophe Engel
50ea449dad Correction interaction sélecteurs inhibés 2026-06-11 14:05:36 +02:00
Jean-Christophe Engel
6befac8578 modify_info : ne pas permettre de rendre l'immo non amortissable 2026-06-11 10:08:23 +02:00
Jean-Christophe Engel
65112720ba Supprimer les documents sans écriture associée 2026-06-11 09:44:45 +02:00
Jean-Christophe Engel
6495737428 Réorganisation présentation page amortissements 2026-06-10 20:51:53 +02:00
Jean-Christophe Engel
54603e9142 Séparation amortissements à rattacher en deux onglets (compte, tous) 2026-06-10 14:24:49 +02:00
Jean-Christophe Engel
33c65388f9 Ajout info création nouvel amortissement 2026-06-10 11:16:01 +02:00
Jean-Christophe Engel
2acb6304b6 Ne pas créer d'immobilisation non amortissable 2026-06-10 10:58:33 +02:00
Jean-Christophe Engel
d6868c6813 Inhibition sélecteurs comptes 2026-06-10 10:47:46 +02:00
Jean-Christophe Engel
420b91265c Ajout info création nouvelle immobilisation 2026-06-10 10:47:12 +02:00
Jean-Christophe Engel
0cf2a3f7e9 Mutualisation liaison écritures 2026-06-09 10:44:14 +02:00
24 changed files with 314 additions and 502 deletions

37
_common_attach.html Normal file
View file

@ -0,0 +1,37 @@
{{* -*- 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

@ -5,6 +5,7 @@
@param immo_doc_id : id du doc associé à l'immobilisation @param immo_doc_id : id du doc associé à l'immobilisation
@result linked_amort : lignes d'amortissement liées à la ligne d'immobilisation @result linked_amort : lignes d'amortissement liées à la ligne d'immobilisation
@result total_amort : montant total des amortissements de l'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}} {{:assign total_amort=0}}
@ -33,6 +34,10 @@
assign="amort_line" assign="amort_line"
}} }}
{{:assign var="amort_line.amount" value=$amort_info.amount|or:$amort_line.amount}} {{: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 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}} {{:assign total_amort="%d+%d"|math:$total_amort:$amort_line.amount}}
{{/select}} {{/select}}

View file

@ -18,7 +18,7 @@
FROM acc_transactions_lines AS line FROM acc_transactions_lines AS line
INNER JOIN acc_accounts AS account ON account.id = line.id_account INNER JOIN acc_accounts AS account ON account.id = line.id_account
INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction
WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16) AND !filter_condition WHERE credit > 0 AND (NOT trans.status & 16) AND !filter_condition
ORDER BY trans.date, trans.label; ORDER BY trans.date, trans.label;
!filter_condition=$filter_condition !filter_condition=$filter_condition
assign="amort_line" assign="amort_line"

View file

@ -68,6 +68,9 @@
!table=$module.table !table=$module.table
!condition=$condition !condition=$condition
}} }}
{{if $status != "managed" && $status != "amortized"}}
{{:continue}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$immo_trans_id}} {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$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 montant_immo=$doc_amount|or:$debit}}
@ -93,9 +96,8 @@
{{/if}} {{/if}}
{{/load}} {{/load}}
{{* Immobilisation soldée ? *}}
{{* TODO ¿ marquer archivée ? *}}
{{if $montant_immo == 0}} {{if $montant_immo == 0}}
{{* Immobilisation soldée *}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
@ -121,17 +123,9 @@
<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">
{{*if $amort_amount == 0*}}
{{:linkbutton
label="Détails"
href="details_immo.html?immo_doc_id=%s"|args:$immo_doc_id
shape="eye"
}}
{{* target="_dialog"*}}
{{*/if*}}
{{:linkbutton {{:linkbutton
label="Amortissements" label="Voir"
href="amortization.html?immo_doc_id=%s&type_immo=%s"|args:$immo_doc_id:$type_immo shape="table" href="amortization.html?immo_doc_id=%s&type_immo=%s"|args:$immo_doc_id:$type_immo shape="eye"
}} }}
</td> </td>
</tr> </tr>

28
_remove_orphan_docs.tpl Normal file
View file

@ -0,0 +1,28 @@
{{* -*- brindille -*- *}}
{{* 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}}
{{#select
info.id
FROM !table AS info
LEFT JOIN acc_transactions_lines as line ON !join_field = line.id
WHERE !type_cond AND line.id IS NULL
;
!table=$module.table
!type_cond = $type_cond
!join_field = $join_field
}}
{{:delete id=$id}}
{{/select}}
{{/foreach}}

View file

@ -93,12 +93,7 @@
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{if $status != "unfinished" && ! $_POST.amortir}} {{if $status != "unfinished"}}
{{* 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}}
@ -111,7 +106,7 @@
{{if $_POST.date_mes == null || $_POST.date_mes == $_POST.date_achat}} {{if $_POST.date_mes == null || $_POST.date_mes == $_POST.date_achat}}
{{:assign date_mes=null}} {{:assign date_mes=null}}
{{else}} {{else}}
{{:assign date_mes=$_POST.date_mes|date_short}} {{:assign date_mes=$_POST.date_mes|parse_date}}
{{/if}} {{/if}}
{{/if}} {{/if}}
@ -142,18 +137,19 @@
{{* enregistrer les infos de l'immobilisation *}} {{* enregistrer les infos de l'immobilisation *}}
{{:save {{:save
key=$key key=$key
validate_schema="schema.json" validate_schema="asset.schema.json"
type="immo" type="immo"
line=$immo_line_id line=$immo_line_id
duration=$duration duration=$duration
date_mes=$date_mes date_mes=$date_mes
status=$status status=$status
created=true
}} }}
{{/if}} {{/if}}
{{if $status == "unfinished"}} {{if $status == "unfinished"}}
{{:assign type_immo="unfinished"}} {{:assign type_immo="unfinished"}}
{{elseif $_POST.amortir}} {{elseif $status == "managed"}}
{{:assign type_immo="managed"}} {{:assign type_immo="managed"}}
{{else}} {{else}}
{{:assign type_immo="other"}} {{:assign type_immo="other"}}
@ -206,7 +202,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?types=%s&id_year=%d"|args:"1|2|3|4":$selected_year target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"512*|530*|404*":$selected_year
}} }}
{{:input {{:input
type="list" type="list"
@ -226,7 +222,6 @@
<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" help="C'est la date de première utilisation ; à renseigner uniquement si différente de la date d'acquisition"}} {{:input type="date" name="date_mes" label="Date de mise en service" help="C'est la date de première utilisation ; à renseigner uniquement si différente de la date d'acquisition"}}
@ -248,13 +243,7 @@ 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', iddiv = 'div_amort')
{
toggleVisibility(idcheck, document.querySelectorAll('#' + iddiv));
}
(function () { (function () {
document.getElementById('f_id_year').onchange = changeYear; document.getElementById('f_id_year').onchange = changeYear;
document.getElementById('f_amortir_1').onclick = changeVisibility;
})(); })();
</script> </script>

View file

@ -56,7 +56,7 @@
{{* immobilisation sortie du bilan *}} {{* immobilisation sortie du bilan *}}
{{:save {{:save
key=""|uuid key=""|uuid
validate_schema="schema.json" validate_schema="asset.schema.json"
type="immo" type="immo"
line=$_GET.immo_line_id|intval line=$_GET.immo_line_id|intval
duration=0 duration=0
@ -129,7 +129,7 @@
{{/if}} {{/if}}
{{:save {{:save
key=$key key=$key
validate_schema="schema.json" validate_schema="asset.schema.json"
type="immo" type="immo"
line=$_GET.immo_line_id|intval line=$_GET.immo_line_id|intval
duration=$duration duration=$duration

View file

@ -38,12 +38,14 @@
{{/if}} {{/if}}
{{* lister les amortissements liés à l'immobilisation *}} {{* 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"}} {{: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}} {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$total_amort}}
{{if $valeur_residuelle > 0}} {{if $valeur_residuelle > 0}}
{{* lister les amortissements non attachés à une immo *}} {{* lister les amortissements non attachés à une immo *}}
{{:include file="./_get_free_amort.html" filter_condition="1" keep="free_amort_lines"}} {{:assign account_filter="28%"|quote_sql}}
{{:assign filter_condition="account.code LIKE "|cat:$account_filter}}
{{:include file="./_get_free_amort.html" filter_condition=$filter_condition keep="free_amort_lines"}}
{{/if}} {{/if}}
{{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortization"}} {{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortization"}}
@ -79,6 +81,8 @@
{{:assign msg="Détachement avoir affectué"}} {{: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}}
@ -108,48 +112,16 @@
</fieldset> </fieldset>
</form> </form>
<nav style="margin-bottom: 1em;"> <h3 class="ruler">Immobilisation</h3>
<aside> {{* class="right">*}} <p class="actions-center">
{{if $free_amort_lines}} {{if $total_amort == 0}}
{{:linkbutton {{:linkbutton label="Modifier les paramètres" href="modify_infos.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="edit" target="_dialog"}}
label="Attacher un amortissement" {{if ! $info_immo.created}}
title="Attacher un amortissement existant" {{:linkbutton label="Supprimer les paramètres" href="delete_infos.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="delete" target="_dialog"}}
href="other_amortizations.html?immo_doc_id=%s"|args:$_GET.immo_doc_id {{/if}}
shape="link"
target="_dialog"}}
{{/if}} {{/if}}
{{:linkbutton </p>
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"
}}
</aside>
</nav>
{{if $linked_immos != null}}
<aside class="right">
<table class="list">
<caption>Écritures d'avoir liées</caption>
<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.label}}</td>
<td>{{$line.date|date_short}}</td>
<td class="money">{{"%f"|math:$line.amount|money_currency_html:false|raw}}</td>
<td>
{{if $total_amort == 0}}
{{:linkbutton label="Détacher" href="detach_credit.html?immo_doc_id=%s&credit_line_id=%s"|args:$_GET.immo_doc_id:$line.credit_line_id shape="minus"}}
{{/if}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
</aside>
{{/if}}
<div class="informations"> <div class="informations">
<dl class="describe"> <dl class="describe">
@ -184,7 +156,24 @@
</dl> </dl>
</div> </div>
<h3 class="ruler">Amortissements enregistrés</h3> <h3 class="ruler">Amortissements</h3>
<p class="actions-center">
{{if $free_amort_lines && ! $created_amort}}
{{:linkbutton
label="Attacher un amortissement"
title="Attacher un amortissement existant"
href="other_amortizations.html?immo_doc_id=%s&filter=true"|args:$_GET.immo_doc_id
shape="link"
target="_dialog"}}
{{/if}}
{{:linkbutton
label="Enregistrer un amortissement"
title="Enregistrer un nouvel amortissement"
href="save_amort.html?immo_doc_id=%s"|args:$_GET.immo_doc_id target="_dialog"
shape="plus"
}}
</p>
{{if $linked_amort != null}} {{if $linked_amort != null}}
<section class="amortissement"> <section class="amortissement">
<table class="list"> <table class="list">
@ -220,7 +209,9 @@
<td><a href="{{$compte_url}}">{{$line.account_code}}</a></td> <td><a href="{{$compte_url}}">{{$line.account_code}}</a></td>
<td>{{$line.account_label}}</td> <td>{{$line.account_label}}</td>
<td> <td>
{{:linkbutton label="Détacher" href="detach_amort.html?immo_doc_id=%s&amort_line_id=%s"|args:$_GET.immo_doc_id:$line.line_id shape="minus"}} {{if ! $created_amort}}
{{:linkbutton label="Détacher" href="detach_amort.html?immo_doc_id=%s&amort_line_id=%s"|args:$_GET.immo_doc_id:$line.line_id shape="minus"}}
{{/if}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
@ -229,7 +220,7 @@
</section> </section>
{{/if}} {{/if}}
{{if $free_amort_lines}} {{if $free_amort_lines && ! $created_amort}}
<p class="block alert"> <p class="block alert">
Il y a des écritures d'amortissement qui ne sont pas attachées à une immobilisation ! <br /> 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. Utilisez le bouton « Attacher un amortissement » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
@ -239,5 +230,41 @@
{{if $linked_amort == null}} {{if $linked_amort == null}}
<p class="block alert">Aucun amortissement enregistré pour cette immobilisation ; utilisez le bouton « Enregistrer un amortissement » pour enregistrer un nouvel amortissement</p> <p class="block alert">Aucun amortissement enregistré pour cette immobilisation ; utilisez le bouton « Enregistrer un amortissement » pour enregistrer un nouvel amortissement</p>
{{/if}} {{/if}}
<h3 class="ruler">Avoirs</h3>
<p class="actions-center">
{{if $total_amort == 0}}
{{:linkbutton label="Attacher une écriture d'avoir" href="link_immo.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="link" target="_dialog"}}
{{/if}}
</p>
{{if $linked_immos != null}}
<table class="list">
<thead>
<th class="num"></th>
<th>Date</th>
<th>Libellé</th>
<th class="nombre">Montant</th>
<th class="actions"></th>
</thead>
<tbody>
{{#foreach from=$linked_immos item="line"}}
{{:assign url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}}
<tr>
<td class="num"><a href="{{$url}}">#{{$line.trans_id}}</a></td>
<td>{{$line.date|date_short}}</td>
<td>{{$line.label}}</td>
<td class="money">{{"%f"|math:$line.amount|money_currency_html:false|raw}}</td>
<td>
{{if $total_amort == 0}}
{{:linkbutton label="Détacher" href="detach_credit.html?immo_doc_id=%s&credit_line_id=%s"|args:$_GET.immo_doc_id:$line.credit_line_id shape="minus"}}
{{/if}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
{{/if}}
{{:form_errors}} {{:form_errors}}
{{:admin_footer}} {{:admin_footer}}

View file

@ -1,5 +1,6 @@
{ {
"$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": {
@ -35,6 +36,10 @@
"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", "status"]

View file

@ -93,28 +93,8 @@
{{:error message="Le montant de l'amortissement (%s) dépasse la valeur résiduelle de l'immobilisation (%s)"|args:$ma:$vnc}} {{:error message="Le montant de l'amortissement (%s) dépasse la valeur résiduelle de l'immobilisation (%s)"|args:$ma:$vnc}}
{{/if}} {{/if}}
{{* chercher les liaisons de l'écriture d'immobilisation *}} {{* Lier l'écriture d'amortissement à l'écriture d'immobilisation *}}
{{#select {{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$amort_line.trans_id}}
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=$amort_line.trans_id}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$ligne_immo.trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}
{{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}} {{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}}
{{* TODO voir si nécessaire ? *}} {{* TODO voir si nécessaire ? *}}
@ -134,7 +114,7 @@
}} }}
{{/load}} {{/load}}
{{* immo soldée ? *}} {{* À VÉRIFIER immo soldée ? *}}
{{if $total_amort == $montant_immo}} {{if $total_amort == $montant_immo}}
{{:assign status="amortized"}} {{:assign status="amortized"}}
{{:save {{:save

View file

@ -20,35 +20,13 @@
WHERE id = :line_id; WHERE id = :line_id;
:line_id = $_GET.cession_line_id|intval :line_id = $_GET.cession_line_id|intval
}} }}
{{:assign rebut_id=$id_transaction}} {{:assign cession_id=$id_transaction}}
{{else}} {{else}}
{{:error message="Impossible de trouver l'écriture de cession de l'immobilisation"}} {{:error message="Impossible de trouver l'écriture de cession de l'immobilisation"}}
{{/select}} {{/select}}
{{* chercher les liaisons de l'écriture d'immobilisation *}} {{* Lier l'écriture de cession à l'écriture d'immobilisation *}}
{{#select {{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$cession_id}}
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=$rebut_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
}}
{{* enregistrer la liaison de l'écriture de cession *}} {{* enregistrer la liaison de l'écriture de cession *}}
{{:save {{:save

View file

@ -79,30 +79,8 @@
{{/if}} {{/if}}
{{/if}} {{/if}}
{{* chercher les liaisons de l'écriture d'immobilisation *}} {{* Lier l'écriture de crédit à l'écriture d'immobilisation *}}
{{#select {{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$credit_line.trans_id}}
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=$credit_line.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
}}
{{* {{*
TODO ? vérifier le succès avant d'enregistrer le doc ? TODO ? vérifier le succès avant d'enregistrer le doc ?
@ -117,18 +95,19 @@
amount=$saved_credit amount=$saved_credit
}} }}
{{*
{{if $montant_credit == $solde_immo}} {{if $montant_credit == $solde_immo}}
{{:save {{:save
id=$_GET.immo_doc_id id=$_GET.immo_doc_id
status="archived" status="archived"
}} }}
{{/if}} {{/if}}
*}}
{{if $_GET.from == "exit"}} {{if $_GET.from == "exit"}}
{{:redirect force="exit_step1.html?immo_doc_id=%s&ok=1&msg=attach_avoir"|args:$_GET.immo_doc_id}} {{:redirect force="exit_step1.html?immo_doc_id=%s&ok=1&msg=attach_avoir"|args:$_GET.immo_doc_id}}
{{else}} {{else}}
{{:redirect force="details_immo.html?immo_doc_id=%s&ok=1&msg=attach_credit"|args:$_GET.immo_doc_id}} {{:redirect force="amortization.html?immo_doc_id=%s&ok=1&msg=attach_credit"|args:$_GET.immo_doc_id}}
{{*:redirect force="amortization.html?immo_doc_id=%s&ok=1&msg=attach_avoir"|args:$_GET.immo_doc_id*}}
{{/if}} {{/if}}
{{/form}} {{/form}}

View file

@ -25,30 +25,8 @@
{{:error message="Impossible de trouver l'écriture de sortie d'immobilisation"}} {{:error message="Impossible de trouver l'écriture de sortie d'immobilisation"}}
{{/select}} {{/select}}
{{* chercher les liaisons de l'écriture d'immobilisation *}} {{* Lier l'écriture de sortie à l'écriture d'immobilisation *}}
{{#select {{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$rebut_id}}
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=$rebut_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
}}
{{* enregistrer la liaison de l'écriture de sortie *}} {{* enregistrer la liaison de l'écriture de sortie *}}
{{:save {{:save

View file

@ -18,15 +18,8 @@
{{:delete id=$id}} {{:delete id=$id}}
{{/load}} {{/load}}
{{* TODO : À VÉRIFIER *}}
{{:save
id=$_GET.immo_doc_id|intval
status="managed"
}}
{{if $_GET.from == "exit"}} {{if $_GET.from == "exit"}}
{{:redirect force="exit_step1.html?immo_doc_id=%s&ok=1&msg=detach_avoir"|args:$_GET.immo_doc_id}} {{:redirect force="exit_step1.html?immo_doc_id=%s&ok=1&msg=detach_avoir"|args:$_GET.immo_doc_id}}
{{else}} {{else}}
{{:redirect force="details_immo.html?immo_doc_id=%s&ok=1&msg=detach&"|args:$_GET.immo_doc_id}} {{:redirect force="amortization.html?immo_doc_id=%s&ok=1&msg=detach_avoir"|args:$_GET.immo_doc_id}}
{{*:redirect force="amortization.html?immo_doc_id=%s&ok=1&msg=detach_avoir"|args:$_GET.immo_doc_id*}}
{{/if}} {{/if}}

View file

@ -1,145 +0,0 @@
{{* -*- brindille -*- *}}
{{*
Afficher les détails d'une immmo
- permettre l'association d'une immo au crédit du compte de l'immo
- permettre de modifier les paramètres de l'immo
@param immo_doc_id : numéro du doc 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 var="info_immo.amount" value=$info_immo.amount|or:$ligne_immo.amount}}
{{:assign var="info_immo.date_achat" value=$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign var="info_immo.date_mes" value=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
{{:assign var="info_immo.label" value=$info_immo.label|or:$ligne_immo.trans_label}}
{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $info_immo.label}}
{{:assign var="info_immo.label" value=$info_immo.label|cat:" — "|cat:$ligne_immo.line_label}}
{{/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:$info_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="total_amort"}}
{{:admin_header title="Détails de l'immobilisation" custom_css="./style.css" current="module_amortization"}}
{{if ! $dialog}}
{{:assign subsubcurrent=null}}
{{if $total_amort == 0}}
{{:assign subsubcurrent="credit"}}
{{/if}}
{{:include file="_nav.html" current="index" subcurrent="details" subsubcurrent=$subsubcurrent}}
{{/if}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
{{*
<nav class="tabs">
<aside>
{{:linkbutton label="Rattacher une écriture d'avoir" href="link_immo.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="link" target="_dialog"}}
</aside>
<nav style="margin-bottom: 1em;">
{{:linkbutton shape="left" label="Retour à la liste des immobilisations" href="index.html}}
{{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"}}
{{:linkbutton label="Supprimer les paramètres" href="delete_infos.html?immo_doc_id=%s"|args:$_GET.immo_doc_id shape="delete" target="_dialog"}}
{{/if}}
</nav>
</nav>
*}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach_amort"}}
{{:assign msg="Écriture d'amortissement attachée"}}
{{elseif $_GET.msg|match:"attach_credit"}}
{{:assign msg="Écriture au crédit attachée"}}
{{elseif $_GET.msg|match:"info"}}
{{:assign msg="Données de l'immobilisation enregistrées"}}
{{elseif $_GET.msg|match:"detach"}}
{{:assign msg="Écriture au crédit détachée"}}
{{else}}
{{:assign msg="Opération effectuée avec succès"}}
{{/if}}
<p class="block confirm">{{$msg}}</p>
{{elseif $_GET.err}}
{{:assign msg="L'opération a échoué"}}
<p class="block error">{{$msg}}</p>
{{/if}}
<h3 class="ruler">
Immobilisation
<span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span>
{{$info_immo.label}}
</h3>
{{if $linked_immos != null}}
<aside class="right">
<table class="list">
<caption>Écritures d'avoir liées</caption>
<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.label}}</td>
<td>{{$line.date|date_short}}</td>
<td class="money">{{"%f"|math:$line.amount|money_currency_html:false|raw}}</td>
<td>
{{if $total_amort == 0}}
{{:linkbutton label="Détacher" href="detach_credit.html?immo_doc_id=%s&credit_line_id=%s"|args:$_GET.immo_doc_id:$line.credit_line_id shape="minus"}}
{{/if}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
</aside>
{{/if}}
<div class="informations">
<dl class="describe">
{{*
<dt>Immobilisation</dt>
<dd><span class="num"><a href="{{$trans_url}}">#{{$ligne_immo.trans_id}}</a></span><span class="label"> {{$info_immo.label}}</span></dd>
*}}
<dt>Compte d'immobilisation</dt>
<dd>{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}</dd>
<dt>Date d'acquisition</dt>
<dd>{{$info_immo.date_achat|date_short}}</dd>
{{if $info_immo.date_mes != null && $info_immo.date_mes != $info_immo.date_achat}}
<dt>Date de mise en service</dt>
<dd>{{$info_immo.date_mes|date_short}}</dd>
{{/if}}
<dt>Durée d'amortissement</dt>
<dd>{{$info_immo.duration}} ans</dd>
<dt>Montant de l'immobilisation</dt>
<dd class="money">{{"%f"|math:$info_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>Écritures d'avoir</dt>
<dd>
{{#foreach from=$linked_immos item="line"}}
{{:assign url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.id}}
<span class="num"><a href="{{$url}}">#{{$line.id}}</a></span>
{{/foreach}}
</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-%d"|math:$info_immo.amount:$total_credits:$total_amort|money_currency_html:false|raw}}</dd>
{{/if}}
</dl>
</div>

View file

@ -30,7 +30,7 @@
{{:assign status="ignored"}} {{:assign status="ignored"}}
{{:save {{:save
key=""|uuid key=""|uuid
validate_schema="schema.json" validate_schema="asset.schema.json"
type="immo" type="immo"
line=$_GET.immo_line_id|intval line=$_GET.immo_line_id|intval
duration=$duration duration=$duration

View file

@ -19,7 +19,7 @@
{{: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" subcurrent="unfinished"}}
{{/if}} {{/if}}
{{:include file="_nav.html" current="index" subcurrent="%s"|args:$type_immo}} {{:include file="_nav.html" current="index" subcurrent=$type_immo}}
{{if $_GET.ok}} {{if $_GET.ok}}
{{if $_GET.msg|match:"immobilisation"}} {{if $_GET.msg|match:"immobilisation"}}
@ -34,21 +34,8 @@
<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 *}}
{{* supprimer les documents sans écriture associée *}} {{:include file="_remove_orphan_docs.tpl"}}
{{#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}}
{{* chercher des immos antérieures à la date de début du 1er exercice *}}
{{*:include file="_old_assets.html"*}}
{{if $type_immo == "other"}} {{if $type_immo == "other"}}
{{:include file="_immobilisations_autres.html"}} {{:include file="_immobilisations_autres.html"}}

View file

@ -1,6 +1,6 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Schéma des liens entre documents", "description": "Schéma des liens entre écritures",
"type": "object", "type": "object",
"properties": { "properties": {
"type": { "type": {
@ -23,7 +23,7 @@
"exclusiveMinimum": 0 "exclusiveMinimum": 0
}, },
"exit_line_id": { "exit_line_id": {
"description": "ligne d'amortissement de sortie du bilan de l'immobilisation", "description": "ligne de sortie du bilan de l'immobilisation",
"type": "integer", "type": "integer",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
}, },
@ -35,6 +35,10 @@
"amount": { "amount": {
"description": "montant de la ligne d'amortissement ou de crédit", "description": "montant de la ligne d'amortissement ou de crédit",
"type": ["number", "null"] "type": ["number", "null"]
},
"created" : {
"description" : "vrai si amortissement créé dans le module",
"type" : ["boolean", "null"]
} }
}, },
"required": ["type", "immo_doc_id"], "required": ["type", "immo_doc_id"],

View file

@ -2,13 +2,6 @@
{{* {{*
@param immo_doc_id @param immo_doc_id
TODO ? :
- séparer les cas des immo simples et complexes (BOI)
par exemple pour la durée d'amort par défaut {{:input ...}}
- prise en charge immo => param = immo_line_id
- modif param immo => param = immo_doc_id
- DONE possibilité supprimer liaison écriture avoir
*}} *}}
{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}} {{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
@ -39,77 +32,67 @@
{{* traiter la saisie *}} {{* traiter la saisie *}}
{{#form on="save"}} {{#form on="save"}}
{{if ! $_POST.amortir}} {{if $_POST.date_achat|parse_date > $ligne_immo.date_achat}}
{{* ne pas amortir *}} {{:assign da=$ligne_immo.date_achat|date_short}}
{{:assign duration=0}} {{: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}}
{{:assign libelle=null}}
{{:assign montant=null}}
{{:assign date_achat=null}}
{{:assign date_mes=null}}
{{:assign status="ignored"}}
{{else}}
{{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"}}
{{/if}} {{/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"}}
{{* écritures de crédit *}} {{* écritures de crédit *}}
{{#foreach from=$linked_immos item="line"}} {{#foreach from=$linked_immos item="line"}}
{{if ! $_POST.credit_id|has:$line.trans_id}} {{if ! $_POST.credit_id|has:$line.trans_id}}
@ -151,7 +134,7 @@
{{* enregistrer les infos de l'immobilisation *}} {{* enregistrer les infos de l'immobilisation *}}
{{:save {{:save
key=$info_immo.key key=$info_immo.key
validate_schema="schema.json" validate_schema="asset.schema.json"
type="immo" type="immo"
line=$info_immo.line line=$info_immo.line
duration=$duration duration=$duration
@ -163,12 +146,8 @@
assign_new_id="new_id" assign_new_id="new_id"
}} }}
{{if $_POST.amortir}} {{:assign type_immo="managed"}}
{{: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}}
{{else}}
{{:assign type_immo="other"}}
{{/if}}
{{:redirect force="details_immo.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=infos"|args:$_GET.immo_doc_id:$type_immo}}
{{/form}} {{/form}}
@ -209,33 +188,14 @@
<fieldset> <fieldset>
<legend>Paramètres de l'amortissement</legend> <legend>Paramètres de l'amortissement</legend>
<dl> <dl>
{{:input id="amortir" type="checkbox" value=1 name="amortir" label="Amortir cette immobilisation sur une ou plusieurs années" checked="checked" help="Dé-cocher pour ne pas amortir"}} {{:input type="number" name="duree" label="Durée d'amortissement" min=1 default=$info_immo.duration}}
<div class="masquable"> {{:input type="text" name="libelle" label="Libellé" default=$info_immo.label}}
{{:input type="number" name="duree" label="Durée d'amortissement" min=1 default=$info_immo.duration}} {{if $info_immo.amount != null}}
{{:input type="text" name="libelle" label="Libellé" default=$info_immo.label}} {{:assign max_aff="%f"|math:$max_disponible|money_currency:false}}
{{if $info_immo.amount != null}} {{:input type="money" name="montant" label="Montant de l'immobilisation" default=$montant_immo help="Montant maximum : %s"|args:$max_aff}}
{{:assign max_aff="%f"|math:$max_disponible|money_currency:false}} {{/if}}
{{:input type="money" name="montant" label="Montant de l'immobilisation" default=$montant_immo help="Montant maximum : %s"|args:$max_aff}} {{:input type="date" name="date_achat" label="Date d'acquisition" default=$info_immo.date_achat}}
{{/if}} {{:input type="date" name="date_mes" label="Date de mise en service" default=$info_immo.date_mes}}
{{:input type="date" name="date_achat" label="Date d'acquisition" default=$info_immo.date_achat}}
{{:input type="date" name="date_mes" label="Date de mise en service" default=$info_immo.date_mes}}
{{*
{{if $linked_immos != null}}
<dt><label>Écritures d'avoir liées à l'immobilisation</label></dt>
<dd>
<span class="input-list avoirs">
<label for="credit_id">Écritures&nbsp;:</label>
{{#foreach from=$linked_immos item="line"}}
<span class="label">
<input type="hidden" name="credit_id[]" value="{{$line.trans_id}}">{{$line.trans_id}}
<button data-icon="✘" type="button" class=" icn-btn" title="Cliquer pour supprimer la liaison"></button>
</span>
{{/foreach}}
</span>
</dd>
{{/if}}
*}}
</div>
</dl> </dl>
</fieldset> </fieldset>
<p class="submit"> <p class="submit">
@ -244,17 +204,3 @@
</form> </form>
{{:admin_footer}} {{:admin_footer}}
<script type="text/javascript" src="scripts.js"></script>
<script type="text/javascript">
function changeVisibility(evt, idcheck = 'f_amortir_1', hiddenclass = 'masquable')
{
toggleVisibility(idcheck, document.querySelectorAll('.' + hiddenclass));
}
(function () {
document.getElementById('f_amortir_1').onclick = changeVisibility;
})();
</script>

View file

@ -4,8 +4,7 @@
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_doc_id id du doc d'immo associé
*}} *}}
{{* données 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"}} {{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
{{if $message != null}} {{if $message != null}}
@ -17,27 +16,29 @@
{{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
{{/if}} {{/if}}
{{:include file="_get_config.html" keep="module.config"}} {{if $_GET.filter}}
{{if $_POST.unhide == null}} {{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}}
{{:assign filter_condition=" NOT ("}} {{:include
file="./_get_amort_code.html"
code_immo=$ligne_immo.account_code
keep="code_amort"
}}
{{:include file="_get_config.html" keep="module.config"}}
{{:assign account_condition="account.code = "|cat:$code_amort}}
{{:assign filter_condition=$account_condition|cat:" AND NOT ("}}
{{#foreach from=$module.config.filters item="filter"}} {{#foreach from=$module.config.filters item="filter"}}
{{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}} {{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}}
{{:assign filter_condition=$filter_condition|cat:" trans.label LIKE "|cat:$filter|cat:" OR "}} {{:assign filter_condition=$filter_condition|cat:" trans.label LIKE "|cat:$filter|cat:" OR "}}
{{/foreach}} {{/foreach}}
{{:assign filter_condition=$filter_condition|cat:"0)"}} {{:assign filter_condition=$filter_condition|cat:"0)"}}
{{else}} {{else}}
{{:assign filter_condition="1"}} {{:assign account_filter="28%"|quote_sql}}
{{:assign filter_condition="account.code LIKE "|cat:$account_filter}}
{{/if}} {{/if}}
{{* lister les amortissements non rattachés à une immo *}} {{* lister les amortissements non rattachés à une immo *}}
{{:include file="./_get_free_amort.html" filter_condition=$filter_condition keep="free_amort_lines"}} {{:include file="./_get_free_amort.html" filter_condition=$filter_condition keep="free_amort_lines"}}
{{* 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"
}}
{{: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"}}
{{* barre de navigation *}} {{* barre de navigation *}}
@ -45,22 +46,27 @@
{{:include {{:include
file="_nav.html" file="_nav.html"
current="index" current="index"
subcurrent="other" subcurrent="managed"
subsubcurrent="amortization" subsubcurrent="amortization"
type_immo="other" type_immo="managed"
autres_amort=$free_amort_lines autres_amort=$free_amort_lines
}} }}
{{/if}} {{/if}}
{{if $_POST.unhide != null}} <nav class="tabs">
{{:assign checked="checked"}} <ul>
{{/if}} <li {{if $_GET.filter}}class="current"{{/if}}>
<a href="other_amortizations.html?immo_doc_id={{$_GET.immo_doc_id}}{{if $dialog}}&_dialog{{/if}}&filter=true">
<form method="post" action=""> Amortissements du compte {{$code_amort}}
<fieldset> </a>
{{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher toutes les écritures"}} </li>
</fieldset> <li {{if ! $_GET.filter}}class="current"{{/if}}>
</form> <a href="other_amortizations.html?immo_doc_id={{$_GET.immo_doc_id}}{{if $dialog}}&_dialog{{/if}}">
Tous les amortissements
</a>
</li>
</ul>
</nav>
{{if $free_amort_lines != null}} {{if $free_amort_lines != null}}
<section class="amortissement"> <section class="amortissement">
@ -79,9 +85,11 @@
</thead> </thead>
<tbody> <tbody>
{{#foreach from=$free_amort_lines item="line"}} {{#foreach from=$free_amort_lines item="line"}}
{{if $_POST.unhide == null && $line.account_code != $code_amort}} {{*
{{if $_GET.filter && $line.account_code != $code_amort}}
{{:continue}} {{:continue}}
{{/if}} {{/if}}
*}}
{{: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.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.year}}
<tr> <tr>
@ -109,8 +117,10 @@
</table> </table>
</section> </section>
{{else}} {{else}}
<p class="block alert">Aucun amortissement à rattacher</p> <p class="block alert">Aucun amortissement pour le compte {{$code_amort}}</p>
{{/if}} {{/if}}
{{:form_errors}} {{:form_errors}}
{{:admin_footer}} {{:admin_footer}}

View file

@ -185,6 +185,7 @@
type="amort_link" type="amort_link"
immo_doc_id=$_GET.immo_doc_id|intval immo_doc_id=$_GET.immo_doc_id|intval
amort_line_id=$line.id amort_line_id=$line.id
created=true
}} }}
{{:break}} {{:break}}
{{/if}} {{/if}}
@ -240,6 +241,7 @@
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
}} }}
@ -248,6 +250,7 @@
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
}} }}
@ -286,8 +289,8 @@ function redisplayData(evt,
) )
{ {
setDateEnd(f_years_select, f_date, f_years_data); setDateEnd(f_years_select, f_date, f_years_data);
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); 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);
} }
function redisplayAmort(evt, function redisplayAmort(evt,

View file

@ -27,9 +27,11 @@ function toggleVisibility(idcheck, fields) {
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 + "]");
const b_value = button.value; if (button != null) {
const new_value = b_value.replace(/id_year=\d+/, 'id_year=' + id_year); const b_value = button.value;
button.setAttribute('value', new_value); const new_value = b_value.replace(/id_year=\d+/, 'id_year=' + id_year);
button.setAttribute('value', new_value);
}
} }
} }
@ -131,7 +133,9 @@ 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);
} }

View file

@ -175,7 +175,7 @@
{{* enregistrer les infos de l'immobilisation *}} {{* enregistrer les infos de l'immobilisation *}}
{{:save {{:save
key=""|uuid key=""|uuid
validate_schema="schema.json" validate_schema="asset.schema.json"
type="immo" type="immo"
line=$immo_line_id line=$immo_line_id
duration=$duration duration=$duration
@ -257,6 +257,7 @@
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
}} }}

View file

@ -392,6 +392,7 @@
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>
@ -404,6 +405,7 @@
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>
@ -436,6 +438,7 @@
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>
@ -448,6 +451,7 @@
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>
@ -474,6 +478,7 @@
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>
@ -492,6 +497,7 @@
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>
@ -505,6 +511,7 @@
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>
@ -531,6 +538,7 @@
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>
@ -543,6 +551,7 @@
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>