diff --git a/_archives.html b/_archives.html index da3f19c..be33053 100644 --- a/_archives.html +++ b/_archives.html @@ -93,9 +93,7 @@ {{/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 - *}} + {{* 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 diff --git a/_common_detach.html b/_common_detach.html new file mode 100644 index 0000000..b4e80d0 --- /dev/null +++ b/_common_detach.html @@ -0,0 +1,51 @@ +{{* -*- brindille -*- *}} + +{{* + Supprimer l'association entre deux lignes + @param immo_doc_id : id du doc associé à la ligne d'immobilisation + @param line_id : id de la ligne à détacher +*}} +{{* données de l'immobilisation *}} +{{:include file="_get_immo_data.html" immo_doc_id=$immo_doc_id|intval keep="ligne_immo, message"}} +{{if $message != null}} + {{:error message=$message}} +{{/if}} + +{{* chercher la deuxième écriture *}} +{{#select + id_transaction + FROM acc_transactions_lines + WHERE id = :line_id; + :line_id = $line_id|intval +}} + {{:assign trans_id=$id_transaction}} +{{else}} + {{:error message="Écriture non trouvée"}} +{{/select}} + +{{* + chercher les liaisons de l'écriture d'immobilisation + et supprimer la liaison avec la deuxième écriture +*}} +{{#select + CASE links.id_related = :immo_trans_id + WHEN true THEN links.id_transaction + WHEN false THEN links.id_related + END as linked_id + FROM acc_transactions_links as links + WHERE id_transaction = :immo_trans_id or id_related = :immo_trans_id; + :immo_trans_id = $ligne_immo.trans_id + }} + {{if $linked_id != $trans_id}} + {{:assign var="linked_transactions." value=$linked_id}} + {{/if}} +{{/select}} + +{{* Enregistrer les liaisons *}} +{{:api + method="POST" + path="accounting/transaction/%s/transactions"|args:$ligne_immo.trans_id + assign="result" + assign_code="result_code" + transactions=$linked_transactions +}} diff --git a/_get_amort_lines.html b/_get_amort_lines.html new file mode 100644 index 0000000..a985fa2 --- /dev/null +++ b/_get_amort_lines.html @@ -0,0 +1,39 @@ +{{* -*- brindille -*- *}} + +{{* + lister les lignes d'amortissement liées à la ligne d'immobilisation + @param immo_doc_id : id du doc associé à l'immobilisation + @result linked_amort : lignes d'amortissement liées à la ligne d'immobilisation + @result total_amort : montant total des amortissements de l'immobilisation +*}} + +{{:assign total_amort=0}} +{{#load type="amort_link" + where="$$.immo_doc_id = :immo_doc_id" + :immo_doc_id = $immo_doc_id|intval + assign="amort_info" +}} + {{#select + line.id as line_id, + line.credit as amount, + line.label as line_label, + trans.id as trans_id, + trans.label as trans_label, + trans.date as date, + trans.id_year as year, + account.id as account_id, + account.code as account_code, + account.label as account_label + FROM acc_transactions_lines AS line + INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + INNER join acc_accounts AS account on line.id_account = account.id + WHERE line.id = :amort_line_id + ; + :amort_line_id = $amort_line_id + assign="amort_line" + }} + {{:assign var="amort_line.amount" value=$amort_info.amount|or:$amort_line.amount}} + {{:assign var="linked_amort.%s_%d"|args:$amort_line.date:$amort_info.id value=$amort_line}} + {{:assign total_amort="%d+%d"|math:$total_amort:$amort_line.amount}} + {{/select}} +{{/load}} diff --git a/_get_credit_lines.html b/_get_credit_lines.html new file mode 100644 index 0000000..2bef7fb --- /dev/null +++ b/_get_credit_lines.html @@ -0,0 +1,31 @@ +{{* -*- brindille -*- *}} + +{{* + chercher des écritures liées à l'immo paramètre au crédit du même compte + @param immo_doc_id : id du doc associé à l'immobilisation + @param linked_immos : liste des écritures liées + @param total_credits : montant total des écritures +*}} +{{:assign linked_immos=null}} +{{:assign total_credits=0}} +{{#load type="credit_link" where="$$.immo_doc_id=:immo_doc_id" :immo_doc_id=$immo_doc_id|intval}} + {{#select + line.credit, + line.id as line_id, + trans.id as trans_id, + trans.label, + trans.date + FROM acc_transactions_lines AS line + INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + WHERE line.id = :credit_line_id; + :credit_line_id=$credit_line_id + }} + {{:assign credit=$credit}} + {{:assign var="linked_immos." doc=$id trans_id=$trans_id credit_line_id=$line_id label=$label amount=$credit date=$date}} + {{/select}} + {{if $amount == null}} + {{:assign total_credits="%d+%d"|math:$total_credits:$credit}} + {{else}} + {{:assign total_credits="%d+%d"|math:$total_credits:$amount}} + {{/if}} +{{/load}} diff --git a/_get_free_amort.html b/_get_free_amort.html new file mode 100644 index 0000000..a3373a4 --- /dev/null +++ b/_get_free_amort.html @@ -0,0 +1,46 @@ +{{* -*- brindille -*- *}} + +{{* + lister les amortissement non rattachés à une immo + @param filter_condition +*}} +{{#select + line.id as line_id, + line.id_transaction as trans_id, + line.credit as amount, + line.label as line_label, + trans.date as trans_date, + trans.label as trans_label, + trans.id_year as year, + account.id as account_id, + account.code as account_code, + account.label as account_label + FROM acc_transactions_lines AS line + INNER JOIN acc_accounts AS account ON account.id = line.id_account + INNER JOIN acc_transactions AS trans ON trans.id = line.id_transaction + WHERE 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_line" +}} + {{* voir s'il existe des lignes d'immo liées à cette ligne d'amortissement *}} + {{:assign amort_amount=0}} + {{:assign keep_amort=true}} + {{#load type="amort_link" + where="$$.amort_line_id = :amort_line_id" + :amort_line_id=$amort_line.line_id|intval + assign="amort_link" + }} + {{if $amort_link.amount == null || $amort_link.amount == 0}} + {{:assign amort_amount=$amort_line.amount}} + {{:assign keep_amort=false}} + {{else}} + {{:assign amort_amount="%d+%d"|math:$amort_amount:$amort_link.amount}} + {{/if}} + {{else}} + {{* pas de ligne d'immo liée à cette ligne d'amort => garder cette ligne d'amortissement *}} + {{/load}} + {{if $keep_amort && $amort_amount < $amort_line.amount}} + {{:assign var="free_amort_lines." value=$amort_line}} + {{/if}} +{{/select}} diff --git a/_get_immo_data.html b/_get_immo_data.html new file mode 100644 index 0000000..513ec0b --- /dev/null +++ b/_get_immo_data.html @@ -0,0 +1,39 @@ +{{* -*- brindille -*- *}} + +{{* + Récupérer les infos d'une immobilisation + @param immo_doc_id : id du document associé à l'immobilisation + @result info_immo : infos du document associé + @result ligne_immo : données de la base + @result message non null si une erreur s'est produite +*}} + +{{#load id=$immo_doc_id|intval assign="info_immo"}} +{{else}} + {{:assign error=true}} + {{:assign message="Immobilisation non trouvée"}} +{{/load}} + +{{if ! $error}} + {{#select + line.id as line_id, + line.debit as amount, + line.label as line_label, + line.id_project as id_project, + trans.id as trans_id, + trans.label as trans_label, + trans.date as date_achat, + account.id as account_id, + account.code as account_code, + account.label as account_label + FROM acc_transactions_lines AS line + INNER JOIN acc_transactions AS trans ON line.id_transaction = trans.id + INNER JOIN acc_accounts AS account ON line.id_account = account.id + WHERE line.id = :line_id; + :line_id = $info_immo.line + assign="ligne_immo" + }} + {{else}} + {{:assign message="Immobilisation non trouvée"}} + {{/select}} +{{/if}} diff --git a/_immobilisations.html b/_immobilisations.html index 1546725..e78fbfd 100644 --- a/_immobilisations.html +++ b/_immobilisations.html @@ -77,10 +77,7 @@ {{: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 - et déduire leur montant de celui de l'immo - *}} + {{* déduire le montant des écritures liées à l'immo courante au crédit du même compte *}} {{#load type="credit_link" where="$$.immo_doc_id = :immo_doc_id" :immo_doc_id = $immo_doc_id @@ -102,24 +99,9 @@ {{:continue}} {{/if}} - {{* chercher des lignes des écritures d'amortissement liées à la ligne d'immobilisation *}} - {{:assign amort_lines=null}} - {{:assign amort_amount=0}} - {{#load type="amort_link" - where="$$.immo_doc_id = :immo_doc_id" - :immo_doc_id = $immo_doc_id - assign="amort_link" - }} - {{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}} + {{* montant des amortissements liés à l'immobilisation *}} + {{:include file="./_get_amort_lines.html" immo_doc_id=$immo_doc_id keep="total_amort"}} + {{:assign amort_amount=$total_amort}} {{* classement par onglet *}} {{if $type_immo == "managed" && $amort_amount >= $montant_immo}}{{:continue}}{{/if}} diff --git a/_unfinished.html b/_unfinished.html index ab561a9..edbd320 100644 --- a/_unfinished.html +++ b/_unfinished.html @@ -129,7 +129,7 @@ {{* TODO cas où : - il y a (au moins) une écriture d'avoir - - il y a une écriture dui solde l'immo (montant = montant immo - avoir + - il y a une écriture qui solde l'immo (montant = montant immo - avoir *}} {{* voir s'il existe une écriture qui solde l'immobilisation (voir ci-dessus) *}} diff --git a/add_infos.html b/add_infos.html index e06b6bb..382025b 100644 --- a/add_infos.html +++ b/add_infos.html @@ -39,8 +39,11 @@ {{#form on="save"}} + {{if $_POST.classify == null}} + {{:error message="Vous devez faire un choix de classement"}} + {{/if}} - {{if ! $_POST.amortir}} + {{if $_POST.classify == "ignored"}} {{* ne pas amortir *}} {{:assign duration=0}} {{:assign libelle=null}} @@ -48,8 +51,20 @@ {{:assign date_achat=null}} {{:assign date_mes=null}} {{:assign status="ignored"}} + {{elseif $_POST.classify == "archived"}} + {{* immobilisation sortie du bilan *}} + {{:save + key=""|uuid + validate_schema="schema.json" + type="immo" + line=$_GET.immo_line_id|intval + duration=0 + status="archived" + assign_new_id="immo_doc_id" + }} + {{:redirect force="exit_step1.html?immo_doc_id=%s"|args:$immo_doc_id}} {{else}} - + {{* immobilisation amortissable *}} {{if $_POST.date_achat|parse_date > $ligne_immo.date_achat}} {{:assign da=$ligne_immo.date_achat|date_short}} {{:error message="Erreur : la date d'achat (%s) ne peut être postérieure à la date de l'écriture d'immobilisation (%s)"|args:$_POST.date_achat:$da}} @@ -152,10 +167,13 @@