From a15254f372bc0f99ba1cd74b0fbf2c94a77e68a6 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Thu, 4 Jun 2026 11:26:45 +0200 Subject: [PATCH] =?UTF-8?q?Traitement=20=C3=A9critures=20sorties=20du=20bi?= =?UTF-8?q?lan=20avant=20mise=20en=20service=20du=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _common_detach.html | 51 +++++ add_infos.html | 76 ++++--- attach_amort.html | 6 +- attach_immo.html => attach_credit.html | 36 +++- attach_exit.html | 61 ++++++ detach_amort.html | 52 +---- detach_credit.html | 32 +++ detach_exit.html | 21 ++ detach_immo.html | 64 ------ exit_step1.html | 222 +++++++++++++++++++ exit_step2.html | 246 +++++++++++++++++++++ exit_step3.html | 288 +++++++++++++++++++++++++ link_immo.html | 2 +- 13 files changed, 1011 insertions(+), 146 deletions(-) create mode 100644 _common_detach.html rename attach_immo.html => attach_credit.html (77%) create mode 100644 attach_exit.html create mode 100644 detach_credit.html create mode 100644 detach_exit.html delete mode 100644 detach_immo.html create mode 100644 exit_step1.html create mode 100644 exit_step2.html create mode 100644 exit_step3.html diff --git a/_common_detach.html b/_common_detach.html new file mode 100644 index 0000000..b4e80d0 --- /dev/null +++ b/_common_detach.html @@ -0,0 +1,51 @@ +{{* -*- brindille -*- *}} + +{{* + Supprimer l'association entre deux lignes + @param immo_doc_id : id du doc associé à la ligne d'immobilisation + @param line_id : id de la ligne à détacher +*}} +{{* 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 la deuxième écriture *}} +{{#select + id_transaction + FROM acc_transactions_lines + WHERE id = :line_id; + :line_id = $line_id|intval +}} + {{:assign trans_id=$id_transaction}} +{{else}} + {{:error message="Écriture non trouvée"}} +{{/select}} + +{{* + chercher les liaisons de l'écriture d'immobilisation + et supprimer la liaison avec la deuxième écriture +*}} +{{#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 + }} + {{if $linked_id != $trans_id}} + {{:assign var="linked_transactions." value=$linked_id}} + {{/if}} +{{/select}} + +{{* 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 +}} diff --git a/add_infos.html b/add_infos.html index e06b6bb..382025b 100644 --- a/add_infos.html +++ b/add_infos.html @@ -39,8 +39,11 @@ {{#form on="save"}} + {{if $_POST.classify == null}} + {{:error message="Vous devez faire un choix de classement"}} + {{/if}} - {{if ! $_POST.amortir}} + {{if $_POST.classify == "ignored"}} {{* ne pas amortir *}} {{:assign duration=0}} {{:assign libelle=null}} @@ -48,8 +51,20 @@ {{:assign date_achat=null}} {{:assign date_mes=null}} {{:assign status="ignored"}} + {{elseif $_POST.classify == "archived"}} + {{* immobilisation sortie du bilan *}} + {{:save + key=""|uuid + validate_schema="schema.json" + type="immo" + line=$_GET.immo_line_id|intval + duration=0 + status="archived" + assign_new_id="immo_doc_id" + }} + {{:redirect force="exit_step1.html?immo_doc_id=%s"|args:$immo_doc_id}} {{else}} - + {{* immobilisation amortissable *}} {{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}} @@ -152,10 +167,13 @@
#{{$ligne_immo.immo_trans_id}} {{$ligne_immo.trans_label}}{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $ligne_immo.trans_label}} — {{$ligne_immo.line_label}}{{/if}}
Montant
{{"%f"|math:$ligne_immo.montant|money_currency_html:false|raw}}
-
Montant déjà affecté
-
{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}
-
Montant restant à affecter
-
{{"%f"|math:$reste|money_currency_html:false|raw}}
Date de l'écriture d'immobilisation
+ {{if $montant_affecte > 0}} +
Montant déjà affecté
+
{{"%f"|math:$montant_affecte|money_currency_html:false|raw}}
+
Montant restant à affecter
+
{{"%f"|math:$reste|money_currency_html:false|raw}}
+ {{/if}} +
Date de l'écriture d'immobilisation
{{$ligne_immo.date_achat|date_short}}
Compte d'immobilisation
{{$ligne_immo.code}} — {{$ligne_immo.account_label}} @@ -164,26 +182,23 @@
- Amortissement -
- {{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 suffix="année(s)"}} -
+ Classement +
+
(obligatoire)
+ {{:input type="radio-btn" name="classify" value="managed" label="Immobilisation à amortir" help="Cette immobilisation sera classée parmi les immobilisations amortissables" default=$choix_defaut}} + {{:input type="radio-btn" name="classify" value="archived" label="Immobilisation sortie du bilan" help="Cette immobilisation sera classée parmi les immobilisations sorties du bilan" default=$choix_defaut}} + {{:input type="radio-btn" name="classify" value="ignored" label="Immobilisation à ignorer" help="Cette écriture n'apparaitra plus dans la liste des immobilisations" default=$choix_defaut}}
-
+ +
- Informations facultatives + Informations
+ {{:input type="number" name="duree" label="Durée d'amortissement" required=true min=1 suffix="année(s)"}} + {{:input type="money" name="montant" label="Montant de l'immobilisation" required=true default=$reste help="à modifier si différent du montant de l'écriture d'immobilisation"}} {{:input type="date" name="date_achat" label="Date d'acquisition" help="à renseigner uniquement si différente de la date de l'écriture d'immobilisation"}} {{:input type="date" name="date_mes" label="Date de mise en service" help="à renseigner uniquement si différente de la date d'acquisition"}} {{:input type="text" name="libelle" label="Libellé" help="à renseigner uniquement si différent du libellé de l'écriture d'immobilisation"}} - {{:input type="money" name="montant" label="Montant de l'immobilisation" required=true default=$reste}}
@@ -198,20 +213,23 @@ diff --git a/attach_amort.html b/attach_amort.html index 603dade..755ff70 100644 --- a/attach_amort.html +++ b/attach_amort.html @@ -143,7 +143,11 @@ }} {{/if}} - {{:redirect force="amortization.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=attach_amort"|args:$_GET.immo_doc_id:$status}} +{{if $_GET.from == "exit"}} + {{:redirect to="exit_step2.html?immo_doc_id=%s"|args:$_GET.immo_doc_id}} +{{else}} + {{:redirect to="amortization.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=attach_amort"|args:$_GET.immo_doc_id:$status}} +{{/if}} {{/form}} {{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}} diff --git a/attach_immo.html b/attach_credit.html similarity index 77% rename from attach_immo.html rename to attach_credit.html index 262b709..7cd7b16 100644 --- a/attach_immo.html +++ b/attach_credit.html @@ -1,5 +1,4 @@ {{* -*- brindille -*- *}} -{{:admin_header title="Écritures au crédit du compte d'immobilisation" custom_css="./style.css" current="module_amortization"}} {{* Enregistrer la liaison entre une ligne d'immobilisation et @@ -14,11 +13,15 @@ {{:error message=$message}} {{/if}} -{{:assign label_immo=$doc_immo.label|or:$ligne_immo.trans_label}} +{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} {{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}} {{:assign label_immo=$label_immo|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="total_credits"}} +{{:assign solde_immo="%d-%d"|math:$ligne_immo.amount:$total_credits}} + {{* chercher l'écriture au crédit du compte d'immobilisation *}} {{#select line.id_transaction as trans_id, @@ -32,13 +35,13 @@ assign="credit_line" }} {{else}} - {{:error message="Impossible de trouver l'écriture au crédit du compte de l'immobilisation de la ligne « %s »"|args:$ligne_immo.trans_label}} + {{:error message="Écriture au crédit non trouvée"}} {{/select}} {{:assign credit_trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$credit_line.trans_id}} {{* montant de l'écriture de crédit déjà affecté *}} {{:assign montant_affecte=0}} -{{#load type="credit_link" assign="linked_immo." +{{#load type="credit_link" where="$$.credit_line_id = :credit_line_id" :credit_line_id = $_GET.credit_line_id|intval }} @@ -48,15 +51,23 @@ {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} - {{* vérifier que le montant saisi est inférieur au reste *}} + {{if $_POST.montant == null}} {{if $montant_affecte == 0}} {{:assign saved_credit=null}} + {{:assign montant_credit=$credit_line.amount}} {{else}} {{:assign saved_credit=$reste}} + {{:assign montant_credit=$reste}} {{/if}} {{else}} {{:assign montant_credit=$_POST.montant|money_int}} + {{* vérifier que le montant saisi est inférieur au solde de l'écriture d'immobilisation *}} + {{if $montant_credit > $solde_immo}} + {{:assign solde_nb="%f"|math:$solde_immo|money_currency:false}} + {{:error message="Le montant de l'avoir ne peut être supérieur au montant de l'immobilisation (%s)"|args:$solde_nb}} + {{/if}} + {{* vérifier que le montant saisi est inférieur au reste de l'écriture de crédit *}} {{if $montant_credit > $reste}} {{:assign reste_nb="%f"|math:$reste|money_currency:false}} {{:error message="Le montant de l'avoir ne peut être supérieur au reste (%s)"|args:$reste_nb}} @@ -106,9 +117,22 @@ amount=$saved_credit }} -{{:redirect force="details_immo.html?immo_doc_id=%s&ok=1&msg=attach_immo"|args:$_GET.immo_doc_id}} +{{if $montant_credit == $solde_immo}} + {{:save + id=$_GET.immo_doc_id + status="archived" + }} +{{/if}} + +{{if $_GET.from == "exit"}} + {{:redirect force="exit_step1.html?immo_doc_id=%s"|args:$_GET.immo_doc_id}} +{{else}} + {{:redirect to="amortization.html?immo_doc_id=%s&ok=1&msg=attach_avoir"|args:$_GET.immo_doc_id}} +{{/if}} +{{*:redirect to="details_immo.html?immo_doc_id=%s&ok=1&msg=attach_credit"|args:$_GET.immo_doc_id*}} {{/form}} +{{:admin_header title="Écritures au crédit du compte d'immobilisation" custom_css="./style.css" current="module_amortization"}} {{if ! $dialog}} {{:include file="_nav.html" diff --git a/attach_exit.html b/attach_exit.html new file mode 100644 index 0000000..11bc17c --- /dev/null +++ b/attach_exit.html @@ -0,0 +1,61 @@ +{{* -*- brindille -*- *}} + +{{* + Enregistrer la liaison entre une écriture d'immobilisation et + une écriture de sortie d'immobilisation + @param immo_doc_id : id du document associé à l'immobilisation + @param exit_line_id : ligne de l'écriture de sortie d'immobilisation +*}} + +{{* données de l'immobilisation *}} +{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}} +{{if $message != null}} + {{:error message=$message}} +{{/if}} + +{{* chercher l'écriture de sortie d'immobilisation *}} +{{#select + id_transaction + FROM acc_transactions_lines + WHERE id = :line_id; + :line_id = $_GET.exit_line_id|intval +}} + {{:assign rebut_id=$id_transaction}} +{{else}} + {{:error message="Impossible de trouver l'écriture de sortie d'immobilisation"}} +{{/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 + 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 *}} +{{:save + key=""|uuid + type="exit_link" + immo_doc_id=$info_immo.id + exit_line_id=$_GET.exit_line_id|intval +}} + +{{:redirect to="exit_step3.html?immo_doc_id=%s&ok=1&msg=attach_exit"|args:$_GET.immo_doc_id}} diff --git a/detach_amort.html b/detach_amort.html index b2e65c8..14be3bc 100644 --- a/detach_amort.html +++ b/detach_amort.html @@ -7,50 +7,7 @@ @param amort_line_id : id de la ligne d'amortissement *}} -{{* 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}} - -{{* écriture d'amortissement *}} -{{#select - id_transaction - FROM acc_transactions_lines - WHERE id = :line_id; - :line_id = $_GET.amort_line_id|intval -}} - {{:assign amort_id=$id_transaction}} -{{else}} - {{:error message="Amortissement non trouvé"}} -{{/select}} - -{{* - chercher les liaisons de l'écriture d'immobilisation - et supprimer la liaison avec l'écriture d'amortissement -*}} -{{#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 - }} - {{if $linked_id != $amort_id}} - {{:assign var="linked_transactions." value=$linked_id}} - {{/if}} -{{/select}} - -{{* 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 -}} +{{:include file="_common_detach.html" immo_doc_id=$_GET.immo_doc_id line_id=$_GET.amort_line_id}} {{* supprimer le doc de liaison entre les lignes *}} {{#load type="amort_link" @@ -62,9 +19,14 @@ {{/load}} {{* marquer immo non soldée *}} +{{* TODO : À VÉRIFIER *}} {{:save key=$info_immo.key status="managed" }} -{{:redirect to="amortization.html?immo_doc_id=%s&ok=1&msg=detach"|args:$_GET.immo_doc_id:}} +{{if $_GET.from == "exit"}} + {{:redirect to="exit_step2.html?immo_doc_id=%s"|args:$_GET.immo_doc_id}} +{{else}} + {{:redirect to="amortization.html?immo_doc_id=%s&ok=1&msg=detach_amort"|args:$_GET.immo_doc_id:}} +{{/if}} diff --git a/detach_credit.html b/detach_credit.html new file mode 100644 index 0000000..fb13fcc --- /dev/null +++ b/detach_credit.html @@ -0,0 +1,32 @@ +{{* -*- brindille -*- *}} + +{{* + Supprimer l'association entre une écriture d'immobilisation et + une écriture au crédit du compte d'immobilisation + @param immo_doc_id : id du doc associé à l'immo + @param credit_line_id : id de la ligne de crédit +*}} + +{{:include file="_common_detach.html" immo_doc_id=$_GET.immo_doc_id line_id=$_GET.credit_line_id}} + +{{* supprimer le doc de liaison entre les lignes *}} +{{#load type="credit_link" + where="$$.immo_doc_id = :immo_doc_id AND $$.credit_line_id = :credit_line_id" + :immo_doc_id=$_GET.immo_doc_id|intval + :credit_line_id = $_GET.credit_line_id|intval +}} + {{:delete id=$id}} +{{/load}} + +{{* TODO : À VÉRIFIER *}} +{{:save + id=$_GET.immo_doc_id|intval + status="managed" +}} + +{{if $_GET.from == "exit"}} + {{:redirect to="exit_step1.html?immo_doc_id=%s"|args:$_GET.immo_doc_id}} +{{else}} + {{:redirect to="amortization.html?immo_doc_id=%s&ok=1&msg=detach_avoir&"|args:$_GET.immo_doc_id}} +{{/if}} +{{*:redirect to="details_immo.html?immo_doc_id=%s&ok=1&msg=detach&"|args:$_GET.immo_doc_id*}} diff --git a/detach_exit.html b/detach_exit.html new file mode 100644 index 0000000..486fc7c --- /dev/null +++ b/detach_exit.html @@ -0,0 +1,21 @@ +{{* -*- brindille -*- *}} + +{{* + Supprimer l'association entre une écriture d'immobilisation et + une écriture de sortie de bilan + @param immo_doc_id : id du doc associé à l'immo + @param exit_line_id : id de la ligne de sortie de bilan +*}} + +{{:include file="_common_detach.html" immo_doc_id=$_GET.immo_doc_id line_id=$_GET.exit_line_id}} + +{{* supprimer le doc de liaison entre les lignes *}} +{{#load type="exit_link" + where="$$.immo_doc_id = :immo_doc_id AND $$.exit_line_id = :exit_line_id" + :immo_doc_id=$_GET.immo_doc_id|intval + :exit_line_id = $_GET.exit_line_id|intval +}} + {{:delete id=$id}} +{{/load}} + +{{:redirect to="exit_step3.html?immo_doc_id=%s&ok=1&msg=detach_exit"|args:$_GET.immo_doc_id}} diff --git a/detach_immo.html b/detach_immo.html deleted file mode 100644 index 4475615..0000000 --- a/detach_immo.html +++ /dev/null @@ -1,64 +0,0 @@ -{{* -*- brindille -*- *}} - -{{* - Supprimer l'association entre une écriture d'immobilisation et - une écriture au crédit du compte d'immobilisation - @param immo_doc_id : id du doc associé à l'immo - @param credit_line_id : id de la ligne de crédit -*}} - -{{* 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}} - -{{* chercher l'écriture au crédit *}} -{{#select - id_transaction - FROM acc_transactions_lines - WHERE id = :line_id; - :line_id = $_GET.credit_line_id|intval -}} - {{:assign credit_id=$id_transaction}} -{{else}} - {{:error message="Écriture au crédit non trouvée"}} -{{/select}} - -{{* - chercher les liaisons de l'écriture d'immobilisation - et supprimer la liaison avec l'écriture au crédit -*}} -{{#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 - }} - {{if $linked_id != $credit_id}} - {{:assign var="linked_transactions." value=$linked_id}} - {{/if}} -{{/select}} - -{{* 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 -}} - -{{* supprimer le doc de liaison entre les lignes *}} -{{#load type="credit_link" - where="$$.immo_doc_id = :immo_doc_id AND $$.credit_line_id = :credit_line_id" - :immo_doc_id=$_GET.immo_doc_id|intval - :credit_line_id = $_GET.credit_line_id|intval -}} - {{:delete id=$id}} -{{/load}} - -{{:redirect to="details_immo.html?immo_doc_id=%s&ok=1&msg=detach&"|args:$_GET.immo_doc_id}} diff --git a/exit_step1.html b/exit_step1.html new file mode 100644 index 0000000..c736e67 --- /dev/null +++ b/exit_step1.html @@ -0,0 +1,222 @@ +{{* -*- brindille -*- *}} + +{{* + Associer les différentes écritures à une immo créée et sortie du + bilan avant la mise en service du module + @param immo_doc_id : id du doc associé à l'immobilisation +*}} + +{{* données de l'immobilisation *}} +{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}} +{{if $message != null}} + {{:error message=$message}} +{{/if}} + +{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} +{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}} + {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} +{{/if}} +{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}} +{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}} +{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}} + +{{* 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:$montant_immo:$total_credits}} + +{{* 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"}} + +{{* chercher des écritures au crédit du compte de l'immo sans doc associé *}} +{{* + - line.credit < ligne_immo.amount => peut-être un avoir + - line.credit = ligne_immo.amount - avoirs => écriture de sortie du bilan + *}} +{{#select + trans.id as trans_id, + trans.label as trans_label, + trans.date as date, + trans.id_year as year, + line.id as credit_line_id, + line.label as line_label, + line.credit as amount, + acc.id as account_id, + acc.code as account_code, + acc.label as account_label + FROM acc_transactions AS trans + 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 + LEFT JOIN module_data_amortization AS mda ON json_extract(mda.document, '$.amort_line_id') = line.id + WHERE + acc.code = :acc_code + AND line.credit > 0 + AND credit_line_id NOT IN ( + SELECT json_extract(link.document, '$.credit_line_id') AS line_id FROM !table as link + WHERE json_extract(link.document, '$.type') == "credit_link") + ; + :acc_code=$ligne_immo.account_code + !table =$module.table + assign="credit_line" + }} + {{if $credit_line.amount < $solde}} + {{:assign var="credit_lines." value=$credit_line}} + {{elseif $credit_line.amount == $solde}} + {{:assign var="exit_lines." value=$credit_line}} + {{/if}} +{{/select}} + +{{* 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" +}} + +{{* chercher des écritures d'amortissement correspondant au compte d'une immo sans doc associé *}} +{{* TODO écritures d'amort pas entièrement affectées *}} +{{#select + line.id as amort_line_id, + line.credit as amort_amount, + line.label as line_label, + trans.id as amort_trans_id, + trans.date as date, + trans.label as trans_label, + trans.id_year as year, + account.id as account_id, + account.code as account_code, + account.label as account_label + FROM acc_transactions_lines AS line + INNER JOIN acc_accounts AS account ON line.id_account = account.id + INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + WHERE + account.code = :code_amort + AND line.credit > 0 + AND (NOT trans.status & 16) + AND trans.date >= :immo_date + ; + :code_amort = $code_amort + :immo_date=$date_immo + assign="amort_line" +}} + {{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}} + {{:assign amort_amount=0}} + {{:assign keep_amort=true}} + {{#load type="amort_link" + where="$$.amort_line_id = :amort_line_id" + :amort_line_id=$amort_line.amort_line_id|intval + assign="amort_link" + }} + {{if $amort_link.amount == null || $amort_link.amount == 0}} + {{:assign amort_amount=$amort_line.amort_amount}} + {{:assign keep_amort=false}} + {{else}} + {{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}} + {{/if}} + {{else}} + {{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}} + {{/load}} + {{if $keep_amort && $amort_amount < $amort_line.amort_amount}} + {{:assign var="free_amort_lines." value=$amort_line}} + {{/if}} +{{/select}} + +{{:admin_header title="Immobilisation sortie du bilan" custom_css="./style.css" current="module_amortization"}} + +
+
+
Immobilisation
+
#{{$ligne_immo.trans_id}} {{$label_immo}}
+
Compte d'immobilisation
+
{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}
+
Montant de l'immobilisation
+
{{$ligne_immo.amount|money_html|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}} + {{if $total_amort > 0}} +
Montant des amortissements
+
{{$total_amort|money_currency_html:false|raw}}
+
Valeur nette résiduelle
+
{{"%d-%d"|math:$solde:$total_amort|money_currency_html:false|raw}}
+ {{/if}} +
+
+ +{{if $linked_immos != null}} +

Écritures d'avoir attachées à l'immobilisation

+{{/if}} + +{{if $linked_immos != null}} + + + + + + + + + + {{#foreach from=$linked_immos item="line"}} + {{:assign url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.trans_id}} + + + + + + + + {{/foreach}} + +
DateLibelléMontant
#{{$line.trans_id}}{{$line.date|date_short}}{{$line.label}}{{"%f"|math:$line.amount|money_currency_html:false|raw}} + {{:linkbutton label="Détacher" href="detach_credit.html?immo_doc_id=%s&credit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.credit_line_id shape="minus"}} +
+{{else}} +

+ Vous pouvez attacher une ou plusieurs écritures d'avoir à votre immobilisation +

+{{/if}} + +{{if $credit_lines}} +

Écritures au crédit du compte d'immobilisation

+ + + + + + + + + + + + + + {{#foreach from=$credit_lines}} + {{:assign credit_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:$year}} + + + + + + + + + + {{/foreach}} + +
DateLibelléMontantN° compteCompte
#{{$trans_id}}{{$date|date_short}}{{$trans_label}} + {{if $line_label != null && $line_label != $trans_label}} — {{$line_label}}{{/if}} + {{$amount|money_html|raw}}{{$account_code}}{{$account_label}} + {{:linkbutton label="Attacher" href="attach_credit.html?immo_doc_id=%s&credit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$credit_line_id shape="plus" target="_dialog"}} +
+{{/if}} + + +

+ {{:button type="submit" name="proceed" label="Poursuivre" shape="right" class="main"}} +

+
diff --git a/exit_step2.html b/exit_step2.html new file mode 100644 index 0000000..72deafe --- /dev/null +++ b/exit_step2.html @@ -0,0 +1,246 @@ +{{* -*- brindille -*- *}} + +{{* + Associer les différentes écritures à une immo créée avant la mise + en service du module et sortie du bilan + @param immo_doc_id : id du doc associé à l'immobilisation +*}} + +{{* données de l'immobilisation *}} +{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="ligne_immo, message"}} +{{if $message != null}} + {{:error message=$message}} +{{/if}} +{{* voir si un document a été associé à l'immo *}} +{{#load id=$ligne_immo.line_id assign="info_immo"}}{{/load}} + +{{#form on="backward"}} + {{:redirect to="exit_step1.html?immo_doc_id=%s"|args:$_GET.immo_doc_id}} +{{/form}} + +{{#form on="forward"}} + {{:redirect to="exit_step3.html?immo_doc_id=%s"|args:$_GET.immo_doc_id}} +{{/form}} + +{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} +{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}} + {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} +{{/if}} +{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}} +{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}} +{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}} + +{{* 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:$montant_immo:$total_credits}} + +{{* 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"}} + +{{* + chercher des écritures au crédit du compte de l'immo sans doc associé + - line.credit < ligne_immo.amount => peut-être un avoir + - line.credit = ligne_immo.amount - avoirs => écriture de sortie du bilan +*}} +{{#select + trans.id as trans_id, + trans.label as trans_label, + trans.date as date, + trans.id_year as year, + line.id as credit_line_id, + line.label as line_label, + line.credit as amount, + acc.id as account_id, + acc.code as account_code, + acc.label as account_label + FROM acc_transactions AS trans + 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 + LEFT JOIN module_data_amortization AS mda ON json_extract(mda.document, '$.amort_line_id') = line.id + WHERE + acc.code = :acc_code + AND line.credit > 0 + AND credit_line_id NOT IN ( + SELECT json_extract(link.document, '$.credit_line_id') AS line_id FROM !table as link + WHERE json_extract(link.document, '$.type') == "credit_link") + ; + :acc_code=$ligne_immo.account_code + !table =$module.table + assign="credit_line" + }} + {{if $credit_line.amount < $solde}} + {{:assign var="credit_lines." value=$credit_line}} + {{elseif $credit_line.amount == $solde}} + {{:assign var="exit_lines." value=$credit_line}} + {{/if}} +{{/select}} + +{{* 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" +}} + +{{* chercher des écritures d'amortissement correspondant au compte d'une immo sans doc associé *}} +{{* TODO écritures d'amort pas entièrement affectées *}} +{{#select + line.id as amort_line_id, + line.credit as amort_amount, + line.label as line_label, + trans.id as amort_trans_id, + trans.date as date, + trans.label as trans_label, + trans.id_year as year, + account.id as account_id, + account.code as account_code, + account.label as account_label + FROM acc_transactions_lines AS line + INNER JOIN acc_accounts AS account ON line.id_account = account.id + INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + WHERE + account.code = :code_amort + AND line.credit > 0 + AND (NOT trans.status & 16) + AND trans.date >= :immo_date + ; + :code_amort = $code_amort + :immo_date=$date_immo + assign="amort_line" +}} + {{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}} + {{:assign amort_amount=0}} + {{:assign keep_amort=true}} + {{#load type="amort_link" + where="$$.amort_line_id = :amort_line_id" + :amort_line_id=$amort_line.amort_line_id|intval + assign="amort_link" + }} + {{if $amort_link.amount == null || $amort_link.amount == 0}} + {{:assign amort_amount=$amort_line.amort_amount}} + {{:assign keep_amort=false}} + {{else}} + {{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}} + {{/if}} + {{else}} + {{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}} + {{/load}} + {{if $keep_amort && $amort_amount < $amort_line.amort_amount}} + {{:assign var="free_amort_lines." value=$amort_line}} + {{/if}} +{{/select}} + +{{:admin_header title="Immobilisation sortie du bilan" custom_css="./style.css" current="module_amortization"}} + +
+
+
Immobilisation
+
#{{$ligne_immo.trans_id}} {{$label_immo}}
+
Compte d'immobilisation
+
{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}
+
Montant de l'immobilisation
+
{{$ligne_immo.amount|money_html|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}} + {{if $total_amort > 0}} +
Montant des amortissements
+
{{$total_amort|money_currency_html:false|raw}}
+
Valeur nette résiduelle
+
{{"%d-%d"|math:$solde:$total_amort|money_currency_html:false|raw}}
+ {{/if}} +
+
+ +{{if $linked_amort != null}} +

Écritures d'amortissement attachées à l'immobilisation

+ + + + + + + + + + + + + + {{#foreach from=$linked_amort|ksort item="line"}} + {{* données de l'écriture *}} + {{: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}} + + + + + + + + + + {{/foreach}} + +
DateLibelléMontantN° compteCompte
#{{$line.trans_id}}{{$line.date|date_short}} + {{if $line.line_label != null}} + {{$line.line_label}} + {{else}} + {{$line.trans_label}} + {{/if}} + {{"%f"|math:$line.amount|money_html:false|raw}}{{$line.account_code}}{{$line.account_label}} + {{:linkbutton label="Détacher" href="detach_amort.html?immo_doc_id=%s&amort_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.line_id shape="minus"}} +
+{{else}} +

+ Vous pouvez attacher une ou plusieurs écritures d'amortissement à votre immobilisation +

+{{/if}} + +

Autres écritures d'amortissements

+ +{{if $free_amort_lines}} + + + + + + + + + + + + + + + {{#foreach from=$free_amort_lines item="line"}} + {{:assign amort_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$line.amort_trans_id}} + {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$line.account_id:$line.year}} + + + + + + + + + + {{/foreach}} + +
DateLibelléMontantN° compteCompte
#{{$line.amort_trans_id}}{{$line.date|date_short}}{{$line.trans_label}} + {{if $line.line_label != null && $line.line_label != $line.trans_label}} — {{$line.line_label}}{{/if}} + {{"%f"|math:$line.amort_amount|money_html:false|raw}}{{$line.account_code}}{{$line.account_label}} + {{:linkbutton label="Attacher" href="attach_amort.html?immo_doc_id=%s&amort_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.amort_line_id shape="plus" target="_dialog"}} +
+{{/if}} + +
+

+ {{:button type="submit" name="backward" label="Revenir à l'étape précédente" shape="left" class="main"}} + {{:button type="submit" name="forward" label="Poursuivre" shape="right" class="main"}} +

+
diff --git a/exit_step3.html b/exit_step3.html new file mode 100644 index 0000000..045cdc5 --- /dev/null +++ b/exit_step3.html @@ -0,0 +1,288 @@ +{{* -*- brindille -*- *}} + +{{* + Associer les différentes écritures à une immo créée avant la mise + en service du module et sortie du bilan + @param immo_doc_id : id du doc associé à l'immobilisation +*}} + +{{* + TODO : affichage après attachement écriture sortie bilan (ligne attachée, bouton détacher) +*}} + +{{* données de l'immobilisation *}} +{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}} +{{if $message != null}} + {{:error message=$message}} +{{/if}} + +{{#form on="backward"}} + {{:redirect to="exit_step2.html?immo_doc_id=%s"|args:$_GET.immo_doc_id}} +{{/form}} + +{{#form on="validate"}} + {{* mettre à jour l'état de l'immobilisation *}} + {{:save + key=$info_immo.key + status="archived" + }} + {{:redirect to="index.html?type_immo=archived"}} +{{/form}} + +{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}} +{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}} + {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} +{{/if}} +{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}} +{{:assign date_immo=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}} +{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}} + +{{* 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:$montant_immo:$total_credits}} + +{{* 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"}} + +{{* chercher une écriture de sortie de bilan associée *}} +{{#load type="exit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id=$info_immo.id assign="exit_info"}} +{{/load}} +{{if $exit_info != null}} + {{#select + trans.id as trans_id, + trans.label as trans_label, + trans.date as date, + line.id as line_id, + line.label as line_label, + line.credit as amount, + acc.id as account_id, + acc.code as account_code, + acc.label as account_label + FROM acc_transactions AS trans + 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.id = :exit_line_id; + :exit_line_id = $exit_info.exit_line_id + assign="exit_line" + }} + {{/select}} +{{/if}} + +{{* chercher des écritures au crédit du compte de l'immo sans doc associé *}} +{{* + - line.credit < ligne_immo.amount => peut-être un avoir + - line.credit = ligne_immo.amount - avoirs => écriture de sortie du bilan + *}} +{{#select + trans.id as trans_id, + trans.label as trans_label, + trans.date as date, + trans.id_year as year, + line.id as credit_line_id, + line.label as line_label, + line.credit as amount, + acc.id as account_id, + acc.code as account_code, + acc.label as account_label + FROM acc_transactions AS trans + 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 + LEFT JOIN module_data_amortization AS mda ON json_extract(mda.document, '$.amort_line_id') = line.id + WHERE + acc.code = :acc_code + AND line.credit > 0 + AND credit_line_id NOT IN ( + SELECT json_extract(credit_link.document, '$.credit_line_id') AS line_id FROM !table as credit_link + WHERE json_extract(credit_link.document, '$.type') == "credit_link" + UNION + SELECT json_extract(exit_link.document, '$.exit_line_id') AS line_id FROM !table as exit_link + WHERE json_extract(exit_link.document, '$.type') == "exit_link" + ) + ; + :acc_code=$ligne_immo.account_code + !table =$module.table + assign="credit_line" + }} + {{if $credit_line.amount < $solde}} + {{:assign var="credit_lines." value=$credit_line}} + {{elseif $credit_line.amount == $solde}} + {{:assign var="exit_lines." value=$credit_line}} + {{/if}} +{{/select}} + +{{* 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" +}} + +{{* chercher des écritures d'amortissement correspondant au compte d'une immo sans doc associé *}} +{{* TODO écritures d'amort pas entièrement affectées *}} +{{#select + line.id as amort_line_id, + line.credit as amort_amount, + line.label as line_label, + trans.id as amort_trans_id, + trans.date as date, + trans.label as trans_label, + trans.id_year as year, + account.id as account_id, + account.code as account_code, + account.label as account_label + FROM acc_transactions_lines AS line + INNER JOIN acc_accounts AS account ON line.id_account = account.id + INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + WHERE + account.code = :code_amort + AND line.credit > 0 + AND (NOT trans.status & 16) + AND trans.date >= :immo_date + ; + :code_amort = $code_amort + :immo_date=$date_immo + assign="amort_line" +}} + {{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}} + {{:assign amort_amount=0}} + {{:assign keep_amort=true}} + {{#load type="amort_link" + where="$$.amort_line_id = :amort_line_id" + :amort_line_id=$amort_line.amort_line_id|intval + assign="amort_link" + }} + {{if $amort_link.amount == null || $amort_link.amount == 0}} + {{:assign amort_amount=$amort_line.amort_amount}} + {{:assign keep_amort=false}} + {{else}} + {{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}} + {{/if}} + {{else}} + {{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}} + {{/load}} + {{if $keep_amort && $amort_amount < $amort_line.amort_amount}} + {{:assign var="free_amort_lines." value=$amort_line}} + {{/if}} +{{/select}} + +{{:admin_header title="Immobilisation sortie du bilan" custom_css="./style.css" current="module_amortization"}} + +{{if $_GET.ok}} + {{if $_GET.msg|match:"attach_exit"}} + {{:assign msg="Écriture de sortie de bilan attachée"}} + {{elseif $_GET.msg|match:"detach_exit"}} + {{:assign msg="Écriture de sortie de bilan détachée"}} + {{/if}} +

{{$msg}}

+{{/if}} + +
+
+
Immobilisation
+
#{{$ligne_immo.trans_id}} {{$label_immo}}
+
Compte d'immobilisation
+
{{$ligne_immo.account_code}} — {{$ligne_immo.account_label}}
+
Montant de l'immobilisation
+
{{$ligne_immo.amount|money_html|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}} + {{if $total_amort > 0}} +
Montant des amortissements
+
{{$total_amort|money_currency_html:false|raw}}
+
Valeur nette résiduelle
+
{{"%d-%d"|math:$solde:$total_amort|money_currency_html:false|raw}}
+ {{/if}} +
+
+ +{{if $exit_line != null}} +

Écriture de sortie du bilan attachée à l'immobilisation

+ + + + + + + + + + + + + + + + + + + + + + + +
DateLibelléMontantN° compteCompte
#{{$exit_line.trans_id}}{{$exit_line.date|date_short}} + {{if $exit_line.line_label != null}} + {{$exit_line.line_label}} + {{else}} + {{$exit_line.trans_label}} + {{/if}} + {{"%f"|math:$exit_line.amount|money_html:false|raw}}{{$exit_line.account_code}}{{$exit_line.account_label}} + {{:linkbutton label="Détacher" href="detach_exit.html?immo_doc_id=%s&exit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$exit_line.line_id shape="minus"}} +
+{{else}} +

+ Vous pouvez attacher une écriture de sortie du bilan à votre immobilisation +

+{{/if}} + +{{if $exit_lines}} +

Écritures non rattachées

+ + + + + + + + + + + + + + + {{#foreach from=$exit_lines item="line"}} + {{:assign exit_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}} + + + + + + + + + + {{/foreach}} + +
DateLibelléMontantN° compteCompte
#{{$line.trans_id}}{{$line.date|date_short}}{{$line.trans_label}} + {{if $line.line_label != null && $line.line_label != $line.trans_label}} — {{$line.line_label}}{{/if}} + {{"%f"|math:$line.amount|money_html:false|raw}}{{$line.account_code}}{{$line.account_label}} + {{:linkbutton label="Attacher" href="attach_exit.html?immo_doc_id=%s&exit_line_id=%s&from=exit"|args:$_GET.immo_doc_id:$line.credit_line_id shape="plus"}} +
+{{elseif $exit_line == null}} +

Aucune écriture de sortie du bilan

+{{/if}} + +
+

+ {{:button type="submit" name="backward" label="Revenir à l'étape précédente" shape="left" class="main"}} + {{if $exit_line}} + {{:button type="submit" name="validate" label="Valider" shape="check" class="main"}} + {{/if}} +

+
diff --git a/link_immo.html b/link_immo.html index e58a662..a05eab1 100644 --- a/link_immo.html +++ b/link_immo.html @@ -99,7 +99,7 @@ {{$line.account_code}} {{$line.account_label}} - {{:linkbutton label="Attacher" href="attach_immo.html?credit_line_id=%d&immo_doc_id=%s"|args:$line.credit_line_id:$_GET.immo_doc_id shape="plus"}} + {{:linkbutton label="Attacher" href="attach_credit.html?credit_line_id=%d&immo_doc_id=%s"|args:$line.credit_line_id:$_GET.immo_doc_id shape="plus"}} {{/foreach}}