Compare commits

..

16 Commits

Author SHA1 Message Date
github-actions
04d1e8fd59 Auto commit for release 'develop' on 2025-01-19 2025-01-19 11:46:08 +01:00
James Cole
9d2f57e40a Fix menu 2025-01-19 11:41:24 +01:00
James Cole
ae366341cc Rename default to native. 2025-01-19 11:40:07 +01:00
James Cole
3766128cb8 Add code for administrations. 2025-01-19 11:34:23 +01:00
James Cole
950c60d55c Fix https://github.com/firefly-iii/firefly-iii/issues/9667 2025-01-19 07:18:07 +01:00
James Cole
4b2807de48 rename admin to settings. 2025-01-18 17:26:31 +01:00
James Cole
649736cb31 Rename admin to settings. 2025-01-18 17:22:11 +01:00
James Cole
6a121a8a78 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop
# Conflicts:
#	app/Transformers/AccountTransformer.php
2025-01-18 17:21:34 +01:00
James Cole
f69b9ac9da Commit updated transformers. 2025-01-18 17:20:39 +01:00
James Cole
23d70a2fac Rename to settings 2025-01-18 17:20:21 +01:00
James Cole
d178ff9de0 Rename admin routes to settings. 2025-01-18 17:20:06 +01:00
James Cole
3ecad3457f Rename "administration" to "settings" 2025-01-18 17:10:47 +01:00
github-actions
fa6c621968 Auto commit for release 'develop' on 2025-01-15 2025-01-15 20:30:00 +01:00
James Cole
df863b6cff Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2025-01-15 18:54:56 +01:00
James Cole
9316ff3e51 Fix account api for new features. 2025-01-15 18:54:49 +01:00
James Cole
bfd91f8ee6 Update default.twig
Signed-off-by: James Cole <james@firefly-iii.org>
2025-01-13 11:32:54 +01:00
105 changed files with 4623 additions and 3134 deletions

View File

@@ -406,16 +406,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.67.1",
"version": "v3.68.1",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "db533e9aeb19c33033b6a1b734c8de4f4ebaa7dc"
"reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/db533e9aeb19c33033b6a1b734c8de4f4ebaa7dc",
"reference": "db533e9aeb19c33033b6a1b734c8de4f4ebaa7dc",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff",
"reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff",
"shasum": ""
},
"require": {
@@ -497,7 +497,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.67.1"
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1"
},
"funding": [
{
@@ -505,7 +505,7 @@
"type": "github"
}
],
"time": "2025-01-12T12:20:47+00:00"
"time": "2025-01-17T09:20:36+00:00"
},
{
"name": "psr/container",

View File

@@ -30,12 +30,19 @@ use FireflyIII\Models\Preference;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Transformers\V2\AbstractTransformer;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -223,4 +230,45 @@ abstract class Controller extends BaseController
return $manager;
}
final protected function jsonApiList(string $key, LengthAwarePaginator $paginator, AbstractTransformer $transformer): array
{
$manager = new Manager();
$baseUrl = sprintf('%s/api/v1/', request()->getSchemeAndHttpHost());
// TODO add stuff to path?
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$objects = $paginator->getCollection();
// the transformer, at this point, needs to collect information that ALL items in the collection
// require, like meta-data and stuff like that, and save it for later.
$objects = $transformer->collectMetaData($objects);
$paginator->setCollection($objects);
$resource = new FractalCollection($objects, $transformer, $key);
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return $manager->createData($resource)->toArray();
}
/**
* Returns a JSON API object and returns it.
*
* @param array<int, mixed>|Model $object
*/
final protected function jsonApiObject(string $key, array|Model $object, AbstractTransformer $transformer): array
{
// create some objects:
$manager = new Manager();
$baseUrl = sprintf('%s/api/v1', request()->getSchemeAndHttpHost());
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$transformer->collectMetaData(new Collection([$object]));
$resource = new Item($object, $transformer, $key);
return $manager->createData($resource)->toArray();
}
}

View File

@@ -0,0 +1,71 @@
<?php
/*
* IndexController.php
* Copyright (c) 2024 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\UserGroup;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Data\DateRequest;
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
use FireflyIII\Transformers\UserGroupTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
class IndexController extends Controller
{
public const string RESOURCE_KEY = 'user_groups';
private UserGroupRepositoryInterface $repository;
/**
* AccountController constructor.
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
$this->repository = app(UserGroupRepositoryInterface::class);
return $next($request);
}
);
}
public function index(DateRequest $request): JsonResponse
{
$administrations = $this->repository->get();
$pageSize = $this->parameters->get('limit');
$count = $administrations->count();
$administrations = $administrations->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($administrations, $count, $pageSize, $this->parameters->get('page'));
$transformer = new UserGroupTransformer();
$transformer->setParameters($this->parameters); // give params to transformer
return response()
->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer))
->header('Content-Type', self::CONTENT_TYPE)
;
}
}

View File

@@ -0,0 +1,64 @@
<?php
/*
* ShowController.php
* Copyright (c) 2021 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\UserGroup;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Models\UserGroup;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Transformers\UserGroupTransformer;
use Illuminate\Http\JsonResponse;
/**
* Class ShowController
*/
class ShowController extends Controller
{
public const string RESOURCE_KEY = 'user_groups';
private WebhookRepositoryInterface $repository;
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
$this->repository = app(WebhookRepositoryInterface::class);
$this->repository->setUser(auth()->user());
return $next($request);
}
);
}
public function show(UserGroup $userGroup): JsonResponse
{
$transformer = new UserGroupTransformer();
$transformer->setParameters($this->parameters);
return response()
->api($this->jsonApiObject(self::RESOURCE_KEY, $userGroup, $transformer))
->header('Content-Type', self::CONTENT_TYPE)
;
}
}

View File

@@ -0,0 +1,71 @@
<?php
/*
* UpdateController.php
* Copyright (c) 2025 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\UserGroup;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Models\UserGroup\UpdateRequest;
use FireflyIII\Models\UserGroup;
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
use FireflyIII\Transformers\UserGroupTransformer;
use Illuminate\Http\JsonResponse;
class UpdateController extends Controller
{
public const string RESOURCE_KEY = 'user_groups';
private UserGroupRepositoryInterface $repository;
/**
* AccountController constructor.
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
$this->repository = app(UserGroupRepositoryInterface::class);
return $next($request);
}
);
}
public function update(UpdateRequest $request, UserGroup $userGroup): JsonResponse
{
app('log')->debug(sprintf('Now in %s', __METHOD__));
$data = $request->getData();
$userGroup = $this->repository->update($userGroup, $data);
$userGroup->refresh();
app('preferences')->mark();
$transformer = new UserGroupTransformer();
$transformer->setParameters($this->parameters);
return response()
->api($this->jsonApiObject(self::RESOURCE_KEY, $userGroup, $transformer))
->header('Content-Type', self::CONTENT_TYPE)
;
}
}

View File

@@ -55,6 +55,7 @@ class DateRequest extends FormRequest
return [
'start' => $start,
'end' => $end,
'date' => $this->getCarbonDate('date'),
];
}
@@ -64,8 +65,9 @@ class DateRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'required|date',
'end' => 'required|date|after:start',
'date' => 'date|after:1900-01-01|before:2099-12-31',
'start' => 'date|after:1900-01-01|before:2099-12-31|before:end|required_with:end',
'end' => 'date|after:1900-01-01|before:2099-12-31|after:start|required_with:start',
];
}
}

View File

@@ -0,0 +1,65 @@
<?php
/*
* UpdateRequest.php
* Copyright (c) 2021 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests\Models\UserGroup;
use FireflyIII\Models\UserGroup;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class UpdateRequest
*/
class UpdateRequest extends FormRequest
{
use ChecksLogin;
use ConvertsDataTypes;
public function getData(): array
{
$fields = [
'title' => ['title', 'convertString'],
'native_currency_id' => ['native_currency_id', 'convertInteger'],
'native_currency_code' => ['native_currency_code', 'convertString'],
];
return $this->getAllData($fields);
}
/**
* Rules for this request.
*/
public function rules(): array
{
/** @var UserGroup $userGroup */
$userGroup = $this->route()->parameter('userGroup');
return [
'title' => ['required', 'min:1', 'max:255'],
'native_currency_id' => 'exists:transaction_currencies,id',
'native_currency_code' => 'exists:transaction_currencies,code',
];
}
}

View File

@@ -66,7 +66,7 @@ class ShowController extends Controller
$default = 1 === $group->pivot->group_default;
}
$currency->userGroupEnabled = $enabled;
$currency->userGroupDefault = $default;
$currency->userGroupNative = $default;
$transformer = new CurrencyTransformer();

View File

@@ -119,7 +119,7 @@ class EditController extends Controller
}
$request->session()->forget('accounts.edit.fromUpdate');
$openingBalanceAmount = (string) $repository->getOpeningBalanceAmount($account);
$openingBalanceAmount = (string) $repository->getOpeningBalanceAmount($account, false);
if ('0' === $openingBalanceAmount) {
$openingBalanceAmount = '';
}

View File

@@ -45,7 +45,7 @@ class ConfigurationController extends Controller
$this->middleware(
static function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
return $next($request);
@@ -73,7 +73,7 @@ class ConfigurationController extends Controller
$siteOwner = config('firefly.site_owner');
return view(
'admin.configuration.index',
'settings.configuration.index',
compact('subTitle', 'subTitleIcon', 'singleUserMode', 'isDemoSite', 'siteOwner')
);
}
@@ -96,6 +96,6 @@ class ConfigurationController extends Controller
session()->flash('success', (string) trans('firefly.configuration_updated'));
app('preferences')->mark();
return redirect()->route('admin.configuration.index');
return redirect()->route('settings.configuration.index');
}
}

View File

@@ -51,7 +51,7 @@ class HomeController extends Controller
public function index()
{
Log::channel('audit')->info('User visits admin index.');
$title = (string) trans('firefly.administration');
$title = (string) trans('firefly.system_settings');
$mainTitleIcon = 'fa-hand-spock-o';
$email = auth()->user()->email;
$pref = app('preferences')->get('remote_guard_alt_email');
@@ -59,6 +59,6 @@ class HomeController extends Controller
$email = $pref->data;
}
return view('admin.index', compact('title', 'mainTitleIcon', 'email'));
return view('settings.index', compact('title', 'mainTitleIcon', 'email'));
}
}

View File

@@ -51,7 +51,7 @@ class LinkController extends Controller
$this->middleware(
function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
$this->repository = app(LinkTypeRepositoryInterface::class);
@@ -78,7 +78,7 @@ class LinkController extends Controller
$this->rememberPreviousUrl('link-types.create.url');
}
return view('admin.link.create', compact('subTitle', 'subTitleIcon'));
return view('settings.link.create', compact('subTitle', 'subTitleIcon'));
}
/**
@@ -91,7 +91,7 @@ class LinkController extends Controller
if (false === $linkType->editable) {
$request->session()->flash('error', (string) trans('firefly.cannot_edit_link_type', ['name' => e($linkType->name)]));
return redirect(route('admin.links.index'));
return redirect(route('settings.links.index'));
}
Log::channel('audit')->info(sprintf('User wants to delete link type #%d', $linkType->id));
@@ -111,7 +111,7 @@ class LinkController extends Controller
// put previous url in session
$this->rememberPreviousUrl('link-types.delete.url');
return view('admin.link.delete', compact('linkType', 'subTitle', 'moveTo', 'count'));
return view('settings.link.delete', compact('linkType', 'subTitle', 'moveTo', 'count'));
}
/**
@@ -142,7 +142,7 @@ class LinkController extends Controller
if (false === $linkType->editable) {
$request->session()->flash('error', (string) trans('firefly.cannot_edit_link_type', ['name' => e($linkType->name)]));
return redirect(route('admin.links.index'));
return redirect(route('settings.links.index'));
}
$subTitle = (string) trans('firefly.edit_link_type', ['name' => $linkType->name]);
$subTitleIcon = 'fa-link';
@@ -155,7 +155,7 @@ class LinkController extends Controller
}
$request->session()->forget('link-types.edit.fromUpdate');
return view('admin.link.edit', compact('subTitle', 'subTitleIcon', 'linkType'));
return view('settings.link.edit', compact('subTitle', 'subTitleIcon', 'linkType'));
}
/**
@@ -176,7 +176,7 @@ class LinkController extends Controller
}
);
return view('admin.link.index', compact('subTitle', 'subTitleIcon', 'linkTypes'));
return view('settings.link.index', compact('subTitle', 'subTitleIcon', 'linkTypes'));
}
/**
@@ -192,7 +192,7 @@ class LinkController extends Controller
Log::channel('audit')->info(sprintf('User viewing link type #%d', $linkType->id));
return view('admin.link.show', compact('subTitle', 'subTitleIcon', 'linkType', 'links'));
return view('settings.link.show', compact('subTitle', 'subTitleIcon', 'linkType', 'links'));
}
/**
@@ -217,7 +217,7 @@ class LinkController extends Controller
// set value so create routine will not overwrite URL:
$request->session()->put('link-types.create.fromStore', true);
$redirect = redirect(route('admin.links.create'))->withInput();
$redirect = redirect(route('settings.links.create'))->withInput();
}
// redirect to previous URL.
@@ -234,7 +234,7 @@ class LinkController extends Controller
if (false === $linkType->editable) {
$request->session()->flash('error', (string) trans('firefly.cannot_edit_link_type', ['name' => e($linkType->name)]));
return redirect(route('admin.links.index'));
return redirect(route('settings.links.index'));
}
$data = [
@@ -253,7 +253,7 @@ class LinkController extends Controller
// set value so edit routine will not overwrite URL:
$request->session()->put('link-types.edit.fromUpdate', true);
$redirect = redirect(route('admin.links.edit', [$linkType->id]))->withInput(['return_to_edit' => 1]);
$redirect = redirect(route('settings.links.edit', [$linkType->id]))->withInput(['return_to_edit' => 1]);
}
// redirect to previous URL.

View File

@@ -38,7 +38,7 @@ class NotificationController extends Controller
public function index(): View
{
Log::channel('audit')->info('User visits notifications index.');
$title = (string) trans('firefly.administration');
$title = (string) trans('firefly.system_settings');
$mainTitleIcon = 'fa-hand-spock-o';
$subTitle = (string) trans('firefly.title_owner_notifications');
$subTitleIcon = 'envelope-o';
@@ -71,7 +71,7 @@ class NotificationController extends Controller
$forcedAvailability['pushover'] = '' !== $pushoverAppToken && '' !== $pushoverUserToken;
return view(
'admin.notifications.index',
'settings.notifications.index',
compact(
'title',
'subTitle',
@@ -115,7 +115,7 @@ class NotificationController extends Controller
session()->flash('success', (string) trans('firefly.notification_settings_saved'));
return redirect(route('admin.notification.index'));
return redirect(route('settings.notification.index'));
}
public function testNotification(Request $request): RedirectResponse
@@ -140,6 +140,6 @@ class NotificationController extends Controller
session()->flash('success', (string) trans('firefly.notification_test_executed', ['channel' => $channel]));
}
return redirect(route('admin.notification.index'));
return redirect(route('settings.notification.index'));
}
}

View File

@@ -47,7 +47,7 @@ class UpdateController extends Controller
parent::__construct();
$this->middleware(
static function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
return $next($request);
@@ -81,7 +81,7 @@ class UpdateController extends Controller
'alpha' => (string) trans('firefly.update_channel_alpha'),
];
return view('admin.update.index', compact('subTitle', 'subTitleIcon', 'selected', 'options', 'channelSelected', 'channelOptions'));
return view('settings.update.index', compact('subTitle', 'subTitleIcon', 'selected', 'options', 'channelSelected', 'channelOptions'));
}
/**
@@ -100,7 +100,7 @@ class UpdateController extends Controller
app('fireflyconfig')->set('update_channel', $channel);
session()->flash('success', (string) trans('firefly.configuration_updated'));
return redirect(route('admin.update-check'));
return redirect(route('settings.update-check'));
}
/**
@@ -112,6 +112,6 @@ class UpdateController extends Controller
session()->flash($release['level'], $release['message']);
return redirect(route('admin.update-check'));
return redirect(route('settings.update-check'));
}
}

View File

@@ -55,7 +55,7 @@ class UserController extends Controller
$this->middleware(
function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
$this->repository = app(UserRepositoryInterface::class);
@@ -74,12 +74,12 @@ class UserController extends Controller
if ($this->externalIdentity) {
request()->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
$subTitle = (string) trans('firefly.delete_user', ['email' => $user->email]);
return view('admin.users.delete', compact('user', 'subTitle'));
return view('settings.users.delete', compact('user', 'subTitle'));
}
public function deleteInvite(InvitedUser $invitedUser): JsonResponse
@@ -108,12 +108,12 @@ class UserController extends Controller
if ($this->externalIdentity) {
request()->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
$this->repository->destroy($user);
session()->flash('success', (string) trans('firefly.user_deleted'));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
/**
@@ -144,7 +144,7 @@ class UserController extends Controller
'email_changed' => (string) trans('firefly.block_code_email_changed'),
];
return view('admin.users.edit', compact('user', 'canEditDetails', 'subTitle', 'subTitleIcon', 'codes', 'currentUser', 'isAdmin'));
return view('settings.users.edit', compact('user', 'canEditDetails', 'subTitle', 'subTitleIcon', 'codes', 'currentUser', 'isAdmin'));
}
/**
@@ -174,7 +174,7 @@ class UserController extends Controller
}
);
return view('admin.users.index', compact('subTitle', 'subTitleIcon', 'users', 'allowInvites', 'invitedUsers'));
return view('settings.users.index', compact('subTitle', 'subTitleIcon', 'users', 'allowInvites', 'invitedUsers'));
}
public function invite(InviteUserFormRequest $request): RedirectResponse
@@ -186,7 +186,7 @@ class UserController extends Controller
// event!
event(new InvitationCreated($invitee));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
/**
@@ -196,14 +196,14 @@ class UserController extends Controller
*/
public function show(User $user)
{
$title = (string) trans('firefly.administration');
$title = (string) trans('firefly.system_settings');
$mainTitleIcon = 'fa-hand-spock-o';
$subTitle = (string) trans('firefly.single_user_administration', ['email' => $user->email]);
$subTitleIcon = 'fa-user';
$information = $this->repository->getUserData($user);
return view(
'admin.users.show',
'settings.users.show',
compact(
'title',
'mainTitleIcon',
@@ -248,7 +248,7 @@ class UserController extends Controller
if (1 === (int) $request->get('return_to_edit')) {
session()->put('users.edit.fromUpdate', true);
$redirect = redirect(route('admin.users.edit', [$user->id]))->withInput(['return_to_edit' => 1]);
$redirect = redirect(route('settings.users.edit', [$user->id]))->withInput(['return_to_edit' => 1]);
}
// redirect to previous URL.

View File

@@ -74,10 +74,10 @@ class IndexController extends Controller
// order so default and enabled are on top:
$collection = $collection->sortBy(
static function (TransactionCurrency $currency) {
$default = true === $currency->userGroupDefault ? 0 : 1;
$native = true === $currency->userGroupNative ? 0 : 1;
$enabled = true === $currency->userGroupEnabled ? 0 : 1;
return sprintf('%s-%s-%s', $default, $enabled, $currency->code);
return sprintf('%s-%s-%s', $native, $enabled, $currency->code);
}
);
$total = $collection->count();

View File

@@ -26,9 +26,11 @@ namespace FireflyIII\Http\Middleware;
use FireflyIII\Models\Account;
use FireflyIII\Models\Bill;
use FireflyIII\Models\GroupMembership;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\UserGroup;
use FireflyIII\Models\Webhook;
use FireflyIII\User;
use Illuminate\Http\Request;
@@ -53,6 +55,10 @@ class InterestingMessage
app('preferences')->mark();
$this->handleGroupMessage($request);
}
if ($this->userGroupMessage($request)) {
app('preferences')->mark();
$this->handleUserGroupMessage($request);
}
if ($this->accountMessage($request)) {
app('preferences')->mark();
$this->handleAccountMessage($request);
@@ -88,6 +94,15 @@ class InterestingMessage
return null !== $transactionGroupId && null !== $message;
}
private function userGroupMessage(Request $request): bool
{
// get parameters from request.
$transactionGroupId = $request->get('user_group_id');
$message = $request->get('message');
return null !== $transactionGroupId && null !== $message;
}
private function handleGroupMessage(Request $request): void
{
// get parameters from request.
@@ -135,6 +150,43 @@ class InterestingMessage
return null !== $accountId && null !== $message;
}
private function handleUserGroupMessage(Request $request): void
{
// get parameters from request.
$userGroupId = $request->get('user_group_id');
$message = $request->get('message');
/** @var User $user */
$user = auth()->user();
$userGroup = UserGroup::find($userGroupId);
$valid = false;
$memberships = $user->groupMemberships()->get();
/** @var GroupMembership $membership */
foreach ($memberships as $membership) {
if ($membership->userGroup->id === $userGroup->id) {
$valid = true;
break;
}
}
if (false === $valid) {
return;
}
if ('deleted' === $message) {
session()->flash('success', (string) trans('firefly.flash_administration_deleted', ['title' => $userGroup->title]));
}
if ('created' === $message) {
session()->flash('success', (string) trans('firefly.flash_administration_created', ['title' => $userGroup->title]));
}
if ('updated' === $message) {
session()->flash('success', (string) trans('firefly.flash_administration_updated', ['title' => $userGroup->title]));
}
}
private function handleAccountMessage(Request $request): void
{
// get parameters from request.

View File

@@ -37,7 +37,7 @@ class TransactionCurrency extends Model
use ReturnsIntegerIdTrait;
use SoftDeletes;
public ?bool $userGroupDefault = null;
public ?bool $userGroupNative = null;
public ?bool $userGroupEnabled = null;
protected $casts
= [
@@ -73,8 +73,8 @@ class TransactionCurrency extends Model
public function refreshForUser(User $user): void
{
$current = $user->userGroup->currencies()->where('transaction_currencies.id', $this->id)->first();
$default = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup);
$this->userGroupDefault = $default->id === $this->id;
$native = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup);
$this->userGroupNative = $native->id === $this->id;
$this->userGroupEnabled = null !== $current;
}

View File

@@ -293,7 +293,7 @@ class AccountRepository implements AccountRepositoryInterface
/**
* Returns the amount of the opening balance for this account.
*/
public function getOpeningBalanceAmount(Account $account): ?string
public function getOpeningBalanceAmount(Account $account, bool $convertToNative): ?string
{
$journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->where('transactions.account_id', $account->id)
@@ -307,6 +307,9 @@ class AccountRepository implements AccountRepositoryInterface
if (null === $transaction) {
return null;
}
if ($convertToNative) {
return $transaction->native_amount ?? '0';
}
return $transaction->amount;
}

View File

@@ -106,7 +106,7 @@ interface AccountRepositoryInterface
/**
* Returns the amount of the opening balance for this account.
*/
public function getOpeningBalanceAmount(Account $account): ?string;
public function getOpeningBalanceAmount(Account $account, bool $convertToNative): ?string;
/**
* Return date of opening balance as string or null.

View File

@@ -30,6 +30,7 @@ use FireflyIII\Factory\UserGroupFactory;
use FireflyIII\Models\GroupMembership;
use FireflyIII\Models\UserGroup;
use FireflyIII\Models\UserRole;
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
use FireflyIII\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Support\Collection;
@@ -198,6 +199,24 @@ class UserGroupRepository implements UserGroupRepositoryInterface
{
$userGroup->title = $data['title'];
$userGroup->save();
$currency = null;
/** @var CurrencyRepositoryInterface $repository */
$repository = app(CurrencyRepositoryInterface::class);
if (array_key_exists('native_currency_code', $data)) {
$repository->setUser($this->user);
$currency = $repository->findByCode($data['native_currency_code']);
}
if (array_key_exists('native_currency_id', $data) && null === $currency) {
$repository->setUser($this->user);
$currency = $repository->find((int) $data['native_currency_id']);
}
if (null !== $currency) {
$repository->makeDefault($currency);
}
return $userGroup;
}

View File

@@ -180,11 +180,11 @@ class CurrencyRepository implements CurrencyRepositoryInterface
$hasId = $local->contains(static function (TransactionCurrency $entry) use ($current) {
return $entry->id === $current->id;
});
$isDefault = $local->contains(static function (TransactionCurrency $entry) use ($current) {
$isNative = $local->contains(static function (TransactionCurrency $entry) use ($current) {
return 1 === (int) $entry->pivot->group_default && $entry->id === $current->id;
});
$current->userGroupEnabled = $hasId;
$current->userGroupDefault = $isDefault;
$current->userGroupNative = $isNative;
return $current;
});
@@ -195,7 +195,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface
$all = $this->userGroup->currencies()->orderBy('code', 'ASC')->withPivot(['group_default'])->get();
$all->map(static function (TransactionCurrency $current) { // @phpstan-ignore-line
$current->userGroupEnabled = true;
$current->userGroupDefault = 1 === (int) $current->pivot->group_default;
$current->userGroupNative = 1 === (int) $current->pivot->group_default;
return $current;
});

View File

@@ -170,7 +170,7 @@ class CreditRecalculateService
$this->validateOpeningBalance($account, $openingBalance);
}
}
$startOfDebt = $this->repository->getOpeningBalanceAmount($account) ?? '0';
$startOfDebt = $this->repository->getOpeningBalanceAmount($account, false) ?? '0';
$leftOfDebt = app('steam')->positive($startOfDebt);
// Log::debug(sprintf('Start of debt is "%s", so initial left of debt is "%s"', app('steam')->bcround($startOfDebt, 2), app('steam')->bcround($leftOfDebt, 2)));

View File

@@ -51,7 +51,7 @@ class CurrencyUpdateService
$currency->decimal_places = $data['decimal_places'];
}
$currency->userGroupEnabled = null;
$currency->userGroupDefault = null;
$currency->userGroupNative = null;
$currency->save();
return $currency;

View File

@@ -168,25 +168,33 @@ class Amount
return $this->getSystemCurrency();
}
/**
* @deprecated
*/
public function getDefaultCurrencyByUserGroup(UserGroup $userGroup): TransactionCurrency
{
$cache = new CacheProperties();
$cache->addProperty('getDefaultCurrencyByGroup');
return $this->getNativeCurrencyByUserGroup($userGroup);
}
public function getNativeCurrencyByUserGroup(UserGroup $userGroup): TransactionCurrency
{
$cache = new CacheProperties();
$cache->addProperty('getNativeCurrencyByGroup');
$cache->addProperty($userGroup->id);
if ($cache->has()) {
return $cache->get();
}
/** @var null|TransactionCurrency $default */
$default = $userGroup->currencies()->where('group_default', true)->first();
if (null === $default) {
$default = $this->getSystemCurrency();
$native = $userGroup->currencies()->where('group_default', true)->first();
if (null === $native) {
$native = $this->getSystemCurrency();
// could be the user group has no default right now.
$userGroup->currencies()->sync([$default->id => ['group_default' => true]]);
$userGroup->currencies()->sync([$native->id => ['group_default' => true]]);
}
$cache->store($default);
$cache->store($native);
return $default;
return $native;
}
public function getSystemCurrency(): TransactionCurrency

View File

@@ -25,6 +25,8 @@ declare(strict_types=1);
namespace FireflyIII\Support\Export;
use Carbon\Carbon;
use FireflyIII\Enums\AccountTypeEnum;
use FireflyIII\Enums\TransactionTypeEnum;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Account;
@@ -50,6 +52,8 @@ use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\User;
use Illuminate\Support\Collection;
@@ -728,16 +732,15 @@ class ExportDataGenerator
private function exportTransactions(): string
{
// TODO better place for keys?
$header = ['user_id', 'group_id', 'journal_id', 'created_at', 'updated_at', 'group_title', 'type', 'amount', 'foreign_amount', 'currency_code', 'foreign_currency_code', 'description', 'date', 'source_name', 'source_iban', 'source_type', 'destination_name', 'destination_iban', 'destination_type', 'reconciled', 'category', 'budget', 'bill', 'tags', 'notes'];
$header = ['user_id', 'group_id', 'journal_id', 'created_at', 'updated_at', 'group_title', 'type', 'currency_code', 'amount', 'foreign_currency_code', 'foreign_amount', 'native_currency_code', 'native_amount', 'native_foreign_amount', 'description', 'date', 'source_name', 'source_iban', 'source_type', 'destination_name', 'destination_iban', 'destination_type', 'reconciled', 'category', 'budget', 'bill', 'tags', 'notes'];
$metaFields = config('firefly.journal_meta_fields');
$header = array_merge($header, $metaFields);
$default = Amount::getDefaultCurrency();
$collector = app(GroupCollectorInterface::class);
$collector->setUser($this->user);
$collector->setRange($this->start, $this->end)->withAccountInformation()->withCategoryInformation()->withBillInformation()
->withBudgetInformation()->withTagInformation()->withNotes()
;
$collector->setRange($this->start, $this->end)->withAccountInformation()->withCategoryInformation()->withBillInformation()->withBudgetInformation()->withTagInformation()->withNotes();
if (0 !== $this->accounts->count()) {
$collector->setAccounts($this->accounts);
}
@@ -752,9 +755,34 @@ class ExportDataGenerator
/** @var array $journal */
foreach ($journals as $journal) {
$metaData = $repository->getMetaFields($journal['transaction_journal_id'], $metaFields);
$records[] = [
$journal['user_id'], $journal['transaction_group_id'], $journal['transaction_journal_id'], $journal['created_at']->toAtomString(), $journal['updated_at']->toAtomString(), $journal['transaction_group_title'], $journal['transaction_type_type'], $journal['amount'], $journal['foreign_amount'], $journal['currency_code'], $journal['foreign_currency_code'], $journal['description'], $journal['date']->toAtomString(), $journal['source_account_name'], $journal['source_account_iban'], $journal['source_account_type'], $journal['destination_account_name'], $journal['destination_account_iban'], $journal['destination_account_type'], $journal['reconciled'], $journal['category_name'], $journal['budget_name'], $journal['bill_name'],
$metaData = $repository->getMetaFields($journal['transaction_journal_id'], $metaFields);
$amount = Steam::bcround(Steam::negative($journal['amount']), $journal['currency_decimal_places']);
$foreignAmount = null === $journal['foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['foreign_amount']), $journal['foreign_currency_decimal_places']);
$nativeAmount = null === $journal['native_amount'] ? null : Steam::bcround(Steam::negative($journal['native_amount'], $default->decimal_places));
$nativeForeignAmount = null === $journal['native_foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['native_foreign_amount'], $default->decimal_places));
if (TransactionTypeEnum::WITHDRAWAL->value !== $journal['transaction_type_type']) {
$amount = Steam::bcround(Steam::positive($journal['amount']), $journal['currency_decimal_places']);
$foreignAmount = null === $journal['foreign_amount'] ? null : Steam::bcround(Steam::positive($journal['foreign_amount']), $journal['foreign_currency_decimal_places']);
$nativeAmount = null === $journal['native_amount'] ? null : Steam::bcround(Steam::positive($journal['native_amount'], $default->decimal_places));
$nativeForeignAmount = null === $journal['native_foreign_amount'] ? null : Steam::bcround(Steam::positive($journal['native_foreign_amount'], $default->decimal_places));
}
// opening balance depends on source account type.
if (TransactionTypeEnum::OPENING_BALANCE->value === $journal['transaction_type_type'] && AccountTypeEnum::ASSET->value === $journal['source_account_type']) {
$amount = Steam::bcround(Steam::negative($journal['amount']), $journal['currency_decimal_places']);
$foreignAmount = null === $journal['foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['foreign_amount']), $journal['foreign_currency_decimal_places']);
$nativeAmount = null === $journal['native_amount'] ? null : Steam::bcround(Steam::negative($journal['native_amount'], $default->decimal_places));
$nativeForeignAmount = null === $journal['native_foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['native_foreign_amount'], $default->decimal_places));
}
$records[] = [
$journal['user_id'], $journal['transaction_group_id'], $journal['transaction_journal_id'], $journal['created_at']->toAtomString(), $journal['updated_at']->toAtomString(), $journal['transaction_group_title'], $journal['transaction_type_type'],
// amounts and currencies
$journal['currency_code'], $amount, $journal['foreign_currency_code'], $foreignAmount, $default->code, $nativeAmount, $nativeForeignAmount,
// more fields
$journal['description'], $journal['date']->toAtomString(), $journal['source_account_name'], $journal['source_account_iban'], $journal['source_account_type'], $journal['destination_account_name'], $journal['destination_account_iban'], $journal['destination_account_type'], $journal['reconciled'], $journal['category_name'], $journal['budget_name'], $journal['bill_name'],
$this->mergeTags($journal['tags']),
$this->clearStringKeepNewlines($journal['notes']),

View File

@@ -27,7 +27,9 @@ namespace FireflyIII\Transformers;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Facades\Steam;
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -37,14 +39,18 @@ use Symfony\Component\HttpFoundation\ParameterBag;
class AccountTransformer extends AbstractTransformer
{
protected AccountRepositoryInterface $repository;
protected bool $convertToNative;
protected TransactionCurrency $default;
/**
* AccountTransformer constructor.
*/
public function __construct()
{
$this->parameters = new ParameterBag();
$this->repository = app(AccountRepositoryInterface::class);
$this->parameters = new ParameterBag();
$this->repository = app(AccountRepositoryInterface::class);
$this->convertToNative = Amount::convertToNative();
$this->default = Amount::getDefaultCurrency();
}
/**
@@ -57,22 +63,31 @@ class AccountTransformer extends AbstractTransformer
$this->repository->setUser($account->user);
// get account type:
$fullType = $account->accountType->type;
$accountType = (string) config(sprintf('firefly.shortNamesByFullName.%s', $fullType));
$liabilityType = (string) config(sprintf('firefly.shortLiabilityNameByFullName.%s', $fullType));
$liabilityType = '' === $liabilityType ? null : strtolower($liabilityType);
$liabilityDirection = $this->repository->getMetaValue($account, 'liability_direction');
$convertToNative = Amount::convertToNative();
// get account role (will only work if the type is asset.
// get account role (will only work if the type is asset).
$default = Amount::getDefaultCurrency();
$accountRole = $this->getAccountRole($account, $accountType);
$date = $this->getDate();
$date->endOfDay();
[$currencyId, $currencyCode, $currencySymbol, $decimalPlaces] = $this->getCurrency($account);
[$currencyId, $currencyCode, $currencySymbol, $decimalPlaces] = $this->getCurrency($account, $default);
[$creditCardType, $monthlyPaymentDate] = $this->getCCInfo($account, $accountRole, $accountType);
[$openingBalance, $openingBalanceDate] = $this->getOpeningBalance($account, $accountType);
[$openingBalance, $nativeOpeningBalance, $openingBalanceDate] = $this->getOpeningBalance($account, $accountType, $convertToNative);
[$interest, $interestPeriod] = $this->getInterest($account, $accountType);
$default = $this->default;
if (!$this->convertToNative) {
// reset default currency to NULL, not interesting.
$default = null;
}
$openingBalance = app('steam')->bcround($openingBalance, $decimalPlaces);
$includeNetWorth = '0' !== $this->repository->getMetaValue($account, 'include_net_worth');
$longitude = null;
@@ -90,41 +105,56 @@ class AccountTransformer extends AbstractTransformer
if (!in_array(strtolower($accountType), ['liability', 'liabilities', 'asset'], true)) {
$order = null;
}
// balance, native balance, virtual balance, native virtual balance?
$finalBalance = Steam::finalAccountBalance($account, $date);
if ($convertToNative) {
$finalBalance['balance'] = $finalBalance[$currencyCode] ?? '0';
}
$currentBalance = app('steam')->bcround($finalBalance['balance'] ?? '0', $decimalPlaces);
$nativeCurrentBalance = $convertToNative ? app('steam')->bcround($finalBalance['native_balance'] ?? '0', $default->decimal_places) : null;
return [
'id' => (string) $account->id,
'created_at' => $account->created_at->toAtomString(),
'updated_at' => $account->updated_at->toAtomString(),
'active' => $account->active,
'order' => $order,
'name' => $account->name,
'type' => strtolower($accountType),
'account_role' => $accountRole,
'currency_id' => $currencyId,
'currency_code' => $currencyCode,
'currency_symbol' => $currencySymbol,
'currency_decimal_places' => $decimalPlaces,
'current_balance' => app('steam')->bcround(Steam::finalAccountBalance($account, $date)['balance'] ?? '0', $decimalPlaces),
'current_balance_date' => $date->toAtomString(),
'notes' => $this->repository->getNoteText($account),
'monthly_payment_date' => $monthlyPaymentDate,
'credit_card_type' => $creditCardType,
'account_number' => $this->repository->getMetaValue($account, 'account_number'),
'iban' => '' === $account->iban ? null : $account->iban,
'bic' => $this->repository->getMetaValue($account, 'BIC'),
'virtual_balance' => app('steam')->bcround($account->virtual_balance, $decimalPlaces),
'opening_balance' => $openingBalance,
'opening_balance_date' => $openingBalanceDate,
'liability_type' => $liabilityType,
'liability_direction' => $liabilityDirection,
'interest' => $interest,
'interest_period' => $interestPeriod,
'current_debt' => $this->repository->getMetaValue($account, 'current_debt'),
'include_net_worth' => $includeNetWorth,
'longitude' => $longitude,
'latitude' => $latitude,
'zoom_level' => $zoomLevel,
'links' => [
'id' => (string) $account->id,
'created_at' => $account->created_at->toAtomString(),
'updated_at' => $account->updated_at->toAtomString(),
'active' => $account->active,
'order' => $order,
'name' => $account->name,
'type' => strtolower($accountType),
'account_role' => $accountRole,
'currency_id' => $currencyId,
'currency_code' => $currencyCode,
'currency_symbol' => $currencySymbol,
'currency_decimal_places' => $decimalPlaces,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'current_balance' => $currentBalance,
'native_current_balance' => $nativeCurrentBalance,
'current_balance_date' => $date->toAtomString(),
'notes' => $this->repository->getNoteText($account),
'monthly_payment_date' => $monthlyPaymentDate,
'credit_card_type' => $creditCardType,
'account_number' => $this->repository->getMetaValue($account, 'account_number'),
'iban' => '' === $account->iban ? null : $account->iban,
'bic' => $this->repository->getMetaValue($account, 'BIC'),
'virtual_balance' => app('steam')->bcround($account->virtual_balance, $decimalPlaces),
'native_virtual_balance' => $this->convertToNative ? app('steam')->bcround($account->native_virtual_balance, $default->decimal_places) : null,
'opening_balance' => $openingBalance,
'native_opening_balance' => $nativeOpeningBalance,
'opening_balance_date' => $openingBalanceDate,
'liability_type' => $liabilityType,
'liability_direction' => $liabilityDirection,
'interest' => $interest,
'interest_period' => $interestPeriod,
'current_debt' => $this->repository->getMetaValue($account, 'current_debt'),
'include_net_worth' => $includeNetWorth,
'longitude' => $longitude,
'latitude' => $latitude,
'zoom_level' => $zoomLevel,
'links' => [
[
'rel' => 'self',
'uri' => '/accounts/'.$account->id,
@@ -156,16 +186,13 @@ class AccountTransformer extends AbstractTransformer
return $date;
}
/**
* @throws FireflyException
*/
private function getCurrency(Account $account): array
{
$currency = $this->repository->getAccountCurrency($account);
// only grab default when result is null:
if (null === $currency) {
$currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup);
$currency = $this->default;
}
$currencyId = (string) $currency->id;
$currencyCode = $currency->code;
@@ -203,14 +230,15 @@ class AccountTransformer extends AbstractTransformer
/**
* TODO refactor call to get~OpeningBalanceAmount / Date because it is a lot of queries
*/
private function getOpeningBalance(Account $account, string $accountType): array
private function getOpeningBalance(Account $account, string $accountType, bool $convertToNative): array
{
$openingBalance = null;
$openingBalanceDate = null;
$openingBalance = null;
$openingBalanceDate = null;
$nativeOpeningBalance = null;
if (in_array($accountType, ['asset', 'liabilities'], true)) {
$amount = $this->repository->getOpeningBalanceAmount($account);
$openingBalance = $amount;
$openingBalanceDate = $this->repository->getOpeningBalanceDate($account);
$openingBalance = $this->repository->getOpeningBalanceAmount($account, false);
$nativeOpeningBalance = $this->repository->getOpeningBalanceAmount($account, true);
$openingBalanceDate = $this->repository->getOpeningBalanceDate($account);
}
if (null !== $openingBalanceDate) {
$object = Carbon::createFromFormat('Y-m-d H:i:s', $openingBalanceDate, config('app.timezone'));
@@ -220,7 +248,7 @@ class AccountTransformer extends AbstractTransformer
$openingBalanceDate = $object->toAtomString();
}
return [$openingBalance, $openingBalanceDate];
return [$openingBalance, $nativeOpeningBalance, $openingBalanceDate];
}
private function getInterest(Account $account, string $accountType): array

View File

@@ -25,9 +25,11 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Models\AvailableBudget;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
/**
* Class AvailableBudgetTransformer
@@ -37,6 +39,8 @@ class AvailableBudgetTransformer extends AbstractTransformer
private NoBudgetRepositoryInterface $noBudgetRepository;
private OperationsRepositoryInterface $opsRepository;
private BudgetRepositoryInterface $repository;
private TransactionCurrency $default;
private bool $convertToNative;
/**
* CurrencyTransformer constructor.
@@ -46,6 +50,8 @@ class AvailableBudgetTransformer extends AbstractTransformer
$this->repository = app(BudgetRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->noBudgetRepository = app(NoBudgetRepositoryInterface::class);
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -56,20 +62,29 @@ class AvailableBudgetTransformer extends AbstractTransformer
$this->repository->setUser($availableBudget->user);
$currency = $availableBudget->transactionCurrency;
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
$data = [
'id' => (string) $availableBudget->id,
'created_at' => $availableBudget->created_at->toAtomString(),
'updated_at' => $availableBudget->updated_at->toAtomString(),
'currency_id' => (string) $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'amount' => app('steam')->bcround($availableBudget->amount, $currency->decimal_places),
'start' => $availableBudget->start_date->toAtomString(),
'end' => $availableBudget->end_date->endOfDay()->toAtomString(),
'spent_in_budgets' => [],
'spent_no_budget' => [],
'links' => [
'id' => (string) $availableBudget->id,
'created_at' => $availableBudget->created_at->toAtomString(),
'updated_at' => $availableBudget->updated_at->toAtomString(),
'currency_id' => (string) $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'amount' => app('steam')->bcround($availableBudget->amount, $currency->decimal_places),
'native_amount' => $this->convertToNative ? app('steam')->bcround($availableBudget->native_amount, $currency->decimal_places) : null,
'start' => $availableBudget->start_date->toAtomString(),
'end' => $availableBudget->end_date->endOfDay()->toAtomString(),
'spent_in_budgets' => [],
'spent_no_budget' => [],
'links' => [
[
'rel' => 'self',
'uri' => '/available_budgets/'.$availableBudget->id,

View File

@@ -28,8 +28,10 @@ use Carbon\Carbon;
use Carbon\CarbonInterface;
use FireflyIII\Models\Bill;
use FireflyIII\Models\ObjectGroup;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Models\BillDateCalculator;
use Illuminate\Support\Collection;
@@ -40,14 +42,18 @@ class BillTransformer extends AbstractTransformer
{
private BillDateCalculator $calculator;
private BillRepositoryInterface $repository;
private TransactionCurrency $default;
private bool $convertToNative;
/**
* BillTransformer constructor.
*/
public function __construct()
{
$this->repository = app(BillRepositoryInterface::class);
$this->calculator = app(BillDateCalculator::class);
$this->repository = app(BillRepositoryInterface::class);
$this->calculator = app(BillDateCalculator::class);
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -58,7 +64,7 @@ class BillTransformer extends AbstractTransformer
*/
public function transform(Bill $bill): array
{
$defaultCurrency = $this->parameters->get('defaultCurrency') ?? app('amount')->getDefaultCurrency();
$default = $this->parameters->get('defaultCurrency') ?? $this->default;
$paidData = $this->paidData($bill);
$lastPaidDate = $this->getLastPaidDate($paidData);
@@ -141,36 +147,40 @@ class BillTransformer extends AbstractTransformer
}
return [
'id' => $bill->id,
'created_at' => $bill->created_at->toAtomString(),
'updated_at' => $bill->updated_at->toAtomString(),
'currency_id' => (string) $bill->transaction_currency_id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'name' => $bill->name,
'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places),
'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places),
'native_amount_min' => app('steam')->bcround($bill->native_amount_min, $defaultCurrency->decimal_places),
'native_amount_max' => app('steam')->bcround($bill->native_amount_max, $defaultCurrency->decimal_places),
'date' => $bill->date->toAtomString(),
'end_date' => $bill->end_date?->toAtomString(),
'extension_date' => $bill->extension_date?->toAtomString(),
'repeat_freq' => $bill->repeat_freq,
'skip' => $bill->skip,
'active' => $bill->active,
'order' => $bill->order,
'notes' => $notes,
'object_group_id' => null !== $objectGroupId ? (string) $objectGroupId : null,
'object_group_order' => $objectGroupOrder,
'object_group_title' => $objectGroupTitle,
'id' => $bill->id,
'created_at' => $bill->created_at->toAtomString(),
'updated_at' => $bill->updated_at->toAtomString(),
'currency_id' => (string) $bill->transaction_currency_id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'name' => $bill->name,
'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places),
'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places),
'native_amount_min' => $this->convertToNative ? app('steam')->bcround($bill->native_amount_min, $default->decimal_places) : null,
'native_amount_max' => $this->convertToNative ? app('steam')->bcround($bill->native_amount_max, $default->decimal_places) : null,
'date' => $bill->date->toAtomString(),
'end_date' => $bill->end_date?->toAtomString(),
'extension_date' => $bill->extension_date?->toAtomString(),
'repeat_freq' => $bill->repeat_freq,
'skip' => $bill->skip,
'active' => $bill->active,
'order' => $bill->order,
'notes' => $notes,
'object_group_id' => null !== $objectGroupId ? (string) $objectGroupId : null,
'object_group_order' => $objectGroupOrder,
'object_group_title' => $objectGroupTitle,
// these fields need work:
'next_expected_match' => $nem,
'next_expected_match_diff' => $nemDiff,
'pay_dates' => $payDatesFormatted,
'paid_dates' => $paidDataFormatted,
'links' => [
'next_expected_match' => $nem,
'next_expected_match_diff' => $nemDiff,
'pay_dates' => $payDatesFormatted,
'paid_dates' => $paidDataFormatted,
'links' => [
[
'rel' => 'self',
'uri' => '/bills/'.$bill->id,

View File

@@ -25,8 +25,10 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepository;
use FireflyIII\Support\Facades\Amount;
use Illuminate\Support\Collection;
use League\Fractal\Resource\Item;
@@ -40,6 +42,15 @@ class BudgetLimitTransformer extends AbstractTransformer
'budget',
];
protected TransactionCurrency $default;
protected bool $convertToNative;
public function __construct()
{
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
* Include Budget
*
@@ -83,24 +94,34 @@ class BudgetLimitTransformer extends AbstractTransformer
$currencyDecimalPlaces = $currency->decimal_places;
}
$amount = app('steam')->bcround($amount, $currencyDecimalPlaces);
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
return [
'id' => (string) $budgetLimit->id,
'created_at' => $budgetLimit->created_at->toAtomString(),
'updated_at' => $budgetLimit->updated_at->toAtomString(),
'start' => $budgetLimit->start_date->toAtomString(),
'end' => $budgetLimit->end_date->endOfDay()->toAtomString(),
'budget_id' => (string) $budgetLimit->budget_id,
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
'currency_name' => $currencyName,
'currency_decimal_places' => $currencyDecimalPlaces,
'currency_symbol' => $currencySymbol,
'amount' => $amount,
'period' => $budgetLimit->period,
'spent' => $expenses[$currencyId]['sum'] ?? '0',
'notes' => '' === $notes ? null : $notes,
'links' => [
'id' => (string) $budgetLimit->id,
'created_at' => $budgetLimit->created_at->toAtomString(),
'updated_at' => $budgetLimit->updated_at->toAtomString(),
'start' => $budgetLimit->start_date->toAtomString(),
'end' => $budgetLimit->end_date->endOfDay()->toAtomString(),
'budget_id' => (string) $budgetLimit->budget_id,
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
'currency_name' => $currencyName,
'currency_decimal_places' => $currencyDecimalPlaces,
'currency_symbol' => $currencySymbol,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'amount' => $amount,
'native_amount' => $this->convertToNative ? app('steam')->bcround($budgetLimit->native_amount, $default->decimal_places) : null,
'period' => $budgetLimit->period,
'spent' => $expenses[$currencyId]['sum'] ?? '0', // will be in native if convertToNative.
'notes' => '' === $notes ? null : $notes,
'links' => [
[
'rel' => 'self',
'uri' => '/budgets/limits/'.$budgetLimit->id,

View File

@@ -26,8 +26,10 @@ namespace FireflyIII\Transformers;
use FireflyIII\Enums\AutoBudgetType;
use FireflyIII\Models\Budget;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use Illuminate\Support\Collection;
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -38,15 +40,19 @@ class BudgetTransformer extends AbstractTransformer
{
private OperationsRepositoryInterface $opsRepository;
private BudgetRepositoryInterface $repository;
private bool $convertToNative;
private TransactionCurrency $default;
/**
* BudgetTransformer constructor.
*/
public function __construct()
{
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(BudgetRepositoryInterface::class);
$this->parameters = new ParameterBag();
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(BudgetRepositoryInterface::class);
$this->parameters = new ParameterBag();
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -55,50 +61,68 @@ class BudgetTransformer extends AbstractTransformer
public function transform(Budget $budget): array
{
$this->opsRepository->setUser($budget->user);
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
$autoBudget = $this->repository->getAutoBudget($budget);
$spent = [];
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
$autoBudget = $this->repository->getAutoBudget($budget);
$spent = [];
if (null !== $start && null !== $end) {
$spent = $this->beautify($this->opsRepository->sumExpenses($start, $end, null, new Collection([$budget])));
}
$abCurrencyId = null;
$abCurrencyCode = null;
$abType = null;
$abAmount = null;
$abPeriod = null;
$notes = $this->repository->getNoteText($budget);
// info for auto budget.
$abType = null;
$abAmount = null;
$abNative = null;
$abPeriod = null;
$notes = $this->repository->getNoteText($budget);
$types = [
$types = [
AutoBudgetType::AUTO_BUDGET_RESET->value => 'reset',
AutoBudgetType::AUTO_BUDGET_ROLLOVER->value => 'rollover',
AutoBudgetType::AUTO_BUDGET_ADJUSTED->value => 'adjusted',
];
$currency = $autoBudget?->transactionCurrency;
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
if (null === $autoBudget) {
$currency = $default;
}
if (null !== $autoBudget) {
$abCurrencyId = (string) $autoBudget->transactionCurrency->id;
$abCurrencyCode = $autoBudget->transactionCurrency->code;
$abType = $types[$autoBudget->auto_budget_type];
$abAmount = app('steam')->bcround($autoBudget->amount, $autoBudget->transactionCurrency->decimal_places);
$abPeriod = $autoBudget->period;
$abType = $types[$autoBudget->auto_budget_type];
$abAmount = app('steam')->bcround($autoBudget->amount, $currency->decimal_places);
$abNative = $this->convertToNative ? app('steam')->bcround($autoBudget->native_amount, $default->decimal_places) : null;
$abPeriod = $autoBudget->period;
}
return [
'id' => (string) $budget->id,
'created_at' => $budget->created_at->toAtomString(),
'updated_at' => $budget->updated_at->toAtomString(),
'active' => $budget->active,
'name' => $budget->name,
'order' => $budget->order,
'notes' => $notes,
'auto_budget_type' => $abType,
'auto_budget_period' => $abPeriod,
'auto_budget_currency_id' => $abCurrencyId,
'auto_budget_currency_code' => $abCurrencyCode,
'auto_budget_amount' => $abAmount,
'spent' => $spent,
'links' => [
'id' => (string) $budget->id,
'created_at' => $budget->created_at->toAtomString(),
'updated_at' => $budget->updated_at->toAtomString(),
'active' => $budget->active,
'name' => $budget->name,
'order' => $budget->order,
'notes' => $notes,
'auto_budget_type' => $abType,
'auto_budget_period' => $abPeriod,
'currency_id' => null === $autoBudget ? null : (string) $autoBudget->transactionCurrency->id,
'currency_code' => $autoBudget?->transactionCurrency->code,
'currency_name' => $autoBudget?->transactionCurrency->name,
'currency_decimal_places' => $autoBudget?->transactionCurrency->decimal_places,
'currency_symbol' => $autoBudget?->transactionCurrency->symbol,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
// amount and native amount if present.
'auto_budget_amount' => $abAmount,
'native_auto_budget_amount' => $abNative,
'spent' => $spent, // always in native.
'links' => [
[
'rel' => 'self',
'uri' => '/budgets/'.$budget->id,

View File

@@ -25,8 +25,10 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Models\Category;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use FireflyIII\Repositories\Category\OperationsRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use Illuminate\Support\Collection;
/**
@@ -36,14 +38,18 @@ class CategoryTransformer extends AbstractTransformer
{
private OperationsRepositoryInterface $opsRepository;
private CategoryRepositoryInterface $repository;
private TransactionCurrency $default;
private bool $convertToNative;
/**
* CategoryTransformer constructor.
*/
public function __construct()
{
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(CategoryRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(CategoryRepositoryInterface::class);
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -54,25 +60,33 @@ class CategoryTransformer extends AbstractTransformer
$this->opsRepository->setUser($category->user);
$this->repository->setUser($category->user);
$spent = [];
$earned = [];
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
$spent = [];
$earned = [];
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
if (null !== $start && null !== $end) {
$earned = $this->beautify($this->opsRepository->sumIncome($start, $end, null, new Collection([$category])));
$spent = $this->beautify($this->opsRepository->sumExpenses($start, $end, null, new Collection([$category])));
}
$notes = $this->repository->getNoteText($category);
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
$notes = $this->repository->getNoteText($category);
return [
'id' => $category->id,
'created_at' => $category->created_at->toAtomString(),
'updated_at' => $category->updated_at->toAtomString(),
'name' => $category->name,
'notes' => $notes,
'spent' => $spent,
'earned' => $earned,
'links' => [
'id' => $category->id,
'created_at' => $category->created_at->toAtomString(),
'updated_at' => $category->updated_at->toAtomString(),
'name' => $category->name,
'notes' => $notes,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'spent' => $spent,
'earned' => $earned,
'links' => [
[
'rel' => 'self',
'uri' => '/categories/'.$category->id,

View File

@@ -40,7 +40,7 @@ class CurrencyTransformer extends AbstractTransformer
'id' => $currency->id,
'created_at' => $currency->created_at->toAtomString(),
'updated_at' => $currency->updated_at->toAtomString(),
'default' => $currency->userGroupDefault,
'native' => $currency->userGroupNative,
'enabled' => $currency->userGroupEnabled,
'name' => $currency->name,
'code' => $currency->code,

View File

@@ -0,0 +1,127 @@
<?php
/*
* UserGroupTransformer.php
* Copyright (c) 2023 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Enums\UserRoleEnum;
use FireflyIII\Models\GroupMembership;
use FireflyIII\Models\UserGroup;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Transformers\V2\AbstractTransformer;
use FireflyIII\User;
use Illuminate\Support\Collection;
/**
* Class UserGroupTransformer
*/
class UserGroupTransformer extends AbstractTransformer
{
private array $inUse;
private array $memberships;
private array $membershipsVisible;
public function __construct()
{
$this->memberships = [];
$this->membershipsVisible = [];
$this->inUse = [];
}
public function collectMetaData(Collection $objects): Collection
{
if (auth()->check()) {
// collect memberships so they can be listed in the group.
/** @var User $user */
$user = auth()->user();
/** @var UserGroup $userGroup */
foreach ($objects as $userGroup) {
$userGroupId = $userGroup->id;
$this->inUse[$userGroupId] = $user->user_group_id === $userGroupId;
$access = $user->hasRoleInGroupOrOwner($userGroup, UserRoleEnum::VIEW_MEMBERSHIPS) || $user->hasRole('owner');
$this->membershipsVisible[$userGroupId] = $access;
if ($access) {
$groupMemberships = $userGroup->groupMemberships()->get();
/** @var GroupMembership $groupMembership */
foreach ($groupMemberships as $groupMembership) {
$this->memberships[$userGroupId][] = [
'user_id' => (string) $groupMembership->user_id,
'user_email' => $groupMembership->user->email,
'role' => $groupMembership->userRole->title,
'you' => $groupMembership->user_id === $user->id,
];
}
}
}
$this->mergeMemberships();
}
return $objects;
}
private function mergeMemberships(): void
{
$new = [];
foreach ($this->memberships as $groupId => $members) {
$new[$groupId] ??= [];
foreach ($members as $member) {
$mail = $member['user_email'];
$new[$groupId][$mail] ??= [
'user_id' => $member['user_id'],
'user_email' => $member['user_email'],
'you' => $member['you'],
'roles' => [],
];
$new[$groupId][$mail]['roles'][] = $member['role'];
}
}
$this->memberships = $new;
}
/**
* Transform the user group.
*/
public function transform(UserGroup $userGroup): array
{
$currency = Amount::getDefaultCurrencyByUserGroup($userGroup);
return [
'id' => $userGroup->id,
'created_at' => $userGroup->created_at->toAtomString(),
'updated_at' => $userGroup->updated_at->toAtomString(),
'in_use' => $this->inUse[$userGroup->id] ?? false,
'title' => $userGroup->title,
'can_see_members' => $this->membershipsVisible[$userGroup->id] ?? false,
'members' => array_values($this->memberships[$userGroup->id] ?? []),
'native_currency_id' => (string) $currency->id,
'native_currency_name' => $currency->name,
'native_currency_code' => $currency->code,
'native_currency_symbol' => $currency->symbol,
'native_currency_decimal_places' => $currency->decimal_places,
];
// if the user has a specific role in this group, then collect the memberships.
}
}

View File

@@ -46,7 +46,7 @@ class CurrencyTransformer extends AbstractTransformer
'id' => $currency->id,
'created_at' => $currency->created_at->toAtomString(),
'updated_at' => $currency->updated_at->toAtomString(),
'default' => $currency->userGroupDefault,
'native' => $currency->userGroupNative,
'enabled' => $currency->userGroupEnabled,
'name' => $currency->name,
'code' => $currency->code,

70
composer.lock generated
View File

@@ -1874,16 +1874,16 @@
},
{
"name": "laravel/framework",
"version": "v11.37.0",
"version": "v11.38.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "6cb103d2024b087eae207654b3f4b26646119ba5"
"reference": "9d290aa90fcad44048bedca5219d2b872e98772a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/6cb103d2024b087eae207654b3f4b26646119ba5",
"reference": "6cb103d2024b087eae207654b3f4b26646119ba5",
"url": "https://api.github.com/repos/laravel/framework/zipball/9d290aa90fcad44048bedca5219d2b872e98772a",
"reference": "9d290aa90fcad44048bedca5219d2b872e98772a",
"shasum": ""
},
"require": {
@@ -2084,20 +2084,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2025-01-02T20:10:21+00:00"
"time": "2025-01-15T00:06:46+00:00"
},
{
"name": "laravel/passport",
"version": "v12.3.1",
"version": "v12.4.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/passport.git",
"reference": "0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c"
"reference": "b06a413cb18d07123ced88ba8caa432d40e3bb8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/passport/zipball/0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c",
"reference": "0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c",
"url": "https://api.github.com/repos/laravel/passport/zipball/b06a413cb18d07123ced88ba8caa432d40e3bb8c",
"reference": "b06a413cb18d07123ced88ba8caa432d40e3bb8c",
"shasum": ""
},
"require": {
@@ -2160,20 +2160,20 @@
"issues": "https://github.com/laravel/passport/issues",
"source": "https://github.com/laravel/passport"
},
"time": "2024-11-11T20:15:28+00:00"
"time": "2025-01-13T17:40:20+00:00"
},
{
"name": "laravel/prompts",
"version": "v0.3.2",
"version": "v0.3.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
"reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f"
"reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f",
"reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f",
"url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea",
"reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea",
"shasum": ""
},
"require": {
@@ -2217,9 +2217,9 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.3.2"
"source": "https://github.com/laravel/prompts/tree/v0.3.3"
},
"time": "2024-11-12T14:59:47+00:00"
"time": "2024-12-30T15:53:31+00:00"
},
{
"name": "laravel/sanctum",
@@ -10192,16 +10192,16 @@
},
{
"name": "barryvdh/laravel-ide-helper",
"version": "v3.5.3",
"version": "v3.5.4",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
"reference": "271682a2a6d57691e1c7ff378f44e4ae6ac2aba0"
"reference": "980a87e250fc2a7558bc46e07f61c7594500ea53"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/271682a2a6d57691e1c7ff378f44e4ae6ac2aba0",
"reference": "271682a2a6d57691e1c7ff378f44e4ae6ac2aba0",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/980a87e250fc2a7558bc46e07f61c7594500ea53",
"reference": "980a87e250fc2a7558bc46e07f61c7594500ea53",
"shasum": ""
},
"require": {
@@ -10270,7 +10270,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-ide-helper/issues",
"source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.3"
"source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.4"
},
"funding": [
{
@@ -10282,20 +10282,20 @@
"type": "github"
}
],
"time": "2025-01-08T10:01:30+00:00"
"time": "2025-01-14T09:07:00+00:00"
},
{
"name": "barryvdh/reflection-docblock",
"version": "v2.3.0",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
"reference": "818be8de6af4d16ef3ad51ea9234b3d37026ee5f"
"reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/818be8de6af4d16ef3ad51ea9234b3d37026ee5f",
"reference": "818be8de6af4d16ef3ad51ea9234b3d37026ee5f",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/b6ff9f93603561f50e53b64310495d20b8dff5d8",
"reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8",
"shasum": ""
},
"require": {
@@ -10332,9 +10332,9 @@
}
],
"support": {
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.0"
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.1"
},
"time": "2024-12-30T10:35:04+00:00"
"time": "2025-01-18T19:26:32+00:00"
},
{
"name": "cloudcreativity/json-api-testing",
@@ -11818,16 +11818,16 @@
},
{
"name": "phpunit/phpunit",
"version": "11.5.2",
"version": "11.5.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "153d0531b9f7e883c5053160cad6dd5ac28140b3"
"reference": "30e319e578a7b5da3543073e30002bf82042f701"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/153d0531b9f7e883c5053160cad6dd5ac28140b3",
"reference": "153d0531b9f7e883c5053160cad6dd5ac28140b3",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/30e319e578a7b5da3543073e30002bf82042f701",
"reference": "30e319e578a7b5da3543073e30002bf82042f701",
"shasum": ""
},
"require": {
@@ -11848,7 +11848,7 @@
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
"sebastian/code-unit": "^3.0.2",
"sebastian/comparator": "^6.2.1",
"sebastian/comparator": "^6.3.0",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.0",
"sebastian/exporter": "^6.3.0",
@@ -11899,7 +11899,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.2"
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.3"
},
"funding": [
{
@@ -11915,7 +11915,7 @@
"type": "tidelift"
}
],
"time": "2024-12-21T05:51:08+00:00"
"time": "2025-01-13T09:36:00+00:00"
},
{
"name": "sebastian/cli-parser",

View File

@@ -81,7 +81,7 @@ return [
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
// see cer.php for exchange rates feature flag.
],
'version' => 'develop/2025-01-13',
'version' => 'develop/2025-01-19',
'api_version' => '2.1.0', // field is no longer used.
'db_version' => 25,

View File

@@ -137,6 +137,12 @@ return [
],
'v1' => [
'firefly' => [
'administrations_page_title',
'administrations_index_menu',
'temp_administrations_introduction',
'administration_currency_form_help',
'administrations_page_edit_sub_title_js',
'table',
'welcome_back',
'flash_error',
'flash_warning',
@@ -285,6 +291,7 @@ return [
'url',
'active',
'interest_date',
'administration_currency',
'title',
'date',
'book_date',
@@ -302,7 +309,9 @@ return [
'rate',
],
'list' => [
'title',
'active',
'native_currency',
'trigger',
'response',
'delivery',

70
package-lock.json generated
View File

@@ -1123,9 +1123,9 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.5.tgz",
"integrity": "sha512-OHqczNm4NTQlW1ghrVY43FPoiRzbmzNVbcgVnMKZN/RQYezHUSdjACjaX50CD3B7UIAjv39+MlsrVDb3v741FA==",
"version": "7.26.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
"integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3007,9 +3007,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.4.tgz",
"integrity": "sha512-5kz9ScmzBdzTgB/3susoCgfqNDzBjvLL4taparufgSvlwjdLy6UyUy9T/tCpYd2GIdIilCatC4iSQS0QSYHt0w==",
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.5.tgz",
"integrity": "sha512-GLZPrd9ckqEBFMcVM/qRFAP0Hg3qiVEojgEFsx/N/zKXsBzbGF6z5FBDpZ0+Xhp1xr+qRZYjfGr1cWHB9oFHSA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3061,9 +3061,9 @@
}
},
"node_modules/@types/imagemin": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-9.0.0.tgz",
"integrity": "sha512-4IaT+BdPUAFf/AAy3XlFAbqGk4RawhdidxWO5XTe+PJAYAr4d7m2FHiqyEPXbDpwS+IaLIJq5AIjLE9HcwMGBg==",
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-9.0.1.tgz",
"integrity": "sha512-xMWpvrUhtYxl6EeW+UhVH3rwUKhCRx21XddcoWByjDAasXZT5pQaCn0YVnXoTijX5hlTrGqV4TGQL/Htpp00+w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3133,9 +3133,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.10.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz",
"integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
"version": "22.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz",
"integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3160,9 +3160,9 @@
"license": "MIT"
},
"node_modules/@types/qs": {
"version": "6.9.17",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz",
"integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==",
"version": "6.9.18",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz",
"integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==",
"dev": true,
"license": "MIT"
},
@@ -4448,9 +4448,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001692",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
"integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==",
"version": "1.0.30001695",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz",
"integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==",
"dev": true,
"funding": [
{
@@ -5663,9 +5663,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
"version": "1.5.80",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.80.tgz",
"integrity": "sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==",
"version": "1.5.83",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz",
"integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==",
"dev": true,
"license": "ISC"
},
@@ -5797,9 +5797,9 @@
"license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
"integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8854,9 +8854,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.49",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
"integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
"dev": true,
"funding": [
{
@@ -8874,7 +8874,7 @@
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
"nanoid": "^3.3.8",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -9601,13 +9601,13 @@
"license": "MIT"
},
"node_modules/qs": {
"version": "6.13.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz",
"integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==",
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.6"
"side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
@@ -10077,9 +10077,9 @@
"license": "MIT"
},
"node_modules/sass": {
"version": "1.83.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz",
"integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==",
"version": "1.83.4",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz",
"integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@@ -10,6 +10,12 @@
"/build/webhooks/show.js": "/build/webhooks/show.js",
"/build/exchange-rates/index.js": "/build/exchange-rates/index.js",
"/build/exchange-rates/rates.js": "/build/exchange-rates/rates.js",
"/build/administrations/index.js": "/build/administrations/index.js",
"/build/administrations/edit.js": "/build/administrations/edit.js",
"/public/v1/js/administrations/edit.js": "/public/v1/js/administrations/edit.js",
"/public/v1/js/administrations/edit.js.LICENSE.txt": "/public/v1/js/administrations/edit.js.LICENSE.txt",
"/public/v1/js/administrations/index.js": "/public/v1/js/administrations/index.js",
"/public/v1/js/administrations/index.js.LICENSE.txt": "/public/v1/js/administrations/index.js.LICENSE.txt",
"/public/v1/js/app.js": "/public/v1/js/app.js",
"/public/v1/js/app.js.LICENSE.txt": "/public/v1/js/app.js.LICENSE.txt",
"/public/v1/js/app_vue.js": "/public/v1/js/app_vue.js",

View File

@@ -0,0 +1,39 @@
/*
* edit_transactions.js
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import Edit from "../components/administrations/Edit";
/**
* First we will load Axios via bootstrap.js
* jquery and bootstrap-sass preloaded in app.js
* vue, uiv and vuei18n are in app_vue.js
*/
require('../bootstrap');
const i18n = require('../i18n');
let props = {};
const app = new Vue({
i18n,
el: "#administrations_edit",
render: (createElement) => {
return createElement(Edit, {props: props})
},
});

View File

@@ -0,0 +1,39 @@
/*
* edit_transactions.js
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import Index from "../components/administrations/Index";
/**
* First we will load Axios via bootstrap.js
* jquery and bootstrap-sass preloaded in app.js
* vue, uiv and vuei18n are in app_vue.js
*/
require('../bootstrap');
const i18n = require('../i18n');
let props = {};
const app = new Vue({
i18n,
el: "#administrations_index",
render: (createElement) => {
return createElement(Index, {props: props})
},
});

View File

@@ -0,0 +1,173 @@
<!--
- Index.vue
- Copyright (c) 2022 james@firefly-iii.org
-
- This file is part of Firefly III (https://github.com/firefly-iii).
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<template>
<div>
<form accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data">
<input name="_token" type="hidden" value="xxx">
<div v-if="error_message !== ''" class="row">
<div class="col-lg-12">
<div class="alert alert-danger alert-dismissible" role="alert">
<button class="close" data-dismiss="alert" type="button" v-bind:aria-label="$t('firefly.close')"><span
aria-hidden="true">&times;</span></button>
<strong>{{ $t("firefly.flash_error") }}</strong> {{ error_message }}
</div>
</div>
</div>
<div v-if="success_message !== ''" class="row">
<div class="col-lg-12">
<div class="alert alert-success alert-dismissible" role="alert">
<button class="close" data-dismiss="alert" type="button" v-bind:aria-label="$t('firefly.close')"><span
aria-hidden="true">&times;</span></button>
<strong>{{ $t("firefly.flash_success") }}</strong> <span v-html="success_message"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.administrations_page_edit_sub_title_js', {title: this.pageTitle}) }}
</h3>
</div>
<div class="box-body">
{{ $t('firefly.temp_administrations_introduction') }}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.administrations_page_edit_sub_title_js', {title: this.pageTitle}) }}
</h3>
</div>
<div class="box-body">
<Title :value=administration.title :error="errors.title" v-on:input="administration.title = $event"></Title>
<UserGroupCurrency :value=administration.currency_id :error="errors.currency_id"
v-on:input="administration.currency_id = $event"></UserGroupCurrency>
</div>
<div class="box-footer">
<div class="btn-group">
<button id="submitButton" ref="submitButton" class="btn btn-success" @click="submit">
{{ $t('firefly.submit') }}
</button>
</div>
<p class="text-success" v-html="success_message"></p>
<p class="text-danger" v-html="error_message"></p>
</div>
</div>
</div>
</div>
</form>
</div>
</template>
<script>
import Title from "../form/Title.vue";
import WebhookTrigger from "../form/WebhookTrigger.vue";
import UserGroupCurrency from "../form/UserGroupCurrency.vue";
export default {
name: "Edit",
components: {UserGroupCurrency, WebhookTrigger, Title},
data() {
return {
pageTitle: '',
administration: {
title: '',
currency_id: 0,
},
errors: {
title: [],
currency_id: [],
},
error_message: '',
success_message: '',
};
},
mounted() {
const page = window.location.href.split('/');
const administrationId = parseInt(page[page.length - 1]);
this.downloadAdministration(administrationId);
},
methods: {
downloadAdministration: function (id) {
axios.get("./api/v1/user-groups/" + id).then((response) => {
let current = response.data.data;
this.administration = {
id: current.id,
title: current.attributes.title,
currency_id: parseInt(current.attributes.native_currency_id),
currency_code: current.attributes.native_currency_code,
currency_name: current.attributes.native_currency_name,
};
this.pageTitle = this.administration.title;
});
},
submit: function (e) {
// reset messages
this.error_message = '';
this.success_message = '';
this.errors = {
title: [],
currency_id: [],
};
// disable button
$('#submitButton').prop("disabled", true);
// collect data
let data = {
title: this.administration.title,
native_currency_id: parseInt(this.administration.currency_id),
};
// post!
axios.put('./api/v1/user-groups/' + this.administration.id, data).then((response) => {
let administrationId = parseInt(response.data.data.id);
window.location.href = './administrations?user_group_id=' + administrationId + '&message=updated';
}).catch((error) => {
this.error_message = error.response.data.message;
this.errors.title = error.response.data.errors.title;
this.errors.native_currency_id = error.response.data.errors.native_currency_id;
// enable button again
$('#submitButton').prop("disabled", false);
});
if (e) {
e.preventDefault();
}
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,127 @@
<!--
- Index.vue
- Copyright (c) 2022 james@firefly-iii.org
-
- This file is part of Firefly III (https://github.com/firefly-iii).
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<template>
<div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.administrations_index_menu') }}
</h3>
</div>
<div class="box-body">
{{ $t('firefly.temp_administrations_introduction') }}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.table') }}
</h3>
</div>
<div class="box-body no-padding">
<table class="table table-responsive table-hover" v-if="administrations.length > 0"
aria-label="A table.">
<thead>
<tr>
<th>{{ $t('list.title') }}</th>
<th>{{ $t('list.native_currency') }}</th>
<th class="hidden-sm hidden-xs">&nbsp;</th>
</tr>
</thead>
<tbody>
<tr v-for="administration in administrations" :key="administration.id">
<td>
<span v-text="administration.title"></span>
</td>
<td>
<span v-text="administration.currency_name"></span> (<span v-text="administration.currency_code"></span>)
</td>
<td class="hidden-sm hidden-xs">
<div class="btn-group btn-group-xs pull-right">
<button type="button" class="btn btn-default dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ $t('firefly.actions') }} <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right" role="menu">
<li><a :href="'./administrations/edit/' + administration.id"><span class="fa fa-fw fa-pencil"></span>
{{ $t('firefly.edit') }}</a></li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "Index",
data() {
return {
administrations: [],
};
},
mounted() {
this.getAdministrations();
},
methods: {
getAdministrations: function () {
this.administrations = [];
this.downloadAdministrations(1);
},
downloadAdministrations: function (page) {
axios.get("./api/v1/user-groups?page=" + page).then((response) => {
for (let i in response.data.data) {
if (response.data.data.hasOwnProperty(i)) {
let current = response.data.data[i];
let administration = {
id: current.id,
title: current.attributes.title,
currency_code: current.attributes.native_currency_code,
currency_name: current.attributes.native_currency_name,
};
this.administrations.push(administration);
}
}
if (response.data.meta.pagination.current_page < response.data.meta.pagination.total_pages) {
this.downloadAdministrations(response.data.meta.pagination.current_page + 1);
}
});
},
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,107 @@
<!--
- WebhookDelivery.vue
- Copyright (c) 2022 james@firefly-iii.org
-
- This file is part of Firefly III (https://github.com/firefly-iii).
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<template>
<div class="form-group" v-bind:class="{ 'has-error': hasError()}">
<label class="col-sm-4 control-label">
{{ $t('form.administration_currency') }}
</label>
<div class="col-sm-8">
<select
v-model="currency"
:title="$t('form.administration_currency')"
class="form-control"
name="user_group_currency"
>
<option v-for="currency in this.currencies"
:label="currency.name"
:value="currency.id">{{ currency.name }}
</option>
</select>
<p class="help-block" v-text="$t('firefly.administration_currency_form_help')"></p>
<ul v-for="error in this.error" class="list-unstyled">
<li class="text-danger">{{ error }}</li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: "UserGroupCurrency",
data() {
return {
currency : 0,
currencies: [
],
};
},
props: {
error: {
type: Array,
required: true,
default() {
return []
}
},
value: {
type: Number,
required: true,
}
},
mounted() {
this.currency = this.value;
this.downloadCurrencies(1);
},
watch: {
value() {
this.currency = this.value;
},
currency(newValue) {
this.$emit('input', newValue);
}
},
methods: {
downloadCurrencies: function (page) {
axios.get("./api/v1/currencies?enabled=1&page=" + page).then((response) => {
for (let i in response.data.data) {
if (response.data.data.hasOwnProperty(i)) {
let current = response.data.data[i];
let currency = {
id: current.id,
name: current.attributes.name,
code: current.attributes.code,
};
this.currencies.push(currency);
}
}
if (response.data.meta.pagination.current_page < response.data.meta.pagination.total_pages) {
this.downloadCurrencies(parseInt(response.data.meta.pagination.current_page) + 1);
}
});
},
hasError() {
return this.error?.length > 0;
}
},
}
</script>

View File

@@ -187,7 +187,7 @@ export default {
// post!
axios.put('./api/v1/webhooks/' + this.id, data).then((response) => {
let webhookId = response.data.data.id;
let webhookId = parseInt(response.data.data.id);
window.location.href = window.previousUrl + '?webhook_id=' + webhookId + '&message=updated';
}).catch((error) => {

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"welcome_back": "\u041a\u0430\u043a\u0432\u043e \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430?",
"flash_error": "\u0413\u0440\u0435\u0448\u043a\u0430!",
"flash_warning": "\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d",
"interest_date": "\u041f\u0430\u0434\u0435\u0436 \u043d\u0430 \u043b\u0438\u0445\u0432\u0430",
"administration_currency": "Native currency",
"title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",
"date": "\u0414\u0430\u0442\u0430",
"book_date": "\u0414\u0430\u0442\u0430 \u043d\u0430 \u043e\u0441\u0447\u0435\u0442\u043e\u0432\u043e\u0434\u044f\u0432\u0430\u043d\u0435",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",
"active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d \u043b\u0438 \u0435?",
"native_currency": "Native currency",
"trigger": "\u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d\u0435",
"response": "\u041e\u0442\u0433\u043e\u0432\u043e\u0440",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Taula",
"welcome_back": "Qu\u00e8 est\u00e0 passant?",
"flash_error": "Error!",
"flash_warning": "Atenci\u00f3!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Actiu",
"interest_date": "Data d'inter\u00e8s",
"administration_currency": "Native currency",
"title": "T\u00edtol",
"date": "Data",
"book_date": "Data de registre",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtol",
"active": "Est\u00e0 actiu?",
"native_currency": "Native currency",
"trigger": "Activador",
"response": "Resposta",
"delivery": "Lliurament",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabulka",
"welcome_back": "Jak to jde?",
"flash_error": "Chyba!",
"flash_warning": "Varov\u00e1n\u00ed!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Aktivn\u00ed",
"interest_date": "\u00darokov\u00e9 datum",
"administration_currency": "Native currency",
"title": "N\u00e1zev",
"date": "Datum",
"book_date": "Datum rezervace",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "N\u00e1zev",
"active": "Aktivn\u00ed?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabel",
"welcome_back": "Hvad spiller?",
"flash_error": "Fejl!",
"flash_warning": "Advarsel!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Aktiv",
"interest_date": "Rentedato",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Dato",
"book_date": "Bogf\u00f8ringsdato",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titel",
"active": "Aktiv?",
"native_currency": "Native currency",
"trigger": "Udl\u00f8ser",
"response": "Svar",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Finanzverwaltungen",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabelle",
"welcome_back": "\u00dcberblick",
"flash_error": "Fehler!",
"flash_warning": "Achtung!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Aktiv",
"interest_date": "Zinstermin",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Datum",
"book_date": "Buchungsdatum",
@@ -162,7 +169,9 @@
"rate": "Kurs"
},
"list": {
"title": "Titel",
"active": "Aktiv?",
"native_currency": "Native currency",
"trigger": "Ausl\u00f6ser",
"response": "Antwort",
"delivery": "Zustellung",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2",
"welcome_back": "\u03a4\u03b9 \u03c0\u03b1\u03af\u03b6\u03b5\u03b9;",
"flash_error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1!",
"flash_warning": "\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae!",
@@ -145,6 +151,7 @@
"url": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL",
"active": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
"interest_date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03c4\u03bf\u03ba\u03b9\u03c3\u03bc\u03bf\u03cd",
"administration_currency": "Native currency",
"title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",
"date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1",
"book_date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",
"active": "\u0395\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03cc;",
"native_currency": "Native currency",
"trigger": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
"response": "\u0391\u03c0\u03cc\u03ba\u03c1\u03b9\u03c3\u03b7",
"delivery": "\u03a0\u03b1\u03c1\u03ac\u03b4\u03bf\u03c3\u03b7",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Table",
"welcome_back": "What's playing?",
"flash_error": "Error!",
"flash_warning": "Warning!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Active",
"interest_date": "Interest date",
"administration_currency": "Native currency",
"title": "Title",
"date": "Date",
"book_date": "Book date",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Title",
"active": "Is active?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Table",
"welcome_back": "What's playing?",
"flash_error": "Error!",
"flash_warning": "Warning!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Active",
"interest_date": "Interest date",
"administration_currency": "Native currency",
"title": "Title",
"date": "Date",
"book_date": "Book date",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Title",
"active": "Is active?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Mesa",
"welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?",
"flash_error": "\u00a1Error!",
"flash_warning": "\u00a1Advertencia!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Activo",
"interest_date": "Fecha de inter\u00e9s",
"administration_currency": "Native currency",
"title": "T\u00edtulo",
"date": "Fecha",
"book_date": "Fecha de registro",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtulo",
"active": "\u00bfEst\u00e1 Activo?",
"native_currency": "Native currency",
"trigger": "Disparador",
"response": "Respuesta",
"delivery": "Entrega",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Taulukko",
"welcome_back": "Mit\u00e4 kuuluu?",
"flash_error": "Virhe!",
"flash_warning": "Varoitus!",
@@ -145,6 +151,7 @@
"url": "URL-osoite",
"active": "Aktiivinen",
"interest_date": "Korkop\u00e4iv\u00e4",
"administration_currency": "Native currency",
"title": "Otsikko",
"date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4",
"book_date": "Kirjausp\u00e4iv\u00e4",
@@ -162,7 +169,9 @@
"rate": "Kurssi"
},
"list": {
"title": "Otsikko",
"active": "Aktiivinen?",
"native_currency": "Native currency",
"trigger": "Ehto",
"response": "Vastaus",
"delivery": "Toimitus",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Administrations financi\u00e8res",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tableau",
"welcome_back": "Quoi de neuf ?",
"flash_error": "Erreur !",
"flash_warning": "Attention !",
@@ -145,6 +151,7 @@
"url": "Liens",
"active": "Actif",
"interest_date": "Date de valeur (int\u00e9r\u00eats)",
"administration_currency": "Native currency",
"title": "Titre",
"date": "Date",
"book_date": "Date d'enregistrement",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titre",
"active": "Actif ?",
"native_currency": "Native currency",
"trigger": "D\u00e9clencheur",
"response": "R\u00e9ponse",
"delivery": "Distribution",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "T\u00e1bl\u00e1zat",
"welcome_back": "Mi a helyzet?",
"flash_error": "Hiba!",
"flash_warning": "Figyelmeztet\u00e9s!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Akt\u00edv",
"interest_date": "Kamatfizet\u00e9si id\u0151pont",
"administration_currency": "Native currency",
"title": "C\u00edm",
"date": "D\u00e1tum",
"book_date": "K\u00f6nyvel\u00e9s d\u00e1tuma",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "C\u00edm",
"active": "Akt\u00edv?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Meja",
"welcome_back": "Apa yang sedang dimainkan?",
"flash_error": "Kesalahan!",
"flash_warning": "PERINGATAN!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Aktif",
"interest_date": "Tanggal bunga",
"administration_currency": "Native currency",
"title": "Judul",
"date": "Tanggal",
"book_date": "Tanggal buku",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Judul",
"active": "Aktif?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabella",
"welcome_back": "La tua situazione finanziaria",
"flash_error": "Errore!",
"flash_warning": "Avviso!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Attivo",
"interest_date": "Data di valuta",
"administration_currency": "Native currency",
"title": "Titolo",
"date": "Data",
"book_date": "Data contabile",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titolo",
"active": "Attivo",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Risposta",
"delivery": "Consegna",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u8868",
"welcome_back": "\u6982\u8981",
"flash_error": "\u30a8\u30e9\u30fc\uff01",
"flash_warning": "\u8b66\u544a\uff01",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "\u6709\u52b9",
"interest_date": "\u5229\u606f\u65e5",
"administration_currency": "Native currency",
"title": "\u30bf\u30a4\u30c8\u30eb",
"date": "\u65e5\u4ed8",
"book_date": "\u8a18\u5e33\u65e5",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u30bf\u30a4\u30c8\u30eb",
"active": "\u6709\u52b9",
"native_currency": "Native currency",
"trigger": "\u30c8\u30ea\u30ac\u30fc",
"response": "\u30ec\u30b9\u30dd\u30f3\u30b9",
"delivery": "\u914d\u4fe1",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\ud45c",
"welcome_back": "\ubb34\uc2a8 \uc77c\uc774\uc8e0?",
"flash_error": "\uc624\ub958!",
"flash_warning": "\uacbd\uace0!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "\ud65c\uc131",
"interest_date": "\uc774\uc790 \ub0a0\uc9dc",
"administration_currency": "Native currency",
"title": "\uc81c\ubaa9",
"date": "\ub0a0\uc9dc",
"book_date": "\uc608\uc57d\uc77c",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\uc81c\ubaa9",
"active": "\ud65c\uc131 \uc0c1\ud0dc\uc785\ub2c8\uae4c?",
"native_currency": "Native currency",
"trigger": "\ud2b8\ub9ac\uac70",
"response": "\uc751\ub2f5",
"delivery": "\uc804\ub2ec",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabell",
"welcome_back": "Hvordan g\u00e5r det?",
"flash_error": "Feil!",
"flash_warning": "Advarsel!",
@@ -145,6 +151,7 @@
"url": "Nettadresse",
"active": "Aktiv",
"interest_date": "Rentedato",
"administration_currency": "Native currency",
"title": "Tittel",
"date": "Dato",
"book_date": "Bokf\u00f8ringsdato",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Tittel",
"active": "Er aktiv?",
"native_currency": "Native currency",
"trigger": "Utl\u00f8ser",
"response": "Respons",
"delivery": "Levering",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Grootboeken",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabel",
"welcome_back": "Hoe staat het er voor?",
"flash_error": "Fout!",
"flash_warning": "Waarschuwing!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Actief",
"interest_date": "Rentedatum",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Datum",
"book_date": "Boekdatum",
@@ -162,7 +169,9 @@
"rate": "Wisselkoers"
},
"list": {
"title": "Titel",
"active": "Actief?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Reactie",
"delivery": "Bericht",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabell",
"welcome_back": "Korleis g\u00e5r det?",
"flash_error": "Feil!",
"flash_warning": "Advarsel!",
@@ -145,6 +151,7 @@
"url": "Nettadresse",
"active": "Aktiv",
"interest_date": "Rentedato",
"administration_currency": "Native currency",
"title": "Tittel",
"date": "Dato",
"book_date": "Bokf\u00f8ringsdato",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Tittel",
"active": "Er aktiv?",
"native_currency": "Native currency",
"trigger": "Utl\u00f8ser",
"response": "Respons",
"delivery": "Levering",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "Co jest grane?",
"flash_error": "B\u0142\u0105d!",
"flash_warning": "Ostrze\u017cenie!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Aktywny",
"interest_date": "Data odsetek",
"administration_currency": "Native currency",
"title": "Tytu\u0142",
"date": "Data",
"book_date": "Data ksi\u0119gowania",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Tytu\u0142",
"active": "Jest aktywny?",
"native_currency": "Native currency",
"trigger": "Wyzwalacz",
"response": "Odpowied\u017a",
"delivery": "Dor\u0119czenie",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "O que est\u00e1 acontecendo?",
"flash_error": "Erro!",
"flash_warning": "Aten\u00e7\u00e3o!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Ativo",
"interest_date": "Data do juros",
"administration_currency": "Native currency",
"title": "T\u00edtulo",
"date": "Data",
"book_date": "Data de lan\u00e7amento",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtulo",
"active": "Est\u00e1 ativo?",
"native_currency": "Native currency",
"trigger": "Gatilho",
"response": "Resposta",
"delivery": "Entrega",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "Painel de controlo",
"flash_error": "Erro!",
"flash_warning": "Aviso!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Ativo",
"interest_date": "Data de juros",
"administration_currency": "Native currency",
"title": "T\u00edtulo",
"date": "Data",
"book_date": "Data de registo",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtulo",
"active": "Esta ativo?",
"native_currency": "Native currency",
"trigger": "Gatilho",
"response": "Resposta",
"delivery": "Entrega",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabel",
"welcome_back": "Ce se red\u0103?",
"flash_error": "Eroare!",
"flash_warning": "Avertizare!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Activ",
"interest_date": "Data de interes",
"administration_currency": "Native currency",
"title": "Titlu",
"date": "Dat\u0103",
"book_date": "Rezerv\u0103 dat\u0103",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titlu",
"active": "Este activ?",
"native_currency": "Native currency",
"trigger": "Declan\u0219ator",
"response": "R\u0103spuns",
"delivery": "Livrare",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"welcome_back": "\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438?",
"flash_error": "\u041e\u0448\u0438\u0431\u043a\u0430!",
"flash_warning": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435!",
@@ -145,6 +151,7 @@
"url": "\u0421\u0441\u044b\u043b\u043a\u0430",
"active": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439",
"interest_date": "\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432",
"administration_currency": "Native currency",
"title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"date": "\u0414\u0430\u0442\u0430",
"book_date": "\u0414\u0430\u0442\u0430 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f",
@@ -162,7 +169,9 @@
"rate": "\u041e\u0446\u0435\u043d\u0438\u0442\u044c"
},
"list": {
"title": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
"active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d?",
"native_currency": "Native currency",
"trigger": "\u0421\u043e\u0431\u044b\u0442\u0438\u0435",
"response": "\u041e\u0442\u0432\u0435\u0442",
"delivery": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabu\u013eka",
"welcome_back": "Ako to ide?",
"flash_error": "Chyba!",
"flash_warning": "Varovanie!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Akt\u00edvne",
"interest_date": "\u00darokov\u00fd d\u00e1tum",
"administration_currency": "Native currency",
"title": "N\u00e1zov",
"date": "D\u00e1tum",
"book_date": "D\u00e1tum rezerv\u00e1cie",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "N\u00e1zov",
"active": "Akt\u00edvne?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Finan\u010dne administracije",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "Kaj vse se dogaja?",
"flash_error": "Napaka!",
"flash_warning": "Opozorilo!",
@@ -9,7 +15,7 @@
"select_source_account": "Izberite ali vnesite veljavno ime izvornega ra\u010duna",
"split_transaction_title": "Opis razdeljene transakcije",
"errors_submission": "Nekaj je bilo narobe z va\u0161o oddajo. Preverite spodnje napake.",
"is_reconciled": "Is reconciled",
"is_reconciled": "Je usklajena",
"split": "Razdeli",
"single_split": "Razdeli",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transakcija \u0161t. #{ID} (\"{title}\")<\/a> je bila shranjena.",
@@ -34,7 +40,7 @@
"submit": "Potrdite",
"amount": "Znesek",
"date": "Datum",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.",
"is_reconciled_fields_dropped": "Ker je ta transakcija usklajena, ne boste mogli posodobiti ra\u010dunov niti zneskov.",
"tags": "Oznake",
"no_budget": "(brez prora\u010duna)",
"no_bill": "(brez naro\u010dnin)",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Aktivno",
"interest_date": "Datum obresti",
"administration_currency": "Native currency",
"title": "Naslov",
"date": "Datum",
"book_date": "Datum knji\u017eenja",
@@ -162,7 +169,9 @@
"rate": "Te\u010daj"
},
"list": {
"title": "Naslov",
"active": "Aktiviran?",
"native_currency": "Native currency",
"trigger": "Spro\u017eilec",
"response": "Odziv",
"delivery": "Dostava",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabell",
"welcome_back": "Vad spelas?",
"flash_error": "Fel!",
"flash_warning": "Varning!",
@@ -145,6 +151,7 @@
"url": "L\u00e4nk",
"active": "Aktiv",
"interest_date": "R\u00e4ntedatum",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Datum",
"book_date": "Bokf\u00f6ringsdatum",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titel",
"active": "\u00c4r aktiv?",
"native_currency": "Native currency",
"trigger": "Utl\u00f6sare",
"response": "Svar",
"delivery": "Leverans",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tablo",
"welcome_back": "Neler oluyor?",
"flash_error": "Hata!",
"flash_warning": "Uyar\u0131!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "Aktif",
"interest_date": "Faiz tarihi",
"administration_currency": "Native currency",
"title": "Ba\u015fl\u0131k",
"date": "Tarih",
"book_date": "Kitap Tarihi",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Ba\u015fl\u0131k",
"active": "Aktif mi?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u0422\u0430\u0431\u043b\u0438\u0446\u044f",
"welcome_back": "\u0429\u043e \u0432 \u0433\u0430\u043c\u0430\u043d\u0446\u0456?",
"flash_error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430!",
"flash_warning": "\u0423\u0432\u0430\u0433\u0430!",
@@ -145,6 +151,7 @@
"url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430",
"active": "\u0410\u043a\u0442\u0438\u0432\u043d\u043e",
"interest_date": "\u0414\u0430\u0442\u0430 \u043d\u0430\u0440\u0430\u0445\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u0456\u0432",
"administration_currency": "Native currency",
"title": "\u041d\u0430\u0437\u0432\u0430",
"date": "\u0414\u0430\u0442\u0430",
"book_date": "\u0414\u0430\u0442\u0430 \u0431\u0440\u043e\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u041d\u0430\u0437\u0432\u0430",
"active": "\u0427\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439?",
"native_currency": "Native currency",
"trigger": "\u0422\u0440\u0438\u0433\u0435\u0440",
"response": "\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c",
"delivery": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "B\u00e0n",
"welcome_back": "Ch\u00e0o m\u1eebng tr\u1edf l\u1ea1i?",
"flash_error": "L\u1ed7i!",
"flash_warning": "C\u1ea3nh b\u00e1o!",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "H\u00e0nh \u0111\u1ed9ng",
"interest_date": "Ng\u00e0y l\u00e3i",
"administration_currency": "Native currency",
"title": "Ti\u00eau \u0111\u1ec1",
"date": "Ng\u00e0y",
"book_date": "Ng\u00e0y \u0111\u1eb7t s\u00e1ch",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Ti\u00eau \u0111\u1ec1",
"active": "\u0110ang ho\u1ea1t \u0111\u1ed9ng?",
"native_currency": "Native currency",
"trigger": "K\u00edch ho\u1ea1t",
"response": "\u0110\u00e1p l\u1ea1i",
"delivery": "Ph\u00e2n ph\u1ed1i",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u8868\u683c",
"welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f",
"flash_error": "\u9519\u8bef\uff01",
"flash_warning": "\u8b66\u544a\uff01",
@@ -9,7 +15,7 @@
"select_source_account": "\u8bf7\u9009\u62e9\u6216\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u6e90\u5e10\u6237\u540d\u79f0",
"split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0",
"errors_submission": "\u60a8\u7684\u63d0\u4ea4\u6709\u8bef\uff0c\u8bf7\u67e5\u770b\u4e0b\u9762\u8f93\u51fa\u7684\u9519\u8bef\u4fe1\u606f\u3002",
"is_reconciled": "Is reconciled",
"is_reconciled": "\u5df2\u6838\u9500",
"split": "\u62c6\u5206",
"single_split": "\u62c6\u5206",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\u4ea4\u6613 #{ID} (\u201c{title}\u201d)<\/a> \u5df2\u4fdd\u5b58\u3002",
@@ -131,11 +137,11 @@
"response": "\u54cd\u5e94",
"visit_webhook_url": "\u8bbf\u95ee webhook URL",
"reset_webhook_secret": "\u91cd\u7f6e webhook \u5bc6\u94a5",
"header_exchange_rates": "Exchange rates",
"header_exchange_rates": "\u6c47\u7387",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.",
"header_exchange_rates_rates": "Exchange rates",
"header_exchange_rates_rates": "\u6c47\u7387",
"header_exchange_rates_table": "Table with exchange rates",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"add_new_rate": "Add a new exchange rate",
@@ -145,6 +151,7 @@
"url": "\u7f51\u5740",
"active": "\u542f\u7528",
"interest_date": "\u5229\u606f\u65e5\u671f",
"administration_currency": "Native currency",
"title": "\u6807\u9898",
"date": "\u65e5\u671f",
"book_date": "\u767b\u8bb0\u65e5\u671f",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u6807\u9898",
"active": "\u662f\u5426\u542f\u7528\uff1f",
"native_currency": "Native currency",
"trigger": "\u89e6\u53d1\u6761\u4ef6",
"response": "\u7b54\u590d",
"delivery": "\u4ea4\u4ed8",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u8868\u683c",
"welcome_back": "What's playing?",
"flash_error": "\u932f\u8aa4\uff01",
"flash_warning": "\u8b66\u544a\uff01",
@@ -145,6 +151,7 @@
"url": "URL",
"active": "\u555f\u7528",
"interest_date": "\u5229\u7387\u65e5\u671f",
"administration_currency": "Native currency",
"title": "\u6a19\u984c",
"date": "\u65e5\u671f",
"book_date": "\u767b\u8a18\u65e5\u671f",
@@ -162,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u6a19\u984c",
"active": "\u662f\u5426\u555f\u7528\uff1f",
"native_currency": "Native currency",
"trigger": "\u89f8\u767c\u5668",
"response": "\u56de\u61c9",
"delivery": "Delivery",

View File

@@ -50,3 +50,7 @@ mix.js('src/webhooks/show.js', 'build/webhooks').vue({version: 2}).copy('build',
// exchange rates
mix.js('src/exchange-rates/index.js', 'build/exchange-rates').vue({version: 2});
mix.js('src/exchange-rates/rates.js', 'build/exchange-rates').vue({version: 2});
// administrations
mix.js('src/administrations/index.js', 'build/administrations').vue({version: 2});
mix.js('src/administrations/edit.js', 'build/administrations').vue({version: 2});

File diff suppressed because it is too large Load Diff

View File

@@ -26,6 +26,7 @@ declare(strict_types=1);
return [
// new user:
'administration_currency' => 'Native currency',
'bank_name' => 'Bank name',
'bank_balance' => 'Balance',
'current_balance' => 'Current balance',

View File

@@ -29,6 +29,7 @@ return [
'icon' => 'Icon',
'id' => 'ID',
'create_date' => 'Created at',
'native_currency' => 'Native currency',
'update_date' => 'Updated at',
'updated_at' => 'Updated at',
'balance_before' => 'Balance before',

View File

@@ -49,6 +49,7 @@ return [
'date_or_time' => 'The value must be a valid date or time value (ISO 8601).',
'source_equals_destination' => 'The source account equals the destination account.',
'unique_account_number_for_user' => 'It looks like this account number is already in use.',
'unique_user_group_for_user' => 'It looks like this administration title is already in use.',
'unique_iban_for_user' => 'It looks like this IBAN is already in use.',
'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"',
'deleted_user' => 'Due to security constraints, you cannot register using this email address.',

View File

@@ -0,0 +1,8 @@
{% set VUE_SCRIPT_NAME = 'administrations/edit' %}
{% extends './layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render }}
{% endblock %}
{% block content %}
<div id="administrations_edit"></div>
{% endblock %}

View File

@@ -1 +1,8 @@
This feature is only available in the v2 layout.
{% set VUE_SCRIPT_NAME = 'administrations/index' %}
{% extends './layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render }}
{% endblock %}
{% block content %}
<div id="administrations_index"></div>
{% endblock %}

View File

@@ -56,12 +56,6 @@
<span class="fa fa-fw fa-check-square-o"></span>
{{ 'enable_currency'|_ }}</a>
{% endif %}
{# Make currency default. #}
{% if currency.id != defaultCurrency.id %}
<button data-code="{{ currency.code }}" class="make_default btn btn-default"><span
class="fa fa-fw fa-star"></span> {{ 'make_default_currency'|_ }}</button>
{% endif %}
</div>
</td>
<td>
@@ -70,7 +64,7 @@
{% endif %}
{{ currency.name }} ({{ currency.code }}) ({{ currency.symbol|raw }})
{% if currency.id == defaultCurrency.id %}
<span class="label label-success" id="default-currency">{{ 'default_currency'|_ }}</span>
<span class="label label-success" id="default-currency">{{ 'native_currency_button'|_ }}</span>
{% endif %}
{% if currency.userGroupEnabled == false %}

View File

@@ -3,7 +3,7 @@
<head>
<!--
If the base href URL begins with "http://" but you are sure it should start with "https://",
please visit the following page: https://bit.ly/FF3-base-href
please visit the following page: https://bit.ly/FF3-broken-base-href
-->
<base href="{{ route('index', null, true) }}/">
<meta charset="UTF-8">

View File

@@ -189,7 +189,7 @@
</li>
{% endif %}
<li class="{{ activeRoutePartial('admin') }} {{ activeRoutePartial('profile') }} {{ activeRoutePartial('preferences') }} {{ activeRoutePartial('currencies') }} {{ activeRoutePartial('exchange-rates') }} treeview"
<li class="{{ activeRoutePartial('administrations') }} {{ activeRoutePartial('setting') }} {{ activeRoutePartial('profile') }} {{ activeRoutePartial('preferences') }} {{ activeRoutePartial('currencies') }} {{ activeRoutePartial('exchange-rates') }} treeview"
id="option-menu">
<a href="#">
<em class="fa fa-sliders fa-fw"></em>
@@ -227,11 +227,17 @@
</a>
</li>
{% endif %}
<li class="{{ activeRoutePartial('administrations') }}">
<a class="{{ activeRoutePartial('administration') }}" href="{{ route('administrations.index') }}">
<span class="fa fa-angle-right fa-fw"></span>
<span>{{ 'administrations_index_menu'|_ }}</span>
</a>
</li>
{% if hasRole('owner') %}
<li class="{{ activeRoutePartial('admin') }}">
<a class="{{ activeRoutePartial('admin') }}" href="{{ route('admin.index') }}">
<li class="{{ activeRoutePartial('settings') }}">
<a class="{{ activeRoutePartial('settings') }}" href="{{ route('settings.index') }}">
<span class="fa fa-angle-right fa-fw"></span>
<span>{{ 'administration'|_ }}</span>
<span>{{ 'system_settings'|_ }}</span>
</a>
</li>
{% endif %}

View File

@@ -4,7 +4,7 @@
{{ Breadcrumbs.render }}
{% endblock %}
{% block content %}
<form action="{{ route('admin.configuration.index.post') }}" method="post" id="store" class="form-horizontal">
<form action="{{ route('settings.configuration.index.post') }}" method="post" id="store" class="form-horizontal">
<div class="row">

View File

@@ -13,11 +13,11 @@
<div class="box-body">
<ul>
<li>
<a href="{{ route('admin.configuration.index') }}">{{ 'firefly_instance_configuration'|_ }}</a>
<a href="{{ route('settings.configuration.index') }}">{{ 'firefly_instance_configuration'|_ }}</a>
</li>
<li><a href="{{ route('admin.links.index') }}">{{ 'journal_link_configuration'|_ }}</a></li>
<li><a href="{{ route('admin.update-check') }}">{{ 'update_check_title'|_ }}</a></li>
<li><a href="{{ route('admin.notification.index') }}">{{ 'settings_notifications'|_ }}</a></li>
<li><a href="{{ route('settings.links.index') }}">{{ 'journal_link_configuration'|_ }}</a></li>
<li><a href="{{ route('settings.update-check') }}">{{ 'update_check_title'|_ }}</a></li>
<li><a href="{{ route('settings.notification.index') }}">{{ 'settings_notifications'|_ }}</a></li>
</ul>
</div>
</div>
@@ -27,30 +27,12 @@
</div>
<div class="box-body">
<ul>
<li><a href="{{ route('admin.users') }}">{{ 'list_all_users'|_ }}</a></li>
<li><a href="{{ route('settings.users') }}">{{ 'list_all_users'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">{{ 'send_test_email'|_ }}</h3>
</div>
<form action="{{ route('admin.test-message') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="box-body">
<p>
{{ trans('firefly.send_test_email_text', {email:email})|raw }}
</p>
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success">
<span class="fa fa-envelope"></span> {{ ('send_message')|_ }}
</button>
</div>
</form>
</div>
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">{{ 'admin_maintanance_title'|_ }}</h3>

View File

@@ -6,7 +6,7 @@
{% block content %}
<form method="POST" action="{{ route('admin.links.store') }}" accept-charset="UTF-8" class="form-horizontal">
<form method="POST" action="{{ route('settings.links.store') }}" accept-charset="UTF-8" class="form-horizontal">
<input name="_token" type="hidden" value="{{ csrf_token() }}">
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">

View File

@@ -6,7 +6,7 @@
{% block content %}
<form method="POST" action="{{ route('admin.links.destroy',linkType.id) }}" accept-charset="UTF-8"
<form method="POST" action="{{ route('settings.links.destroy',linkType.id) }}" accept-charset="UTF-8"
class="form-horizontal" id="destroy">
<input name="_token" type="hidden" value="{{ csrf_token() }}">
<div class="row">

View File

@@ -6,7 +6,7 @@
{% block content %}
<form method="post" action="{{ route('admin.links.update', linkType.id) }}" class="form-horizontal"
<form method="post" action="{{ route('settings.links.update', linkType.id) }}" class="form-horizontal"
accept-charset="UTF-8"
enctype="multipart/form-data">
<input type="hidden" name="id" value="{{ linkType.id }}"/>

View File

@@ -27,9 +27,9 @@
<td>
{% if linkType.editable %}
<div class="btn-group btn-group-xs">
<a class="btn btn-default btn-xs" href="{{ route('admin.links.edit',linkType.id) }}"><span
<a class="btn btn-default btn-xs" href="{{ route('settings.links.edit',linkType.id) }}"><span
class="fa fa-fw fa-pencil"></span></a>
<a class="btn btn-danger btn-xs" href="{{ route('admin.links.delete',linkType.id) }}"><span
<a class="btn btn-danger btn-xs" href="{{ route('settings.links.delete',linkType.id) }}"><span
class="fa fa-fw fa-trash-o"></span></a>
</div>
{% endif %}
@@ -44,7 +44,7 @@
{{ journalLinkTranslation('outward', linkType.outward) }}
</td>
<td data-value="{{ linkType.journalCount }}">
<a href="{{ route('admin.links.show', [linkType.id]) }}">{{ linkType.journalCount }}</a>
<a href="{{ route('settings.links.show', [linkType.id]) }}">{{ linkType.journalCount }}</a>
</td>
</tr>
{% endfor %}
@@ -52,7 +52,7 @@
</table>
</div>
<div class="box-footer">
<a href="{{ route('admin.links.create') }}" class="btn btn-success">{{ 'create_new_link_type'|_ }}</a>
<a href="{{ route('settings.links.create') }}" class="btn btn-success">{{ 'create_new_link_type'|_ }}</a>
</div>
</div>
</div>

View File

@@ -6,7 +6,7 @@
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
<form action="{{ route('admin.notification.post') }}" method="post">
<form action="{{ route('settings.notification.post') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="box box-default">
<div class="box-header with-border">
@@ -43,7 +43,7 @@
</div>
</form>
</div>
<form action="{{ route('admin.notification.test') }}" method="post">
<form action="{{ route('settings.notification.test') }}" method="post">
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="box box-default">

View File

@@ -4,7 +4,7 @@
{{ Breadcrumbs.render }}
{% endblock %}
{% block content %}
<form action="{{ route('admin.update-check.post') }}" method="post" id="store" class="form-horizontal">
<form action="{{ route('settings.update-check.post') }}" method="post" id="store" class="form-horizontal">
<div class="row">
@@ -50,7 +50,7 @@
{{ 'admin_update_check_now_explain'|_ }}
</p>
<p>
<a href="{{ route('admin.update-check.manual') }}" class="btn btn-info">{{ 'check_for_updates_button'|_ }}</a>
<a href="{{ route('settings.update-check.manual') }}" class="btn btn-info">{{ 'check_for_updates_button'|_ }}</a>
</p>
</div>
</div>
@@ -69,7 +69,7 @@
{% endblock %}
{% block scripts %}
<script type="text/javascript" nonce="{{ JS_NONCE }}">
var updateCheckUrl = '{{ route('admin.update-check.manual') }}';
var updateCheckUrl = '{{ route('settings.update-check.manual') }}';
</script>
<script type="text/javascript" src="v1/js/ff/admin/update/index.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}

View File

@@ -6,7 +6,7 @@
{% block content %}
<form method="POST" action="{{ route('admin.users.destroy',user.id) }}" accept-charset="UTF-8" class="form-horizontal" id="destroy">
<form method="POST" action="{{ route('settings.users.destroy',user.id) }}" accept-charset="UTF-8" class="form-horizontal" id="destroy">
<input name="_token" type="hidden" value="{{ csrf_token() }}">
<div class="row">

View File

@@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<form method="post" action="{{ route('admin.users.update',user.id) }}" class="form-horizontal"
<form method="post" action="{{ route('settings.users.update',user.id) }}" class="form-horizontal"
accept-charset="UTF-8"
enctype="multipart/form-data">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>

View File

@@ -7,7 +7,7 @@
{% if allowInvites %}
<div class="row">
<div class="col-lg-6">
<form action="{{ route('admin.users.invite') }}" method="post">
<form action="{{ route('settings.users.invite') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="box box-primary">
<div class="box-header with-border">
@@ -54,15 +54,15 @@
<tr>
<td class="hidden-xs" data-value="{{ user.id }}">
<div class="btn-group btn-group-xs">
<a class="btn btn-default" href="{{ route('admin.users.edit',user.id) }}"><span
<a class="btn btn-default" href="{{ route('settings.users.edit',user.id) }}"><span
class="fa fa-pencil"></span></a>
<a class="btn btn-danger" href="{{ route('admin.users.delete',user.id) }}"><span
<a class="btn btn-danger" href="{{ route('settings.users.delete',user.id) }}"><span
class="fa fa-trash"></span></a>
</div>
</td>
<td class="hidden-xs" data-value="{{ user.id }}">#{{ user.id }}</td>
<td data-value="{{ user.email }}">
<a href="{{ route('admin.users.show',user.id) }}">{{ user.email }}</a></td>
<a href="{{ route('settings.users.show',user.id) }}">{{ user.email }}</a></td>
<td class="hidden-xs" data-value="{{ user.created_at.format('Y-m-d H-i-s') }}">
{{ user.created_at.isoFormat(monthAndDayFormat) }}
{{ user.created_at.format('H:i') }}
@@ -137,7 +137,7 @@
<tr>
<td class="hidden-xs" data-value="{{ user.id }}">
<div class="btn-group btn-group-xs">
<a class="btn btn-danger delete-invite" href="{{ route('admin.users.delete-invite', invitee.id) }}"><span
<a class="btn btn-danger delete-invite" href="{{ route('settings.users.delete-invite', invitee.id) }}"><span
class="fa fa-trash"></span></a>
</div>
</td>

Some files were not shown because too many files have changed in this diff Show More