Compare commits

..

5 Commits

11 changed files with 198 additions and 106 deletions

View File

@ -7,7 +7,6 @@
résultat : open_years, selected_year, selected_chart
*}}
{{*:debug check::date=$date*}}
{{:assign open_years=""}}
{{#years status=false}}
{{:assign open_years=$open_years|cat:"\n"|cat:" - "|cat:$label|cat:" : "}}

View File

@ -1,7 +1,14 @@
<nav class="tabs">
<ul>
<li {{if $current == 'index'}} class="current"{{/if}}><a href="{{$module.url}}index.html">Immobilisations</a></li>
{{if $current == 'amortization'}}<li class="current"><a>Amortissements</a></li>{{/if}}
<li {{if $current == 'aide'}} class="current"{{/if}}><a href="{{$module.url}}aide.html">Aide</a></li>
</ul>
{{if $current == 'index'}}
<ul class="sub">
{{if $subcurrent == 'amortization'}}
<li class="current"><a>Amortissements</a></li>
{{/if}}
</ul>
{{/if}}
</nav>

View File

@ -1,7 +1,6 @@
{{* -*- brindille -*- *}}
{{:admin_header title="Ajout immobilisation" current="module_amortissement"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="_nav.html" current="index"}}
@ -9,18 +8,24 @@
{{* Traiter l'envoi du formulaire *}}
{{#form on="add"}}
{{*:debug add::POST=$_POST*}}
{{* vérifier que la date est située dans un exercice ouvert *}}
{{:include
file="_check_date.html"
date=$_POST.date
date=$_POST.date_achat
keep="open_years, selected_year, selected_chart"
}}
{{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}}
{{:assign date_debut=$_POST.date_mes|or:$_POST.date_achat|parse_date}}
{{if $date_debut|strtotime < $_POST.date_achat|parse_date|strtotime}}
{{:assign dd=$date_debut|date_short}}
{{:assign da=$_POST.date_achat|date_short}}
{{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}}
{{/if}}
{{if $selected_year == null}}
{{:assign message="La date choisie n'est dans aucun exercice ouvert !!\nExercices ouverts : %s"|args:$open_years}}
{{:error message=$message}}
{{:error message="La date choisie n'est dans aucun exercice ouvert !!\nExercices ouverts : %s"|args:$open_years}}
{{/if}}
{{* déterminer le numéro des comptes au cas où la clé serait un identifiant *}}
@ -63,7 +68,7 @@
assign="result"
id_year=$selected_year
type="revenue"
date=$_POST.date
date=$_POST.date_achat
label=$_POST.designation
amount=$_POST.montant
debit=$debit_account|keys|key:0
@ -71,7 +76,6 @@
id_project=$_POST.id_project
}}
{{* enregistrer les infos de l'immobilisation *}}
{{* vérifier s'il y a déjà un document avec le même numéro de ligne *}}
{{:assign var="immo_id" value=$result.lines.1.id}}
{{#load where="$$.line = :line_id" :line_id=$immo_id}}
@ -80,12 +84,14 @@
{{:assign key=""|uuid}}
{{/load}}
{{* enregistrer les infos de l'immobilisation *}}
{{:save
key=$key
validate_schema="schema.json"
type="immo"
line=$immo_id
duration=$_POST.duree|intval
date=$date_debut
}}
{{:redirect force="index.html?ok=1&msg=immobilisation"}}
@ -105,7 +111,8 @@
<fieldset class="ajout_immo">
<legend>Ajouter une immobilisation</legend>
<dl>
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="date" name="date_achat" label="Date d'acquisition" required=true default=$now|date_short}}
{{: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="designation" label="Désignation" required=true}}
{{:input type="money" name="montant" label="Montant" required=true}}
{{:input type="number" name="duree" label="Durée d'amortissement" required=true default=1}}

View File

@ -1,36 +1,54 @@
{{* -*- brindille -*- *}}
{{:admin_header title="Renseigner durée amortissement" custom_css=$custom_css current="module_amortissement"}}
{{:admin_header title="Renseigner informations amortissement" custom_css=$custom_css current="module_amortissement"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="_nav.html" current="index"}}
{{/if}}
{{* renseigner la durée d'amortissement *}}
<h2 class="ruler">Durée d'amortissement</h2>
{{* Traiter l'envoi du formulaire *}}
{{#form on="add"}}
{{* enregistrer les infos de l'immobilisation *}}
{{* chercher la date d'achat de l'immobilisation *}}
{{:assign var="immo_id" value=$_GET.immo_id|intval}}
{{#select
trans.date as date_achat
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 = $immo_id
assign=ligne_immo
}}
{{/select}}
{{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}}
{{:assign date_debut=$_POST.date_mes|or:$ligne_immo.date_achat|parse_date}}
{{if $date_debut|strtotime < $ligne_immo.date_achat|strtotime}}
{{:assign dd=$date_debut|date_short}}
{{:assign da=$ligne_immo.date_achat|date_short}}
{{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}}
{{/if}}
{{:assign key=""|uuid}}
{{* enregistrer les infos de l'immobilisation *}}
{{:save
key=$key
validate_schema="schema.json"
type="immo"
line=$immo_id
duration=$_POST.duree|intval
date=$date_debut
}}
{{:redirect force="index.html?ok=1&msg=durée"}}
{{/form}}
{{* renseigner la date de mise en service et durée d'amortissement *}}
<form method="post" action="">
<fieldset class="ajout_duree">
<legend>Renseigner durée amortissement</legend>
<legend>Renseigner informations amortissement</legend>
<dl>
{{: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="number" name="duree" label="Durée d'amortissement" required=true default=1}}
</dl>
</fieldset>
@ -41,4 +59,5 @@
</form>
{{:form_errors}}
{{:admin_footer}}

View File

@ -8,16 +8,24 @@
<h2>Liste des immobilisations</h2>
<div class="infos">
<p>
On y trouve les immobilisations détectées par le module, c'est-à-dire les écritures passées sur les comptes d'immobilisation <b>20xx</b> et <b>21xx</b>
On y trouve les immobilisations détectées par le module,
c'est-à-dire les écritures passées sur les comptes
d'immobilisation <b>20xx</b> et <b>21xx</b>.
</p>
<p>
Dans le cas d'une immobilisation qui n'est pas encore prise en charge par le module, il faut fournir la durée en années de l'amortissement en cliquant sur le bouton « Ajouter durée »
Dans le cas d'une immobilisation qui n'est pas encore prise en
charge par le module, il faut fournir la date de mise en
service du bien (si différente de la date d'acquisition) ainsi
que la durée en années de l'amortissement en cliquant sur le
bouton « Ajouter infos ».
</p>
<p>
Une fois la durée indiquée, on accède à la liste des amortissements d'une immobilisation en cliquant le bouton «Amortissements »
On obtient la liste des amortissements d'une immobilisation
en cliquant le bouton «Amortissements ».
</p>
<p>
On peut enregistrer une nouvelle immobilisation en cliquant le bouton « Ajouter une immobilisation »
On peut enregistrer une nouvelle immobilisation en
cliquant le bouton « Ajouter une immobilisation ».
</p>
</div>
@ -27,7 +35,8 @@
<p>
Il faut renseigner les différents paramètres de l'immobilisation :
<ul>
<li>Date : celle de l'écriture de l'immobilisation</li>
<li>Date d'acquisition du bien</li>
<li>Date de mise en service du bien : uniquement si différente de la précédente</li>
<li>Désignation : c'est le libellé de l'immobilisation</li>
<li>Montant</li>
<li>Durée d'amortissement en années</li>
@ -40,34 +49,61 @@
</p>
</div>
<h2>Liste des amortissements</h2>
<h2>Amortissements</h2>
<div class="infos">
<p>
Le calcul de l'amortissement se fait par la <em>méthode linéaire</em>.
</p>
<p>
La date de début du calcul est par défaut la <em>date d'achat</em> ; si la
date de mise en service est <em>postérieure</em> à la date d'achat, c'est
celle-ci qui est prise en compte.
</p>
</div>
<h3>Liste des amortissements</h3>
<div class="help block">
<fieldset>
On trouve ici de une à trois listes, selon la situation :
<dl>
<dt>
<label>liste des écritures d'amortissement liées à l'immobilisation courante</label>
</dt>
<dd>
Ce sont des écritures d'amortissement déjà enregistrées et liées à l'écriture de l'immobilisation courante.
</dd>
<dt>
<label>liste des amortissements à enregistrer</label>
</dt>
<dd>
Ce sont les amortissements qui n'ont pas encore été enregistrés ; seules les amortissements d'un exercice ouvert peuvent être enregistrés ; les autres sont présents pour information et pourront être enregistrés quand l'exercice correspondant aura été ouvert.
</dd>
<dt>
<label>liste des écritures d'amortissement qui ne sont associées à aucune immobilisation</label>
</dt>
<dd>
Ce sont des écritures passées sur un compte d'amortissement (<b>28xx</b>) ; en cliquant le bouton « Attacher », on peut rattacher l'écriture d'amortissement sélectionnée à l'immobilisation courante
<ul>
<li>
<b>Écritures d'amortissement liées à l'immobilisation courante</b>
<p>
Si on a rattaché par ereur une écritures d'amortissement à une immobilisation, le bouton « Détacher » en face de l'écriture permettra de défaire l'opération
Ce sont des écritures d'amortissement déjà
enregistrées et liées à l'écriture de
l'immobilisation courante.
</p>
</dd>
</dl>
</li>
<li>
<b>Écritures d'amortissements à enregistrer</b>
<p>
Ce sont les amortissements qui n'ont pas encore
été enregistrés ; seules les amortissements d'un
exercice ouvert peuvent être enregistrés ; les
autres sont présents pour information et pourront
être enregistrés quand l'exercice correspondant
aura été ouvert.
</p>
</li>
<li>
<b>Écritures d'amortissement qui ne sont associées à aucune immobilisation</b>
<p>
Ce sont des écritures passées sur un compte
d'amortissement (<b>28xx</b>) ; en cliquant le
bouton « Attacher », on peut rattacher l'écriture
d'amortissement sélectionnée à l'immobilisation
courante.
</p>
<p>
Si on a rattaché par erreur une écritures
d'amortissement à une immobilisation, le bouton «
Détacher » en face de l'écriture permettra de
défaire l'opération.
</p>
</li>
</ul>
</fieldset>
</div>

View File

@ -3,7 +3,7 @@
{{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}}
{{:include file="_nav.html" current="amortization"}}
{{:include file="_nav.html" current="index" subcurrent="amortization"}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach"}}
@ -26,10 +26,10 @@
{{* récupérer les infos de l'immobilisation *}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{else}}
{{:assign message="Pas d'info concernant l'immobilisation %s"|args:$_GET.immo_id}}
{{:error message=$message}}
{{:error message="Pas d'info concernant l'immobilisation %s"|args:$_GET.immo_id}}
{{/load}}
{{:assign var="duree" from="info_immo.duration"|args:$_GET.immo_id}}
{{:assign date_debut=$info_immo.date|date_short}}
{{#select
line.id as immo_id,
@ -38,7 +38,6 @@
line.debit as montant,
trans.id as trans_id,
trans.label as label,
trans.date as date_achat,
y.id as year_id,
y.end_date as date_amort,
project.label as project_label
@ -50,10 +49,9 @@
:line_id = $_GET.immo_id|intval
assign=ligne_immo
}}
<h2>Amortissement de « {{$label}} » d'un montant de {{"%f"|math:$montant|money_currency}} en date du {{$date_achat|date_short}} sur {{$duree}} ans</h2>
<h2>Amortissement de « {{$label}} » d'un montant de {{"%f"|math:$montant|money_currency}} en date du {{$date_debut}} sur {{$duree}} ans</h2>
{{else}}
{{:assign message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{:error message=$message}}
{{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_id}}
{{/select}}
{{* chercher des écritures d'amortissement liées à l'immobilisation *}}
@ -70,8 +68,7 @@
trans.id_year as amort_year,
acc.id as account_id,
acc.code as account_code,
acc.label as account_name,
"vrai" as linked
acc.label as account_name
FROM
acc_transactions_lines as l_immo
INNER JOIN acc_transactions as t_immo on t_immo.id = l_immo.id_transaction
@ -100,9 +97,8 @@
{{:assign annuite="%f/%f"|math:$montant:$duree}}
{{* première annuité *}}
{{:assign date_achat=$ligne_immo.date_achat|date_short}}
{{:assign date_amort=$ligne_immo.date_amort|date_short}}
{{:include file="_calcul_dates.html" date_debut=$date_achat date_fin=$date_amort keep="nbjours"}}
{{:include file="_calcul_dates.html" date_debut=$date_debut date_fin=$date_amort keep="nbjours"}}
{{:assign annuite_1="%f/360*%d"|math:$annuite:$nbjours|intval}}
{{:assign annuite_courante=$annuite_1}}
@ -116,7 +112,7 @@
Amortissements attachés à « <a class="num"
href={{"%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}>{{$ligne_immo.trans_id}}</a>
{{$ligne_immo.label}} »
({{"%f"|math:$ligne_immo.montant|money_currency}}, {{$ligne_immo.date_achat|date_short}})
({{"%f"|math:$ligne_immo.montant|money_currency}}, {{$date_debut}})
</h3>
<table class="list">
<thead>
@ -154,11 +150,7 @@
<td><a href={{$compte_url}}>{{$line.account_code}}</a></td>
<td>{{$line.account_name}}</td>
<td>
{{if $line.linked == null}}
{{:linkbutton label="Détacher" href="detach_amort.html?amort_id=%d&immo_id=%d"|args:$line.amort_line:$ligne_immo.immo_id shape="plus"}}
{{else}}
{{:linkbutton label="Détacher" href="" shape="lock" class="disabled"}}
{{/if}}
{{:linkbutton label="Détacher" href="detach_amort.html?amort_id=%d&immo_id=%d"|args:$line.amort_line:$ligne_immo.immo_id shape="plus"}}
</td>
</tr>
{{:assign annuite_courante=$annuite}}
@ -216,13 +208,11 @@
<td class="actions">
{{if $enregistrer == 1}}
{{:linkbutton
label="Enregistrer"
label="Créer l'écriture"
href="save_amort.html?amount=%d&account=%s&year=%s&trans_id=%d&immo_id=%s&project_id=%d&label=%s&solde=%d"|args:$annuite_courante:$ligne_immo.account_id:$current_year:$ligne_immo.trans_id:$_GET.immo_id:$project_id:$libelle:$solde_prec
shape="right"
target="_dialog"
}}
{{else}}
{{:linkbutton label="Enregistrer" href="" shape="lock" class="disabled"}}
{{/if}}
</td>
</tr>
@ -259,7 +249,6 @@
order by trans.date, trans.label;
assign=autre_amort
}}
{{:assign linked="false"}}
{{#select
id_transaction,
id_related
@ -267,7 +256,6 @@
where id_transaction = :id_amort or id_related = :id_amort;
:id_amort=$t_id
}}
{{:assign var=autre_amort.linked value="true"}}
{{else}}
{{:assign var="autres_amortissements." value=$autre_amort}}
{{/select}}
@ -305,11 +293,7 @@
<td>{{$line.a_code}}</td>
<td>{{$line.a_label}}</td>
<td>
{{if $linked != "true"}}
{{:linkbutton label="Attacher" href="attach_amort.html?amort_id=%d&immo_id=%d"|args:$line.l_id:$ligne_immo.immo_id shape="plus"}}
{{else}}
{{:linkbutton label="Attacher" href="" shape="lock" class="disabled"}}
{{/if}}
{{:linkbutton label="Attacher" href="attach_amort.html?amort_id=%d&immo_id=%d"|args:$line.l_id:$ligne_immo.immo_id shape="plus"}}
</td>
</tr>
{{/foreach}}

View File

@ -12,11 +12,9 @@
WHERE id = :line_id;
:line_id = $_GET.immo_id|intval
}}
{{:assign immo_id=$id_transaction}}
{{:assign immo_trans_id=$id_transaction}}
{{else}}
{{* TODO : améliorer le message d'erreur *}}
{{:assign message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
{{:error message=$message}}
{{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
{{/select}}
{{* chercher l'écriture d'amortissement *}}
@ -28,20 +26,18 @@
}}
{{:assign amort_id=$id_transaction}}
{{else}}
{{* TODO : améliorer le message d'erreur *}}
{{:assign message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{:error message=$message}}
{{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{/select}}
{{* chercher les liaisons de l'écriture d'immobilisation *}}
{{#select
CASE links.id_related = :immo_id
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_id or id_related = :immo_id;
:immo_id = $immo_id
WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id;
:immo_trans_id = $immo_trans_id
}}
{{:assign var="linked_transactions." value=$linked_id}}
{{/select}}
@ -52,10 +48,9 @@
{{* Enregistrer les liaisons *}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$immo_id
path="accounting/transaction/%s/transactions"|args:$immo_trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}
{{:redirect to="amortization.html?immo_id=%s&ok=1&msg=attach"|args:$_GET.immo_id}}

View File

@ -5,27 +5,54 @@
une écriture d'immobilisation
*}}
{{#load type="immo" assign="info_immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
{{* chercher l'écriture d'immobilisation *}}
{{#select
id_transaction
FROM acc_transactions_lines
WHERE id = :line_id;
:line_id = $_GET.immo_id|intval
}}
{{:assign immo_trans_id=$id_transaction}}
{{else}}
{{:assign message="Pas d'info concernant l'immobilisation %s"|args:$_GET.immo_id}}
{{:error message=$message}}
{{/load}}
{{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
{{/select}}
{{:assign var="liste_amort" val=$info_immo.amort}}
{{* chercher l'écriture d'amortissement *}}
{{#select
id_transaction
FROM acc_transactions_lines
WHERE id = :line_id;
:line_id = $_GET.amort_id|intval
}}
{{:assign amort_id=$id_transaction}}
{{else}}
{{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{/select}}
{{#foreach from=$info_immo.amort item="amort_id"}}
{{if $amort_id != $_GET.amort_id}}
{{:assign var="t_amort." value=$amort_id}}
{{*
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 = $immo_trans_id
}}
{{if $linked_id != $amort_id}}
{{:assign var="linked_transactions." value=$linked_id}}
{{/if}}
{{/foreach}}
{{/select}}
{{* Enregistrer les infos *}}
{{:save
key=$info_immo.key
validate_schema="schema.json"
type="immo"
line=$info_immo.line
duration=$info_immo.duration
amort=$t_amort
{{* Enregistrer les liaisons *}}
{{:api
method="POST"
path="accounting/transaction/%s/transactions"|args:$immo_trans_id
assign="result"
assign_code="result_code"
transactions=$linked_transactions
}}
{{:redirect to="amortization.html?immo_id=%s&ok=1&msg=detach"|args:$_GET.immo_id}}

View File

@ -15,6 +15,20 @@
<p class="block error">Échec enregistrement immobilisation</p>
{{/if}}
{{* supprimer les documents sans écriture associée *}}
{{#load type="immo"}}
{{#select
line.id as line_id
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 = $line
}}
{{else}}
{{:delete key=$key}}
{{/select}}
{{/load}}
{{* lister les immobilisations *}}
<section class="immobilisation">
<h2 class="ruler">Liste des immobilisations</h2>
@ -55,7 +69,7 @@
INNER JOIN acc_years AS years ON trans.id_year = years.id
LEFT JOIN acc_projects AS project ON line.id_project = project.id
WHERE
(account.code LIKE '21%' OR account.code LIKE '22%')
(account.code LIKE '21%' OR account.code LIKE '22%' OR account.code LIKE '27%')
ORDER BY trans.date DESC
}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$trans_id}}
@ -67,7 +81,7 @@
{{/load}}
<tr>
<td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td>
<td class="num"><a href={{$trans_url}}>#{{$trans_id}}</a></td>
<td>{{$trans_date|date_short}}</td>
<td>{{$trans_label}}</td>
<td class="money">{{"%f"|math:$debit|money}}</td>
@ -78,7 +92,7 @@
<td class="actions">
{{if $duration == null}}
{{:linkbutton
label="Ajouter durée"
label="Ajouter infos"
href="add_duration.html?immo_id=%s"|args:$immo_id
shape="help"
target="_dialog"

View File

@ -18,8 +18,7 @@
}}
{{if $selected_year == null}}
{{:assign message="La date choisie n'est dans aucun exercice ouvert !!\nExercices ouverts : %s"|args:$open_years}}
{{:error message=$message}}
{{:error message="La date choisie n'est dans aucun exercice ouvert !!\nExercices ouverts : %s"|args:$open_years}}
{{/if}}
{{* déterminer le numéro des comptes au cas où la clé serait un identifiant *}}

View File

@ -13,7 +13,12 @@
"duration" : {
"description": "durée de l'amortissement en années",
"type": "integer"
},
"date" : {
"description" : "date de mise en service de l'immobilisation",
"type" : ["string", "null"],
"format" : "date"
}
},
"required": ["type", "line", "duration"]
"required": ["type", "line", "duration", "date"]
}