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