From 52ba7c28b17e93433765340671d70b8395770558 Mon Sep 17 00:00:00 2001 From: Victor Colomb Date: Sun, 14 Apr 2024 18:58:15 +0200 Subject: [PATCH] Fix: Multiple opened years causing mayhem --- README.md | 4 +- modules/immobilisations/_current_year.tpl | 13 ++- modules/immobilisations/_find_year.tpl | 13 ++- modules/immobilisations/_populate_immo.tpl | 7 +- modules/immobilisations/amortisation.html | 54 +++++++--- modules/immobilisations/delete.html | 3 + modules/immobilisations/index.html | 32 +++--- modules/immobilisations/link.html | 3 + modules/immobilisations/module.ini | 2 +- modules/immobilisations/new.html | 54 ++++++++-- modules/immobilisations/test.html | 12 ++- modules/immobilisations/view.html | 42 +++++--- modules/immobilisations/writeoff.html | 109 ++++++++++++++++----- 13 files changed, 255 insertions(+), 93 deletions(-) diff --git a/README.md b/README.md index 44f6036..ad7dfb4 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,11 @@ ## 📝 Roadmap +* ~~Accès aux immobilisations en lecture seule~~ +* Amortissement la première année au prorata du nombre de mois, et non de jours * Lien vers une immobilisation sur la page de ses écritures liées * Checklist clôture de l'exercice (vérifier que tous les amortissements ont bien été passés) -* Amortissements dégressifs (peut être) +* Amortissements dégressifs _(peut être)_ ## ⚖️ License diff --git a/modules/immobilisations/_current_year.tpl b/modules/immobilisations/_current_year.tpl index 335c7a3..28e2e2d 100644 --- a/modules/immobilisations/_current_year.tpl +++ b/modules/immobilisations/_current_year.tpl @@ -1,13 +1,18 @@ {{if $logged_user.preferences.accounting_year}} - {{#years id=$logged_user.preferences.accounting_year assign="current_year"}} + {{#years}} + {{if $id == $logged_user.preferences.accounting_year}} + {{:assign .="current_year}} + {{:break}} + {{/if}} {{/years}} {{/if}} {{if !$current_year}} - {{#years closed=false order="end_date DESC" assign="current_year"}} - + {{#years closed=false order="end_date ASC" assign="current_year"}} + {{:break}} {{else}} - {{#years closed=true order="end_date DESC" assign="current_year"}} + {{#years order="end_date ASC" assign="current_year"}} + {{:break}} {{/years}} {{/years}} {{/if}} diff --git a/modules/immobilisations/_find_year.tpl b/modules/immobilisations/_find_year.tpl index f4f55aa..528708c 100644 --- a/modules/immobilisations/_find_year.tpl +++ b/modules/immobilisations/_find_year.tpl @@ -2,11 +2,14 @@ {{:error message="Fonction 'find_year' : paramètre date manquant !"}} {{/if}} -{{#years where="start_date <= :date AND end_date >= :date" :date=$date}} - {{:assign amort_year_id=$id}} - {{:assign amort_year_label=$label}} - {{:assign amort_year_start=$start_date}} - {{:assign amort_year_end=$end_date}} +{{#years}} + {{if $start_date <= $date && $end_date >= $date}} + {{:assign amort_year_id=$id}} + {{:assign amort_year_label=$label}} + {{:assign amort_year_start=$start_date}} + {{:assign amort_year_end=$end_date}} + {{:break}} + {{/if}} {{/years}} {{if !$amort_year_end}} diff --git a/modules/immobilisations/_populate_immo.tpl b/modules/immobilisations/_populate_immo.tpl index c989379..3815b28 100644 --- a/modules/immobilisations/_populate_immo.tpl +++ b/modules/immobilisations/_populate_immo.tpl @@ -51,8 +51,11 @@ {{/if}} {{/foreach}} - {{#years id=$result.id_year}} - {{:assign var="year_label" value=$label}} + {{#years}} + {{if $id == $result.id_year}} + {{:assign var="year_label" value=$label}} + {{:break}} + {{/if}} {{/years}} {{:assign date=$result.date|parse_date}} {{:assign diff --git a/modules/immobilisations/amortisation.html b/modules/immobilisations/amortisation.html index 7053d0a..ebf880b 100644 --- a/modules/immobilisations/amortisation.html +++ b/modules/immobilisations/amortisation.html @@ -21,6 +21,25 @@ {{:assign var="_POST.entry" value=$key}} {{/foreach}} + {{#transactions id=$_POST.entry}} + {{:api + path="accounting/transaction/"|cat:$_POST.entry + method="GET" + assign="result" + }} + {{#foreach from=$result.lines item="line"}} + {{if $line.account_code|regexp_match:"/^28[01]/" && $credit > 0}} + {{:assign amort_account=1}} + {{/if}} + {{/foreach}} + + {{if !$amort_account}} + {{:error message="L'écriture doit contenir une ligne au crédit sur un compte 280 ou 281 !"}} + {{/if}} + {{else}} + {{:error message="L'écriture sélectionnée n'existe pas !"}} + {{/transactions}} + {{:assign var="immo.amort_entries."|cat:$_POST.entry value=$_POST.entry}} {{:save validate_schema="./immobilisation.schema.json" key=$_POST.key amort_entries=$immo.amort_entries}} @@ -28,17 +47,20 @@ {{/form}} {{#form on="save"}} - {{if !$_POST.key || !$_POST.year || !$_POST.label || !$_POST.date || !$_POST.amount || !$_POST.amort_account || !$_POST.debit_account}} + {{if !$_POST.key || !$_POST.year_id || !$_POST.label || !$_POST.date || !$_POST.amount || !$_POST.amort_account || !$_POST.debit_account}} {{:http code=403}} - {{:error message="Paramètre key, year, label, date, amount, amort_account ou debit_account manquant !"}} + {{:error message="Paramètre key, year_id, label, date, amount, amort_account ou debit_account manquant !"}} {{/if}} - {{if $_POST.year_start && $_POST.year_end}} - {{:assign date=$_POST.date|parse_date}} - {{if $date < $_POST.year_start || $date > $_POST.year_end}} - {{:error message="La date demandée ne correspond pas aux dates de l'exercice sélectionné !"}} + {{:assign date=$_POST.date|parse_date}} + {{#years}} + {{if $id == $_POST.year_id}} + {{if $date < $start_date || $date > $end_date}} + {{:error message="La date demandée ne correspond pas aux dates de l'exercice sélectionné !"}} + {{/if}} + {{:break}} {{/if}} - {{/if}} + {{/years}} {{#foreach from=$_POST.amort_account key="key" item="value"}} {{if !$value|regexp_match:"/^28[01]/"}} @@ -127,9 +149,6 @@

Délier l'écriture d'amortissement pour l'exercice {{$year. {{:input type="list" name="entry" multiple=false required=true label="Écriture d'amortissement" target="!acc/transactions/selector.php"}} -

- Attention, aucune validation n'est effectuée sur l'écriture choisie. -

{{:button type="submit" name="link" shape="right" label="Lier" class="main"}}

@@ -142,7 +161,7 @@

Délier l'écriture d'amortissement pour l'exercice {{$year. {{/if}} {{:include file="./_count_years.tpl" date=$immo.date duration=$immo.duration keep="number_of_years"}} - {{if $immo.date < $current_year.start_date}} + {{if $immo.date > $current_year.start_date}} {{:error message="L'exercice sélectionné est antérieur à l'immobilisation !"}} {{/if}} @@ -169,21 +188,24 @@

Délier l'écriture d'amortissement pour l'exercice {{$year. {{:assign amort_account=$immo.account_code|substr:1}} {{:assign amort_account="28"|cat:$amort_account}} {{#accounts codes=$amort_account}} - {{:assign var="amort_account.%d"|args:$id value="%s — %s"|args:$code:$label}} + {{if $id_chart == $current_year.id_chart}} + {{:assign var="amort_account.%d"|args:$id value="%s — %s"|args:$code:$label}} + {{:break}} + {{/if}} {{else}} {{:assign amort_account=null}} {{/accounts}} {{#accounts codes="6811"}} - {{:assign var="debit_account.%d"|args:$id value="%s — %s"|args:$code:$label}} + {{if $id_chart == $current_year.id_chart}} + {{:assign var="debit_account.%d"|args:$id value="%s — %s"|args:$code:$label}} + {{/if}} {{/accounts}}
Créer une écriture d'amortissement
- {{:input type="hidden" name="year" default=$current_year.id}} - {{:input type="hidden" name="year_start" default=$current_year.start_date}} - {{:input type="hidden" name="year_end" default=$current_year.end_date}} + {{:input type="hidden" name="year_id" default=$current_year.id}}
diff --git a/modules/immobilisations/delete.html b/modules/immobilisations/delete.html index 3d924b0..b6cf6a3 100644 --- a/modules/immobilisations/delete.html +++ b/modules/immobilisations/delete.html @@ -1,3 +1,6 @@ +{{#restrict block=true section="accounting" level="write"}} +{{/restrict}} + {{#form on="delete"}} {{:delete type="immobilisation" key=$_POST.key}} {{:redirect to="./"}} diff --git a/modules/immobilisations/index.html b/modules/immobilisations/index.html index 1f0024f..f2761e4 100644 --- a/modules/immobilisations/index.html +++ b/modules/immobilisations/index.html @@ -1,10 +1,12 @@ {{:admin_header title="Immobilisations" current="home"}}

Écritures d'amortissement

-
+
@@ -99,7 +105,9 @@

Écritures d'amortissement

- + {{#restrict section="accounting" level="write"}} + + {{/restrict}} {{#foreach from=$immo.amort_entries item="amort_entry"}} @@ -118,18 +126,22 @@

Écritures d'amortissement

{{/if}} - + {{#restrict section="accounting" level="write"}} + + {{/restrict}} {{/foreach}}
Exercice Date Montant
{{$amort_entry.date|date_short}} {{$amort_entry.amount|money_currency}} - {{:linkbutton href="./amortisation.html?key=%s&unlink=%d"|args:$immo.key:$amort_entry.id shape="delete" label="DĂ©lier"}} - + {{:linkbutton href="./amortisation.html?key=%s&unlink=%d"|args:$immo.key:$amort_entry.id shape="delete" label="Supprimer"}} +
- {{:linkbutton href="./amortisation.html?key=%s"|args:$immo.key shape="plus" label="Créer"}} -
- {{:linkbutton href="./amortisation.html?key=%s&link"|args:$immo.key shape="attach" label="Lier"}} + {{#restrict section="accounting" level="write"}} + {{:linkbutton href="./amortisation.html?key=%s"|args:$immo.key shape="plus" label="Créer"}} +
+ {{:linkbutton href="./amortisation.html?key=%s&link"|args:$immo.key shape="attach" label="Lier"}} + {{/restrict}}
diff --git a/modules/immobilisations/writeoff.html b/modules/immobilisations/writeoff.html index bb75cf8..fd5c414 100644 --- a/modules/immobilisations/writeoff.html +++ b/modules/immobilisations/writeoff.html @@ -1,14 +1,29 @@ +{{#restrict block=true section="accounting" level="write"}} +{{/restrict}} + {{#form on="save"}} - {{#years closed=false where="start_date <= :date AND end_date >= :date" :date=$_POST.date|parse_date}} - {{:assign year_id=$id}} - {{else}} - {{:error message="Aucun exercice ouvert ne correspond à la date sélectionnée !"}} + {{if !$_POST.key || !$_POST.year_id || !$_POST.account || !$_POST.date ||!$_POST.amort_account}} + {{:http code=403}} + {{:error message="Paramètre key, year_id, date, account ou amort_account manquant !"}} + {{/if}} + + {{:assign var="_POST.date" value=$_POST.date|parse_date}} + {{#years id=$_POST.year_id}} + {{if $start_date > $_POST.date || $end_date < $_POST.date}} + {{:error message="La date demandée ne correspond pas à l'exercice sélectionné !"}} + {{/if}} {{/years}} - {{#foreach from=$_POST.account key="key"}} + {{#foreach from=$_POST.account key="key" item="value"}} + {{if !$value|regexp_match:"/^2[01]/"}} + {{:error message="Le compte d'immobilisation doit être un compte 20 ou 21."}} + {{/if}} {{:assign var="_POST.account" value=$key}} {{/foreach}} - {{#foreach from=$_POST.amort_account key="key"}} + {{#foreach from=$_POST.amort_account key="key" item="value"}} + {{if !$value|regexp_match:"28[01]"}} + {{:error message="Le compte d'amortissement doit être un compte 280 ou 281 !"}} + {{/if}} {{:assign var="_POST.amort_account" value=$key}} {{/foreach}} @@ -32,14 +47,49 @@ {{/form}} {{#form on="link"}} + {{if !$_POST.key || !$_POST.entry}} + {{:http code=403}} + {{:error message="Paramètre key ou entry manquant !"}} + {{/if}} + {{#foreach from=$_POST.entry key="key"}} - {{:save key=$_POST.key writeoff_entry=$key}} + {{:assign var="_POST.entry" value=$key}} {{:break}} {{/foreach}} + + {{#transactions id=$_POST.entry}} + {{:api + path="accounting/transaction/"|cat:$_POST.entry + method="GET" + assign="result" + }} + {{#foreach from=$result.lines item="line"}} + {{if $line.account_code|regexp_match:"/^2[01]/" && $line.credit > 0}} + {{:assign account=1}} + {{/if}} + {{if $line.account_code|regexp_match:"/^28[01]/" && $line.debit > 0}} + {{:assign amort_account=1}} + {{/if}} + {{/foreach}} + + {{if !$account}} + {{:error message="L'écriture doit contenir une ligne au crédit sur un compte 20 ou 21 !"}} + {{/if}} + {{if !$amort_account}} + {{:error message="L'écriture doit contenir une ligne au débit sur un compte 280 ou 281 !"}} + {{/if}} + {{else}} + {{:error message="La transaction sélectionnée n'existe pas !"}} + {{/transactions}} + {{:redirect to="./view.html?key=%s&linked"|args:$_POST.key}} {{/form}} {{#form on="unlink"}} + {{if !$_POST.key}} + {{:error message="Le paramètre key est manquant !"}} + {{/if}} + {{:save key=$_POST.key writeoff_entry=null}} {{:redirect to="./view.html?key=%s"|args:$_POST.key}} {{/form}} @@ -54,7 +104,7 @@ {{:error message="Immobilisation non trouvée !"}} {{/if}} -{{:include path="./_populate_immo.tpl" immo=$immo keep="immo"}} +{{:include file="./_populate_immo.tpl" immo=$immo keep="immo"}} {{if $immo.not_found}} {{:error message="L'écriture d'immobilisation n'a pas été trouvée ! Peut être a-t-elle été supprimée ?"}} {{/if}} @@ -81,7 +131,7 @@

DĂ©lier l'Ă©criture de mise au rebus de l'immobilisation {{$immo.number}} ?

L'écriture ne peut pas être supprimée automatiquement. Cliquez sur le lien ci-dessous pour la supprimer rapidement.

- {{:link href="!acc/transactions/delete.php?id=%d"|args:$immo.writeoff_entry label="#%s"|args:$immo.writeoff_entry target="_blank"}} + {{:link href="!acc/transactions/delete.php?id=%d"|args:$immo.writeoff_entry label="#%s"|args:$immo.writeoff_entry target="_dialog"}}

@@ -96,34 +146,47 @@

Délier l'écriture de mise au rebus de l'immobilisation {{$ {{:input type="list" name="entry" multiple=false required=true label="Écriture de mise au rebus" target="!acc/transactions/selector.php"}} -

- Attention, aucune validation n'est effectuée sur l'écriture choisie. -

{{:button type="submit" name="link" shape="right" label="Lier" class="main"}}

{{else}} - {{:assign var="immo.account.%d"|args:$immo.account value=$immo.account_label}} - {{#accounts id=$immo.account}} - {{:assign var="immo.amort_account" value=$code|substr:1}} - {{:assign var="immo.amort_account" value="28"|cat:$immo.amort_account}} + {{:include file="./_current_year.tpl" keep="current_year"}} + {{:assign var="immo.account" value=null}} + {{#accounts codes=$immo.account_code}} + {{if $id_chart == $current_year.id_chart}} + {{:assign var="immo.account."|cat:$id value="%s — %s"|args:$code:$label}} + {{:break}} + {{/if}} {{/accounts}} - {{#accounts codes=$immo.amort_account}} - {{:assign var="immo.amort_account.%d"|args:$id value="%s — %s"|args:$code:$label}} - {{else}} - {{:assign var="immo.amort_account" value=null}} + {{:assign amort_account_code=$immo.account_code|substr:1}} + {{:assign amort_account_code="28"|cat:$amort_account_code}} + {{#accounts codes=$amort_account_code}} + {{if $id_chart == $current_year.id_chart}} + {{:assign var="immo.amort_account.%d"|args:$id value="%s — %s"|args:$code:$label}} + {{:break}} + {{/if}} {{/accounts}}
Saisir une Ă©criture d'immobilisation
- {{:input type="text" name="label" required=true label="Libellé" default="Mise au rebus — %s"|args:$immo.label}} + {{:input type="hidden" name="year_id" default=$current_year.id}} +
+ +
+
+ + {{:assign from_url=$request_url|urlencode}} + {{:linkbutton href="!acc/years/select.php?from="|cat:$from_url shape="settings" label="Changer d'exercice"}} +
+ + {{:input type="text" name="label" required=true label="Libellé" default="Mise au rebus — "|cat:$immo.label}} {{:input type="money" name="amount" required=true default=$immo.amount label="Montant"}} {{:input type="date" name="date" required=true label="Date"}} - {{:input type="list" name="account" multiple=false required=true label="Compte d'immobilisation" source=$immo target="!acc/charts/accounts/selector.php"}} - {{:input type="list" name="amort_account" multiple=false required=true label="Compte d'amortissement" source=$immo target="!acc/charts/accounts/selector.php"}} + {{:input type="list" name="account" multiple=false required=true label="Compte d'immobilisation" source=$immo target="!acc/charts/accounts/selector.php?year="|cat:$current_year.id}} + {{:input type="list" name="amort_account" multiple=false required=true label="Compte d'amortissement" source=$immo target="!acc/charts/accounts/selector.php?year="|cat:$current_year.id}}