Choisir exercice avant date amortissement
This commit is contained in:
parent
5b8c869ba4
commit
839739b992
4 changed files with 203 additions and 158 deletions
220
save_amort.html
220
save_amort.html
|
|
@ -1,24 +1,128 @@
|
|||
{{* -*- brindille -*- *}}
|
||||
|
||||
{{:admin_header title="Ajout amortissement" current="module_amortissement"}}
|
||||
{{*
|
||||
créer une écriture d'amortissement
|
||||
paramètres
|
||||
- immo_id : id de la ligne d'immobilisation
|
||||
*}}
|
||||
|
||||
{{* barre de navigation *}}
|
||||
{{if ! $dialog}}
|
||||
{{:include file="_nav.html" current="amortization"}}
|
||||
{{* Infos de l'immobilisation *}}
|
||||
{{#select
|
||||
line.id as immo_id,
|
||||
line.id_account as account_id,
|
||||
line.debit as montant,
|
||||
line.id_project as project_id,
|
||||
trans.id as trans_id,
|
||||
trans.label,
|
||||
trans.date,
|
||||
y.id as year_id,
|
||||
y.start_date,
|
||||
y.end_date,
|
||||
project.label as project_label
|
||||
FROM acc_transactions_lines AS line
|
||||
INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
|
||||
INNER JOIN acc_years AS y ON trans.id_year = y.id
|
||||
LEFT JOIN acc_projects AS project ON line.id_project = project.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}}
|
||||
|
||||
{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
|
||||
{{:assign duree=$duration}}
|
||||
{{:assign date_debut=$date}}
|
||||
{{else}}
|
||||
{{:error message="Vous devez renseigner la date de mise en service et la durée d'immobilisation"}}
|
||||
{{/load}}
|
||||
|
||||
{{* chercher des écritures d'amortissement liées à l'immobilisation *}}
|
||||
{{#select
|
||||
SUM(l_amort.credit) as amort_amount,
|
||||
l_amort.label as amort_label,
|
||||
l_amort.id as amort_line_id,
|
||||
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 amort_date,
|
||||
trans.label as trans_label,
|
||||
trans.id_year as amort_year,
|
||||
account.id as account_id,
|
||||
account.code as account_code,
|
||||
account.label as account_label
|
||||
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%'
|
||||
ORDER BY trans.date DESC LIMIT 1;
|
||||
:line_id = $_GET.immo_id|intval
|
||||
assign=amort_line
|
||||
}}
|
||||
{{/select}}
|
||||
|
||||
{{if $amort_line.amort_amount == null}}
|
||||
{{* 1er amortissement *}}
|
||||
{{* déterminer le compte d'amortissement en fonction du compte d'immobilisation *}}
|
||||
{{#select code, label from acc_accounts where id = :id; :id=$ligne_immo.account_id assign=amort_account}}
|
||||
{{/select}}
|
||||
{{:include
|
||||
file="./_get_amort_code.html"
|
||||
code_immo=$amort_account.code
|
||||
keep="code_amort"
|
||||
}}
|
||||
{{:assign var=amort_label value="Amortissement %s"|args:$amort_account.label}}
|
||||
{{:assign var=libelle value="Amortissement %s"|args:$ligne_immo.label}}
|
||||
{{else}}
|
||||
{{* amortissements suivants *}}
|
||||
{{:assign date_debut=$amort_line.amort_date|strtotime}}
|
||||
{{:assign date_debut="%d+(60*60*24)"|math:$date_debut|date:"Y-m-d"}}
|
||||
{{:assign var=code_amort value=$amort_line.account_code}}
|
||||
{{:assign var=amort_label value=$amort_line.account_label}}
|
||||
{{:assign var=libelle value=$amort_line.amort_label}}
|
||||
{{/if}}
|
||||
|
||||
{{*
|
||||
lister les exercices dont la date de fin est postérieure à la date
|
||||
de mise en service de l'immo ou à la date du dernier amortissement
|
||||
*}}
|
||||
{{:assign msg_years=""}}
|
||||
{{#years closed=false order="start_date" where="end_date > :debut" :debut=$date_debut assign=years.}}
|
||||
{{:assign ts_debut=$start_date|strtotime}}
|
||||
{{:assign ts_fin=$end_date|strtotime}}
|
||||
{{:assign var="years_data.%d"|args:$id value=$ts_debut|cat:" "|cat:$ts_fin}}
|
||||
{{: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 msg_years=$msg_years|cat:"\n"|cat:" - "|cat:$label|cat:" : "|cat:$debut|cat:" à "|cat:$fin}}
|
||||
{{else}}
|
||||
{{:error message="Aucun exercice ouvert pour enregistrer un amortissement"}}
|
||||
{{/years}}
|
||||
|
||||
|
||||
{{* Traiter l'envoi du formulaire *}}
|
||||
{{#form on="save"}}
|
||||
{{* UTILE ? vérifier que la date est située dans un exercice compatible *}}
|
||||
|
||||
{{* vérifier que la date est située dans un exercice ouvert *}}
|
||||
{{:include
|
||||
file="_check_date.html"
|
||||
date=$_POST.date
|
||||
keep="open_years, selected_year, selected_chart"
|
||||
}}
|
||||
|
||||
{{if $selected_year == null}}
|
||||
{{:error message="La date choisie n'est dans aucun exercice ouvert !!\nExercices ouverts : %s"|args:$open_years}}
|
||||
{{:assign ts_date = $_POST.date_amort|parse_date|strtotime}}
|
||||
{{:assign ok=false}}
|
||||
{{#foreach from=$years}}
|
||||
{{if $start_date|strtotime <= $ts_date && $ts_date <= $end_date|strtotime}}
|
||||
{{:assign ok=true}}
|
||||
{{:break}}
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
{{if ! $ok}}
|
||||
{{:error message="La date choisie n'est dans aucun exercice compatible !!\nExercices compatibles : %s"|args:$msg_years}}
|
||||
{{/if}}
|
||||
|
||||
{{* déterminer le numéro des comptes au cas où la clé serait un identifiant *}}
|
||||
|
|
@ -34,7 +138,6 @@
|
|||
keep="account_code"
|
||||
}}
|
||||
{{:assign credit_account=$account_code}}
|
||||
|
||||
{{* vérifier :
|
||||
- que le compte d'amortissement débute par un préfixe correct (280, 281, ...)
|
||||
- est présent dans le PC de l'exercice correspondant à la date
|
||||
|
|
@ -51,6 +154,9 @@
|
|||
}}
|
||||
{{:assign var="amort_array." value=$code_amort|intval}}
|
||||
{{/foreach}}
|
||||
{{#years closed=false where="id = :year_id" :year_id=$_POST.id_year}}
|
||||
{{:assign selected_chart=$id_chart}}
|
||||
{{/years}}
|
||||
|
||||
{{:include
|
||||
file="_check_account.html"
|
||||
|
|
@ -59,21 +165,19 @@
|
|||
prefix_array=$amort_array
|
||||
keep="account_ok"
|
||||
}}
|
||||
|
||||
{{if $account_ok == null}}
|
||||
{{:assign compte=$credit_account|implode:""}}
|
||||
{{:redirect url="add_account.html?account=%s&chart=%s&immo_id=%s"|args:$compte:$selected_chart:$_GET.immo_id}}
|
||||
{{/if}}
|
||||
|
||||
{{* vérifier que le montant ne dépasse pas le solde restant *}}
|
||||
{{if $_POST.montant|trim|money_int > $_GET.solde|intval}}
|
||||
{{:assign solde=$_GET.solde|money_raw}}
|
||||
{{:assign solde="%d-%d"|math:$ligne_immo.montant:$amort_line.amort_amount}}
|
||||
{{if $_POST.montant|trim|money_int > $solde|intval}}
|
||||
{{:assign solde=$solde|money_raw}}
|
||||
{{:error message="Le montant indiqué « %s » dépasse le solde à amortir « %s »"|args:$_POST.montant:$solde}}
|
||||
{{/if}}
|
||||
|
||||
{{* enregistrer l'écriture *}}
|
||||
{{:assign var="linked_transactions." value=$_GET.trans_id}}
|
||||
|
||||
{{:assign
|
||||
var="lines."
|
||||
debit=$_POST.montant
|
||||
|
|
@ -88,66 +192,61 @@
|
|||
id_project=$_GET.project_id
|
||||
label=$_POST.designation
|
||||
}}
|
||||
|
||||
{{:api
|
||||
method="POST"
|
||||
path="accounting/transaction"
|
||||
assign="result"
|
||||
assign_code="result_code"
|
||||
id_year=$selected_year
|
||||
id_year=$_POST.id_year
|
||||
type="advanced"
|
||||
date=$_POST.date
|
||||
date=$_POST.date_amort
|
||||
label=$_POST.designation
|
||||
lines=$lines
|
||||
linked_transactions=$_GET.trans_id|intval
|
||||
linked_transactions=$ligne_immo.trans_id|intval
|
||||
}}
|
||||
|
||||
{{:redirect force="amortization.html?immo_id=%s&ok=1&msg=amortissement"|args:$_GET.immo_id}}
|
||||
{{/form}}
|
||||
|
||||
{{:admin_header title="Ajout amortissement" current="module_amortissement"}}
|
||||
|
||||
{{* barre de navigation *}}
|
||||
{{if ! $dialog}}
|
||||
{{:include file="_nav.html" current="index" subcurrent="encours" subsubcurrent="amortization"}}
|
||||
{{/if}}
|
||||
|
||||
{{:form_errors}}
|
||||
|
||||
{{* Préparer les infos pour le formulaire *}}
|
||||
{{:assign var=selected_year value=$years.0.id}}
|
||||
{{:assign var=date_amort value=$years.0.end_date}}
|
||||
{{:include file="_calcul_dates.html" date_debut=$date_debut date_fin=$date_amort keep="nbjours"}}
|
||||
|
||||
{{* montant de l'amortissement *}}
|
||||
{{:assign montant_amort="%f/%f/365*%d"|math:$ligne_immo.montant:$duree:$nbjours|intval}}
|
||||
{{:assign montant_amort="min(%f, %d-%d)"|math:$montant_amort:$ligne_immo.montant:$amort_line.amort_amount}}
|
||||
{{:assign var="debit_account.6811" value="6811 — Dot. aux amortissements des immobilisations"}}
|
||||
{{:assign var="credit_account.%s"|args:$code_amort value="%s — "|args:$code_amort|cat:$amort_label}}
|
||||
|
||||
{{*
|
||||
déterminer le compte d'amortissement en fonction du compte
|
||||
d'immobilisation => ajouter un 8 après le 2 de tête
|
||||
*}}
|
||||
{{#select code, label from acc_accounts where id = :id; :id=$_GET.account assign=amort_account}}{{/select}}
|
||||
{{:include
|
||||
file="./_get_amort_code.html"
|
||||
code_immo=$amort_account.code
|
||||
keep="code_amort"
|
||||
}}
|
||||
{{:assign var="credit_account.%s"|args:$code_amort value="%s — Amortissements "|args:$code_amort|cat:$amort_account.label}}
|
||||
{{* -------------------------------------------------------------------------------- *}}
|
||||
|
||||
{{#select
|
||||
id,
|
||||
label,
|
||||
end_date as date_amort
|
||||
from acc_years where id=:id;
|
||||
:id=$_GET.year assign=year
|
||||
}}
|
||||
{{/select}}
|
||||
|
||||
{{#years status=false}}
|
||||
{{:assign var="open_years.%d"|args:$id value=$label}}
|
||||
{{/years}}
|
||||
<div id="erreur" class="hidden">
|
||||
<p class="block error">La date choisie n'est dans aucun exercice ouvert</p>
|
||||
</div>
|
||||
|
||||
<form method="post" action="">
|
||||
<fieldset class="ajout_amort">
|
||||
<legend>Ajouter une écriture d'amortissement</legend>
|
||||
<dl>
|
||||
{{:input type="date" name="date" label="Date" required=true default=$year.date_amort|date_short}}
|
||||
{{:input type="text" name="designation" label="Désignation" required=true default=$_GET.label}}
|
||||
{{:input type="money" name="montant" label="Montant" required=true default=$_GET.amount}}
|
||||
{{:input type="select" default=$selected_year name="id_year" label="Exercice" required=true default_empty="— Faire un choix —" options=$open_years}}
|
||||
{{:input type="date" name="date_amort" label="Date" required=true default=$date_amort|date_short}}
|
||||
{{:input type="text" name="designation" label="Désignation" required=true default=$libelle}}
|
||||
{{:input type="money" name="montant" label="Montant" required=true default=$montant_amort}}
|
||||
{{:input
|
||||
type="list"
|
||||
name="debit_account"
|
||||
label="Compte de débit"
|
||||
required=true
|
||||
target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"68*":$year.id
|
||||
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"68*":$year.id
|
||||
default=$debit_account
|
||||
}}
|
||||
{{:input
|
||||
|
|
@ -155,9 +254,12 @@
|
|||
name="credit_account"
|
||||
label="Compte d'amortissement (280xx ou 281xx)"
|
||||
required=true
|
||||
target="!acc/charts/accounts/selector.php?codes=%s&year=%d"|args:"28*":$year.id
|
||||
target="!acc/charts/accounts/selector.php?codes=%s&id_year=%d"|args:"28*":$year.id
|
||||
default=$credit_account
|
||||
}}
|
||||
<div id="donnees" class="hidden">
|
||||
{{:input type="select" name="years_data" options=$years_data}}
|
||||
</div>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
|
|
@ -166,3 +268,17 @@
|
|||
</p>
|
||||
</form>
|
||||
{{:admin_footer}}
|
||||
|
||||
<script type="text/javascript" src="scripts.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
// afficher la date de fin de l'exercice choisi
|
||||
function setDate(evt, id_exercices = 'f_id_year', id_date = 'f_date_amort', id_years = 'f_years_data') {
|
||||
setDateEnd(id_exercices, id_date, id_years);
|
||||
}
|
||||
|
||||
(function () {
|
||||
setDateEnd('f_id_year', 'f_date_amort', 'f_years_data');
|
||||
document.getElementById('f_id_year').onchange = setDate;
|
||||
})();
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue