Overview
Comment: | Add virtual users account page |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | stable |
Files: | files | file ages | folders |
SHA3-256: |
425e0ff5726ec0c6c40a15b5b71289fc |
User & Date: | bohwaz on 2022-01-18 00:04:10 |
Other Links: | manifest | tags |
Context
2022-01-18
| ||
00:38 | Fix account selector HTTP cache check-in: 14de49e7ca user: bohwaz tags: trunk, stable | |
00:04 | Add virtual users account page check-in: 425e0ff572 user: bohwaz tags: trunk, stable | |
00:03 | Fix transaction duplicate date check-in: 510e8b27af user: bohwaz tags: trunk, stable | |
Changes
Modified src/include/lib/Garradin/Accounting/Accounts.php from [c5f3b228de] to [cf7a7808ec].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php namespace Garradin\Accounting; use Garradin\Entities\Accounting\Account; use Garradin\Entities\Accounting\Line; use Garradin\Entities\Accounting\Transaction; use Garradin\Entities\Accounting\Year; use Garradin\CSV; use Garradin\DB; use Garradin\Utils; use Garradin\UserException; use Garradin\ValidationException; use KD2\DB\EntityManager; class Accounts { | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php namespace Garradin\Accounting; use Garradin\Entities\Accounting\Account; use Garradin\Entities\Accounting\Line; use Garradin\Entities\Accounting\Transaction; use Garradin\Entities\Accounting\Year; use Garradin\Config; use Garradin\CSV; use Garradin\DB; use Garradin\DynamicList; use Garradin\Utils; use Garradin\UserException; use Garradin\ValidationException; use KD2\DB\EntityManager; class Accounts { |
︙ | ︙ | |||
252 253 254 255 256 257 258 259 260 261 262 263 264 265 | return DB::getInstance()->first('SELECT * FROM acc_accounts WHERE type = ? AND id_chart = ? LIMIT 1;', $type, $this->chart_id); } public function getClosingAccountId() { return DB::getInstance()->firstColumn('SELECT id FROM acc_accounts WHERE type = ? AND id_chart = ?;', Account::TYPE_CLOSING, $this->chart_id); } /* FIXME: implement closing of accounts public function closeRevenueExpenseAccounts(Year $year, int $user_id) { $closing_id = $this->getClosingAccountId(); if (!$closing_id) { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 | return DB::getInstance()->first('SELECT * FROM acc_accounts WHERE type = ? AND id_chart = ? LIMIT 1;', $type, $this->chart_id); } public function getClosingAccountId() { return DB::getInstance()->firstColumn('SELECT id FROM acc_accounts WHERE type = ? AND id_chart = ?;', Account::TYPE_CLOSING, $this->chart_id); } public function listUserAccounts(int $year_id): DynamicList { $id_field = Config::getInstance()->champ_identite; $columns = [ 'id' => [ 'select' => 'u.id', ], 'user_number' => [ 'select' => 'u.numero', 'label' => 'N° membre', ], 'user_identity' => [ 'select' => 'u.' . $id_field, 'label' => 'Membre', ], 'balance' => [ 'select' => 'SUM(l.credit - l.debit)', 'label' => 'Solde', //'order' => 'balance != 0 %s, balance < 0 %1$s', ], 'status' => [ 'select' => null, 'label' => 'Statut', ], ]; $tables = 'acc_transactions_users tu INNER JOIN membres u ON u.id = tu.id_user INNER JOIN acc_transactions t ON tu.id_transaction = t.id INNER JOIN acc_transactions_lines l ON t.id = l.id_transaction INNER JOIN acc_accounts a ON a.id = l.id_account'; $conditions = 'a.type = ' . Account::TYPE_THIRD_PARTY . ' AND t.id_year = ' . $year_id; $list = new DynamicList($columns, $tables, $conditions); $list->orderBy('balance', false); $list->groupBy('u.id'); $list->setCount('COUNT(*)'); $list->setPageSize(null); $list->setExportCallback(function (&$row) { $row->balance = Utils::money_format($row->balance, '.', '', false); }); return $list; } /* FIXME: implement closing of accounts public function closeRevenueExpenseAccounts(Year $year, int $user_id) { $closing_id = $this->getClosingAccountId(); if (!$closing_id) { |
︙ | ︙ |
Added src/templates/acc/accounts/_nav.tpl version [b930b22191].
> > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <nav class="tabs"> <aside> {if $session->canAccess($session::SECTION_ACCOUNTING, $session::ACCESS_ADMIN)} {linkbutton shape="edit" href="!acc/charts/accounts/?id=%d"|args:$chart_id label="Modifier les comptes"} {/if} {linkbutton shape="search" href="!acc/search.php?year=%d"|args:$current_year.id label="Recherche"} </aside> <ul> <li{if $current == 'index'} class="current"{/if}><a href="{$admin_url}acc/accounts/">Comptes favoris</a></li> <li><a href="{$admin_url}acc/reports/trial_balance.php?year={$current_year.id}">Balance générale (tous les comptes)</a></li> <li{if $current == 'users'} class="current"{/if}><a href="{$admin_url}acc/accounts/users.php">Comptes de membres</a></li> {if $session->canAccess($session::SECTION_ACCOUNTING, $session::ACCESS_ADMIN)} <li><a href="{$admin_url}acc/charts/accounts/all.php?id={$chart_id}">Plan comptable complet</a></li> {/if} </ul> </nav> |
Modified src/templates/acc/accounts/index.tpl from [46d037e135] to [511b6c8a24].
1 2 3 4 | {include file="admin/_head.tpl" title="Comptes favoris" current="acc/accounts"} {include file="acc/_year_select.tpl"} | < < < < < | | < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 | {include file="admin/_head.tpl" title="Comptes favoris" current="acc/accounts"} {include file="acc/_year_select.tpl"} {include file="acc/accounts/_nav.tpl" current="index"} {if isset($_GET['chart_change'])} <p class="block error"> L'exercice sélectionné utilise un plan comptable différent, merci de sélectionner un autre compte. </p> {/if} |
︙ | ︙ |
Added src/templates/acc/accounts/users.tpl version [cd9e2ccbcd].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | {include file="admin/_head.tpl" title="Comptes favoris" current="acc/accounts"} {include file="acc/_year_select.tpl"} {include file="acc/accounts/_nav.tpl" current="users"} <p class="help"> Ce tableau présente une liste de comptes « virtuels » représentant les membres liés aux écritures. Seules les écritures liées à des comptes de tiers sont comptabilisées.<br /> Les membres qui n'ont aucune écriture associée n'apparaissent pas dans ce tableau. </p> {include file="common/dynamic_list_head.tpl"} {foreach from=$list->iterate() item="row"} <tr> <td class="num"><a href="{$admin_url}acc/transactions/user.php?id={$row.id}&year={$current_year.id}">{$row.user_number}</a></td> <th><a href="{$admin_url}acc/transactions/user.php?id={$row.id}&year={$current_year.id}">{$row.user_identity}</a></th> <td class="money"> {if $row.balance < 0}<strong class="error">{/if} {$row.balance|raw|money_currency:false} {if $row.balance < 0}</strong>{/if} </td> <td> <em class="alert"> {if $row.balance < 0}Dette {elseif $row.balance > 0}Créance {/if} </em> </td> <td class="actions"> {linkbutton label="Journal" shape="menu" href="!acc/transactions/user.php.php?id=%d&year=%d"|args:$row.id,$current_year.id} </td> </tr> {/foreach} </tbody> </table> {include file="admin/_foot.tpl"} |
Added src/www/admin/acc/accounts/users.php version [01b638e737].
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php namespace Garradin; use Garradin\Accounting\Accounts; require_once __DIR__ . '/../_inc.php'; if (!CURRENT_YEAR_ID) { throw new UserException('Aucun exercice sélectionné'); } $accounts = new Accounts($current_year->id_chart); $list = $accounts->listUserAccounts($current_year->id); $list->loadFromQueryString(); $tpl->assign('chart_id', $current_year->id_chart); $tpl->assign(compact('list')); $tpl->display('acc/accounts/users.tpl'); |