{{* -*- brindille -*- *}} {{* Enregistrer la liaison entre une ligne d'écriture d'amortissement et une ligne d'écriture d'immobilisation @param immo_line_id : numéro de ligne de l'écriture d'immobilisation @param amort_line_id : numéro de ligne de l'écriture d'amortissement @param immo_doc_id : numéro du doc d'immo *}} {{* chercher l'écriture d'immobilisation *}} {{#select line.id_transaction as immo_trans_id, line.debit as montant, trans.label as trans_label, line.label as line_label FROM acc_transactions_lines as line INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id WHERE line.id = :line_id; :line_id = $_GET.immo_line_id|intval assign="ligne_immo" }} {{else}} {{:error message="Immobilisation non trouvée"}} {{/select}} {{* chercher le doc associé à l'immo *}} {{#load id=$_GET.immo_doc_id|intval assign="info_immo"}} {{:assign label_immo=$label|or:$ligne_immo.trans_label}} {{else}} {{:error message="Immobilisation non trouvée"}} {{/load}} {{:assign montant_immo=$info_immo.amount|or:$ligne_immo.montant}} {{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}} {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}} {{/if}} {{* chercher l'écriture d'amortissement *}} {{#select line.credit as amount, line.label as line_label, trans.date as amort_date, trans.label as trans_label, trans.id as trans_id, acc.code as account_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 = $_GET.amort_line_id|intval assign="amort_line" }} {{else}} {{:error message="Amortissement non trouvé"}} {{/select}} {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$amort_line.trans_id}} {{* montant de l'écriture d'amortissement déjà affecté *}} {{:assign montant_affecte=0}} {{#load type="amort_link" assign="linked_amort." where="$$.amort_line_id = :amort_line_id" :amort_line_id = $_GET.amort_line_id|intval }} {{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}} {{/load}} {{:assign reste="%d-%d"|math:$amort_line.amount:$montant_affecte}} {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} {{* vérifier que le montant saisi est inférieur au reste *}} {{if $_POST.montant == null || $_POST.montant == 0}} {{:assign montant_amort=$reste}} {{if $montant_affecte == 0}} {{:assign saved_amount=null}} {{else}} {{:assign saved_amount=$reste}} {{/if}} {{else}} {{:assign montant_amort=$_POST.montant|money_int}} {{if $montant_amort > $reste}} {{:assign reste_nb="%f"|math:$reste|money_currency:false}} {{:error message="Le montant de l'amortissement ne peut être supérieur au reste (%s)"|args:$reste_nb}} {{/if}} {{if $montant_amort == $amort_line.amount}} {{:assign saved_amount=null}} {{else}} {{:assign saved_amount=$montant_amort}} {{/if}} {{/if}} {{* vérifier que le montant total des amortissements ne dépasse pas la valeur de l'immo *}} {{* montant de l'immo *}} {{:assign total_credits=0}} {{#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 }} {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} {{/select}} {{else}} {{:assign total_credits="%d+%d"|math:$total_credits:$amount}} {{/if}} {{/load}} {{:assign montant_immo="%d-%d"|math:$montant_immo:$total_credits}} {{* montant des amortissements *}} {{:assign total_amort=0}} {{#load type="amort_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id=$_GET.immo_doc_id|intval }} {{if $amount == null || $amount == 0}} {{#select line.credit 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 = :amort_line_id ; :amort_line_id = $amort_line_id }} {{:assign total_amort="%d+%d"|math:$total_amort:$credit}} {{/select}} {{else}} {{:assign total_amort="%d+%d"|math:$total_amort:$amount}} {{/if}} {{/load}} {{:assign vnc="%d-%d"|math:$montant_immo:$total_amort}} {{:assign total_amort="%d+%d"|math:$total_amort:$montant_amort}} {{if $total_amort > $montant_immo}} {{:assign ma="%f"|math:$montant_amort|money_currency:false}} {{:assign vnc="%f"|math:$vnc|money_currency:false}} {{:error message="Le montant de l'amortissement (%s) dépasse la valeur résiduelle de l'immobilisation (%s)"|args:$ma:$vnc}} {{/if}} {{* 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.immo_trans_id }} {{:assign var="linked_transactions." value=$linked_id}} {{/select}} {{* ajouter la nouvelle liaison *}} {{:assign var="linked_transactions." value=$amort_line.trans_id}} {{:api method="POST" path="accounting/transaction/%s/transactions"|args:$ligne_immo.immo_trans_id assign="result" assign_code="result_code" transactions=$linked_transactions }} {{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}} {{* TODO voir si nécessaire ? *}} {{#load type="amort_link" where="$$.immo_doc_id = :immo_doc_id AND $$.amort_line_id = :amort_line_id" :immo_doc_id=$_GET.immo_doc_id|intval :amort_line_id = $_GET.amort_line_id|intval limit=1 }} {{else}} {{:save key=""|uuid type="amort_link" immo_doc_id=$_GET.immo_doc_id|intval amort_line_id=$_GET.amort_line_id|intval amount=$saved_amount }} {{/load}} {{* immo soldée ? *}} {{if $total_amort == $montant_immo}} {{:assign status="amortized"}} {{:save key=$info_immo.key status=$status }} {{/if}} {{:redirect force="amortization.html?immo_line_id=%s&immo_doc_id=%s&type_immo=%s&ok=1&msg=attach_amort"|args:$_GET.immo_line_id:$_GET.immo_doc_id:$status}} {{/form}} {{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}} {{* barre de navigation *}} {{if ! $dialog}} {{:include file="_nav.html" current="config" subcurrent="init" subsubcurrent="parameter"}} {{/if}} {{:form_errors}}