First code for #616

This commit is contained in:
James Cole 2017-08-20 12:41:31 +02:00
parent 40639dfa37
commit 7684e966fc
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
10 changed files with 245 additions and 0 deletions

View File

@ -0,0 +1,54 @@
<?php
/**
* LinkController.php
* Copyright (c) 2017 thegrumpydictator@gmail.com
* This software may be modified and distributed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International License.
*
* See the LICENSE file for details.
*/
declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Admin;
use FireflyIII\Http\Controllers\Controller;
use View;
/**
* Class LinkController
*
* @package FireflyIII\Http\Controllers\Admin
*/
class LinkController extends Controller
{
/**
*
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
View::share('title', strval(trans('firefly.administration')));
View::share('mainTitleIcon', 'fa-hand-spock-o');
return $next($request);
}
);
}
/**
*
*/
public function index()
{
$subTitle = trans('firefly.journal_link_configuration');
$subTitleIcon = 'fa-link';
return view('admin.link.index', compact('subTitle', 'subTitleIcon'));
}
}

View File

@ -152,6 +152,14 @@ Breadcrumbs::register(
);
Breadcrumbs::register(
'admin.links.index', function (BreadCrumbGenerator $breadcrumbs) {
$breadcrumbs->parent('admin.index');
$breadcrumbs->push(trans('firefly.journal_link_configuration'), route('admin.links.index'));
}
);
/**
* ATTACHMENTS
*/

38
app/Models/LinkType.php Normal file
View File

@ -0,0 +1,38 @@
<?php
/**
* LinkType.php
* Copyright (c) 2017 thegrumpydictator@gmail.com
* This software may be modified and distributed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International License.
*
* See the LICENSE file for details.
*/
declare(strict_types=1);
namespace FireflyIII\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class LinkType
*
* @package FireflyIII\Models
*/
class LinkType extends Model
{
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts
= [
'created_at' => 'date',
'updated_at' => 'date',
'deleted_at' => 'date',
'editable' => 'boolean',
];
}

View File

@ -0,0 +1,58 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Class ChangesForV470
*/
class ChangesForV470 extends Migration
{
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('link_types');
Schema::dropIfExists('journal_types');
}
/**
* Run the migrations.
*
* @SuppressWarnings(PHPMD.ShortMethodName)
* @return void
*/
public function up()
{
if (!Schema::hasTable('link_types')) {
Schema::create(
'link_types', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->softDeletes();
$table->string('name');
$table->string('outward');
$table->string('inward');
$table->boolean('editable');
}
);
}
if (!Schema::hasTable('journal_links')) {
Schema::create(
'journal_links', function (Blueprint $table) {
$table->increments('id');
$table->integer('link_type_id', false, true);
$table->integer('source_id', false, true);
$table->integer('destination_id', false, true);
$table->text('comment');
$table->integer('sequence', false, true);
}
);
}
}
}

View File

@ -28,6 +28,7 @@ class DatabaseSeeder extends Seeder
$this->call(TransactionCurrencySeeder::class);
$this->call(TransactionTypeSeeder::class);
$this->call(PermissionSeeder::class);
$this->call(LinkTypeSeeder::class);
}
}

View File

@ -0,0 +1,57 @@
<?php
/**
* LinkTypeSeeder.php
* Copyright (c) 2017 thegrumpydictator@gmail.com
* This software may be modified and distributed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International License.
*
* See the LICENSE file for details.
*/
declare(strict_types=1);
use FireflyIII\Models\LinkType;
use Illuminate\Database\Seeder;
/**
* Class LinkTypeSeeder
*/
class LinkTypeSeeder extends Seeder
{
/**
*
*/
public function run()
{
$link = new LinkType;
$link->name = 'Related';
$link->inward = 'relates to';
$link->outward = 'is related to';
$link->editable = false;
$link->save();
$link = new LinkType;
$link->name = 'Refund';
$link->inward = 'refunds';
$link->outward = 'is refunded by';
$link->editable = false;
$link->save();
$link = new LinkType;
$link->name = 'PartialRefund';
$link->inward = 'partially refunds';
$link->outward = 'is partially refunded by';
$link->editable = false;
$link->save();
$link = new LinkType;
$link->name = 'Paid';
$link->inward = 'pays for';
$link->outward = 'is paid for by';
$link->editable = false;
$link->save();
}
}

View File

@ -935,6 +935,8 @@ return [
'block_code_bounced' => 'Email message(s) bounced',
'block_code_expired' => 'Demo account expired',
'no_block_code' => 'No reason for block or user not blocked',
// links
'journal_link_configuration' => 'Transaction links configuration',
// split a transaction:

View File

@ -13,6 +13,7 @@
<div class="box-body">
<ul>
<li><a href="{{ route('admin.configuration.index') }}">{{ 'firefly_instance_configuration'|_ }}</a></li>
<li><a href="{{ route('admin.links.index') }}">{{ 'journal_link_configuration'|_ }}</a></li>
</ul>
</div>
</div>
@ -34,4 +35,6 @@
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,21 @@
{% extends "./layout/default" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">{{ 'journal_link_configuration'|_ }}</h3>
</div>
<div class="box-body">
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -758,6 +758,9 @@ Route::group(
Route::get('users/show/{user}', ['uses' => 'UserController@show', 'as' => 'users.show']);
Route::post('users/update/{user}', ['uses' => 'UserController@update', 'as' => 'users.update']);
// journal links manager
Route::get('links', ['uses' => 'LinkController@index', 'as' => 'links.index']);
// FF configuration:
Route::get('configuration', ['uses' => 'ConfigurationController@index', 'as' => 'configuration.index']);
Route::post('configuration', ['uses' => 'ConfigurationController@postIndex', 'as' => 'configuration.index.post']);