From d06dd424b3726c9865104bf4387e013dc5eb4838 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Mon, 4 May 2026 08:34:39 +0200 Subject: [PATCH 1/4] =?UTF-8?q?Am=C3=A9lioration=20recherche=20=C3=A9critu?= =?UTF-8?q?res=20au=20cr=C3=A9dit=20du=20compte=20d'une=20immobilisation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- link_immo.html | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/link_immo.html b/link_immo.html index 3543ab8..2757db0 100644 --- a/link_immo.html +++ b/link_immo.html @@ -38,7 +38,6 @@ {{* lister les écritures au crédit du compte de l'immobilisation - variante : utiliser une jointure ; pas forcément plus efficace *}} {{#select line.id as credit_line_id, @@ -57,14 +56,12 @@ 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 = :account_code AND credit > 0 - AND credit_trans_id NOT IN ( - SELECT - CASE WHEN id_transaction = credit_trans_id THEN id_transaction - ELSE id_related - END AS other_id - FROM acc_transactions_links WHERE other_id = credit_trans_id) + 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') == "immo_link") ORDER BY trans.date, trans.label; :account_code = $ligne_immo.account_code + !table =$module.table assign="other_immos." }} {{/select}} From c620ac769e912d2680bfee1e6552d6f8cf842f91 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Mon, 4 May 2026 13:48:48 +0200 Subject: [PATCH 2/4] Changement nom : immo_link => credit_link --- _immobilisations.html | 4 ++-- amortization.html | 11 +++++------ attach_immo.html | 4 ++-- link.schema.json | 16 ++++++++++++---- link_immo.html | 2 +- save_amort.html | 2 +- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/_immobilisations.html b/_immobilisations.html index fa31b31..5b257f4 100644 --- a/_immobilisations.html +++ b/_immobilisations.html @@ -82,7 +82,7 @@ et déduire leur montant de celui de l'immo *}} {{#load - type="immo_link" + type="credit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $immo_doc_id }} {{if $amount == null}} @@ -143,7 +143,7 @@ {{:linkbutton label="Détails" href="details_immo.html?immo_doc_id=%s"|args:$immo_doc_id - shape="search" + shape="eye" }} {{* target="_dialog"*}} {{*/if*}} diff --git a/amortization.html b/amortization.html index 926eb52..0caed6c 100644 --- a/amortization.html +++ b/amortization.html @@ -19,7 +19,7 @@ line.label as line_label, trans.id as immo_trans_id, trans.label as label, - trans.date, + trans.date as date_achat, account.code as account_code, account.label as account_label FROM acc_transactions_lines AS line @@ -34,7 +34,7 @@ {{/select}} {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.immo_trans_id}} -{{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date}} +{{: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.label}} {{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}} {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} @@ -52,7 +52,7 @@ et déduire leur montant de celui de l'immo *}} {{:assign total_credits=0}} -{{#load type="immo_link" where="$$.immo_doc_id=:immo_doc_id" :immo_doc_id=$_GET.immo_doc_id|intval}} +{{#load type="credit_link" where="$$.immo_doc_id=:immo_doc_id" :immo_doc_id=$_GET.immo_doc_id|intval}} {{if $amount == null}} {{#select credit FROM acc_transactions_lines WHERE id = :credit_line_id; :credit_line_id=$credit_line_id @@ -180,9 +180,8 @@ }}

- Il sera possible de choisir la date de sortie, d'indiquer - le montant de la cession le cas échéant et de modifier les - comptes associés. + Il sera possible de choisir la date de sortie et d'indiquer + le montant de la cession le cas échéant.

diff --git a/attach_immo.html b/attach_immo.html index 3fa8001..a824041 100644 --- a/attach_immo.html +++ b/attach_immo.html @@ -52,7 +52,7 @@ {{* montant de l'écriture de crédit déjà affecté *}} {{:assign montant_affecte=0}} -{{#load type="immo_link" assign="linked_immo." +{{#load type="credit_link" assign="linked_immo." where="$$.credit_line_id = :credit_line_id" :credit_line_id = $_GET.credit_line_id|intval }} @@ -114,7 +114,7 @@ {{* enregistrer la liaison des lignes d'immo *}} {{:save key=""|uuid - type="immo_link" + type="credit_link" immo_doc_id=$_GET.immo_doc_id|intval credit_line_id=$_GET.credit_line_id|intval amount=$saved_credit diff --git a/link.schema.json b/link.schema.json index 1524b55..88968ed 100644 --- a/link.schema.json +++ b/link.schema.json @@ -5,7 +5,7 @@ "properties": { "type": { "type": "string", - "enum": ["amort_link", "immo_link"] + "enum": ["amort_link", "credit_link", "exit_link"] }, "immo_doc_id" : { "description": "identifiant du document d'immobilisation associé", @@ -13,12 +13,17 @@ "exclusiveMinimum": 0 }, "amort_line_id" : { - "description": "numéro de ligne d'amortissement associée à l'immobilisation", + "description": "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", + "description": "ligne au crédit du compte de l'immobilisation", + "type": "integer", + "exclusiveMinimum": 0 + }, + "exit_line_id": { + "description": "ligne d'amortissement de sortie du bilan de l'immobilisation", "type": "integer", "exclusiveMinimum": 0 }, @@ -31,6 +36,9 @@ "if": {"properties": {"type": {"const": "amort_link"}}, "required": ["type"]}, "then": {"required": ["amort_line_id"]}, "else": - "if": {"properties": {"type": {"const": "immo_link"}}, "required": ["type"]}, + "if": {"properties": {"type": {"const": "credit_link"}}, "required": ["type"]}, "then": {"required": ["credit_line_id"]}, + "else": + "if": {"properties": {"type": {"const": "exit_link"}}, "required": ["type"]}, + "then": {"required": ["exit_line_id"]}, } diff --git a/link_immo.html b/link_immo.html index 2757db0..ef12192 100644 --- a/link_immo.html +++ b/link_immo.html @@ -58,7 +58,7 @@ WHERE account.code = :account_code AND credit > 0 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') == "immo_link") + WHERE json_extract(link.document, '$.type') == "credit_link") ORDER BY trans.date, trans.label; :account_code = $ligne_immo.account_code !table =$module.table diff --git a/save_amort.html b/save_amort.html index 6a8459c..5b852bc 100644 --- a/save_amort.html +++ b/save_amort.html @@ -57,7 +57,7 @@ *}} {{:assign total_credits=0}} {{#load - type="immo_link" + type="credit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $_GET.immo_doc_id|intval }} {{if $amount == null}} From 78407592a10ff6db9a88dcf1258b2e8e19c22c0d Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Mon, 4 May 2026 18:45:13 +0200 Subject: [PATCH 3/4] Ajout page modification des infos d'une immobilisation --- modify_infos.html | 247 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 modify_infos.html diff --git a/modify_infos.html b/modify_infos.html new file mode 100644 index 0000000..b0dd9f0 --- /dev/null +++ b/modify_infos.html @@ -0,0 +1,247 @@ +{{* -*- brindille -*- *}} +{{:admin_header title="Modifier l'immobilisation" custom_css="./style.css" current="module_amortization"}} + +{{* + @param immo_line_id + @param immo_doc_id + ¿ @param type_immo : managed, amortized, archived, other ? + + TODO : + - ¿ faire une ligne modifiable pour chaque avoir avec un bouton de suppression ? + - 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 +*}} + +{{* données de l'immobilisation *}} +{{#load id=$_GET.immo_doc_id|intval assign="info_immo"}} +{{else}} + {{:error message="Immobilisation non trouvée"}} +{{/load}} +{{#select + trans.id as immo_trans_id, + trans.label as trans_label, + trans.date as date_achat, + line.debit as montant, + line.label as line_label, + acc.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 = $info_immo.line + assign="ligne_immo" + }} +{{else}} + {{:error message="Immobilisation non trouvée"}} +{{/select}} +{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.montant}} + +{{: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}} +{{* + chercher des écritures liées à l'immo courante au crédit du même compte + et déduire leur montant de celui de l'immo +*}} +{{:assign linked_immos=null}} +{{:assign total_credits=0}} +{{#load type="credit_link" where="$$.immo_doc_id=:immo_doc_id" :immo_doc_id=$_GET.immo_doc_id|intval}} + {{#select + line.credit, + trans.id + FROM acc_transactions_lines AS line + INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + WHERE line.id = :credit_line_id; + :credit_line_id=$credit_line_id + }} + {{:assign credit=$credit}} + {{:assign credit_trans_id=$id}} + {{/select}} + {{:assign var="linked_immos." value=$credit_trans_id}} + {{if $amount == null}} + {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} + {{else}} + {{:assign total_credits="%d+%d"|math:$total_credits:$amount}} + {{/if}} +{{/load}} +{{: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.montant:$autres_amount}} + +{{* traiter la saisie *}} +{{#form on="save"}} + {{if ! $_POST.amortir}} + {{* ne pas amortir *}} + {{:assign duration=0}} + {{:assign libelle=null}} + {{:assign montant=null}} + {{:assign date_achat=null}} + {{:assign date_mes=null}} + {{:assign status="ignored"}} + {{else}} + + {{if $_POST.date_achat == null || $_POST.date_achat|parse_date == $ligne_immo.date_achat}} + {{:assign date_achat=null}} + {{elseif $_POST.date_achat|parse_date == $info_immo.date_achat}} + {{:assign date_achat=$info_immo.date_achat}} + {{else}} + {{:assign date_achat=$_POST.date_achat|parse_date}} + {{/if}} + {{if $_POST.date_mes == null || $_POST.date_mes|parse_date == $ligne_immo.date_achat}} + {{:assign date_mes=null}} + {{elseif $_POST.date_mes|parse_date == $info_immo.date_achat}} + {{:assign date_mes=null}} + {{else}} + {{:assign date_mes=$_POST.date_mes|parse_date}} + {{if $date_mes < $ligne_immo.date_achat || $date_mes < $info_immo.date_achat}} + {{:assign da=$date_achat|or:$info_immo.date_achat|or:$ligne_immo.date_achat|date_short}} + {{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$_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}} + + {{* enregistrer les infos de l'immobilisation *}} + {{:save + key=$info_immo.key + validate_schema="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" + }} + + {{if $_POST.amortir}} + {{:assign type_immo="managed"}} + {{else}} + {{:assign type_immo="other"}} + {{/if}} + {{:redirect force="index.html?ok=1&msg=infos&type_immo=%s"|args:$type_immo}} +{{/form}} +{{:form_errors}} + +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="parameter"}} +{{/if}} + +{{: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.immo_trans_id}} +

Paramètres de l'immobilisation

+
+
+
Immobilisation
+
#{{$ligne_immo.immo_trans_id}} {{$immo_label}}
+
Compte d'immobilisation
+
{{$ligne_immo.code}} — {{$ligne_immo.account_label}} +
Montant
+
{{"%f"|math:$montant_immo|money_currency_html:false|raw}}
+ {{if $total_credits > 0}} +
Montant des avoirs
+
{{"%f"|math:$total_credits|money_currency_html:false|raw}}
+
Montant à amortir
+
{{"%f"|math:$solde|money_currency_html:false|raw}}
+ {{/if}} +
Date de l'écriture d'immobilisation
+
{{$ligne_immo.date_achat|date_short}}
+
+
+ +
+
+ Paramètres de l'amortissement +
+ {{: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}} + {{:input type="text" name="libelle" label="Libellé" default=$info_immo.label}} + {{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=$info_immo.date_achat}} + {{:input type="date" name="date_mes" label="Date de mise en service" default=$info_immo.date_mes}} + {{if $linked_immos}} +
+
+ + + {{#foreach from=$linked_immos item="id"}} + + {{:input type="hidden" name="credit_id" value=$id}}{{$id}} + + + {{/foreach}} + +
+ {{/if}} +
+
+
+

+ {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} +

+
+ +{{:admin_footer}} + + + From 3169fe9268f7efa7c82369dcf07aa7ec8ab78865 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Tue, 5 May 2026 12:25:11 +0200 Subject: [PATCH 4/4] =?UTF-8?q?Corrections=20contr=C3=B4les=20validit?= =?UTF-8?q?=C3=A9=20date=20et=20affichage=20=C3=A9tat=20immo=20ignor=C3=A9?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- add_asset.html | 7 ++++++- add_infos.html | 25 ++++++++++++++++++++----- modify_infos.html | 14 +++++++++++--- scripts.js | 2 +- style.css | 4 ++++ 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/add_asset.html b/add_asset.html index 2ee28bd..f4800f2 100644 --- a/add_asset.html +++ b/add_asset.html @@ -108,6 +108,11 @@ {{/if}} {{:assign duration=$_POST.duree|intval}} {{: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|date_short}} + {{/if}} {{/if}} {{* enregistrer l'écriture *}} @@ -141,7 +146,7 @@ type="immo" line=$immo_line_id duration=$duration - date_mes=$date_debut + date_mes=$date_mes status=$status }} {{/if}} diff --git a/add_infos.html b/add_infos.html index a8beee0..a6c96ea 100644 --- a/add_infos.html +++ b/add_infos.html @@ -60,6 +60,11 @@ {{: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}} + {{* vérifier que la date de mise en service est postérieure à la date d'acquisition *}} {{:assign d1=$_POST.date_achat|or:$ligne_immo.date_achat|parse_date}} {{:assign d2=$_POST.date_mes|or:$d1|parse_date}} @@ -126,7 +131,6 @@ date_achat=$date_achat date_mes=$date_mes status=$status - assign_new_id="new_id" }} {{if $_POST.amortir}} @@ -136,14 +140,13 @@ {{/if}} {{:redirect force="index.html?ok=1&msg=infos&type_immo=%s"|args:$type_immo}} {{/form}} -{{:form_errors}} {{:admin_header title="Classer l'immobilisation" custom_css="./style.css" current="module_amortization"}} - {{* barre de navigation *}} {{if ! $dialog}} {{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="parameter"}} {{/if}} +{{:form_errors}} {{:assign choix_defaut=$_GET.type_immo}} @@ -174,7 +177,12 @@
Amortissement
- {{: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"}} + {{if $info_immo.status == 'ignored'}} + {{:assign checked=null}} + {{else}} + {{:assign checked="checked"}} + {{/if}} + {{:input id="amortir" type="checkbox" value=1 name="amortir" label="Amortir cette immobilisation sur une ou plusieurs années" checked="%s"|args:$checked help="Dé-cocher pour ne pas amortir"}}
{{:input type="number" name="duree" label="Durée d'amortissement" required=true min=1}}
@@ -201,13 +209,20 @@ diff --git a/modify_infos.html b/modify_infos.html index b0dd9f0..2016a52 100644 --- a/modify_infos.html +++ b/modify_infos.html @@ -92,7 +92,6 @@ {{:assign date_mes=null}} {{:assign status="ignored"}} {{else}} - {{if $_POST.date_achat == null || $_POST.date_achat|parse_date == $ligne_immo.date_achat}} {{:assign date_achat=null}} {{elseif $_POST.date_achat|parse_date == $info_immo.date_achat}} @@ -100,14 +99,23 @@ {{else}} {{:assign date_achat=$_POST.date_achat|parse_date}} {{/if}} + {{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_mes == null || $_POST.date_mes|parse_date == $ligne_immo.date_achat}} {{:assign date_mes=null}} {{elseif $_POST.date_mes|parse_date == $info_immo.date_achat}} {{:assign date_mes=null}} {{else}} {{:assign date_mes=$_POST.date_mes|parse_date}} - {{if $date_mes < $ligne_immo.date_achat || $date_mes < $info_immo.date_achat}} - {{:assign da=$date_achat|or:$info_immo.date_achat|or:$ligne_immo.date_achat|date_short}} + {{: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}} diff --git a/scripts.js b/scripts.js index babf511..e6298ca 100644 --- a/scripts.js +++ b/scripts.js @@ -79,7 +79,7 @@ function setDateEnd(id_exercices, id_date, id_years) { // renvoyer la valeur numérique d'un montant formaté en € function getNumber(text) { - return Number(text.replace(/[^0-9,]/g, '').replace(/,/, '.')); + return Number(text.replace(/[^0-9,]/g, '').replace(/,/, '.')); } // calculer le montant d'un amortissement diff --git a/style.css b/style.css index 8998179..1a8ed6d 100644 --- a/style.css +++ b/style.css @@ -94,3 +94,7 @@ html.dialog.dark main { html.dark .block.alert { background-color : rgba(87, 206, 235, 0.5); } + +span.input-list.avoirs label { + padding : 0.4rem 0.6rem; +}