{{* -*- brindille -*- *}} {{* Sortir une immobilisation du bilan @param immo_doc_id : id du doc associé à l'immo *}} {{* Infos de l'immobilisation *}} {{#load id=$_GET.immo_doc_id|intval assign="info_immo"}} {{else}} {{:error message="Immobilisation non trouvée"}} {{/load}} {{#select line.debit as montant, trans.id AS trans_id, trans.date as date_achat, 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 = $info_immo.line assign="ligne_immo" }} {{else}} {{:error message="Immobilisation non trouvée"}} {{/select}} {{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}} {{if $info_immo.amount != null}} {{:assign var="ligne_immo.montant" value=$info_immo.amount}} {{/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 total_credits=0}} {{#load type="credit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $info_immo.id assign="credit_link" }} {{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}} {{else}} {{* TODO : à garder ? pas de doc => voir liaison écritures *}} {{#select CASE links.id_related = :immo_trans_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_trans_id AND line.credit > 0 AND acc.code = :account; :immo_trans_id=$ligne_immo.trans_id :account=$ligne_immo.account_code }} {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} {{/select}} {{/load}} {{:assign var="ligne_immo.montant" value="%d-%d"|math:$ligne_immo.montant:$total_credits}} {{:assign total_amort=0}} {{#load type="amort_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $_GET.immo_doc_id|intval }} {{#select line.credit, trans.date as amort_date FROM acc_transactions_lines AS line INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id WHERE line.id = :amort_line_id ; :amort_line_id = $amort_line_id assign="amort_line" }} {{:assign amort_amount=$amount|or:$credit}} {{:assign total_amort="%d+%d"|math:$total_amort:$amort_amount}} {{:assign var="linked_amort.%s_%d"|args:$amort_date:$id value=$amort_line}} {{/select}} {{/load}} {{:assign amort_number=$linked_amort|count}} {{#foreach from=$linked_amort|ksort item="line"}} {{if $first_amort_date == null}} {{:assign first_amort_date=$line.amort_date}} {{/if}} {{if $last_amort_date == null}} {{:assign last_amort_date=$line.amort_date}} {{elseif $line.amort_date > $last_amort_date}} {{:assign last_amort_date=$line.amort_date}} {{/if}} {{/foreach}} {{if $total_amort == 0}} {{if $info_immo.status == "amortized"}} {{:assign total_amort=$ligne_immo.montant}} {{/if}} {{else}} {{:assign date_debut=$last_amort_date}} {{/if}} {{:assign ts_debut=$date_debut|strtotime}} {{:assign ts_debut="%d+(60*60*24)"|math:$ts_debut}} {{:assign date_debut=$ts_debut|date:"Y-m-d"}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$total_amort}} {{* lister les exercices ouverts dont la date de fin est postérieure à la date du dernier amortissment *}} {{:assign default_exit_date=""}} {{#years closed=false order="start_date" where=":debut <= end_date" :debut=$date_debut}} {{if $start_date|strtotime <= $now && $now <= $end_date|strtotime}} {{:assign default_exit_date=$now|date_short}} {{/if}} {{:assign var="years." id=$id label=$label start_date=$start_date end_date=$end_date}} {{:assign debut=$start_date|date_short}} {{:assign fin=$end_date|date_short}} {{:assign var="open_years.%d"|args:$id value=$label|cat:" (du "|cat:$debut|cat:" au "|cat:$fin|cat:")"}} {{else}} {{:assign debut=$date_debut|date_short}} {{:error message="Aucun exercice ouvert pour enregistrer un amortissement à partir du %s"|args:$debut}} {{/years}} {{if $years|count == 1}} {{:assign default_year=$years.0.id}} {{else}} {{:assign default_year=""}} {{/if}} {{* Traiter l'envoi du formulaire *}} {{#form on="proceed"}} {{if $_POST.date_sortie == null}} {{:error message="Vous devez renseigner la date de sortie"}} {{/if}} {{* vérifier la validité de la date de sortie *}} {{if $info_immo.date_mes != null}} {{if $_POST.date_sortie|parse_date < $info_immo.date_mes}} {{:assign immo_date=$info_immo.date_mes|date_short}} {{:error message="La date de sortie doit être postérieure à la date de mise en service de l'immobilisation (%s)"|args:$immo_date}} {{/if}} {{elseif $_POST.date_sortie|parse_date < $ligne_immo.date_achat}} {{:assign immo_date=$ligne_immo.date_achat|date_short}} {{:error message="La date de sortie doit être postérieure à la date d'acquisition de l'immobilisation (%s)"|args:$immo_date}} {{/if}} {{if $amort_number != 0 && $_POST.date_sortie|parse_date <= $last_amort_date}} {{:assign last_amort_date=$last_amort_date|date_short}} {{:error message="La date de sortie doit être postérieure à la date du dernier amortissement (%s)"|args:$last_amort_date}} {{/if}} {{:assign ts_exit = $_POST.date_sortie|parse_date|strtotime}} {{:assign exercice_ok=false}} {{* vérifier que la date de sortie est dans l'exercice choisi *}} {{#foreach from=$years item="current_year"}} {{if $current_year.id == $_POST.id_year}} {{:assign selected_year=$current_year.id}} {{if $start_date|strtotime <= $ts_exit && $ts_exit <= $end_date|strtotime}} {{:assign current_year=$current_year}} {{:assign exercice_ok=true}} {{:break}} {{/if}} {{/if}} {{/foreach}} {{if ! $exercice_ok}} {{:error message="La date choisie n'est pas dans l'exercice sélectionné !"}} {{/if}} {{* voir si des amortissements ont été oubliés *}} {{if $valeur_nette > 0 && $info_immo.status != "amortized"}} {{if $current_year.start_date <= $date_debut && $date_debut <= $current_year.end_date}} {{:assign amort_ok=true}} {{else}} {{:assign amort_ok=false}} {{/if}} {{if ! $amort_ok}} {{:error message="Vous devez d'abord enregistrer les amortissements des exercices précédents"}} {{/if}} {{/if}} {{:redirect to="compute_exit_data.html?immo_doc_id=%s&amort_amount=%s&year=%s&date_debut=%s&exit_date=%s"|args:$_GET.immo_doc_id:$total_amort:$selected_year:$ts_debut:$ts_exit}} {{/form}} {{:admin_header title="Sortie de bilan" custom_css="./style.css" current="module_amortization"}} {{if ! $dialog}} {{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="balance_exit"}} {{/if}} {{:form_errors}} {{* formulaire de sortie du bilan *}}