{{* -*- brindille -*- *}} {{* Sortir une immobilisation du bilan @param immo_id : id de la ligne d'immobilisation *}} {{* Infos de l'immobilisation *}} {{#select line.debit as montant, trans.date as date_achat, trans.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_id|intval assign="ligne_immo" }} {{else}} {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}} {{/select}} {{:assign date_debut=$ligne_immo.date_achat}} {{:assign ts_mes=$ligne_immo.date_achat|strtotime}} {{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}} {{:assign ts_mes=$date|strtotime}} {{:assign date_debut=$date}} {{:assign duree_amort=$duration}} {{/load}} {{* chercher des écritures d'amortissement liées à l'immobilisation *}} {{#select SUM(l_amort.credit) as amort_amount, CASE WHEN links.id_related = t_immo.id THEN links.id_transaction ELSE links.id_related END as amort_trans_id, MAX(trans.date) as last_amort_date, MIN(trans.date) as first_amort_date, COUNT(trans.id) as amort_number 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) 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 WHERE l_immo.id = :line_id AND account.code LIKE '28%' LIMIT 1; :line_id = $_GET.immo_id|intval assign=amort_line }} {{/select}} {{if $amort_line.amort_number == 0}} {{:assign amort_amount=0}} {{else}} {{:assign amort_amount=$amort_line.amort_amount}} {{:assign date_debut=$amort_line.last_amort_date|strtotime}} {{:assign date_debut="%d+(60*60*24)"|math:$date_debut|date:"Y-m-d"}} {{/if}} {{:assign ts_debut=$date_debut|strtotime}} {{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$amort_amount}} {{* lister les exercices qui englobent la date de début du prochain amortissement *}} {{:assign default_exit_date=""}} {{#years closed=false order="start_date" where="start_date <= :debut AND :debut <= end_date" :debut=$date_debut assign=years.}} {{if $start_date|strtotime <= $now && $now <= $end_date|strtotime}} {{:assign default_exit_date=$now|date_short}} {{/if}} {{:assign ts_fin=$end_date|strtotime}} {{: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:")"}} {{:assign var="years_data.%d"|args:$id value=$ts_debut|cat:" "|cat:$ts_fin}} {{else}} {{:error message="Aucun exercice ouvert pour enregistrer un amortissement"}} {{/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 mise en service *}} {{if $_POST.date_mes != null}} {{:assign ts_mes=$_POST.date_mes|parse_date|strtotime}} {{if $ts_mes < $ligne_immo.date_achat|strtotime || $ts_mes > $amort_line.first_amort_date|strtotime}} {{:assign immo_date=$ligne_immo.date_achat|date_short}} {{:assign amort_date=$amort_line.first_amort_date|date_short}} {{:error message="La date de mise en service doit être postérieure à la date d'acquisition de l'immobilisation (%s) et antérieure à la date du premier amortissement (%s)"|args:$immo_date:$amort_date}} {{/if}} {{/if}} {{* vérifier la validité de la durée d'immobilisation *}} {{if $valeur_nette > 0}} {{if $info_immo.duration == null}} {{if $_POST.duree == null}} {{:error message="Vous devez renseigner la durée de l'immobilisation"}} {{elseif $_POST.duree < $amort_line.amort_number}} {{:error message="La durée de l'amortissement ne peut être inférieure au nombre d'écritures d'amortissement (%d)"|args:$amort_line.amort_number}} {{else}} {{:assign duree_amort=$_POST.duree}} {{/if}} {{/if}} {{/if}} {{* vérifier la validité de la date de sortie *}} {{if $info_immo.date != null}} {{if $_POST.date_sortie|parse_date < $info_immo.date}} {{:assign immo_date=$info_immo.date|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_mes != null}} {{if $_POST.date_sortie|parse_date < $_POST.date_mes|parse_date}} {{:error message="La date de sortie doit être postérieure à la date de mise en service de l'immobilisation (%s)"|args:$_POST.date_mes}} {{/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_line.amort_number != 0 && $_POST.date_sortie|parse_date <= $amort_line.last_amort_date}} {{:assign last_amort_date=$amort_line.last_amort_date|date_short}} {{:error message="La date de sortie doit être postérieure à la date de la dernière immobilisation (%s)"|args:$last_amort_date}} {{/if}} {{* vérifier que la date de sortie est située dans un exercice ouvert *}} {{:assign ts_exit = $_POST.date_sortie|parse_date|strtotime}} {{:assign ok=false}} {{#foreach from=$years}} {{if $id == $_POST.id_year}} {{:assign selected_year=$id}} {{if $start_date|strtotime <= $ts_exit && $ts_exit <= $end_date|strtotime}} {{:assign ok=true}} {{:break}} {{/if}} {{/if}} {{/foreach}} {{if ! $ok}} {{:error message="La date choisie n'est pas dans l'exercice sélectionné !"}} {{/if}} {{:redirect to="compute_exit_data.html?immo_id=%s&amort_amount=%s&year=%s&date_mes=%s&date_debut=%s&exit_date=%s&duree_amort=%s"|args:$_GET.immo_id:$amort_amount:$selected_year:$ts_mes:$ts_debut:$ts_exit:$duree_amort}} {{/form}} {{:admin_header title="Sortie de bilan" custom_css="./style.css" current="module_amortissement"}} {{* barre de navigation *}} {{if ! $dialog}} {{:include file="_nav.html" current="index" subsubcurrent="balance_exit"}} {{/if}} {{:form_errors}} {{* formulaire de sortie du bilan *}}