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 b5d2cc6..fafad3b 100644
--- a/_archives.html
+++ b/_archives.html
@@ -5,6 +5,7 @@
Cette page liste les immobilisations sorties du bilan
+{{* Immobilisation avec une écriture de sortie de bilan *}}
{{:include file="_get_config.html" keep="module.config"}}
{{* lister les immobilisations *}}
@@ -34,6 +35,7 @@
Montant
N° compte
Compte
+
Projet
@@ -48,70 +50,57 @@
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.id as immo_id,
line.debit AS debit,
account.id as account_id,
account.code as account_code,
- account.label as account_label
+ account.label as account_label,
+ project.label as project_label
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 montant_immo=$debit}}
{{* voir si l'immo est prise en charge *}}
- {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_line_id assign="info_immo"}}
+ {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}}
{{:assign status=$status}}
+ {{if $amount != null}}
+ {{:assign montant_immo=$amount}}
+ {{/if}}
{{else}}
- {{:assign status=null}}
+ {{:assign amortissable="nsp"}}
+ {{:assign status="unknown"}}
{{/load}}
- {{if $status != "archived"}}
+ {{if $status == "ignored"}}
{{:continue}}
{{/if}}
- {{:assign date_mes=$info_immo.date_mes|or:$trans_date}}
- {{:assign montant_immo=$debit}}
- {{* chercher le doc de sortie du bilan *}}
- {{:assign exit_date=null}}
- {{#load type="exit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id=$info_immo.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 exit_date=$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 = $info_immo.id
+ {{* voir s'il existe une écriture liée qui solde l'immobilisation *}}
+ {{#select
+ trans.date as exit_date
+ FROM acc_transactions_links AS link
+ INNER JOIN acc_transactions AS trans ON
+ (CASE
+ WHEN link.id_transaction = :trans_id THEN link.id_related
+ WHEN link.id_related = :trans_id THEN link.id_transaction
+ END) = trans.id
+ INNER JOIN acc_transactions_lines AS line ON line.id_transaction = trans.id
+ INNER JOIN acc_accounts AS acc on line.id_account=acc.id
+ WHERE line.credit = :montant_immo
+ AND acc.code = :account_code
+ ;
+ :trans_id = $trans_id
+ :montant_immo = $montant_immo
+ :account_code = $account_code
}}
- {{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:$montant_immo:$total_credits}}
-
- {{if $solde_immo == 0}}
{{:assign status="archived"}}
- {{/if}}
+ {{:assign exit_date=$exit_date}}
+ {{/select}}
{{if $status != "archived"}}
{{:continue}}
@@ -127,7 +116,12 @@
{{* voir s'il y a une écriture de cession associée à cette immo *}}
{{#select
trans.id,
- line.debit
+ trans.label,
+ trans.date,
+ line.id,
+ line.debit,
+ acc.code,
+ acc.label
FROM acc_transactions_links AS link
INNER JOIN acc_transactions AS trans ON (CASE
WHEN link.id_transaction = :trans_id THEN link.id_related
@@ -145,24 +139,21 @@
{{/select}}
{{/if}}
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 8c84736..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|intval
-}}
- {{: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..e6d85c1 100644
--- a/_get_codes.html
+++ b/_get_codes.html
@@ -7,8 +7,7 @@
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_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 93648ec..aacdc34 100644
--- a/_immobilisations.html
+++ b/_immobilisations.html
@@ -1,18 +1,17 @@
{{* -*- 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"}}
- Cette page liste les immobilisations en cours d'amortissement
- {{elseif $type_immo == "amortized"}}
- Cette page liste les immobilisations dont l'amortissement est terminé
- {{/if}}
-
+
+ {{if $type_immo == "managed"}}
+ Cette page liste les immobilisations en cours d'amortissement
+ {{elseif $type_immo == "amortized"}}
+ Cette page liste les immobilisations dont l'amortissement est terminé
+ {{/if}}
+
-{{if $module.table != null}}
@@ -30,102 +29,145 @@
{{* lister les immobilisations *}}
+ {{:include file="_get_config.html" keep="module.config"}}
+
{{: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}}
+ {{:assign filter_condition=" AND 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=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16)"|cat:$filter_condition}}
{{:assign nb_immo=0}}
{{:assign total_immo = 0}}
{{#select
- trans.id as immo_trans_id,
+ trans.id as trans_id,
trans.label as trans_label,
trans.date as trans_date,
- line.id as immo_line_id,
+ line.id as immo_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
+ account.label as account_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 !table AS info ON $$.line = line.id
WHERE !condition
- ORDER BY COALESCE(doc_date_achat, trans_date) DESC;
- !table=$module.table
+ ORDER BY trans.date DESC;
!condition=$condition
}}
- {{if $status != "managed" && $status != "amortized"}}
- {{:continue}}
- {{/if}}
- {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$immo_trans_id}}
+ {{: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 montant_immo=$doc_amount|or:$debit}}
- {{:assign immo_date = $doc_date_achat|or:$trans_date}}
- {{:assign label_immo=$doc_label|or:$trans_label}}
- {{if $label_immo|strpos:$line_label === false}}
- {{:assign label_immo=$label_immo|cat:" — "|cat:$line_label}}
- {{/if}}
+ {{:assign duration=null}}
+ {{:assign montant_immo=$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}}
+ {{* voir si l'immo est prise en charge *}}
+ {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_id|intval}}
+ {{:assign duration=$duration}}
+ {{:assign status=$status}}
+ {{if $amount != null}}
+ {{:assign montant_immo=$amount}}
{{/if}}
+ {{else}}
+ {{:assign amortissable="nsp"}}
+ {{:assign status="unknown"}}
{{/load}}
-
- {{if $montant_immo == 0}}
- {{* Immobilisation soldée *}}
+ {{if $status == "ignored"}}
{{:continue}}
{{/if}}
- {{* 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}}
+ {{* voir s'il existe une écriture qui solde l'immobilisation *}}
+ {{#select
+ line.id AS line
+ FROM acc_transactions_lines AS line
+ INNER JOIN acc_accounts AS acc ON acc.id = line.id_account
+ INNER JOIN acc_transactions_lines AS line2 ON line2.id_account = acc.id
+ WHERE
+ line.id = :line_id
+ AND line2.credit = :montant_immo;
+ :line_id = $immo_id|intval
+ :montant_immo = $montant_immo
+ }}
+ {{:assign status="archived"}}
+ {{/select}}
+ {{if $status == "archived"}}
+ {{:continue}}
+ {{/if}}
+
+ {{* voir s'il existe des écritures d'amortissement associées *}}
+ {{#select
+ sum(l_amort.credit) as amort_amount,
+ CASE links.id_related = t_immo.id
+ WHEN true THEN links.id_transaction
+ WHEN false THEN links.id_related
+ END as amort_trans_id
+ 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_accounts AS account ON l_amort.id_account = account.id
+ WHERE
+ l_immo.id = :line_id
+ AND
+ l_amort.credit <> 0
+ AND
+ account.code LIKE '28%';
+ :line_id = $immo_id|intval
+ }}
+ {{if $amort_amount == null}}
+ {{:assign exist_amort=false}}
+ {{:assign amort_amount=0}}
+ {{else}}
+ {{:assign exist_amort=true}}
+ {{:assign amort_amount=$amort_amount}}
+ {{/if}}
+ {{/select}}
{{* classement par onglet *}}
{{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}}
- {{if $type_immo == "amortized" && $amort_amount < $montant_immo}}{{:continue}}{{/if}}
+ {{if $type_immo == "managed" && $status == "amortized"}}{{:continue}}{{/if}}
+ {{if $status == "unknown" && ! $exist_amort}}{{:continue}}{{/if}}
+ {{if $type_immo == "amortized" && $amort_amount < $montant_immo && $status != "amortized"}}{{:continue}}{{/if}}
{{:assign nb_immo="%d+1"|math:$nb_immo}}
{{:assign total_immo="%d+%d"|math:$total_immo:$montant_immo}}
{{:assign var="montant" from="sommes_immo.%s"|args:$account_code}}
{{:assign var="sommes_immo.%s"|args:$account_code value="%d+%d"|math:$montant:$montant_immo}}
+ {{/if}}
+
diff --git a/_immobilisations_autres.html b/_immobilisations_autres.html
index 383ba12..51aaa0d 100644
--- a/_immobilisations_autres.html
+++ b/_immobilisations_autres.html
@@ -1,188 +1,179 @@
{{* -*- 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"}}
-
- Cette page liste les immobilisations 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é
-
- 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 ; utilisez le bouton « Enregistrer un amortissement » pour enregistrer un nouvel 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 « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
+
+ {{/if}}
+{{/if}}
{{:form_errors}}
{{:admin_footer}}
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}}
-
-