From 310aa8cd07e97d747565453971eb8d55a1d6e4ad Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Fri, 13 Feb 2026 14:52:00 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Liaison=20immo=20avec=20=C3=A9critures=20de?= =?UTF-8?q?=20cr=C3=A9dits=20sur=20compte=20d'immobilisation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _archives.html | 59 ++++++++++++++++++++---------------- _immobilisations.html | 38 ++++++++++++++---------- add_infos.html | 66 +++++++++++++++++++++++++++++++++-------- amortization.html | 55 +++++++++++++++++++++------------- balance_sheet_exit.html | 35 +++++++++++++++++----- compute_exit_data.html | 33 +++++++++++++++++---- write_exit.html | 40 +++++++++++++++++-------- 7 files changed, 225 insertions(+), 101 deletions(-) diff --git a/_archives.html b/_archives.html index fafad3b..37b5a13 100644 --- a/_archives.html +++ b/_archives.html @@ -66,12 +66,10 @@ !condition=$condition }} {{:assign montant_immo=$debit}} + {{* voir si l'immo est prise en charge *}} {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}} {{:assign status=$status}} - {{if $amount != null}} - {{:assign montant_immo=$amount}} - {{/if}} {{else}} {{:assign amortissable="nsp"}} {{:assign status="unknown"}} @@ -80,32 +78,46 @@ {{:continue}} {{/if}} - {{* voir s'il existe une écriture liée qui solde l'immobilisation *}} + {{* 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 solde_immo=$montant_immo}} + {{:assign credit_immo=null}} {{#select - trans.date as exit_date - FROM acc_transactions_links AS link - INNER JOIN acc_transactions AS trans ON - (CASE - WHEN link.id_transaction = :trans_id THEN link.id_related - WHEN link.id_related = :trans_id THEN link.id_transaction - END) = trans.id - INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id - INNER JOIN acc_accounts AS acc on line.id_account=acc.id - WHERE line.credit = :montant_immo - AND acc.code = :account_code + CASE links.id_related = :immo_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as other_id, + line.credit + FROM acc_transactions AS trans + INNER JOIN acc_transactions_links as links + ON (trans.id = links.id_transaction OR trans.id = links.id_related) + INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + INNER JOIN acc_transactions AS trans2 ON trans2.id = other_id + WHERE trans.id = :immo_id AND line.credit > 0 AND acc.code = :account + ORDER BY trans2.date, trans2.id ; - :trans_id = $trans_id - :montant_immo = $montant_immo - :account_code = $account_code + :immo_id=$trans_id + :account=$account_code + assign="credit_immo." }} - {{:assign status="archived"}} - {{:assign exit_date=$exit_date}} + {{:assign solde_immo="%d-%d"|math:$solde_immo:$credit}} {{/select}} + {{if $solde_immo == 0}} + {{:assign status="archived"}} + {{/if}} + {{if $status != "archived"}} {{:continue}} {{/if}} + {{:assign nb=$credit_immo|count}} + {{:assign nb="%d-1"|math:$nb}} + {{:assign var="last_credit" from="credit_immo.%d"|args:$nb}} + {{:assign montant_immo=$last_credit.credit}} + {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$trans_id}} {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}} {{:assign nb_immo="%d+1"|math:$nb_immo}} @@ -116,12 +128,7 @@ {{* voir s'il y a une écriture de cession associée à cette immo *}} {{#select trans.id, - trans.label, - trans.date, - line.id, - line.debit, - acc.code, - acc.label + line.debit FROM acc_transactions_links AS link INNER JOIN acc_transactions AS trans ON (CASE WHEN link.id_transaction = :trans_id THEN link.id_related diff --git a/_immobilisations.html b/_immobilisations.html index aacdc34..d8a88f3 100644 --- a/_immobilisations.html +++ b/_immobilisations.html @@ -56,7 +56,6 @@ line.debit AS debit, account.id as account_id, account.code as account_code, - account.label as account_label, 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 @@ -75,9 +74,6 @@ {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}} {{:assign duration=$duration}} {{:assign status=$status}} - {{if $amount != null}} - {{:assign montant_immo=$amount}} - {{/if}} {{else}} {{:assign amortissable="nsp"}} {{:assign status="unknown"}} @@ -86,20 +82,30 @@ {{:continue}} {{/if}} - {{* voir s'il existe une écriture qui solde l'immobilisation *}} + {{* 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 + *}} {{#select - line.id AS line - FROM acc_transactions_lines AS line - INNER JOIN acc_accounts AS acc ON acc.id = line.id_account - INNER JOIN acc_transactions_lines AS line2 ON line2.id_account = acc.id - WHERE - line.id = :line_id - AND line2.credit = :montant_immo; - :line_id = $immo_id|intval - :montant_immo = $montant_immo - }} - {{:assign status="archived"}} + CASE links.id_related = :immo_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as other_id, + line.credit + FROM acc_transactions AS trans + INNER JOIN acc_transactions_links as links + ON (trans.id = links.id_transaction OR trans.id = links.id_related) + INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE trans.id = :immo_id AND line.credit > 0 AND acc.code = :account; + :immo_id=$trans_id + :account=$account_code + }} + {{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}} + {{*:debug ligne=$ligne montant_immo=$montant_immo*}} {{/select}} + {{if $montant_immo == 0}} + {{:assign status="archived"}} + {{/if}} {{if $status == "archived"}} {{:continue}} {{/if}} diff --git a/add_infos.html b/add_infos.html index 9573196..63af8fc 100644 --- a/add_infos.html +++ b/add_infos.html @@ -9,19 +9,42 @@ {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}} {{/load}} {{#select + trans.id, trans.date as date_achat, - line.debit as montant + line.debit as montant, + acc.code FROM acc_transactions_lines AS line INNER join acc_transactions AS trans ON line.id_transaction = trans.id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id WHERE line.id = :line_id; :line_id = $_GET.immo_id assign=ligne_immo }} +{{else}} + {{:error message="Aucune immobilisation trouvée"}} {{/select}} +{{* 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, + acc.code + FROM acc_transactions_links as links + INNER JOIN acc_transactions_lines AS line on line.id_transaction = linked_id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE (links.id_transaction = :immo_trans_id or links.id_related = :immo_trans_id) + AND line.credit > 0 + ; + :immo_trans_id = $ligne_immo.id +}} + {{:assign var="linked_transactions.%d."|args:$code value=$linked_id}} +{{/select}} +{{:assign var="immo_transactions" from="linked_transactions.%d"|args:$ligne_immo.code}} + {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} - {{if $_POST.classify == null}} {{:error message="Vous devez choisir une action"}} {{/if}} @@ -29,7 +52,6 @@ {{if $_POST.classify == "ignored"}} {{* ne pas amortir *}} {{:assign duration=0}} - {{:assign montant=0}} {{:assign date_debut=$ligne_immo.date_achat|parse_date}} {{:assign status="ignored"}} {{else}} @@ -62,7 +84,6 @@ {{/if}} {{:assign status="managed"}} {{/if}} - {{:assign montant="%d*100"|math:$_POST.montant}} {{/if}} {{* enregistrer les infos de l'immobilisation *}} @@ -78,11 +99,36 @@ type="immo" line=$_GET.immo_id|intval duration=$duration - amount=$montant|intval date=$date_debut status=$status }} + {{* copier les autres liaisons *}} + {{#foreach from=$linked_transactions key="code" item="liaisons"}} + {{if $code != $ligne_immo.code}} + {{:debug code=$code liaisons=$liaisons}} + {{#foreach from=$liaisons item="elem"}} + {{:assign var="new_transactions." value=$elem}} + {{/foreach}} + {{/if}} + {{/foreach}} + + {{* nouvelles liaisons *}} + {{#foreach from=$_POST.transactions key="key" item="elem"}} + {{:assign var="new_transactions." value=$elem|intval}} + {{/foreach}} + + {{* Enregistrer les liaisons *}} + {{if $new_transactions != null}} + {{:api + method="POST" + path="accounting/transaction/%s/transactions"|args:$ligne_immo.id + assign="result" + assign_code="result_code" + transactions=$new_transactions + }} + {{/if}} + {{if $_POST.classify == "managed" || $_POST.classify == "amortized"}} {{:assign type_immo=$_POST.classify}} {{elseif $_POST.classify == "ignored"}} @@ -91,9 +137,8 @@ {{:assign type_immo=$_GET.type_immo}} {{/if}} {{:redirect force="index.html?ok=1&msg=infos&type_immo=%s"|args:$type_immo}} -{{else}} - {{:form_errors}} {{/form}} +{{:form_errors}} {{:admin_header title="Classer l'immobilisation" custom_css=$custom_css current="module_amortization"}} @@ -107,16 +152,13 @@ {{if $info_immo != null}} {{:assign date_defaut=$info_immo.date}} {{:assign duree_defaut=$info_immo.duration}} - {{:assign montant_defaut=$info_immo.amount}} {{else}} {{:assign duree_defaut=null}} - {{:assign montant_defaut=null}} {{/if}} {{* - classer l'immobilisation - - renseigner ou modifier la date de mise en service, le montant de - l'immobilisation et la durée d'amortissement + - renseigner ou modifier la date de mise en service, les écritures associées ou la durée d'amortissement *}}
@@ -134,7 +176,7 @@ Informations
{{:input type="number" name="duree" label="Durée d'amortissement" default=$duree_defaut required=true min=1}} - {{:input type="money" name="montant" label="Montant" default=$montant_defaut help="à renseigner uniquement si différent du montant de l'acquisition"}} + {{:input type="list" name="transactions" default=$immo_transactions label="Écritures liées" target="!acc/transactions/selector.php" multiple=true help="par exemple écriture d'avoir ou autre réduction du montant de l'acquisition"}} {{:input type="date" name="date_mes" label="Date de mise en service" default=$date_defaut help="à renseigner uniquement si différente de la date d'acquisition"}}
diff --git a/amortization.html b/amortization.html index a4fc37a..ebdab64 100644 --- a/amortization.html +++ b/amortization.html @@ -12,9 +12,11 @@ line.debit as montant, trans.id as trans_id, trans.label as label, - trans.date + trans.date, + account.code as account_code FROM acc_transactions_lines AS line INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + INNER JOIN acc_accounts AS account ON line.id_account = account.id WHERE line.id = :line_id; :line_id = $_GET.immo_id|intval assign=ligne_immo @@ -29,10 +31,30 @@ {{:assign duree=$duration}} {{:assign date_debut=$date}} {{:assign status=$status}} - {{if $amount != null}} - {{:assign var="ligne_immo.montant" value=$amount}} - {{/if}} {{/load}} + +{{* 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 total_credits=0}} +{{#select + CASE links.id_related = :immo_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as other_id, + line.credit + FROM acc_transactions AS trans + INNER JOIN acc_transactions_links as links + ON (trans.id = links.id_transaction OR trans.id = links.id_related) + INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE trans.id = :immo_id AND line.credit > 0 AND acc.code = :account; + :immo_id=$ligne_immo.trans_id + :account=$ligne_immo.account_code + }} + {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} +{{/select}} +{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}} {{:assign solde=$ligne_immo.montant}} {{* chercher des écritures d'amortissement liées à l'immobilisation *}} @@ -53,9 +75,7 @@ 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) + ON (t_immo.id = links.id_transaction OR t_immo.id = links.id_related) INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction INNER join acc_transactions as trans on l_amort.id_transaction = trans.id INNER join acc_accounts as account on l_amort.id_account = account.id @@ -90,17 +110,9 @@ {{/foreach}} {{:assign filter_condition=$filter_condition|cat:"0)"}} +{{:assign autres_amortissements=false}} {{#select - line.id as l_id, - line.id_transaction as t_id, - line.credit as amort_amount, - line.label as l_label, - trans.date as t_date, - trans.label as t_label, - trans.id_year as amort_year, - account.id as account_id, - account.code as account_code, - account.label as account_label + line.id_transaction as t_id FROM acc_transactions_lines AS line INNER JOIN acc_accounts AS account ON account.id = line.id_account INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction @@ -108,17 +120,18 @@ WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16) AND !filter_condition ORDER BY trans.date, trans.label; !filter_condition=$filter_condition - assign=autre_amort }} {{#select id_transaction, id_related FROM acc_transactions_links - WHERE id_transaction = :id_amort OR id_related = :id_amort; + WHERE id_transaction = :id_amort OR id_related = :id_amort + LIMIT 1 + ; :id_amort=$t_id }} {{else}} - {{:assign var="autres_amortissements." value=$autre_amort}} + {{:assign autres_amortissements=true}} {{/select}} {{/select}} @@ -258,7 +271,7 @@ {{* Autres amortissements non rattachés *}} - {{if $autres_amortissements != null}} + {{if $autres_amortissements}}

Il existe des écritures d'amortissement qui ne sont pas rattachés à une immobilisation !
Utilisez le bouton « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation. diff --git a/balance_sheet_exit.html b/balance_sheet_exit.html index 3bb50a2..636a525 100644 --- a/balance_sheet_exit.html +++ b/balance_sheet_exit.html @@ -8,10 +8,13 @@ {{* Infos de l'immobilisation *}} {{#select line.debit as montant, + trans.id AS trans_id, trans.date as date_achat, - trans.label + trans.label, + account.code as account_code FROM acc_transactions_lines AS line INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + INNER JOIN acc_accounts AS account ON line.id_account = account.id WHERE line.id = :line_id; :line_id = $_GET.immo_id|intval assign="ligne_immo" @@ -27,11 +30,31 @@ {{:assign ts_mes=$date|strtotime}} {{:assign date_debut=$date}} {{:assign duree_amort=$duration}} - {{if $amount != null}} - {{:assign var="ligne_immo.montant" value=$amount}} - {{/if}} {{/load}} +{{* chercher des écritures liées à l'immo courante au crédit du même compte + et déduire leur montant de celui de l'immo +*}} +{{:assign total_credits=0}} +{{#select + CASE links.id_related = :immo_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as other_id, + line.credit + FROM acc_transactions AS trans + INNER JOIN acc_transactions_links as links + ON (trans.id = links.id_transaction OR trans.id = links.id_related) + INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE trans.id = :immo_id AND line.credit > 0 AND acc.code = :account; + :immo_id=$ligne_immo.trans_id + :account=$ligne_immo.account_code +}} + {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} +{{/select}} +{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}} + {{* chercher des écritures d'amortissement liées à l'immobilisation *}} {{#select SUM(l_amort.credit) as amort_amount, @@ -46,9 +69,7 @@ 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) + ON (t_immo.id = links.id_transaction OR t_immo.id = links.id_related) INNER JOIN acc_transactions_lines as l_amort on amort_trans_id = l_amort.id_transaction INNER join acc_transactions as trans on l_amort.id_transaction = trans.id INNER JOIN acc_accounts AS account ON l_amort.id_account = account.id diff --git a/compute_exit_data.html b/compute_exit_data.html index 66e0105..a0fc557 100644 --- a/compute_exit_data.html +++ b/compute_exit_data.html @@ -14,10 +14,13 @@ {{#select line.debit as montant, + trans.id AS trans_id, trans.date as date_achat, - trans.label + trans.label, + account.code as account_code FROM acc_transactions_lines AS line INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + INNER JOIN acc_accounts AS account ON line.id_account = account.id WHERE line.id = :line_id; :line_id = $_GET.immo_id|intval assign="ligne_immo" @@ -25,11 +28,29 @@ {{else}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}} {{/select}} -{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}} - {{if $amount != null}} - {{:assign var="ligne_immo.montant" value=$amount}} - {{/if}} -{{/load}} + +{{* 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 total_credits=0}} +{{#select + CASE links.id_related = :immo_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as other_id, + line.credit + FROM acc_transactions AS trans + INNER JOIN acc_transactions_links as links + ON (trans.id = links.id_transaction OR trans.id = links.id_related) + INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE trans.id = :immo_id AND line.credit > 0 AND acc.code = :account; + :immo_id=$ligne_immo.trans_id + :account=$ligne_immo.account_code + }} + {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} +{{/select}} +{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$_GET.amort_amount}} {{:assign amort_comp=0}} {{* amortissement complémentaire jqà date sortie *}} diff --git a/write_exit.html b/write_exit.html index 3bc0627..60f8be2 100644 --- a/write_exit.html +++ b/write_exit.html @@ -16,10 +16,10 @@ {{#select line.debit as montant, line.id_transaction, - line.id_account, + trans.id AS trans_id, trans.date as date_achat, trans.label, - acc.code, + acc.code as account_code, id_project FROM acc_transactions_lines AS line INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id @@ -30,11 +30,28 @@ }} {{/select}} -{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}} - {{if $amount != null}} - {{:assign var="ligne_immo.montant" value=$amount}} - {{/if}} -{{/load}} +{{* 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 total_credits=0}} +{{#select + CASE links.id_related = :immo_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as other_id, + line.credit + FROM acc_transactions AS trans + INNER JOIN acc_transactions_links as links + ON (trans.id = links.id_transaction OR trans.id = links.id_related) + INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id + INNER JOIN acc_accounts AS acc ON line.id_account = acc.id + WHERE trans.id = :immo_id AND line.credit > 0 AND acc.code = :account; + :immo_id=$ligne_immo.trans_id + :account=$ligne_immo.account_code + }} + {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} +{{/select}} +{{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$_GET.amort_amount}} {{:assign amort_comp=0}} {{* amortissement complémentaire jqà date sortie *}} @@ -265,14 +282,11 @@ {{:include file="./_get_amort_code.html" - code_immo=$ligne_immo.code + code_immo=$ligne_immo.account_code keep="code_amort" }} -{{* - Utilisation des « anciens » numéros de comptes because conflit - avec les nouveaux numéros ; voir info.org -*}} +{{* numéros de comptes ; voir info.org *}} {{:assign vnc_code="652"}} {{:assign cession_code="757"}} @@ -280,7 +294,7 @@ {{:assign var="liste_codes.687" name="except_account"}} {{:assign var="liste_codes.462" name="creance_account"}} {{:assign var="liste_codes.%s"|args:$code_amort name="amort_account"}} -{{:assign var="liste_codes.%s"|args:$ligne_immo.code name="immo_account"}} +{{:assign var="liste_codes.%s"|args:$ligne_immo.account_code name="immo_account"}} {{:assign var="liste_codes.%s"|args:$vnc_code name="vnc_account"}} {{:assign var="liste_codes.%s"|args:$cession_code name="cession_account"}} {{:assign condition=$liste_codes|keys|implode:","}} From 8cf313502e73c64d40665937e4698003f11a9417 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Fri, 13 Feb 2026 14:53:05 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Am=C3=A9liorations=20mineures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _nav.html | 2 +- add_infos.html | 2 +- module.ini | 2 +- transfer.html | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/_nav.html b/_nav.html index 57a6f51..a7894b5 100644 --- a/_nav.html +++ b/_nav.html @@ -7,7 +7,7 @@ {{elseif $subsubcurrent == "amortization" && $type_immo == null || $type_immo == "managed" || $type_immo == "other"}}