diff --git a/_archives.html b/_archives.html
index 9f06778..da3f19c 100644
--- a/_archives.html
+++ b/_archives.html
@@ -5,7 +5,6 @@
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 *}}
@@ -66,47 +65,54 @@
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|intval}}
+ {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_line_id assign="info_immo"}}
{{:assign status=$status}}
{{else}}
- {{:assign amortissable="nsp"}}
- {{:assign status="unknown"}}
+ {{:assign status=null}}
{{/load}}
- {{if $status == "ignored"}}
+ {{if $status != "archived"}}
{{: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}}
{{* chercher des écritures liées à l'immo courante au crédit du même compte
et déduire leur montant de celui de l'immo
*}}
- {{:assign solde_immo=$montant_immo}}
{{:assign credit_immo=null}}
- {{#select
- CASE links.id_related = :immo_trans_id
- WHEN true THEN links.id_transaction
- WHEN false THEN links.id_related
- END as other_id,
- line.credit,
- MAX(trans2.date) as exit_date
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_links as links
- ON (trans.id = links.id_transaction OR trans.id = links.id_related)
- INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id
- INNER JOIN acc_accounts AS acc ON line.id_account = acc.id
- INNER JOIN acc_transactions AS trans2 ON trans2.id = other_id
- WHERE trans.id = :immo_trans_id AND line.credit > 0 AND acc.code = :account
- ORDER BY trans2.date, trans2.id
- ;
- :immo_trans_id=$trans_id
- :account=$account_code
- assign="credit_immo."
+ {{:assign total_credits=0}}
+ {{#load
+ type="credit_link"
+ where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $info_immo.id
}}
- {{:assign solde_immo="%d-%d"|math:$solde_immo:$credit}}
- {{:assign exit_date=$exit_date}}
- {{/select}}
+ {{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"}}
@@ -116,11 +122,6 @@
{{:continue}}
{{/if}}
- {{:assign nb=$credit_immo|count}}
- {{:assign nb="%d-1"|math:$nb}}
- {{:assign var="last_credit" from="credit_immo.%d"|args:$nb}}
- {{:assign montant_immo=$last_credit.credit}}
-
{{: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 nb_immo="%d+1"|math:$nb_immo}}
@@ -150,7 +151,7 @@
diff --git a/_immobilisations.html b/_immobilisations.html
index 2bb7174..1546725 100644
--- a/_immobilisations.html
+++ b/_immobilisations.html
@@ -3,16 +3,16 @@
{{* Liste des immobilisations en cours d'amortissement 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}}
@@ -29,19 +29,6 @@
- {{* vérifier l'existence de la table du module *}}
- {{if $module.table != null}}
- {{:assign columns="$$.duration as duration, $$.status as status,"}}
- {{:assign table_join="LEFT JOIN !table AS info ON $$.line = line.id"}}
- {{:assign doc_condition1="($$.status <> 'ignored' AND $$.status <> 'archived')"}}
- {{:assign doc_condition2="$$.status IS NULL"}}
- {{else}}
- {{:assign columns=""}}
- {{:assign table_join=""}}
- {{:assign doc_condition1="0"}}
- {{:assign doc_condition2="1"}}
- {{/if}}
-
{{* lister les immobilisations *}}
{{:assign account_condition="("}}
{{#foreach from=$module.config.prefixes item="code"}}
@@ -49,17 +36,8 @@
{{:assign account_condition=$account_condition|cat:" account.code LIKE "|cat:$code|cat:" OR "}}
{{/foreach}}
{{:assign account_condition=$account_condition|cat:"0)"}}
- {{*:assign doc_condition="($$.status <> 'ignored' AND $$.status <> 'archived')"*}}
-
- {{: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 filter_condition="("|cat:$doc_condition2|cat:" AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:")"}}
-
- {{:assign condition=$account_condition|cat:" AND debit > 0 AND ("|cat:$filter_condition|cat:" OR "|cat:$doc_condition1|cat:")"}}
+ {{:assign status_condition="($$.status = 'managed' OR $$.status = 'amortized')"}}
+ {{:assign condition=$account_condition|cat:" AND line.debit > 0 AND "|cat:$status_condition}}
{{:assign nb_immo=0}}
{{:assign total_immo = 0}}
@@ -72,127 +50,80 @@
line.label AS line_label,
account.id as account_id,
account.code as account_code,
- !columns
- trans.id_year as trans_id_year
+ 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
- !table_join
+ INNER JOIN !table AS info ON $$.line = line.id
WHERE !condition
- ORDER BY trans.date DESC;
- !columns=$columns
- !table_join=$table_join
+ ORDER BY COALESCE(doc_date_achat, trans_date) DESC;
!table=$module.table
!condition=$condition
}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$immo_trans_id}}
{{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}}
- {{:assign duration=$duration}}
- {{:assign montant_immo=$debit}}
- {{if $status == null}}
- {{:assign status="unknown"}}
+ {{: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 $line_label != null && $line_label != $label_immo}}
+ {{:assign label_immo=$label_immo|cat:" — "|cat:$line_label}}
{{/if}}
- {{* chercher des écritures liées à l'immo courante au crédit du même compte
+ {{*
+ chercher des écritures liées à l'immo courante au crédit du même compte
et déduire leur montant de celui de l'immo
*}}
- {{#select
- CASE links.id_related = :immo_trans_id
- WHEN true THEN links.id_transaction
- WHEN false THEN links.id_related
- END as other_id,
- line.credit
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_links as links
- ON (trans.id = links.id_transaction OR trans.id = links.id_related)
- INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id
- INNER JOIN acc_accounts AS acc ON line.id_account = acc.id
- WHERE trans.id = :immo_trans_id AND line.credit > 0 AND acc.code = :account;
- :immo_trans_id=$immo_trans_id
- :account=$account_code
- }}
- {{:assign montant_immo="%d-%d"|math:$montant_immo:$credit}}
- {{/select}}
+ {{#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}}
{{* Immobilisation soldée ? *}}
- {{* TODO marquer archivée *}}
+ {{* TODO ¿ marquer archivée ? *}}
{{if $montant_immo == 0}}
{{:continue}}
{{/if}}
- {{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
+ {{* chercher des lignes des écritures d'amortissement liées à la ligne d'immobilisation *}}
{{:assign amort_lines=null}}
- {{#select
- l_amort.credit as 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,
- l_amort.id AS amort_line_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_line_id|intval
- assign="line"
- }}
- {{:assign var="amort_lines.%d."|args:$amort_trans_id value=$line}}
- {{/select}}
-
{{:assign amort_amount=0}}
- {{#foreach from=$amort_lines key="amort_trans_id" item="lines"}}
- {{:assign nb=$lines|count}}
- {{* lister les docs de liaison de l'écriture d'amortissement *}}
- {{:assign links=null}}
- {{#load type="link"
- where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id"
- :immo_line_id = $immo_line_id
- :amort_trans_id = $amort_trans_id
- assign="links."
+ {{#load type="amort_link"
+ where="$$.immo_doc_id = :immo_doc_id"
+ :immo_doc_id = $immo_doc_id
+ assign="amort_link"
}}
- {{/load}}
-
- {{#foreach from=$lines item="line"}}
- {{* voir s'il existe une ligne associée à l'écriture d'amortissement *}}
- {{:assign line_link_exist=false}}
- {{#foreach from=$links item="link"}}
- {{if $link.amort_line_id == $line.amort_line_id}}
- {{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
- {{:assign line_link_exist=true}}
- {{/if}}
- {{/foreach}}
- {{if ! $line_link_exist}}
- {{if $nb == 1}}
- {{* créer la liaison ligne immo <-> ligne amort *}}
-{{*:debug lier_immo_line_id=$immo_line_id lier_amort_trans_id=$amort_trans_id avec_amort_line_id=$amort_line_id*}}
- {{:save
- key=""|uuid
- type="link"
- immo_line_id=$immo_line_id
- amort_line_id=$amort_line_id
- amort_trans_id=$amort_trans_id
- }}
- {{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
- {{/if}}
- {{/if}}
- {{/foreach}}
- {{/foreach}}
-
- {{if $amort_amount == 0}}
- {{:assign exist_amort=false}}
- {{else}}
- {{:assign exist_amort=true}}
- {{:assign amort_amount=$amort_amount}}
- {{/if}}
+ {{if $amount == null}}
+ {{#select credit FROM acc_transactions_lines WHERE id = :amort_line_id;
+ :amort_line_id = $amort_line_id
+ }}
+ {{:assign amort_amount="%d+%d"|math:$amort_amount:$credit}}
+ {{/select}}
+ {{else}}
+ {{:assign amort_amount="%d+%d"|math:$amort_amount:$amount}}
+ {{/if}}
+ {{/load}}
{{* classement par onglet *}}
{{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}}
- {{if $status == "unknown" && ! $exist_amort}}{{:continue}}{{/if}}
- {{if $type_immo == "amortized" && $amort_amount < $montant_immo}}{{:continue}}{{/if}} {{* ?? *}}
+ {{if $type_immo == "amortized" && $amort_amount < $montant_immo}}{{:continue}}{{/if}}
{{:assign nb_immo="%d+1"|math:$nb_immo}}
{{:assign total_immo="%d+%d"|math:$total_immo:$montant_immo}}
@@ -200,26 +131,25 @@
{{: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 5327a7b..992e20c 100644
--- a/_immobilisations_autres.html
+++ b/_immobilisations_autres.html
@@ -1,199 +1,187 @@
{{* -*- brindille -*- *}}
-{{* Liste des immobilisations non amortissables ou non (encore) gérées *}}
+{{* Liste des immobilisations non gérées ou non entièrement affecté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é
+
-
- Cette page liste les écritures pas (encore) prises en charge par le module et sans écriture d'amortissement associée.
-
+{{:assign saved_hides=$module.config.hides}}
+{{:assign var="user_hides" from="saved_hides.%s"|args:$logged_user.id}}
- {{: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}}
+{{if $_POST|count == 0}}
+ {{:assign unhide=$user_hides.unhide_other}}
+{{else}}
+ {{if $_POST.unhide == null}}
+ {{:assign unhide=0}}
{{else}}
- {{if $_POST.unhide == null}}
- {{:assign unhide=0}}
- {{else}}
- {{:assign unhide=1}}
+ {{: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')"}}
+{{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)"}}
+
+{{if $unhide == null}}
+ {{: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)"}}
+{{else}}
+ {{:assign filter_condition="1"}}
+{{/if}}
+
+{{:assign condition=$account_condition|cat:" AND debit > 0 AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:" AND "|cat:$doc_condition}}
+
+{{:assign nb_managed=0}}
+{{:assign nb_ignored=0}}
+{{:assign nb_null=0}}
+{{:assign nb_other=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 DESC;
+ !columns=$columns
+ !table_join=$table_join
+ !table=$module.table
+ !condition=$condition
+ assign="immo_line"
+ }}
+ {{*
+ parmi les immos gérées, ne conserver que celles dont le montant dans le doc est non nul
+ et inférieur au montant de l'écriture d'immo
+ *}}
+ {{if $immo_line.status == 'managed'}}
+ {{if $immo_line.amount == null || $immo_line.amount == 0 || $immo_line.amount == $immo_line.debit}}
+ {{:continue}}
{{/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 $status == null}}
+ {{:assign nb_null="%d+1"|math:$nb_null}}
+ {{elseif $status == 'managed'}}
+ {{:assign nb_managed="%d+1"|math:$nb_managed}}
+ {{elseif $status == 'ignored'}}
+ {{:assign nb_ignored="%d+1"|math:$nb_ignored}}
+ {{else}}
+ {{:assign nb_other="%d+1"|math:$nb_other}}
{{/if}}
-
+ {{:assign var="immo_lines." value=$immo_line}}
+{{/select}}
+{{*:debug lines=$immo_lines nb_lines=$immo_lines|count nb_null=$nb_null nb_managed=$nb_managed nb_ignored=$nb_ignored nb_other=$nb_other unhide=$unhide*}}
-
-
-
-
N°
-
Date
-
Libellé
-
Montant
-
N° compte
-
Compte
-
-
-
-
+
- {{* vérifier l'existence de la table du module *}}
- {{#load limit="1"}}
- {{:assign columns="$$.duration as duration, $$.status as status,"}}
- {{:assign table_join="LEFT JOIN !table AS info ON $$.line = line.id"}}
- {{:assign doc_condition1="($$.status == 'ignored')"}}
- {{:assign doc_condition2="$$.status IS NULL"}}
- {{else}}
- {{:assign columns=""}}
- {{:assign table_join=""}}
- {{:assign doc_condition1="0"}}
- {{:assign doc_condition2="1"}}
- {{/load}}
+{{if $immo_lines|count > 0}}
+
+
+
+
N°
+
Ligne
+
Date
+
Libellé
+
Montant
+
Affecté
+
Reste
+
N° compte
+
Compte
+
+
+
+
+ {{#foreach from=$immo_lines item="line"}}
- {{* 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)"}}
-
- {{if $unhide == null}}
- {{: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)"}}
- {{else}}
- {{:assign filter_condition="1"}}
- {{/if}}
- {{:assign filter_condition="("|cat:$doc_condition2|cat:" AND NOT (trans.status & 16) AND "|cat:$filter_condition|cat:")"}}
-
- {{:assign condition=$account_condition|cat:" AND debit > 0 AND ("|cat:$filter_condition|cat:" OR "|cat:$doc_condition1|cat:")"}}
-
- {{:assign nb_immo=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
- ORDER BY trans.date DESC;
- !columns=$columns
- !table_join=$table_join
- !table=$module.table
- !condition=$condition
- }}
- {{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$immo_trans_id}}
- {{:assign compte_url="%s/acc/accounts/journal.php?id=%s&year=%s"|args:$admin_url:$account_id:$trans_id_year}}
-
- {{if $status == null}}
- {{:assign status="unknown"}}
- {{/if}}
-
- {{if $unhide == null}}
- {{if $status != "unknown"}}
- {{:continue}}
- {{/if}}
- {{else}}
- {{if $status != "ignored" && $status != "unknown"}}
- {{:continue}}
- {{/if}}
- {{* vérifier si le libellé aurait pu être filtré *}}
- {{#foreach from=$module.config.filters item="filter"}}
- {{if $filter|strpos:$trans_label !== false}}
- {{:assign status="ignored"}}
- {{/if}}
- {{/foreach}}
- {{/if}}
-
- {{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
- {{:assign amort_lines=null}}
- {{#select
- 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,
- l_amort.id AS amort_line_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_line_id|intval
- assign="amort_lines."
- }}
- {{/select}}
- {{:assign amort_amount=0}}
- {{#foreach from=$amort_lines item="line"}}
- {{* voir s'il existe un doc associé à l'écriture d'amortissement *}}
- {{#load type="link"
- where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id AND $$.amort_line_id = :amort_line_id"
- :immo_line_id = $immo_line_id
- :amort_trans_id = $line.amort_trans_id
- :amort_line_id = $line.amort_line_id
- }}
- {{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
- {{else}}
- {{* TODO À VÉRIFIER (cas multi-lignes) *}}
- {{:assign amort_amount="%d+%d"|math:$amort_amount:$line.amount}}
- {{/load}}
- {{/foreach}}
- {{if $amort_amount != 0}}
+ {{if $unhide == null}}
+ {{if $status == "ignored"}}
{{:continue}}
{{/if}}
+ {{else}}
+ {{* vérifier si le libellé aurait pu être filtré *}}
+ {{#foreach from=$module.config.filters item="filter"}}
+ {{if $filter|strpos:$trans_label !== false}}
+ {{:assign status="ignored"}}
+ {{/if}}
+ {{/foreach}}
+ {{/if}}
- {{:assign nb_immo="%d+1"|math:$nb_immo}}
-
+{{/if}}
diff --git a/aide.md b/aide.md
deleted file mode 100644
index 90849fa..0000000
--- a/aide.md
+++ /dev/null
@@ -1,183 +0,0 @@
-# Module de gestion d'immobilisations et amortissements pour Paheko
-
-## Préambule
-* Ce module recense les écritures d'immobilisation et d'amortissement
- présentes dans la comptabilité et offre la possibilité de saisir de
- nouvelles écritures d'immobilisation, de calculer et d'enregistrer
- les écritures d'amortissement.
-* Les écritures d'amortissement **liées à une écriture
- d'immobilisation** lui sont automatiquement associées par le module
- ; par contre, les écritures d'amortissement qui ne sont **pas liées
- à une écriture d'immobilisation** sont détectées mais doivent être
- associées manuellement à leur immobilisation.
-
-### Fonctionnalités
- * créer une immobilisation
- * créer des écritures d'amortissement pour une immobilisation
- * associer une écriture d'amortissement *orpheline* à une écriture
- d'immobilisation
- * sortir une immobilisation du bilan en fin de de vie ou par cession
- * réunir des écritures d'immobilisation en cours de constitution
- pour créer une immobilisation amortissable
- * filtrer les écritures d'immobilisation et d'amortissement par
- libellé
- * classer manuellement une écriture d'immobilisation (utile pour les
- immobilisations créées avant la mise en service du module)
-
-## Comment faire pour ...
-
-### Incorporer une écriture d'immobilisation existante dans le module
-Si on a créé des immobilisations et éventuellement des amortissements
-avec Paheko *avant* la mise en service du module *Amortissements*,
-il est possible de les prendre en charge avec le module. Les
-immobilisations concernées sont regroupées dans l'onglet Autres.
-
-- cliquer le bouton *Paramètres* en face de l'immobilisation à prendre
- en charge
-- cocher *Immobilisation à amortir* pour spécifier qu'on veut amortir
- l'immobilisation ; plusieurs champs d'informations s'affichennt :
- - Durée d'amortissement : renseigner la durée (obligatoire)
- - Écritures liées au crédit du compte d'immobilisation : lorsqu'on
- acquiert une immobilisation, il se peut que par la suite on
- obtienne une ristourne ou un avoir ; cet avoir est enregistré
- dans Paheko par une écriture dont le montant est au crédit du
- compte d'immobilisation ; le module offre la possibilité
- d'associer cette écriture d'avoir à l'écriture
- d'immobilisation. En effet, le montant amortissable est égal au
- montant d'acquisition de l'immobilisation moins la somme des
- avoirs. Pour cela, cliquer le bouton *Ajouter* puis sélectionner
- une écriture : cette écriture sera associée à l'écriture
- d'immobilisation et son montant déduit du montant de
- l'immobilisation pour donner le montant à amortir
- - Date de mise en service : c'est la date à laquelle
- l'immobilisation est en état de fonctionner, qui peut être
- postérieure à la date d'acquisition ; c'est cette date qui est
- prise en compte dans le calcul des amortissements ; si elle
- coïncide avec la date d'acquisition, inutile de la renseigner.
-- L'immobilisation apparait ensuite dans l'onglet *Amortissables* ; on
- peut vérifier et éventuellement modifier ses paramètres grâce au
- bouton Paramètres
-
-### Attacher une écriture d'amortissement à une immobilisation
-Si des écritures d'amortissement ont été saisies avec Paheko *avant*
-la mise en service du module *Amortissements*, on peut les associer à
-leur immobilisation :
-
-- cliquer le bouton *Amortissements* en face de l'immobilisation concernée ; si la mention
-
-> « Il existe des écritures d'amortissement qui ne sont pas rattachées à une immobilisation !
-> Utilisez le bouton « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation. »
-
-est présente, c'est qu'il existe des écritures d'amortissement saisies avec Paheko *avant*
-la mise en service du module.
-
-- cliquer le bouton *Rattacher une écriture* pour en afficher la liste
-- le cas échéant, cliquer *Attacher* en face de l'écriture à rattacher
-
-De retour sur la page des amortissements, on constate la présence de l'écriture d'amortissement qu'on vient d'attacher ; on peut répéter le processus plusieurs fois si nécessaire. On peut aussi détacher une écriture si on s'est trompé.
-
-
-### Enregistrer une écriture d'immobilisation
-Il s'agit de créer une nouvelle écriture d'immobilisation ; pour cela,
-cliquer le bouton *Ajouter une immobilisation* qui est présent sur
-la plupart des onglets ; dans la fenêtre de saisie qui s'affiche il
-suffit de saisir les données de l'immobilisation puis de cliquer
-*Ajouter* :
- * Exercice : sélectionner l'exercice dans lequel enregistrer l'écriture
- * Date d'acquisition : doit être située dans l'exercice sélectionné
- * Libellé
- * Montant
- * Compte de décaissement
- * Compte d'immobilisation
- * Projet
- * case Amortir : laisser cochée pour amortir l'immobilisation,
- dé-cocher pour ne pas l'amortir
- * Durée d'amortissement en années : à saisir uniquement si
- l'immobilisation doit être amortie
- * Date de mise en service : c'est la date de première utilisation ;
- à renseigner uniquement si différente de la date d'acquisition ;
- doit être postérieure ou égale à la date d'acquisition
-
-### Enregistrer une écriture d'amortissement
- * Il n'est possible d'enregistrer une nouvelle écriture
- d'amortissement pour une immobilisation que si la date
- d'acquisition et la durée d'immobilisation ont été préalablement
- définies.
- * À partir de l'onglet *Amortissables*, cliquer le bouton
- *Amortissements* en face de l'immobilisation choisie ; dans la
- page suivante, cliquer le bouton *Enregistrer un amortissement*
- ; dans la fenêtre de saisie qui s'affiche, il faut renseigner les
- informations suivantes :
- * Exercice : sélectionner l'exercice dans lequel enregistrer l'écriture
- * Date de l'écriture : doit être située dans l'exercice
- sélectionné et postérieure à la date de mise en service
- * Libellé
- * Montant : caclculé par le module ; il peut être modifié si
- nécessaire, par exemple pour l'arrondir à un nombre entier
- * Compte de débit : par défaut c'est le compte *6811 : Dotation
- aux amortissements des immobilisations*
- * Compte d'amortissement : par défaut c'est le compte qui
- correspond au compte de l'immobilisation
-
-
-### Sortir une immobilisation du bilan
-
-### Transformer des immobilisations en cours en immobilisation amortissable
-
-### Marquer *à ignorer* des écritures
-
-### Ignorer des écritures selon leur libellé
-
-
-
-## Description de l'interface
-
-Les écritures d'immobilisation sont réparties en plusieurs onglets.
-
-### Amortissables
-Cet onglet liste les immobilisations en cours d'amortissement.
-
-##### bouton Paramètres
-
-Ce bouton affiche une page qui permet de modifier les caractéristiques
-d'une immobilisation ;
-
-On peut décider de son classement :
- * Amortir ; c'est le choix par défaut pour les immobilisations de
- cet onglet
- * Amortissement terminé : cette immobilisation sera alors classée
- parmi les immobilisations amorties ; c'est le choix par défaut
- pour les immobilisations de l'onglet Amorties
- * Ignorer l'écriture : cette écriture n'apparaîtra plus dans la
- liste des immobilisations
-
-Pour les immobilisations à amortir, on peut préciser :
- * obligatoirement la durée d'amortissement en années
- * optionnellement la date de mise en service si elle est différente
- de la date d'acquisition
-
-###### bouton Amortissements
-
-Ce bouton affiche la liste des amortissements déjà réalisés pour une
-immobilisation ; à partir de cette page, il est possible d'enregistrer
-un nouvel amortissement ou bien d'attacher une écriture
-d'amortissement à l'immobilisation
-
-### Amorties
-Cet onglet liste les immobilisations dont l'amortissement est terminé
-mais toujours en service dans l'association.
-
-### Sorties du bilan
-Cette page liste les immobilisations sorties du bilan, donc qui ne sont
-plus en service dans l'association, soit parce qu'elles sont hors
-d'usage, soit parce qu'elles ont été cédées.
-
-### En cours
-Cette page liste les immobilisations en cours de constitution, donc
-non amortissables ; à terme, elles sont destinées à être regroupées
-pour être transformées en immobilisation amortissable.
-
-### Autres
-Cette page liste les écritures d'immobilisation pas (encore) prises en
-charge par le module et sans écriture d'amortissement associée.
-
diff --git a/amortization.html b/amortization.html
index 747ff8f..1af7148 100644
--- a/amortization.html
+++ b/amortization.html
@@ -2,179 +2,141 @@
{{*
Lister les écritures d'amortissement associées à une immobilisation
- @param immo_line_id : id de la ligne d'immo
+ @param immo_doc_id : id du doc associé à l'immo
@param type_immo : managed, amortized, archived, others
*}}
-{{* récupérer les infos de l'immobilisation *}}
+{{* données de l'immobilisation *}}
+{{#load type="immo" id=$_GET.immo_doc_id|intval assign="info_immo"}}
+{{else}}
+ {{:error message="Immobilisation non trouvée"}}
+{{/load}}
+
{{#select
line.id as immo_line_id,
line.debit as montant,
line.label as line_label,
trans.id as immo_trans_id,
trans.label as label,
- trans.date,
- account.code as account_code
+ trans.date as date_achat,
+ 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 = $_GET.immo_line_id|intval
- assign=ligne_immo
+ :line_id = $info_immo.line
+ assign="ligne_immo"
}}
{{else}}
- {{:error message="Immobilisation %s non trouvée"|args:$_GET.immo_line_id}}
+ {{:error message="Immobilisation non trouvée"}}
{{/select}}
-{{:assign date_debut=$ligne_immo.date}}
{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$ligne_immo.immo_trans_id}}
-{{#load type="immo" where="$$.line = :line_id" :line_id=$_GET.immo_line_id|intval}}
- {{:assign duree=$duration}}
- {{:assign date_debut=$date}}
- {{:assign status=$status}}
-{{/load}}
+{{: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.label}}
+{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}}
+ {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
+{{/if}}
+{{if $info_immo.amount != null}}
+ {{:assign var="ligne_immo.montant" value=$info_immo.amount}}
+{{/if}}
-{{if $status == 'ignored'}}
+{{if $info_immo.status == 'ignored'}}
{{:error message="Cette immobilisation ne doit pas être amortie"}}
{{/if}}
-{{* chercher des écritures liées à l'immo courante au crédit du même compte
+{{*
+ chercher des écritures liées à l'immo courante au crédit du même compte
et déduire leur montant de celui de l'immo
*}}
{{:assign total_credits=0}}
-{{#select
- CASE links.id_related = :immo_trans_id
- WHEN true THEN links.id_transaction
- WHEN false THEN links.id_related
- END as other_id,
- line.credit
- FROM acc_transactions AS trans
- INNER JOIN acc_transactions_links as links
- ON (trans.id = links.id_transaction OR trans.id = links.id_related)
- INNER JOIN acc_transactions_lines AS line on line.id_transaction = other_id
- INNER JOIN acc_accounts AS acc ON line.id_account = acc.id
- WHERE trans.id = :immo_trans_id AND line.credit > 0 AND acc.code = :account;
- :immo_trans_id=$ligne_immo.immo_trans_id
- :account=$ligne_immo.account_code
- }}
- {{:assign total_credits="%d+%d"|math:$total_credits:$credit}}
-{{/select}}
-{{:assign montant_amortissable="%d-%d"|math:$ligne_immo.montant:$total_credits}}
-{{:assign solde=$montant_amortissable}}
-
-{{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
-{{#select
- l_amort.credit as amort_amount,
- l_amort.label as amort_line_label,
- l_amort.id as amort_line_id,
- CASE WHEN links.id_related = t_immo.id
- THEN links.id_transaction
- ELSE links.id_related
- END as amort_trans_id,
- trans.date as amort_date,
- trans.label as amort_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_line_id|intval
- assign="amort_line"
-}}
- {{* lister les lignes d'amortissement liées à la ligne d'immobilisation *}}
- {{#load type="link"
- where="$$.immo_line_id = :immo_line_id AND $$.amort_trans_id = :amort_trans_id AND $$.amort_line_id = :amort_line_id"
- assign="line"
- :immo_line_id=$_GET.immo_line_id|intval
- :amort_trans_id=$amort_line.amort_trans_id
- :amort_line_id = $amort_line.amort_line_id
- }}
- {{:assign var="linked_amort." value=$amort_line}}
- {{/load}}
- {{if $date_debut == null}}
- {{:assign date_debut=$amort_date}}
+{{#load type="credit_link" where="$$.immo_doc_id=:immo_doc_id" :immo_doc_id=$_GET.immo_doc_id|intval}}
+ {{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}}
-{{/select}}
+{{/load}}
+{{:assign solde="%d-%d"|math:$ligne_immo.montant:$total_credits}}
-{{if $status == "amortized"}}
- {{:assign amort_amount=$montant_amortissable}}
+{{if $info_immo.status == "amortized"}}
+ {{:assign amort_amount=$solde}}
{{:assign valeur_residuelle=0}}
{{else}}
- {{:assign valeur_residuelle=$montant_amortissable}}
- {{#foreach from=$linked_amort}}
- {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_amount}}
- {{/foreach}}
+ {{:assign valeur_residuelle=$solde}}
{{/if}}
-{{* Autres amortissements non rattachés *}}
-{{:include file="_get_config.html" keep="module.config"}}
-{{: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 autres_amortissements=false}}
-{{#select
- line.id_transaction AS amort_trans_id
- 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) AND !filter_condition
- ORDER BY trans.date, trans.label;
- !filter_condition=$filter_condition
- assign="amort"
+{{* lister les lignes des écritures d'amortissement liées à l'immobilisation *}}
+{{#load type="amort_link"
+ where="$$.immo_doc_id = :immo_doc_id"
+ :immo_doc_id = $_GET.immo_doc_id|intval
}}
- {{* voir s'il existe des écritures liées avec un numéro de compte d'immobilisation *}}
{{#select
- links.id_transaction,
- links.id_related,
- trans.id AS trans_id
- FROM acc_transactions_links AS links
- INNER JOIN acc_transactions AS trans ON (
- CASE
- WHEN links.id_transaction = :id_amort THEN links.id_related
- WHEN links.id_related = :id_amort THEN links.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
- links.id_transaction = :id_amort OR links.id_related = :id_amort
- AND acc.code LIKE '21%'
- LIMIT 1
+ line.id as amort_line_id,
+ line.credit,
+ line.label as amort_line_label,
+ trans.id as amort_trans_id,
+ trans.label as amort_trans_label,
+ trans.date as amort_date,
+ 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_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
;
- :id_amort=$amort.amort_trans_id
+ :amort_line_id = $amort_line_id
+ assign="amort_line"
}}
- {{* voir s'il existe un doc associé à une ligne de l'amortissement *}}
- {{:assign keep=true}}
- {{#load type="link"
- where="$$.amort_trans_id = :amort_trans_id"
- :amort_trans_id = $amort.amort_trans_id
- }}
- {{if $amort_line_id == $amort.amort_line_id}}
- {{:assign keep=false}}
- {{:break}}
+ {{:assign var="amort_line.amort_amount" value=$amount|or:$credit}}
+ {{:assign var="linked_amort.%s_%d"|args:$amort_date:$id value=$amort_line}}
+ {{:assign valeur_residuelle="%d-%d"|math:$valeur_residuelle:$amort_line.amort_amount}}
+ {{/select}}
+{{/load}}
+
+{{if $valeur_residuelle > 0}}
+ {{* Chercher des amortissements non rattachés à une immo *}}
+ {{#select
+ line.id as amort_line_id,
+ line.id_transaction AS amort_trans_id,
+ line.credit as amort_amount
+ 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="amort"
+ }}
+ {{* 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_id
+ assign="amort_link"
+ }}
+ {{if $amort_link.amount == null || $amort_link.amount == 0}}
+ {{:assign amort_amount=$amort.amort_amount}}
+ {{:assign keep_amort=false}}
+ {{else}}
+ {{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}}
{{/if}}
{{else}}
- {{:assign keep=false}}
+ {{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}}
{{/load}}
- {{if $keep}}
- {{:assign autres_amortissements=true}}
+ {{if $keep_amort && $amort_amount < $amort.amort_amount}}
+ {{:assign var="free_amort_lines." value=$amort}}
{{/if}}
- {{else}}
- {{:assign autres_amortissements=true}}
{{/select}}
-{{/select}}
+{{/if}}
{{:admin_header title="Liste des amortissements" custom_css="./style.css" current="module_amortization"}}
@@ -195,21 +157,21 @@
subcurrent="%s"|args:$subcurrent
subsubcurrent="amortization"
type_immo=$_GET.type_immo
- autres_amort=$autres_amortissements
+ autres_amort=$free_amort_lines
}}
{{if $_GET.ok}}
{{if $_GET.msg|match:"attach"}}
- {{:assign msg="Attachement écriture %s effectué"|args:$_GET.trans_id}}
+ {{:assign msg="Attachement amortissement %s effectué"|args:$_GET.trans_id}}
{{elseif $_GET.msg|match:"detach"}}
- {{:assign msg="Détachement écriture %s affectué"|args:$_GET.trans_id}}
+ {{:assign msg="Détachement amortissement %s affectué"|args:$_GET.trans_id}}
{{elseif $_GET.msg|match:"amortissement"}}
{{:assign msg="Amortissement enregistré"}}
{{/if}}
- 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.
+ Il sera possible de choisir la date de sortie et d'indiquer
+ le montant de la cession le cas échéant.
- Il existe des écritures d'amortissement qui ne sont pas rattachées à une immobilisation !
- Utilisez le bouton « Rattacher une écriture » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
-
- {{/if}}
+{{if $free_amort_lines}}
+
+ Il y a des écritures d'amortissement qui ne sont pas rattachées à une immobilisation !
+ Utilisez le bouton « Rattacher un amortissement » pour les afficher ; vous pourrez choisir d'en attacher certaines à cette immobilisation.
+
{{/if}}
{{:form_errors}}
{{:admin_footer}}
diff --git a/attach_amort.html b/attach_amort.html
index 4770afa..31e0ae9 100644
--- a/attach_amort.html
+++ b/attach_amort.html
@@ -1,74 +1,231 @@
{{* -*- brindille -*- *}}
{{*
- Enregistrer la liaison entre une écriture d'amortissement et
- l'écriture d'immobilisation correspondante
+ 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
*}}
-{{* chercher l'écriture d'immobilisation *}}
-{{#select
- id_transaction
- FROM acc_transactions_lines
- WHERE id = :line_id;
- :line_id = $_GET.immo_line_id|intval
-}}
- {{:assign immo_trans_id=$id_transaction}}
+{{* données de l'immobilisation *}}
+{{#load id=$_GET.immo_doc_id|intval assign="info_immo"}}
+ {{:assign label_immo=$label|or:$ligne_immo.trans_label}}
{{else}}
- {{:error message="Impossible de trouver l'écriture d'immobilisation de la ligne « %s »"|args:$_GET.immo_line_id}}
+ {{:error message="Immobilisation non trouvée"}}
+{{/load}}
+
+{{#select
+ line.id_transaction as immo_trans_id,
+ line.debit as montant,
+ trans.label as trans_label,
+ line.label as line_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 = $info_immo.line
+ assign="ligne_immo"
+}}
+{{else}}
+ {{:error message="Immobilisation non trouvée"}}
{{/select}}
+{{:assign montant_immo=$info_immo.amount|or:$ligne_immo.montant}}
+
+{{if $ligne_immo.line_label != null && $ligne_immo.line_label != $label_immo}}
+ {{:assign label_immo=$label_immo|cat:" — "|cat:$ligne_immo.line_label}}
+{{/if}}
+
{{* chercher l'écriture d'amortissement *}}
{{#select
- id_transaction
- FROM acc_transactions_lines
- WHERE id = :line_id;
+ 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"
}}
- {{:assign amort_trans_id=$id_transaction}}
{{else}}
- {{:error message="Impossible de trouver l'écriture d'amortissement de la ligne « %s »"|args:$_GET.amort_line_id}}
+ {{:error message="Amortissement non trouvé"}}
{{/select}}
+{{:assign trans_url="%s/acc/transactions/details.php?id=%s"|args:$admin_url:$amort_line.trans_id}}
-{{* 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 var="linked_transactions." value=$linked_id}}
-{{/select}}
-
-{{* ajouter la nouvelle liaison *}}
-{{:assign var="linked_transactions." value=$amort_trans_id}}
-{{:api
- method="POST"
- path="accounting/transaction/%s/transactions"|args:$immo_trans_id
- assign="result"
- assign_code="result_code"
- transactions=$linked_transactions
-}}
-
-{{* vérifier si cette liaison est déjà présente dans les documents pour éviter les doublons *}}
-{{#load type="link"
- where="$$.immo_line_id = :immo_line_id AND
- $$.amort_trans_id = :amort_trans_id AND
- $$.amort_line_id = :amort_line_id"
- :immo_line_id=$_GET.immo_line_id|intval
- :amort_trans_id = $amort_trans_id
+{{* montant de l'écriture d'amortissement déjà affecté *}}
+{{:assign montant_affecte=0}}
+{{#load type="amort_link" assign="linked_amort."
+ where="$$.amort_line_id = :amort_line_id"
:amort_line_id = $_GET.amort_line_id|intval
- limit=1
}}
-{{else}}
- {{:save
- key=""|uuid
- type="link"
- immo_line_id=$_GET.immo_line_id|intval
- amort_line_id=$_GET.amort_line_id|intval
- amort_trans_id=$amort_trans_id
- }}
+ {{:assign montant_affecte="%d+%d"|math:$montant_affecte:$amount}}
{{/load}}
-{{:redirect force="amortization.html?immo_line_id=%s&ok=1&msg=attach&trans_id=%s"|args:$_GET.immo_line_id:$amort_trans_id}}
+{{:assign reste="%d-%d"|math:$amort_line.amount:$montant_affecte}}
+
+{{* 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}}
+
+ {{* vérifier que le montant total des amortissements ne dépasse pas la valeur de l'immo *}}
+ {{* montant de l'immo *}}
+ {{:assign total_credits=0}}
+ {{#load
+ type="credit_link"
+ where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $_GET.immo_doc_id|intval
+ }}
+ {{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 montant_immo="%d-%d"|math:$montant_immo:$total_credits}}
+
+ {{* montant des amortissements *}}
+ {{:assign total_amort=0}}
+ {{#load
+ type="amort_link"
+ where="$$.immo_doc_id = :immo_doc_id"
+ :immo_doc_id=$_GET.immo_doc_id|intval
+ }}
+ {{if $amount == null || $amount == 0}}
+ {{#select
+ line.credit
+ 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 total_amort="%d+%d"|math:$total_amort:$credit}}
+ {{/select}}
+ {{else}}
+ {{:assign total_amort="%d+%d"|math:$total_amort:$amount}}
+ {{/if}}
+ {{/load}}
+
+ {{: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}}
+
+ {{* 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.immo_trans_id
+ }}
+ {{:assign var="linked_transactions." value=$linked_id}}
+ {{/select}}
+
+ {{* ajouter la nouvelle liaison *}}
+ {{:assign var="linked_transactions." value=$amort_line.trans_id}}
+ {{:api
+ method="POST"
+ path="accounting/transaction/%s/transactions"|args:$ligne_immo.immo_trans_id
+ assign="result"
+ assign_code="result_code"
+ transactions=$linked_transactions
+ }}
+
+ {{* 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}}
+ {{:assign status="amortized"}}
+ {{:save
+ key=$info_immo.key
+ status=$status
+ }}
+ {{/if}}
+
+ {{:redirect force="amortization.html?immo_doc_id=%s&type_immo=%s&ok=1&msg=attach_amort"|args:$_GET.immo_doc_id:$status}}
+{{/form}}
+
+{{:admin_header title="Amortir l'immobilisation" custom_css="./style.css" current="module_amortization"}}
+
+{{* barre de navigation *}}
+{{if ! $dialog}}
+ {{:include file="_nav.html" current="config" subcurrent="init" subsubcurrent="parameter"}}
+{{/if}}
+{{:form_errors}}
+
+