Comment: | UX tweaks |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
d931eececf7c6b7dfd1cac9012c017bb |
User & Date: | bohwaz on 2020-10-21 13:00:06 |
Other Links: | branch diff | manifest | tags |
2020-10-21
| ||
14:54 | Improve plot graphs check-in: 504e540292 user: bohwaz tags: dev | |
13:00 | UX tweaks check-in: d931eececf user: bohwaz tags: dev | |
2020-10-18
| ||
16:31 | Implement import multi-line transactions CSV check-in: 6b024f84c4 user: bohwaz tags: dev | |
Modified src/include/lib/Garradin/Entities/Accounting/Account.php from [c0c34a0207] to [9aa4897216].
︙ | ︙ | |||
237 238 239 240 241 242 243 244 245 | } public function canDelete(): bool { return !DB::getInstance()->firstColumn(sprintf('SELECT 1 FROM %s WHERE id_account = ? LIMIT 1;', Line::TABLE), $this->id()); } public function canEdit(): bool { | > > > > > > > | | > > > > > > > > > > > | 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | } public function canDelete(): bool { return !DB::getInstance()->firstColumn(sprintf('SELECT 1 FROM %s WHERE id_account = ? LIMIT 1;', Line::TABLE), $this->id()); } /** * An account properties (position, label and code) can only be changed if: * * it's either a user-created account or an account part of a user-created chart * * has no transactions in a closed year * @return bool */ public function canEdit(): bool { $db = DB::getInstance(); $sql = sprintf('SELECT 1 FROM %s l INNER JOIN %s t ON t.id = l.id_transaction INNER JOIN %s y ON y.id = t.id_year WHERE l.id_account = ? AND y.closed = 1 LIMIT 1;', Line::TABLE, Transaction::TABLE, Year::TABLE); $has_transactions_in_closed_year = $db->firstColumn($sql, $this->id()); if ($has_transactions_in_closed_year) { return false; } if ($this->user) { return true; } return $db->test(Chart::TABLE, 'id = ? AND code IS NULL', $this->id_chart); } public function chart(): Chart { return Charts::get($this->id_chart); } } |
Modified src/include/lib/Garradin/Template.php from [838003c89e] to [c1051cc663].
︙ | ︙ | |||
236 237 238 239 240 241 242 243 244 245 246 247 248 249 | $attributes['pattern'] = '\d\d?/\d\d?/\d{4}'; } // Create attributes string if (array_key_exists('required', $attributes)) { $attributes['required'] = 'required'; } $attributes_string = $attributes; array_walk($attributes_string, function (&$v, $k) { $v = sprintf('%s="%s"', $k, $v); }); | > > > > > | 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | $attributes['pattern'] = '\d\d?/\d\d?/\d{4}'; } // Create attributes string if (array_key_exists('required', $attributes)) { $attributes['required'] = 'required'; } if (!empty($attributes['disabled'])) { $attributes['disabled'] = 'disabled'; unset($attributes['required']); } $attributes_string = $attributes; array_walk($attributes_string, function (&$v, $k) { $v = sprintf('%s="%s"', $k, $v); }); |
︙ | ︙ |
Modified src/templates/acc/charts/accounts/_account_form.tpl from [15db4a04de] to [c173c99a0d].
1 2 3 4 5 | <dl> {input type="select" label="Type de compte favori" name="type" source=$account required=true options=$types} <dd class="help">Le statut de compte favori est utilisé pour les écritures <em>« simplifiées »</em> (recettes, dépenses, dettes, créances, virements), pour la liste des comptes, et également pour proposer certaines fonctionnalités (rapprochement pour les comptes bancaires, règlement rapide de dette et créance, dépôt de chèques).</dd> <dd class="help">Un compte qui n'a pas de type favori ne pourra être utilisé que dans une saisie avancée, et ne sera visible que dans les rapports de l'exercice.</dd> | | | | | | | | | | < | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <dl> {input type="select" label="Type de compte favori" name="type" source=$account required=true options=$types} <dd class="help">Le statut de compte favori est utilisé pour les écritures <em>« simplifiées »</em> (recettes, dépenses, dettes, créances, virements), pour la liste des comptes, et également pour proposer certaines fonctionnalités (rapprochement pour les comptes bancaires, règlement rapide de dette et créance, dépôt de chèques).</dd> <dd class="help">Un compte qui n'a pas de type favori ne pourra être utilisé que dans une saisie avancée, et ne sera visible que dans les rapports de l'exercice.</dd> {if !$simple} <dt><label for="f_position_0">Position au bilan ou résultat</label>{if !$edit_disabled} <b>(obligatoire)</b>{/if}</dt> <dd class="help">La position permet d'indiquer dans quelle partie du bilan ou du résultat doit figurer le compte.</dd> <dd class="help">Les comptes inscrits en actif ou passif figureront dans le bilan, alors que ceux inscrits en produit ou charge figureront au compte de résultat.</dd> {input type="radio" label="Ne pas utiliser ce compte au bilan ni au résultat" name="position" value=0 source=$account disabled=$edit_disabled} {input type="radio" label="Bilan : actif" name="position" value=1 source=$account help="ce que possède l'association : stocks, locaux, soldes bancaires, etc." disabled=$edit_disabled} {input type="radio" label="Bilan : passif" name="position" value=2 source=$account help="ce que l'association doit : dettes, provisions, réserves, etc." disabled=$edit_disabled} {input type="radio" label="Bilan : actif ou passif" name="position" value=3 source=$account help="le compte sera placé à l'actif si son solde est débiteur, ou au passif s'il est créditeur" disabled=$edit_disabled} {input type="radio" label="Résultat : produit" name="position" value=4 source=$account help="recettes" disabled=$edit_disabled} {input type="radio" label="Résultat : charge" name="position" value=5 source=$account help="dépenses" disabled=$edit_disabled} {input type="text" label="Code" maxlength="10" name="code" source=$account required=true help="Le code du compte sert à trier le compte dans le plan comptable, attention à choisir un code qui correspond au plan comptable." disabled=$edit_disabled} {/if} {input type="text" label="Libellé" name="label" source=$account required=true disabled=$edit_disabled} {input type="textarea" label="Description" name="description" source=$account} </dl> {if !$simple && isset($translate_type_position, $translate_type_codes)} <script type="text/javascript"> var types_positions = {$translate_type_position|escape:json}; var types_codes = {$translate_type_codes|escape:json}; |
︙ | ︙ |
Modified src/templates/acc/charts/accounts/edit.tpl from [e05b8376dc] to [0480c731d3].
1 2 3 4 5 6 | {include file="admin/_head.tpl" title="Modifier un compte" current="acc/charts" js=1} {form_errors} <form method="post" action="{$self_url}"> | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | {include file="admin/_head.tpl" title="Modifier un compte" current="acc/charts" js=1} {form_errors} <form method="post" action="{$self_url}"> {if $edit_disabled} <p class="alert"> Il n'est pas possible de modifier le libellé, le code ou la position de ce compte car il {if $account.user}est utilisé par des écritures liées à des exercices clôturés{else}fait partie du plan comptable officiel{/if}.<br /> Pour pouvoir modifier ce compte pour l'exercice courant, il est conseillé de <a href="{$admin_url}acc/charts/?from={$account.id_chart}">créer un nouveau plan comptable</a> en y recopiant l'ancien plan comptable. </p> {/if} <fieldset> <legend>Modifier un compte</legend> {include file="acc/charts/accounts/_account_form.tpl" simple=false} </fieldset> <p class="submit"> {csrf_field key="acc_accounts_edit_%s"|args:$account.id} <input type="submit" name="edit" value="Enregistrer →" /> </p> </form> {include file="admin/_foot.tpl"} |
Modified src/templates/acc/charts/accounts/new.tpl from [6ea9d167fa] to [8bbadeb4c1].
1 2 3 4 5 6 7 8 | {include file="admin/_head.tpl" title="Nouveau compte" current="acc/charts" js=1} {form_errors} <form method="post" action="{$self_url}"> <fieldset> <legend>Créer un nouveau compte</legend> | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | {include file="admin/_head.tpl" title="Nouveau compte" current="acc/charts" js=1} {form_errors} <form method="post" action="{$self_url}"> <fieldset> <legend>Créer un nouveau compte</legend> {include file="acc/charts/accounts/_account_form.tpl" simple=$simple edit_disabled=false} </fieldset> <p class="submit"> {csrf_field key="acc_accounts_new"} <input type="submit" name="save" value="Créer →" /> </p> </form> {include file="admin/_foot.tpl"} |
Modified src/templates/acc/charts/import.tpl from [3969642f77] to [1316eaf743].
1 2 3 4 5 6 7 8 | {include file="admin/_head.tpl" title="Importer un nouveau plan comptable" current="acc/charts"} {form_errors} <form method="post" action="{$self_url}" enctype="multipart/form-data"> <fieldset> <legend>Importer un plan comptable</legend> <dl> | > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | {include file="admin/_head.tpl" title="Importer un nouveau plan comptable" current="acc/charts"} <nav class="tabs"> <ul> <li><a href="{$admin_url}acc/charts/">Plans comptables</a></li> <li class="current"><a href="{$admin_url}acc/charts/import.php">Importer un plan comptable</a></li> </ul> </nav> {form_errors} <form method="post" action="{$self_url}" enctype="multipart/form-data"> <fieldset> <legend>Importer un plan comptable</legend> <dl> |
︙ | ︙ |
Modified src/templates/acc/years/new.tpl from [d4e14f356b] to [8db99527f5].
1 2 3 4 5 6 7 8 9 10 | {include file="admin/_head.tpl" title="Commencer un exercice" current="acc/years" js=1} {form_errors} <form method="post" action="{$self_url}"> <fieldset> <legend>Commencer un nouvel exercice</legend> <dl> {input type="select_groups" options=$charts name="id_chart" label="Plan comptable" required=true} | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | {include file="admin/_head.tpl" title="Commencer un exercice" current="acc/years" js=1} {form_errors} <form method="post" action="{$self_url}"> <fieldset> <legend>Commencer un nouvel exercice</legend> <dl> {input type="select_groups" options=$charts name="id_chart" label="Plan comptable" required=true} <dd class="help">Attention, il ne sera pas possible de modifier ou supprimer un compte du plan comptable si le compte est utilisé dans un exercice clôturé.<br /> Si vous souhaitez modifier le plan comptable pour ce nouvel exercice, il est recommandé de créer un nouveau plan comptable, recopié à partir de l'ancien plan comptable. Ainsi tous les comptes seront modifiables et supprimables.</dd> <dd class="help">{linkbutton shape="settings" label="Gestion des plans comptables" href="acc/charts/"}</dd> {input type="text" name="label" label="Libellé" required=true} {input type="date" label="Début de l'exercice" name="start_date" required=true default=$start_date} {input type="date" label="Fin de l'exercice" name="end_date" required=true default=$end_date} </dl> </fieldset> |
︙ | ︙ |
Modified src/www/admin/acc/charts/accounts/edit.php from [918c58e783] to [cd87e2dec4].
︙ | ︙ | |||
15 16 17 18 19 20 21 | $chart = $account->chart(); if ($chart->archived) { throw new UserException("Il n'est pas possible de modifier un compte d'un plan comptable archivé."); } | | | | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | $chart = $account->chart(); if ($chart->archived) { throw new UserException("Il n'est pas possible de modifier un compte d'un plan comptable archivé."); } $edit_disabled = !$account->canEdit(); if (f('edit') && $form->check('acc_accounts_edit_' . $account->id())) { try { if ($edit_disabled) { $account->importLimitedForm(); } else { $account->importForm(); } $account->save(); $page = ''; if (!$account->type) { |
︙ | ︙ | |||
46 47 48 49 50 51 52 | $form->addError($e->getMessage()); } } $types = $account::TYPES_NAMES; $types[0] = '-- Pas un compte favori'; | | | 46 47 48 49 50 51 52 53 54 55 | $form->addError($e->getMessage()); } } $types = $account::TYPES_NAMES; $types[0] = '-- Pas un compte favori'; $tpl->assign(compact('types', 'account', 'edit_disabled')); $tpl->display('acc/charts/accounts/edit.tpl'); |
Modified src/www/admin/acc/charts/import.php from [0fac8cf190] to [d727ce764e].
1 2 3 4 5 6 7 8 9 10 | <?php namespace Garradin; use Garradin\Accounting\Charts; use Garradin\Entities\Accounting\Chart; require_once __DIR__ . '/../_inc.php'; $session->requireAccess('compta', Membres::DROIT_ADMIN); | > | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; use Garradin\Accounting\Accounts; use Garradin\Accounting\Charts; use Garradin\Entities\Accounting\Chart; require_once __DIR__ . '/../_inc.php'; $session->requireAccess('compta', Membres::DROIT_ADMIN); |
︙ | ︙ |
Modified src/www/admin/static/admin.css from [9d48c9c5e5] to [4fb472f6a7].
︙ | ︙ | |||
360 361 362 363 364 365 366 367 368 369 370 371 372 373 | } input[type=submit], input[type=button], input[type=checkbox], button { padding: 0.3em; cursor: pointer; transition: opacity .5s ease; } input.resetButton { padding: .1em; margin-left: 1em; } input[type=button].showPassword { | > > > > > | 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 | } input[type=submit], input[type=button], input[type=checkbox], button { padding: 0.3em; cursor: pointer; transition: opacity .5s ease; } input[disabled], input[disabled] + label { cursor: not-allowed; opacity: 0.5; } input.resetButton { padding: .1em; margin-left: 1em; } input[type=button].showPassword { |
︙ | ︙ |