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 b53260c..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 "|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}} -| N° | -Mise en service | -Date sortie | -Libellé | -Montant | -N° compte | -Compte | -- | |
|---|---|---|---|---|---|---|---|---|
| #{{$trans_id}} | -{{$date_mes|date_short}} | -{{$exit_date|date_short}} | -{{$label_immo}} | -{{"%f"|math:$montant_immo|money_html:false|raw}} | -{{$account_code}} | -{{$account_label}} | -- {{:linkbutton label="Modifier" href="exit_step1.html?immo_doc_id=%s&from=exit"|args:$immo_doc_id shape="edit"}} - | -|
| - | ||||||||
| - | - | - | Total du compte {{$code}} | -{{$value|money_html:false|raw}} | -- | - | - | |
| - | - | - | Total des immobilisations | -{{$total_immo|money_html:false|raw}} | -- | - | - | |
| - | ||||||||
| - | - | - | Cessions du compte {{$code}} | -{{$value|money_html:false|raw}} | -- | - | - | |
| - | - | - | Total des cessions | -{{$total_cessions|money_html:false|raw}} | -- | - | - | |
Aucune immobilisation
-{{/if}} +{{/select}} + +| N° | +Date | +Libellé | +Montant | +N° compte | +Compte | +Projet | ++ |
|---|---|---|---|---|---|---|---|
| #{{$trans_id}} | +{{$trans_date|date_short}} | +{{$trans_label}} | +{{"%f"|math:$debit|money:false}} | +{{$account_code}} | +{{$account_label}} | +{{$project_label}} | ++ | +
Aucune immobilisation
+ {{/if}} +
- {{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.
+Immobilisations en cours
+ {{elseif $type_immo == "amortie"}}
+ Immobilisations amorties
{{/if}}
-
| N° | +Date | +Libellé | +Montant | +Durée | +N° compte | +Compte | ++ | |
|---|---|---|---|---|---|---|---|---|
| N° | -Date | -Libellé | -Montant | -Durée | -Amortissements | -Valeur nette | -N° compte | -- |
|---|---|---|---|---|---|---|---|---|
| #{{$immo_trans_id}} | -{{$immo_date|date_short}} | -{{$label_immo}} | -{{$montant_immo|money_html:false|raw}} | -{{if $duration != null}}{{$duration}}{{/if}} | -{{$amort_amount|money_html:false|raw}} | -{{"%d-%d"|math:$montant_immo:$amort_amount|money_html:false|raw}} | -{{$account_code}} | -- {{:linkbutton - label="Détails" - href="amortization.html?immo_doc_id=%s&type_immo=%s"|args:$immo_doc_id:$type_immo shape="eye" - }} - | -
| - | ||||||||
| - | - | Total du compte {{$code}} | -{{$value|money_html:false|raw}} | -- | - | - | - | - |
| - | - | Total des immobilisations | -{{$total_immo|money_html|raw}} | -- | - | - | - | - |
Aucune immobilisation
{{/if}} -{{/if}} -{{if $immo_lines|count == 0 || $module.table == null}} -Aucune immobilisation
-{{/if}} + diff --git a/_immobilisations_autres.html b/_immobilisations_autres.html index d80acee..4444ac8 100644 --- a/_immobilisations_autres.html +++ b/_immobilisations_autres.html @@ -1,178 +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é -
+Aucune immobilisation
+ {{/if}} +- 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"}} - -{{: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}} -| - | N° | -Date | -Libellé | -Montant | -N° compte | -Compte | -- |
|---|---|---|---|---|---|---|---|
| {{:input type="checkbox" name="selected[]" value=$trans_id}} | -#{{$trans_id}} | -{{$trans_date|date_short}} | -{{$trans_label}} | -{{"%f"|math:$debit|money_html:false|raw}} | -{{$account_code}} | -{{$account_label}} | -- {{:linkbutton - label="Modifier" - href="ignore.html?immo_line_id=%s"|args:$immo_line_id - shape="edit" - target="_dialog" - }} - | -
| - | - | - | Total du compte {{$code}} | -{{$value|money_html|raw}} | -- | - | - |
| - | - | - | Total des immobilisations | -{{$total_immo|money_html|raw}} | -- | - | - |
Aucune écriture d'immobilisation trouvée dans la comptabilité (compte {{$first_code}} et sous-comptes)
-{{/if}} - - - diff --git a/_upgrade.html b/_upgrade.html deleted file mode 100644 index 54429ca..0000000 --- a/_upgrade.html +++ /dev/null @@ -1,41 +0,0 @@ -{{* -*- brindille -*- *}} - -{{* - mise à niveau des documents selon version -*}} - -{{* version 0.31 *}} -{{:assign tag="0.31"}} - -{{:include file="_compare_version.tpl" nv1=$module_version nv2=$tag keep="comp"}} -{{:assign module_comp=$comp}} -{{:include file="_compare_version.tpl" nv1=$module.config.version nv2=$tag keep="comp"}} -{{:assign config_comp=$comp}} - -{{if $module_comp >= 0 && $config_comp < 0}} -{{* $module_version >= '0.31' && $module.config.version < '0.31' *}} - - {{:include file="_upgrade_to031.tpl"}} -Mise à jour vers version {{$tag}} terminée
-{{/if}} - -{{* version 0.33 *}} -{{:assign tag="0.33"}} - -{{:include file="_compare_version.tpl" nv1=$module_version nv2=$tag keep="comp"}} -{{:assign module_comp=$comp}} -{{:include file="_compare_version.tpl" nv1=$module.config.version nv2=$tag keep="comp"}} -{{:assign config_comp=$comp}} - -{{if $module_comp >= 0 && $config_comp < 0}} -{{* $module_version >= '0.33' && $module.config.version < '0.33' *}} - - {{:include file="_upgrade_to033.tpl"}} -Mise à jour vers version {{$tag}} terminée
-{{/if}} - -{{* enregistrer le nouveau numéro de version dans la config du module *}} -{{:include file="_compare_version.tpl" nv1=$module_version nv2=$module.config.version keep="comp"}} -{{if $comp > 0}} - {{:save key="config" version=$module_version}} -{{/if}} diff --git a/_upgrade_to031.tpl b/_upgrade_to031.tpl deleted file mode 100644 index 1efe934..0000000 --- a/_upgrade_to031.tpl +++ /dev/null @@ -1,99 +0,0 @@ -{{* -*- brindille -*- *}} - -{{* - Mettre à niveau vers v0.31 - - créer un doc de liaison pour chaque amortissement lié à une immobilisation - mais uniquement pour les immo déjà gérées, sinon l'upgrade - vers 0.33 ne fonctionnera pas car on pourrait se retrouver avec - des liaisons immo <-> amort sans doc associé à l'immo donc la - transformation de link vers amort_link ne pourra se faire - - - id ligne d'immobilisation - - id ligne d'amortissement - - id écriture d'amortissement -*}} - -{{* 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 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}} - -{{#select - line.id as immo_line_id - 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 -}} - {{* voir si l'immo est prise en charge *}} - {{#load type="immo" where="$$.line = :line_id" :line_id=$immo_line_id|intval}} - {{:assign status=$status}} - {{else}} - {{:assign status="unknown"}} - {{/load}} - - {{* ne pas faire la liaison si pas de doc *}} - {{if $status == "ignored" || $status == "unknown"}} - {{:continue}} - {{/if}} - - {{* lister les écritures d'amortissement liées *}} - {{:assign amort_lines=null}} - {{#select - 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}} - - {{#foreach from=$amort_lines item="line"}} - {{* chercher un doc associé *}} - {{#load type="link" - where="$$.immo_line_id = :immo_line_id - AND $$.amort_line_id = :amort_line_id - AND $$.amort_trans_id = :amort_trans_id" - :immo_line_id = $immo_line_id - :amort_line_id = $line.amort_line_id - :amort_trans_id = $line.amort_trans_id - assign="link" - }} - {{else}} - {{* pas de doc => le créer *}} - {{:save - key=""|uuid - type="link" - immo_line_id=$immo_line_id - amort_line_id=$line.amort_line_id - amort_trans_id=$line.amort_trans_id - }} - {{/load}} - {{/foreach}} -{{/select}} diff --git a/_upgrade_to033.tpl b/_upgrade_to033.tpl deleted file mode 100644 index b1104a7..0000000 --- a/_upgrade_to033.tpl +++ /dev/null @@ -1,64 +0,0 @@ -{{* -*- brindille -*- *}} - -{{* - Mettre à niveau vers v0.33, pour gérer les écritures du bilan d'ouverture - où le montant d'une ligne d'immo ou d'une ligne d'amort peut être - réparti entre plusieurs immo et plusieurs amort - - - modifier le doc d'immo - - date => date_mes (date mise en service) - - - modifier le doc de liaison d'amortissement - - id ligne d'immobilisation => id doc immobilisation - - id ligne d'amortissement - - id écriture d'amortissement - - ajouter montant amortissement -*}} - -{{* doc immo *}} -{{#load type="immo" assign="elem"}} - {{if $elem.date != null}} - {{:assign var="elem.date_mes" value=$elem.date}} - {{:assign var="docs." value=$elem}} - {{:delete id=$elem.id}} - {{/if}} -{{/load}} - -{{* créer les nouveaux documents *}} -{{#foreach from=$docs item="doc"}} - {{:save - key=""|uuid - type=$doc.type - line=$doc.line - duration=$doc.duration - label=$doc.label - amount=$doc.amount - date_achat=$doc.date_achat - date_mes=$doc.date_mes - status=$doc.status - }} -{{/foreach}} - -{{* lister les liaisons actuelles ligne amort => ligne immo *}} -{{#load type="link" assign="link"}} - {{#load type="immo" where="$$.line = :immo_line_id" :immo_line_id=$link.immo_line_id assign="immo"}} - {{:assign link_doc=null}} - {{:assign var="link_doc.immo_doc_id" value=$immo.id}} - {{:assign var="link_doc.amort_line_id" value=$link.amort_line_id}} - {{:assign var="link_docs." value=$link_doc}} - {{else}} - {{* liaison orpheline : ignorer *}} - {{/load}} - {{:delete id=$link.id}} -{{/load}} - -{{* créer les nouvelles liaisons *}} -{{#foreach from=$link_docs item="link"}} - {{:save - key=""|uuid - type="amort_link" - immo_doc_id=$link.immo_doc_id - amort_line_id=$link.amort_line_id - amount=null - }} -{{/foreach}} diff --git a/add_account.html b/add_account.html index 76aded1..c5b471a 100644 --- a/add_account.html +++ b/add_account.html @@ -1,5 +1,5 @@ {{* -*- brindille -*- *}} -{{:admin_header title="Ajout immobilisation" current="module_amortization"}} +{{:admin_header title="Ajout immobilisation" current="module_amortissement"}} {{* barre de navigation *}} {{if ! $dialog}} diff --git a/add_asset.html b/add_asset.html index 6473370..666df24 100644 --- a/add_asset.html +++ b/add_asset.html @@ -1,7 +1,8 @@ {{* -*- brindille -*- *}} -{{:admin_header title="Ajout immobilisation" current="module_amortization"}} -{{:include file="_get_config.html" keep="module.config"}} +{{:read file="./defaut.json" assign="config_json"}} +{{:assign config_defaut=$config_json|json_decode}} +{{:assign var="prefix_array" value=$config_defaut.prefixes|keys}} {{#years closed=false order="start_date" assign=years.}} {{:assign ts_debut=$start_date|strtotime}} @@ -13,8 +14,6 @@ {{if $ts_debut <= $now && $now <= $ts_fin}} {{:assign selected_year=$id}} {{/if}} -{{else}} - {{:error message="Aucun exercice ouvert"}} {{/years}} {{* Traiter l'envoi du formulaire *}} @@ -35,6 +34,23 @@ {{:error message="La date saisie n'est pas dans l'exercice choisi !"}} {{/if}} + {{if ! $_POST.amortir}} + {{* ne pas amortir *}} + {{:assign duration=0}} + {{:assign date_debut=$_POST.date_achat|parse_date}} + {{:assign status="ignored"}} + {{else}} + {{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}} + {{:assign date_debut=$_POST.date_mes|or:$_POST.date_achat|parse_date}} + {{if $date_debut|strtotime < $_POST.date_achat|parse_date|strtotime}} + {{:assign dd=$date_debut|date_short}} + {{:assign da=$_POST.date_achat|date_short}} + {{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}} + {{/if}} + {{:assign duration=$_POST.duree|intval}} + {{:assign status="managed"}} + {{/if}} + {{* déterminer le numéro des comptes au cas où la clé serait un identifiant *}} {{:include file="_get_codes.html" @@ -48,30 +64,12 @@ keep="account_code" }} {{:assign credit_account=$account_code}} - {{:assign debit_account_code=$debit_account|keys|value:0}} - {{:assign credit_account_code=$credit_account|keys|value:0}} {{* vérifier : - que le compte d'immo débute par un préfixe correct (20, 21, ...) - est présent dans le PC de l'exercice correspondant à la date *}} - {{#foreach from=$module.config.prefixes item="code"}} - {{:assign var="prefix_array." value=$code}} - {{/foreach}} - {{#foreach from=$module.config.unfinished item="elem"}} - {{if $elem.code != null}} - {{:assign code=$elem.code}} - {{else}} - {{:assign code=$elem}} - {{/if}} - {{:assign var="prefix_array." value=$code}} - {{* déterminer si le compte d'immo est un compte d'immo en cours *}} - {{if $debit_account_code|strpos:$code === 0}} - {{:assign status="unfinished"}} - {{/if}} - {{/foreach}} - {{:include file="_check_account.html" account=$debit_account @@ -82,24 +80,7 @@ {{if $account_ok == null}} {{:assign compte=$debit_account|implode:""}} - {{:redirect url="add_account.html?account=%s&chart=%s"|args:$compte:$selected_chart}} - {{/if}} - - {{if $status != "unfinished"}} - {{* vérifier que la date d'acquisition est antérieure à la date de mise en service *}} - {{:assign date_debut=$_POST.date_mes|or:$_POST.date_achat|parse_date}} - {{if $date_debut|strtotime < $_POST.date_achat|parse_date|strtotime}} - {{:assign dd=$date_debut|date_short}} - {{:assign da=$_POST.date_achat|date_short}} - {{:error message="Erreur : la date de mise en service (%s) ne peut être antérieure à la date d'acquisition (%s)"|args:$dd:$da}} - {{/if}} - {{:assign duration=$_POST.duree|intval}} - {{:assign status="managed"}} - {{if $_POST.date_mes == null || $_POST.date_mes == $_POST.date_achat}} - {{:assign date_mes=null}} - {{else}} - {{:assign date_mes=$_POST.date_mes|parse_date}} - {{/if}} + {{:error message="Le compte « %s » n'est pas un compte d'immobilisation ou n'est pas dans le plan comptable de l'exercice choisi"|args:$compte}} {{/if}} {{* enregistrer l'écriture *}} @@ -112,68 +93,57 @@ date=$_POST.date_achat label=$_POST.designation amount=$_POST.montant - debit=$debit_account_code - credit=$credit_account_code + debit=$debit_account|keys|key:0 + credit=$credit_account|keys|key:0 id_project=$_POST.id_project }} - {{if $status != "unfinished"}} - {{* vérifier s'il y a déjà un document avec le même numéro de ligne *}} - {{:assign var="immo_line_id" value=$result.lines.1.id}} - {{#load where="$$.line = :line_id" :line_id=$immo_line_id}} - {{:assign key=$key}} - {{else}} - {{:assign key=""|uuid}} - {{/load}} - {{* enregistrer les infos de l'immobilisation *}} - {{:save - key=$key - validate_schema="asset.schema.json" - type="immo" - line=$immo_line_id - duration=$duration - date_mes=$date_mes - status=$status - created=true - }} - {{/if}} - - {{if $status == "unfinished"}} - {{:assign type_immo="unfinished"}} - {{elseif $status == "managed"}} - {{:assign type_immo="managed"}} + {{* vérifier s'il y a déjà un document avec le même numéro de ligne *}} + {{:assign var="immo_id" value=$result.lines.1.id}} + {{#load where="$$.line = :line_id" :line_id=$immo_id}} + {{:assign key=$key}} {{else}} - {{:assign type_immo="other"}} + {{:assign key=""|uuid}} + {{/load}} + + {{* enregistrer les infos de l'immobilisation *}} + {{:save + key=$key + validate_schema="schema.json" + type="immo" + line=$immo_id + duration=$duration + date=$date_debut + status=$status + }} + {{if $_POST.amortir}} + {{:assign type_immo="encours"}} + {{else}} + {{:assign type_immo="autre"}} {{/if}} {{:redirect force="index.html?ok=1&msg=immobilisation&type_immo=%s"|args:$type_immo}} - {{/form}} +{{:admin_header title="Ajout immobilisation" current="module_amortissement"}} {{* barre de navigation *}} {{if ! $dialog}} - {{:linkbutton href="index.html" label="Retour" shape="left"}} + {{:include file="_nav.html" current="index"}} {{/if}} {{:form_errors}} {{* formulaire d'ajout d'immobilisation *}} +{{:assign var="immo_account.2" value="2 — Classe 2 — Comptes d'immobilisations"}} + {{#select id,label FROM acc_projects WHERE archived = 0;}} {{:assign var="projects.%d"|args:$id value=$label}} {{/select}} -{{#foreach from=$module.config.prefixes item="code"}} +{{#foreach from=$prefix_array item="code"}} {{:assign var="pattern_array." value="%s*"|args:$code}} {{/foreach}} -{{#foreach from=$module.config.unfinished item="elem"}} - {{if $elem.code != null}} - {{:assign code=$elem.code}} - {{else}} - {{:assign code=$elem}} - {{/if}} -{{:assign var="pattern_array." value="%s*"|args:$code}} -{{/foreach}} -{{:assign var="patterns" value=$pattern_array|implode:"|"}} +{{:assign patterns=$pattern_array|implode:"|"}}La date choisie n'est dans aucun exercice ouvert !
@@ -185,14 +155,14 @@+ Ce module gère l'amortissement linéaire des immobilisations. +
+ ++ 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 +
+ ++ 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. +
++ Ce sont des écritures d'amortissement déjà + enregistrées et liées à l'écriture de + l'immobilisation courante. +
++ 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. +
++ 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. +
++ Il faut renseigner les différents paramètres de l'amortissement : +
+ Dans le deuxième cas, il faut cliquer sur le bouton « Ajouter + infos » puis : +
+ 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 35af614..c8280c0 100644 --- a/amortization.html +++ b/amortization.html @@ -2,107 +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}} - -{{* - Supprimer l'association entre une écriture d'immobilisation et - une écriture au crédit du compte d'immobilisation -*}} -{{#form on="detach_credit"}} - {{:include file="_detach_credit.html" immo_doc_id=$_POST.immo_doc_id credit_line_id=$_POST.detach_credit}} - {{:redirect to="?immo_doc_id=%s&ok=1&msg=detach_avoir"|args:$_POST.immo_doc_id}} -{{/form}} - -{{* - Supprimer l'association entre une écriture d'amortissement et - une écriture d'immobilisation -*}} -{{#form on="detach_amort"}} - {{:include file="_detach_amort.html" immo_doc_id=$_POST.immo_doc_id amort_line_id=$_POST.detach_amort}} - {{:redirect to="?immo_doc_id=%s&ok=1&msg=detach_amort"|args:$_POST.immo_doc_id:}} -{{/form}} - +{{* 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}}{{$msg}}
{{elseif $_GET.err}} {{if $_GET.msg|match:"attach"}} - {{:assign msg="Échec attachement amortissement"}} + {{:assign msg="Échec attachement"}} {{elseif $_GET.msg|match:"amortissement"}} {{:assign msg="Échec enregistrement amortissement"}} {{/if}} @@ -115,194 +157,100 @@{{:linkbutton label="Sortir du bilan" - href="balance_sheet_exit.html?immo_doc_id=%s&type_immo=%s"|args:$_GET.immo_doc_id:$_GET.type_immo + href="balance_sheet_exit.html?immo_id=%s&type_immo=%s"|args:$_GET.immo_id:$_GET.type_immo shape="export" class="main" }}
- 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.
-Aucun amortissement enregistré pour cette immobilisation
{{/if}} -{{if $free_amort_lines && ! $created_amort}} -
- 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.
+