diff --git a/README.md b/README.md
index 578af08..e771e69 100644
--- a/README.md
+++ b/README.md
@@ -4,14 +4,15 @@ Ce module permet de gérer les écritures d'amortissements pour les immobilisati
- lister les immobilisations
- ajouter une nouvelle immobilisation
-- lister les amortissements d'une immobilisation
+- lister les amortissements d'une immobilisation :
+ - amortissements déjà enregistrés
+ - amortissements à venir
+- associer une écriture d'amortissement à une immobilisation
- enregistrer un nouvel amortissement
-- incorporer d'anciennes immobilisations et leurs amortisements
## Installation
- télécharger [l'archive zip](https://link.infini.fr/amortissement)
- cliquer « Configuration » puis « Extensions »
- en bas de la page, cliquer « Importer un module »
- sélectionner l'archive téléchargée ci-dessus
-- activer le module
-
+- activer le module qui est maintenant présent dans la liste des extensions inactives
diff --git a/_archives.html b/_archives.html
index 7619bcb..e774b6d 100644
--- a/_archives.html
+++ b/_archives.html
@@ -1,226 +1,120 @@
{{* -*- brindille -*- *}}
-{{* Liste des immobilisations sorties du bilan *}}
-
- Cet onglet liste les immobilisations sorties du bilan car elles ne
- sont plus utilisées dans l'association (vétusté, fin de vie,
- vente...).
-
+{{* Liste des immobilisations archivées *}}
-{{:include file="_get_config.html" keep="module.config"}}
+{{* Immobilisation archivées prises en charge *}}
+{{#load type="immo" where="$$.status = 'archived'"}}
+ {{:assign var="lines." value="'%s'"|args:$line}}
+{{/load}}
+{{:assign lines=$lines|implode:","}}
+{{:assign lines="("|cat:$lines|cat:")"}}
+{{:assign condition="line.id IN %s"|args:$lines}}
-{{if $module.table != null}}
+{{#select
+ trans.id as trans_id,
+ trans.label as trans_label,
+ trans.date as trans_date,
+ line.id as immo_id,
+ account.id as account_id,
+ account.code as account_code,
+ account.label as account_label,
+ line.debit AS debit,
+ project.label as project_label,
+ trans.id_year as trans_id_year
+ FROM acc_transactions AS trans
+ INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
+ INNER JOIN acc_accounts AS account ON line.id_account = account.id
+ 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 !condition
+ ORDER BY trans.date DESC;
+ !condition=$condition
+ assign="immo_archivee"
+}}
+ {{:assign var="immo_archivees.%s"|args:$trans_id value=$immo_archivee}}
+{{/select}}
- {{* lister les immobilisations *}}
- {{:assign account_condition="("}}
- {{#foreach from=$module.config.prefixes item="code"}}
- {{:assign code=$code|cat:"%"|quote_sql}}
- {{:assign account_condition=$account_condition|cat:"account.code LIKE "|cat:$code|cat:" OR "}}
- {{/foreach}}
- {{:assign account_condition=$account_condition|cat:"0)"}}
- {{:assign status_condition="($$.status = 'archived')"}}
+{{* Immobilisation avec une écriture de sortie de bilan *}}
+{{:read file="./defaut.json" assign="config_json"}}
+{{:assign config_defaut=$config_json|json_decode}}
+{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
- {{:assign filter_condition=" ("}}
- {{#foreach from=$module.config.filters item="filter"}}
- {{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}}
- {{:assign filter_condition=$filter_condition|cat:" trans_label LIKE "|cat:$filter|cat:" OR "}}
- {{/foreach}}
- {{:assign filter_condition=$filter_condition|cat:"0)"}}
- {{:assign condition=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16) AND NOT "|cat:$filter_condition|cat:" AND "|cat:$status_condition}}
+{{:assign condition="("}}
+{{#foreach from=$prefix_array item="code"}}
+ {{:assign code=$code|cat:"%"|quote_sql}}
+ {{:assign condition=$condition|cat:"account.code LIKE "|cat:$code|cat:" OR "}}
+{{/foreach}}
+{{:assign condition=$condition|cat:"0)"}}
+{{:assign cond2=$condition|replace:"account.":"acc2."}}
+{{:assign condition=$condition|cat:" AND "|cat:$cond2}}
+{{:assign condition=$condition|cat:" AND line.debit > 0 AND NOT (trans.status & 16)"}}
- {{:assign total_cessions = 0}}
-
- {{#select
- trans.id as trans_id,
- trans.label as trans_label,
- trans.date as trans_date,
- trans.id_year as trans_id_year,
- line.id as immo_line_id,
- line.label as line_label,
- line.debit AS debit,
- account.id as account_id,
- account.code as account_code,
- account.label as account_label,
- info.id as immo_doc_id,
- $$.label as doc_label,
- $$.amount as doc_amount,
- $$.date_achat as doc_date_achat,
- $$.date_mes as doc_date_mes,
- $$.status as status
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
- INNER JOIN acc_accounts AS account ON line.id_account = account.id
- INNER JOIN acc_years AS years ON trans.id_year = years.id
- INNER JOIN !table AS info ON $$.line = line.id
- WHERE !condition
- ORDER BY trans.date DESC;
- !table=$module.table
- !condition=$condition
- assign="immo_line"
+{{#select
+ trans.id as trans_id,
+ trans.label as trans_label,
+ trans.date as trans_date,
+ line.id as immo_id,
+ account.id as account_id,
+ account.code as account_code,
+ account.label as account_label,
+ line.debit AS debit,
+ project.label as project_label,
+ trans.id_year as trans_id_year
+ FROM acc_transactions AS trans
+ INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
+ INNER JOIN acc_accounts AS account ON line.id_account = account.id
+ INNER JOIN acc_years AS years ON trans.id_year = years.id
+ INNER JOIN acc_transactions_lines AS line2 ON line.debit = line2.credit
+ INNER JOIN acc_transactions AS trans2 ON trans2.id = line2.id_transaction
+ INNER JOIN acc_accounts AS acc2 ON acc2.id = line2.id_account
+ LEFT JOIN acc_projects AS project ON line.id_project = project.id
+ WHERE !condition
+ ORDER BY trans.date DESC;
+ !condition=$condition
+ assign="immo_archivee"
}}
-
- {{:assign var="immo_line.date_mes" value=$doc_date_mes|or:$doc_date_achat|or:$trans_date}}
- {{:assign var="immo_line.montant_immo" value=$doc_amount|or:$debit}}
-
- {{* chercher le doc de sortie du bilan *}}
- {{:assign var="immo_line.exit_date" value=null}}
- {{#load type="exit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id=$immo_doc_id}}
- {{:assign exit_line_id=$exit_line_id}}
- {{#select
- trans.date
- FROM acc_transactions_lines AS line
- INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
- WHERE line.id = :exit_line_id;
- :exit_line_id=$exit_line_id
- }}
- {{:assign var="immo_line.exit_date" value=$date}}
- {{/select}}
- {{/load}}
-
- {{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
- {{:assign credit_immo=null}}
- {{:assign total_credits=0}}
- {{#load
- type="credit_link"
- where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $immo_doc_id
- }}
- {{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}}
- {{/load}}
- {{:assign solde_immo="%d-%d"|math:$immo_line.montant_immo:$total_credits}}
- {{:assign var="montant" from="sommes_immo.%s"|args:$account_code}}
- {{:assign var="sommes_immo.%s"|args:$account_code value="%d+%d"|math:$montant:$immo_line.montant_immo}}
-
- {{* voir s'il y a une écriture de cession associée à cette immo *}}
- {{#select
- trans.id as cession_id,
- trans.label,
- line.id as line_id,
- line.credit
- FROM acc_transactions_lines AS line
- INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id
- INNER JOIN !table AS cession_link ON json_extract(cession_link.document, '$.cession_line_id') = line.id
- INNER JOIN !table AS immo_doc ON json_extract(cession_link.document, '$.immo_doc_id') = immo_doc.id
- WHERE json_extract(immo_doc.document, '$.line') = :immo_line_id
- ;
- !table=$module.table
- :immo_line_id = $immo_line.immo_line_id
- assign="cession_line"
- }}
- {{:assign var="montant" from="montant_cessions.%d"|args:$account_code}}
- {{:assign var="montant_cessions.%d"|args:$account_code value="%d+%d"|math:$montant:$credit}}
- {{:assign total_cessions="%d+%d"|math:$total_cessions:$credit}}
- {{/select}}
- {{:assign var="immo_lines." value=$immo_line}}
- {{/select}}
-
- {{if $immo_lines|count > 0}}
-
-
+ {{/if}}
+
diff --git a/_calcul_dates.html b/_calcul_dates.html
index ef868de..e4dd864 100644
--- a/_calcul_dates.html
+++ b/_calcul_dates.html
@@ -9,4 +9,4 @@
{{:assign ts_debut=$date_debut|strtotime}}
{{:assign ts_fin=$date_fin|strtotime}}
-{{:assign nbjours="round(1+abs(%d-%d)/(60*60*24), 0)"|math:$ts_fin:$ts_debut}}
+{{:assign nbjours="1+abs(%d-%d)/(60*60*24)"|math:$ts_fin:$ts_debut}}
diff --git a/_check_account.html b/_check_account.html
index ce6816e..06e1108 100644
--- a/_check_account.html
+++ b/_check_account.html
@@ -19,7 +19,7 @@
{{/foreach}}
{{:assign condition=$condition|cat:"0)"}}
-{{:assign account_code=$account|keys|value:0}}
+{{:assign account_code=$account|keys|key:0}}
{{#sql
select="code"
tables="acc_accounts"
diff --git a/_common_attach.html b/_common_attach.html
deleted file mode 100644
index 728ee1f..0000000
--- a/_common_attach.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- Enregistrer l'association entre une ligne d'immo et une autre ligne (amort, credit, cession, sortie)
- @param immo_doc_id : id du doc associé à la ligne d'immobilisation
- @param trans_id : id de l'écriture à attacher
-*}}
-{{* données de l'immobilisation *}}
-{{:include file="_get_immo_data.html" immo_doc_id=$immo_doc_id|intval keep="ligne_immo, message"}}
-{{if $message != null}}
- {{:error message=$message}}
-{{/if}}
-
-{{* chercher les liaisons de l'écriture d'immobilisation *}}
-{{#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 = $ligne_immo.trans_id
-}}
- {{:assign var="linked_transactions." value=$linked_id}}
-{{/select}}
-
-{{* ajouter la nouvelle liaison *}}
-{{:assign var="linked_transactions." value=$trans_id}}
-{{* Enregistrer les liaisons *}}
-{{:api
- method="POST"
- path="accounting/transaction/%s/transactions"|args:$ligne_immo.trans_id
- assign="result"
- assign_code="result_code"
- transactions=$linked_transactions
-}}
-
diff --git a/_common_detach.html b/_common_detach.html
deleted file mode 100644
index e7b6c7a..0000000
--- a/_common_detach.html
+++ /dev/null
@@ -1,52 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- Supprimer l'association entre une ligne d'immo et une autre ligne (amort, credit, cession, sortie)
- @param immo_doc_id : id du doc associé à la ligne d'immobilisation
- @param line_id : id de la ligne à détacher
-*}}
-
-{{* données de l'immobilisation *}}
-{{:include file="_get_immo_data.html" immo_doc_id=$immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
-{{if $message != null}}
- {{:error message=$message}}
-{{/if}}
-
-{{* chercher la deuxième écriture *}}
-{{#select
- id_transaction
- FROM acc_transactions_lines
- WHERE id = :line_id;
- :line_id = $line_id
-}}
- {{:assign trans_id=$id_transaction}}
-{{else}}
- {{:error message="Écriture non trouvée"}}
-{{/select}}
-
-{{*
- chercher les liaisons de l'écriture d'immobilisation
- et supprimer la liaison avec la deuxième écriture
-*}}
-{{#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 = $ligne_immo.trans_id
- }}
- {{if $linked_id != $trans_id}}
- {{:assign var="linked_transactions." value=$linked_id}}
- {{/if}}
-{{/select}}
-
-{{* Enregistrer les liaisons *}}
-{{:api
- method="POST"
- path="accounting/transaction/%s/transactions"|args:$ligne_immo.trans_id
- assign="result"
- assign_code="result_code"
- transactions=$linked_transactions
-}}
diff --git a/_compare_version.tpl b/_compare_version.tpl
deleted file mode 100644
index 88d8a40..0000000
--- a/_compare_version.tpl
+++ /dev/null
@@ -1,34 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- Comparer deux numéros de version n1.n2[.n3]
- @param nv1
- @param nv2
- @result comp : -1 si nv1 < nv2, 0 si nv1 = nv2, 1 si nv1 > nv2
-*}}
-
-{{:assign nv1=$nv1|cat:"."}}
-{{:assign nv2=$nv2|cat:"."}}
-{{:assign var="tv1" value=$nv1|explode:"."}}
-{{:assign var="tv2" value=$nv2|explode:"."}}
-
-{{:assign comp=0}}
-{{:assign i=0}}
-{{#foreach from=$tv1 item="e1"}}
- {{:assign var="e2" from="tv2.%d"|args:$i}}
- {{if $e1 < $e2}}
- {{:assign comp=-1}}
- {{:break}}
- {{elseif $e1 > $e2}}
- {{:assign comp=1}}
- {{:break}}
- {{/if}}
- {{:assign i="%d+1"|math:$i}}
-{{/foreach}}
-{{*
- cas où le premier tableau a moins d'éléments que le 2ème
- et où les éléments présents dans les deux tableaux sont identiques
- *}}
-{{if $comp == 0 && $tv1|count < $tv2|count}}
- {{:assign comp = -1}}
-{{/if}}
diff --git a/_get_amort_lines.html b/_get_amort_lines.html
deleted file mode 100644
index dd115e8..0000000
--- a/_get_amort_lines.html
+++ /dev/null
@@ -1,44 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- lister les lignes d'amortissement liées à la ligne d'immobilisation
- @param immo_doc_id : id du doc associé à l'immobilisation
- @result linked_amort : lignes d'amortissement liées à la ligne d'immobilisation
- @result total_amort : montant total des amortissements de l'immobilisation
- @result created_amort : vrai s'il y a au moins un amortissement créé par le module dans la liste
-*}}
-
-{{:assign total_amort=0}}
-{{#load type="amort_link"
- where="$$.immo_doc_id = :immo_doc_id"
- :immo_doc_id = $immo_doc_id|intval
- assign="amort_info"
-}}
- {{#select
- line.id as line_id,
- line.credit as amount,
- line.label as line_label,
- trans.id as trans_id,
- trans.label as trans_label,
- trans.date as date,
- trans.id_year as year,
- account.id as account_id,
- account.code as account_code,
- account.label as account_label
- 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 = :amort_line_id
- ;
- :amort_line_id = $amort_line_id
- assign="amort_line"
- }}
- {{:assign var="amort_line.amount" value=$amort_info.amount|or:$amort_line.amount}}
- {{if $amort_info.created}}
- {{:assign var="amort_line.created" value=true}}
- {{:assign var="created_amort" value=true}}
- {{/if}}
- {{:assign var="linked_amort.%s_%d"|args:$amort_line.date:$amort_info.id value=$amort_line}}
- {{:assign total_amort="%d+%d"|math:$total_amort:$amort_line.amount}}
- {{/select}}
-{{/load}}
diff --git a/_get_codes.html b/_get_codes.html
index 0373085..a780b40 100644
--- a/_get_codes.html
+++ b/_get_codes.html
@@ -2,13 +2,9 @@
{{*
déterminer le numéro du compte passé en paramètre dans un tableau
- la clé est parfois l'identifiant du compte, parfois son code...
- d'où l'obligation d'extraire le code de la valeur qui a toujours
- la forme : code — libellé
*}}
-{{:assign values=$account|values}}
-{{:assign label=$values.0}}
+{{:assign label=$account|values|key:0}}
{{:assign pos=$label|strpos:" "}}
{{:assign account_code=$label|substr:0:$pos}}
{{:assign var="account_code.%s"|args:$account_code value=$label}}
diff --git a/_get_config.html b/_get_config.html
deleted file mode 100644
index b1a9231..0000000
--- a/_get_config.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- Récupérer la config
-*}}
-
-{{* config par défaut *}}
-{{:read file="./defaut.json" assign="config_defaut"}}
-{{:assign config_defaut=$config_defaut|json_decode}}
-
-{{if $module.config.prefixes == null}}
- {{:assign var="module.config.prefixes" value=$config_defaut.prefixes}}
-{{/if}}
-
-{{if $module.config.unfinished == null}}
- {{:assign var="module.config.unfinished" value=$config_defaut.unfinished}}
-{{/if}}
-
-{{*
-{{if $module.config.tva == null}}
- {{:assign var="module.config.tva" value=$config_defaut.tva}}
-{{/if}}
-*}}
diff --git a/_get_credit_lines.html b/_get_credit_lines.html
deleted file mode 100644
index c06adc5..0000000
--- a/_get_credit_lines.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- chercher des écritures liées à l'immo paramètre au crédit du même compte
- @param immo_doc_id : id du doc associé à l'immobilisation
- @result linked_immos : liste des écritures liées
- @result total_credits : montant total des écritures
-*}}
-{{:assign linked_immos=null}}
-{{:assign total_credits=0}}
-{{#load type="credit_link" where="$$.immo_doc_id=:immo_doc_id" :immo_doc_id=$immo_doc_id|intval}}
- {{#select
- line.credit,
- line.id as line_id,
- trans.id as trans_id,
- trans.label,
- trans.date,
- trans.id_year as year,
- account.id as account_id,
- account.code as account_code,
- account.label as account_label
- 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 = :credit_line_id;
- :credit_line_id=$credit_line_id
- }}
- {{:assign credit=$credit}}
- {{:assign var="linked_immos." doc=$id trans_id=$trans_id credit_line_id=$line_id label=$label amount=$credit date=$date account_id=$account_id account_code=$account_code account_label=$account_label year=$year}}
- {{/select}}
- {{if $amount == null}}
- {{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
- {{else}}
- {{:assign total_credits="%d+%d"|math:$total_credits:$amount}}
- {{/if}}
-{{/load}}
diff --git a/_get_free_amort.html b/_get_free_amort.html
deleted file mode 100644
index b3b142f..0000000
--- a/_get_free_amort.html
+++ /dev/null
@@ -1,47 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- lister les amortissement non rattachés à une immo
- @param condition
-*}}
-{{#select
- line.id as line_id,
- line.id_transaction as trans_id,
- line.credit as amount,
- line.label as line_label,
- trans.date as trans_date,
- trans.label as trans_label,
- trans.id_year as year,
- account.id as account_id,
- account.code as account_code,
- account.label as account_label
- FROM acc_transactions_lines AS line
- INNER JOIN acc_accounts AS account ON account.id = line.id_account
- INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction
- WHERE credit > 0 AND (NOT trans.status & 16) AND !condition
- ORDER BY trans.date, trans.label;
- !condition=$condition
- assign="amort_line"
-}}
- {{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}}
- {{:assign amort_amount=0}}
- {{:assign keep_amort=true}}
- {{#load type="amort_link"
- where="$$.amort_line_id = :amort_line_id"
- :amort_line_id=$amort_line.line_id|intval
- assign="amort_link"
- }}
- {{if $amort_link.amount == null || $amort_link.amount == 0}}
- {{:assign amort_amount=$amort_line.amount}}
- {{:assign keep_amort=false}}
- {{else}}
- {{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}}
- {{/if}}
- {{else}}
- {{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}}
- {{/load}}
- {{if $keep_amort && $amort_amount < $amort_line.amount}}
- {{:assign var="amort_line.amount" value="%d-%d"|math:$amort_line.amount:$amort_amount}}
- {{:assign var="free_amort_lines." value=$amort_line}}
- {{/if}}
-{{/select}}
diff --git a/_get_immo_data.html b/_get_immo_data.html
deleted file mode 100644
index 513ec0b..0000000
--- a/_get_immo_data.html
+++ /dev/null
@@ -1,39 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- Récupérer les infos d'une immobilisation
- @param immo_doc_id : id du document associé à l'immobilisation
- @result info_immo : infos du document associé
- @result ligne_immo : données de la base
- @result message non null si une erreur s'est produite
-*}}
-
-{{#load id=$immo_doc_id|intval assign="info_immo"}}
-{{else}}
- {{:assign error=true}}
- {{:assign message="Immobilisation non trouvée"}}
-{{/load}}
-
-{{if ! $error}}
- {{#select
- line.id as line_id,
- line.debit as amount,
- line.label as line_label,
- line.id_project as id_project,
- trans.id as trans_id,
- trans.label as trans_label,
- trans.date as date_achat,
- account.id as account_id,
- account.code as account_code,
- account.label as account_label
- 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}}
- {{:assign message="Immobilisation non trouvée"}}
- {{/select}}
-{{/if}}
diff --git a/_immobilisations.html b/_immobilisations.html
index cc0fc76..2f28b30 100644
--- a/_immobilisations.html
+++ b/_immobilisations.html
@@ -1,180 +1,178 @@
{{* -*- brindille -*- *}}
-{{* Liste des immobilisations en cours d'amortissement ou amorties *}}
+{{* Liste des immobilisations en cours ou amorties *}}
-{{:include file="_get_config.html" keep="module.config"}}
-
-
- {{if $type_immo == "managed"}}
- Cet onglet liste les immobilisations en cours d'amortissement.
- {{elseif $type_immo == "amortized"}}
- Cet onglet liste les
- immobilisations dont l'amortissement est terminé mais qui sont
- encore utilisées dans l'association, donc encore présentes au
- bilan.
+
+ {{if $type_immo == "encours"}}
+
Immobilisations en cours
+ {{elseif $type_immo == "amortie"}}
+
Immobilisations amorties
{{/if}}
-
+ {{:assign nb_immo=0}}
-{{if $module.table != null}}
- {{* lister les immobilisations *}}
- {{:assign account_condition="("}}
- {{#foreach from=$module.config.prefixes item="code"}}
- {{:assign code=$code|cat:"%"|quote_sql}}
- {{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
- {{/foreach}}
- {{:assign account_condition=$account_condition|cat:"0)"}}
- {{:assign status_condition="($$.status = 'managed' OR $$.status = 'amortized')"}}
- {{:assign condition=$account_condition|cat:" AND line.debit > 0 AND "|cat:$status_condition}}
+
+
+
+
N°
+
Date
+
Libellé
+
Montant
+
Durée
+
N° compte
+
Compte
+
+
+
+
- {{#select
- trans.id as immo_trans_id,
- trans.label as trans_label,
- trans.date as trans_date,
- line.id as immo_line_id,
- line.debit AS debit,
- line.label AS line_label,
- account.id as account_id,
- account.code as account_code,
- trans.id_year as trans_id_year,
- info.id as immo_doc_id,
- $$.duration as duration,
- $$.label as doc_label,
- $$.amount as doc_amount,
- $$.date_achat as doc_date_achat,
- $$.date as doc_date_mes,
- $$.status as status
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
- INNER JOIN acc_accounts AS account ON line.id_account = account.id
- INNER JOIN acc_years AS years ON trans.id_year = years.id
- INNER JOIN !table AS info ON $$.line = line.id
- WHERE !condition
- ORDER BY COALESCE(doc_date_achat, trans_date) DESC;
- !table=$module.table
- !condition=$condition
- assign="immo_line"
- }}
- {{:assign montant_immo=$doc_amount|or:$debit}}
- {{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
- {{#load
- type="credit_link"
- where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $immo_doc_id
- }}
- {{if $amount == null}}
- {{#select credit FROM acc_transactions_lines WHERE id = :credit_line_id;
- :credit_line_id=$credit_line_id
- }}
- {{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}}
- {{/select}}
- {{else}}
- {{:assign montant_immo="%d-%d"|math:$montant_immo:$amount}}
- {{/if}}
- {{/load}}
+ {{* lister les immobilisations *}}
+ {{:read file="./defaut.json" assign="config_json"}}
+ {{:assign config_defaut=$config_json|json_decode}}
+ {{:assign var="prefix_array" value=$config_defaut.prefixes|keys}}
+ {{:assign condition="("}}
+ {{#foreach from=$prefix_array item="code"}}
+ {{:assign code=$code|cat:"%"|quote_sql}}
+ {{:assign condition=$condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
+ {{/foreach}}
+ {{:assign condition=$condition|cat:"0)"}}
+ {{:assign condition=$condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"}}
- {{if $montant_immo == 0}}
- {{* Immobilisation soldée *}}
- {{:continue}}
- {{else}}
- {{:assign var="immo_line.montant_immo" value=$montant_immo}}
- {{/if}}
+ {{#select
+ trans.id as trans_id,
+ trans.label as trans_label,
+ trans.date as trans_date,
+ line.id as immo_id,
+ account.id as account_id,
+ account.code as account_code,
+ account.label as account_label,
+ line.debit AS debit,
+ trans.id_year as trans_id_year
+ FROM acc_transactions AS trans
+ INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
+ INNER JOIN acc_accounts AS account ON line.id_account = account.id
+ INNER JOIN acc_years AS years ON trans.id_year = years.id
+ WHERE !condition
+ ORDER BY trans.date DESC;
+ !condition=$condition
+ }}
+ {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$trans_id}}
+ {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}}
+ {{:assign duration=null}}
- {{* montant des amortissements liés à l'immobilisation *}}
- {{:include file="./_get_amort_lines.html" immo_doc_id=$immo_doc_id keep="total_amort"}}
- {{:assign amort_amount=$total_amort}}
-
- {{* classement par onglet *}}
- {{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}}
- {{if $type_immo == "amortized" && $amort_amount < $montant_immo}}{{:continue}}{{/if}}
- {{:assign var="immo_line.amort_amount" value=$amort_amount}}
-
- {{:assign var="immo_lines." value=$immo_line}}
- {{/select}}
-
- {{if $immo_lines|count > 0}}
-
-{{/if}}
+
diff --git a/_immobilisations_autres.html b/_immobilisations_autres.html
index 0dca07d..4444ac8 100644
--- a/_immobilisations_autres.html
+++ b/_immobilisations_autres.html
@@ -1,175 +1,172 @@
{{* -*- brindille -*- *}}
-{{* Liste des immobilisations non gérées ou non entièrement affectées *}}
+{{* Liste des immobilisations non amortissables ou non (encore) gérées *}}
-{{:include file="_get_config.html" keep="module.config"}}
-
- Cet onglet liste les immobilisations créées en dehors du module et
- pas encore prises en charge par le module ou les écritures de la
- balance d'ouverture initiale dont le montant n'est pas encore
- totalement affecté
-
+
+
Autres immobilisations
+ {{:assign nb_immo=0}}
-{{:assign saved_hides=$module.config.hides}}
-{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}}
-
-{{if $_POST|count == 0}}
- {{:assign unhide=$user_hides.unhide_other}}
-{{else}}
- {{if $_POST.unhide == null}}
- {{:assign unhide=0}}
- {{else}}
- {{:assign unhide=1}}
- {{/if}}
- {{:assign var="user_hides.unhide_other" value=$unhide"}}
- {{:assign var="saved_hides.%s"|args:$logged_user.id value=$user_hides}}
- {{:save key="config" hides=$saved_hides}}
-{{/if}}
-{{if $unhide}}
- {{:assign checked="checked"}}
-{{/if}}
-
-{{* vérifier l'existence de la table du module *}}
-{{if $module.table != null}}
- {{:assign columns="$$.status as status, SUM($$.amount) as amount,"}}
- {{:assign table_join="LEFT JOIN !table AS info ON $$.line = line.id"}}
- {{:assign doc_condition="($$.status IS NULL OR $$.status == 'managed' OR $$.status == 'ignored' OR $$.status == 'amortized')"}}
-{{else}}
- {{:assign columns=""}}
- {{:assign table_join=""}}
- {{:assign doc_condition="1"}}
-{{/if}}
-
-{{*
- lister les immobilisations non prises en charge par le module
- ou dont le montant n'a pas été totalement affecté
-*}}
-{{:assign account_condition="("}}
-{{#foreach from=$module.config.prefixes item="code"}}
- {{:assign code=$code|cat:"%"|quote_sql}}
- {{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
-{{/foreach}}
-{{:assign account_condition=$account_condition|cat:"0)"}}
-{{:assign condition=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16) AND "|cat:$doc_condition}}
-
-{{:assign nb_ignored=0}}
-{{#select
- trans.id as immo_trans_id,
- trans.label as trans_label,
- trans.date as trans_date,
- line.id as immo_line_id,
- line.debit AS debit,
- line.label AS line_label,
- account.id as account_id,
- account.code as account_code,
- account.label as account_label,
- !columns
- trans.id_year as trans_id_year
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
- INNER JOIN acc_accounts AS account ON line.id_account = account.id
- INNER JOIN acc_years AS years ON trans.id_year = years.id
- !table_join
- WHERE !condition
- GROUP BY immo_line_id
- ORDER BY trans.date;
- !columns=$columns
- !table_join=$table_join
- !table=$module.table
- !condition=$condition
- assign="immo_line"
-}}
- {{if $immo_line.status == 'managed'}}
- {{if $immo_line.amount == null || $immo_line.amount == 0 || $immo_line.amount == $immo_line.debit}}
- {{:continue}}
- {{/if}}
- {{/if}}
-
- {{if $immo_line.status == 'ignored'}}
- {{:assign nb_ignored="%d+1"|math:$nb_ignored}}
- {{/if}}
-
- {{if $unhide == null && $immo_line.status == "ignored"}}
- {{:continue}}
- {{/if}}
-
- {{* vérifier si le libellé aurait pu être filtré *}}
- {{#foreach from=$module.config.filters item="filter"}}
- {{if $trans_label|strpos:$filter !== false}}
- {{:assign var="immo_line.status" value="ignored"}}
- {{:assign nb_ignored="%d+1"|math:$nb_ignored}}
- {{/if}}
- {{/foreach}}
-
- {{if $unhide == null && $immo_line.status == "ignored"}}
- {{:continue}}
- {{/if}}
- {{:assign var="immo_lines." value=$immo_line}}
-{{/select}}
-
-{{if $nb_ignored > 0}}
-
-{{/if}}
-
-{{if $immo_lines|count > 0}}
+
+ {{if $nb_immo == 0}}
+
Aucune immobilisation
+ {{/if}}
+
diff --git a/_nav.html b/_nav.html
index 1fa9bf7..f5c6b94 100644
--- a/_nav.html
+++ b/_nav.html
@@ -1,40 +1,36 @@
{{* -*- brindille -*- *}}
diff --git a/_remove_orphan_docs.tpl b/_remove_orphan_docs.tpl
deleted file mode 100644
index 2514171..0000000
--- a/_remove_orphan_docs.tpl
+++ /dev/null
@@ -1,45 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{if $module.table}}
- {{* supprimer les documents sans écriture associée *}}
- {{:assign var="docs." type="amort_link" field="amort_line_id"}}
- {{:assign var="docs." type="credit_link" field="credit_line_id"}}
- {{:assign var="docs." type="cession_link" field="cession_line_id"}}
- {{:assign var="docs." type="exit_link" field="exit_line_id"}}
- {{:assign var="docs." type="immo" field="line"}}
-
- {{#foreach from=$docs}}
-
- {{:assign join_field="$$."|cat:$field}}
- {{:assign type_name=$type|quote_sql}}
- {{:assign type_cond="$$.type"|cat:" = "|cat:$type_name}}
-
- {{* vérifier existence écriture associée au doc *}}
- {{#select
- info.id as info_id,
- $$.immo_doc_id as immo_doc_id,
- line.id as line_id
- FROM !table AS info
- LEFT JOIN acc_transactions_lines as line ON !join_field = line.id
- WHERE !type_cond
- ;
- !table=$module.table
- !type_cond = $type_cond
- !join_field = $join_field
- assign="line"
- }}
- {{if $line.line_id == null}}
- {{:delete id=$line.info_id}}
- {{/if}}
-
- {{* vérifier existence doc immo *}}
- {{if $type != "immo"}}
- {{#load id=$immo_doc_id assign="immo_doc"}}
- {{else}}
- {{:delete id=$line.info_id}}
- {{/load}}
- {{/if}}
- {{/select}}
-
- {{/foreach}}
-{{/if}}
diff --git a/_unfinished.html b/_unfinished.html
deleted file mode 100644
index 33eadde..0000000
--- a/_unfinished.html
+++ /dev/null
@@ -1,250 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{* Liste des immobilisations en cours de constitution *}}
-
-
- Cet onglet liste les immobilisations en cours de
- constitution ; vous pouvez les sélectionner pour créer une
- immobilisation amortissable (exemple : achat de matériaux pour
- la construction d'un bâtiment destiné à être amorti)
-
-
-{{:include file="_get_config.html" keep="module.config"}}
-{{:assign saved_hides=$module.config.hides}}
-{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}}
-
-{{if $_POST|count == 0}}
- {{:assign unhide=$user_hides.unhide_unfinished}}
-{{else}}
- {{if $_POST.unhide == null}}
- {{:assign unhide=0}}
- {{else}}
- {{:assign unhide=1}}
- {{/if}}
- {{:assign var="user_hides.unhide_unfinished" value=$unhide"}}
- {{:assign var="saved_hides.%s"|args:$logged_user.id value=$user_hides}}
- {{:save key="config" hides=$saved_hides}}
-{{/if}}
-{{if $unhide}}
- {{:assign checked="checked"}}
-{{/if}}
-
-{{* lister les immobilisations en cours de constitution *}}
-{{:assign first_code=null}}
-{{:assign accounts_condition="("}}
-{{#foreach from=$module.config.unfinished item="elem"}}
- {{if $elem.code != null}}
- {{:assign code=$elem.code}}
- {{else}}
- {{:assign code=$elem}}
- {{/if}}
- {{if $first_code == null}}
- {{:assign first_code=$code}}
- {{/if}}
- {{:assign code=$code|cat:"%"|quote_sql}}
- {{:assign accounts_condition=$accounts_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
-{{/foreach}}
-{{:assign accounts_condition=$accounts_condition|cat:"0)"}}
-{{:assign condition=$accounts_condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"}}
-
-{{:assign filter_condition=" NOT ("}}
-{{#foreach from=$module.config.filters item="filter"}}
- {{:assign filter="%"|cat:$filter|cat:"%"|quote_sql}}
- {{:assign filter_condition=$filter_condition|cat:" trans_label LIKE "|cat:$filter|cat:" OR "}}
-{{/foreach}}
-{{:assign filter_condition=$filter_condition|cat:"0)"}}
-{{:assign condition=$condition|cat:" AND "|cat:$filter_condition}}
-
-{{:assign nb_ignored=0}}
-{{#select
- trans.id as trans_id,
- trans.label as trans_label,
- trans.date as trans_date,
- line.id as immo_line_id,
- account.id as account_id,
- account.code as account_code,
- account.label as account_label,
- sum(line.debit) AS debit,
- trans.id_year as trans_id_year
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
- INNER JOIN acc_accounts AS account ON line.id_account = account.id
- INNER JOIN acc_years AS years ON trans.id_year = years.id
- WHERE !condition
- GROUP BY trans.id
- ORDER BY trans.date DESC;
- !condition=$condition
- assign="immo_line"
-}}
- {{* voir si l'écriture a été marquée ignorée *}}
- {{:assign var="immo_line.ignore" value=false}}
- {{#load type="immo" assign="info_immo" where="$$.line = :line_id AND $$.status = 'ignored'" :line_id=$immo_line_id|intval}}
- {{:assign var="immo_line.ignore" value=true}}
- {{/load}}
- {{if $immo_line.ignore}}
- {{:assign nb_ignored="%d + 1"|math:$nb_ignored}}
- {{/if}}
- {{if $immo_line.ignore && $unhide == null}}
- {{:continue}}
- {{/if}}
-
- {{*
- TODO cas où :
- - il y a (au moins) une écriture d'avoir
- *}}
-
- {{* voir s'il existe une écriture qui solde l'immobilisation (voir ci-dessus) *}}
- {{#select
- count(*) AS count
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
- INNER JOIN acc_accounts AS account ON line.id_account = account.id
- WHERE line.credit = :amount AND code = :account_code
- ;
- :amount = $debit
- :account_code = $account_code
- }}
- {{:assign count=$count}}
- {{/select}}
-
- {{* S'il y a plus d'une écriture de même montant on ne peut pas décider *}}
- {{if $count == 1}}
- {{:continue}}
- {{/if}}
-
- {{:assign var="immo_lines." value=$immo_line}}
-{{/select}}
-
-
-
-{{if $immo_lines|count > 0}}
-
-
+{{* renseigner ou modifier la date de mise en service et la durée d'amortissement *}}
+{{if $_GET.amort == 0}}
+ {{:assign disabled=1}}
+ {{:assign default=""}}
+{{else}}
+ {{:assign disabled=0}}
+ {{:assign default="managed"}}
+{{/if}}
+ Ce module gère l'amortissement linéaire des immobilisations.
+
+
+
Immobilisations
+Elles sont classées dans plusieurs onglets :
+
+
+
En cours : immobilisations en cours d'amortissement.
+
Terminées : immobilisations dont l'amortissement est terminé.
+
Archivées : immobilisations qui ont été sortie du bilan.
+
Autres : immobilisations pour lesquelles le module n'a pas
+ d'information ou qui ont été marquées non amortissables.
+
+
+
Ajouter une immobilisation
+
+
+
+ Il faut renseigner les informations de l'immobilisation.
+ On peut indiquer qu'il s'agit d'une immobilisation qui ne doit
+ pas être amortie ; dans le cas contraire, il faut renseigner
+ les différents paramètres de l'immobilisation
+
+
+
+
+
Amortissements
+
+
+
+ Le calcul de l'amortissement se fait par la méthode linéaire.
+
+
+ La date de début du calcul est par défaut la date d'achat ; si la
+ date de mise en service est postérieure à la date d'achat, c'est
+ celle-ci qui est prise en compte.
+
+
+
+
Liste des amortissements
+
+
+ On trouve ici de une à trois listes, selon la situation :
+
+
+ Amortissements enregistrés
+
+ Ce sont des écritures d'amortissement déjà
+ enregistrées et liées à l'écriture de
+ l'immobilisation courante.
+
+
+
+ Amortissements futurs
+
+ Ce sont les écritures amortissement de
+ l'immobilisation courante qui n'ont pas encore été
+ enregistrées ; seuls 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.
+
+
+
+ Autres amortissement non rattachés
+
+ Ce sont des écritures passées sur un compte
+ d'amortissement (28xx) qui ne sont
+ associées à aucune écriture d'immobilisation ; en
+ cliquant le bouton « Attacher », on peut rattacher
+ l'écriture d'amortissement sélectionnée à
+ l'immobilisation courante.
+
+
+ Si on a rattaché par erreur une écriture
+ d'amortissement à une immobilisation, le bouton «
+ Détacher » en face de l'écriture permettra de
+ défaire l'opération.
+
+
+
+
+
+
Créer une écriture d'amortissement
+
+
+
+ Il faut renseigner les différents paramètres de l'amortissement :
+
+
Date ; par défaut, il s'agit de la date de fin d'exercice
+
Désignation : déterminée à partir du libellé de l'immobilisation< ; elle peut être modifiée/li>
+
Montant : sa valeur est calculée par le module ; elle peut être modifiée
+
+ Compte de débit : à choisir dans la liste ; par défaut
+ c'est le compte 6811 : Dotation aux amortissements
+ des immobilisations
+
+
+ Compte d'amortissement : à choisir dans la liste ; par
+ défaut c'est le compte formé en intercalant un 8 après
+ le 2 initial du compte d'immobilisation (exemple :
+ 2183 => 28183)
+
+
+
+
+
+
+
Remarques
+
+
+
+ Les écritures d'immobilisation et d'amortissement créées en
+ dehors du module ne peuvent être associées automatiquement que
+ si leurs écritures ont été liées ; dans le cas contraire, il
+ faudra renseigner manuellement les infos de l'immobilisation.
+
+
+
+
+
+ Dans le deuxième cas, il faut cliquer sur le bouton « Ajouter
+ infos » puis :
+
+
soit indiquer que l'immobilisation ne doit pas être amortie
+
soit 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
+
+
+
+ Tant qu'une immobilisation ne possède pas d'amortissement, il est
+ possible de modifier ses informations à l'aide du bouton «
+ Modifier infos ».
+
+
diff --git a/amortization.html b/amortization.html
index b825074..c8280c0 100644
--- a/amortization.html
+++ b/amortization.html
@@ -2,89 +2,149 @@
{{*
Lister les écritures d'amortissement associées à une immobilisation
- @param immo_doc_id : id du doc associé à l'immo
- @param type_immo : managed, amortized, archived, others
+ @param immo_id : id de la ligne d'immo
+ @param type_immo : encours, amortie, sortie, autres
*}}
-{{* données de l'immobilisation *}}
-{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
-{{if $message != null}}
- {{:error message=$message}}
-{{/if}}
-
+{{* récupérer les infos de l'immobilisation *}}
+{{#select
+ line.id as immo_id,
+ line.debit as montant,
+ trans.id as trans_id,
+ trans.label as label,
+ trans.date
+ 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}}
+{{:assign solde=$ligne_immo.montant}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.trans_id}}
-{{:assign date_debut=$info_immo.date_mes|or:$info_immo.date_achat|or:$ligne_immo.date_achat}}
-{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
-{{if $label_immo|strpos:$ligne_immo.line_label === false}}
- {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
-{{/if}}
-{{if $info_immo.amount != null}}
- {{:assign var="ligne_immo.amount" value=$info_immo.amount}}
+
+{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_id|intval}}
+ {{:assign duree=$duration}}
+ {{:assign date_debut=$date}}
+ {{:assign status=$status}}
+{{/load}}
+
+{{* chercher des écritures d'amortissement liées à l'immobilisation *}}
+{{#select
+ l_amort.credit as amort_amount,
+ l_amort.label as amort_label,
+ l_amort.id as amort_line,
+ CASE WHEN links.id_related = t_immo.id
+ THEN links.id_transaction
+ ELSE links.id_related
+ END as amort_trans_id,
+ 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;
+ :line_id = $_GET.immo_id|intval
+ assign=linked_lines.
+}}
+ {{if $date_debut == null}}
+ {{:assign date_debut=$amort_date}}
+ {{/if}}
+{{/select}}
+
+{{if $status == "amortized"}}
+ {{:assign amort_amount=$ligne_immo.montant}}
+ {{:assign valeur_residuelle=0}}
+{{else}}
+ {{:assign valeur_residuelle=$ligne_immo.montant}}
+ {{#foreach from=$linked_lines}}
+ {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}}
+ {{/foreach}}
{{/if}}
-{{if $info_immo.status == 'ignored'}}
- {{:error message="Cette immobilisation ne doit pas être amortie"}}
-{{/if}}
+{{* Autres amortissements non rattachés *}}
+{{#select
+ line.id as l_id,
+ line.id_transaction as t_id,
+ line.credit as amort_amount,
+ line.label as l_label,
+ trans.date as t_date,
+ trans.label as t_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 line
+ INNER JOIN acc_accounts AS account ON account.id = line.id_account
+ INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction
+ INNER JOIN acc_years AS y ON y.id = trans.id_year
+ WHERE account.code LIKE "28%" AND credit > 0 AND (NOT trans.status & 16)
+ ORDER BY trans.date, trans.label;
+ assign=autre_amort
+}}
+ {{#select
+ id_transaction,
+ id_related
+ FROM acc_transactions_links
+ WHERE id_transaction = :id_amort OR id_related = :id_amort;
+ :id_amort=$t_id
+ }}
+ {{else}}
+ {{:assign var="autres_amortissements." value=$autre_amort}}
+ {{/select}}
+{{/select}}
-{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
-{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_immos, total_credits"}}
-{{:assign solde="%d-%d"|math:$ligne_immo.amount:$total_credits}}
-{{:assign valeur_residuelle=$solde}}
-{{* lister les amortissements liés à l'immobilisation *}}
-{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort, created_amort"}}
-{{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$total_amort}}
-
-{{if $valeur_residuelle > 0}}
- {{* lister les amortissements non attachés à une immo *}}
- {{:assign account_filter="28%"|quote_sql}}
- {{:assign filter_condition="account.code LIKE "|cat:$account_filter}}
-
- {{:assign date_amort=$date_debut|quote_sql}}
- {{:assign date_condition="trans.date >= "|cat:$date_amort}}
- {{:assign condition=$date_condition|cat:" AND "|cat:$filter_condition}}
- {{:include file="./_get_free_amort.html" condition=$condition keep="free_amort_lines"}}
-{{/if}}
-
-{{:admin_header title="Détails de l'immobilisation" custom_css="./style.css" current="module_amortization"}}
+{{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortissement"}}
{{* barre de navigation *}}
-{{if $_GET.type_immo == "amortized" && $valeur_residuelle == 0}}
- {{:assign current="amortized"}}
-{{elseif $_GET.type_immo == "archived"}}
- {{:assign current="archived"}}
-{{elseif $_GET.type_immo == null || $_GET.type_immo == "managed" || $valeur_residuelle > 0}}
- {{:assign current="managed"}}
+{{if $_GET.type_immo == "amortie" || $valeur_residuelle== 0 }}
+ {{:assign subcurrent="amortie"}}
+{{elseif $_GET.type_immo == "sortie"}}
+ {{:assign subcurrent="sortie"}}
+{{elseif $_GET.type_immo == null || $_GET.type_immo == "encours"}}
+ {{:assign subcurrent="encours"}}
{{else}}
- {{:assign current="other"}}
+ {{:assign subcurrent="autre"}}
{{/if}}
{{:include
file="_nav.html"
- current="%s"|args:$current
- subcurrent="details"
+ current="index"
+ subcurrent="%s"|args:$subcurrent
+ subsubcurrent="amortization"
type_immo=$_GET.type_immo
- autres_amort=$free_amort_lines
+ autres_amort=$autres_amortissements
}}
{{if $_GET.ok}}
- {{if $_GET.msg|match:"attach_amort"}}
- {{:assign msg="Attachement amortissement effectué"}}
- {{elseif $_GET.msg|match:"detach_amort"}}
- {{:assign msg="Détachement amortissement affectué"}}
- {{elseif $_GET.msg|match:"attach_avoir"}}
- {{:assign msg="Attachement avoir affectué"}}
- {{elseif $_GET.msg|match:"detach_avoir"}}
- {{:assign msg="Détachement avoir affectué"}}
+ {{if $_GET.msg|match:"attach"}}
+ {{:assign msg="Attachement écriture %s effectué"|args:$_GET.trans_id}}
+ {{elseif $_GET.msg|match:"detach"}}
+ {{:assign msg="Détachement écriture %s affectué"|args:$_GET.trans_id}}
{{elseif $_GET.msg|match:"amortissement"}}
{{:assign msg="Amortissement enregistré"}}
- {{elseif $_GET.msg|match:"modif"}}
- {{:assign msg="Modifications enregistrées"}}
{{/if}}
- Il sera possible de choisir la date de sortie et d'indiquer
- le montant de la cession le cas échéant.
+ Il sera possible de choisir la date de sortie, d'indiquer
+ le montant de la cession le cas échéant et de modifier les
+ comptes associés.
{{"min(%d, %d)"|math:$valeur_residuelle:$annuite|money_currency_html:false|raw}}
- {{if $annuite <= $valeur_residuelle}}
- pour un exercice de 365 jours
- {{/if}}
-
- Il y a des écritures d'amortissement qui ne sont pas attachées à une immobilisation !
- Utilisez le bouton « Attacher un amortissement » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
-
Aucun amortissement enregistré pour cette
- immobilisation ; en fin d'exercice vous pouvez enregistrer un
- nouvel amortissement à l'aide du bouton « Enregistrer un
- amortissement »
-{{elseif $_GET.type_immo == "managed"}}
-
En fin d'exercice vous pouvez enregistrer
- un nouvel amortissement à l'aide du bouton « Enregistrer un
- amortissement »
-{{/if}}
+ {{* Autres amortissements non rattachés *}}
+ {{if $autres_amortissements != null}}
+
+ Il existe des écritures d'amortissement qui ne sont pas rattachés à une immobilisation !
+ Utilisez le bouton « Attacher un amortissement » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
+
+ {{/if}}
+{{/if}}
{{:form_errors}}
{{:admin_footer}}
diff --git a/asset.schema.json b/asset.schema.json
deleted file mode 100644
index 4391dd5..0000000
--- a/asset.schema.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "description": "Donnée d'une immobilisation",
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["immo"]
- },
- "line" : {
- "description": "id ligne écriture de l'immobilisation",
- "type": "integer"
- },
- "duration" : {
- "description": "durée de l'amortissement en années",
- "type": "integer"
- },
- "label" : {
- "description" : "libellé de l'immobilisation si besoin",
- "type" : ["string", "null"]
- },
- "amount" : {
- "description": "montant de l'immobilisation si besoin",
- "type": ["integer", "null"]
- },
- "date_achat" : {
- "description" : "date d'achat de l'immobilisation si besoin",
- "type" : ["string", "null"],
- "format" : "date"
- },
- "date_mes" : {
- "description" : "date de mise en service de l'immobilisation",
- "type" : ["string", "null"],
- "format" : "date"
- },
- "status" : {
- "type" : ["string", "null"],
- "enum" : ["managed", "amortized", "archived", "ignored"]
- },
- "created" : {
- "description" : "vrai si immobilisation créée dans le module",
- "type" : ["boolean", "null"]
- }
- },
- "required": ["type", "line", "duration", "status"]
-}
diff --git a/attach_amort.html b/attach_amort.html
index c03821b..8680894 100644
--- a/attach_amort.html
+++ b/attach_amort.html
@@ -1,174 +1,56 @@
{{* -*- brindille -*- *}}
{{*
- Enregistrer la liaison entre une ligne d'écriture d'amortissement
- et une ligne d'écriture d'immobilisation
- @param immo_doc_id : numéro du doc d'immo
- @param amort_line_id : numéro de ligne de l'écriture d'amortissement
+ Enregistrer la liaison entre une écriture d'amortissement et
+ l'écriture d'immobilisation correspondante
*}}
-{{* données de l'immobilisation *}}
-{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
-{{if $message != null}}
- {{:error message=$message}}
-{{/if}}
-
-{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
-{{if $label_immo|strpos:$ligne_immo.line_label === false}}
- {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
-{{/if}}
-{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.amount}}
+{{* 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}}
+ {{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_id}}
+{{/select}}
{{* chercher l'écriture d'amortissement *}}
{{#select
- line.credit as amount,
- line.label as line_label,
- trans.date as amort_date,
- trans.label as trans_label,
- trans.id as trans_id,
- acc.code as account_code,
- acc.label as account_label
- FROM acc_transactions_lines as line
- INNER JOIN acc_transactions as trans on line.id_transaction = trans.id
- INNER JOIN acc_accounts as acc on line.id_account = acc.id
- WHERE line.id = :line_id;
- :line_id = $_GET.amort_line_id|intval
- assign="amort_line"
+ id_transaction
+ FROM acc_transactions_lines
+ WHERE id = :line_id;
+ :line_id = $_GET.amort_id|intval
}}
+ {{:assign amort_id=$id_transaction}}
{{else}}
- {{:error message="Amortissement non trouvé"}}
+ {{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_id}}
{{/select}}
-{{:assign amort_label=$amort_line.trans_label}}
-{{if $amort_line.line_label != null && $amort_line.line_label != $amort_label}}
- {{:assign amort_label=$amort_label|cat:"— "|cat:$amort_line.line_label}}
-{{/if}}
-{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$amort_line.trans_id}}
-{{* montant de l'écriture d'amortissement déjà affecté *}}
-{{:assign montant_affecte=0}}
-{{#load type="amort_link"
- where="$$.amort_line_id = :amort_line_id"
- :amort_line_id = $_GET.amort_line_id|intval
+{{* chercher les liaisons de l'écriture d'immobilisation *}}
+{{#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
}}
- {{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}}
-{{/load}}
-{{:assign reste="%d-%d"|math:$amort_line.amount:$montant_affecte}}
+ {{:assign var="linked_transactions." value=$linked_id}}
+{{/select}}
-{{* Traiter l'envoi du formulaire *}}
-{{#form on="save"}}
- {{* vérifier que le montant saisi est inférieur au reste *}}
- {{if $_POST.montant == null || $_POST.montant == 0}}
- {{:assign montant_amort=$reste}}
- {{if $montant_affecte == 0}}
- {{:assign saved_amount=null}}
- {{else}}
- {{:assign saved_amount=$reste}}
- {{/if}}
- {{else}}
- {{:assign montant_amort=$_POST.montant|money_int}}
- {{if $montant_amort > $reste}}
- {{:assign reste_nb="%f"|math:$reste|money_currency:false}}
- {{:error message="Le montant de l'amortissement ne peut être supérieur au reste (%s)"|args:$reste_nb}}
- {{/if}}
- {{if $montant_amort == $amort_line.amount}}
- {{:assign saved_amount=null}}
- {{else}}
- {{:assign saved_amount=$montant_amort}}
- {{/if}}
- {{/if}}
-
- {{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
- {{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
- {{:assign montant_immo="%d-%d"|math:$montant_immo:$total_credits}}
-
- {{* montant des amortissements *}}
- {{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_amort"}}
-
- {{* vérifier que le montant total des amortissements ne dépasse pas la valeur de l'immo *}}
- {{:assign vnc="%d-%d"|math:$montant_immo:$total_amort}}
- {{:assign total_amort="%d+%d"|math:$total_amort:$montant_amort}}
- {{if $total_amort > $montant_immo}}
- {{:assign ma="%f"|math:$montant_amort|money_currency:false}}
- {{:assign vnc="%f"|math:$vnc|money_currency:false}}
- {{:error message="Le montant de l'amortissement (%s) dépasse la valeur résiduelle de l'immobilisation (%s)"|args:$ma:$vnc}}
- {{/if}}
-
- {{*
- supprimer les documents qui pointent sur une ligne d'amortissement absente
- cas de la suppression manuelle d'un amortissement
- *}}
- {{:include file="_remove_orphan_docs.tpl"}}
-
- {{* Lier l'écriture d'amortissement à l'écriture d'immobilisation *}}
- {{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$amort_line.trans_id}}
-
- {{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}}
- {{* TODO voir si nécessaire ? *}}
- {{#load type="amort_link"
- where="$$.immo_doc_id = :immo_doc_id AND $$.amort_line_id = :amort_line_id"
- :immo_doc_id=$_GET.immo_doc_id|intval
- :amort_line_id = $_GET.amort_line_id|intval
- limit=1
- }}
- {{else}}
- {{:save
- key=""|uuid
- type="amort_link"
- immo_doc_id=$_GET.immo_doc_id|intval
- amort_line_id=$_GET.amort_line_id|intval
- amount=$saved_amount
- }}
- {{/load}}
-
- {{* immo soldée ? *}}
- {{if $total_amort == $montant_immo && $_GET.from != "exit"}}
- {{:assign status="amortized"}}
- {{:save
- key=$info_immo.key
- status=$status
- }}
- {{/if}}
-
-{{if $_GET.from == "exit"}}
- {{:redirect force="exit_step2.html?immo_doc_id=%s&from=exit&ok=1&msg=attach_amort"|args:$_GET.immo_doc_id}}
-{{else}}
- {{:redirect force="amortization.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=attach_amort"|args:$_GET.immo_doc_id:$status}}
-{{/if}}
-{{/form}}
-
-{{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}}
-
-{{* barre de navigation *}}
-{{if ! $dialog}}
- {{:include file="_nav.html" current="managed" subcurrent="attach_amort"}}
-{{/if}}
-{{:form_errors}}
-
-
-
-
-
diff --git a/attach_exit.html b/attach_exit.html
deleted file mode 100644
index a58eecc..0000000
--- a/attach_exit.html
+++ /dev/null
@@ -1,39 +0,0 @@
-{{* -*- brindille -*- *}}
-
-{{*
- Enregistrer la liaison entre une écriture d'immobilisation et
- une écriture de sortie d'immobilisation
- @param immo_doc_id : id du document associé à l'immobilisation
- @param exit_line_id : ligne de l'écriture de sortie d'immobilisation
-*}}
-
-{{* données de l'immobilisation *}}
-{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id keep="info_immo, ligne_immo, message"}}
-{{if $message != null}}
- {{:error message=$message}}
-{{/if}}
-
-{{* chercher l'écriture de sortie d'immobilisation *}}
-{{#select
- id_transaction
- FROM acc_transactions_lines
- WHERE id = :line_id;
- :line_id = $_GET.exit_line_id|intval
-}}
- {{:assign rebut_id=$id_transaction}}
-{{else}}
- {{:error message="Impossible de trouver l'écriture de sortie d'immobilisation"}}
-{{/select}}
-
-{{* Lier l'écriture de sortie à l'écriture d'immobilisation *}}
-{{:include file="_common_attach.html" immo_doc_id=$_GET.immo_doc_id trans_id=$rebut_id}}
-
-{{* enregistrer la liaison de l'écriture de sortie *}}
-{{:save
- key=""|uuid
- type="exit_link"
- immo_doc_id=$info_immo.id
- exit_line_id=$_GET.exit_line_id|intval
-}}
-
-{{:redirect force="exit_step4.html?immo_doc_id=%s&from=exit&ok=1&msg=attach_exit"|args:$_GET.immo_doc_id}}
diff --git a/balance_sheet_exit.html b/balance_sheet_exit.html
index da92038..3a56e4a 100644
--- a/balance_sheet_exit.html
+++ b/balance_sheet_exit.html
@@ -2,76 +2,93 @@
{{*
Sortir une immobilisation du bilan
- @param immo_doc_id : id du doc associé à l'immo
+ @param immo_id : id de la ligne d'immobilisation
*}}
-{{* données de l'immobilisation *}}
-{{:include file="_get_immo_data.html" immo_doc_id=$_GET.immo_doc_id|intval keep="info_immo, ligne_immo, message"}}
-{{if $message != null}}
- {{:error message=$message}}
-{{/if}}
-
-{{:assign label_immo=$info_immo.label|or:$ligne_immo.trans_label}}
-{{if $label_immo|strpos:$ligne_immo.line_label === false}}
- {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
-{{/if}}
-
-{{:assign date_achat=$info_immo.date_achat|or:$ligne_immo.date_achat}}
-{{if $info_immo.date_mes != null && $info_immo.date_mes != $date_achat}}
- {{:assign date_mes=$info_immo.date_mes}}
-{{/if}}
-{{: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.amount" value=$info_immo.amount}}
-{{/if}}
-
-{{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}}
-{{:include file="_get_credit_lines.html" immo_doc_id=$_GET.immo_doc_id keep="total_credits"}}
-{{:assign var="ligne_immo.amount" value="%d-%d"|math:$ligne_immo.amount:$total_credits}}
-
-{{* lister les amortissements liés à l'immobilisation *}}
-{{:include file="./_get_amort_lines.html" immo_doc_id=$_GET.immo_doc_id keep="linked_amort, total_amort"}}
-{{:assign amort_number=$linked_amort|count}}
-
-{{#foreach from=$linked_amort|ksort item="line"}}
- {{if $first_amort_date == null}}
- {{:assign first_amort_date=$line.date}}
- {{/if}}
- {{if $last_amort_date == null}}
- {{:assign last_amort_date=$line.date}}
- {{elseif $line.date > $last_amort_date}}
- {{:assign last_amort_date=$line.date}}
- {{/if}}
-{{/foreach}}
-
-{{if $total_amort == 0}}
- {{if $info_immo.status == "amortized"}}
- {{:assign total_amort=$ligne_immo.amount}}
- {{/if}}
+{{* 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}}
- {{:assign date_debut=$last_amort_date}}
+ {{: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}}
+ {{if $info_immo.status == "amortized"}}
+ {{:assign amort_amount=$ligne_immo.montant}}
+ {{else}}
+ {{:assign amort_amount=0}}
+ {{/if}}
+{{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 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.amount:$total_amort}}
+{{:assign valeur_nette="%f-%f"|math:$ligne_immo.montant:$amort_amount}}
{{*
- lister les exercices ouverts dont la date de fin est postérieure à la date du dernier amortissment
+lister les exercices ouverts :
+ - dont la date de fin est postérieure à la date du dernier amortissment
+ - dont la date de début est antérieure ou égale à la date du jour
*}}
{{: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}}
+ {{if $start_date|strtotime > $now}}
+ {{:break}}
+ {{/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 la sortie de bilan à partir du %s"|args:$debut}}
+ {{:error message="Aucun exercice ouvert pour enregistrer un amortissement"}}
{{/years}}
{{if $years|count == 1}}
{{:assign default_year=$years.0.id}}
@@ -86,89 +103,125 @@
{{: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_mes != null}}
- {{if $_POST.date_sortie|parse_date < $info_immo.date_mes}}
- {{:assign immo_date=$info_immo.date_mes|date_short}}
+ {{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_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 $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 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}}
+ {{:assign ok=false}}
+ {{:assign msg_amort=""}}
+ {{#foreach from=$years}}
+ {{if $id == $_POST.id_year}}
+ {{:assign selected_year=$id}}
{{if $start_date|strtotime <= $ts_exit && $ts_exit <= $end_date|strtotime}}
- {{:assign current_year=$current_year}}
- {{:assign exercice_ok=true}}
+ {{:assign ok=true}}
{{:break}}
{{/if}}
{{/if}}
+
+ {{* voir si des amortissements ont été oubliés *}}
+ {{if $info_immo.status != "amortized" && $start_date|strtotime > $amort_line.last_amort_date|strtotime && $end_date|strtotime < $now}}
+ {{:assign debut=$start_date|date_short}}
+ {{:assign fin=$end_date|date_short}}
+ {{:assign msg_amort=$msg_amort|cat:"\n"|cat:" - "|cat:$label|cat:" : du "|cat:$debut|cat:" au "|cat:$fin}}
+ {{/if}}
{{/foreach}}
- {{if ! $exercice_ok}}
+ {{if ! $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 $msg_amort != ""}}
+ {{:error message="Vous devez d'abord enregistrer les amortissements des exercices suivants : %s"|args:$msg_amort}}
{{/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}}
+ {{: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_amortization"}}
+{{:admin_header title="Sortie de bilan" custom_css="./style.css" current="module_amortissement"}}
+{{* barre de navigation *}}
{{if ! $dialog}}
- {{:include file="_nav.html" current="%s"|args:$_GET.type_immo subcurrent="balance_exit"}}
+ {{:include file="_nav.html" current="index" subcurrent="%s"|args:$_GET.type_immo subsubcurrent="balance_exit"}}
{{/if}}
{{:form_errors}}
{{* formulaire de sortie du bilan *}}
-
Sortir l'immobilisation « {{$label_immo}} » du bilan
+
Sortir l'immobilisation « {{$ligne_immo.label}} » du bilan