From d5c62b6ef31f36c4fc7a2ffd5db29f71e10dd830 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Wed, 29 Apr 2026 11:43:17 +0200 Subject: [PATCH] =?UTF-8?q?Prise=20en=20compte=20=C3=A9critures=20BOI=20av?= =?UTF-8?q?ec=20montant=20immo=20subdivis=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _immobilisations_autres.html | 346 +++++++++++++++++------------------ add_infos.html | 253 ++++++++++++------------- link.schema.json | 36 ++++ schema.json | 13 +- 4 files changed, 329 insertions(+), 319 deletions(-) create mode 100644 link.schema.json diff --git a/_immobilisations_autres.html b/_immobilisations_autres.html index 1f08e9b..781940a 100644 --- a/_immobilisations_autres.html +++ b/_immobilisations_autres.html @@ -1,199 +1,187 @@ {{* -*- brindille -*- *}} -{{* Liste des immobilisations non amortissables ou non (encore) gérées *}} +{{* Liste des immobilisations non gérées ou non entièrement affectées *}} {{:include file="_get_config.html" keep="module.config"}} -
+

+ 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é +

-

- Cette page liste les écritures pas (encore) prises en charge par le module et sans écriture d'amortissement associée. -

+{{:assign saved_hides=$module.config.hides}} +{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}} - {{:assign saved_hides=$module.config.hides}} - {{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}} - - {{if $_POST|count == 0}} - {{:assign unhide=$user_hides.unhide_other}} +{{if $_POST|count == 0}} + {{:assign unhide=$user_hides.unhide_other}} +{{else}} + {{if $_POST.unhide == null}} + {{:assign unhide=0}} {{else}} - {{if $_POST.unhide == null}} - {{:assign unhide=0}} - {{else}} - {{:assign unhide=1}} + {{:assign unhide=1}} + {{/if}} + {{:assign var="user_hides.unhide_other" value=$unhide"}} + {{:assign var="saved_hides.%s"|args:$logged_user.id value=$user_hides}} + {{:save key="config" hides=$saved_hides}} +{{/if}} +{{if $unhide}} + {{:assign checked="checked"}} +{{/if}} + +{{* 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 DESC; + !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}} - {{: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 $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}} -
-
- {{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher toutes les écritures" }} -
-
+ {{:assign var="immo_lines." value=$immo_line}} +{{/select}} +{{*:debug lines=$immo_lines nb_lines=$immo_lines|count nb_null=$nb_null nb_managed=$nb_managed nb_ignored=$nb_ignored nb_other=$nb_other unhide=$unhide*}} - - - - - - - - - - - - - + +
+ {{:input type="checkbox" value=1 name="unhide" checked="%s"|args:$checked label="Afficher les écritures ignorées" }} +
+ - {{* vérifier l'existence de la table du module *}} - {{#load limit="1"}} - {{:assign columns="$$.duration as duration, $$.status as status,"}} - {{:assign table_join="LEFT JOIN !table AS info ON $$.line = line.id"}} - {{:assign doc_condition1="($$.status == 'ignored')"}} - {{:assign doc_condition2="$$.status IS NULL"}} - {{else}} - {{:assign columns=""}} - {{:assign table_join=""}} - {{:assign doc_condition1="0"}} - {{:assign doc_condition2="1"}} - {{/load}} +{{if $immo_lines|count > 0}} +
DateLibelléMontantN° compteCompte
+ + + + + + + + + + + + + + + + {{#foreach from=$immo_lines item="line"}} - {{* lister les immobilisations *}} - {{: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 filter_condition="("|cat:$doc_condition2|cat:" AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:")"}} - - {{:assign condition=$account_condition|cat:" AND debit > 0 AND ("|cat:$filter_condition|cat:" OR "|cat:$doc_condition1|cat:")"}} - - {{:assign nb_immo=0}} - {{#select - 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 - ORDER BY trans.date DESC; - !columns=$columns - !table_join=$table_join - !table=$module.table - !condition=$condition - }} - {{: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}} - - {{if $status == null}} - {{:assign status="unknown"}} - {{/if}} - - {{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}} - - {{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}} - {{:assign amort_lines=null}} - {{#select - 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, - 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}} - {{:assign amort_amount=0}} - {{#foreach from=$amort_lines item="line"}} - {{* voir s'il existe un doc associé à l'écriture d'amortissement *}} - {{#load type="link" - where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id AND $$.amort_line_id = :amort_line_id" - :immo_line_id = $immo_line_id - :amort_trans_id = $line.amort_trans_id - :amort_line_id = $line.amort_line_id - }} - {{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}} - {{else}} - {{* TODO À VÉRIFIER (cas multi-lignes) *}} - {{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}} - {{/load}} - {{/foreach}} - {{if $amort_amount != 0}} + {{if $unhide == null}} + {{if $status == "ignored"}} {{:continue}} {{/if}} + {{else}} + {{* 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}} - {{:assign nb_immo="%d+1"|math:$nb_immo}} - - - - - - - - - - {{/select}} - -
LigneDateLibelléMontantAffectéResteN° compteCompte
#{{$immo_trans_id}}{{$trans_date|date_short}}{{$trans_label}}{{if $line_label != null && $line_label != $trans_label}} — {{$line_label}}{{/if}}{{"%f"|math:$debit|money_html:false|raw}}{{$account_code}}{{$account_label}} - {{:linkbutton - label="Paramètres" - href="add_infos.html?immo_line_id=%s&type_immo=other"|args:$immo_line_id - shape="settings" - target="_dialog" - }} -
- {{if $nb_immo == 0}} -

Aucune immobilisation

- {{/if}} -
+ {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.immo_trans_id}} + {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.trans_id_year}} + {{:assign reste="%d-%d"|math:$line.debit:$line.amount}} + + #{{$line.immo_trans_id}} + {{$line.immo_line_id}} + {{$trans_date|date_short}} + {{$line.trans_label}}{{if $line.line_label != null && $line.line_label != $line.trans_label}} — {{$line.line_label}}{{/if}} + {{"%f"|math:$line.debit|money_html:false|raw}} + {{"%f"|math:$line.amount|money_html:false|raw}} + {{"%f"|math:$reste|money_html:false|raw}} + {{$line.account_code}} + {{$line.account_label}} + + {{:linkbutton + label="Paramètres" + href="add_infos.html?immo_line_id=%s&type_immo=other"|args:$immo_line_id + shape="settings" + }} +{{* target="_dialog"*}} + + + {{/foreach}} + + +{{else}} +

Aucune immobilisation

+{{/if}} diff --git a/link.schema.json b/link.schema.json new file mode 100644 index 0000000..1524b55 --- /dev/null +++ b/link.schema.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Schéma des liens entre documents", + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["amort_link", "immo_link"] + }, + "immo_doc_id" : { + "description": "identifiant du document d'immobilisation associé", + "type" : "integer", + "exclusiveMinimum": 0 + }, + "amort_line_id" : { + "description": "numéro de ligne d'amortissement associée à l'immobilisation", + "type": "integer", + "exclusiveMinimum": 0 + }, + "credit_line_id": { + "description": "numéro de ligne au crédit du compte de l'immobilisation", + "type": "integer", + "exclusiveMinimum": 0 + }, + "amount": { + "description": "montant de la ligne d'amortissement ou de crédit", + "type": ["number", "null"] + } + }, + "required": ["type", "immo_doc_id"], + "if": {"properties": {"type": {"const": "amort_link"}}, "required": ["type"]}, + "then": {"required": ["amort_line_id"]}, + "else": + "if": {"properties": {"type": {"const": "immo_link"}}, "required": ["type"]}, + "then": {"required": ["credit_line_id"]}, +} diff --git a/schema.json b/schema.json index 2acebc3..23a924b 100644 --- a/schema.json +++ b/schema.json @@ -14,11 +14,20 @@ "description": "durée de l'amortissement en années", "type": "integer" }, + "label" : { + "description" : "libellé de l'immobilisation si besoin", + "type" : ["string", "null"] + }, "amount" : { "description": "montant de l'immobilisation si besoin", "type": ["integer", "null"] }, - "date" : { + "date_achat" : { + "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", "type" : ["string", "null"], "format" : "date" @@ -28,5 +37,5 @@ "enum" : ["managed", "amortized", "archived", "ignored"] } }, - "required": ["type", "line", "duration", "date"] + "required": ["type", "line", "duration", "status"] }